コード例 #1
0
        public void TestNonMemberRadius()
        {
            ZigBeeApsFrame frame = new ZigBeeApsFrame();

            frame.NonMemberRadius = 4;
            Assert.Equal(4, frame.NonMemberRadius);
        }
コード例 #2
0
        public void SendCommand(ZigBeeApsFrame apsFrame)
        {
            lock (_networkManager) {
                byte sender;
                if (apsFrame.Profile == 0)
                {
                    sender = 0;
                }
                else
                {
                    sender = (byte)GetSendingEndpoint(apsFrame.Profile);
                }

                // TODO: How to differentiate group and device addressing?????
                bool groupCommand = false;
                if (!groupCommand)
                {
                    _networkManager.SendCommand(new AF_DATA_REQUEST(apsFrame.DestinationAddress,
                                                                    (byte)apsFrame.DestinationEndpoint, sender, apsFrame.Cluster,
                                                                    apsFrame.ApsCounter, (byte)0x30, (byte)apsFrame.Radius, apsFrame.Payload));
                }
                else
                {
                    _networkManager.SendCommand(new AF_DATA_REQUEST_EXT(apsFrame.DestinationAddress, sender,
                                                                        apsFrame.Cluster, apsFrame.ApsCounter, (byte)(0), (byte)0, apsFrame.Payload));
                }
            }
        }
コード例 #3
0
        public void TestGroupAddress()
        {
            ZigBeeApsFrame frame = new ZigBeeApsFrame();

            _output.WriteLine(frame.ToString());

            frame.GroupAddress = 1;
            Assert.Equal(1, frame.GroupAddress);
        }
コード例 #4
0
        public void testReceive()
        {
            ZToolPacket data = GetPacket("FE 07 45 83 00 00 00 00 00 10 C1 10");

            ZigBeeApsFrame apsFrame = ZdoPowerDescriptor.Create(data);

            Assert.Equal(0x0000, apsFrame.SourceAddress);
            Assert.Equal(0, apsFrame.Profile);
            Assert.Equal(0, apsFrame.DestinationEndpoint);
            Assert.Equal(GetPacketData("00 00 00 00 10 C1"), apsFrame.Payload);
        }
コード例 #5
0
        public void TestReceive()
        {
            ZToolPacket data = GetPacket("FE 12 45 82 00 00 00 00 00 00 40 0F 00 00 50 A0 00 01 00 A0 00 00 CB");

            ZigBeeApsFrame apsFrame = ZdoNodeDescriptor.Create(data);

            Assert.Equal(0x0000, apsFrame.SourceAddress);
            Assert.Equal(0, apsFrame.Profile);
            Assert.Equal(0, apsFrame.DestinationEndpoint);
            Assert.Equal(GetPacketData("00 00 00 00 00 40 0F 00 00 50 A0 00 01 00 A0 00 00"), apsFrame.Payload);
        }
コード例 #6
0
        public void TestReceive()
        {
            ZToolPacket data = GetPacket("FE 03 45 B4 E6 D2 00 C6");

            ZigBeeApsFrame apsFrame = ZdoManagementLeave.Create(data);

            Assert.Equal(53990, apsFrame.SourceAddress);
            Assert.Equal(0, apsFrame.Profile);
            Assert.Equal(0, apsFrame.DestinationEndpoint);
            Assert.Equal(GetPacketData("D2 00"), apsFrame.Payload);
        }
コード例 #7
0
        public void TestReceive()
        {
            ZToolPacket data = GetPacket("FE 0D 45 C1 2A 2F 2A 2F F9 41 F6 02 00 4B 12 00 00 9C");

            ZigBeeApsFrame apsFrame = ZdoEndDeviceAnnounce.Create(data);

            Assert.Equal(0x2f2a, apsFrame.SourceAddress);
            Assert.Equal(0, apsFrame.Profile);
            Assert.Equal(0, apsFrame.DestinationEndpoint);
            Assert.Equal(GetPacketData("2F 2A 2F F9 41 F6 02 00 4B 12 00 00"), apsFrame.Payload);
        }
コード例 #8
0
        public void TestReceive()
        {
            ZToolPacket data = GetPacket("FE 0B 45 B2 00 00 00 01 00 01 2A 2F 00 35 38 F4");

            ZigBeeApsFrame apsFrame = ZdoManagementRouting.Create(data);

            Assert.Equal(0x0000, apsFrame.SourceAddress);
            Assert.Equal(0, apsFrame.Profile);
            Assert.Equal(0, apsFrame.DestinationEndpoint);
            Assert.Equal(GetPacketData("00 00 01 00 01 2A 2F 00 35 38"), apsFrame.Payload);
        }
コード例 #9
0
        public void TestReceive()
        {
            ZToolPacket data = GetPacket("FE 15 45 FF 00 00 00 01 80 00 00 00 1B 00 5B 23 EB 09 00 4B 12 00 00 00 00 F6");

            ZigBeeApsFrame apsFrame = ZdoCallbackIncoming.Create(data);

            Assert.Equal(0x8001, apsFrame.Cluster);
            Assert.Equal(0x0000, apsFrame.SourceAddress);
            Assert.Equal(0, apsFrame.Profile);
            Assert.Equal(0, apsFrame.DestinationEndpoint);
            Assert.Equal(GetPacketData("1B 00 5B 23 EB 09 00 4B 12 00 00 00 00"), apsFrame.Payload);
        }
コード例 #10
0
        public void TestSecurityEnable()
        {
            ZigBeeApsFrame frame = new ZigBeeApsFrame();

            frame.SecurityEnabled = true;
            Assert.True(frame.SecurityEnabled);

            frame.SecurityEnabled = false;
            Assert.False(frame.SecurityEnabled);

            _output.WriteLine(frame.ToString());
        }
コード例 #11
0
        public void XbeeEventReceived(IXBeeEvent xbeeEvent)
        {
            if (xbeeEvent is XBeeReceivePacketExplicitEvent rxMessage)
            {
                ZigBeeApsFrame apsFrame = new ZigBeeApsFrame
                {
                    Cluster             = (ushort)rxMessage.GetClusterId(),
                    DestinationEndpoint = (byte)rxMessage.GetDestinationEndpoint(),
                    Profile             = (ushort)rxMessage.GetProfileId(),
                    SourceEndpoint      = (byte)rxMessage.GetSourceEndpoint(),

                    SourceAddress = (ushort)rxMessage.GetNetworkAddress(),
                    Payload       = rxMessage.GetData().Select(item => (byte)item).ToArray()
                };

                _zigBeeTransportReceive.ReceiveCommand(apsFrame);
                return;
            }

            // Handle dongle status messages
            if (xbeeEvent is XBeeModemStatusEvent modemStatus)
            {
                ModemStatus modemCurrentStatus = modemStatus.GetStatus();
                switch (modemCurrentStatus)
                {
                case ModemStatus.COORDINATOR_STARTED:
                {
                    _coordinatorStarted = true;
                    SetNetworkState(ZigBeeTransportState.ONLINE);
                }
                break;

                case ModemStatus.DISASSOCIATED:
                {
                    SetNetworkState(ZigBeeTransportState.OFFLINE);
                }
                break;

                case ModemStatus.HARDWARE_RESET:
                case ModemStatus.JOINED_NETWORK:
                case ModemStatus.NETWORK_SECURITY_KEY_UPDATED:
                case ModemStatus.WATCHDOG_TIMER_RESET:
                    break;

                default:
                    break;
                }
                return;
            }

            Log.Debug($"Unhandled XBee Frame: {xbeeEvent.ToString()}");
        }
コード例 #12
0
        public void TestReceive2()
        {
            ZToolPacket data = GetPacket(
                "FE 18 45 84 21 A4 00 21 A4 12 02 04 01 01 00 00 02 00 00 03 00 03 05 00 06 00 08 00 C4");

            ZigBeeApsFrame apsFrame = ZdoSimpleDescriptor.Create(data);

            Assert.Equal(42017, apsFrame.SourceAddress);
            Assert.Equal(0, apsFrame.Profile);
            Assert.Equal(0, apsFrame.DestinationEndpoint);
            Assert.Equal(GetPacketData("A4 00 21 A4 12 02 04 01 01 00 00 02 00 00 03 00 03 05 00 06 00 08 00"),
                         apsFrame.Payload);
        }
コード例 #13
0
        public void TestReceive1()
        {
            ZToolPacket data = GetPacket(
                "FE 2E 45 84 00 00 00 00 00 28 01 04 01 00 00 00 00 10 00 00 01 00 02 00 03 00 04 00 05 00 06 00 07 00 08 00 09 00 0F 00 0A 00 0C 00 15 00 00 01 01 01 CF");

            ZigBeeApsFrame apsFrame = ZdoSimpleDescriptor.Create(data);

            Assert.Equal(0x0000, apsFrame.SourceAddress);
            Assert.Equal(0, apsFrame.Profile);
            Assert.Equal(0, apsFrame.DestinationEndpoint);
            Assert.Equal(GetPacketData(
                             "00 00 00 00 28 01 04 01 00 00 00 00 10 00 00 01 00 02 00 03 00 04 00 05 00 06 00 07 00 08 00 09 00 0F 00 0A 00 0C 00 15 00 00 01 01 01"),
                         apsFrame.Payload);
        }
コード例 #14
0
        public void TestReceive()
        {
            string      packetString = "FE 08 45 85 00 00 00 00 00 02 02 01 C9";
            ZToolPacket data         = GetPacket(packetString);

            Assert.Equal(packetString, data.PacketString);

            ZigBeeApsFrame apsFrame = ZdoActiveEndpoint.Create(data);

            Assert.Equal(0x0000, apsFrame.SourceAddress);
            Assert.Equal(0, apsFrame.Profile);
            Assert.Equal(0, apsFrame.DestinationEndpoint);
            Assert.Equal(GetPacketData("00 00 00 00 02 02 01"), apsFrame.Payload);
        }
コード例 #15
0
        public static ZigBeeApsFrame Create(ZToolPacket packet)
        {
            ZigBeeApsFrame apsFrame = new ZigBeeApsFrame();

            apsFrame.Cluster             = ZdoCommandType.GetValueByType(ZdoCommandType.CommandType.SIMPLE_DESCRIPTOR_RESPONSE).ClusterId;
            apsFrame.DestinationEndpoint = 0;
            apsFrame.SourceAddress       = (ushort)(packet.Packet[4] | (packet.Packet[5] << 8));
            apsFrame.SourceEndpoint      = 0;
            apsFrame.Profile             = 0;

            Array.Copy(packet.Packet, 6, apsFrame.Payload, 0, packet.Packet.Length - 7);

            return(apsFrame);
        }
コード例 #16
0
        private async Task ProcessDataIndication()
        {
            var data = await _conbeeInterface.SendAsync(Commands.APS_DATA_INDICATION, 0, 0).ConfigureAwait(false);

            var apsFrame = new ZigBeeApsFrame();
            int offset   = 8;

            switch ((DestinationAddressMode)data[offset++])
            {
            case DestinationAddressMode.GroupAddress:
            case DestinationAddressMode.NwkAddress:
                apsFrame.DestinationAddress = ParseUInt16(data, ref offset);
                break;

            case DestinationAddressMode.IeeeAddress:
                apsFrame.DestinationIeeeAddress = new IeeeAddress(BitConverter.ToUInt64(data, offset));
                offset += 8;
                break;

            default:
                throw new InvalidOperationException();
            }
            apsFrame.DestinationEndpoint = data[offset++];
            switch ((DestinationAddressMode)data[offset++])
            {
            case DestinationAddressMode.IeeeAddress:
                //apsFrame.SourceIeeeAddress = new IeeeAddress(BitConverter.ToUInt64(data, offset));
                offset += 8;
                break;

            case DestinationAddressMode.NwkAddress:
                apsFrame.SourceAddress = ParseUInt16(data, ref offset);
                break;

            case DestinationAddressMode.NwkAddressAndIeeeAddress:
                apsFrame.SourceAddress = ParseUInt16(data, ref offset);
                //apsFrame.SourceIeeeAddress = new IeeeAddress(BitConverter.ToUInt64(data, offset));
                offset += 8;
                break;

            default:
                throw new InvalidOperationException();
            }
            apsFrame.SourceEndpoint = data[offset++];
            apsFrame.Profile        = ParseUInt16(data, ref offset);
            apsFrame.Cluster        = ParseUInt16(data, ref offset);
            apsFrame.Payload        = new byte[ParseUInt16(data, ref offset)];
            Buffer.BlockCopy(data, offset, apsFrame.Payload, 0, apsFrame.Payload.Length);
            _zigBeeTransportReceive.ReceiveCommand(apsFrame);
        }
コード例 #17
0
        public static ZigBeeApsFrame Create(ZToolPacket packet)
        {
            ZigBeeApsFrame apsFrame = new ZigBeeApsFrame();

            apsFrame.Cluster             = ZdoCommandType.GetValueByType(ZdoCommandType.CommandType.IEEE_ADDRESS_RESPONSE).ClusterId;
            apsFrame.DestinationEndpoint = 0;
            apsFrame.SourceAddress       = BitConverter.ToUInt16(packet.Packet, 13);
            apsFrame.SourceEndpoint      = 0;
            apsFrame.Profile             = 0;

            apsFrame.Payload = packet.Packet.Skip(3).Take(packet.Packet[1]).ToArray();

            return(apsFrame);
        }
コード例 #18
0
        public void TestReceive()
        {
            ZToolPacket data = GetPacket(
                "FE 32 45 B1 00 00 00 02 00 02 14 D4 F1 02 00 4B 12 00 0B 88 DC 00 01 88 17 00 8F 22 15 02 01 3B 14 D4 F1 02 00 4B 12 00 EC A1 A5 01 00 8D 15 00 35 38 15 02 01 58 B5");

            ZigBeeApsFrame apsFrame = ZdoManagementLqi.Create(data);

            Assert.Equal(0x0000, apsFrame.SourceAddress);
            Assert.Equal(0, apsFrame.Profile);
            Assert.Equal(0, apsFrame.DestinationEndpoint);
            Assert.Equal(GetPacketData(
                             "00 00 02 00 02 14 D4 F1 02 00 4B 12 00 0B 88 DC 00 01 88 17 00 8F 22 15 02 01 3B 14 D4 F1 02 00 4B 12 00 EC A1 A5 01 00 8D 15 00 35 38 15 02 01 58"),
                         apsFrame.Payload);
        }
コード例 #19
0
        public static ZigBeeApsFrame Create(ZToolPacket packet)
        {
            ZigBeeApsFrame apsFrame = new ZigBeeApsFrame();

            apsFrame.Cluster             = ZdoCommandType.GetValueByType(ZdoCommandType.CommandType.MANAGEMENT_LEAVE_RESPONSE).ClusterId;
            apsFrame.DestinationEndpoint = 0;
            apsFrame.SourceAddress       = (ushort)(packet.Packet[4] | (packet.Packet[5] << 8));
            apsFrame.SourceEndpoint      = 0;
            apsFrame.Profile             = 0;

            apsFrame.Payload = packet.Packet.Skip(5).Take(packet.Packet[1] - 1).ToArray();

            return(apsFrame);
        }
コード例 #20
0
        public bool Notify(AF_INCOMING_MSG msg)
        {
            ZigBeeApsFrame apsFrame = new ZigBeeApsFrame();

            apsFrame.Cluster             = msg.ClusterId;
            apsFrame.DestinationEndpoint = msg.DstEndpoint;
            apsFrame.SourceEndpoint      = msg.SrcEndpoint;
            apsFrame.Profile             = GetEndpointProfile(msg.DstEndpoint);
            apsFrame.SourceAddress       = msg.SrcAddr.Value;
            apsFrame.Payload             = msg.Data;

            _zigBeeNetworkReceive.ReceiveCommand(apsFrame);

            return(true);
        }
コード例 #21
0
        public static ZigBeeApsFrame Create(ZToolPacket packet)
        {
            ZigBeeApsFrame apsFrame = new ZigBeeApsFrame();

            apsFrame.Cluster             = (ushort)(packet.Packet[7] | (packet.Packet[8] << 8));
            apsFrame.DestinationAddress  = (ushort)(packet.Packet[11] | (packet.Packet[12] << 8));
            apsFrame.DestinationEndpoint = 0;
            apsFrame.SourceAddress       = (ushort)(packet.Packet[4] | (packet.Packet[5] << 8));
            apsFrame.SourceEndpoint      = 0;
            apsFrame.Profile             = 0;

            apsFrame.Payload = packet.Packet.Skip(12).ToArray();
            apsFrame.Payload = apsFrame.Payload.Take(apsFrame.Payload.Count() - 1).ToArray();

            return(apsFrame);
        }
コード例 #22
0
        public static ZigBeeApsFrame Create(ZToolPacket packet)
        {
            ZigBeeApsFrame apsFrame = new ZigBeeApsFrame();

            apsFrame.Cluster             = (ushort)(packet.Packet[7] | (packet.Packet[8] << 8));
            apsFrame.DestinationAddress  = (ushort)(packet.Packet[11] | (packet.Packet[12] << 8));
            apsFrame.DestinationEndpoint = 0;
            apsFrame.SourceAddress       = (ushort)(packet.Packet[4] | (packet.Packet[5] << 8));
            apsFrame.SourceEndpoint      = 0;
            apsFrame.Profile             = 0;
            apsFrame.ApsCounter          = packet.Packet[10];

            apsFrame.Payload = new byte[packet.Packet.Length - 13];

            Array.Copy(packet.Packet, 13, apsFrame.Payload, 0, packet.Packet.Length - 14);

            return(apsFrame);
        }
コード例 #23
0
        public void SendCommand(ZigBeeApsFrame apsFrame)
        {
            if (_frameHandler == null)
            {
                Log.Debug("XBee frame handler not set for send.");
                return;
            }

            XBeeTransmitRequestExplicitCommand command = new XBeeTransmitRequestExplicitCommand();

            command.SetNetworkAddress(apsFrame.DestinationAddress);
            command.SetDestinationEndpoint(apsFrame.DestinationEndpoint);
            command.SetSourceEndpoint(apsFrame.SourceEndpoint);
            command.SetProfileId(apsFrame.Profile);
            command.SetCluster(apsFrame.Cluster);
            command.SetBroadcastRadius(0);

            if (apsFrame.DestinationAddress > 0xFFF8)
            {
                command.SetIeeeAddress(_broadcastIeeeAddress);
            }
            else if (apsFrame.DestinationIeeeAddress == null)
            {
                if (apsFrame.AddressMode == ZigBeeNwkAddressMode.Group)
                {
                    command.SetIeeeAddress(_groupIeeeAddress);
                }
                command.SetIeeeAddress(new IeeeAddress(BigInteger.Parse("FFFFFFFFFFFFFFFF", NumberStyles.HexNumber)));
            }
            else
            {
                command.SetIeeeAddress(apsFrame.DestinationIeeeAddress);
            }

            if (apsFrame.SecurityEnabled)
            {
                command.AddOptions(TransmitOptions.ENABLE_APS_ENCRYPTION);
            }
            command.SetData(apsFrame.Payload.Select(item => (int)item).ToArray());

            Log.Debug($"XBee send: {{{command.ToString()}}}");
            _frameHandler.SendRequestAsync(command);
        }
コード例 #24
0
        public void SendCommand(ZigBeeApsFrame apsFrame)
        {
            var offset = 0;
            var len    = apsFrame.Payload.Length + 14;

            if (apsFrame.AddressMode == ZigBeeNwkAddressMode.Group)
            {
                len += 2;
            }
            else
            {
                if (apsFrame.DestinationIeeeAddress == null)
                {
                    len += 3;
                }
                else
                {
                    len += 9;
                }
            }
            var buffer = new byte[len];

            len -= 2;//Remove 2 lenght bytes
            buffer[offset++] = (byte)len;
            buffer[offset++] = (byte)(len >> 8);

            buffer[offset++] = apsFrame.ApsCounter;
            buffer[offset++] = 0;//Flags
            if (apsFrame.AddressMode == ZigBeeNwkAddressMode.Group)
            {
                buffer[offset++] = (byte)DestinationAddressMode.GroupAddress;
                buffer[offset++] = (byte)apsFrame.DestinationAddress;
                buffer[offset++] = (byte)(apsFrame.DestinationAddress >> 8);
            }
            else
            {
                if (apsFrame.DestinationIeeeAddress == null)
                {
                    buffer[offset++] = (byte)DestinationAddressMode.NwkAddress;
                    buffer[offset++] = (byte)apsFrame.DestinationAddress;
                    buffer[offset++] = (byte)(apsFrame.DestinationAddress >> 8);
                }
                else
                {
                    buffer[offset++] = (byte)DestinationAddressMode.IeeeAddress;
                    buffer[offset++] = (byte)apsFrame.DestinationIeeeAddress.Value;
                    buffer[offset++] = (byte)(apsFrame.DestinationIeeeAddress.Value >> 8);
                    buffer[offset++] = (byte)(apsFrame.DestinationIeeeAddress.Value >> 16);
                    buffer[offset++] = (byte)(apsFrame.DestinationIeeeAddress.Value >> 24);
                    buffer[offset++] = (byte)(apsFrame.DestinationIeeeAddress.Value >> 32);
                    buffer[offset++] = (byte)(apsFrame.DestinationIeeeAddress.Value >> 40);
                    buffer[offset++] = (byte)(apsFrame.DestinationIeeeAddress.Value >> 48);
                    buffer[offset++] = (byte)(apsFrame.DestinationIeeeAddress.Value >> 56);
                }
                buffer[offset++] = apsFrame.DestinationEndpoint;
            }

            buffer[offset++] = (byte)apsFrame.Profile;
            buffer[offset++] = (byte)(apsFrame.Profile >> 8);

            buffer[offset++] = (byte)apsFrame.Cluster;
            buffer[offset++] = (byte)(apsFrame.Cluster >> 8);

            buffer[offset++] = (byte)apsFrame.SourceEndpoint;

            buffer[offset++] = (byte)apsFrame.Payload.Length;
            buffer[offset++] = (byte)(apsFrame.Payload.Length >> 8);

            Buffer.BlockCopy(apsFrame.Payload, 0, buffer, offset, apsFrame.Payload.Length);
            offset += apsFrame.Payload.Length;

            buffer[offset++] = 0x04;

            buffer[offset] = (byte)apsFrame.Radius;

            ApsRequestsQueue.Enqueue(buffer);
            Process();
        }
コード例 #25
0
        public void SendCommand()
        {
            IList <IXBeeCommand>     sentCommands     = new List <IXBeeCommand>();
            Mock <IXBeeFrameHandler> frameHandlerMock = new Mock <IXBeeFrameHandler>();

            frameHandlerMock.Setup(frameHandler => frameHandler.SendRequestAsync(It.IsAny <IXBeeCommand>())).Callback <IXBeeCommand>(item => sentCommands.Add(item)).ReturnsAsync(() => null);

            ZigBeeDongleXBee dongle = new ZigBeeDongleXBee(null);

            try
            {
                Type      fieldType = dongle.GetType();
                FieldInfo fieldInfo = fieldType.GetField("_frameHandler", BindingFlags.NonPublic | BindingFlags.Instance);
                fieldInfo.SetValue(dongle, frameHandlerMock.Object);
            }
            catch (Exception ex)
            {
                _output.WriteLine(ex.StackTrace);
            }

            MatchDescriptorResponse command = new MatchDescriptorResponse
            {
                DestinationAddress = new ZigBeeEndpointAddress(46946),
                NwkAddrOfInterest  = 46946,
                Status             = ZDO.ZdoStatus.SUCCESS,
                TransactionId      = 0x2A
            };
            List <ushort> matchList = new List <ushort>
            {
                1
            };

            command.MatchList = matchList;

            ZigBeeApsFrame apsFrame = new ZigBeeApsFrame
            {
                DestinationAddress     = 46946,
                DestinationEndpoint    = 0,
                DestinationIeeeAddress = new IeeeAddress(BigInteger.Parse("000D6F00057CF7C6", NumberStyles.HexNumber)),
                Cluster     = 32774,
                AddressMode = ZigBeeNwkAddressMode.Device,
                Radius      = 31,
                ApsCounter  = 42,
                Payload     = new byte[] { 0x00, 0x00, 0x2E, 0x5B, 0x01, 0x01 }
            };

            _output.WriteLine(command.ToString());
            _output.WriteLine(apsFrame.ToString());

            dongle.SendCommand(apsFrame);
            Assert.Equal(1, sentCommands.Count);
            XBeeTransmitRequestExplicitCommand sentCommand = (XBeeTransmitRequestExplicitCommand)sentCommands[0];

            sentCommand.SetFrameId(32);
            _output.WriteLine(sentCommand.ToString());

            int[] payload = new int[] { 0, 26, 17, 32, 0, 13, 111, 0, 5, 124, 247, 198, 183, 98, 0, 0, 128, 6, 0, 0, 0, 0,
                                        0, 0, 46, 91, 1, 1, 234 };

            int[] output = sentCommand.Serialize();
            Assert.True(payload.SequenceEqual(output));
        }
コード例 #26
0
        public void TestToString()
        {
            ZigBeeApsFrame frame = new ZigBeeApsFrame();

            Assert.NotNull(frame.ToString());
        }
コード例 #27
0
        public void ReceivedAsynchronousCommand(ZToolPacket packet)
        {
            switch (packet.Subsystem)
            {
            case ZToolPacket.CommandSubsystem.AF:
                return;

            case ZToolPacket.CommandSubsystem.ZDO:
                break;

            default:
                break;
            }

            ZigBeeApsFrame apsFrame = null;

            switch ((ZToolCMD)packet.CMD.Value)
            {
            case ZToolCMD.ZDO_MSG_CB_INCOMING:
                apsFrame = ZdoCallbackIncoming.Create(packet);
                break;

            case ZToolCMD.ZDO_IEEE_ADDR_RSP:
                apsFrame = ZdoIeeeAddress.Create(packet);
                break;

            case ZToolCMD.ZDO_END_DEVICE_ANNCE_IND:
                apsFrame = ZdoEndDeviceAnnounce.Create(packet);
                break;

            case ZToolCMD.ZDO_NODE_DESC_RSP:
                apsFrame = ZdoNodeDescriptor.Create(packet);
                break;

            case ZToolCMD.ZDO_POWER_DESC_RSP:
                apsFrame = ZdoPowerDescriptor.Create(packet);
                break;

            case ZToolCMD.ZDO_ACTIVE_EP_RSP:
                apsFrame = ZdoActiveEndpoint.Create(packet);
                break;

            case ZToolCMD.ZDO_SIMPLE_DESC_RSP:
                apsFrame = ZdoSimpleDescriptor.Create(packet);
                break;

            case ZToolCMD.ZDO_MGMT_LQI_RSP:
                apsFrame = ZdoManagementLqi.Create(packet);
                break;

            case ZToolCMD.ZDO_MGMT_RTG_RSP:
                apsFrame = ZdoManagementRouting.Create(packet);
                break;

            case ZToolCMD.ZDO_MGMT_LEAVE_RSP:
                apsFrame = ZdoManagementLeave.Create(packet);
                break;

            default:
                _logger.Debug($"Unhandled SerialPacket type {packet.CMD}");
                break;
            }

            if (apsFrame != null)
            {
                _ZigBeeNetworkReceive.ReceiveCommand(apsFrame);
                return;
            }
        }