2016-05-25 1 views
0

Nous développons une application iOS et Android qui communiquent tous les deux avec un périphérique BLE. Dans certains cas, ce périphérique renvoie une erreur et nous souhaitons utiliser des codes de statut personnalisés pour identifier et différencier les erreurs.iOS CoreBluetooth: Codes d'erreur possibles

Dans notre cas, par exemple, nous avons le code d'erreur 0x80 lorsque vous essayez d'écrire une caractéristique. Lorsque cette erreur est renvoyée, notre application Android affiche correctement une erreur avec le statut 128. Malheureusement, notre application iOS affiche une erreur inconnue.

Error Domain=CBErrorDomain Code=0 "Unknown error." UserInfo=0x15df3cd0 {NSLocalizedDescription=Unknown error.} 

Nous obtenons cette erreur de la méthode normale de délégué CoreBluetooth lors de l'écriture d'une caractéristique

func peripheral(peripheral: CBPeripheral, 
    didWriteValueForCharacteristic characteristic: CBCharacteristic, 
    error: NSError?) 

Dans le apple docs j'ai lu sur erreurs possibles lors d'une transaction BLE ATT. L'énumération CBATTError commence à "0x00 CBATTErrorSuccess" et se termine à "0x11 CBATTErrorInsufficientResources". Ma question est: 0x80 est-il un code d'erreur valide dans iOS lorsque vous travaillez avec des périphériques bluetooth LE ou le code d'erreur 0x80 entraîne-t-il toujours une erreur inconnue du côté iOS car il ne fait pas partie de l'énumération CBATTError?

Merci d'avance pour votre aide!

Editer: J'ai trouvé une autre question liée à ce sujet mais la réponse acceptée n'est plus possible.

Is it possible to programmatically access the error codes logged by CoreBluetooth?

Répondre

0

Lorsque nous utilisons les codes d'erreur définis dans le CBATTError enum nous obtenons les CBAttErrors corrects de retour BLE périphérique. Il semble que Corebluetooth ne peut traiter que ces codes d'erreur. Sinon, il mappe l'erreur sur un NSError inconnu. Ceci est vraiment étrange puisque le chapitre 3.4.1.1 de Bluetooth v4.0 définit les codes d'erreur 0x80 - 0xFF comme

Code d'erreur d'application défini par une spécification de couche supérieure.

Il est également étrange que les codes d'état corrects sont enregistrés dans le journal de l'appareil. Avant iOS 7, il était possible d'accéder à la console de l'appareil comme expliqué here mais malheureusement, ce n'est plus une solution.