这段时间尝试把cc2540 usb dongle改造成一个普通的usb hid输入输出设备,遇到一些问题,在此总结一下问题以及解决的方案。主要内容如下:
- linux下hid设备驱动支持
- TI给的代码中如何改动得到一个hid设备
- 相互通信问题及解决
linux hid设备驱动支持
我这里要实现的是一个usb hid设备插上之后,自动变成/dev/hidraw0,可以通过cat 和echo查询和控制这个设备,实现通信。
一般来说内核都会编译出usbhid.ko这个驱动,若没有可以开启相关编译选项,系统起来之后发现没有加载该驱动,加载即可。我这里主要是在函数hidraw_init中固定一下设备号,没什么工作量。
如何把HIDAdvRemoteDongle例程改成普通usb hid设备
TI的代码中存在HIDAdvRemoteDongle例程本身就是usb hid设备,只不过实现的是usb键盘和usb鼠标。此时需要根据usb hid协议修改usb_hid_descriptor.s51文件使其变成普通的usb hid输入输出设备,该文件主要修改endpoint、entity相关描述符。这里需要花一点时间学习ush hid描述符相关。报表描述符如下,其他不列出。
DB 006H, 0A0H, 0FFH ; Usage Page (unk)
DB 009H, 0A5H ; Usage (0xA5)
DB 0A1H, 001H ; Collection (Application)
DB 009H, 0