Domanda

Sto cercando di trovare soluzioni alternative per a Bug Bluetooth LE su OSX.In particolare vorrei sapere dove OSX sbaglia nella lettura della tabella Bluetooth LE GATT.Pertanto, sto visualizzando i pacchetti L2CAP in PacketLogger da Hardware IO Tools per XCode.

Quando utilizzo Bluetooth Explorer per connettermi al dispositivo Bluetooth LE, mi aspetto di vedere 3.4.4.9 Leggi per richiesta tipo di gruppo(uuid=0x2800 «Primary Service», StartingHandle=0x0001, EndingHandle=0xffff) per scoprire i servizi primari (o Trova per tipo Valore Richiesta(uuid=0x2800, valore:uuid del servizio)), seguito da 3.4.4.1 Leggi per tipo richiesta(uuid=0x2803 «Caratteristica») per scoprire le caratteristiche.Questo è ciò che vedo quando annuso i pacchetti da un iPhone (usando un CC2540).

Ma su OSX, le uniche richieste L2CAP che vedo in PacketLogger (e CC2540) dopo la connessione sono:

  1. Leggi per tipo richiesta(tipoattributo=0x2803, StartingHandle=0x001a, EndingHandle=0x001a)
  2. Leggi per tipo richiesta(attributeType=0x2802 «Include», StartingHandle=0x0001, EndingHandle=0x0004)
  3. Leggi per tipo richiesta(tipoattributo=0x2802, StartingHandle=0x0005, EndingHandle=0x0009)
  4. Leggi per tipo richiesta(attributoType=0x2802, StartingHandle=0x0010, EndingHandle=0x0019)
  5. Leggi per tipo richiesta(tipoattributo=0x2802, StartingHandle=0x001a, EndingHandle=0x001a)
  6. Leggi per tipo richiesta(tipoattributo=0x2803, StartingHandle=0x001a, EndingHandle=0x001a)
  7. Leggi per tipo richiesta(tipoattributo=0x2802, StartingHandle=0x0021, EndingHandle=0x0027)
  8. Leggi per tipo richiesta(tipoattributo=0x2802, StartingHandle=0x002b, EndingHandle=0x002e)

Queste non sono richieste sufficienti per scoprire i servizi, ma Bluetooth Explorer elenca a questo punto tutti gli UUID dei servizi.Ciò indica che OSX sa già dove si trovano i servizi su questo dispositivo Bluetooth LE.Blued memorizza nella cache i servizi del dispositivo e li legge all'avvio?Se sì, come posso svuotare la cache?

Ho provato a disattivare il Bluetooth, a uccidere Blued e a riavviare OSX, ma ogni volta OSX non riscopre mai i servizi.

È stato utile?

Soluzione

Sì, blued memorizza nella cache la tabella Bluetooth LE GATT.Se la cache è danneggiata, procedi come segue per eliminarla, grazie a “Il processo azzurrato sta uccidendo la mia CPU”:

  1. Elimina /Library/Preferences/com.apple.Bluetooth.plist.Ciò rimuoverà la conoscenza di tutti i dispositivi Bluetooth e Bluetooth LE collegati.
  2. Uccidi /usr/sbin/blued.Verrà riavviato da launchd.
  3. Eseguire nuovamente il programma Bluetooth LE.PacketLogger verrà ora visualizzato Leggi per tipo di gruppo richieste di riscoperta dei servizi primari.

La memorizzazione nella cache è consentita quando la centrale ha stabilito un "legame" con la periferica (non solo accoppiata), secondo Bluetooth 4.0 Volume 3 Parte G Sezione 2.5.2 Caching degli attributi.Non sono sicuro di come verificare che la parte centrale si sia effettivamente collegata alla periferia, ma presumo che sia così.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top