0

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
}
4

1 に答える 1

0

大量のデータを転送していて、それを複数のパケットに分割する必要がある場合は、各パケットに何らかの ID を追加することをお勧めします。これにより、パケットがドロップされたかどうか、2 回受信されたかどうかなどを判断するために受信側で必要な追加情報が得られます。ペリフェラル。

編集: また、コメントに記載されているように、指示に切り替えて、Bluetooth スタックが保証された重複しない配信のニーズに対応できるようにすることもできます。

于 2013-10-17T23:57:11.683 に答える