コード例 #1
0
        public byte GetMinByteSize() => 20; // of byte sized of fields (exclude extended)

        public void Deserialize(ref ReadOnlySpan <byte> buffer, int payloadSize)
        {
            var index     = 0;
            var endIndex  = payloadSize;
            var arraySize = 0;

            Icao       = BinSerialize.ReadUInt(ref buffer); index += 4;
            Stallspeed = BinSerialize.ReadUShort(ref buffer); index += 2;
            arraySize  = /*ArrayLength*/ 9 - Math.Max(0, ((/*PayloadByteSize*/ 20 - payloadSize - /*ExtendedFieldsLength*/ 0) / 1 /*FieldTypeByteSize*/));
            Callsign   = new char[arraySize];
            unsafe
            {
                fixed(byte *bytePointer = buffer)
                fixed(char *charPointer = Callsign)
                {
                    Encoding.ASCII.GetChars(bytePointer, arraySize, charPointer, Callsign.Length);
                }
            }
            buffer       = buffer.Slice(arraySize);
            index       += arraySize;
            Emittertype  = (AdsbEmitterType)BinSerialize.ReadByte(ref buffer); index += 1;
            Aircraftsize = (UavionixAdsbOutCfgAircraftSize)BinSerialize.ReadByte(ref buffer); index += 1;
            Gpsoffsetlat = (UavionixAdsbOutCfgGpsOffsetLat)BinSerialize.ReadByte(ref buffer); index += 1;
            Gpsoffsetlon = (UavionixAdsbOutCfgGpsOffsetLon)BinSerialize.ReadByte(ref buffer); index += 1;
            Rfselect     = (UavionixAdsbOutRfSelect)BinSerialize.ReadByte(ref buffer); index += 1;
        }
コード例 #2
0
 public override void Deserialize(ref ReadOnlySpan <byte> buffer)
 {
     UavIdFilterEnabled = BinSerialize.ReadBool(ref buffer);
     UavSystemId        = BinSerialize.ReadByte(ref buffer);
     UavComponentId     = BinSerialize.ReadByte(ref buffer);
     WpIndex            = BinSerialize.ReadUShort(ref buffer);
 }
コード例 #3
0
        public byte GetMinByteSize() => 33; // of byte sized of fields (exclude extended)

        public void Deserialize(ref ReadOnlySpan <byte> buffer, int payloadSize)
        {
            var index     = 0;
            var endIndex  = payloadSize;
            var arraySize = 0;

            arraySize = /*ArrayLength*/ 4 - Math.Max(0, ((/*PayloadByteSize*/ 33 - payloadSize - /*ExtendedFieldsLength*/ 0) / 4 /*FieldTypeByteSize*/));
            ArU32     = new uint[arraySize];
            for (var i = 0; i < arraySize; i++)
            {
                ArU32[i] = BinSerialize.ReadUInt(ref buffer); index += 4;
            }
            arraySize = 4;
            for (var i = 0; i < arraySize; i++)
            {
                ArU16[i] = BinSerialize.ReadUShort(ref buffer); index += 2;
            }
            V1        = (byte)BinSerialize.ReadByte(ref buffer); index += 1;
            arraySize = 4;
            for (var i = 0; i < arraySize; i++)
            {
                ArI8[i] = (sbyte)BinSerialize.ReadByte(ref buffer); index += 1;
            }
            arraySize = 4;
            for (var i = 0; i < arraySize; i++)
            {
                ArU8[i] = (byte)BinSerialize.ReadByte(ref buffer); index += 1;
            }
        }
コード例 #4
0
        public byte GetMinByteSize() => 84; // of byte sized of fields (exclude extended)

        public void Deserialize(ref ReadOnlySpan <byte> buffer, int payloadSize)
        {
            var index     = 0;
            var endIndex  = payloadSize;
            var arraySize = 0;

            arraySize = 2;
            for (var i = 0; i < arraySize; i++)
            {
                ArD[i] = BinSerialize.ReadDouble(ref buffer); index += 8;
            }
            arraySize = 2;
            for (var i = 0; i < arraySize; i++)
            {
                ArF[i] = BinSerialize.ReadFloat(ref buffer); index += 4;
            }
            arraySize = 2;
            for (var i = 0; i < arraySize; i++)
            {
                ArU32[i] = BinSerialize.ReadUInt(ref buffer); index += 4;
            }
            arraySize = 2;
            for (var i = 0; i < arraySize; i++)
            {
                ArI32[i] = BinSerialize.ReadInt(ref buffer); index += 4;
            }
            arraySize = 2;
            for (var i = 0; i < arraySize; i++)
            {
                ArU16[i] = BinSerialize.ReadUShort(ref buffer); index += 2;
            }
            arraySize = 2;
            for (var i = 0; i < arraySize; i++)
            {
                ArI16[i] = BinSerialize.ReadShort(ref buffer); index += 2;
            }
            arraySize = 2;
            for (var i = 0; i < arraySize; i++)
            {
                ArU8[i] = (byte)BinSerialize.ReadByte(ref buffer); index += 1;
            }
            arraySize = 2;
            for (var i = 0; i < arraySize; i++)
            {
                ArI8[i] = (sbyte)BinSerialize.ReadByte(ref buffer); index += 1;
            }
            arraySize = /*ArrayLength*/ 32 - Math.Max(0, ((/*PayloadByteSize*/ 84 - payloadSize - /*ExtendedFieldsLength*/ 0) / 1 /*FieldTypeByteSize*/));
            ArC       = new char[arraySize];
            unsafe
            {
                fixed(byte *bytePointer = buffer)
                fixed(char *charPointer = ArC)
                {
                    Encoding.ASCII.GetChars(bytePointer, arraySize, charPointer, ArC.Length);
                }
            }
            buffer = buffer.Slice(arraySize);
            index += arraySize;
        }
コード例 #5
0
        public byte GetMinByteSize() => 12; // of byte sized of fields (exclude extended)

        public void Deserialize(ref ReadOnlySpan <byte> buffer, int payloadSize)
        {
            var index     = 0;
            var endIndex  = payloadSize;
            var arraySize = 0;

            ErrorStatus   = BinSerialize.ReadUInt(ref buffer); index += 4;
            TimeBootMs    = BinSerialize.ReadUInt(ref buffer); index += 4;
            BatteryStatus = BinSerialize.ReadUShort(ref buffer); index += 2;
            ArmStatus     = (byte)BinSerialize.ReadByte(ref buffer); index += 1;
            ChangeStatus  = (byte)BinSerialize.ReadByte(ref buffer); index += 1;
        }
コード例 #6
0
        public void Deserialize(ref ReadOnlySpan <byte> buffer)
        {
            SessionId ??= new SessionId();
            SessionId.Deserialize(ref buffer);
            Counter = BinSerialize.ReadPackedUnsignedInteger(ref buffer);
            Flags   = (Pv2StreamFlags)BinSerialize.ReadByte(ref buffer);
            var count = BinSerialize.ReadByte(ref buffer);

            Groups = new List <ushort>(count);
            for (var i = 0; i < count; i++)
            {
                Groups.Add(BinSerialize.ReadUShort(ref buffer));
            }
        }
コード例 #7
0
        public byte GetMinByteSize() => 24; // of byte sized of fields (exclude extended)

        public void Deserialize(ref ReadOnlySpan <byte> buffer, int payloadSize)
        {
            var index     = 0;
            var endIndex  = payloadSize;
            var arraySize = 0;

            arraySize = /*ArrayLength*/ 2 - Math.Max(0, ((/*PayloadByteSize*/ 24 - payloadSize - /*ExtendedFieldsLength*/ 0) / 8 /*FieldTypeByteSize*/));
            ArD       = new double[arraySize];
            for (var i = 0; i < arraySize; i++)
            {
                ArD[i] = BinSerialize.ReadDouble(ref buffer); index += 8;
            }
            V3        = BinSerialize.ReadUInt(ref buffer); index += 4;
            arraySize = 2;
            for (var i = 0; i < arraySize; i++)
            {
                ArU16[i] = BinSerialize.ReadUShort(ref buffer); index += 2;
            }
        }
コード例 #8
0
ファイル: ualberta.cs プロジェクト: asvol/mavlink.net
        public byte GetMinByteSize() => 42; // of byte sized of fields (exclude extended)

        public void Deserialize(ref ReadOnlySpan <byte> buffer, int payloadSize)
        {
            var index     = 0;
            var endIndex  = payloadSize;
            var arraySize = 0;

            arraySize = 3;
            for (var i = 0; i < arraySize; i++)
            {
                Aileron[i] = BinSerialize.ReadUShort(ref buffer); index += 2;
            }
            arraySize = 3;
            for (var i = 0; i < arraySize; i++)
            {
                Elevator[i] = BinSerialize.ReadUShort(ref buffer); index += 2;
            }
            arraySize = 3;
            for (var i = 0; i < arraySize; i++)
            {
                Rudder[i] = BinSerialize.ReadUShort(ref buffer); index += 2;
            }
            arraySize = 2;
            for (var i = 0; i < arraySize; i++)
            {
                Gyro[i] = BinSerialize.ReadUShort(ref buffer); index += 2;
            }
            arraySize = /*ArrayLength*/ 5 - Math.Max(0, ((/*PayloadByteSize*/ 42 - payloadSize - /*ExtendedFieldsLength*/ 0) / 2 /*FieldTypeByteSize*/));
            Pitch     = new ushort[arraySize];
            for (var i = 0; i < arraySize; i++)
            {
                Pitch[i] = BinSerialize.ReadUShort(ref buffer); index += 2;
            }
            arraySize = 5;
            for (var i = 0; i < arraySize; i++)
            {
                Throttle[i] = BinSerialize.ReadUShort(ref buffer); index += 2;
            }
        }
コード例 #9
0
        public byte GetMinByteSize() => 41; // of byte sized of fields (exclude extended)

        public void Deserialize(ref ReadOnlySpan <byte> buffer, int payloadSize)
        {
            var index     = 0;
            var endIndex  = payloadSize;
            var arraySize = 0;

            Utctime         = BinSerialize.ReadUInt(ref buffer); index += 4;
            Gpslat          = BinSerialize.ReadInt(ref buffer); index += 4;
            Gpslon          = BinSerialize.ReadInt(ref buffer); index += 4;
            Gpsalt          = BinSerialize.ReadInt(ref buffer); index += 4;
            Baroaltmsl      = BinSerialize.ReadInt(ref buffer); index += 4;
            Accuracyhor     = BinSerialize.ReadUInt(ref buffer); index += 4;
            Accuracyvert    = BinSerialize.ReadUShort(ref buffer); index += 2;
            Accuracyvel     = BinSerialize.ReadUShort(ref buffer); index += 2;
            Velvert         = BinSerialize.ReadShort(ref buffer); index += 2;
            Velns           = BinSerialize.ReadShort(ref buffer); index += 2;
            Velew           = BinSerialize.ReadShort(ref buffer); index += 2;
            State           = (UavionixAdsbOutDynamicState)BinSerialize.ReadUShort(ref buffer); index += 2;
            Squawk          = BinSerialize.ReadUShort(ref buffer); index += 2;
            Gpsfix          = (UavionixAdsbOutDynamicGpsFix)BinSerialize.ReadByte(ref buffer); index += 1;
            Numsats         = (byte)BinSerialize.ReadByte(ref buffer); index += 1;
            Emergencystatus = (UavionixAdsbEmergencyStatus)BinSerialize.ReadByte(ref buffer); index += 1;
        }
コード例 #10
0
ファイル: Pv2MissionInfo.cs プロジェクト: asvol/mavlink.net
 public void Deserialize(ref ReadOnlySpan <byte> buffer)
 {
     Count = BinSerialize.ReadUShort(ref buffer);
 }
コード例 #11
0
        public byte GetMinByteSize() => 179; // of byte sized of fields (exclude extended)

        public void Deserialize(ref ReadOnlySpan <byte> buffer, int payloadSize)
        {
            var index     = 0;
            var endIndex  = payloadSize;
            var arraySize = 0;

            U64       = BinSerialize.ReadULong(ref buffer); index += 8;
            S64       = BinSerialize.ReadLong(ref buffer); index += 8;
            D         = BinSerialize.ReadDouble(ref buffer); index += 8;
            arraySize = /*ArrayLength*/ 3 - Math.Max(0, ((/*PayloadByteSize*/ 179 - payloadSize - /*ExtendedFieldsLength*/ 0) / 8 /*FieldTypeByteSize*/));
            U64Array  = new ulong[arraySize];
            for (var i = 0; i < arraySize; i++)
            {
                U64Array[i] = BinSerialize.ReadULong(ref buffer); index += 8;
            }
            arraySize = 3;
            for (var i = 0; i < arraySize; i++)
            {
                S64Array[i] = BinSerialize.ReadLong(ref buffer); index += 8;
            }
            arraySize = 3;
            for (var i = 0; i < arraySize; i++)
            {
                DArray[i] = BinSerialize.ReadDouble(ref buffer); index += 8;
            }
            U32       = BinSerialize.ReadUInt(ref buffer); index += 4;
            S32       = BinSerialize.ReadInt(ref buffer); index += 4;
            F         = BinSerialize.ReadFloat(ref buffer); index += 4;
            arraySize = 3;
            for (var i = 0; i < arraySize; i++)
            {
                U32Array[i] = BinSerialize.ReadUInt(ref buffer); index += 4;
            }
            arraySize = 3;
            for (var i = 0; i < arraySize; i++)
            {
                S32Array[i] = BinSerialize.ReadInt(ref buffer); index += 4;
            }
            arraySize = 3;
            for (var i = 0; i < arraySize; i++)
            {
                FArray[i] = BinSerialize.ReadFloat(ref buffer); index += 4;
            }
            U16       = BinSerialize.ReadUShort(ref buffer); index += 2;
            S16       = BinSerialize.ReadShort(ref buffer); index += 2;
            arraySize = 3;
            for (var i = 0; i < arraySize; i++)
            {
                U16Array[i] = BinSerialize.ReadUShort(ref buffer); index += 2;
            }
            arraySize = 3;
            for (var i = 0; i < arraySize; i++)
            {
                S16Array[i] = BinSerialize.ReadShort(ref buffer); index += 2;
            }
            C         = (char)buffer[0];
            buffer    = buffer.Slice(1);
            index    += 1;
            arraySize = 10;
            unsafe
            {
                fixed(byte *bytePointer = buffer)
                fixed(char *charPointer = S)
                {
                    Encoding.ASCII.GetChars(bytePointer, arraySize, charPointer, S.Length);
                }
            }
            buffer    = buffer.Slice(arraySize);
            index    += arraySize;
            U8        = (byte)BinSerialize.ReadByte(ref buffer); index += 1;
            S8        = (sbyte)BinSerialize.ReadByte(ref buffer); index += 1;
            arraySize = 3;
            for (var i = 0; i < arraySize; i++)
            {
                U8Array[i] = (byte)BinSerialize.ReadByte(ref buffer); index += 1;
            }
            arraySize = 3;
            for (var i = 0; i < arraySize; i++)
            {
                S8Array[i] = (sbyte)BinSerialize.ReadByte(ref buffer); index += 1;
            }
        }
コード例 #12
0
ファイル: PacketV2.cs プロジェクト: asvol/mavlink.net
        public void Deserialize(ref ReadOnlySpan <byte> buffer)
        {
            var crcBuffer = buffer.Slice(1);

            var stx = BinSerialize.ReadByte(ref buffer);

            if (stx != PacketV2Helper.MagicMarkerV2)
            {
                throw new MavlinkException(string.Format(RS.WheelKnownConstant_VerifyStx_Unknown_STX_value, PacketV2Helper.MagicMarkerV2, stx));
            }

            var payloadSize = BinSerialize.ReadByte(ref buffer);

            IncompatFlags = BinSerialize.ReadByte(ref buffer);
            CompatFlags   = BinSerialize.ReadByte(ref buffer);
            Sequence      = BinSerialize.ReadByte(ref buffer);
            SystemId      = BinSerialize.ReadByte(ref buffer);
            ComponenId    = BinSerialize.ReadByte(ref buffer);
            int messageId = BinSerialize.ReadByte(ref buffer);

            messageId |= BinSerialize.ReadByte(ref buffer) << 8;
            messageId |= BinSerialize.ReadByte(ref buffer) << 16;

            if (messageId != MessageId)
            {
                throw new MavlinkException(string.Format(RS.PacketV2_Deserialize_Error_message_id_type, MessageId, messageId));
            }

            var crcStartBuffer = buffer.Slice(payloadSize, 2);
            var crc            = BinSerialize.ReadUShort(ref crcStartBuffer);

            var originSize = Payload.GetMinByteSize();

            if (payloadSize < originSize)
            {
                // this is Empty-Byte Payload Truncation https://mavlink.io/en/guide/serialization.html#payload_truncation
                var data = ArrayPool <byte> .Shared.Rent(originSize);

                var span = new Span <byte>(data, 0, originSize);
                buffer.Slice(0, payloadSize).CopyTo(span);
                var zeroByteNotEnough = originSize - payloadSize;
                for (var i = 0; i < zeroByteNotEnough; i++)
                {
                    data[payloadSize + i] = 0;
                }

                try
                {
                    var readOnly = new ReadOnlySpan <byte>(data, 0, originSize);
                    Payload.Deserialize(ref readOnly, originSize);
                    // Debug.Assert(readOnly.Length == 0);
                }
                finally
                {
                    ArrayPool <byte> .Shared.Return(data);
                }
            }
            else
            {
                var payloadBuffer = buffer.Slice(0, payloadSize);
                Payload.Deserialize(ref payloadBuffer, payloadSize);
                //Debug.Assert(payloadBuffer.Length == 0);
            }

            var crcBuffer1 = crcBuffer.Slice(0, 9);
            var crcBuffer2 = crcBuffer.Slice(9, payloadSize);
            var calcCrc    = X25Crc.Accumulate(ref crcBuffer1, X25Crc.CrcSeed);

            calcCrc = X25Crc.Accumulate(ref crcBuffer2, calcCrc);
            calcCrc = X25Crc.Accumulate(GetCrcEtra(), calcCrc);
            if (crc != calcCrc)
            {
                throw new MavlinkException(string.Format(RS.PacketV2Helper_VerifyCrc_Bad_X25Crc, calcCrc, crc));
            }

            if ((IncompatFlags & 0x01) != 0)
            {
                Signature.Deserialize(ref buffer);
            }
        }