Example #1
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()}");
        }
Example #2
0
        public void TestBootloaderEvent()
        {
            int[]      data  = GetPacketData("00 16 A0 00 13 A2 00 41 62 F6 1A 00 00 01 40 00 00 00 00 00 00 00 FF FF B8");
            IXBeeEvent frame = XBeeEventFactory.GetXBeeFrame(data);

            Assert.True(frame is XBeeOtaFirmwareUpdateStatusEvent);

            _output.WriteLine(frame.ToString());

            XBeeOtaFirmwareUpdateStatusEvent xbeeEvent = (XBeeOtaFirmwareUpdateStatusEvent)frame;

            Assert.Equal(0, xbeeEvent.GetBlockNumber());
            Assert.Equal(new IeeeAddress(BigInteger.Parse("0013A2004162F61A", System.Globalization.NumberStyles.HexNumber)), xbeeEvent.GetIeeeAddress());
            Assert.Equal(0, xbeeEvent.GetNetworkAddress());
        }
Example #3
0
        public void TestGetEvent()
        {
            int[]      data  = GetPacketData("00 1A 91 00 17 88 01 02 13 65 36 F7 7B 02 01 00 01 01 04 41 18 7C 01 21 00 00 20 C8 C4");
            IXBeeEvent frame = XBeeEventFactory.GetXBeeFrame(data);

            Assert.True(frame is XBeeReceivePacketExplicitEvent);
            _output.WriteLine(frame.ToString());

            XBeeReceivePacketExplicitEvent xbeeEvent = (XBeeReceivePacketExplicitEvent)frame;

            Assert.Equal(1, xbeeEvent.GetClusterId());
            Assert.Equal(1, xbeeEvent.GetDestinationEndpoint());
            Assert.Equal(63355, xbeeEvent.GetNetworkAddress());
            Assert.Equal(0x104, xbeeEvent.GetProfileId());
        }
Example #4
0
 /// <summary>
 /// Notify any event listeners when we receive an event.
 /// </summary>
 /// <param name="xBeeEvent">the <see cref="IXBeeEvent"/> received.</param>
 private void NotifyEventReceived(IXBeeEvent xBeeEvent)
 {
     Log.Debug($"RX XBEE: {xBeeEvent.ToString()}");
     lock (_eventListeners)
     {
         foreach (IXBeeEventListener listener in _eventListeners)
         {
             try
             {
                 listener.XbeeEventReceived(xBeeEvent);
             }
             catch (Exception e)
             {
                 Log.Debug($"Exception processing XBee frame: {xBeeEvent}: ", e);
             }
         }
     }
 }