private void ReadInitialValues()
        {
            LowpanIdentity   = new LowpanIdentity(wpanApi);
            LowpanCredential = new LowpanCredential(wpanApi);
            LowpanScanner    = new LowpanScanner(wpanApi);

            ncpVersion            = wpanApi.GetPropNcpVersion();
            protocolVersion       = wpanApi.GetPropProtocolVersion();
            interfaceType         = (SpinelProtocolType)wpanApi.GetPropInterfaceType();
            vendor                = wpanApi.GetPropVendorId().ToString();
            capabilities          = wpanApi.GetPropCaps();
            supportedChannels     = wpanApi.GetPhyChanSupported();
            networkInterfaceState = wpanApi.GetNetIfUp();
            threadStackState      = wpanApi.GetNetStackUp();
            netRole               = (SpinelNetRole)wpanApi.GetNetRole();
            extendedAddress       = new HardwareAddress(wpanApi.GetMac_15_4_Laddr().bytes);
            hardwareAddress       = new HardwareAddress(wpanApi.GetPropHwaddr().bytes);
            ipAddresses           = NetUtilities.SpinelIPtoSystemIP(wpanApi.GetIPv6AddressTable());

            ipLinkLocal = new IPAddress(wpanApi.GetIPv6LLAddr().bytes);
            ipMeshLocal = new IPAddress(wpanApi.GetIPv6MLAddr().bytes);
            lastStatus  = (SpinelStatus)wpanApi.GetPropLastStatus();
        }
        private void PropertyChanged(uint PropertyId, object PropertyValue)
        {
            switch ((SpinelProperties)PropertyId)
            {
            case SpinelProperties.SPINEL_PROP_LAST_STATUS:

                lastStatus = (SpinelStatus)(uint)PropertyValue;

                if (OnLowpanPropertyChanged != null)
                {
                    OnLowpanPropertyChanged((SpinelProperties)PropertyId);
                }

                break;

            case SpinelProperties.SPINEL_PROP_STREAM_NET:
            case SpinelProperties.SPINEL_PROP_STREAM_NET_INSECURE:


                byte[] ipv6frame = (byte[])PropertyValue;

                if (OnPacketReceived != null)
                {
                    OnPacketReceived(ipv6frame);
                }

                break;

            case SpinelProperties.SPINEL_PROP_NET_ROLE:

                SpinelNetRole newRole = (SpinelNetRole)(byte)(PropertyValue);

                if (netRole != newRole)
                {
                    netRole = newRole;

                    if (OnLowpanPropertyChanged != null)
                    {
                        OnLowpanPropertyChanged((SpinelProperties)PropertyId);
                    }
                }

                break;

            case SpinelProperties.SPINEL_PROP_IPV6_LL_ADDR:

                if (PropertyValue == null)
                {
                    ipLinkLocal = null;
                    return;
                }

                IPv6Address ipaddrLL = (IPv6Address)PropertyValue;
                ipLinkLocal = new IPAddress(ipaddrLL.bytes);

                if (OnLowpanPropertyChanged != null)
                {
                    OnLowpanPropertyChanged((SpinelProperties)PropertyId);
                }

                break;

            case SpinelProperties.SPINEL_PROP_IPV6_ML_ADDR:

                if (PropertyValue == null)
                {
                    ipMeshLocal = null;
                    return;
                }

                IPv6Address ipaddrML = (IPv6Address)PropertyValue;
                ipMeshLocal = new IPAddress(ipaddrML.bytes);


                if (OnLowpanPropertyChanged != null)
                {
                    OnLowpanPropertyChanged((SpinelProperties)PropertyId);
                }

                break;


            case SpinelProperties.SPINEL_PROP_IPV6_ADDRESS_TABLE:

                ipAddresses = NetUtilities.SpinelIPtoSystemIP((IPv6Address[])PropertyValue);

                if (OnLowpanPropertyChanged != null)
                {
                    OnLowpanPropertyChanged((SpinelProperties)PropertyId);
                }

                break;

            case SpinelProperties.SPINEL_PROP_IPV6_MULTICAST_ADDRESS_TABLE:

                ipMulticastAddresses = NetUtilities.SpinelIPtoSystemIP((IPv6Address[])PropertyValue);

                if (OnLowpanPropertyChanged != null)
                {
                    OnLowpanPropertyChanged((SpinelProperties)PropertyId);
                }

                break;
            }
        }