Пример #1
0
        internal byte[] GetApiPacket()
        {
            ByteWriter bw = new ByteWriter(ByteOrder.BigEndian);

            WriteApiBytes(bw);

            byte[] bytes  = bw.GetBytes();
            ushort length = (ushort)bytes.Length;

            XBeeChecksum checksum = new XBeeChecksum();

            checksum.AddBytes(bytes);

            bw = new ByteWriter(length + 1 /* start byte */ + 2 /* bytes for length */ + 1 /* checksum byte */, ByteOrder.BigEndian);

            bw.Write(PACKET_STARTBYTE);
            bw.Write(length);
            bw.Write(bytes);
            bw.Write(checksum.Compute());

            return(bw.GetBytes());
        }
Пример #2
0
        private bool CheckLengthAndCrc()
        {
            // can't be to short
            if (_readBuffer.Length < 4)
            {
                return(false);
            }

            int length = (_readBuffer.ReadByte() << 8) + _readBuffer.ReadByte();

            // real length = start(1) + length.length(2) + length parameter + crc(1)
            if ((length + 4) > _readBuffer.Length)
            {
                return(false);
            }

            XBeeChecksum checksum = new XBeeChecksum();

            for (int i = 0; i < length; i++)
            {
                checksum.AddByte((byte)_readBuffer.ReadByte());
            }

            checksum.Compute();
            bool result = checksum.Verify((byte)_readBuffer.ReadByte());

#if (LOG && !MF && !WindowsCE)
            if (!result)
            {
                Console.WriteLine("++ --> BAD CRC!!");
            }
#endif


            return(result);
        }