Ejemplo n.º 1
0
        public void Assemble()
        {
            var data = new MemoryStream();

            data.WriteByte((byte)XBeeSpecialBytes.StartByte);

            var packetLength = BitConverter.GetBytes((ushort)frameData.Length);

            Array.Reverse(packetLength);

            data.WriteByte(packetLength[0]);
            data.WriteByte(packetLength[1]);

            data.Write(frameData, 0, frameData.Length);

            data.WriteByte(XBeeChecksum.Calculate(frameData));

            Data = data.ToArray();
        }
Ejemplo n.º 2
0
        public static XBeeFrame Unmarshal(byte[] packetData)
        {
            XBeeFrame frame;
            var       length = (uint)(packetData[0] << 8 | packetData[1]);

            if ((length == 0) || (length > 0xFFFF))
            {
                throw new XBeeFrameException(String.Format("Invalid Frame Lenght {0}.", length));
            }

            if (length != packetData.Length - 3)
            {
                throw new XBeeFrameException(String.Format("Invalid Frame Lenght - Expecting {0}, received {1}.", length, packetData.Length - 3));
            }

            var checkData = packetData.Skip(2).ToArray();

            if (!XBeeChecksum.Verify(checkData))
            {
                throw new XBeeFrameException("Invalid Frame Checksum.");
            }

            var dataStream = new MemoryStream(checkData.Take(checkData.Length - 1).ToArray());
            var cmd        = (XBeeAPICommandId)dataStream.ReadByte();

            if (framesMap.ContainsKey(cmd))
            {
                frame = (XBeeFrame)Activator.CreateInstance(framesMap[cmd], new PacketParser(dataStream));
                frame.Parse();
            }
            else
            {
                throw new XBeeFrameException(String.Format("Unsupported Command Id 0x{0:X2}", cmd));
            }

            return(frame);
        }