private void _txChar_ValueChanged(GattCharacteristic sender, GattValueChangedEventArgs args) { // enqueue new data var data = new byte[args.CharacteristicValue.Length]; DataReader.FromBuffer(args.CharacteristicValue).ReadBytes(data); _rxData.AddRange(data); // try parsing int consumedBytes = 0; DownlinkMessage msg = null; using (var stream = new MemoryStream(_rxData.ToArray())) { msg = DownlinkMessage.Parser.ParseDelimitedFrom(stream); consumedBytes = (int)stream.Position; } // publish if (msg != null) { _rxData.RemoveRange(0, consumedBytes); DownlinkMessageReceived?.Invoke(this, msg); } }
internal void OnUartTx(byte[] data, ushort length) { // enqueue new data _rxData.AddRange(data); // try parsing int consumedBytes = 0; DownlinkMessage msg = null; using (var stream = new MemoryStream(_rxData.ToArray())) { msg = DownlinkMessage.Parser.ParseDelimitedFrom(stream); consumedBytes = (int)stream.Position; } // publish if (msg != null) { _rxData.RemoveRange(0, consumedBytes); DownlinkMessageReceived?.Invoke(this, msg); } }