USB hid 枚举

枚举不成功

我们将hid驱动和udc的组合与hidOTG的组合进行对比来分析。首先我们看bus hound

抓到的udcOTG的包的信息,如下图。

Device  Phase  Data                      Description       Cmd.Phase.Ofs(rep)

------     -----  ------------------------            ----------------       ------------------

  23.1  USTS   c0000011                  xact error               1.1.0(2)     

  23.0  CTL    80 06 00 01  00 00 12 00  GET DESCRIPTOR           3.1.0        

  23.0  IN     12 01 00 02  00 00 00 40  .......@                 3.2.0        

               88 88 01 00  28 02 01 02  ....(...                 3.2.8        

               03 01                     ..                       3.2.16       

  23.0  CTL    80 06 00 02  00 00 09 00  GET DESCRIPTOR           4.1.0        

  23.0  IN     09 02 29 00  01 01 00 c0  ..).....                 4.2.0        

               32                        2                        4.2.8        

  23.0  CTL    80 06 00 02  00 00 29 00  GET DESCRIPTOR           5.1.0        

  23.0  IN     09 02 29 00  01 01 00 c0  ..).....                 5.2.0        

               32 09 04 00  00 02 03 00  2.......                 5.2.8        

               00 04 09 21  11 01 00 01  ...!....                 5.2.16       

               22 7f 01 07  05 81 03 40  "......@                 5.2.24       

  23.0  CTL    00 09 01 00  00 00 00 00  SET CONFIG               6.1.0        

  23.0  CTL    21 0a 00 00  00 00 00 00  SET IDLE                 7.1.0        

  23.0  USTS   c0000004                  stall pid                7.2.0        

  23.0  CTL    81 06 00 22  00 00 bf 01  GET DESCRIPTOR           8.1.0        

  23.0  IN     05 01 09 00  a1 01 85 01  ........                 8.2.0        

               15 00 25 ff  19 01 29 08  ..%...).                 8.2.8        

               95 08 75 08  81 02 85 01  ..u.....                 8.2.16       

               15 00 25 ff  19 01 29 08  ..%...).                 8.2.24       

  23.0  CTL    80 06 00 02  00 00 09 00  GET DESCRIPTOR           9.1.0        

  23.0  IN     09 02 29 00  01 01 00 c0  ..).....                 9.2.0        

               32                        2                        9.2.8        

  23.0  CTL    80 06 00 02  00 00 29 00  GET DESCRIPTOR          10.1.0        

  23.0  IN     09 02 29 00  01 01 00 c0  ..).....                10.2.0        

               32 09 04 00  00 02 03 00  2.......                10.2.8        

               00 04 09 21  11 01 00 01  ...!....                10.2.16       

               22 7f 01 07  05 81 03 40  "......@                10.2.24    

 

   Device  Phase  Data                      Description       Cmd.Phase.Ofs(rep)

    ------  -----    ------------------------          ----------------      ------------------

  23.0  CTL    80 06 00 02  00 00 09 00  GET DESCRIPTOR           1.1.0        

  23.0  CTL    80 06 00 01  00 00 12 00  GET DESCRIPTOR           2.1.0        

  23.0  USTS   c0010000                  canceled                 1.2.0        

  23.0  USTS   c0010000                  canceled                 2.2.0        

  23.0  CTL    00 09 00 00  00 00 00 00  SET CONFIG               3.1.0        

  23.0  USTS   c0010000                  canceled                 3.2.0        

  23.0  CTL    80 06 00 02  00 00 09 00  GET DESCRIPTOR           4.1.0        

  23.0  USTS   c0010000                  canceled                 4.2.0        

对比两组数据信息我们可以发现,udc是以get_device_descriptor开始的,然后响应得到一个IN

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java可以通过使用JNA(Java Native Access)库来进行USB HID编程。JNA库允许Java应用程序调用本地C/C++代码,从而实现对底层硬件的访问。 以下是实现Java USB HID编程的基本步骤: 1. 导入JNA库。 2. 在Java中定义C/C++结构体来表示USB设备的信息,例如Vendor ID、Product ID、USB端口等。 3. 使用JNA库中的函数来枚举系统中的所有USB设备,并获取设备的信息。 4. 打开目标USB设备并建立通信连接。 5. 向USB设备发送数据或从USB设备读取数据。 以下是一个简单的Java USB HID编程示例代码: ``` import com.sun.jna.*; import com.sun.jna.ptr.*; public class USBHID { public interface CLibrary extends Library { CLibrary INSTANCE = (CLibrary) Native.loadLibrary("c", CLibrary.class); int ioctl(int fd, int request, IntByReference data); } public static void main(String[] args) { // Vendor ID and Product ID of the USB device int vendor_id = 0x1234; int product_id = 0x5678; // Open the USB device String device_path = "/dev/hidraw0"; int fd = CLibrary.INSTANCE.open(device_path, O_RDWR); // Send data to the USB device byte[] data = new byte[8]; data[0] = 0x00; data[1] = 0x01; CLibrary.INSTANCE.write(fd, data, data.length); // Read data from the USB device byte[] buffer = new byte[8]; int count = CLibrary.INSTANCE.read(fd, buffer, buffer.length); // Close the USB device CLibrary.INSTANCE.close(fd); } } ``` 注意:上述示例代码中的部分函数和结构体定义可能需要根据实际情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值