第三方库LibUSB在Android系统上的简单使用
程序员文章站
2023-11-02 12:25:28
背景:公司开发一个usb设备的固件升级工具。
1、为毛使用libusb库?因为使用android host api读取不到我想要的usb设备。有类似的兄弟姐妹们请看自定义hid设备与android设...
背景:公司开发一个usb设备的固件升级工具。
1、为毛使用libusb库?因为使用android host api读取不到我想要的usb设备。有类似的兄弟姐妹们请看自定义hid设备与android设备通信,看了这篇文章之后,是不是觉得可以不用了?是的,你们说得很对。可能会存在这个小概率事件——没有修改描述符的自定义设备已经发货到客户终端了,客户使用起来不爽,设备商于是更新了固件,需要在android下升级。这种小概率事件被我遇上了。既然遇上了就要解决。于是于是采用第三方库libusb。
2、使用libusb库又会遇到什么问题呢?使用该库存在一个权限问题,官方文档有三种解决办法。https://github.com/libusb/libusb/blob/master/android/readme,不过在开机启动项中修改权限,只能修改一次,如果设备存在几种状态,即:对应不同的pid之间切换。那么只能使用java调用su命令的方法。(这些都针对我要写工具的设备使用)
3、写jni。主要问题就是层级之间数据的转换问题,写过jni的基本都会,这就不用多说了。补充个libusb的api:https://libusb.sourceforge.net/api-1.0/libusb_api.html? ?如果看api也没啥子头绪就看实例代码吧,前面那个github连接中example目录下多个简单实例
4、弄清与设备之间的控制命令通道与数据通道,以及设备切换,命令切换之间的延时关系。开发该app就不再话下了。
5、end!