예제 #1
0
        /// <summary>
        /// Returns whether this object is equal to the given one.
        /// </summary>
        /// <param name="obj">The object to compare if it is equal to this one.</param>
        /// <returns><c>true</c> if this object is equal to the given one, <c>false</c>
        /// otherwise.</returns>
        public override bool Equals(object obj)
        {
            if (!(obj is XBeePacket))
            {
                return(false);
            }
            XBeePacket packet = (XBeePacket)obj;

            return(packet.GenerateByteArray().SequenceEqual(GenerateByteArray()));
        }
예제 #2
0
        /// <summary>
        /// Parses the given byte array and returns an XBee packet.
        /// </summary>
        /// <remarks>The string can contain white spaces.</remarks>
        /// <param name="packet">The byte array to parse.</param>
        /// <param name="mode">The operating mode to parse the packet (<see cref="OperatingMode.API"/> or
        /// <see cref="OperatingMode.API_ESCAPE"/>).</param>
        /// <returns>The generated XBee Packet.</returns>
        /// <exception cref="ArgumentException">If <c><paramref name="mode"/> != <see cref="OperatingMode.API"/></c>
        /// and if <c><paramref name="mode"/> != <see cref="OperatingMode.API_ESCAPE"/></c>
        /// or if the length of <paramref name="packet"/> is 0
        /// or if the <paramref name="packet"/> does not have the correct start delimiter.</exception>
        /// <exception cref="ArgumentNullException">If <c><paramref name="packet"/> == null</c>.</exception>
        /// <seealso cref="OperatingMode.API"/>
        /// <seealso cref="OperatingMode.API_ESCAPE"/>
        public static XBeePacket ParsePacket(byte[] packet, OperatingMode mode)
        {
            if (packet == null)
            {
                throw new ArgumentNullException("Packet byte array cannot be null.");
            }
            if (mode != OperatingMode.API && mode != OperatingMode.API_ESCAPE)
            {
                throw new ArgumentException("Operating mode must be API or API Escaped.");
            }
            if (packet.Length == 0)
            {
                throw new ArgumentException("Packet Length should be greater than 0.");
            }
            if (packet.Length != 1 && packet[0] != (byte)SpecialByte.HEADER_BYTE)
            {
                throw new ArgumentException("Invalid start delimiter.");
            }

            XBeePacketParser parser     = new XBeePacketParser();
            XBeePacket       xbeePacket = parser.ParsePacket(new MemoryStream(packet, 1, packet.Length - 1), mode);

            return(xbeePacket);
        }
예제 #3
0
        /// <summary>
        /// Parses the given API payload to get the right API packet, depending on its API
        /// type (<c><paramref name="payload"/>[0]</c>).
        /// </summary>
        /// <param name="payload">The payload of the API frame.</param>
        /// <returns>The corresponding API packet or <see cref="UnknownXBeePacket"/> if the frame API
        /// type is unknown.</returns>
        /// <exception cref="InvalidPacketException">If the payload is invalid for the specified
        /// frame type.</exception>
        /// <seealso cref="APIFrameType"/>
        /// <seealso cref="XBeePacket"/>
        private XBeePacket ParsePayload(byte[] payload)
        {
            // Get the API frame type.
            APIFrameType apiType = APIFrameType.UNKNOWN.Get(payload[0]);

            // Parse API payload depending on API ID.
            XBeePacket packet = null;

            switch (apiType)
            {
            case APIFrameType.TX_64:
                packet = TX64Packet.CreatePacket(payload);
                break;

            case APIFrameType.TX_16:
                packet = TX16Packet.CreatePacket(payload);
                break;

            case APIFrameType.BLE_UNLOCK:
                packet = BluetoothUnlockPacket.CreatePacket(payload);
                break;

            case APIFrameType.USER_DATA_RELAY:
                packet = UserDataRelayPacket.CreatePacket(payload);
                break;

            case APIFrameType.AT_COMMAND:
                packet = ATCommandPacket.CreatePacket(payload);
                break;

            case APIFrameType.AT_COMMAND_QUEUE:
                packet = ATCommandQueuePacket.CreatePacket(payload);
                break;

            case APIFrameType.TRANSMIT_REQUEST:
                packet = TransmitPacket.CreatePacket(payload);
                break;

            case APIFrameType.EXPLICIT_ADDRESSING_COMMAND_FRAME:
                packet = ExplicitAddressingPacket.CreatePacket(payload);
                break;

            case APIFrameType.REMOTE_AT_COMMAND_REQUEST:
                packet = RemoteATCommandPacket.CreatePacket(payload);
                break;

            case APIFrameType.TX_SMS:
                packet = TXSMSPacket.CreatePacket(payload);
                break;

            case APIFrameType.TX_IPV4:
                packet = TXIPv4Packet.CreatePacket(payload);
                break;

            case APIFrameType.TX_REQUEST_TLS_PROFILE:
                packet = TXTLSProfilePacket.CreatePacket(payload);
                break;

            case APIFrameType.RX_64:
                packet = RX64Packet.CreatePacket(payload);
                break;

            case APIFrameType.RX_16:
                packet = RX16Packet.CreatePacket(payload);
                break;

            case APIFrameType.RX_IO_64:
                packet = RX64IOPacket.CreatePacket(payload);
                break;

            case APIFrameType.RX_IO_16:
                packet = RX16IOPacket.CreatePacket(payload);
                break;

            case APIFrameType.AT_COMMAND_RESPONSE:
                packet = ATCommandResponsePacket.CreatePacket(payload);
                break;

            case APIFrameType.TX_STATUS:
                packet = TXStatusPacket.CreatePacket(payload);
                break;

            case APIFrameType.MODEM_STATUS:
                packet = ModemStatusPacket.CreatePacket(payload);
                break;

            case APIFrameType.TRANSMIT_STATUS:
                packet = TransmitStatusPacket.CreatePacket(payload);
                break;

            case APIFrameType.RECEIVE_PACKET:
                packet = ReceivePacket.CreatePacket(payload);
                break;

            case APIFrameType.EXPLICIT_RX_INDICATOR:
                packet = ExplicitRxIndicatorPacket.CreatePacket(payload);
                break;

            case APIFrameType.IO_DATA_SAMPLE_RX_INDICATOR:
                packet = IODataSampleRxIndicatorPacket.CreatePacket(payload);
                break;

            case APIFrameType.REMOTE_AT_COMMAND_RESPONSE:
                packet = RemoteATCommandResponsePacket.CreatePacket(payload);
                break;

            case APIFrameType.RX_SMS:
                packet = RXSMSPacket.CreatePacket(payload);
                break;

            case APIFrameType.BLE_UNLOCK_RESPONSE:
                packet = BluetoothUnlockResponsePacket.CreatePacket(payload);
                break;

            case APIFrameType.USER_DATA_RELAY_OUTPUT:
                packet = UserDataRelayOutputPacket.CreatePacket(payload);
                break;

            case APIFrameType.RX_IPV4:
                packet = RXIPv4Packet.CreatePacket(payload);
                break;

            case APIFrameType.UNKNOWN:
            default:
                packet = UnknownXBeePacket.CreatePacket(payload);
                break;
            }
            return(packet);
        }