iPhone 5C と iPhone 5S で CoreBluetooth を使用すると奇妙な問題が発生します。シナリオでは、83 バイトのデータを 20 バイト (5 チャンク共通) でチャンク化して受信します。また、iPhone 5S/5C ではデータが異なります (以下のダンプを参照してください)。これらのデバイスでは、チャンク #4 がチャンク #3 に置き換わります。しかし、iPad3 (iOS 6.1 および 7.0.2 を搭載) ではすべて問題ありません。
// iPhone 5C, iOS 7.0.2
nRF UART[237:60b] Received data on a characteristic. 0x01=001,0x02=5B2226
nRF UART[237:60b] Received data on a characteristic. 400192,0x05=1.0.0,0x
nRF UART[237:60b] Received data on a characteristic. ,0x09=2,0x0a=0,0x0b=
nRF UART[237:60b] Received data on a characteristic. ,0x09=2,0x0a=0,0x0b=
nRF UART[237:60b] Received data on a characteristic. 100ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ
// iPad 3, iOS 6.1.3 && iPad 3, iOS 7.0.2
nRF UART[221:60b] Received data on a characteristic. 0x01=001,0x02=5B2226
nRF UART[221:60b] Received data on a characteristic. 400192,0x05=1.0.0,0x
nRF UART[221:60b] Received data on a characteristic. 07=2013.010,0x08=001
nRF UART[221:60b] Received data on a characteristic. ,0x09=2,0x0a=0,0x0b=
nRF UART[221:60b] Received data on a characteristic. 100ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ
// iPhone 4S, iOS 6.1.3
nRF UART[241:60b] Received data on a characteristic. 0x01=001,0x02=5B2226
nRF UART[241:60b] Received data on a characteristic. 400192,0x05=1.0.0,0x
nRF UART[241:60b] Received data on a characteristic. 07=2013.010,0x08=001
nRF UART[241:60b] Received data on a characteristic. ,0x09=2,0x0a=0,0x0b=
nRF UART[241:60b] Received data on a characteristic. 100ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ
私の質問は: 5S/5C デバイスから通常のデータを取得する方法は? おそらく、CBCharacteristic または CBCentralManager にはいくつかのトリックがありますか?
ありがとう。
編集
@allprogが示唆したように、CoreBluetooth をどのように使用しているかのコードの断片を次に示します。
これは非常に基本的なアプローチです。
// CBCentralManager init
self.cm = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
// Getting data chunks from CBCharacteristic in CBPeripheral's Delegate
- (void) peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
{
if (error)
{
NSLog(@"Error receiving notification for characteristic %@: %@", characteristic, error);
return;
}
NSLog(@"Received data on a characteristic. %s", [[characteristic value] bytes]);
// ... the rest of code
}