Example #1
0
        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);
            }
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }