public void TestNonMemberRadius() { ZigBeeApsFrame frame = new ZigBeeApsFrame(); frame.NonMemberRadius = 4; Assert.Equal(4, frame.NonMemberRadius); }
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)); } } }
public void TestGroupAddress() { ZigBeeApsFrame frame = new ZigBeeApsFrame(); _output.WriteLine(frame.ToString()); frame.GroupAddress = 1; Assert.Equal(1, frame.GroupAddress); }
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); }
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); }
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); }
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); }
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); }
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); }
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()); }
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()}"); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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(); }
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)); }
public void TestToString() { ZigBeeApsFrame frame = new ZigBeeApsFrame(); Assert.NotNull(frame.ToString()); }
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; } }