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()); }
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); }