java中如何从usb发送数据

java中如何从usb发送数据,java,usb,Java,Usb,我正在创建一个java应用程序,其中包括使用库连接的usb设备列表。我的要求是我打开了超级终端,我想通过usb将java代码中的数据发送到超级终端。有人能告诉我怎么做吗?请这是我的java代码,用于查找设备的供应商id和产品id,我尝试了一些代码通过usb进行通信,但它不起作用,有人能告诉我如何使用usb进行通信吗 package com.lakshman.sundeep; import java.nio.ByteBuffer; import org.usb4java.Context; im

我正在创建一个java应用程序,其中包括使用库连接的usb设备列表。我的要求是我打开了超级终端,我想通过usb将java代码中的数据发送到超级终端。有人能告诉我怎么做吗?请这是我的java代码,用于查找设备的供应商id和产品id,我尝试了一些代码通过usb进行通信,但它不起作用,有人能告诉我如何使用usb进行通信吗

package com.lakshman.sundeep;

import java.nio.ByteBuffer;

import org.usb4java.Context;
import org.usb4java.Device;
import org.usb4java.DeviceDescriptor;
import org.usb4java.DeviceHandle;
import org.usb4java.DeviceList;
import org.usb4java.LibUsb;
import org.usb4java.LibUsbException;

public class UTMusb 
{
    public static int vid = 6790;
    public static int pid = 29987;

    public static void main(String[] args) 
    {
        Context context = new Context();
        int result = LibUsb.init(context);
        if(result != LibUsb.SUCCESS)
        {
            throw new LibUsbException("Unable to initialize the usb device",result);
        }
        DeviceList list = new DeviceList();
        result = LibUsb.getDeviceList(null, list);
        if(result < 0 )throw new LibUsbException("Unable to get device list",result);
            try
            {
                for(Device device : list)
                {
                    DeviceDescriptor device_descriptor = new DeviceDescriptor();
                    result = LibUsb.getDeviceDescriptor(device, device_descriptor);
                    if(result != LibUsb.SUCCESS)throw new LibUsbException("Unable to get device descriptor : ",result);
                    System.out.println("Product id is : "+device_descriptor.idProduct()+" "+"Vendor id is : "+device_descriptor.idVendor());
                    if(device_descriptor.idProduct()==pid && device_descriptor.idVendor()==vid)
                    {
                        System.out.println("Product id and vendor id was matched");
                        getDeviceHandle(device);
                    }
                    else
                    {

                        System.out.println("Product id and vendor id was not matched");
                    }

                }

            }
            finally
            {
                LibUsb.freeDeviceList(list, true);
            }


    }

    public static void getDeviceHandle(Device device)
    {
        DeviceHandle handle = new DeviceHandle();
        int result = LibUsb.open(device, handle);
        if(result!=LibUsb.SUCCESS)
        {
            throw new LibUsbException("Unable to open the usb device",result);
        }
        try
        {
            claimDevice(handle,0);
        }
        finally
        {
            LibUsb.close(handle);
        }
    }

    private static void claimDevice(DeviceHandle handle, int interfacenumber) {
         int result = LibUsb.claimInterface(handle, interfacenumber);

         if(result!=LibUsb.SUCCESS)
         {
             throw new LibUsbException("Unabl to claim or take the usb interface",result);
         }
         try
         {
             System.out.println("Usb device taken successfully");
             SendData(handle);
         }
        finally
        {
            result = LibUsb.releaseInterface(handle, interfacenumber);
            if(result!=LibUsb.SUCCESS);
            {
                throw new LibUsbException("Unable to release interface ",result);
            }
        }
    }

    private static void SendData(DeviceHandle handle) 
    {
        ByteBuffer sending_buffer= ByteBuffer.allocateDirect(8);
        sending_buffer.put(new byte[]{1,2,3,4,5,6,7,8});
        int transfered = LibUsb.controlTransfer(handle, (byte)(LibUsb.REQUEST_TYPE_CLASS | LibUsb.RECIPIENT_INTERFACE),(byte)0x09, (short)2, (short)1, sending_buffer, 5000);
        if(transfered < 0)
        {
            throw new LibUsbException("Transfering failed",transfered);
        }
        System.out.println(transfered +"Data bytes sent" );
    }

}
package com.lakshman.sundeep;
导入java.nio.ByteBuffer;
导入org.usb4java.Context;
导入org.usb4java.Device;
导入org.usb4java.DeviceDescriptor;
导入org.usb4java.DeviceHandle;
导入org.usb4java.DeviceList;
导入org.usb4java.LibUsb;
导入org.usb4java.LibUsbException;
公共级UTMusb
{
公共静态int vid=6790;
公共静态int pid=29987;
公共静态void main(字符串[]args)
{
上下文=新上下文();
int result=LibUsb.init(上下文);
如果(结果!=LibUsb.SUCCESS)
{
抛出新的LibUsbException(“无法初始化usb设备”,结果);
}
设备列表=新设备列表();
结果=LibUsb.getDeviceList(空,列表);
如果(结果<0)抛出新的LibUsbException(“无法获取设备列表”,结果);
尝试
{
用于(设备:列表)
{
DeviceDescriptor device_descriptor=新的DeviceDescriptor();
结果=LibUsb.getDeviceDescriptor(设备,设备描述符);
如果(result!=LibUsb.SUCCESS)抛出新的LibUsbException(“无法获取设备描述符:”,result);
System.out.println(“产品id为:“+device\u descriptor.idProduct()+”“+”供应商id为:“+device\u descriptor.idVendor()”);
if(device_descriptor.idProduct()==pid&&device_descriptor.idVendor()==vid)
{
System.out.println(“产品id和供应商id匹配”);
getDeviceHandle(设备);
}
其他的
{
System.out.println(“产品id和供应商id不匹配”);
}
}
}
最后
{
LibUsb.freeDeviceList(list,true);
}
}
公共静态无效getDeviceHandle(设备)
{
DeviceHandle=新的DeviceHandle();
int result=LibUsb.open(设备、句柄);
如果(结果!=LibUsb.SUCCESS)
{
抛出新的LibUsbException(“无法打开usb设备”,结果);
}
尝试
{
索赔装置(手柄,0);
}
最后
{
LibUsb.close(手柄);
}
}
专用静态无效索赔设备(DeviceHandle句柄,int interfacenumber){
int result=LibUsb.claimiinterface(句柄、接口枚举器);
如果(结果!=LibUsb.SUCCESS)
{
抛出新的libusbeexception(“无法声明或获取usb接口”,结果);
}
尝试
{
System.out.println(“成功获取Usb设备”);
发送数据(句柄);
}
最后
{
结果=LibUsb.releaseInterface(句柄、接口枚举器);
if(result!=LibUsb.SUCCESS);
{
抛出新的LibUsbException(“无法释放接口”,结果);
}
}
}
私有静态void SendData(DeviceHandle)
{
ByteBuffer发送_buffer=ByteBuffer.allocateDirect(8);
发送_buffer.put(新字节[]{1,2,3,4,5,6,7,8});
int transferd=LibUsb.controlTransfer(句柄,(字节)(LibUsb.REQUEST_类型_类| LibUsb.RECIPIENT_接口),(字节)0x09,(短)2,(短)1,发送缓冲区,5000);
如果(传输<0)
{
抛出新libusbeexception(“传输失败”,已传输);
}
System.out.println(已传输+“已发送的数据字节”);
}
}

欢迎来到SO。你的问题可以理解为一系列的要求。有代码显示吗?你做了什么研究?这些东西将帮助我们帮助你。祝你好运我编辑了我的问题,你能检查一下吗@MickyDuncan