Exemple #1
0
        /// <summary>
        /// Функция сбора пакета
        /// </summary>
        /// <param name="lowCommand">Низкоуровневая команда</param>
        /// <param name="data">Данные, усекается до 65529</param>
        /// <returns></returns>
        private byte[] AssemblyRawPack(LowCommandsRequest lowCommand, byte[] data)
        {
            buffWriter.Clear();

            buffWriter.WriteUInt16((ushort)(2 + 1 + 1 + (data == null ? 0 : data.Length > 65530 ? 65530 : data.Length + 1)));
            buffWriter.WriteUInt8((byte)lowCommand);
            buffWriter.WriteUInt8(CRC8.ComputeChecksum(0, 3, buffWriter.ReadBytes(3)));

            if (data != null)
            {
                buffWriter.WriteBytes(data);
                buffWriter.WriteUInt8(CRC8.ComputeChecksum(0, data.Length, data));
            }

            return(buffWriter.ToByteArray());
        }
Exemple #2
0
        public bool HandleMessage(byte[] packet, int length)
        {
            /*
             *      0-1	- data length
             *      2		- LowCommandsRequest
             *      3		- crc8 (0-2)
             *      N		- LowCommands
             *      D		- data
             *      N+D+1	- data crc8
             */

            buffReader.SetBuffer(false, packet, length);

            if (buffReader.IncomingBytes < 4)
            {
                return(false);
            }

            int fullLength = buffReader.ReadUInt16();

            if (fullLength != buffReader.IncomingBytes)
            {
                return(false);
            }

            byte defCommand = buffReader.ReadUInt8();

            if (!Enum.IsDefined(typeof(LowCommandsResponse), defCommand))
            {
                return(false);
            }

            LowCommandsResponse command = (LowCommandsResponse)defCommand;

            buffReader.SetPosition(true, 0);
            if (CRC8.ComputeChecksum(0, 3, buffReader.ReadBytes(3)) != buffReader.ReadUInt8())
            {
                return(false);
            }

            switch (command)
            {
            case LowCommandsResponse.System:
                return(this.SystemPacket());

            case LowCommandsResponse.Data:
                break;

            case LowCommandsResponse.DataBroken:
                break;

            case LowCommandsResponse.ErrorCRC:
                break;

            case LowCommandsResponse.NotSupported:
                break;

            default:
                break;
            }

            return(true);
        }