2015-06-30 15 views
6

Sto tentando di aprire un canale HID e canale interrupt L2Cap in modo da poter inviare comandi HID a un dispositivo bluetooth.Come posso stabilire una connessione al canale interrupt L2Capp?

Ho eseguito tutti i miei servizi di pubblicità e paring dei dispositivi e ho stabilito una connessione in banda base.

Il canale di controllo nascosto si apre bene. Quando cerco di creare la mia connessione kBluetoothL2CAPPSMHIDInterrupt

l2capChannelQueueSpaceAvailable metodo

delegato chiamato (non so cosa significa), seguita da

l2capChannelOpenComplete

ma la connessione si chiude immediatamente chiamando

l2capChannelClosed

Come posso aprire correttamente questi connessione?

Ho passato molto tempo a scavare attraverso il framework IOBlueTooth e la specifica HID bluetooth.org ma ci sono solo poche informazioni utili (che posso trovare almeno).

Quando ho tracciare i miei canali L2CAP vedo alcuni valori nulli per

mIncomingDataListener

e

mEventDataListener

. Non so come impostare questi o se hanno qualcosa a che fare con il mio problema .... solo speculando.

Il frammento di codice riportato di seguito è il mio tentativo finora di effettuare le connessioni dopo aver stabilito una connessione al dispositivo.

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

Ho attaccato miei log dei pacchetti. E 'strano, una richiesta di

kBluetoothL2CAPPSMSDP 0x0001

viene fatta senza di me lo richiedono e poi tutto inizia disconnessione.

BT Packet Logs

+0

solo un aggiornamento per le persone interessate. Se il record del servizio sdp non è corretto, le connessioni L2cap non resteranno aperte. Inoltre non si effettua la connessione kBluetoothL2CAPPSMSDP da soli. Solo gli interrupt e controll – dubbeat

+0

sei riuscito a risolvere questo alla fine? Sto provando e fallendo nel creare un dispositivo HID, ma trovare dei buoni esempi su come fare questo è la mia più grande barriera atm – Scott

risposta

0

Come per i log di suo molto chiaro che il dispositivo in modalità di connessione limitata, i suoi rimane attivo per 30 secondi o meno. cambiare le impostazioni del dispositivo per renderlo rilevabile in generale.

kBluetoothL2CAPPSMSDP 0x0001

significa Bit 13 - Modalità rilevabile limitata

Giocando con le impostazioni Bluetooth risolverà il vostro problema

+0

Potete chiarire questo per favore? No dove nel mio codice uso kBluetoothL2CAPPSMSDP. Sembra abituarsi automaticamente quando provo ad aprire un canale di interrupt. Intendi cambiare qualche impostazione nel mio Mac reale o nelle impostazioni del dispositivo in cui stai tentando di connettermi? – dubbeat