2012-11-26 8 views
5

L'applicazione CoreBluetooth deve abilitare il "bit di indicazione" nei descrittori di configurazione delle caratteristiche del client. Ecco quello che ho fatto:CoreBluetooth writeValue: forDescriptor: problema

  1. Inizio per eseguire la scansione
  2. Start per collegarsi al dispositivo
  3. chiamata discoverServices
  4. chiamata discoverCharacteristics all'interno del callback

    - (void) periferica: (CBPeripheral *) perifer didDiscoverServices: errore (NSError *)

  5. Chiama discoverDescriptorsForCharacteristic all'interno di callb ack

    - (void) periferica: (CBPeripheral *) didDiscoverCharacteristicsForService periferica: (CBService *) Errore di servizio: (NSError *) Errore

  6. All'interno callback

    - (void) periferica: (CBPeripheral *) didDiscoverDescriptorsForCharacteristic periferica: (CBCharacteristic *) errore caratteristica: (NSError *) errore

ho chiamato:

 if ([[descriptor.UUID representativeString] isEqualToString:@"2902" ]) 
     { 
      const unsigned char raw_data[] = {0x02}; 
      NSData *myData = [NSData dataWithBytes: raw_data length: 2]; 
      [self.cBCP writeValue:myData forDescriptor:descriptor]; 
     } 

Ma la mia app si blocca in writeVale:. Il messaggio di errore nella console è:

Cannot write Client Characteristic Configuration descriptors using this method!

Qualche idea? Grazie

+1

mi chiedo se non v'è alcun codice di esempio utilizzando writeVale: forDescriptor. –

+0

In realtà la mia soluzione non è usata writeValue: forDescriptor. –

+0

Puoi spiegare come abilitare l'indicazione senza usare writeValue: forDescriptor? Sono bloccato nello stesso posto ... – imcc

risposta

-1

Il problema è che non è possibile utilizzare writeValue: forDescriptor: metodo per scrivere il valore di un descrittore di configurazione client (UUID = 2902) come hai fatto tu.

Invece, è necessario utilizzare setNotifyValue: forCharacteristic: metodo della classe CBPeripheral per configurare le indicazioni del client o le notifiche del valore di una caratteristica su un server.

0

Abbastanza vecchia questione, ma dal momento che non ha avuto risposta, sembra come se il metodo setNotifyValue(_:for:) gestirà che per voi, dipende dalle proprietà charcateristics di seguito:

  • notificare solo: notifiche saranno abilitati.
  • Indicare solo: Le indicazioni saranno abilitate.
  • Indicare & Notifica: SOLO Le notifiche saranno abilitate.

Quindi, se è necessario abilitare le indicazioni, la caratteristica deve avere solo la proprietà indica e la notifica deve essere rimossa.

Immagino che la motivazione principale dietro sia che le indicazioni siano molto più lente, quindi iOS preferirà sempre l'opzione più veloce possibile a meno che non sia un requisito da indicare.

Read more on the Apple docs