2016-05-05 4 views
2

In meinem Programm sende ich einen Befehl an ein Gerät und es sendet einige Daten zurück. Wenn die Daten verfügbar sind, wird der folgende Event-Handler aufgerufen.C# - Bluetooth Programmierung

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); 
    } 
} 

Manchmal bemerkte ich, dass diese vor dem vorherigen Daten gelesen wurden aufgerufen werden (oder so ähnlich, aus der Liste der Befehle, scheinen Daten zu fehlen). Sieht so aus, als ob der Puffer bei jedem Aufruf der Funktion überschrieben wird. Gibt es eine Möglichkeit, dem Puffer Daten hinzuzufügen, anstatt sie zu überschreiben?

Antwort

1

In meinem Programm, ich sende einen Befehl an ein Gerät und sendet einige Daten zurück.

Da Sie bei Ihren Aufrufen eine Triggerreaktion auslösen, sollten Sie sicherstellen, dass auf der Geräteseite kein Pufferüberlauf auftritt. Die minimale theoretische Lücke zwischen zwei Paketen beträgt 7,5 ms, in der Praxis sind es jedoch 20-30 ms. Wenn Sie also eine Schleife senden, wird Ihr Gerät Pakete verlieren (überschreiben), wenn die Lücke geringer ist, als Ihre HW-Konfiguration verarbeiten kann.

0

Das GATT-Protokoll verfügt über zwei Optionen, um unerwünschte Informationen zu empfangen. Sie sind Benachrichtigungen und Hinweise. Benachrichtigungen sind eine Bestätigung vom Empfänger, bei der eine Bestätigung durch den Empfänger erforderlich ist. Sie benötigen also wahrscheinlich Hinweise, und wenn dies keine Option ist, müssen Sie sicherstellen, dass die Daten vor der nächsten Benachrichtigung kopiert werden.

siehe Folgendes aus der Bluetooth-Spezifikation. enter image description here

enter image description here