2013-03-21 16 views
8

Sto sviluppando un app utilizzando il framework Corebluetooth,corebluetooth errore durante la lettura RSSI: L'operazione è stata annullata

e connettersi a un dispositivo BLE per ottenere il valore RSSI.

ho impostare una funzione per leggere RSSI periodly, il codice del timer è inferiore

NSTimer *timer; 
timer = [NSTimer scheduledTimerWithTimeInterval:1.2f target:self selector:@selector(detectRSSI) userInfo:nil repeats:YES]; 

e il codice detectRSSI è al di sotto

- (void)detectRSSI 
{ 
    [self.peripheral readRSSI]; 
} 

Quindi la domanda è,

le opere di funzione bene, ma quando ho impostato l'intervallo di tempo inferiore a 1,2 secondi,

il p eripheralDidUpdateRSSI in modo casuale segnalare messaggio di errore simile a questo:

The operation was cancelled. 

E non sarebbe successo se il tasso è più di 1,2 sec.

Qualcuno ha qualche idea di leggere il valore RSSI più frequentemente (0,5 secondi o meno)?

+0

magari provare invece: peripheral.RSSI –

+2

La RSSI non è il cambiamento se solo io chiamo [RSSI periferica] o peripheral.RSSI. Il valore verrebbe aggiornato dopo aver chiamato [readRSSI periferico]. Infine ho trovato la risposta che il limite di frequenza di lettura è definito dal firmware. – momoyo

+0

Se si usa BLE, usare 'didRangeBeacons:'. Il dispositivo eseguirà la scansione solo tante volte al secondo. – random

risposta

0

Incontro anche lo stesso problema. Per me, funziona quando aggiungo semplicemente sleep(2) all'interno di peripheralDidUpdateRSSI. Non dimenticare di usare la coda di sfondo durante l'inizializzazione di CBCentralManager.

- (void)peripheralDidUpdateRSSI:(CBPeripheral *)peripheral error:(NSError *)error 
{ 
    NSLog(@"RSSI = %@", peripheral.RSSI); 
    sleep(2); 
    [self.connectedPeripheral readRSSI]; 
}