2016-05-05 7 views
2

私のプログラムでは、私はデバイスにコマンドを送り、いくつかのデータを送り返します。データが利用可能なときはいつでも、次のイベントハンドラが呼び出されます。 (;コマンドのリストから、データが欠落しているように見えるか、そのようなもの)C# - Bluetoothプログラミング

private void notify_change(GattCharacteristic sender, GattValueChangedEventArgs args) 
{ 
    lock (this._dataRec) 
    { 
     notCounter++; 
     byte[] bArray = new byte[args.CharacteristicValue.Length]; 
       DataReader.FromBuffer(args.CharacteristicValue).ReadBytes(bArray);     
       dataQ.Enqueue(Encoding.ASCII.GetString(bArray)); 
       Monitor.Pulse(this._dataRec); 
    } 
} 

時々、私は前のデータが読み込まれた前にこれが呼び出されることに気づきました。関数が呼び出されるたびにバッファが上書きされるように見えます。上書きするのではなく、バッファにデータを追加する方法はありますか?

答えて

1

、私はデバイスにコマンドを送信し、それはいくつかのデータ バックを送信します。

あなたの呼び出しによるトリガー応答であるため、デバイス側でバッファオーバーフローが発生していないことを確認してください。 2つのパケット間の最小の理論上のギャップは7.5msですが、実際には約20〜30msです。したがって、あなたがループで送信している場合、あなたのHWセットアップが処理できるギャップよりも小さい場合、あなたのデバイスはパケットを失う(上書きする)でしょう。

0

GATTプロトコルには、迷惑な情報を受信する2つのオプションがあります。彼らは通知と適応です。通知は、通知が受信機からの肯定応答を必要とする場合、受信機からの肯定応答を伴う通知である。おそらく表示が必要な場合があります。これがオプションでない場合は、次の通知の前にデータが確実にコピーされるようにする必要があります。

下記のBluetooth仕様を参照してください。私のプログラムでenter image description here

enter image description here