<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Association request response is not received in Wireless MCU</title>
    <link>https://community.nxp.com/t5/Wireless-MCU/Association-request-response-is-not-received/m-p/765897#M4641</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Mario,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks for reply.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I also faced same issue between Coordinator and router communication.&lt;/P&gt;&lt;P&gt;I am using JN-SW-4170-Zigbee-3.0-v1745.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Issue :&lt;/P&gt;&lt;P&gt;1) After sometimes I am not receiving association request response.&lt;/P&gt;&lt;P&gt;2) Why router is always sending data request after association request ? and same issue occur in non-sleepy end device ?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Above issue always reproducible.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Issue reproducing steps:&lt;/P&gt;&lt;P&gt;1) First of all, register only ZPS_vTCSetCallback(&amp;amp;fTransportKeyDecider); in APP_vInitialiseCoordinator API. in Coordinator application(I have attached files you can check it)&lt;/P&gt;&lt;P&gt;2) Same steps follow as per previous steps but you can use router instead of end device.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Note :&lt;/P&gt;&lt;P&gt;1) I am using end device as non sleepy.&lt;/P&gt;&lt;P&gt;2) I have add ZPS_vTCSetCallback(&amp;amp;fTransportKeyDecider); in APP_vInitialiseCoordinator API.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have added some changes in &lt;STRONG&gt;Coordinator and router application files&lt;/STRONG&gt;,Please you can review it.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Coordinator Application : app_coordinator.c&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * MODULE: JN-AN-1184 ZigBeePro Application Template&lt;BR /&gt; *&lt;BR /&gt; * COMPONENT: app_coordinator.c&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION: Coordinator Application&lt;BR /&gt; *&lt;BR /&gt; *****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * This software is owned by NXP B.V. and/or its supplier and is protected&lt;BR /&gt; * under applicable copyright laws. All rights are reserved. We grant You,&lt;BR /&gt; * and any third parties, a license to use this software solely and&lt;BR /&gt; * exclusively on NXP products [NXP Microcontrollers such as JN5169, JN5168,&lt;BR /&gt; * JN5164, JN5161].&lt;BR /&gt; * You, and any third parties must reproduce the copyright and warranty notice&lt;BR /&gt; * and any other legend of ownership on each copy or partial copy of the&lt;BR /&gt; * software.&lt;BR /&gt; *&lt;BR /&gt; * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"&lt;BR /&gt; * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE&lt;BR /&gt; * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE&lt;BR /&gt; * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE&lt;BR /&gt; * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR&lt;BR /&gt; * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF&lt;BR /&gt; * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS&lt;BR /&gt; * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN&lt;BR /&gt; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)&lt;BR /&gt; * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE&lt;BR /&gt; * POSSIBILITY OF SUCH DAMAGE.&lt;BR /&gt; *&lt;BR /&gt; * Copyright NXP B.V. 2015. All rights reserved&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;/*** Include files ***/&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;#include &amp;lt;jendefs.h&amp;gt;&lt;BR /&gt;#include &amp;lt;dbg.h&amp;gt;&lt;BR /&gt;#include &amp;lt;pdm.h&amp;gt;&lt;BR /&gt;#include &amp;lt;pwrm.h&amp;gt;&lt;BR /&gt;#include &amp;lt;zps_apl_af.h&amp;gt;&lt;BR /&gt;#include &amp;lt;PDM_IDs.h&amp;gt;&lt;BR /&gt;#include "app_common.h"&lt;BR /&gt;#include "app_coordinator.h"&lt;BR /&gt;#include "ZTimer.h"&lt;BR /&gt;#include "ZQueue.h"&lt;/P&gt;&lt;P&gt;/****************************************************************************/&lt;BR /&gt;/*** Macro Definitions ***/&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;#ifndef DEBUG_APP&lt;BR /&gt; #define TRACE_APP FALSE&lt;BR /&gt;#else&lt;BR /&gt; #define TRACE_APP TRUE&lt;BR /&gt;#endif&lt;/P&gt;&lt;P&gt;/****************************************************************************/&lt;BR /&gt;/*** Type Definitions ***/&lt;BR /&gt;/****************************************************************************/&lt;/P&gt;&lt;P&gt;/****************************************************************************/&lt;BR /&gt;/*** Local Function Prototypes ***/&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;PRIVATE void vStartup(void);&lt;BR /&gt;PRIVATE void vWaitForNetworkFormation(ZPS_tsAfEvent sStackEvent);&lt;BR /&gt;PRIVATE void vHandleStackEvent(ZPS_tsAfEvent sStackEvent);&lt;/P&gt;&lt;P&gt;extern void ZPS_vTCSetCallback(void *);&lt;BR /&gt;bool fTransportKeyDecider(uint16 u16ShortAddress, uint64 u64DeviceAddress, uint64 u64ParentAddress, uint8 u8Status, uint16 u16Interface);&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;/*** Exported Variables ***/&lt;BR /&gt;/****************************************************************************/&lt;/P&gt;&lt;P&gt;/****************************************************************************/&lt;BR /&gt;/*** Local Variables ***/&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;PRIVATE tsDeviceDesc s_eDeviceState;&lt;BR /&gt;PUBLIC uint8 au8DefaultTCLinkKey[16] = {0x5a, 0x69, 0x67, 0x42, 0x65, 0x65, 0x41, 0x6c,&lt;BR /&gt; 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x30, 0x39};&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;/*** Exported Functions ***/&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;/****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * NAME: APP_vInitialiseCoordinator&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION:&lt;BR /&gt; * Initialises the Coordinator application&lt;BR /&gt; *&lt;BR /&gt; * RETURNS:&lt;BR /&gt; * void&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;PUBLIC void APP_vInitialiseCoordinator(void)&lt;BR /&gt;{&lt;BR /&gt; bool_t bDeleteRecords = TRUE;&lt;BR /&gt; uint16 u16DataBytesRead;&lt;/P&gt;&lt;P&gt;/* If required, at this point delete the network context from flash, perhaps upon some condition&lt;BR /&gt; * For example, check if a button is being held down at reset, and if so request the Persistent&lt;BR /&gt; * Data Manager to delete all its records:&lt;BR /&gt; * e.g. bDeleteRecords = vCheckButtons();&lt;BR /&gt; * Alternatively, always call PDM_vDelete() if context saving is not required.&lt;BR /&gt; */&lt;BR /&gt; if (bDeleteRecords)&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Deleting all records from flash\n");&lt;BR /&gt; PDM_vDeleteAllDataRecords();&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;/* Restore any application data previously saved to flash&lt;BR /&gt; * All Application records must be loaded before the call to&lt;BR /&gt; * ZPS_eAplAfInit&lt;BR /&gt; */&lt;BR /&gt; s_eDeviceState.eNodeState = E_STARTUP;&lt;BR /&gt; PDM_eReadDataFromRecord(PDM_ID_APP_COORD,&lt;BR /&gt; &amp;amp;s_eDeviceState,&lt;BR /&gt; sizeof(s_eDeviceState),&lt;BR /&gt; &amp;amp;u16DataBytesRead);&lt;/P&gt;&lt;P&gt;/* Initialise ZBPro stack */&lt;BR /&gt; ZPS_eAplAfInit();&lt;BR /&gt; ZPS_vAplSecSetInitialSecurityState(ZPS_ZDO_PRECONFIGURED_LINK_KEY,&lt;BR /&gt; au8DefaultTCLinkKey,&lt;BR /&gt; 0x00,&lt;BR /&gt; ZPS_APS_GLOBAL_LINK_KEY);&lt;BR /&gt; /* Initialise other software modules&lt;BR /&gt; * HERE&lt;BR /&gt; */&lt;/P&gt;&lt;P&gt;/* Always initialise any peripherals used by the application&lt;BR /&gt; * HERE&lt;BR /&gt; */&lt;/P&gt;&lt;P&gt;/* If the device state has been restored from flash, re-start the stack&lt;BR /&gt; * and set the application running again. Note that if there is more than 1 state&lt;BR /&gt; * where the network has already joined, then the other states should also be included&lt;BR /&gt; * in the test below&lt;BR /&gt; * E.g. E_RUNNING_1, E_RUNNING_2......&lt;BR /&gt; * if (E_RUNNING_1 == s_sDevice || E_RUNNING_2 == s_sDevice)&lt;BR /&gt; */&lt;BR /&gt; &lt;BR /&gt; ZPS_vTCSetCallback(&amp;amp;fTransportKeyDecider);&lt;BR /&gt; &lt;BR /&gt; if (E_RUNNING == s_eDeviceState.eNodeState)&lt;BR /&gt; {&lt;BR /&gt; ZPS_teStatus eStatus = ZPS_eAplZdoStartStack();&lt;/P&gt;&lt;P&gt;DBG_vPrintf(TRACE_APP, "APP: Re-starting Stack....\r\n");&lt;/P&gt;&lt;P&gt;if (ZPS_E_SUCCESS != eStatus)&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: ZPS_eZdoStartStack() failed error %d", eStatus);&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;/* Turn on joining */&lt;BR /&gt; ZPS_eAplZdoPermitJoining(0xff);&lt;/P&gt;&lt;P&gt;/* Re-start any other application software modules&lt;BR /&gt; * HERE&lt;BR /&gt; */&lt;BR /&gt; }&lt;BR /&gt; else /* perform any actions require on initial start-up */&lt;BR /&gt; {&lt;BR /&gt; /* Return the device to the start-up start if it was reset during the network formation stage */&lt;BR /&gt; s_eDeviceState.eNodeState = E_STARTUP;&lt;BR /&gt; }&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * NAME: APP_vtaskCoordinator&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION:&lt;BR /&gt; * Main state machine&lt;BR /&gt; *&lt;BR /&gt; * RETURNS:&lt;BR /&gt; * void&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;PUBLIC void APP_vtaskCoordinator ( void )&lt;BR /&gt;{&lt;BR /&gt; ZPS_tsAfEvent sStackEvent;&lt;BR /&gt; sStackEvent.eType = ZPS_EVENT_NONE;&lt;/P&gt;&lt;P&gt;/* check if any messages to collect */&lt;BR /&gt; if ( ZQ_bQueueReceive(&amp;amp;APP_msgZpsEvents, &amp;amp;sStackEvent) )&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: No event to process\n");&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;if ( ZTIMER_eGetState(u8App_tmr1sec) == E_ZTIMER_STATE_EXPIRED )&lt;BR /&gt; {&lt;BR /&gt; ZTIMER_eStart (u8App_tmr1sec, ZTIMER_TIME_SEC(1) );&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;switch (s_eDeviceState.eNodeState)&lt;BR /&gt; {&lt;BR /&gt; case E_STARTUP:&lt;BR /&gt; {&lt;BR /&gt; vStartup();&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case E_NETWORK_FORMATION:&lt;BR /&gt; {&lt;BR /&gt; vWaitForNetworkFormation(sStackEvent);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case E_RUNNING:&lt;BR /&gt; {&lt;BR /&gt; vHandleStackEvent(sStackEvent);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;default:&lt;BR /&gt; {&lt;BR /&gt; /* Do nothing */&lt;BR /&gt; }&lt;BR /&gt; break;&lt;BR /&gt; }&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/****************************************************************************/&lt;BR /&gt;/*** Local Functions ***/&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;/****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * NAME: vStartup&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION:&lt;BR /&gt; * Initiates network formation&lt;BR /&gt; *&lt;BR /&gt; * RETURNS:&lt;BR /&gt; * Sequence number&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;PRIVATE void vStartup(void)&lt;BR /&gt;{&lt;BR /&gt; /* display the startup splash screen */&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Application startup\n");&lt;/P&gt;&lt;P&gt;/* Stops Coordinator from sleeping ever - but does allow doze */&lt;BR /&gt; PWRM_eStartActivity();&lt;/P&gt;&lt;P&gt;ZPS_teStatus eStatus = ZPS_eAplZdoStartStack();&lt;BR /&gt; if (ZPS_E_SUCCESS == eStatus)&lt;BR /&gt; {&lt;BR /&gt; s_eDeviceState.eNodeState = E_NETWORK_FORMATION;&lt;BR /&gt; }&lt;BR /&gt; else&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: ZPS_eZdoStartStack() failed error %d", eStatus);&lt;BR /&gt; }&lt;BR /&gt; ZTIMER_eStart ( u8App_tmr1sec, ZTIMER_TIME_SEC(1) );&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * NAME: vWaitForNetworkFormation&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION:&lt;BR /&gt; * Handles stack events during network formation&lt;BR /&gt; *&lt;BR /&gt; * PARAMETERS: Name RW Usage&lt;BR /&gt; * sStackEvent R Contains details of the stack event&lt;BR /&gt; *&lt;BR /&gt; * RETURNS:&lt;BR /&gt; * Sequence number&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;PRIVATE void vWaitForNetworkFormation(ZPS_tsAfEvent sStackEvent)&lt;BR /&gt;{&lt;BR /&gt; /* wait for network stack to start up as a coordinator */&lt;BR /&gt; if (ZPS_EVENT_NONE != sStackEvent.eType)&lt;BR /&gt; {&lt;BR /&gt; if (ZPS_EVENT_NWK_STARTED == sStackEvent.eType)&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Network Started\r\n");&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Channel - %d\r\n", ZPS_u8AplZdoGetRadioChannel());&lt;/P&gt;&lt;P&gt;/* turn on joining */&lt;BR /&gt; ZPS_eAplZdoPermitJoining(0xff);&lt;/P&gt;&lt;P&gt;s_eDeviceState.eNodeState = E_RUNNING;&lt;/P&gt;&lt;P&gt;/* Save the application state to flash. Note that all records may be saved at any time by the PDM:&lt;BR /&gt; * if a module has called PDM_vSaveRecord(), but there is insufficient spare memory, an erase is performed&lt;BR /&gt; * followed by a write of all records.&lt;BR /&gt; */&lt;BR /&gt; PDM_eSaveRecordData(PDM_ID_APP_COORD,&lt;BR /&gt; &amp;amp;s_eDeviceState,&lt;BR /&gt; sizeof(s_eDeviceState));&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * NAME: vHandleStackEvent&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION:&lt;BR /&gt; * Handles stack events after the Coordinator has started a network and is in&lt;BR /&gt; * its running state&lt;BR /&gt; *&lt;BR /&gt; * PARAMETERS: Name RW Usage&lt;BR /&gt; * sStackEvent R Contains details of the stack event&lt;BR /&gt; *&lt;BR /&gt; * RETURNS:&lt;BR /&gt; * Sequence number&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;PRIVATE void vHandleStackEvent(ZPS_tsAfEvent sStackEvent)&lt;BR /&gt;{&lt;BR /&gt; if (ZPS_EVENT_NONE != sStackEvent.eType)&lt;BR /&gt; {&lt;BR /&gt; switch (sStackEvent.eType)&lt;BR /&gt; {&lt;BR /&gt; case ZPS_EVENT_APS_INTERPAN_DATA_INDICATION:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: event ZPS_EVENT_APS_INTERPAN_DATA_INDICATION\n");&lt;BR /&gt; PDUM_eAPduFreeAPduInstance(sStackEvent.uEvent.sApsInterPanDataIndEvent.hAPduInst);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_APS_ZGP_DATA_INDICATION:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: event ZPS_EVENT_APS_ZGP_DATA_INDICATION\n");&lt;/P&gt;&lt;P&gt;if (sStackEvent.uEvent.sApsZgpDataIndEvent.hAPduInst)&lt;BR /&gt; {&lt;BR /&gt; PDUM_eAPduFreeAPduInstance(sStackEvent.uEvent.sApsZgpDataIndEvent.hAPduInst);&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_APS_DATA_INDICATION:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_AF_DATA_INDICATION\n");&lt;/P&gt;&lt;P&gt;/* Process incoming cluster messages ... */&lt;BR /&gt; DBG_vPrintf(TRACE_APP, " Profile :%x\r\n",sStackEvent.uEvent.sApsDataIndEvent.u16ProfileId);&lt;BR /&gt; DBG_vPrintf(TRACE_APP, " Cluster :%x\r\n",sStackEvent.uEvent.sApsDataIndEvent.u16ClusterId);&lt;BR /&gt; DBG_vPrintf(TRACE_APP, " EndPoint:%x\r\n",sStackEvent.uEvent.sApsDataIndEvent.u8DstEndpoint);&lt;/P&gt;&lt;P&gt;/* free the application protocol data unit (APDU) once it has been dealt with */&lt;BR /&gt; PDUM_eAPduFreeAPduInstance(sStackEvent.uEvent.sApsDataIndEvent.hAPduInst);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_APS_DATA_CONFIRM:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_APS_DATA_CONFIRM Status %d, Address 0x%04x\n",&lt;BR /&gt; sStackEvent.uEvent.sApsDataConfirmEvent.u8Status,&lt;BR /&gt; sStackEvent.uEvent.sApsDataConfirmEvent.uDstAddr.u16Addr);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_APS_DATA_ACK:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_APS_DATA_ACK Status %d, Address 0x%04x\n",&lt;BR /&gt; sStackEvent.uEvent.sApsDataAckEvent.u8Status,&lt;BR /&gt; sStackEvent.uEvent.sApsDataAckEvent.u16DstAddr);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_NWK_NEW_NODE_HAS_JOINED:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: vCheckStackEvent: ZPS_EVENT_NEW_NODE_HAS_JOINED, Nwk Addr=0x%04x\n",&lt;BR /&gt; sStackEvent.uEvent.sNwkJoinIndicationEvent.u16NwkAddr);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_NWK_LEAVE_INDICATION:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_LEAVE_INDICATION\n");&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_NWK_LEAVE_CONFIRM:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_LEAVE_CONFIRM\n");&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_NWK_STATUS_INDICATION:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_NWK_STATUS_INDICATION\n");&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_NWK_ROUTE_DISCOVERY_CONFIRM:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_ROUTE_DISCOVERY_CFM\n");&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_ERROR:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Monitor Sensors ZPS_EVENT_ERROR\n");&lt;BR /&gt; DBG_vPrintf(TRACE_APP, " Error Code %d\n", sStackEvent.uEvent.sAfErrorEvent.eError);&lt;/P&gt;&lt;P&gt;if (ZPS_ERROR_OS_MESSAGE_QUEUE_OVERRUN == sStackEvent.uEvent.sAfErrorEvent.eError)&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, " Queue handle %d\n",sStackEvent.uEvent.sAfErrorEvent.uErrorData.sAfErrorOsMessageOverrun.hMessage);&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_NWK_POLL_CONFIRM:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_NEW_POLL_COMPLETE, status = %d\n",&lt;BR /&gt; sStackEvent.uEvent.sNwkPollConfirmEvent.u8Status );&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_NWK_JOINED_AS_ROUTER:&lt;BR /&gt; case ZPS_EVENT_NWK_JOINED_AS_ENDDEVICE:&lt;BR /&gt; case ZPS_EVENT_NWK_STARTED:&lt;BR /&gt; case ZPS_EVENT_NWK_FAILED_TO_START:&lt;BR /&gt; case ZPS_EVENT_NWK_FAILED_TO_JOIN:&lt;BR /&gt; case ZPS_EVENT_NWK_DISCOVERY_COMPLETE:&lt;BR /&gt; /* Deliberate fall through */&lt;BR /&gt; default:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: unhandled event %d\n", sStackEvent.eType);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * NAME: fTransportKeyDecider&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION: Decides whether to permit a node to join&lt;BR /&gt; *&lt;BR /&gt; * PARAMETERS:&lt;BR /&gt; * uint16 u16ShortAddress&lt;BR /&gt; * uint64 u64DeviceAddress&lt;BR /&gt; * uint64 u64ParentAddress&lt;BR /&gt; *&lt;BR /&gt; * RETURNS:&lt;BR /&gt; * bool - TRUE/FALSE to allow/disallow join respectively&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;bool fTransportKeyDecider(uint16 u16ShortAddress, uint64 u64DeviceAddress, uint64 u64ParentAddress, uint8 u8Status, uint16 u16Interface)&lt;BR /&gt;{&lt;BR /&gt; uint16 u16TableIndex;&lt;BR /&gt; ZPS_tsAplAib *psAib = ZPS_psAplAibGetAib();&lt;BR /&gt; DBG_vPrintf(1, "fTransportKeyDecider %04x,%016llx, %016llx Type %d ID %d\n",&lt;BR /&gt; u16ShortAddress, u64DeviceAddress,u64ParentAddress, u8Status, u16Interface);&lt;BR /&gt; if (u8Status == ZPS_APL_SEC_DEVICE_LEFT )&lt;BR /&gt; {&lt;BR /&gt; /* leave indication via apsme update device&lt;BR /&gt; * no need to return anything specific&lt;BR /&gt; * this is for info noly&lt;BR /&gt; */&lt;BR /&gt; return TRUE;&lt;BR /&gt; }&lt;BR /&gt; else if (((u8Status == ZPS_APL_SEC_STD_UNSEC_JOIN) || (u8Status == ZPS_APL_SEC_STD_UNSEC_REJOIN)))&lt;BR /&gt; {&lt;BR /&gt; for(u16TableIndex = 0; u16TableIndex &amp;lt; psAib-&amp;gt;psAplDeviceKeyPairTable-&amp;gt;u16SizeOfKeyDescriptorTable; u16TableIndex++)&lt;BR /&gt; {&lt;BR /&gt; /* check given IEEE address present APS Key table */&lt;BR /&gt; if(u64DeviceAddress ==&lt;BR /&gt; ZPS_u64NwkNibGetMappedIeeeAddr(ZPS_pvAplZdoGetNwkHandle(),&lt;BR /&gt; psAib-&amp;gt;psAplDeviceKeyPairTable-&amp;gt;psAplApsKeyDescriptorEntry[u16TableIndex].u16ExtAddrLkup))&lt;BR /&gt; {&lt;BR /&gt; return TRUE;&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt; return FALSE;&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;/* only option left is secure rejoin where no key is transported */&lt;BR /&gt; return TRUE;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/****************************************************************************/&lt;BR /&gt;/*** END OF FILE ***/&lt;BR /&gt;/****************************************************************************/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Router Application : app_router.c&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;/*****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * MODULE: JN-AN-1184 ZigBeePro Application Template&lt;BR /&gt; *&lt;BR /&gt; * COMPONENT: app_router.c&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION: Router Application&lt;BR /&gt; *&lt;BR /&gt; *****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * This software is owned by NXP B.V. and/or its supplier and is protected&lt;BR /&gt; * under applicable copyright laws. All rights are reserved. We grant You,&lt;BR /&gt; * and any third parties, a license to use this software solely and&lt;BR /&gt; * exclusively on NXP products [NXP Microcontrollers such as JN5169, JN5168,&lt;BR /&gt; * JN5164, JN5161].&lt;BR /&gt; * You, and any third parties must reproduce the copyright and warranty notice&lt;BR /&gt; * and any other legend of ownership on each copy or partial copy of the&lt;BR /&gt; * software.&lt;BR /&gt; *&lt;BR /&gt; * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"&lt;BR /&gt; * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE&lt;BR /&gt; * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE&lt;BR /&gt; * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE&lt;BR /&gt; * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR&lt;BR /&gt; * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF&lt;BR /&gt; * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS&lt;BR /&gt; * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN&lt;BR /&gt; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)&lt;BR /&gt; * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE&lt;BR /&gt; * POSSIBILITY OF SUCH DAMAGE.&lt;BR /&gt; *&lt;BR /&gt; * Copyright NXP B.V. 2015. All rights reserved&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;/*** Include files ***/&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;#include &amp;lt;jendefs.h&amp;gt;&lt;BR /&gt;#include &amp;lt;string.h&amp;gt;&lt;BR /&gt;#include &amp;lt;dbg.h&amp;gt;&lt;BR /&gt;#include &amp;lt;zps_apl_af.h&amp;gt;&lt;BR /&gt;#include &amp;lt;zps_apl_aib.h&amp;gt;&lt;BR /&gt;#include &amp;lt;pdm.h&amp;gt;&lt;BR /&gt;#include &amp;lt;PDM_IDs.h&amp;gt;&lt;BR /&gt;#include "app_common.h"&lt;BR /&gt;#include "app_router.h"&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;/*** Macro Definitions ***/&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;#ifndef DEBUG_APP&lt;BR /&gt; #define TRACE_APP FALSE&lt;BR /&gt;#else&lt;BR /&gt; #define TRACE_APP TRUE&lt;BR /&gt;#endif&lt;/P&gt;&lt;P&gt;/****************************************************************************/&lt;BR /&gt;/*** Type Definitions ***/&lt;BR /&gt;/****************************************************************************/&lt;/P&gt;&lt;P&gt;/****************************************************************************/&lt;BR /&gt;/*** Local Function Prototypes ***/&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;PRIVATE void vStartup(void);&lt;BR /&gt;PRIVATE void vWaitForNetworkDiscovery(ZPS_tsAfEvent sStackEvent);&lt;BR /&gt;PRIVATE void vWaitForNetworkJoin(ZPS_tsAfEvent sStackEvent);&lt;BR /&gt;PRIVATE void vHandleStackEvent(ZPS_tsAfEvent sStackEvent);&lt;BR /&gt;PRIVATE void vClearDiscNT(void);&lt;/P&gt;&lt;P&gt;/****************************************************************************/&lt;BR /&gt;/*** Exported Variables ***/&lt;BR /&gt;/****************************************************************************/&lt;/P&gt;&lt;P&gt;/****************************************************************************/&lt;BR /&gt;/*** Local Variables ***/&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;PRIVATE tsDeviceDesc s_eDeviceState;&lt;BR /&gt;PUBLIC uint8 au8DefaultTCLinkKey[16] = {0x5a, 0x69, 0x67, 0x42, 0x65, 0x65, 0x41, 0x6c,&lt;BR /&gt; 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x30, 0x39};&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;/*** Exported Functions ***/&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;/****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * NAME: APP_vInitialiseRouter&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION:&lt;BR /&gt; * Initialises the router application&lt;BR /&gt; *&lt;BR /&gt; * RETURNS:&lt;BR /&gt; * void&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;PUBLIC void APP_vInitialiseRouter(void)&lt;BR /&gt;{&lt;BR /&gt; bool_t bDeleteRecords = TRUE /*FALSE*/;&lt;BR /&gt; uint16 u16DataBytesRead;&lt;/P&gt;&lt;P&gt;/* If required, at this point delete the network context from flash, perhaps upon some condition&lt;BR /&gt; * For example, check if a button is being held down at reset, and if so request the Persistent&lt;BR /&gt; * Data Manager to delete all its records:&lt;BR /&gt; * e.g. bDeleteRecords = vCheckButtons();&lt;BR /&gt; * Alternatively, always call PDM_vDelete() if context saving is not required.&lt;BR /&gt; */&lt;BR /&gt; if (bDeleteRecords)&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Deleting all records from flash\n");&lt;BR /&gt; PDM_vDeleteAllDataRecords();&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;/* Restore any application data previously saved to flash&lt;BR /&gt; * All Application records must be loaded before the call to&lt;BR /&gt; * ZPS_eAplAfInit&lt;BR /&gt; */&lt;BR /&gt; s_eDeviceState.eNodeState = E_STARTUP;&lt;BR /&gt; PDM_eReadDataFromRecord(PDM_ID_APP_ROUTER,&lt;BR /&gt; &amp;amp;s_eDeviceState,&lt;BR /&gt; sizeof(s_eDeviceState),&lt;BR /&gt; &amp;amp;u16DataBytesRead);&lt;/P&gt;&lt;P&gt;/* Initialise ZBPro stack */&lt;BR /&gt; ZPS_eAplAfInit();&lt;BR /&gt; ZPS_vAplSecSetInitialSecurityState(ZPS_ZDO_PRECONFIGURED_LINK_KEY,&lt;BR /&gt; au8DefaultTCLinkKey,&lt;BR /&gt; 0x00,&lt;BR /&gt; ZPS_APS_GLOBAL_LINK_KEY);&lt;BR /&gt; /* Initialise other software modules&lt;BR /&gt; * HERE&lt;BR /&gt; */&lt;/P&gt;&lt;P&gt;/* Always initialise any peripherals used by the applicatio&lt;BR /&gt; * HERE&lt;BR /&gt; */&lt;/P&gt;&lt;P&gt;/* If the device state has been restored from flash, re-start the stack&lt;BR /&gt; * and set the application running again. Note that if there is more than 1 state&lt;BR /&gt; * where the network has already joined, then the other states should also be included&lt;BR /&gt; * in the test below&lt;BR /&gt; * E.g. E_RUNNING_1, E_RUNNING_2......&lt;BR /&gt; * if (E_RUNNING_1 ==s_eDeviceState || E_RUNNING_2 ==s_eDeviceState)&lt;BR /&gt; */&lt;BR /&gt; if (E_RUNNING ==s_eDeviceState.eNodeState)&lt;BR /&gt; {&lt;BR /&gt; ZPS_teStatus eStatus = ZPS_eAplZdoStartStack();&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Re-starting Stack....\r\n");&lt;BR /&gt; if (ZPS_E_SUCCESS != eStatus)&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: ZPS_eZdoStartStack() failed error %d", eStatus);&lt;BR /&gt; }&lt;BR /&gt; /* turn on joining */&lt;BR /&gt; ZPS_eAplZdoPermitJoining(0);&lt;/P&gt;&lt;P&gt;/* Re-start any other application software modules&lt;BR /&gt; * HERE&lt;BR /&gt; */&lt;BR /&gt; }&lt;BR /&gt; else&lt;BR /&gt; /* perform any actions require on initial start-up */&lt;BR /&gt; {&lt;BR /&gt; /* Return the device to the start-up start if it was reset during the network formation stage */&lt;BR /&gt; s_eDeviceState.eNodeState = E_STARTUP;&lt;BR /&gt; }&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * NAME: APP_taskRouter&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION:&lt;BR /&gt; * Main state machine&lt;BR /&gt; *&lt;BR /&gt; * RETURNS:&lt;BR /&gt; * void&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;PUBLIC void APP_vtaskRouter ( void )&lt;BR /&gt;{&lt;BR /&gt; ZPS_tsAfEvent sStackEvent;&lt;/P&gt;&lt;P&gt;sStackEvent.eType = ZPS_EVENT_NONE;&lt;BR /&gt; if (ZQ_bQueueReceive (&amp;amp;APP_msgZpsEvents, &amp;amp;sStackEvent) )&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: No event to process!\n");&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;if (ZTIMER_eGetState(u8App_tmr1sec) == E_ZTIMER_STATE_EXPIRED)&lt;BR /&gt; {&lt;BR /&gt; ZTIMER_eStart (u8App_tmr1sec, ZTIMER_TIME_SEC(1) );&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;switch (s_eDeviceState.eNodeState)&lt;BR /&gt; {&lt;BR /&gt; case E_STARTUP:&lt;BR /&gt; {&lt;BR /&gt; vStartup();&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case E_DISCOVERY:&lt;BR /&gt; {&lt;BR /&gt; vWaitForNetworkDiscovery(sStackEvent);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case E_JOINING_NETWORK:&lt;BR /&gt; {&lt;BR /&gt; vWaitForNetworkJoin(sStackEvent);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case E_RUNNING:&lt;BR /&gt; {&lt;BR /&gt; vHandleStackEvent(sStackEvent);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;default:&lt;BR /&gt; {&lt;BR /&gt; /* Do nothing */&lt;BR /&gt; }&lt;BR /&gt; break;&lt;BR /&gt; }&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/****************************************************************************/&lt;BR /&gt;/*** Local Functions ***/&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;/****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * NAME: vStartup&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION:&lt;BR /&gt; * Start the process of network discovery&lt;BR /&gt; *&lt;BR /&gt; * RETURNS:&lt;BR /&gt; * void&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;PRIVATE void vStartup(void)&lt;BR /&gt;{&lt;BR /&gt; PRIVATE uint8 u8Channel = 11;&lt;/P&gt;&lt;P&gt;vClearDiscNT();&lt;/P&gt;&lt;P&gt;/* Set channel to scan and start stack */&lt;BR /&gt; ZPS_psAplAibGetAib()-&amp;gt;pau32ApsChannelMask[0] = 1 &amp;lt;&amp;lt; u8Channel;&lt;/P&gt;&lt;P&gt;ZPS_teStatus eStatus = ZPS_eAplZdoStartStack();&lt;BR /&gt; if (ZPS_E_SUCCESS == eStatus)&lt;BR /&gt; {&lt;BR /&gt; s_eDeviceState.eNodeState = E_DISCOVERY;&lt;/P&gt;&lt;P&gt;/* Move channel counter to next channel */&lt;BR /&gt; u8Channel++;&lt;/P&gt;&lt;P&gt;if (27 == u8Channel)&lt;BR /&gt; {&lt;BR /&gt; u8Channel = 11;&lt;BR /&gt; }&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;/****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * NAME: vWaitForNetworkDiscovery&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION:&lt;BR /&gt; * Check for and act upon stack events during network discovery.&lt;BR /&gt; *&lt;BR /&gt; * PARAMETERS: Name RW Usage&lt;BR /&gt; * sStackEvent R Contains details of stack event&lt;BR /&gt; * RETURNS:&lt;BR /&gt; * void&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;PRIVATE void vWaitForNetworkDiscovery(ZPS_tsAfEvent sStackEvent)&lt;BR /&gt;{&lt;BR /&gt; /* wait for the node to complete network discovery */&lt;BR /&gt; if (ZPS_EVENT_NONE != sStackEvent.eType)&lt;BR /&gt; {&lt;BR /&gt; if (ZPS_EVENT_NWK_DISCOVERY_COMPLETE == sStackEvent.eType)&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Network discovery complete\n");&lt;/P&gt;&lt;P&gt;if ((ZPS_E_SUCCESS == sStackEvent.uEvent.sNwkDiscoveryEvent.eStatus) ||&lt;BR /&gt; (ZPS_NWK_ENUM_NEIGHBOR_TABLE_FULL == sStackEvent.uEvent.sNwkDiscoveryEvent.eStatus))&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Found %d networks\n", sStackEvent.uEvent.sNwkDiscoveryEvent.u8NetworkCount);&lt;BR /&gt; }&lt;BR /&gt; else&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Network discovery failed with error %d\n",sStackEvent.uEvent.sNwkDiscoveryEvent.eStatus);&lt;BR /&gt; }&lt;BR /&gt; if ( 0 == sStackEvent.uEvent.sNwkDiscoveryEvent.u8NetworkCount&lt;BR /&gt; || 0xff == sStackEvent.uEvent.sNwkDiscoveryEvent.u8SelectedNetwork)&lt;BR /&gt; {&lt;BR /&gt; if (0 != sStackEvent.uEvent.sNwkDiscoveryEvent.u32UnscannedChannels)&lt;BR /&gt; {&lt;BR /&gt; /* continue to look for networks on unscanned channels */&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: No networks found, continue scanning ...\n");&lt;BR /&gt; ZPS_eAplZdoDiscoverNetworks(sStackEvent.uEvent.sNwkDiscoveryEvent.u32UnscannedChannels);&lt;BR /&gt; }&lt;BR /&gt; else&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Exhausted channels to scan\n");&lt;BR /&gt; s_eDeviceState.eNodeState = E_STARTUP;&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt; else&lt;BR /&gt; {&lt;BR /&gt; ZPS_tsNwkNetworkDescr *psNwkDescr = &amp;amp;sStackEvent.uEvent.sNwkDiscoveryEvent.psNwkDescriptors[sStackEvent.uEvent.sNwkDiscoveryEvent.u8SelectedNetwork];&lt;BR /&gt; ZPS_teStatus eStatus;&lt;/P&gt;&lt;P&gt;DBG_vPrintf(TRACE_APP, "APP: Unscanned channels %08x\n", sStackEvent.uEvent.sNwkDiscoveryEvent.u32UnscannedChannels);&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "\tAPP: Ext PAN ID = %016llx\n", psNwkDescr-&amp;gt;u64ExtPanId);&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "\tAPP: Channel = %d\n", psNwkDescr-&amp;gt;u8LogicalChan);&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "\tAPP: Stack Profile = %d\n", psNwkDescr-&amp;gt;u8StackProfile);&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "\tAPP: Zigbee Version = %d\n", psNwkDescr-&amp;gt;u8ZigBeeVersion);&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "\tAPP: Permit Joining = %d\n", psNwkDescr-&amp;gt;u8PermitJoining);&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "\tAPP: Router Capacity = %d\n", psNwkDescr-&amp;gt;u8RouterCapacity);&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "\tAPP: End Device Capacity = %d\n", psNwkDescr-&amp;gt;u8EndDeviceCapacity);&lt;/P&gt;&lt;P&gt;eStatus = ZPS_eAplZdoJoinNetwork(psNwkDescr);&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Trying Joining network\n");&lt;/P&gt;&lt;P&gt;if (ZPS_E_SUCCESS == eStatus)&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Joining network\n");&lt;BR /&gt; s_eDeviceState.eNodeState = E_JOINING_NETWORK;&lt;BR /&gt; }&lt;BR /&gt; else&lt;BR /&gt; {&lt;BR /&gt; /* start scan again */&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Failed to join network reason = %02x\n", eStatus);&lt;BR /&gt; s_eDeviceState.eNodeState = E_STARTUP;&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt; else if (ZPS_EVENT_NWK_FAILED_TO_JOIN == sStackEvent.eType)&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Network discovery failed error=%d\n", sStackEvent.uEvent.sNwkJoinFailedEvent.u8Status);&lt;BR /&gt; s_eDeviceState.eNodeState = E_STARTUP;&lt;BR /&gt; }&lt;BR /&gt; else if (ZPS_EVENT_NWK_JOINED_AS_ROUTER == sStackEvent.eType)&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Node rejoined network with Addr 0x%04x\n",&lt;BR /&gt; sStackEvent.uEvent.sNwkJoinedEvent.u16Addr);&lt;BR /&gt; s_eDeviceState.eNodeState = E_RUNNING;&lt;/P&gt;&lt;P&gt;/* Save the application state to flash. Note that all records may be saved at any time by the PDM:&lt;BR /&gt; * if a module has called PDM_vSaveRecord(), but there is insufficient spare memory, an erase is performed&lt;BR /&gt; * followed by a write of all records.&lt;BR /&gt; */&lt;BR /&gt; PDM_eSaveRecordData(PDM_ID_APP_ROUTER,&lt;BR /&gt; &amp;amp;s_eDeviceState,&lt;BR /&gt; sizeof(s_eDeviceState));&lt;BR /&gt; }&lt;BR /&gt; else&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Unexpected event in E_NETWORK_DISCOVERY - %d\n", sStackEvent.eType);&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * NAME: vWaitForNetworkJoin&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION:&lt;BR /&gt; * Check for and act upon stack events during network join.&lt;BR /&gt; *&lt;BR /&gt; * PARAMETERS: Name RW Usage&lt;BR /&gt; * sStackEvent R Contains details of stack event&lt;BR /&gt; * RETURNS:&lt;BR /&gt; * void&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;PRIVATE void vWaitForNetworkJoin(ZPS_tsAfEvent sStackEvent)&lt;BR /&gt;{&lt;BR /&gt; uint64 u64ExtPANID;&lt;BR /&gt; /* wait for the node to complete network joining */&lt;BR /&gt; if (ZPS_EVENT_NONE != sStackEvent.eType)&lt;BR /&gt; {&lt;BR /&gt; if (ZPS_EVENT_NWK_JOINED_AS_ROUTER == sStackEvent.eType)&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Node joined network with Addr 0x%04x\n",&lt;BR /&gt; sStackEvent.uEvent.sNwkJoinedEvent.u16Addr);&lt;BR /&gt; /* save the EPID for rejoins */&lt;BR /&gt; u64ExtPANID = ZPS_u64NwkNibGetEpid(ZPS_pvAplZdoGetNwkHandle());&lt;BR /&gt; ZPS_eAplAibSetApsUseExtendedPanId(u64ExtPANID);&lt;BR /&gt; s_eDeviceState.eNodeState = E_RUNNING;&lt;BR /&gt; PDM_eSaveRecordData(PDM_ID_APP_ROUTER,&lt;BR /&gt; &amp;amp;s_eDeviceState,&lt;BR /&gt; sizeof(s_eDeviceState));&lt;/P&gt;&lt;P&gt;/* Start timer to periodically active APP_taskRouter */&lt;BR /&gt; ZTIMER_eStart (u8App_tmr1sec, ZTIMER_TIME_SEC(1));&lt;BR /&gt; }&lt;BR /&gt; else if (ZPS_EVENT_NWK_FAILED_TO_JOIN == sStackEvent.eType)&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Node failed to join network. Retrying ...\n");&lt;BR /&gt; s_eDeviceState.eNodeState = E_STARTUP;&lt;BR /&gt; /* Save the application state to flash. Note that all records may be saved at&lt;BR /&gt; * any time by the PDM: if a module has called PDM_vSaveRecord(), but there&lt;BR /&gt; * is insufficient spare memory, an erase is performed followed by a write&lt;BR /&gt; * of all records.&lt;BR /&gt; */&lt;BR /&gt; }&lt;BR /&gt; else&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Unexpected event in E_NETWORK_JOIN - %d\n", sStackEvent.eType);&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * NAME: vHandleStackEvent&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION:&lt;BR /&gt; * Check for and act upon any valid stack event, after the node has joined a&lt;BR /&gt; * network and is in its running state&lt;BR /&gt; *&lt;BR /&gt; * PARAMETERS: Name RW Usage&lt;BR /&gt; * sStackEvent R Contains details of stack event&lt;BR /&gt; * RETURNS:&lt;BR /&gt; * void&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;PRIVATE void vHandleStackEvent(ZPS_tsAfEvent sStackEvent)&lt;BR /&gt;{&lt;BR /&gt; if (ZPS_EVENT_NONE != sStackEvent.eType)&lt;BR /&gt; {&lt;BR /&gt; switch (sStackEvent.eType)&lt;BR /&gt; {&lt;BR /&gt; case ZPS_EVENT_APS_DATA_INDICATION:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_AF_DATA_INDICATION\n");&lt;/P&gt;&lt;P&gt;/* Process incoming cluster messages ... */&lt;BR /&gt; DBG_vPrintf(TRACE_APP, " Profile :%x\r\n",sStackEvent.uEvent.sApsDataIndEvent.u16ProfileId);&lt;BR /&gt; DBG_vPrintf(TRACE_APP, " Cluster :%x\r\n",sStackEvent.uEvent.sApsDataIndEvent.u16ClusterId);&lt;BR /&gt; DBG_vPrintf(TRACE_APP, " EndPoint:%x\r\n",sStackEvent.uEvent.sApsDataIndEvent.u8DstEndpoint);&lt;/P&gt;&lt;P&gt;/* free the application protocol data unit (APDU) once it has been dealt with */&lt;BR /&gt; PDUM_eAPduFreeAPduInstance(sStackEvent.uEvent.sApsDataIndEvent.hAPduInst);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_APS_DATA_CONFIRM:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_APS_DATA_CONFIRM Status %d, Address 0x%04x\n",&lt;BR /&gt; sStackEvent.uEvent.sApsDataConfirmEvent.u8Status,&lt;BR /&gt; sStackEvent.uEvent.sApsDataConfirmEvent.uDstAddr.u16Addr);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_APS_DATA_ACK:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_APS_DATA_ACK Status %d, Address 0x%04x\n",&lt;BR /&gt; sStackEvent.uEvent.sApsDataAckEvent.u8Status,&lt;BR /&gt; sStackEvent.uEvent.sApsDataAckEvent.u16DstAddr);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_NWK_NEW_NODE_HAS_JOINED:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: vCheckStackEvent: ZPS_EVENT_NEW_NODE_HAS_JOINED, Nwk Addr=0x%04x\n",&lt;BR /&gt; sStackEvent.uEvent.sNwkJoinIndicationEvent.u16NwkAddr);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_NWK_LEAVE_INDICATION:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_LEAVE_INDICATION\n");&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_NWK_LEAVE_CONFIRM:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_LEAVE_CONFIRM\n");&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_NWK_STATUS_INDICATION:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_NWK_STATUS_INDICATION\n");&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_NWK_ROUTE_DISCOVERY_CONFIRM:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_ROUTE_DISCOVERY_CFM\n");&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_ERROR:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Monitor Sensors ZPS_EVENT_ERROR\n");&lt;BR /&gt; DBG_vPrintf(TRACE_APP, " Error Code %d\n", sStackEvent.uEvent.sAfErrorEvent.eError);&lt;/P&gt;&lt;P&gt;if (ZPS_ERROR_OS_MESSAGE_QUEUE_OVERRUN == sStackEvent.uEvent.sAfErrorEvent.eError)&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, " Queue handle %d\n", sStackEvent.uEvent.sAfErrorEvent.uErrorData.sAfErrorOsMessageOverrun.hMessage);&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_NWK_POLL_CONFIRM:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_NEW_POLL_COMPLETE, status = %d\n",&lt;BR /&gt; sStackEvent.uEvent.sNwkPollConfirmEvent.u8Status );&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_NWK_JOINED_AS_ROUTER:&lt;BR /&gt; case ZPS_EVENT_NWK_STARTED:&lt;BR /&gt; case ZPS_EVENT_NWK_FAILED_TO_START:&lt;BR /&gt; case ZPS_EVENT_NWK_FAILED_TO_JOIN:&lt;BR /&gt; case ZPS_EVENT_NWK_DISCOVERY_COMPLETE:&lt;BR /&gt; /* Deliberate fall through */&lt;BR /&gt; default:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: unhandled event %d\n", sStackEvent.eType);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * NAME: vClearDiscNT&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION:&lt;BR /&gt; * Handles the re-intialisation of the discovery table to 0&lt;BR /&gt; *&lt;BR /&gt; * PARAMETERS: None&lt;BR /&gt; *&lt;BR /&gt; *&lt;BR /&gt; * RETURNS:&lt;BR /&gt; * None&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;PRIVATE void vClearDiscNT(void)&lt;BR /&gt;{&lt;BR /&gt; ZPS_tsNwkNib * thisNib;&lt;/P&gt;&lt;P&gt;void * thisNet = ZPS_pvAplZdoGetNwkHandle();&lt;BR /&gt; thisNib = ZPS_psNwkNibGetHandle(thisNet);&lt;/P&gt;&lt;P&gt;memset(thisNib-&amp;gt;sTbl.psNtDisc, 0, sizeof(ZPS_tsNwkDiscNtEntry) * thisNib-&amp;gt;sTblSize.u8NtDisc);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/****************************************************************************/&lt;BR /&gt;/*** END OF FILE ***/&lt;BR /&gt;/****************************************************************************/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am waiting for you response.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 13 Jun 2018 06:31:10 GMT</pubDate>
    <dc:creator>vihang_jani</dc:creator>
    <dc:date>2018-06-13T06:31:10Z</dc:date>
    <item>
      <title>Association request response is not received</title>
      <link>https://community.nxp.com/t5/Wireless-MCU/Association-request-response-is-not-received/m-p/765895#M4639</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi All,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am using JN-AN-1229 (ZigBee PRO Application Template for ZigBee 3.0).&lt;/P&gt;&lt;P&gt;I have not received&amp;nbsp;association request response to EndDevice by Coordinator.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Issue&amp;nbsp;scenario&amp;nbsp;steps :&lt;/P&gt;&lt;P&gt;1) Start Coordinator application set with E_STARTUP state&lt;/P&gt;&lt;P&gt;2) vStartup API is set as E_NETWORK_FORMATION.&lt;/P&gt;&lt;P&gt;3)&amp;nbsp;Call&amp;nbsp;ZPS_eAplZdoPermitJoining(0xff); API in&amp;nbsp;vWaitForNetworkFormation API.&lt;/P&gt;&lt;P&gt;4) Association request and response pkt received upto 10 minutes.&lt;/P&gt;&lt;P&gt;5) Check traces after 15 minutes but&amp;nbsp;not received any single&amp;nbsp;&lt;SPAN&gt;a&lt;/SPAN&gt;&lt;SPAN&gt;ssociation request response pkt.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE : Every time,It's reproducible issue&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Please reply ASAP.&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 09 Jun 2018 12:11:00 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Wireless-MCU/Association-request-response-is-not-received/m-p/765895#M4639</guid>
      <dc:creator>vihang_jani</dc:creator>
      <dc:date>2018-06-09T12:11:00Z</dc:date>
    </item>
    <item>
      <title>Re: Association request response is not received</title>
      <link>https://community.nxp.com/t5/Wireless-MCU/Association-request-response-is-not-received/m-p/765896#M4640</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Vihang,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am working on the JN-AN-1229 Version 1002.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1. I set up a single channel. I am working on the channel 24&lt;/P&gt;&lt;P&gt;2. I used the Coordinator example that the AN provide. This creates a network and the permit join.&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;Note: You can also work with the control bridge example, JN-AN-1216.&lt;/P&gt;&lt;P&gt;3. The&amp;nbsp;end device joins the network successfully.&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pastedImage_1.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/48584i1561C1DE957B3C58/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_1.png" alt="pastedImage_1.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;As you know, this is only a template, it doesn't have any application, just the wireless connection.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mario&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 12 Jun 2018 18:06:04 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Wireless-MCU/Association-request-response-is-not-received/m-p/765896#M4640</guid>
      <dc:creator>mario_castaneda</dc:creator>
      <dc:date>2018-06-12T18:06:04Z</dc:date>
    </item>
    <item>
      <title>Re: Association request response is not received</title>
      <link>https://community.nxp.com/t5/Wireless-MCU/Association-request-response-is-not-received/m-p/765897#M4641</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Mario,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks for reply.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I also faced same issue between Coordinator and router communication.&lt;/P&gt;&lt;P&gt;I am using JN-SW-4170-Zigbee-3.0-v1745.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Issue :&lt;/P&gt;&lt;P&gt;1) After sometimes I am not receiving association request response.&lt;/P&gt;&lt;P&gt;2) Why router is always sending data request after association request ? and same issue occur in non-sleepy end device ?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Above issue always reproducible.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Issue reproducing steps:&lt;/P&gt;&lt;P&gt;1) First of all, register only ZPS_vTCSetCallback(&amp;amp;fTransportKeyDecider); in APP_vInitialiseCoordinator API. in Coordinator application(I have attached files you can check it)&lt;/P&gt;&lt;P&gt;2) Same steps follow as per previous steps but you can use router instead of end device.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Note :&lt;/P&gt;&lt;P&gt;1) I am using end device as non sleepy.&lt;/P&gt;&lt;P&gt;2) I have add ZPS_vTCSetCallback(&amp;amp;fTransportKeyDecider); in APP_vInitialiseCoordinator API.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have added some changes in &lt;STRONG&gt;Coordinator and router application files&lt;/STRONG&gt;,Please you can review it.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Coordinator Application : app_coordinator.c&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * MODULE: JN-AN-1184 ZigBeePro Application Template&lt;BR /&gt; *&lt;BR /&gt; * COMPONENT: app_coordinator.c&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION: Coordinator Application&lt;BR /&gt; *&lt;BR /&gt; *****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * This software is owned by NXP B.V. and/or its supplier and is protected&lt;BR /&gt; * under applicable copyright laws. All rights are reserved. We grant You,&lt;BR /&gt; * and any third parties, a license to use this software solely and&lt;BR /&gt; * exclusively on NXP products [NXP Microcontrollers such as JN5169, JN5168,&lt;BR /&gt; * JN5164, JN5161].&lt;BR /&gt; * You, and any third parties must reproduce the copyright and warranty notice&lt;BR /&gt; * and any other legend of ownership on each copy or partial copy of the&lt;BR /&gt; * software.&lt;BR /&gt; *&lt;BR /&gt; * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"&lt;BR /&gt; * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE&lt;BR /&gt; * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE&lt;BR /&gt; * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE&lt;BR /&gt; * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR&lt;BR /&gt; * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF&lt;BR /&gt; * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS&lt;BR /&gt; * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN&lt;BR /&gt; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)&lt;BR /&gt; * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE&lt;BR /&gt; * POSSIBILITY OF SUCH DAMAGE.&lt;BR /&gt; *&lt;BR /&gt; * Copyright NXP B.V. 2015. All rights reserved&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;/*** Include files ***/&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;#include &amp;lt;jendefs.h&amp;gt;&lt;BR /&gt;#include &amp;lt;dbg.h&amp;gt;&lt;BR /&gt;#include &amp;lt;pdm.h&amp;gt;&lt;BR /&gt;#include &amp;lt;pwrm.h&amp;gt;&lt;BR /&gt;#include &amp;lt;zps_apl_af.h&amp;gt;&lt;BR /&gt;#include &amp;lt;PDM_IDs.h&amp;gt;&lt;BR /&gt;#include "app_common.h"&lt;BR /&gt;#include "app_coordinator.h"&lt;BR /&gt;#include "ZTimer.h"&lt;BR /&gt;#include "ZQueue.h"&lt;/P&gt;&lt;P&gt;/****************************************************************************/&lt;BR /&gt;/*** Macro Definitions ***/&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;#ifndef DEBUG_APP&lt;BR /&gt; #define TRACE_APP FALSE&lt;BR /&gt;#else&lt;BR /&gt; #define TRACE_APP TRUE&lt;BR /&gt;#endif&lt;/P&gt;&lt;P&gt;/****************************************************************************/&lt;BR /&gt;/*** Type Definitions ***/&lt;BR /&gt;/****************************************************************************/&lt;/P&gt;&lt;P&gt;/****************************************************************************/&lt;BR /&gt;/*** Local Function Prototypes ***/&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;PRIVATE void vStartup(void);&lt;BR /&gt;PRIVATE void vWaitForNetworkFormation(ZPS_tsAfEvent sStackEvent);&lt;BR /&gt;PRIVATE void vHandleStackEvent(ZPS_tsAfEvent sStackEvent);&lt;/P&gt;&lt;P&gt;extern void ZPS_vTCSetCallback(void *);&lt;BR /&gt;bool fTransportKeyDecider(uint16 u16ShortAddress, uint64 u64DeviceAddress, uint64 u64ParentAddress, uint8 u8Status, uint16 u16Interface);&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;/*** Exported Variables ***/&lt;BR /&gt;/****************************************************************************/&lt;/P&gt;&lt;P&gt;/****************************************************************************/&lt;BR /&gt;/*** Local Variables ***/&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;PRIVATE tsDeviceDesc s_eDeviceState;&lt;BR /&gt;PUBLIC uint8 au8DefaultTCLinkKey[16] = {0x5a, 0x69, 0x67, 0x42, 0x65, 0x65, 0x41, 0x6c,&lt;BR /&gt; 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x30, 0x39};&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;/*** Exported Functions ***/&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;/****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * NAME: APP_vInitialiseCoordinator&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION:&lt;BR /&gt; * Initialises the Coordinator application&lt;BR /&gt; *&lt;BR /&gt; * RETURNS:&lt;BR /&gt; * void&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;PUBLIC void APP_vInitialiseCoordinator(void)&lt;BR /&gt;{&lt;BR /&gt; bool_t bDeleteRecords = TRUE;&lt;BR /&gt; uint16 u16DataBytesRead;&lt;/P&gt;&lt;P&gt;/* If required, at this point delete the network context from flash, perhaps upon some condition&lt;BR /&gt; * For example, check if a button is being held down at reset, and if so request the Persistent&lt;BR /&gt; * Data Manager to delete all its records:&lt;BR /&gt; * e.g. bDeleteRecords = vCheckButtons();&lt;BR /&gt; * Alternatively, always call PDM_vDelete() if context saving is not required.&lt;BR /&gt; */&lt;BR /&gt; if (bDeleteRecords)&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Deleting all records from flash\n");&lt;BR /&gt; PDM_vDeleteAllDataRecords();&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;/* Restore any application data previously saved to flash&lt;BR /&gt; * All Application records must be loaded before the call to&lt;BR /&gt; * ZPS_eAplAfInit&lt;BR /&gt; */&lt;BR /&gt; s_eDeviceState.eNodeState = E_STARTUP;&lt;BR /&gt; PDM_eReadDataFromRecord(PDM_ID_APP_COORD,&lt;BR /&gt; &amp;amp;s_eDeviceState,&lt;BR /&gt; sizeof(s_eDeviceState),&lt;BR /&gt; &amp;amp;u16DataBytesRead);&lt;/P&gt;&lt;P&gt;/* Initialise ZBPro stack */&lt;BR /&gt; ZPS_eAplAfInit();&lt;BR /&gt; ZPS_vAplSecSetInitialSecurityState(ZPS_ZDO_PRECONFIGURED_LINK_KEY,&lt;BR /&gt; au8DefaultTCLinkKey,&lt;BR /&gt; 0x00,&lt;BR /&gt; ZPS_APS_GLOBAL_LINK_KEY);&lt;BR /&gt; /* Initialise other software modules&lt;BR /&gt; * HERE&lt;BR /&gt; */&lt;/P&gt;&lt;P&gt;/* Always initialise any peripherals used by the application&lt;BR /&gt; * HERE&lt;BR /&gt; */&lt;/P&gt;&lt;P&gt;/* If the device state has been restored from flash, re-start the stack&lt;BR /&gt; * and set the application running again. Note that if there is more than 1 state&lt;BR /&gt; * where the network has already joined, then the other states should also be included&lt;BR /&gt; * in the test below&lt;BR /&gt; * E.g. E_RUNNING_1, E_RUNNING_2......&lt;BR /&gt; * if (E_RUNNING_1 == s_sDevice || E_RUNNING_2 == s_sDevice)&lt;BR /&gt; */&lt;BR /&gt; &lt;BR /&gt; ZPS_vTCSetCallback(&amp;amp;fTransportKeyDecider);&lt;BR /&gt; &lt;BR /&gt; if (E_RUNNING == s_eDeviceState.eNodeState)&lt;BR /&gt; {&lt;BR /&gt; ZPS_teStatus eStatus = ZPS_eAplZdoStartStack();&lt;/P&gt;&lt;P&gt;DBG_vPrintf(TRACE_APP, "APP: Re-starting Stack....\r\n");&lt;/P&gt;&lt;P&gt;if (ZPS_E_SUCCESS != eStatus)&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: ZPS_eZdoStartStack() failed error %d", eStatus);&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;/* Turn on joining */&lt;BR /&gt; ZPS_eAplZdoPermitJoining(0xff);&lt;/P&gt;&lt;P&gt;/* Re-start any other application software modules&lt;BR /&gt; * HERE&lt;BR /&gt; */&lt;BR /&gt; }&lt;BR /&gt; else /* perform any actions require on initial start-up */&lt;BR /&gt; {&lt;BR /&gt; /* Return the device to the start-up start if it was reset during the network formation stage */&lt;BR /&gt; s_eDeviceState.eNodeState = E_STARTUP;&lt;BR /&gt; }&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * NAME: APP_vtaskCoordinator&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION:&lt;BR /&gt; * Main state machine&lt;BR /&gt; *&lt;BR /&gt; * RETURNS:&lt;BR /&gt; * void&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;PUBLIC void APP_vtaskCoordinator ( void )&lt;BR /&gt;{&lt;BR /&gt; ZPS_tsAfEvent sStackEvent;&lt;BR /&gt; sStackEvent.eType = ZPS_EVENT_NONE;&lt;/P&gt;&lt;P&gt;/* check if any messages to collect */&lt;BR /&gt; if ( ZQ_bQueueReceive(&amp;amp;APP_msgZpsEvents, &amp;amp;sStackEvent) )&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: No event to process\n");&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;if ( ZTIMER_eGetState(u8App_tmr1sec) == E_ZTIMER_STATE_EXPIRED )&lt;BR /&gt; {&lt;BR /&gt; ZTIMER_eStart (u8App_tmr1sec, ZTIMER_TIME_SEC(1) );&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;switch (s_eDeviceState.eNodeState)&lt;BR /&gt; {&lt;BR /&gt; case E_STARTUP:&lt;BR /&gt; {&lt;BR /&gt; vStartup();&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case E_NETWORK_FORMATION:&lt;BR /&gt; {&lt;BR /&gt; vWaitForNetworkFormation(sStackEvent);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case E_RUNNING:&lt;BR /&gt; {&lt;BR /&gt; vHandleStackEvent(sStackEvent);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;default:&lt;BR /&gt; {&lt;BR /&gt; /* Do nothing */&lt;BR /&gt; }&lt;BR /&gt; break;&lt;BR /&gt; }&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/****************************************************************************/&lt;BR /&gt;/*** Local Functions ***/&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;/****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * NAME: vStartup&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION:&lt;BR /&gt; * Initiates network formation&lt;BR /&gt; *&lt;BR /&gt; * RETURNS:&lt;BR /&gt; * Sequence number&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;PRIVATE void vStartup(void)&lt;BR /&gt;{&lt;BR /&gt; /* display the startup splash screen */&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Application startup\n");&lt;/P&gt;&lt;P&gt;/* Stops Coordinator from sleeping ever - but does allow doze */&lt;BR /&gt; PWRM_eStartActivity();&lt;/P&gt;&lt;P&gt;ZPS_teStatus eStatus = ZPS_eAplZdoStartStack();&lt;BR /&gt; if (ZPS_E_SUCCESS == eStatus)&lt;BR /&gt; {&lt;BR /&gt; s_eDeviceState.eNodeState = E_NETWORK_FORMATION;&lt;BR /&gt; }&lt;BR /&gt; else&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: ZPS_eZdoStartStack() failed error %d", eStatus);&lt;BR /&gt; }&lt;BR /&gt; ZTIMER_eStart ( u8App_tmr1sec, ZTIMER_TIME_SEC(1) );&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * NAME: vWaitForNetworkFormation&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION:&lt;BR /&gt; * Handles stack events during network formation&lt;BR /&gt; *&lt;BR /&gt; * PARAMETERS: Name RW Usage&lt;BR /&gt; * sStackEvent R Contains details of the stack event&lt;BR /&gt; *&lt;BR /&gt; * RETURNS:&lt;BR /&gt; * Sequence number&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;PRIVATE void vWaitForNetworkFormation(ZPS_tsAfEvent sStackEvent)&lt;BR /&gt;{&lt;BR /&gt; /* wait for network stack to start up as a coordinator */&lt;BR /&gt; if (ZPS_EVENT_NONE != sStackEvent.eType)&lt;BR /&gt; {&lt;BR /&gt; if (ZPS_EVENT_NWK_STARTED == sStackEvent.eType)&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Network Started\r\n");&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Channel - %d\r\n", ZPS_u8AplZdoGetRadioChannel());&lt;/P&gt;&lt;P&gt;/* turn on joining */&lt;BR /&gt; ZPS_eAplZdoPermitJoining(0xff);&lt;/P&gt;&lt;P&gt;s_eDeviceState.eNodeState = E_RUNNING;&lt;/P&gt;&lt;P&gt;/* Save the application state to flash. Note that all records may be saved at any time by the PDM:&lt;BR /&gt; * if a module has called PDM_vSaveRecord(), but there is insufficient spare memory, an erase is performed&lt;BR /&gt; * followed by a write of all records.&lt;BR /&gt; */&lt;BR /&gt; PDM_eSaveRecordData(PDM_ID_APP_COORD,&lt;BR /&gt; &amp;amp;s_eDeviceState,&lt;BR /&gt; sizeof(s_eDeviceState));&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * NAME: vHandleStackEvent&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION:&lt;BR /&gt; * Handles stack events after the Coordinator has started a network and is in&lt;BR /&gt; * its running state&lt;BR /&gt; *&lt;BR /&gt; * PARAMETERS: Name RW Usage&lt;BR /&gt; * sStackEvent R Contains details of the stack event&lt;BR /&gt; *&lt;BR /&gt; * RETURNS:&lt;BR /&gt; * Sequence number&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;PRIVATE void vHandleStackEvent(ZPS_tsAfEvent sStackEvent)&lt;BR /&gt;{&lt;BR /&gt; if (ZPS_EVENT_NONE != sStackEvent.eType)&lt;BR /&gt; {&lt;BR /&gt; switch (sStackEvent.eType)&lt;BR /&gt; {&lt;BR /&gt; case ZPS_EVENT_APS_INTERPAN_DATA_INDICATION:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: event ZPS_EVENT_APS_INTERPAN_DATA_INDICATION\n");&lt;BR /&gt; PDUM_eAPduFreeAPduInstance(sStackEvent.uEvent.sApsInterPanDataIndEvent.hAPduInst);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_APS_ZGP_DATA_INDICATION:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: event ZPS_EVENT_APS_ZGP_DATA_INDICATION\n");&lt;/P&gt;&lt;P&gt;if (sStackEvent.uEvent.sApsZgpDataIndEvent.hAPduInst)&lt;BR /&gt; {&lt;BR /&gt; PDUM_eAPduFreeAPduInstance(sStackEvent.uEvent.sApsZgpDataIndEvent.hAPduInst);&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_APS_DATA_INDICATION:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_AF_DATA_INDICATION\n");&lt;/P&gt;&lt;P&gt;/* Process incoming cluster messages ... */&lt;BR /&gt; DBG_vPrintf(TRACE_APP, " Profile :%x\r\n",sStackEvent.uEvent.sApsDataIndEvent.u16ProfileId);&lt;BR /&gt; DBG_vPrintf(TRACE_APP, " Cluster :%x\r\n",sStackEvent.uEvent.sApsDataIndEvent.u16ClusterId);&lt;BR /&gt; DBG_vPrintf(TRACE_APP, " EndPoint:%x\r\n",sStackEvent.uEvent.sApsDataIndEvent.u8DstEndpoint);&lt;/P&gt;&lt;P&gt;/* free the application protocol data unit (APDU) once it has been dealt with */&lt;BR /&gt; PDUM_eAPduFreeAPduInstance(sStackEvent.uEvent.sApsDataIndEvent.hAPduInst);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_APS_DATA_CONFIRM:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_APS_DATA_CONFIRM Status %d, Address 0x%04x\n",&lt;BR /&gt; sStackEvent.uEvent.sApsDataConfirmEvent.u8Status,&lt;BR /&gt; sStackEvent.uEvent.sApsDataConfirmEvent.uDstAddr.u16Addr);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_APS_DATA_ACK:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_APS_DATA_ACK Status %d, Address 0x%04x\n",&lt;BR /&gt; sStackEvent.uEvent.sApsDataAckEvent.u8Status,&lt;BR /&gt; sStackEvent.uEvent.sApsDataAckEvent.u16DstAddr);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_NWK_NEW_NODE_HAS_JOINED:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: vCheckStackEvent: ZPS_EVENT_NEW_NODE_HAS_JOINED, Nwk Addr=0x%04x\n",&lt;BR /&gt; sStackEvent.uEvent.sNwkJoinIndicationEvent.u16NwkAddr);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_NWK_LEAVE_INDICATION:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_LEAVE_INDICATION\n");&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_NWK_LEAVE_CONFIRM:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_LEAVE_CONFIRM\n");&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_NWK_STATUS_INDICATION:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_NWK_STATUS_INDICATION\n");&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_NWK_ROUTE_DISCOVERY_CONFIRM:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_ROUTE_DISCOVERY_CFM\n");&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_ERROR:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Monitor Sensors ZPS_EVENT_ERROR\n");&lt;BR /&gt; DBG_vPrintf(TRACE_APP, " Error Code %d\n", sStackEvent.uEvent.sAfErrorEvent.eError);&lt;/P&gt;&lt;P&gt;if (ZPS_ERROR_OS_MESSAGE_QUEUE_OVERRUN == sStackEvent.uEvent.sAfErrorEvent.eError)&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, " Queue handle %d\n",sStackEvent.uEvent.sAfErrorEvent.uErrorData.sAfErrorOsMessageOverrun.hMessage);&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_NWK_POLL_CONFIRM:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_NEW_POLL_COMPLETE, status = %d\n",&lt;BR /&gt; sStackEvent.uEvent.sNwkPollConfirmEvent.u8Status );&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_NWK_JOINED_AS_ROUTER:&lt;BR /&gt; case ZPS_EVENT_NWK_JOINED_AS_ENDDEVICE:&lt;BR /&gt; case ZPS_EVENT_NWK_STARTED:&lt;BR /&gt; case ZPS_EVENT_NWK_FAILED_TO_START:&lt;BR /&gt; case ZPS_EVENT_NWK_FAILED_TO_JOIN:&lt;BR /&gt; case ZPS_EVENT_NWK_DISCOVERY_COMPLETE:&lt;BR /&gt; /* Deliberate fall through */&lt;BR /&gt; default:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: unhandled event %d\n", sStackEvent.eType);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * NAME: fTransportKeyDecider&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION: Decides whether to permit a node to join&lt;BR /&gt; *&lt;BR /&gt; * PARAMETERS:&lt;BR /&gt; * uint16 u16ShortAddress&lt;BR /&gt; * uint64 u64DeviceAddress&lt;BR /&gt; * uint64 u64ParentAddress&lt;BR /&gt; *&lt;BR /&gt; * RETURNS:&lt;BR /&gt; * bool - TRUE/FALSE to allow/disallow join respectively&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;bool fTransportKeyDecider(uint16 u16ShortAddress, uint64 u64DeviceAddress, uint64 u64ParentAddress, uint8 u8Status, uint16 u16Interface)&lt;BR /&gt;{&lt;BR /&gt; uint16 u16TableIndex;&lt;BR /&gt; ZPS_tsAplAib *psAib = ZPS_psAplAibGetAib();&lt;BR /&gt; DBG_vPrintf(1, "fTransportKeyDecider %04x,%016llx, %016llx Type %d ID %d\n",&lt;BR /&gt; u16ShortAddress, u64DeviceAddress,u64ParentAddress, u8Status, u16Interface);&lt;BR /&gt; if (u8Status == ZPS_APL_SEC_DEVICE_LEFT )&lt;BR /&gt; {&lt;BR /&gt; /* leave indication via apsme update device&lt;BR /&gt; * no need to return anything specific&lt;BR /&gt; * this is for info noly&lt;BR /&gt; */&lt;BR /&gt; return TRUE;&lt;BR /&gt; }&lt;BR /&gt; else if (((u8Status == ZPS_APL_SEC_STD_UNSEC_JOIN) || (u8Status == ZPS_APL_SEC_STD_UNSEC_REJOIN)))&lt;BR /&gt; {&lt;BR /&gt; for(u16TableIndex = 0; u16TableIndex &amp;lt; psAib-&amp;gt;psAplDeviceKeyPairTable-&amp;gt;u16SizeOfKeyDescriptorTable; u16TableIndex++)&lt;BR /&gt; {&lt;BR /&gt; /* check given IEEE address present APS Key table */&lt;BR /&gt; if(u64DeviceAddress ==&lt;BR /&gt; ZPS_u64NwkNibGetMappedIeeeAddr(ZPS_pvAplZdoGetNwkHandle(),&lt;BR /&gt; psAib-&amp;gt;psAplDeviceKeyPairTable-&amp;gt;psAplApsKeyDescriptorEntry[u16TableIndex].u16ExtAddrLkup))&lt;BR /&gt; {&lt;BR /&gt; return TRUE;&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt; return FALSE;&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;/* only option left is secure rejoin where no key is transported */&lt;BR /&gt; return TRUE;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/****************************************************************************/&lt;BR /&gt;/*** END OF FILE ***/&lt;BR /&gt;/****************************************************************************/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Router Application : app_router.c&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;/*****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * MODULE: JN-AN-1184 ZigBeePro Application Template&lt;BR /&gt; *&lt;BR /&gt; * COMPONENT: app_router.c&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION: Router Application&lt;BR /&gt; *&lt;BR /&gt; *****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * This software is owned by NXP B.V. and/or its supplier and is protected&lt;BR /&gt; * under applicable copyright laws. All rights are reserved. We grant You,&lt;BR /&gt; * and any third parties, a license to use this software solely and&lt;BR /&gt; * exclusively on NXP products [NXP Microcontrollers such as JN5169, JN5168,&lt;BR /&gt; * JN5164, JN5161].&lt;BR /&gt; * You, and any third parties must reproduce the copyright and warranty notice&lt;BR /&gt; * and any other legend of ownership on each copy or partial copy of the&lt;BR /&gt; * software.&lt;BR /&gt; *&lt;BR /&gt; * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"&lt;BR /&gt; * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE&lt;BR /&gt; * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE&lt;BR /&gt; * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE&lt;BR /&gt; * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR&lt;BR /&gt; * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF&lt;BR /&gt; * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS&lt;BR /&gt; * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN&lt;BR /&gt; * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)&lt;BR /&gt; * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE&lt;BR /&gt; * POSSIBILITY OF SUCH DAMAGE.&lt;BR /&gt; *&lt;BR /&gt; * Copyright NXP B.V. 2015. All rights reserved&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;/*** Include files ***/&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;#include &amp;lt;jendefs.h&amp;gt;&lt;BR /&gt;#include &amp;lt;string.h&amp;gt;&lt;BR /&gt;#include &amp;lt;dbg.h&amp;gt;&lt;BR /&gt;#include &amp;lt;zps_apl_af.h&amp;gt;&lt;BR /&gt;#include &amp;lt;zps_apl_aib.h&amp;gt;&lt;BR /&gt;#include &amp;lt;pdm.h&amp;gt;&lt;BR /&gt;#include &amp;lt;PDM_IDs.h&amp;gt;&lt;BR /&gt;#include "app_common.h"&lt;BR /&gt;#include "app_router.h"&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;/*** Macro Definitions ***/&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;#ifndef DEBUG_APP&lt;BR /&gt; #define TRACE_APP FALSE&lt;BR /&gt;#else&lt;BR /&gt; #define TRACE_APP TRUE&lt;BR /&gt;#endif&lt;/P&gt;&lt;P&gt;/****************************************************************************/&lt;BR /&gt;/*** Type Definitions ***/&lt;BR /&gt;/****************************************************************************/&lt;/P&gt;&lt;P&gt;/****************************************************************************/&lt;BR /&gt;/*** Local Function Prototypes ***/&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;PRIVATE void vStartup(void);&lt;BR /&gt;PRIVATE void vWaitForNetworkDiscovery(ZPS_tsAfEvent sStackEvent);&lt;BR /&gt;PRIVATE void vWaitForNetworkJoin(ZPS_tsAfEvent sStackEvent);&lt;BR /&gt;PRIVATE void vHandleStackEvent(ZPS_tsAfEvent sStackEvent);&lt;BR /&gt;PRIVATE void vClearDiscNT(void);&lt;/P&gt;&lt;P&gt;/****************************************************************************/&lt;BR /&gt;/*** Exported Variables ***/&lt;BR /&gt;/****************************************************************************/&lt;/P&gt;&lt;P&gt;/****************************************************************************/&lt;BR /&gt;/*** Local Variables ***/&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;PRIVATE tsDeviceDesc s_eDeviceState;&lt;BR /&gt;PUBLIC uint8 au8DefaultTCLinkKey[16] = {0x5a, 0x69, 0x67, 0x42, 0x65, 0x65, 0x41, 0x6c,&lt;BR /&gt; 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x30, 0x39};&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;/*** Exported Functions ***/&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;/****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * NAME: APP_vInitialiseRouter&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION:&lt;BR /&gt; * Initialises the router application&lt;BR /&gt; *&lt;BR /&gt; * RETURNS:&lt;BR /&gt; * void&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;PUBLIC void APP_vInitialiseRouter(void)&lt;BR /&gt;{&lt;BR /&gt; bool_t bDeleteRecords = TRUE /*FALSE*/;&lt;BR /&gt; uint16 u16DataBytesRead;&lt;/P&gt;&lt;P&gt;/* If required, at this point delete the network context from flash, perhaps upon some condition&lt;BR /&gt; * For example, check if a button is being held down at reset, and if so request the Persistent&lt;BR /&gt; * Data Manager to delete all its records:&lt;BR /&gt; * e.g. bDeleteRecords = vCheckButtons();&lt;BR /&gt; * Alternatively, always call PDM_vDelete() if context saving is not required.&lt;BR /&gt; */&lt;BR /&gt; if (bDeleteRecords)&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Deleting all records from flash\n");&lt;BR /&gt; PDM_vDeleteAllDataRecords();&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;/* Restore any application data previously saved to flash&lt;BR /&gt; * All Application records must be loaded before the call to&lt;BR /&gt; * ZPS_eAplAfInit&lt;BR /&gt; */&lt;BR /&gt; s_eDeviceState.eNodeState = E_STARTUP;&lt;BR /&gt; PDM_eReadDataFromRecord(PDM_ID_APP_ROUTER,&lt;BR /&gt; &amp;amp;s_eDeviceState,&lt;BR /&gt; sizeof(s_eDeviceState),&lt;BR /&gt; &amp;amp;u16DataBytesRead);&lt;/P&gt;&lt;P&gt;/* Initialise ZBPro stack */&lt;BR /&gt; ZPS_eAplAfInit();&lt;BR /&gt; ZPS_vAplSecSetInitialSecurityState(ZPS_ZDO_PRECONFIGURED_LINK_KEY,&lt;BR /&gt; au8DefaultTCLinkKey,&lt;BR /&gt; 0x00,&lt;BR /&gt; ZPS_APS_GLOBAL_LINK_KEY);&lt;BR /&gt; /* Initialise other software modules&lt;BR /&gt; * HERE&lt;BR /&gt; */&lt;/P&gt;&lt;P&gt;/* Always initialise any peripherals used by the applicatio&lt;BR /&gt; * HERE&lt;BR /&gt; */&lt;/P&gt;&lt;P&gt;/* If the device state has been restored from flash, re-start the stack&lt;BR /&gt; * and set the application running again. Note that if there is more than 1 state&lt;BR /&gt; * where the network has already joined, then the other states should also be included&lt;BR /&gt; * in the test below&lt;BR /&gt; * E.g. E_RUNNING_1, E_RUNNING_2......&lt;BR /&gt; * if (E_RUNNING_1 ==s_eDeviceState || E_RUNNING_2 ==s_eDeviceState)&lt;BR /&gt; */&lt;BR /&gt; if (E_RUNNING ==s_eDeviceState.eNodeState)&lt;BR /&gt; {&lt;BR /&gt; ZPS_teStatus eStatus = ZPS_eAplZdoStartStack();&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Re-starting Stack....\r\n");&lt;BR /&gt; if (ZPS_E_SUCCESS != eStatus)&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: ZPS_eZdoStartStack() failed error %d", eStatus);&lt;BR /&gt; }&lt;BR /&gt; /* turn on joining */&lt;BR /&gt; ZPS_eAplZdoPermitJoining(0);&lt;/P&gt;&lt;P&gt;/* Re-start any other application software modules&lt;BR /&gt; * HERE&lt;BR /&gt; */&lt;BR /&gt; }&lt;BR /&gt; else&lt;BR /&gt; /* perform any actions require on initial start-up */&lt;BR /&gt; {&lt;BR /&gt; /* Return the device to the start-up start if it was reset during the network formation stage */&lt;BR /&gt; s_eDeviceState.eNodeState = E_STARTUP;&lt;BR /&gt; }&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * NAME: APP_taskRouter&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION:&lt;BR /&gt; * Main state machine&lt;BR /&gt; *&lt;BR /&gt; * RETURNS:&lt;BR /&gt; * void&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;PUBLIC void APP_vtaskRouter ( void )&lt;BR /&gt;{&lt;BR /&gt; ZPS_tsAfEvent sStackEvent;&lt;/P&gt;&lt;P&gt;sStackEvent.eType = ZPS_EVENT_NONE;&lt;BR /&gt; if (ZQ_bQueueReceive (&amp;amp;APP_msgZpsEvents, &amp;amp;sStackEvent) )&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: No event to process!\n");&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;if (ZTIMER_eGetState(u8App_tmr1sec) == E_ZTIMER_STATE_EXPIRED)&lt;BR /&gt; {&lt;BR /&gt; ZTIMER_eStart (u8App_tmr1sec, ZTIMER_TIME_SEC(1) );&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;switch (s_eDeviceState.eNodeState)&lt;BR /&gt; {&lt;BR /&gt; case E_STARTUP:&lt;BR /&gt; {&lt;BR /&gt; vStartup();&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case E_DISCOVERY:&lt;BR /&gt; {&lt;BR /&gt; vWaitForNetworkDiscovery(sStackEvent);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case E_JOINING_NETWORK:&lt;BR /&gt; {&lt;BR /&gt; vWaitForNetworkJoin(sStackEvent);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case E_RUNNING:&lt;BR /&gt; {&lt;BR /&gt; vHandleStackEvent(sStackEvent);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;default:&lt;BR /&gt; {&lt;BR /&gt; /* Do nothing */&lt;BR /&gt; }&lt;BR /&gt; break;&lt;BR /&gt; }&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/****************************************************************************/&lt;BR /&gt;/*** Local Functions ***/&lt;BR /&gt;/****************************************************************************/&lt;BR /&gt;/****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * NAME: vStartup&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION:&lt;BR /&gt; * Start the process of network discovery&lt;BR /&gt; *&lt;BR /&gt; * RETURNS:&lt;BR /&gt; * void&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;PRIVATE void vStartup(void)&lt;BR /&gt;{&lt;BR /&gt; PRIVATE uint8 u8Channel = 11;&lt;/P&gt;&lt;P&gt;vClearDiscNT();&lt;/P&gt;&lt;P&gt;/* Set channel to scan and start stack */&lt;BR /&gt; ZPS_psAplAibGetAib()-&amp;gt;pau32ApsChannelMask[0] = 1 &amp;lt;&amp;lt; u8Channel;&lt;/P&gt;&lt;P&gt;ZPS_teStatus eStatus = ZPS_eAplZdoStartStack();&lt;BR /&gt; if (ZPS_E_SUCCESS == eStatus)&lt;BR /&gt; {&lt;BR /&gt; s_eDeviceState.eNodeState = E_DISCOVERY;&lt;/P&gt;&lt;P&gt;/* Move channel counter to next channel */&lt;BR /&gt; u8Channel++;&lt;/P&gt;&lt;P&gt;if (27 == u8Channel)&lt;BR /&gt; {&lt;BR /&gt; u8Channel = 11;&lt;BR /&gt; }&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;/****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * NAME: vWaitForNetworkDiscovery&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION:&lt;BR /&gt; * Check for and act upon stack events during network discovery.&lt;BR /&gt; *&lt;BR /&gt; * PARAMETERS: Name RW Usage&lt;BR /&gt; * sStackEvent R Contains details of stack event&lt;BR /&gt; * RETURNS:&lt;BR /&gt; * void&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;PRIVATE void vWaitForNetworkDiscovery(ZPS_tsAfEvent sStackEvent)&lt;BR /&gt;{&lt;BR /&gt; /* wait for the node to complete network discovery */&lt;BR /&gt; if (ZPS_EVENT_NONE != sStackEvent.eType)&lt;BR /&gt; {&lt;BR /&gt; if (ZPS_EVENT_NWK_DISCOVERY_COMPLETE == sStackEvent.eType)&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Network discovery complete\n");&lt;/P&gt;&lt;P&gt;if ((ZPS_E_SUCCESS == sStackEvent.uEvent.sNwkDiscoveryEvent.eStatus) ||&lt;BR /&gt; (ZPS_NWK_ENUM_NEIGHBOR_TABLE_FULL == sStackEvent.uEvent.sNwkDiscoveryEvent.eStatus))&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Found %d networks\n", sStackEvent.uEvent.sNwkDiscoveryEvent.u8NetworkCount);&lt;BR /&gt; }&lt;BR /&gt; else&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Network discovery failed with error %d\n",sStackEvent.uEvent.sNwkDiscoveryEvent.eStatus);&lt;BR /&gt; }&lt;BR /&gt; if ( 0 == sStackEvent.uEvent.sNwkDiscoveryEvent.u8NetworkCount&lt;BR /&gt; || 0xff == sStackEvent.uEvent.sNwkDiscoveryEvent.u8SelectedNetwork)&lt;BR /&gt; {&lt;BR /&gt; if (0 != sStackEvent.uEvent.sNwkDiscoveryEvent.u32UnscannedChannels)&lt;BR /&gt; {&lt;BR /&gt; /* continue to look for networks on unscanned channels */&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: No networks found, continue scanning ...\n");&lt;BR /&gt; ZPS_eAplZdoDiscoverNetworks(sStackEvent.uEvent.sNwkDiscoveryEvent.u32UnscannedChannels);&lt;BR /&gt; }&lt;BR /&gt; else&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Exhausted channels to scan\n");&lt;BR /&gt; s_eDeviceState.eNodeState = E_STARTUP;&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt; else&lt;BR /&gt; {&lt;BR /&gt; ZPS_tsNwkNetworkDescr *psNwkDescr = &amp;amp;sStackEvent.uEvent.sNwkDiscoveryEvent.psNwkDescriptors[sStackEvent.uEvent.sNwkDiscoveryEvent.u8SelectedNetwork];&lt;BR /&gt; ZPS_teStatus eStatus;&lt;/P&gt;&lt;P&gt;DBG_vPrintf(TRACE_APP, "APP: Unscanned channels %08x\n", sStackEvent.uEvent.sNwkDiscoveryEvent.u32UnscannedChannels);&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "\tAPP: Ext PAN ID = %016llx\n", psNwkDescr-&amp;gt;u64ExtPanId);&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "\tAPP: Channel = %d\n", psNwkDescr-&amp;gt;u8LogicalChan);&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "\tAPP: Stack Profile = %d\n", psNwkDescr-&amp;gt;u8StackProfile);&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "\tAPP: Zigbee Version = %d\n", psNwkDescr-&amp;gt;u8ZigBeeVersion);&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "\tAPP: Permit Joining = %d\n", psNwkDescr-&amp;gt;u8PermitJoining);&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "\tAPP: Router Capacity = %d\n", psNwkDescr-&amp;gt;u8RouterCapacity);&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "\tAPP: End Device Capacity = %d\n", psNwkDescr-&amp;gt;u8EndDeviceCapacity);&lt;/P&gt;&lt;P&gt;eStatus = ZPS_eAplZdoJoinNetwork(psNwkDescr);&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Trying Joining network\n");&lt;/P&gt;&lt;P&gt;if (ZPS_E_SUCCESS == eStatus)&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Joining network\n");&lt;BR /&gt; s_eDeviceState.eNodeState = E_JOINING_NETWORK;&lt;BR /&gt; }&lt;BR /&gt; else&lt;BR /&gt; {&lt;BR /&gt; /* start scan again */&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Failed to join network reason = %02x\n", eStatus);&lt;BR /&gt; s_eDeviceState.eNodeState = E_STARTUP;&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt; else if (ZPS_EVENT_NWK_FAILED_TO_JOIN == sStackEvent.eType)&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Network discovery failed error=%d\n", sStackEvent.uEvent.sNwkJoinFailedEvent.u8Status);&lt;BR /&gt; s_eDeviceState.eNodeState = E_STARTUP;&lt;BR /&gt; }&lt;BR /&gt; else if (ZPS_EVENT_NWK_JOINED_AS_ROUTER == sStackEvent.eType)&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Node rejoined network with Addr 0x%04x\n",&lt;BR /&gt; sStackEvent.uEvent.sNwkJoinedEvent.u16Addr);&lt;BR /&gt; s_eDeviceState.eNodeState = E_RUNNING;&lt;/P&gt;&lt;P&gt;/* Save the application state to flash. Note that all records may be saved at any time by the PDM:&lt;BR /&gt; * if a module has called PDM_vSaveRecord(), but there is insufficient spare memory, an erase is performed&lt;BR /&gt; * followed by a write of all records.&lt;BR /&gt; */&lt;BR /&gt; PDM_eSaveRecordData(PDM_ID_APP_ROUTER,&lt;BR /&gt; &amp;amp;s_eDeviceState,&lt;BR /&gt; sizeof(s_eDeviceState));&lt;BR /&gt; }&lt;BR /&gt; else&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Unexpected event in E_NETWORK_DISCOVERY - %d\n", sStackEvent.eType);&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * NAME: vWaitForNetworkJoin&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION:&lt;BR /&gt; * Check for and act upon stack events during network join.&lt;BR /&gt; *&lt;BR /&gt; * PARAMETERS: Name RW Usage&lt;BR /&gt; * sStackEvent R Contains details of stack event&lt;BR /&gt; * RETURNS:&lt;BR /&gt; * void&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;PRIVATE void vWaitForNetworkJoin(ZPS_tsAfEvent sStackEvent)&lt;BR /&gt;{&lt;BR /&gt; uint64 u64ExtPANID;&lt;BR /&gt; /* wait for the node to complete network joining */&lt;BR /&gt; if (ZPS_EVENT_NONE != sStackEvent.eType)&lt;BR /&gt; {&lt;BR /&gt; if (ZPS_EVENT_NWK_JOINED_AS_ROUTER == sStackEvent.eType)&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Node joined network with Addr 0x%04x\n",&lt;BR /&gt; sStackEvent.uEvent.sNwkJoinedEvent.u16Addr);&lt;BR /&gt; /* save the EPID for rejoins */&lt;BR /&gt; u64ExtPANID = ZPS_u64NwkNibGetEpid(ZPS_pvAplZdoGetNwkHandle());&lt;BR /&gt; ZPS_eAplAibSetApsUseExtendedPanId(u64ExtPANID);&lt;BR /&gt; s_eDeviceState.eNodeState = E_RUNNING;&lt;BR /&gt; PDM_eSaveRecordData(PDM_ID_APP_ROUTER,&lt;BR /&gt; &amp;amp;s_eDeviceState,&lt;BR /&gt; sizeof(s_eDeviceState));&lt;/P&gt;&lt;P&gt;/* Start timer to periodically active APP_taskRouter */&lt;BR /&gt; ZTIMER_eStart (u8App_tmr1sec, ZTIMER_TIME_SEC(1));&lt;BR /&gt; }&lt;BR /&gt; else if (ZPS_EVENT_NWK_FAILED_TO_JOIN == sStackEvent.eType)&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Node failed to join network. Retrying ...\n");&lt;BR /&gt; s_eDeviceState.eNodeState = E_STARTUP;&lt;BR /&gt; /* Save the application state to flash. Note that all records may be saved at&lt;BR /&gt; * any time by the PDM: if a module has called PDM_vSaveRecord(), but there&lt;BR /&gt; * is insufficient spare memory, an erase is performed followed by a write&lt;BR /&gt; * of all records.&lt;BR /&gt; */&lt;BR /&gt; }&lt;BR /&gt; else&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Unexpected event in E_NETWORK_JOIN - %d\n", sStackEvent.eType);&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * NAME: vHandleStackEvent&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION:&lt;BR /&gt; * Check for and act upon any valid stack event, after the node has joined a&lt;BR /&gt; * network and is in its running state&lt;BR /&gt; *&lt;BR /&gt; * PARAMETERS: Name RW Usage&lt;BR /&gt; * sStackEvent R Contains details of stack event&lt;BR /&gt; * RETURNS:&lt;BR /&gt; * void&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;PRIVATE void vHandleStackEvent(ZPS_tsAfEvent sStackEvent)&lt;BR /&gt;{&lt;BR /&gt; if (ZPS_EVENT_NONE != sStackEvent.eType)&lt;BR /&gt; {&lt;BR /&gt; switch (sStackEvent.eType)&lt;BR /&gt; {&lt;BR /&gt; case ZPS_EVENT_APS_DATA_INDICATION:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_AF_DATA_INDICATION\n");&lt;/P&gt;&lt;P&gt;/* Process incoming cluster messages ... */&lt;BR /&gt; DBG_vPrintf(TRACE_APP, " Profile :%x\r\n",sStackEvent.uEvent.sApsDataIndEvent.u16ProfileId);&lt;BR /&gt; DBG_vPrintf(TRACE_APP, " Cluster :%x\r\n",sStackEvent.uEvent.sApsDataIndEvent.u16ClusterId);&lt;BR /&gt; DBG_vPrintf(TRACE_APP, " EndPoint:%x\r\n",sStackEvent.uEvent.sApsDataIndEvent.u8DstEndpoint);&lt;/P&gt;&lt;P&gt;/* free the application protocol data unit (APDU) once it has been dealt with */&lt;BR /&gt; PDUM_eAPduFreeAPduInstance(sStackEvent.uEvent.sApsDataIndEvent.hAPduInst);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_APS_DATA_CONFIRM:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_APS_DATA_CONFIRM Status %d, Address 0x%04x\n",&lt;BR /&gt; sStackEvent.uEvent.sApsDataConfirmEvent.u8Status,&lt;BR /&gt; sStackEvent.uEvent.sApsDataConfirmEvent.uDstAddr.u16Addr);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_APS_DATA_ACK:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_APS_DATA_ACK Status %d, Address 0x%04x\n",&lt;BR /&gt; sStackEvent.uEvent.sApsDataAckEvent.u8Status,&lt;BR /&gt; sStackEvent.uEvent.sApsDataAckEvent.u16DstAddr);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_NWK_NEW_NODE_HAS_JOINED:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: vCheckStackEvent: ZPS_EVENT_NEW_NODE_HAS_JOINED, Nwk Addr=0x%04x\n",&lt;BR /&gt; sStackEvent.uEvent.sNwkJoinIndicationEvent.u16NwkAddr);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_NWK_LEAVE_INDICATION:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_LEAVE_INDICATION\n");&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_NWK_LEAVE_CONFIRM:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_LEAVE_CONFIRM\n");&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_NWK_STATUS_INDICATION:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_NWK_STATUS_INDICATION\n");&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_NWK_ROUTE_DISCOVERY_CONFIRM:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_ROUTE_DISCOVERY_CFM\n");&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_ERROR:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: Monitor Sensors ZPS_EVENT_ERROR\n");&lt;BR /&gt; DBG_vPrintf(TRACE_APP, " Error Code %d\n", sStackEvent.uEvent.sAfErrorEvent.eError);&lt;/P&gt;&lt;P&gt;if (ZPS_ERROR_OS_MESSAGE_QUEUE_OVERRUN == sStackEvent.uEvent.sAfErrorEvent.eError)&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, " Queue handle %d\n", sStackEvent.uEvent.sAfErrorEvent.uErrorData.sAfErrorOsMessageOverrun.hMessage);&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_NWK_POLL_CONFIRM:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: ZPS_EVENT_NEW_POLL_COMPLETE, status = %d\n",&lt;BR /&gt; sStackEvent.uEvent.sNwkPollConfirmEvent.u8Status );&lt;BR /&gt; }&lt;BR /&gt; break;&lt;/P&gt;&lt;P&gt;case ZPS_EVENT_NWK_JOINED_AS_ROUTER:&lt;BR /&gt; case ZPS_EVENT_NWK_STARTED:&lt;BR /&gt; case ZPS_EVENT_NWK_FAILED_TO_START:&lt;BR /&gt; case ZPS_EVENT_NWK_FAILED_TO_JOIN:&lt;BR /&gt; case ZPS_EVENT_NWK_DISCOVERY_COMPLETE:&lt;BR /&gt; /* Deliberate fall through */&lt;BR /&gt; default:&lt;BR /&gt; {&lt;BR /&gt; DBG_vPrintf(TRACE_APP, "APP: vCheckStackEvent: unhandled event %d\n", sStackEvent.eType);&lt;BR /&gt; }&lt;BR /&gt; break;&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/****************************************************************************&lt;BR /&gt; *&lt;BR /&gt; * NAME: vClearDiscNT&lt;BR /&gt; *&lt;BR /&gt; * DESCRIPTION:&lt;BR /&gt; * Handles the re-intialisation of the discovery table to 0&lt;BR /&gt; *&lt;BR /&gt; * PARAMETERS: None&lt;BR /&gt; *&lt;BR /&gt; *&lt;BR /&gt; * RETURNS:&lt;BR /&gt; * None&lt;BR /&gt; *&lt;BR /&gt; ****************************************************************************/&lt;BR /&gt;PRIVATE void vClearDiscNT(void)&lt;BR /&gt;{&lt;BR /&gt; ZPS_tsNwkNib * thisNib;&lt;/P&gt;&lt;P&gt;void * thisNet = ZPS_pvAplZdoGetNwkHandle();&lt;BR /&gt; thisNib = ZPS_psNwkNibGetHandle(thisNet);&lt;/P&gt;&lt;P&gt;memset(thisNib-&amp;gt;sTbl.psNtDisc, 0, sizeof(ZPS_tsNwkDiscNtEntry) * thisNib-&amp;gt;sTblSize.u8NtDisc);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/****************************************************************************/&lt;BR /&gt;/*** END OF FILE ***/&lt;BR /&gt;/****************************************************************************/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am waiting for you response.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 13 Jun 2018 06:31:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Wireless-MCU/Association-request-response-is-not-received/m-p/765897#M4641</guid>
      <dc:creator>vihang_jani</dc:creator>
      <dc:date>2018-06-13T06:31:10Z</dc:date>
    </item>
    <item>
      <title>Re: Association request response is not received</title>
      <link>https://community.nxp.com/t5/Wireless-MCU/Association-request-response-is-not-received/m-p/765898#M4642</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Vihang,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I notice that you are working on the JN-AN-1184, as you know it is an application template and you have to add the DefaultTClinkKey. It will depend on the application if is ZHA or ZLL.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Or are you working on the JN-AN-1229?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Now, you should work with the JN-SW-4168 that support &lt;A href="https://www.nxp.com/products/wireless-connectivity/proprietary-ieee-802.15.4-based/zigbee/zigbee-home-automation:ZIGBEE-HOME-AUTOMATION?fsrch=1&amp;amp;sr=1&amp;amp;pageNum=1"&gt;Zigbee Home Automation&lt;/A&gt; and Zigbee Link Link.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Then, Could you please take a screen of the terminal of router and end device? I want to be sure what is the issue that is reporting.&lt;/P&gt;&lt;P&gt;Could you please attach the c file that you modified?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Mario&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 14 Jun 2018 01:06:43 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Wireless-MCU/Association-request-response-is-not-received/m-p/765898#M4642</guid>
      <dc:creator>mario_castaneda</dc:creator>
      <dc:date>2018-06-14T01:06:43Z</dc:date>
    </item>
    <item>
      <title>Re: Association request response is not received</title>
      <link>https://community.nxp.com/t5/Wireless-MCU/Association-request-response-is-not-received/m-p/765899#M4643</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;HI Mario,&lt;/P&gt;&lt;P&gt;I am working on JN-AN-1229&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I also&amp;nbsp;added modified&amp;nbsp;&amp;nbsp;c file of Coordinator and router.Please you can compare with bare files of JN-AN-1229.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 14 Jun 2018 06:18:34 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Wireless-MCU/Association-request-response-is-not-received/m-p/765899#M4643</guid>
      <dc:creator>vihang_jani</dc:creator>
      <dc:date>2018-06-14T06:18:34Z</dc:date>
    </item>
    <item>
      <title>Re: Association request response is not received</title>
      <link>https://community.nxp.com/t5/Wireless-MCU/Association-request-response-is-not-received/m-p/765900#M4644</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Vihang/Mario&lt;BR /&gt;I am using&amp;nbsp;JN-AN-1216-Zigbee-3-0-IoT-ControlBridge Application and&amp;nbsp;JN-SW-4270 SDK for JN-5179.&lt;/P&gt;&lt;P&gt;I had set Trust center table size and Aps key Table size is 70&amp;nbsp; on config file but still i am getting the&amp;nbsp;&lt;/P&gt;&lt;P&gt;tsAplAib-&amp;gt;psAplDeviceKeyPairTable-&amp;gt;u16SizeOfKeyDescriptorTable is 1 only.&lt;/P&gt;&lt;P&gt;Also i share screen for same.&lt;/P&gt;&lt;P&gt;Is it correct ? if not how to resolve it?&lt;span class="lia-inline-image-display-wrapper" image-alt="Capture.PNG"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/86586i95B3A5A58FCDD554/image-size/large?v=v2&amp;amp;px=999" role="button" title="Capture.PNG" alt="Capture.PNG" /&gt;&lt;/span&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 08 Aug 2019 14:12:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Wireless-MCU/Association-request-response-is-not-received/m-p/765900#M4644</guid>
      <dc:creator>vishal_zadafiy1</dc:creator>
      <dc:date>2019-08-08T14:12:20Z</dc:date>
    </item>
    <item>
      <title>Re: Association request response is not received</title>
      <link>https://community.nxp.com/t5/Wireless-MCU/Association-request-response-is-not-received/m-p/765901#M4645</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Vishal,&lt;BR /&gt;&lt;BR /&gt;Please check zps_gen.h file after save your configuration.&lt;BR /&gt;I have attached snapshot of that file for your reference.&lt;span class="lia-inline-image-display-wrapper" image-alt="configuration_of_zps_gen_h_file.JPG"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/86581i912C2A050B8E4D5F/image-size/large?v=v2&amp;amp;px=999" role="button" title="configuration_of_zps_gen_h_file.JPG" alt="configuration_of_zps_gen_h_file.JPG" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 09 Aug 2019 06:10:44 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Wireless-MCU/Association-request-response-is-not-received/m-p/765901#M4645</guid>
      <dc:creator>vihang_jani</dc:creator>
      <dc:date>2019-08-09T06:10:44Z</dc:date>
    </item>
    <item>
      <title>Re: Association request response is not received</title>
      <link>https://community.nxp.com/t5/Wireless-MCU/Association-request-response-is-not-received/m-p/765902#M4646</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you for your response.&lt;/P&gt;&lt;P&gt;It was very helpful.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;On Fri, Aug 9, 2019 at 12:13 PM vihang.jani@slscorp.com &amp;lt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 09 Aug 2019 12:50:15 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Wireless-MCU/Association-request-response-is-not-received/m-p/765902#M4646</guid>
      <dc:creator>vishal_zadafiy1</dc:creator>
      <dc:date>2019-08-09T12:50:15Z</dc:date>
    </item>
  </channel>
</rss>

