2015-06-30 18 views
6

Próbuję otworzyć kanał HID kanału L2Cap i przerwań, aby wysyłać polecenia HID do urządzenia bluetooth.Jak mogę ustanowić połączenie kanału przerwań L2Capp?

Zrobiłem wszystkie moje reklamy usługowe i paring urządzenia i ustanowiłem połączenie z basebandem.

Kanał sterowania ukrywaniem otwiera się poprawnie. Kiedy próbuję tworzyć moje połączenie kBluetoothL2CAPPSMHIDInterrupt

l2capChannelQueueSpaceAvailable metoda

delegat nazywa (nie wiem co to znaczy), a następnie

l2capChannelOpenComplete

ale połączenie zamyka natychmiast dzwoniąc pod numer

l2capChannelClosed

Jak można poprawnie otworzyć te połączenia?

Spędziłem dużo czasu, przeglądając framework IOBlueTooth i specyfikację bluetooth.org HID, ale nie ma tam żadnych przydatnych informacji (które mogę znaleźć przynajmniej).

Kiedy prześledzić moje kanały L2CAP widzę pewne wartości zerowe dla

mIncomingDataListener

i

mEventDataListener

. Nie wiem, jak je ustawić lub czy mają coś wspólnego z moim problemem ... po prostu spekulują.

Poniższy fragment kodu jest moją próbą nawiązania połączenia po ustanowieniu połączenia z urządzeniem.

-(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

Mam załączeniu moje dzienniki pakietowych. To dziwne, wniosek o

kBluetoothL2CAPPSMSDP 0x0001

zostanie wykonana bez mną zwracając się do niej, a potem wszystko zaczyna odłączeniem.

BT Packet Logs

+0

tylko aktualizacji dla zainteresowanych osób. Jeśli rekord usługi sdp jest nieprawidłowy, połączenia L2cap nie pozostaną otwarte. Ponadto nie tworzysz samodzielnie połączenia kBluetoothL2CAPPSMSDP. Tylko w przypadku przerwań i kontroli – dubbeat

+0

udało ci się rozwiązać to w końcu? Próbuję i nie uda mi się stworzyć urządzenia HID samemu, ale znalezienie dobrych przykładów, jak to zrobić, to moja największa bariera atm. – Scott

Odpowiedz

0

Zgodnie dzienników jest bardzo jasne, że urządzenie w tryb ograniczonej Connection, jej pozostaje aktywny przez 30 sekund lub mniej. zmień ustawienia urządzenia tak, aby był on ogólnie wykrywalny.

kBluetoothL2CAPPSMSDP 0x0001

oznacza bit 13 - w ograniczonym trybie wykrywania

Odtwarzanie z ustawieniami Bluetooth rozwiąże Twój problem

+0

Czy możesz to wyjaśnić? Nie gdzie w moim kodzie używam kBluetoothL2CAPPSMSDP. Wydaje się, że automatycznie się przyzwyczaja, gdy próbuję otworzyć kanał przerwania. Czy chcesz zmienić jakieś ustawienie gdzieś na moim rzeczywistym macu lub w ustawieniach urządzenia, z którym próbuję się połączyć? – dubbeat