我试图打开 L2Cap HID 通道和中断通道,以便我可以将 HID 命令发送到蓝牙设备。
我已经完成了所有服务广告和设备配对并建立了基带连接。
隐藏控制通道可以正常打开。当我尝试创建我的 kBluetoothL2CAPPSMHIDInterrupt 连接时
l2capChannelQueueSpaceAvailable
调用委托方法(不确定这是什么意思),然后
l2capChannelOpenComplete
但连接立即关闭调用
l2capChannel 关闭
如何正确打开这些连接?
我花了很长时间研究 IOBlueTooth 框架和 bluetooth.org HID 规范,但几乎没有任何有用的信息(至少我能找到)。
当我追踪我的 L2Cap 通道时,我看到一些空值
mIncomingDataListener
和
mEventDataListener
. 我不知道如何设置这些,或者它们是否与我的问题有关....只是推测。
下面的代码片段是我迄今为止在建立与设备的连接后进行连接的尝试。
-(void)establishL2CappConnections:(IOBluetoothDevice*)device
{
IOReturn r;
IOBluetoothL2CAPChannel *ch1;
r = [device openL2CAPChannelSync:&ch1
withPSM:(BluetoothL2CAPPSM)kBluetoothL2CAPPSMHIDControl
delegate:self];
self.mL2CappChannel=ch1;
NSLog(@"r == %i",r);
IOBluetoothL2CAPChannel *ch2;
r = [device openL2CAPChannelSync:&ch2
withPSM:(BluetoothL2CAPPSM)kBluetoothL2CAPPSMHIDInterrupt
delegate:self];
self.mL2CappInterruptChannel=ch2;
NSLog(@"r == %i",r);
}
编辑:1
我附上了我的数据包日志。很奇怪,请求
k蓝牙L2CAPPSMSDP 0x0001
在没有我要求的情况下制作,然后一切都开始断开连接。