2015-06-30 2 views
6

Im пытается открыть L2Cap HID канал и канал прерывания, чтобы я мог отправлять команды HID на устройство Bluetooth.Как установить соединение канала прерывания L2Capp?

Я выполнил всю свою рекламную рекламу и обработку устройства и установил соединение с основной полосой частот.

Канал управления HID открывается нормально. Когда я пытаюсь создать мое соединение kBluetoothL2CAPPSMHIDInterrupt

l2capChannelQueueSpaceAvailable метод

делегат называется (не уверен, что это значит), а затем

l2capChannelOpenComplete

но связи закрывается немедленно, вызывая

l2capChannelClosed

Как правильно открыть эти соединения?

Я долгое время пробирался через инфраструктуру 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); 


} 

Edit: 1

Я приложил мои журналы пакетов. Это странно, запрос

kBluetoothL2CAPPSMSDP 0x0001

получает сделано без меня просил об этом, а потом все начинает отсоединять.

BT Packet Logs

+0

только обновления для заинтересованных лиц. Если ваша служебная запись sdp неверна, соединения L2cap не будут оставаться открытыми. Также вы не подключаете соединение kBluetoothL2CAPPSMSDP. Только прерывание и контроль – dubbeat

+0

вам удалось решить в конце концов? Я пытаюсь и не могу создать устройство HID самостоятельно, но найти хорошие примеры того, как это сделать, это мой самый большой барьер atm – Scott

ответ

0

Согласно журналам его очень ясно, что ваше устройство в режим ограниченной связи, его остается активным в течение 30 секунд или меньше. измените настройки устройства, чтобы сделать его общедоступным.

kBluetoothL2CAPPSMSDP 0x0001

означает Бит 13 - Общество с ограниченной режим обнаружения

Играя с настройками Bluetooth решить проблему

+0

Можете ли вы прояснить это, пожалуйста? Нет, где в моем коде я использую kBluetoothL2CAPPSMSDP. Кажется, он автоматически используется, когда я пытаюсь открыть канал прерывания. Вы имеете в виду изменение какой-либо настройки где-то на моем фактическом mac или в настройках устройства im, пытающегося подключиться? – dubbeat