2013-03-21 8 views
8

내가 Corebluetooth 프레임 워크를 사용하여 응용 프로그램을 개발하고 있어요corebluetooth 읽기 RSSI 오류가 : 작업,

을 취소 RSSI 값을 얻을 수있는 BLE 장치에 연결되었다.

내가 PERIODLY RSSI를 읽을 수있는 기능을 설정,

기능 작동, 타이머 코드는 아래

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

하고

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

그래서 질문은 아래 detectRSSI 코드는 괜찮지 만 시간 간격을 1.2 초 미만으로 설정하면

p eripheralDidUpdateRSSI 무작위로 다음과 같은 오류 메시지를보고합니다 :

The operation was cancelled. 

요금 이상 1.2sec 경우는 발생하지 않을 것입니다.

RSSI 값을 더 자주 읽는 사람이 있습니까 (0.5 초 이하)?

+0

아마도 대신 시도해보십시오. peripheral.RSSI –

+2

[peripheral RSSI] 또는 peripheral.RSSI 만 호출하면 RSSI가 변경되지 않습니다. 값은 [peripheral readRSSI]를 호출 한 후 업데이트 될 것입니다. 마지막으로, 읽기 빈도의 한계가 펌웨어에 의해 정의된다는 대답을 발견했습니다. – momoyo

+0

BLE을 사용하는 경우'didRangeBeacons :'를 사용하십시오. 장치는 초당 여러 번만 검사합니다. – random

답변

0

동일한 문제가 발생합니다. 나를 위해, peripheralDidUpdateRSSI 안에 sleep(2)을 단순히 추가하면 작동합니다. CBCentralManager를 초기화 할 때 백그라운드 대기열을 사용하는 것을 잊지 마십시오.

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