Android上实现Bluetooth HID device的研究(一)

最近由于公司项目,正在研究在Android上实现HID device,也就是把Android设备模拟成为蓝牙输入设备。

标准的Bluetooth HID应该是工作在L2CAP上的,Android4.2以下和以上使用的协议栈不一样,一个是来自Broadcom的Bluedroid,一个是Bluez,都没有内含HID device的实现。

考虑在Android的应用层建立L2CAP的链接,在上面做HID,也许可以不必受到协议栈不一样的困扰,尽管可以通过Java的反射将L2CAP socket创建,但问题也存在:

1,Bluedroid协议栈里,禁止了L2CAP和SCO socket的连接和监听,如果一定要做,那就一定要改协议栈

2,ServiceRecord的注册,Android没有提供接口可以注册L2CAP链路上的ServiceRecord,只有RFCOMM的可以,这样一来意味着要从上到下去修改。


第二种思路是在协议栈内修改、增加HID device服务,

目前先研究的是Bluez协议栈,注册ServiceRecord可以成功,遇到的问题是:

收到传入的连接的时候,会自动进入HID server的传入连接流程中,不能正常建立连接。由于HID host端是不会注册HID的UUID的,所以没有机会probe device driver(hid),所以这一块的逻辑我还在考虑应该怎么做。


你可能感兴趣的:(Android上实现Bluetooth HID device的研究(一))