private void TryDecodePacket(int size) { var messageId = PacketV2Helper.GetMessageId(_buffer, 0); var packet = CreatePacket(messageId); if (packet == null) { _decodeErrorSubject.OnNext(new MessageIdNotFoundException(messageId)); return; } try { var span = new ReadOnlySpan <byte>(_buffer, 0, size); packet.Deserialize(ref span); } catch (Exception exception) { _decodeErrorSubject.OnNext(new DeserializePackageException(messageId, string.Format(RS.DecoderV2_TryDecodePacket_Error_for_deserialize_mavlink_V2, messageId, exception.Message), exception)); return; } try { _packetSubject.OnNext(packet); } catch (Exception e) { _logger.Error($"Fatal error to publish packet:{e.Message}"); Debug.Assert(false, e.Message); } }
private DecodeStep FillBufferStep(byte value) { _buffer[_bufferIndex] = value; ++_bufferIndex; if (_bufferIndex < _bufferStopIndex) { return(DecodeStep.FillBuffer); } // buffer with frames,payload and checksumm filled => check if signature present // https://mavlink.io/en/guide/message_signing.html if (PacketV2Helper.CheckSignaturePresent(_buffer, 0)) { return(DecodeStep.FillSignature); } // packet without sync TryDecodePacket(_bufferIndex); return(DecodeStep.Sync); }
private void TryDecodePacket() { var messageId = PacketV2Helper.GetMessageId(_buffer, 0); var packet = CreatePacket(messageId); if (packet == null) { _decodeErrorSubject.OnNext(new MessageIdNotFoundException(messageId)); return; } try { packet.Deserialize(_buffer, 0); } catch (Exception exception) { _decodeErrorSubject.OnNext(new DeserizliaePackageException(messageId, string.Format(RS.DecoderV2_TryDecodePacket_Error_for_deserialize_mavlink_V2, messageId, exception.Message), exception)); } _packetSubject.OnNext(packet); }