2013-03-21 25 views
8

Zajmuję się tworzeniem aplikacji przy użyciu Corebluetooth ramy,corebluetooth Błąd odczytu RSSI: Operacja została anulowana

i podłączyć urządzenie do BLE, aby uzyskać wartość RSSI.

ustawić funkcję do odczytu RSSI periodly, kod czasowy jest poniżej

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

a kod detectRSSI jest poniżej

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

Więc pytanie brzmi,

prace funkcyjne dobrze, ale gdy ustawiam przedział czasu mniejszy niż 1,2 s,

p eripheralDidUpdateRSSI losowo zgłosić komunikat o błędzie tak:

The operation was cancelled. 

I to nie stało, gdyby stawka wynosi więcej niż 1.2sec.

Czy ktoś ma pomysł na odczytanie wartości RSSI częściej (0,5 sekundy lub mniej)?

+0

Może spróbuj zamiast: peripheral.RSSI –

+2

RSSI nie zmieni jeśli tylko zadzwonić obwodową RSSI [] lub peripheral.RSSI. Wartość zostanie zaktualizowana po wywołaniu [peripheral readRSSI]. Znalazłem odpowiedź, że limit częstotliwości odczytu jest definiowany przez oprogramowanie układowe. – momoyo

+0

Jeśli używasz BLE, użyj 'didRangeBeacons:'. Urządzenie będzie skanować tylko tyle razy na sekundę. – random

Odpowiedz

0

Mam ten sam problem. Dla mnie działa, gdy po prostu dodaję sleep(2) do wnętrza peripheralDidUpdateRSSI. Po prostu nie zapomnij użyć kolejki tła podczas inicjowania CBCentralManager.

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