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