Files
OldPeopleHome/zigbee/ZStack-CC2530-r200/Projects/SappWsn/EndDeviceEB/List/ZDApp.lst
LitterDryFish 6b0d1c0743 add node
2019-08-23 12:26:53 +08:00

7307 lines
345 KiB
Plaintext

###############################################################################
#
# IAR C/C++ Compiler V10.30.1.6000 for 8051 23/Aug/2019 12:14:01
# Copyright 2004-2018 IAR Systems AB.
# PC-locked license - IAR Embedded Workbench for 8051
#
# Core = plain
# Code model = banked
# Data model = large
# Calling convention = xdata reentrant
# Constant location = data_rom
# Dptr setup = 1,16
#
# Source file =
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Components\stack\zdo\ZDApp.c
# Command line =
# -f C:\Users\VULCAN\AppData\Local\Temp\EWAC09.tmp
# (E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Components\stack\zdo\ZDApp.c
# -D ZIGBEEPRO -D NWK_AUTO_POLL -D ZTOOL_P1 -D xMT_TASK -D xMT_SYS_FUNC
# -D MT_ZDO_FUNC -D SAPP_ZSTACK -lC
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\EndDeviceEB\List
# -lA
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\EndDeviceEB\List
# --diag_suppress Pe001,Pa010 -o
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\EndDeviceEB\Obj
# -e --debug --core=plain --dptr=16,1 --data_model=large
# --code_model=banked --calling_convention=xdata_reentrant
# --place_constants=data_rom --nr_virtual_regs 8 -f
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\zstack\Tools\CC2530DB\f8wEndev.cfg
# (-DCPU32MHZ -DROOT=__near_func -DMAC_CFG_TX_DATA_MAX=3
# -DMAC_CFG_TX_MAX=6 -DMAC_CFG_RX_MAX=3) -f
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\zstack\Tools\CC2530DB\f8wConfig.cfg
# (-DZIGBEEPRO -DSECURE=0 -DZG_SECURE_DYNAMIC=0 -DREFLECTOR
# -DDEFAULT_CHANLIST=0x00800000 -DZDAPP_CONFIG_PAN_ID=0x0057
# -DNWK_START_DELAY=100 -DEXTENDED_JOINING_RANDOM_MASK=0x007F
# -DBEACON_REQUEST_DELAY=100 -DBEACON_REQ_DELAY_MASK=0x00FF
# -DLINK_STATUS_JITTER_MASK=0x007F -DROUTE_EXPIRY_TIME=30
# -DAPSC_ACK_WAIT_DURATION_POLLED=3000 -DNWK_INDIRECT_MSG_TIMEOUT=7
# -DMAX_RREQ_ENTRIES=8 -DAPSC_MAX_FRAME_RETRIES=3
# -DNWK_MAX_DATA_RETRIES=2 -DMAX_POLL_FAILURE_RETRIES=2 -DMAX_BCAST=9
# -DAPS_MAX_GROUPS=16 -DMAX_RTG_ENTRIES=40 -DNWK_MAX_BINDING_ENTRIES=4
# -DMAX_BINDING_CLUSTER_IDS=4 "-DDEFAULT_KEY={0x01, 0x03, 0x05, 0x07,
# 0x09, 0x0B, 0x0D, 0x0F, 0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C,
# 0x0D}" -DMAC_MAX_FRAME_SIZE=116 -DZDNWKMGR_MIN_TRANSMISSIONS=20
# "-DCONST=const __code" -DGENERIC=__generic -DRFD_RCVC_ALWAYS_ON=FALSE
# -DPOLL_RATE=1000 -DQUEUED_POLL_RATE=100 -DRESPONSE_POLL_RATE=100
# -DREJOIN_POLL_RATE=440) -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\Source\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\zstack\ZMain\TI2530DB\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\hal\include\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\hal\target\CC2530EB\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\mac\include\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\mac\high_level\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\mac\low_level\srf04\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\mac\low_level\srf04\single_chip\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\mt\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\osal\include\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\services\saddr\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\services\sdata\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\af\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\nwk\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\sapi\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\sec\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\sys\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\zdo\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\zmac\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\zmac\f8w\
# -Ohz --require_prototypes --no_code_motion)
# Locale = Chinese (Simplified)_CHN.936
# List file =
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\EndDeviceEB\List\ZDApp.lst
# Object file =
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\EndDeviceEB\Obj\ZDApp.r51
#
###############################################################################
E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Components\stack\zdo\ZDApp.c
1 /**************************************************************************************************
2 Filename: ZDApp.c
3 Revised: $Date: 2011-04-13 10:12:34 -0700 (Wed, 13 Apr 2011) $
4 Revision: $Revision: 25678 $
5
6 Description: This file contains the interface to the Zigbee Device Application. This is the
7 Application part that the user can change. This also contains the Task functions.
8
9
10 Copyright 2004-2011 Texas Instruments Incorporated. All rights reserved.
11
12 IMPORTANT: Your use of this Software is limited to those specific rights
13 granted under the terms of a software license agreement between the user
14 who downloaded the software, his/her employer (which must be your employer)
15 and Texas Instruments Incorporated (the "License"). You may not use this
16 Software unless you agree to abide by the terms of the License. The License
17 limits your use, and you acknowledge, that the Software may not be modified,
18 copied or distributed unless embedded on a Texas Instruments microcontroller
19 or used solely and exclusively in conjunction with a Texas Instruments radio
20 frequency transceiver, which is integrated into your product. Other than for
21 the foregoing purpose, you may not use, reproduce, copy, prepare derivative
22 works of, modify, distribute, perform, display or sell this Software and/or
23 its documentation for any purpose.
24
25 YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
26 PROVIDED 揂S IS?WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
27 INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
28 NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
29 TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,
30 NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
31 LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
32 INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE
33 OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT
34 OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
35 (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
36
37 Should you have any questions regarding your right to use this Software,
38 contact Texas Instruments Incorporated at www.TI.com.
39 **************************************************************************************************/
40
41 /*********************************************************************
42 * INCLUDES
43 */
44
45 #include "ZComDef.h"
46 #include "ZMac.h"
47 #include "OSAL.h"
48 #include "OSAL_Tasks.h"
49 #include "OSAL_PwrMgr.h"
50 #include "OSAL_Nv.h"
51 #include "AF.h"
52 #include "APSMEDE.h"
53 #include "NLMEDE.h"
54 #include "AddrMgr.h"
55 #include "ZDProfile.h"
56 #include "ZDObject.h"
57 #include "ZDConfig.h"
58 #include "ZDSecMgr.h"
59 #include "ZDApp.h"
60 #include "DebugTrace.h"
61 #include "nwk_util.h"
62 #include "OnBoard.h"
63 #include "ZGlobals.h"
64 #include "ZDNwkMgr.h"
65 #include "rtg.h"
66
67 #include "ssp.h"
68
69 /* HAL */
70 #include "hal_led.h"
71 #include "hal_lcd.h"
72 #include "hal_key.h"
73
74 #if defined( MT_MAC_FUNC ) || defined( MT_MAC_CB_FUNC )
75 #error "ERROR! MT_MAC functionalities should be disabled on ZDO devices"
76 #endif
77
78 /*********************************************************************
79 * CONSTANTS
80 */
81
82 #if !defined( NWK_START_DELAY )
83 #define NWK_START_DELAY 100 // in milliseconds
84 #endif
85
86 #if !defined( LEAVE_RESET_DELAY )
87 #define LEAVE_RESET_DELAY 5000 // in milliseconds
88 #endif
89
90 // Init ZDO, but hold and wait for application to start the joining or
91 // forming network
92 #define ZDO_INIT_HOLD_NWK_START 0xFFFF
93
94 #if !defined( EXTENDED_JOINING_RANDOM_MASK )
95 #define EXTENDED_JOINING_RANDOM_MASK 0x007F
96 #endif
97
98 #if !defined( BEACON_REQUEST_DELAY )
99 #define BEACON_REQUEST_DELAY 100 // in milliseconds
100 #endif
101
102 #if !defined( BEACON_REQ_DELAY_MASK )
103 #define BEACON_REQ_DELAY_MASK 0x007F
104 #endif
105
106 #define MAX_RESUME_RETRY 3
107
108 #define MAX_DEVICE_UNAUTH_TIMEOUT 5000 // 5 seconds
109
110 // Beacon Order Settings (see NLMEDE.h)
111 #define DEFAULT_BEACON_ORDER BEACON_ORDER_NO_BEACONS
112 #define DEFAULT_SUPERFRAME_ORDER DEFAULT_BEACON_ORDER
113
114 #if !defined( MAX_NWK_FRAMECOUNTER_CHANGES )
115 // The number of times the frame counter can change before
116 // saving to NV
117 #define MAX_NWK_FRAMECOUNTER_CHANGES 1000
118 #endif
119
120 // Leave control bits
121 #define ZDAPP_LEAVE_CTRL_INIT 0
122 #define ZDAPP_LEAVE_CTRL_SET 1
123 #define ZDAPP_LEAVE_CTRL_RA 2
124
125 // Address Manager Stub Implementation
126 #define ZDApp_NwkWriteNVRequest AddrMgrWriteNVRequest
127
128
129 #if !defined ZDO_NV_SAVE_RFDs
130 #define ZDO_NV_SAVE_RFDs TRUE
131 #endif
132
133 // Delay time before updating NWK NV data to force fewer writes during high activity.
134 #if ZDO_NV_SAVE_RFDs
135 #define ZDAPP_UPDATE_NWK_NV_TIME 700
136 #else
137 #define ZDAPP_UPDATE_NWK_NV_TIME 65000
138 #endif
139
140 /*********************************************************************
141 * GLOBAL VARIABLES
142 */
143
144 #if defined( LCD_SUPPORTED )
145 uint8 MatchRsps = 0;
146 #endif
147
\ In segment XDATA_I, align 1, keep-with-next
148 uint8 zdoDiscCounter = 1;
\ zdoDiscCounter:
\ 000000 DS 1
\ 000001 REQUIRE `?<Initializer for zdoDiscCounter>`
\ 000001 REQUIRE __INIT_XDATA_I
149
\ In segment XDATA_Z, align 1, keep-with-next
150 zAddrType_t ZDAppNwkAddr;
\ ZDAppNwkAddr:
\ 000000 DS 9
\ 000009 REQUIRE __INIT_XDATA_Z
151
\ In segment XDATA_Z, align 1, keep-with-next
152 uint8 zdappMgmtNwkDiscRspTransSeq;
\ zdappMgmtNwkDiscRspTransSeq:
\ 000000 DS 1
\ 000001 REQUIRE __INIT_XDATA_Z
\ In segment XDATA_Z, align 1, keep-with-next
153 uint8 zdappMgmtNwkDiscReqInProgress = FALSE;
\ zdappMgmtNwkDiscReqInProgress:
\ 000000 DS 1
\ 000001 REQUIRE __INIT_XDATA_Z
\ In segment XDATA_Z, align 1, keep-with-next
154 zAddrType_t zdappMgmtNwkDiscRspAddr;
\ zdappMgmtNwkDiscRspAddr:
\ 000000 DS 9
\ 000009 REQUIRE __INIT_XDATA_Z
\ In segment XDATA_Z, align 1, keep-with-next
155 uint8 zdappMgmtNwkDiscStartIndex;
\ zdappMgmtNwkDiscStartIndex:
\ 000000 DS 1
\ 000001 REQUIRE __INIT_XDATA_Z
\ In segment XDATA_Z, align 1, keep-with-next
156 uint8 zdappMgmtSavedNwkState;
\ zdappMgmtSavedNwkState:
\ 000000 DS 1
\ 000001 REQUIRE __INIT_XDATA_Z
157
\ In segment XDATA_Z, align 1, keep-with-next
158 uint16 nwkFrameCounterChanges = 0;
\ nwkFrameCounterChanges:
\ 000000 DS 2
\ 000002 REQUIRE __INIT_XDATA_Z
\ In segment XDATA_I, align 1, keep-with-next
159 uint8 continueJoining = TRUE;
\ continueJoining:
\ 000000 DS 1
\ 000001 REQUIRE `?<Initializer for continueJoining>`
\ 000001 REQUIRE __INIT_XDATA_I
160
\ In segment XDATA_Z, align 1, keep-with-next
161 uint8 _tmpRejoinState;
\ _tmpRejoinState:
\ 000000 DS 1
\ 000001 REQUIRE __INIT_XDATA_Z
162
163 // The extended PanID used in ZDO layer for rejoin.
\ In segment XDATA_Z, align 1, keep-with-next
164 uint8 ZDO_UseExtendedPANID[Z_EXTADDR_LEN];
\ ZDO_UseExtendedPANID:
\ 000000 DS 8
\ 000008 REQUIRE __INIT_XDATA_Z
165
\ In segment XDATA_Z, align 1, keep-with-next
166 pfnZdoCb zdoCBFunc[MAX_ZDO_CB_FUNC];
\ zdoCBFunc:
\ 000000 DS 12
\ 00000C REQUIRE __INIT_XDATA_Z
167
168 /*********************************************************************
169 * EXTERNAL VARIABLES
170 */
171
172 /*********************************************************************
173 * EXTERNAL FUNCTIONS
174 */
175
176 /*********************************************************************
177 * LOCAL FUNCTIONS
178 */
179
180 void ZDApp_NetworkStartEvt( void );
181 void ZDApp_DeviceAuthEvt( void );
182 void ZDApp_SaveNetworkStateEvt( void );
183
184 uint8 ZDApp_ReadNetworkRestoreState( void );
185 uint8 ZDApp_RestoreNetworkState( void );
186 void ZDAppDetermineDeviceType( void );
187 void ZDApp_InitUserDesc( void );
188 void ZDAppCheckForHoldKey( void );
189 void ZDApp_ProcessOSALMsg( osal_event_hdr_t *msgPtr );
190 void ZDApp_ProcessNetworkJoin( void );
191 void ZDApp_SetCoordAddress( uint8 endPoint, uint8 dstEP );
192 uint8 ZDApp_RestoreNwkKey( void );
193 networkDesc_t* ZDApp_NwkDescListProcessing(void);
194
195 void ZDApp_SecInit( uint8 state );
196 UINT16 ZDApp_ProcessSecEvent( uint8 task_id, UINT16 events );
197 void ZDApp_ProcessSecMsg( osal_event_hdr_t *msgPtr );
198
199 void ZDApp_SendMsg( uint8 taskID, uint8 cmd, uint8 len, uint8 *buf );
200
201 void ZDApp_ResetTimerStart( uint16 delay );
202 void ZDApp_ResetTimerCancel( void );
203 void ZDApp_LeaveCtrlInit( void );
204 void ZDApp_LeaveCtrlSet( uint8 ra );
205 uint8 ZDApp_LeaveCtrlBypass( void );
206 void ZDApp_LeaveCtrlStartup( devStates_t* state, uint16* startDelay );
207 void ZDApp_LeaveUpdate( uint16 nwkAddr, uint8* extAddr,
208 uint8 removeChildren );
209 void ZDApp_NodeProfileSync( uint8 stackProfile );
210 void ZDApp_ProcessMsgCBs( zdoIncomingMsg_t *inMsg );
211 void ZDApp_RegisterCBs( void );
212 void ZDApp_InitZdoCBFunc(void);
213
214 /*********************************************************************
215 * LOCAL VARIABLES
216 */
217
\ In segment XDATA_Z, align 1, keep-with-next
218 uint8 ZDAppTaskID;
\ ZDAppTaskID:
\ 000000 DS 1
\ 000001 REQUIRE __INIT_XDATA_Z
\ In segment XDATA_Z, align 1, keep-with-next
219 uint8 nwkStatus;
\ nwkStatus:
\ 000000 DS 1
\ 000001 REQUIRE __INIT_XDATA_Z
\ In segment XDATA_Z, align 1, keep-with-next
220 endPointDesc_t *ZDApp_AutoFindMode_epDesc = (endPointDesc_t *)NULL;
\ ZDApp_AutoFindMode_epDesc:
\ 000000 DS 2
\ 000002 REQUIRE __INIT_XDATA_Z
\ In segment XDATA_Z, align 1, keep-with-next
221 uint8 ZDApp_LeaveCtrl;
\ ZDApp_LeaveCtrl:
\ 000000 DS 1
\ 000001 REQUIRE __INIT_XDATA_Z
222
223 #if defined( HOLD_AUTO_START )
224 devStates_t devState = DEV_HOLD;
225 #else
\ In segment XDATA_I, align 1, keep-with-next
226 devStates_t devState = DEV_INIT;
\ devState:
\ 000000 DS 1
\ 000001 REQUIRE `?<Initializer for devState>`
\ 000001 REQUIRE __INIT_XDATA_I
227 #endif
228
229 #if ( ZG_BUILD_RTRONLY_TYPE ) || ( ZG_BUILD_ENDDEVICE_TYPE )
\ In segment XDATA_Z, align 1, keep-with-next
230 devStartModes_t devStartMode = MODE_JOIN; // Assume joining
\ devStartMode:
\ 000000 DS 1
\ 000001 REQUIRE __INIT_XDATA_Z
231 //devStartModes_t devStartMode = MODE_RESUME; // if already "directly joined"
232 // to parent. Set to make the device do an Orphan scan.
233 #else
234 // Set the default to coodinator
235 devStartModes_t devStartMode = MODE_HARD;
236 #endif
237
\ In segment XDATA_Z, align 1, keep-with-next
238 uint8 retryCnt;
\ retryCnt:
\ 000000 DS 1
\ 000001 REQUIRE __INIT_XDATA_Z
239
\ In segment XDATA_I, align 1, keep-with-next
240 endPointDesc_t ZDApp_epDesc =
\ ZDApp_epDesc:
\ 000000 DS 6
\ 000006 REQUIRE `?<Initializer for ZDApp_epDesc>`
\ 000006 REQUIRE __INIT_XDATA_I
241 {
242 ZDO_EP,
243 &ZDAppTaskID,
244 (SimpleDescriptionFormat_t *)NULL, // No Simple description for ZDO
245 (afNetworkLatencyReq_t)0 // No Network Latency req
246 };
247
\ In segment XDATA_I, align 1, keep-with-next
248 uint16 ZDApp_SavedPollRate = POLL_RATE;
\ ZDApp_SavedPollRate:
\ 000000 DS 2
\ 000002 REQUIRE `?<Initializer for ZDApp_SavedPollRate>`
\ 000002 REQUIRE __INIT_XDATA_I
249
250 /*********************************************************************
251 * @fn ZDApp_Init
252 *
253 * @brief ZDApp Initialization function.
254 *
255 * @param task_id - ZDApp Task ID
256 *
257 * @return None
258 */
\ In segment BANKED_CODE, align 1, keep-with-next
259 void ZDApp_Init( uint8 task_id )
\ ZDApp_Init:
260 {
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 0
\ 000005 E9 MOV A,R1
261 // Save the task ID
262 ZDAppTaskID = task_id;
\ 000006 90.... MOV DPTR,#ZDAppTaskID
\ 000009 F0 MOVX @DPTR,A
263
264 // Initialize the ZDO global device short address storage
265 ZDAppNwkAddr.addrMode = Addr16Bit;
\ 00000A 90.... MOV DPTR,#ZDAppNwkAddr + 8
\ 00000D 7402 MOV A,#0x2
\ 00000F F0 MOVX @DPTR,A
266 ZDAppNwkAddr.addr.shortAddr = INVALID_NODE_ADDR;
\ 000010 90.... MOV DPTR,#ZDAppNwkAddr
\ 000013 74FE MOV A,#-0x2
\ 000015 F0 MOVX @DPTR,A
\ 000016 A3 INC DPTR
\ 000017 04 INC A
\ 000018 F0 MOVX @DPTR,A
267 (void)NLME_GetExtAddr(); // Load the saveExtAddr pointer.
\ 000019 ; Setup parameters for call to function NLME_GetExtAddr
\ 000019 12.... LCALL `??NLME_GetExtAddr::?relay`; Banked call to: NLME_GetExtAddr
268
269 // Check for manual "Hold Auto Start"
270 ZDAppCheckForHoldKey();
271
272 // Initialize ZDO items and setup the device - type of device to create.
273 ZDO_Init();
\ 00001C ; Setup parameters for call to function ZDO_Init
\ 00001C 12.... LCALL `??ZDO_Init::?relay`; Banked call to: ZDO_Init
274
275 // Register the endpoint description with the AF
276 // This task doesn't have a Simple description, but we still need
277 // to register the endpoint.
278 afRegister( (endPointDesc_t *)&ZDApp_epDesc );
\ 00001F ; Setup parameters for call to function afRegister
\ 00001F 7A.. MOV R2,#ZDApp_epDesc & 0xff
\ 000021 7B.. MOV R3,#(ZDApp_epDesc >> 8) & 0xff
\ 000023 12.... LCALL `??afRegister::?relay`; Banked call to: afRegister
279
280 #if defined( ZDO_USERDESC_RESPONSE )
281 ZDApp_InitUserDesc();
\ 000026 ; Setup parameters for call to function ZDApp_InitUserDesc
\ 000026 12.... LCALL `??ZDApp_InitUserDesc::?relay`; Banked call to: ZDApp_InitUserDesc
282 #endif // ZDO_USERDESC_RESPONSE
283
284 // Start the device?
285 if ( devState != DEV_HOLD )
\ 000029 90.... MOV DPTR,#devState
\ 00002C E0 MOVX A,@DPTR
\ 00002D 6006 JZ ??ZDApp_Init_0
286 {
287 ZDOInitDevice( 0 );
\ 00002F ; Setup parameters for call to function ZDOInitDevice
\ 00002F 7A00 MOV R2,#0x0
\ 000031 7B00 MOV R3,#0x0
\ 000033 8004 SJMP ??ZDApp_Init_1
288 }
289 else
290 {
291 ZDOInitDevice( ZDO_INIT_HOLD_NWK_START );
\ ??ZDApp_Init_0:
\ 000035 ; Setup parameters for call to function ZDOInitDevice
\ 000035 7AFF MOV R2,#-0x1
\ 000037 7BFF MOV R3,#-0x1
\ ??ZDApp_Init_1:
\ 000039 12.... LCALL `??ZDOInitDevice::?relay`; Banked call to: ZDOInitDevice
292 #if 0
293 // Blink LED to indicate HOLD_START
294 HalLedBlink ( HAL_LED_4, 0, 50, 500 );
295 #endif
296 }
297
298 // Initialize the ZDO callback function pointers zdoCBFunc[]
299 ZDApp_InitZdoCBFunc();
\ 00003C ; Setup parameters for call to function ZDApp_InitZdoCBFunc
\ 00003C 12.... LCALL `??ZDApp_InitZdoCBFunc::?relay`; Banked call to: ZDApp_InitZdoCBFunc
300
301 ZDApp_RegisterCBs();
\ 00003F ; Setup parameters for call to function ZDApp_RegisterCBs
\ 00003F 12.... LCALL `??ZDApp_RegisterCBs::?relay`; Banked call to: ZDApp_RegisterCBs
302 } /* ZDApp_Init() */
\ 000042 02.... LJMP ??Subroutine48_0 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine48_0:
\ 000000 7F01 MOV R7,#0x1
\ 000002 02.... LJMP ?BANKED_LEAVE_XDATA
303
304 /*********************************************************************
305 * @fn ZDApp_SecInit
306 *
307 * @brief ZDApp initialize security.
308 *
309 * @param state - device initialization state
310 *
311 * @return none
312 */
\ In segment BANKED_CODE, align 1, keep-with-next
313 void ZDApp_SecInit( uint8 state )
\ ZDApp_SecInit:
314 {
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 0
315 uint8 zgPreConfigKey[SEC_KEY_LEN];
316
317 if ( ZG_SECURE_ENABLED && ZG_BUILD_COORDINATOR_TYPE && ZG_DEVICE_COORDINATOR_TYPE )
318 {
319 // Set the Trust Center bit
320 ZDO_Config_Node_Descriptor.ServerMask |= PRIM_TRUST_CENTER;
321 }
322
323 if ( ZG_CHECK_SECURITY_MODE == ZG_SECURITY_PRO_HIGH )
324 {
325 ZDO_Config_Node_Descriptor.CapabilityFlags |= CAPINFO_SECURITY_CAPABLE;
326 }
327
328 // Initialize ZigBee Device Security Manager
329 ZDSecMgrInit(state);
\ 000005 ; Setup parameters for call to function ZDSecMgrInit
\ 000005 12.... LCALL `??ZDSecMgrInit::?relay`; Banked call to: ZDSecMgrInit
330
331 if ( ZG_SECURE_ENABLED )
332 {
333 if ( state != ZDO_INITDEV_RESTORED_NETWORK_STATE )
334 {
335 nwkFrameCounter = 0;
336
337 if( _NIB.nwkKeyLoaded == FALSE )
338 {
339 if ( ( ZG_BUILD_COORDINATOR_TYPE && ZG_DEVICE_COORDINATOR_TYPE ) ||
340 ( ( zgSecurityMode == ZG_SECURITY_RESIDENTIAL ) && zgPreConfigKeys ) )
341 {
342 ZDSecMgrReadKeyFromNv(ZCD_NV_PRECFGKEY, zgPreConfigKey);
343 SSP_UpdateNwkKey( zgPreConfigKey, 0);
344 SSP_SwitchNwkKey( 0 );
345
346 // clear local copy of key
347 osal_memset(zgPreConfigKey, 0x00, SEC_KEY_LEN);
348 }
349 }
350 }
351 }
352 }
\ 000008 02.... LJMP ??Subroutine48_0 & 0xFFFF
353
354 /*********************************************************************
355 * @fn ZDApp_event_loop()
356 *
357 * @brief Main event loop for Zigbee device objects task. This function
358 * should be called at periodic intervals.
359 *
360 * @param task_id - Task ID
361 * @param events - Bitmap of events
362 *
363 * @return none
364 */
\ In segment BANKED_CODE, align 1, keep-with-next
365 UINT16 ZDApp_event_loop( uint8 task_id, UINT16 events )
\ ZDApp_event_loop:
366 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 REQUIRE ?V2
\ 000000 REQUIRE ?V3
\ 000000 74F4 MOV A,#-0xc
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 12
\ 000005 ; Auto size: 0
\ 000005 EA MOV A,R2
\ 000006 FE MOV R6,A
\ 000007 EB MOV A,R3
\ 000008 FF MOV R7,A
367 uint8 *msg_ptr;
368
369 if ( events & SYS_EVENT_MSG )
\ 000009 5480 ANL A,#0x80
\ 00000B 702F JNZ ??ZDApp_event_loop_0
370 {
371 while ( (msg_ptr = osal_msg_receive( ZDAppTaskID )) )
372 {
373 ZDApp_ProcessOSALMsg( (osal_event_hdr_t *)msg_ptr );
374
375 // Release the memory
376 osal_msg_deallocate( msg_ptr );
377 }
378
379 // Return unprocessed events
380 return (events ^ SYS_EVENT_MSG);
381 }
382
383 if ( events & ZDO_NETWORK_INIT )
\ 00000D EA MOV A,R2
\ 00000E A2E0 MOV C,0xE0 /* A */.0
\ 000010 5041 JNC ??ZDApp_event_loop_1
384 {
385 // Initialize apps and start the network
386 devState = DEV_INIT;
\ 000012 90.... MOV DPTR,#devState
\ 000015 7401 MOV A,#0x1
\ 000017 12.... LCALL ??Subroutine42_0 & 0xFFFF
387 osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );
388
389 ZDO_StartDevice( (uint8)ZDO_Config_Node_Descriptor.LogicalType, devStartMode,
390 DEFAULT_BEACON_ORDER, DEFAULT_SUPERFRAME_ORDER );
\ ??CrossCallReturnLabel_58:
\ 00001A ; Setup parameters for call to function ZDO_StartDevice
\ 00001A 7C0F MOV R4,#0xf
\ 00001C 7B0F MOV R3,#0xf
\ 00001E 90.... MOV DPTR,#devStartMode
\ 000021 E0 MOVX A,@DPTR
\ 000022 FA MOV R2,A
\ 000023 90.... MOV DPTR,#ZDO_Config_Node_Descriptor
\ 000026 E0 MOVX A,@DPTR
\ 000027 5407 ANL A,#0x7
\ 000029 F9 MOV R1,A
\ 00002A 12.... LCALL `??ZDO_StartDevice::?relay`; Banked call to: ZDO_StartDevice
391
392 // Return unprocessed events
393 return (events ^ ZDO_NETWORK_INIT);
\ 00002D EE MOV A,R6
\ 00002E 6401 XRL A,#0x1
\ 000030 8046 SJMP ??ZDApp_event_loop_2
394 }
\ ??ZDApp_event_loop_3:
\ 000032 ; Setup parameters for call to function ZDApp_ProcessOSALMsg
\ 000032 12.... LCALL `??ZDApp_ProcessOSALMsg::?relay`; Banked call to: ZDApp_ProcessOSALMsg
\ 000035 ; Setup parameters for call to function osal_msg_deallocate
\ 000035 AA.. MOV R2,?V0
\ 000037 AB.. MOV R3,?V1
\ 000039 12.... LCALL `??osal_msg_deallocate::?relay`; Banked call to: osal_msg_deallocate
\ ??ZDApp_event_loop_0:
\ 00003C ; Setup parameters for call to function osal_msg_receive
\ 00003C 90.... MOV DPTR,#ZDAppTaskID
\ 00003F E0 MOVX A,@DPTR
\ 000040 F9 MOV R1,A
\ 000041 12.... LCALL `??osal_msg_receive::?relay`; Banked call to: osal_msg_receive
\ 000044 8A.. MOV ?V0,R2
\ 000046 8B.. MOV ?V1,R3
\ 000048 EA MOV A,R2
\ 000049 4B ORL A,R3
\ 00004A 70E6 JNZ ??ZDApp_event_loop_3
\ 00004C EE MOV A,R6
\ 00004D FA MOV R2,A
\ 00004E EF MOV A,R7
\ 00004F 6480 XRL A,#0x80
\ 000051 803C SJMP ??ZDApp_event_loop_4
395
396 if ( ZSTACK_ROUTER_BUILD )
397 {
398 if ( events & ZDO_NETWORK_START )
399 {
400 ZDApp_NetworkStartEvt();
401
402 // Return unprocessed events
403 return (events ^ ZDO_NETWORK_START);
404 }
405
406 if ( events & ZDO_ROUTER_START )
407 {
408 if ( nwkStatus == ZSuccess )
409 {
410 if ( devState == DEV_END_DEVICE )
411 devState = DEV_ROUTER;
412
413 osal_pwrmgr_device( PWRMGR_ALWAYS_ON );
414 }
415 else
416 {
417 // remain as end device!!
418 }
419 osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );
420
421 // Return unprocessed events
422 return (events ^ ZDO_ROUTER_START);
423 }
424 }
425
426 if ( events & ZDO_STATE_CHANGE_EVT )
\ ??ZDApp_event_loop_1:
\ 000053 5410 ANL A,#0x10
\ 000055 6025 JZ ??ZDApp_event_loop_5
427 {
428 ZDO_UpdateNwkStatus( devState );
\ 000057 ; Setup parameters for call to function ZDO_UpdateNwkStatus
\ 000057 90.... MOV DPTR,#devState
\ 00005A E0 MOVX A,@DPTR
\ 00005B F9 MOV R1,A
\ 00005C 12.... LCALL `??ZDO_UpdateNwkStatus::?relay`; Banked call to: ZDO_UpdateNwkStatus
429
430 // At start up, do one MTO route discovery if the device is a concentrator
431 if ( zgConcentratorEnable == TRUE )
\ 00005F 90.... MOV DPTR,#zgConcentratorEnable
\ 000062 E0 MOVX A,@DPTR
\ 000063 6401 XRL A,#0x1
\ 000065 700E JNZ ??CrossCallReturnLabel_68
432 {
433 // Start next event
434 osal_start_timerEx( NWK_TaskID, NWK_MTO_RTG_REQ_EVT, 100 );
\ 000067 ; Setup parameters for call to function osal_start_timerEx
\ 000067 7C64 MOV R4,#0x64
\ 000069 7D00 MOV R5,#0x0
\ 00006B 7A00 MOV R2,#0x0
\ 00006D 7B08 MOV R3,#0x8
\ 00006F 90.... MOV DPTR,#NWK_TaskID
\ 000072 12.... LCALL ??Subroutine47_0 & 0xFFFF
435 }
436
437 // Return unprocessed events
438 return (events ^ ZDO_STATE_CHANGE_EVT);
\ ??CrossCallReturnLabel_68:
\ 000075 EE MOV A,R6
\ 000076 6410 XRL A,#0x10
\ ??ZDApp_event_loop_2:
\ 000078 FA MOV R2,A
\ 000079 EF MOV A,R7
\ 00007A 8013 SJMP ??ZDApp_event_loop_4
439 }
440
441 if ( events & ZDO_COMMAND_CNF )
\ ??ZDApp_event_loop_5:
\ 00007C EA MOV A,R2
\ 00007D 5408 ANL A,#0x8
\ 00007F 6006 JZ ??ZDApp_event_loop_6
442 {
443 // User defined logic
444
445 // Return unprocessed events
446 return (events ^ ZDO_COMMAND_CNF);
\ 000081 EA MOV A,R2
\ 000082 6408 XRL A,#0x8
\ 000084 FA MOV R2,A
\ 000085 801E SJMP ??ZDApp_event_loop_7
447 }
448
449 if ( events & ZDO_NWK_UPDATE_NV )
\ ??ZDApp_event_loop_6:
\ 000087 EB MOV A,R3
\ 000088 5402 ANL A,#0x2
\ 00008A 6006 JZ ??ZDApp_event_loop_8
450 {
451 ZDApp_SaveNetworkStateEvt();
452
453 // Return unprocessed events
454 return (events ^ ZDO_NWK_UPDATE_NV);
\ 00008C EB MOV A,R3
\ 00008D 6402 XRL A,#0x2
\ ??ZDApp_event_loop_4:
\ 00008F FB MOV R3,A
\ 000090 8013 SJMP ??ZDApp_event_loop_7
455 }
456
457 if ( events & ZDO_DEVICE_RESET )
\ ??ZDApp_event_loop_8:
\ 000092 EA MOV A,R2
\ 000093 5404 ANL A,#0x4
\ 000095 600A JZ ??ZDApp_event_loop_9
458 {
459 #ifdef ZBA_FALLBACK_NWKKEY
460 if ( devState == DEV_END_DEVICE_UNAUTH )
461 {
462 ZDSecMgrFallbackNwkKey();
463 }
464 else
465 #endif
466 {
467 // Set the NV startup option to force a "new" join.
468 zgWriteStartupOptions( ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE );
\ 000097 ; Setup parameters for call to function zgWriteStartupOptions
\ 000097 7A02 MOV R2,#0x2
\ 000099 79FF MOV R1,#-0x1
\ 00009B 12.... LCALL `??zgWriteStartupOptions::?relay`; Banked call to: zgWriteStartupOptions
469
470 // The device has been in the UNAUTH state, so reset
471 // Note: there will be no return from this call
472 SystemResetSoft();
\ 00009E ; Setup parameters for call to function Onboard_soft_reset
\ 00009E 12.... LCALL Onboard_soft_reset & 0xFFFF
473 }
474 }
475
476 if ( ZG_SECURE_ENABLED )
477 {
478 return ( ZDApp_ProcessSecEvent( task_id, events ) );
479 }
480 else
481 {
482 // Discard or make more handlers
483 return 0;
\ ??ZDApp_event_loop_9:
\ 0000A1 7A00 MOV R2,#0x0
\ 0000A3 7B00 MOV R3,#0x0
484 }
\ ??ZDApp_event_loop_7:
\ 0000A5 80.. SJMP ??Subroutine40_0
485 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine40_0:
\ 000000 7F04 MOV R7,#0x4
\ 000002 02.... LJMP ?BANKED_LEAVE_XDATA
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine42_0:
\ 000000 F0 MOVX @DPTR,A
\ 000001 ; Setup parameters for call to function osal_set_event
\ 000001 ; Setup parameters for call to function osal_set_event
\ 000001 ; Setup parameters for call to function osal_set_event
\ 000001 7A10 MOV R2,#0x10
\ 000003 7B00 MOV R3,#0x0
\ 000005 90.... MOV DPTR,#ZDAppTaskID
\ 000008 E0 MOVX A,@DPTR
\ 000009 F9 MOV R1,A
\ 00000A 12.... LCALL `??osal_set_event::?relay`; Banked call to: osal_set_event
\ 00000D 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine47_0:
\ 000000 E0 MOVX A,@DPTR
\ 000001 F9 MOV R1,A
\ 000002 12.... LCALL `??osal_start_timerEx::?relay`; Banked call to: osal_start_timerEx
\ 000005 22 RET
486
487 /*********************************************************************
488 * @fn ZDApp_ProcessSecEvent()
489 *
490 * @brief Process incoming security events.
491 *
492 * @param task_id - Task ID
493 * @param events - Bitmap of events
494 *
495 * @return none
496 */
\ In segment BANKED_CODE, align 1, keep-with-next
497 UINT16 ZDApp_ProcessSecEvent( uint8 task_id, UINT16 events )
\ ZDApp_ProcessSecEvent:
498 {
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 0
\ 000005 EA MOV A,R2
\ 000006 FE MOV R6,A
\ 000007 EB MOV A,R3
\ 000008 FF MOV R7,A
499 (void)task_id; // Intentionally unreferenced parameter
500
501 if ( ZSTACK_ROUTER_BUILD )
502 {
503 if ( events & ZDO_NEW_DEVICE )
504 {
505 // process the new device event
506 if ( ZDSecMgrNewDeviceEvent() == TRUE )
507 {
508 osal_start_timerEx( ZDAppTaskID, ZDO_NEW_DEVICE, 1000 );
509 }
510
511 // Return unprocessed events
512 return (events ^ ZDO_NEW_DEVICE);
513 }
514 }
515
516 if ( (ZG_CHECK_SECURITY_MODE == ZG_SECURITY_PRO_HIGH)
517 || (ZG_CHECK_SECURITY_MODE == ZG_SECURITY_SE_STANDARD) )
518 {
519 if ( ZG_BUILD_COORDINATOR_TYPE && ZG_DEVICE_COORDINATOR_TYPE )
520 {
521 if ( events & ZDO_SECMGR_EVENT )
522 {
523 ZDSecMgrEvent();
524
525 // Return unprocessed events
526 return (events ^ ZDO_SECMGR_EVENT);
527 }
528 }
529 }
530
531 if ( events & ZDO_DEVICE_AUTH )
\ 000009 EA MOV A,R2
\ 00000A 5480 ANL A,#0x80
\ 00000C 600A JZ ??ZDApp_ProcessSecEvent_0
532 {
533 ZDApp_DeviceAuthEvt();
\ 00000E ; Setup parameters for call to function ZDApp_DeviceAuthEvt
\ 00000E 12.... LCALL `??ZDApp_DeviceAuthEvt::?relay`; Banked call to: ZDApp_DeviceAuthEvt
534
535 // Return unprocessed events
536 return (events ^ ZDO_DEVICE_AUTH);
\ 000011 EE MOV A,R6
\ 000012 6480 XRL A,#0x80
\ 000014 FA MOV R2,A
\ 000015 EF MOV A,R7
\ 000016 8042 SJMP ??ZDApp_ProcessSecEvent_1
537 }
538
539 if ( events & ZDO_FRAMECOUNTER_CHANGE )
\ ??ZDApp_ProcessSecEvent_0:
\ 000018 EB MOV A,R3
\ 000019 5404 ANL A,#0x4
\ 00001B 6026 JZ ??ZDApp_ProcessSecEvent_2
540 {
541 if ( nwkFrameCounterChanges++ > MAX_NWK_FRAMECOUNTER_CHANGES )
\ 00001D 90.... MOV DPTR,#nwkFrameCounterChanges
\ 000020 12.... LCALL ??Subroutine49_0 & 0xFFFF
\ ??CrossCallReturnLabel_69:
\ 000023 E8 MOV A,R0
\ 000024 2401 ADD A,#0x1
\ 000026 FA MOV R2,A
\ 000027 E4 CLR A
\ 000028 39 ADDC A,R1
\ 000029 FB MOV R3,A
\ 00002A 90.... MOV DPTR,#nwkFrameCounterChanges
\ 00002D 12.... LCALL ??Subroutine55_0 & 0xFFFF
\ ??CrossCallReturnLabel_94:
\ 000030 C3 CLR C
\ 000031 E8 MOV A,R0
\ 000032 94E9 SUBB A,#-0x17
\ 000034 E9 MOV A,R1
\ 000035 9403 SUBB A,#0x3
\ 000037 4003 JC ??ZDApp_ProcessSecEvent_3
542 {
543 ZDApp_SaveNwkKey();
\ 000039 ; Setup parameters for call to function ZDApp_SaveNwkKey
\ 000039 12.... LCALL `??ZDApp_SaveNwkKey::?relay`; Banked call to: ZDApp_SaveNwkKey
544 }
545
546 // Return unprocessed events
547 return (events ^ ZDO_FRAMECOUNTER_CHANGE);
\ ??ZDApp_ProcessSecEvent_3:
\ 00003C EE MOV A,R6
\ 00003D FA MOV R2,A
\ 00003E EF MOV A,R7
\ 00003F 6404 XRL A,#0x4
\ 000041 8017 SJMP ??ZDApp_ProcessSecEvent_1
548 }
549
550 if ( events & ZDO_APS_FRAMECOUNTER_CHANGE )
\ ??ZDApp_ProcessSecEvent_2:
\ 000043 EB MOV A,R3
\ 000044 5410 ANL A,#0x10
\ 000046 6005 JZ ??ZDApp_ProcessSecEvent_4
551 {
552 #if defined (NV_RESTORE)
553 ZDSecMgrSaveApsLinkKey();
554 #endif // (NV_RESTORE)
555
556 // Return unprocessed events
557 return (events ^ ZDO_APS_FRAMECOUNTER_CHANGE);
\ 000048 EB MOV A,R3
\ 000049 6410 XRL A,#0x10
\ 00004B 800D SJMP ??ZDApp_ProcessSecEvent_1
558 }
559
560 if ( events & ZDO_TCLK_FRAMECOUNTER_CHANGE )
\ ??ZDApp_ProcessSecEvent_4:
\ 00004D EB MOV A,R3
\ 00004E 5408 ANL A,#0x8
\ 000050 600B JZ ??ZDApp_ProcessSecEvent_5
561 {
562 ZDSecMgrSaveTCLinkKey();
\ 000052 ; Setup parameters for call to function ZDSecMgrSaveTCLinkKey
\ 000052 12.... LCALL `??ZDSecMgrSaveTCLinkKey::?relay`; Banked call to: ZDSecMgrSaveTCLinkKey
563
564 // Return unprocessed events
565 return (events ^ ZDO_TCLK_FRAMECOUNTER_CHANGE);
\ 000055 EE MOV A,R6
\ 000056 FA MOV R2,A
\ 000057 EF MOV A,R7
\ 000058 6408 XRL A,#0x8
\ ??ZDApp_ProcessSecEvent_1:
\ 00005A FB MOV R3,A
\ 00005B 8004 SJMP ??ZDApp_ProcessSecEvent_6
566 }
567
568 // Discard or make more handlers
569 return 0;
\ ??ZDApp_ProcessSecEvent_5:
\ 00005D 7A00 MOV R2,#0x0
\ 00005F 7B00 MOV R3,#0x0
\ ??ZDApp_ProcessSecEvent_6:
\ 000061 02.... LJMP ??Subroutine48_0 & 0xFFFF
570 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine49_0:
\ 000000 E0 MOVX A,@DPTR
\ 000001 F8 MOV R0,A
\ 000002 A3 INC DPTR
\ 000003 E0 MOVX A,@DPTR
\ 000004 F9 MOV R1,A
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine55_0:
\ 000000 EA MOV A,R2
\ 000001 F0 MOVX @DPTR,A
\ 000002 A3 INC DPTR
\ 000003 EB MOV A,R3
\ 000004 F0 MOVX @DPTR,A
\ 000005 22 RET
571
572 /*********************************************************************
573 * Application Functions
574 */
575
576 /*********************************************************************
577 * @fn ZDOInitDevice
578 *
579 * @brief Start the device in the network. This function will read
580 * ZCD_NV_STARTUP_OPTION (NV item) to determine whether or not to
581 * restore the network state of the device.
582 *
583 * @param startDelay - timeDelay to start device (in milliseconds).
584 * There is a jitter added to this delay:
585 * ((NWK_START_DELAY + startDelay)
586 * + (osal_rand() & EXTENDED_JOINING_RANDOM_MASK))
587 * When startDelay is set to ZDO_INIT_HOLD_NWK_START
588 * this function will hold the network init. Application
589 * can start the device.
590 *
591 * NOTE: If the application would like to force a "new" join, the
592 * application should set the ZCD_STARTOPT_DEFAULT_NETWORK_STATE
593 * bit in the ZCD_NV_STARTUP_OPTION NV item before calling
594 * this function. "new" join means to not restore the network
595 * state of the device. Use zgWriteStartupOptions() to set these
596 * options.
597 *
598 * @return
599 * ZDO_INITDEV_RESTORED_NETWORK_STATE - The device's network state was
600 * restored.
601 * ZDO_INITDEV_NEW_NETWORK_STATE - The network state was initialized.
602 * This could mean that ZCD_NV_STARTUP_OPTION said to not restore, or
603 * it could mean that there was no network state to restore.
604 * ZDO_INITDEV_LEAVE_NOT_STARTED - Before the reset, a network leave was issued
605 * with the rejoin option set to TRUE. So, the device was not
606 * started in the network (one time only). The next time this
607 * function is called it will start.
608 */
\ In segment BANKED_CODE, align 1, keep-with-next
609 uint8 ZDOInitDevice( uint16 startDelay )
\ ZDOInitDevice:
610 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 74F6 MOV A,#-0xa
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 10
\ 000005 ; Auto size: 2
\ 000005 74FE MOV A,#-0x2
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A 12.... LCALL ?Subroutine12 & 0xFFFF
611 uint8 networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE;
612 uint16 extendedDelay = 0;
613
614 if ( devState == DEV_HOLD )
\ ??CrossCallReturnLabel_99:
\ 00000D 90.... MOV DPTR,#devState
\ 000010 E0 MOVX A,@DPTR
\ 000011 7005 JNZ ??ZDOInitDevice_0
615 {
616 // Initialize the RAM items table, in case an NV item has been updated.
617 zgInitItems( FALSE );
\ 000013 ; Setup parameters for call to function zgInitItems
\ 000013 7900 MOV R1,#0x0
\ 000015 12.... LCALL `??zgInitItems::?relay`; Banked call to: zgInitItems
618 }
619
620 ZDConfig_InitDescriptors();
\ ??ZDOInitDevice_0:
\ 000018 ; Setup parameters for call to function ZDConfig_InitDescriptors
\ 000018 12.... LCALL `??ZDConfig_InitDescriptors::?relay`; Banked call to: ZDConfig_InitDescriptors
621 //devtag.071807.todo - fix this temporary solution
622 _NIB.CapabilityFlags = ZDO_Config_Node_Descriptor.CapabilityFlags;
\ 00001B 90.... MOV DPTR,#ZDO_Config_Node_Descriptor + 2
\ 00001E E0 MOVX A,@DPTR
\ 00001F 90.... MOV DPTR,#_NIB + 14
\ 000022 F0 MOVX @DPTR,A
623
624 #if defined ( NV_RESTORE )
625 // Get Keypad directly to see if a reset nv is needed.
626 // Hold down the SW_BYPASS_NV key (defined in OnBoard.h)
627 // while booting to skip past NV Restore.
628 if ( HalKeyRead() == SW_BYPASS_NV )
629 networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE;
630 else
631 {
632 // Determine if NV should be restored
633 networkStateNV = ZDApp_ReadNetworkRestoreState();
634 }
635
636 if ( networkStateNV == ZDO_INITDEV_RESTORED_NETWORK_STATE )
637 {
638 networkStateNV = ZDApp_RestoreNetworkState();
639 }
640 else
641 {
642 // Wipe out the network state in NV
643 NLME_InitNV();
644 NLME_SetDefaultNV();
645 // clear NWK key values
646 ZDSecMgrClearNVKeyValues();
647 }
648 #endif
649
650 if ( networkStateNV == ZDO_INITDEV_NEW_NETWORK_STATE )
651 {
652 ZDAppDetermineDeviceType();
\ 000023 ; Setup parameters for call to function ZDAppDetermineDeviceType
\ 000023 12.... LCALL `??ZDAppDetermineDeviceType::?relay`; Banked call to: ZDAppDetermineDeviceType
653
654 // Only delay if joining network - not restoring network state
655 extendedDelay = (uint16)((NWK_START_DELAY + startDelay)
656 + (osal_rand() & EXTENDED_JOINING_RANDOM_MASK));
\ 000026 ; Setup parameters for call to function osal_rand
\ 000026 12.... LCALL `??osal_rand::?relay`; Banked call to: osal_rand
\ 000029 85..82 MOV DPL,?XSP + 0
\ 00002C 85..83 MOV DPH,?XSP + 1
\ 00002F EA MOV A,R2
\ 000030 547F ANL A,#0x7f
\ 000032 F8 MOV R0,A
\ 000033 E0 MOVX A,@DPTR
\ 000034 28 ADD A,R0
\ 000035 F8 MOV R0,A
\ 000036 A3 INC DPTR
\ 000037 E0 MOVX A,@DPTR
\ 000038 3400 ADDC A,#0x0
\ 00003A F9 MOV R1,A
\ 00003B E8 MOV A,R0
\ 00003C 2464 ADD A,#0x64
\ 00003E FE MOV R6,A
\ 00003F E4 CLR A
\ 000040 39 ADDC A,R1
\ 000041 FF MOV R7,A
657 }
658
659 // Initialize the security for type of device
660 ZDApp_SecInit( networkStateNV );
\ 000042 ; Setup parameters for call to function ZDSecMgrInit
\ 000042 7901 MOV R1,#0x1
\ 000044 12.... LCALL `??ZDSecMgrInit::?relay`; Banked call to: ZDSecMgrInit
661
662 if( ZDO_INIT_HOLD_NWK_START != startDelay )
\ 000047 85..82 MOV DPL,?XSP + 0
\ 00004A 85..83 MOV DPH,?XSP + 1
\ 00004D E0 MOVX A,@DPTR
\ 00004E F4 CPL A
\ 00004F 7003 JNZ ??ZDOInitDevice_1
\ 000051 A3 INC DPTR
\ 000052 E0 MOVX A,@DPTR
\ 000053 F4 CPL A
\ ??ZDOInitDevice_1:
\ 000054 602F JZ ??ZDOInitDevice_2
663 {
664 devState = DEV_INIT; // Remove the Hold state
\ 000056 90.... MOV DPTR,#devState
\ 000059 7401 MOV A,#0x1
\ 00005B F0 MOVX @DPTR,A
665
666 // Initialize leave control logic
667 ZDApp_LeaveCtrlInit();
\ 00005C ; Setup parameters for call to function ZDApp_LeaveCtrlInit
\ 00005C 12.... LCALL `??ZDApp_LeaveCtrlInit::?relay`; Banked call to: ZDApp_LeaveCtrlInit
668
669 // Check leave control reset settings
670 ZDApp_LeaveCtrlStartup( &devState, &startDelay );
\ 00005F ; Setup parameters for call to function ZDApp_LeaveCtrlStartup
\ 00005F AC.. MOV R4,?XSP + 0
\ 000061 AD.. MOV R5,?XSP + 1
\ 000063 7A.. MOV R2,#devState & 0xff
\ 000065 7B.. MOV R3,#(devState >> 8) & 0xff
\ 000067 12.... LCALL `??ZDApp_LeaveCtrlStartup::?relay`; Banked call to: ZDApp_LeaveCtrlStartup
671
672 // Leave may make the hold state come back
673 if ( devState == DEV_HOLD )
\ 00006A 90.... MOV DPTR,#devState
\ 00006D E0 MOVX A,@DPTR
\ 00006E 700E JNZ ??ZDOInitDevice_3
674 {
675 // Set the NV startup option to force a "new" join.
676 zgWriteStartupOptions( ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE );
\ 000070 ; Setup parameters for call to function zgWriteStartupOptions
\ 000070 7A02 MOV R2,#0x2
\ 000072 79FF MOV R1,#-0x1
\ 000074 12.... LCALL `??zgWriteStartupOptions::?relay`; Banked call to: zgWriteStartupOptions
677
678 // Notify the applications
679 osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );
\ 000077 ; Setup parameters for call to function osal_set_event
\ 000077 12.... LCALL ?Subroutine15 & 0xFFFF
680
681 return ( ZDO_INITDEV_LEAVE_NOT_STARTED ); // Don't join - (one time).
\ ??CrossCallReturnLabel_49:
\ 00007A 7902 MOV R1,#0x2
\ 00007C 8011 SJMP ??ZDOInitDevice_4
682 }
683
684 // Trigger the network start
685 ZDApp_NetworkInit( extendedDelay );
\ ??ZDOInitDevice_3:
\ 00007E ; Setup parameters for call to function ZDApp_NetworkInit
\ 00007E EE MOV A,R6
\ 00007F FA MOV R2,A
\ 000080 EF MOV A,R7
\ 000081 FB MOV R3,A
\ 000082 12.... LCALL `??ZDApp_NetworkInit::?relay`; Banked call to: ZDApp_NetworkInit
686 }
687
688 // set broadcast address mask to support broadcast filtering
689 NLME_SetBroadcastFilter( ZDO_Config_Node_Descriptor.CapabilityFlags );
\ ??ZDOInitDevice_2:
\ 000085 ; Setup parameters for call to function NLME_SetBroadcastFilter
\ 000085 90.... MOV DPTR,#ZDO_Config_Node_Descriptor + 2
\ 000088 E0 MOVX A,@DPTR
\ 000089 F9 MOV R1,A
\ 00008A 12.... LCALL `??NLME_SetBroadcastFilter::?relay`; Banked call to: NLME_SetBroadcastFilter
690
691 return ( networkStateNV );
\ 00008D 7901 MOV R1,#0x1
\ ??ZDOInitDevice_4:
\ 00008F REQUIRE ?Subroutine7
\ 00008F ; // Fall through to label ?Subroutine7
692 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine7:
\ 000000 7402 MOV A,#0x2
\ 000002 02.... LJMP ??Subroutine45_0 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine15:
\ 000000 7A10 MOV R2,#0x10
\ 000002 REQUIRE ??Subroutine41_0
\ 000002 ; // Fall through to label ??Subroutine41_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine41_0:
\ 000000 7B00 MOV R3,#0x0
\ 000002 90.... MOV DPTR,#ZDAppTaskID
\ 000005 E0 MOVX A,@DPTR
\ 000006 F9 MOV R1,A
\ 000007 12.... LCALL `??osal_set_event::?relay`; Banked call to: osal_set_event
\ 00000A 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine45_0:
\ 000000 12.... LCALL ?DEALLOC_XSTACK8
\ 000003 REQUIRE ??Subroutine46_0
\ 000003 ; // Fall through to label ??Subroutine46_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine46_0:
\ 000000 7F02 MOV R7,#0x2
\ 000002 02.... LJMP ?BANKED_LEAVE_XDATA
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine12:
\ 000000 85..82 MOV DPL,?XSP + 0
\ 000003 85..83 MOV DPH,?XSP + 1
\ 000006 REQUIRE ??Subroutine55_0
\ 000006 ; // Fall through to label ??Subroutine55_0
693
694 /*********************************************************************
695 * @fn ZDApp_ReadNetworkRestoreState
696 *
697 * @brief Read the ZCD_NV_STARTUP_OPTION NV Item to state whether
698 * or not to restore the network state.
699 * If the read value has the ZCD_STARTOPT_DEFAULT_NETWORK_STATE
700 * bit set return the ZDO_INITDEV_NEW_NETWORK_STATE.
701 *
702 * @param none
703 *
704 * @return ZDO_INITDEV_NEW_NETWORK_STATE
705 * or ZDO_INITDEV_RESTORED_NETWORK_STATE based on whether or
706 * not ZCD_STARTOPT_DEFAULT_NETWORK_STATE bit is set in
707 * ZCD_NV_STARTUP_OPTION
708 */
\ In segment BANKED_CODE, align 1, keep-with-next
709 uint8 ZDApp_ReadNetworkRestoreState( void )
\ ZDApp_ReadNetworkRestoreState:
710 {
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 0
711 uint8 networkStateNV = ZDO_INITDEV_RESTORED_NETWORK_STATE;
\ 000005 7E00 MOV R6,#0x0
712
713 // Look for the New Network State option.
714 if ( zgReadStartupOptions() & ZCD_STARTOPT_DEFAULT_NETWORK_STATE )
\ 000007 ; Setup parameters for call to function zgReadStartupOptions
\ 000007 12.... LCALL `??zgReadStartupOptions::?relay`; Banked call to: zgReadStartupOptions
\ 00000A E9 MOV A,R1
\ 00000B F8 MOV R0,A
\ 00000C A2E1 MOV C,0xE0 /* A */.1
\ 00000E 5002 JNC ??ZDApp_ReadNetworkRestoreState_0
715 {
716 networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE;
\ 000010 7E01 MOV R6,#0x1
717 }
718
719 return ( networkStateNV );
\ ??ZDApp_ReadNetworkRestoreState_0:
\ 000012 EE MOV A,R6
\ 000013 F9 MOV R1,A
\ 000014 02.... LJMP ??Subroutine48_0 & 0xFFFF
720 }
721
722 /*********************************************************************
723 * @fn ZDAppDetermineDeviceType()
724 *
725 * @brief Determines the type of device to start.
726 *
727 * Looks at zgDeviceLogicalType and determines what type of
728 * device to start. The types are:
729 * ZG_DEVICETYPE_COORDINATOR
730 * ZG_DEVICETYPE_ROUTER
731 * ZG_DEVICETYPE_ENDDEVICE
732 *
733 * @param none
734 *
735 * @return none
736 */
\ In segment BANKED_CODE, align 1, keep-with-next
737 void ZDAppDetermineDeviceType( void )
\ ZDAppDetermineDeviceType:
738 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
739 if ( zgDeviceLogicalType == ZG_DEVICETYPE_COORDINATOR )
\ 000004 90.... MOV DPTR,#zgDeviceLogicalType
\ 000007 E0 MOVX A,@DPTR
\ 000008 700E JNZ ??ZDAppDetermineDeviceType_0
740 {
741 devStartMode = MODE_HARD; // Start as a coordinator
\ 00000A 90.... MOV DPTR,#devStartMode
\ 00000D 7402 MOV A,#0x2
\ 00000F F0 MOVX @DPTR,A
742 ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_COORDINATOR;
\ 000010 90.... MOV DPTR,#ZDO_Config_Node_Descriptor
\ 000013 E0 MOVX A,@DPTR
\ 000014 54F8 ANL A,#0xf8
\ 000016 802E SJMP ??ZDAppDetermineDeviceType_1
743 }
744 else
745 {
746 if ( zgDeviceLogicalType == ZG_DEVICETYPE_ROUTER )
\ ??ZDAppDetermineDeviceType_0:
\ 000018 6401 XRL A,#0x1
\ 00001A 700A JNZ ??ZDAppDetermineDeviceType_2
747 ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_ROUTER;
\ 00001C 90.... MOV DPTR,#ZDO_Config_Node_Descriptor
\ 00001F E0 MOVX A,@DPTR
\ 000020 54F8 ANL A,#0xf8
\ 000022 4401 ORL A,#0x1
\ 000024 800D SJMP ??ZDAppDetermineDeviceType_3
748 else if ( zgDeviceLogicalType == ZG_DEVICETYPE_ENDDEVICE )
\ ??ZDAppDetermineDeviceType_2:
\ 000026 E0 MOVX A,@DPTR
\ 000027 6402 XRL A,#0x2
\ 000029 7009 JNZ ??ZDAppDetermineDeviceType_4
749 ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_DEVICE;
\ 00002B 90.... MOV DPTR,#ZDO_Config_Node_Descriptor
\ 00002E E0 MOVX A,@DPTR
\ 00002F 54F8 ANL A,#0xf8
\ 000031 4402 ORL A,#0x2
\ ??ZDAppDetermineDeviceType_3:
\ 000033 F0 MOVX @DPTR,A
750
751 // If AIB_apsUseExtendedPANID is set to a non-zero value by commissioning
752 // The device shall do rejoin the network. Otherwise, do normal join
753 if ( nwk_ExtPANIDValid( AIB_apsUseExtendedPANID ) == false )
\ ??ZDAppDetermineDeviceType_4:
\ 000034 ; Setup parameters for call to function nwk_ExtPANIDValid
\ 000034 7A.. MOV R2,#AIB_apsUseExtendedPANID & 0xff
\ 000036 7B.. MOV R3,#(AIB_apsUseExtendedPANID >> 8) & 0xff
\ 000038 12.... LCALL `??nwk_ExtPANIDValid::?relay`; Banked call to: nwk_ExtPANIDValid
\ 00003B E9 MOV A,R1
\ 00003C 90.... MOV DPTR,#devStartMode
\ 00003F 7003 JNZ ??ZDAppDetermineDeviceType_5
754 {
755 devStartMode = MODE_JOIN; // Assume joining
\ 000041 E4 CLR A
\ 000042 8002 SJMP ??ZDAppDetermineDeviceType_1
756 }
757 else
758 {
759 devStartMode = MODE_REJOIN;
\ ??ZDAppDetermineDeviceType_5:
\ 000044 7403 MOV A,#0x3
\ ??ZDAppDetermineDeviceType_1:
\ 000046 F0 MOVX @DPTR,A
760 }
761 }
762 }
\ 000047 02.... LJMP ?Subroutine3 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine3:
\ 000000 D083 POP DPH
\ 000002 D082 POP DPL
\ 000004 02.... LJMP ?BRET
763
764 /*********************************************************************
765 * @fn ZDApp_NetworkStartEvt()
766 *
767 * @brief Process the Network Start Event
768 *
769 * @param none
770 *
771 * @return none
772 */
\ In segment BANKED_CODE, align 1, keep-with-next
773 void ZDApp_NetworkStartEvt( void )
\ ZDApp_NetworkStartEvt:
774 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
775 if ( nwkStatus == ZSuccess )
\ 000004 90.... MOV DPTR,#nwkStatus
\ 000007 E0 MOVX A,@DPTR
\ 000008 7012 JNZ ??ZDApp_NetworkStartEvt_0
776 {
777 // Successfully started a ZigBee network
778 if ( devState == DEV_COORD_STARTING )
\ 00000A 90.... MOV DPTR,#devState
\ 00000D E0 MOVX A,@DPTR
\ 00000E 6408 XRL A,#0x8
\ 000010 7003 JNZ ??ZDApp_NetworkStartEvt_1
779 {
780 devState = DEV_ZB_COORD;
\ 000012 7409 MOV A,#0x9
\ 000014 F0 MOVX @DPTR,A
781 }
782
783 osal_pwrmgr_device( PWRMGR_ALWAYS_ON );
\ ??ZDApp_NetworkStartEvt_1:
\ 000015 ; Setup parameters for call to function osal_pwrmgr_device
\ 000015 7900 MOV R1,#0x0
\ 000017 12.... LCALL `??osal_pwrmgr_device::?relay`; Banked call to: osal_pwrmgr_device
784 osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );
\ 00001A ; Setup parameters for call to function osal_set_event
\ 00001A 802E SJMP ??ZDApp_NetworkStartEvt_2
785 }
786 else
787 {
788 // Try again with a higher energy threshold !!
789 if ( ( NLME_GetEnergyThreshold() + ENERGY_SCAN_INCREMENT ) < 0xff )
\ ??ZDApp_NetworkStartEvt_0:
\ 00001C ; Setup parameters for call to function NLME_GetEnergyThreshold
\ 00001C 12.... LCALL `??NLME_GetEnergyThreshold::?relay`; Banked call to: NLME_GetEnergyThreshold
\ 00001F E9 MOV A,R1
\ 000020 7900 MOV R1,#0x0
\ 000022 2410 ADD A,#0x10
\ 000024 5001 JNC ??ZDApp_NetworkStartEvt_3
\ 000026 09 INC R1
\ ??ZDApp_NetworkStartEvt_3:
\ 000027 C3 CLR C
\ 000028 94FF SUBB A,#-0x1
\ 00002A E9 MOV A,R1
\ 00002B 9400 SUBB A,#0x0
\ 00002D A2D2 MOV C,0xD0 /* PSW */.2
\ 00002F 65D0 XRL A,PSW
\ 000031 33 RLC A
\ 000032 5010 JNC ??ZDApp_NetworkStartEvt_4
790 {
791 NLME_SetEnergyThreshold( (uint8)(NLME_GetEnergyThreshold() + ENERGY_SCAN_INCREMENT) );
\ 000034 ; Setup parameters for call to function NLME_GetEnergyThreshold
\ 000034 12.... LCALL `??NLME_GetEnergyThreshold::?relay`; Banked call to: NLME_GetEnergyThreshold
\ 000037 E9 MOV A,R1
\ 000038 F8 MOV R0,A
\ 000039 ; Setup parameters for call to function NLME_SetEnergyThreshold
\ 000039 7410 MOV A,#0x10
\ 00003B 29 ADD A,R1
\ 00003C F9 MOV R1,A
\ 00003D 12.... LCALL `??NLME_SetEnergyThreshold::?relay`; Banked call to: NLME_SetEnergyThreshold
792 osal_set_event( ZDAppTaskID, ZDO_NETWORK_INIT );
\ 000040 ; Setup parameters for call to function osal_set_event
\ 000040 7A01 MOV R2,#0x1
\ 000042 8008 SJMP ??ZDApp_NetworkStartEvt_5
793 }
794 else
795 {
796 // Failed to start network. Enter a dormant state (until user intervenes)
797 devState = DEV_INIT;
\ ??ZDApp_NetworkStartEvt_4:
\ 000044 90.... MOV DPTR,#devState
\ 000047 7401 MOV A,#0x1
\ 000049 F0 MOVX @DPTR,A
798 osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );
\ 00004A ; Setup parameters for call to function osal_set_event
\ ??ZDApp_NetworkStartEvt_2:
\ 00004A 7A10 MOV R2,#0x10
799 }
800 }
\ ??ZDApp_NetworkStartEvt_5:
\ 00004C 12.... LCALL ??Subroutine41_0 & 0xFFFF
801 }
\ ??CrossCallReturnLabel_53:
\ 00004F 02.... LJMP ?Subroutine3 & 0xFFFF
802
803 /*********************************************************************
804 * @fn ZDApp_DeviceAuthEvt()
805 *
806 * @brief Process the Device Authentic Event
807 *
808 * @param none
809 *
810 * @return none
811 */
\ In segment BANKED_CODE, align 1, keep-with-next
812 void ZDApp_DeviceAuthEvt( void )
\ ZDApp_DeviceAuthEvt:
813 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
814 // received authentication from trust center
815 if ( devState == DEV_END_DEVICE_UNAUTH )
\ 000004 90.... MOV DPTR,#devState
\ 000007 E0 MOVX A,@DPTR
\ 000008 6405 XRL A,#0x5
\ 00000A 701F JNZ ??ZDApp_DeviceAuthEvt_0
816 {
817 // Stop the reset timer so it doesn't reset
818 ZDApp_ResetTimerCancel();
\ 00000C ; Setup parameters for call to function ZDApp_ResetTimerCancel
\ 00000C 12.... LCALL `??ZDApp_ResetTimerCancel::?relay`; Banked call to: ZDApp_ResetTimerCancel
819
820 devState = DEV_END_DEVICE;
\ 00000F 12.... LCALL ?Subroutine9 & 0xFFFF
821 osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );
822
823 // Set the Power Manager Device
824 #if defined ( POWER_SAVING )
825 osal_pwrmgr_device( PWRMGR_BATTERY );
826 #endif
827
828 if ( ZSTACK_ROUTER_BUILD )
829 {
830 if ( ZDO_Config_Node_Descriptor.LogicalType != NODETYPE_DEVICE )
831 {
832 // NOTE: first two parameters are not used, see NLMEDE.h for details
833 NLME_StartRouterRequest( 0, 0, false );
834 }
835 }
836
837 // Notify to save info into NV
838 ZDApp_NVUpdate();
839
840 // Save off the security
841 ZDApp_SaveNwkKey();
\ ??CrossCallReturnLabel_56:
\ 000012 ; Setup parameters for call to function ZDApp_SaveNwkKey
\ 000012 12.... LCALL `??ZDApp_SaveNwkKey::?relay`; Banked call to: ZDApp_SaveNwkKey
842
843 ZDApp_AnnounceNewAddress();
\ 000015 ; Setup parameters for call to function ZDApp_AnnounceNewAddress
\ 000015 12.... LCALL `??ZDApp_AnnounceNewAddress::?relay`; Banked call to: ZDApp_AnnounceNewAddress
844
845 if ( (ZDO_Config_Node_Descriptor.CapabilityFlags & CAPINFO_RCVR_ON_IDLE) == 0 )
\ 000018 90.... MOV DPTR,#ZDO_Config_Node_Descriptor + 2
\ 00001B E0 MOVX A,@DPTR
\ 00001C A2E3 MOV C,0xE0 /* A */.3
\ 00001E 400B JC ??ZDApp_DeviceAuthEvt_0
846 {
847 NLME_SetPollRate( ZDApp_SavedPollRate );
\ 000020 ; Setup parameters for call to function NLME_SetPollRate
\ 000020 90.... MOV DPTR,#ZDApp_SavedPollRate
\ 000023 E0 MOVX A,@DPTR
\ 000024 FA MOV R2,A
\ 000025 A3 INC DPTR
\ 000026 E0 MOVX A,@DPTR
\ 000027 FB MOV R3,A
\ 000028 12.... LCALL `??NLME_SetPollRate::?relay`; Banked call to: NLME_SetPollRate
848 }
849 }
850 else
851 {
852 ZDApp_NVUpdate();
853 }
854 }
\ ??ZDApp_DeviceAuthEvt_0:
\ 00002B 02.... LJMP ?Subroutine3 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine9:
\ 000000 90.... MOV DPTR,#devState
\ 000003 7406 MOV A,#0x6
\ 000005 REQUIRE ??Subroutine42_0
\ 000005 ; // Fall through to label ??Subroutine42_0
855
856 /*********************************************************************
857 * @fn ZDApp_SaveNetworkStateEvt()
858 *
859 * @brief Process the Save the Network State Event
860 *
861 * @param none
862 *
863 * @return none
864 */
\ In segment BANKED_CODE, align 1, keep-with-next
865 void ZDApp_SaveNetworkStateEvt( void )
\ ZDApp_SaveNetworkStateEvt:
866 {
\ 000000 ; Saved register size: 0
\ 000000 ; Auto size: 0
867 #if defined ( NV_RESTORE )
868 #if defined ( NV_TURN_OFF_RADIO )
869 // Turn off the radio's receiver during an NV update
870 uint8 RxOnIdle;
871 uint8 x = false;
872 ZMacGetReq( ZMacRxOnIdle, &RxOnIdle );
873 ZMacSetReq( ZMacRxOnIdle, &x );
874 #endif
875
876 // Update the Network State in NV
877 NLME_UpdateNV( NWK_NV_NIB_ENABLE |
878 NWK_NV_DEVICELIST_ENABLE |
879 NWK_NV_BINDING_ENABLE |
880 NWK_NV_ADDRMGR_ENABLE );
881
882 // Reset the NV startup option to resume from NV by
883 // clearing the "New" join option.
884 zgWriteStartupOptions( FALSE, ZCD_STARTOPT_DEFAULT_NETWORK_STATE );
885
886 #if defined ( NV_TURN_OFF_RADIO )
887 ZMacSetReq( ZMacRxOnIdle, &RxOnIdle );
888 #endif
889 #endif // NV_RESTORE
890 }
\ 000000 02.... LJMP ?BRET
891
892 /*********************************************************************
893 * @fn ZDApp_RestoreNetworkState()
894 *
895 * @brief This function will restore the network state of the
896 * device if the network state is stored in NV.
897 *
898 * @param none
899 *
900 * @return
901 * ZDO_INITDEV_RESTORED_NETWORK_STATE - The device's network state was
902 * restored.
903 * ZDO_INITDEV_NEW_NETWORK_STATE - The network state was not used.
904 * This could mean that zgStartupOption said to not restore, or
905 * it could mean that there was no network state to restore.
906 *
907 */
\ In segment BANKED_CODE, align 1, keep-with-next
908 uint8 ZDApp_RestoreNetworkState( void )
\ ZDApp_RestoreNetworkState:
909 {
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 0
910 uint8 nvStat;
911
912 // Initialize NWK NV items
913 nvStat = NLME_InitNV();
\ 000005 ; Setup parameters for call to function NLME_InitNV
\ 000005 12.... LCALL `??NLME_InitNV::?relay`; Banked call to: NLME_InitNV
\ 000008 E9 MOV A,R1
\ 000009 FE MOV R6,A
914
915 if ( nvStat != NV_OPER_FAILED )
\ 00000A 740A MOV A,#0xa
\ 00000C 6E XRL A,R6
\ 00000D 602A JZ ??ZDApp_RestoreNetworkState_0
916 {
917 if ( NLME_RestoreFromNV() )
\ 00000F ; Setup parameters for call to function NLME_RestoreFromNV
\ 00000F 12.... LCALL `??NLME_RestoreFromNV::?relay`; Banked call to: NLME_RestoreFromNV
\ 000012 E9 MOV A,R1
\ 000013 6024 JZ ??ZDApp_RestoreNetworkState_0
918 {
919 // Are we a coordinator
920 ZDAppNwkAddr.addr.shortAddr = NLME_GetShortAddr();
\ 000015 ; Setup parameters for call to function NLME_GetShortAddr
\ 000015 12.... LCALL `??NLME_GetShortAddr::?relay`; Banked call to: NLME_GetShortAddr
\ 000018 90.... MOV DPTR,#ZDAppNwkAddr
\ 00001B 12.... LCALL ??Subroutine55_0 & 0xFFFF
921 if ( ZDAppNwkAddr.addr.shortAddr == 0 )
\ ??CrossCallReturnLabel_95:
\ 00001E F9 MOV R1,A
\ 00001F EA MOV A,R2
\ 000020 49 ORL A,R1
\ 000021 7007 JNZ ??ZDApp_RestoreNetworkState_1
922 ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_COORDINATOR;
\ 000023 90.... MOV DPTR,#ZDO_Config_Node_Descriptor
\ 000026 E0 MOVX A,@DPTR
\ 000027 54F8 ANL A,#0xf8
\ 000029 F0 MOVX @DPTR,A
923 devStartMode = MODE_RESUME;
\ ??ZDApp_RestoreNetworkState_1:
\ 00002A 90.... MOV DPTR,#devStartMode
\ 00002D 7401 MOV A,#0x1
\ 00002F 12.... LCALL ?Subroutine10 & 0xFFFF
924 osal_cpyExtAddr( ZDO_UseExtendedPANID, _NIB.extendedPANID );
925 }
926 else
927 nvStat = NV_ITEM_UNINIT;
928
929 if ( ZG_SECURE_ENABLED )
930 {
931 nwkFrameCounterChanges = 0;
932
933 if ( ZG_BUILD_COORDINATOR_TYPE && ZG_DEVICE_COORDINATOR_TYPE )
934 {
935 ZDApp_RestoreNwkKey();
936 }
937 }
938
939 // The default for RxOnWhenIdle is true for Routers and false for end devices
940 // [setup in the NLME_RestoreFromNV()]. Change it here if you want something
941 // other than default.
942 }
943
944 if ( nvStat == ZSUCCESS )
\ ??CrossCallReturnLabel_0:
\ 000032 EE MOV A,R6
\ 000033 7004 JNZ ??ZDApp_RestoreNetworkState_0
945 return ( ZDO_INITDEV_RESTORED_NETWORK_STATE );
\ 000035 7900 MOV R1,#0x0
\ 000037 8002 SJMP ??ZDApp_RestoreNetworkState_2
946 else
947 return ( ZDO_INITDEV_NEW_NETWORK_STATE );
\ ??ZDApp_RestoreNetworkState_0:
\ 000039 7901 MOV R1,#0x1
\ ??ZDApp_RestoreNetworkState_2:
\ 00003B 02.... LJMP ??Subroutine48_0 & 0xFFFF
948 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine10:
\ 000000 F0 MOVX @DPTR,A
\ 000001 ; Setup parameters for call to function sAddrExtCpy
\ 000001 ; Setup parameters for call to function sAddrExtCpy
\ 000001 7C.. MOV R4,#(_NIB + 53) & 0xff
\ 000003 7D.. MOV R5,#((_NIB + 53) >> 8) & 0xff
\ 000005 7A.. MOV R2,#ZDO_UseExtendedPANID & 0xff
\ 000007 7B.. MOV R3,#(ZDO_UseExtendedPANID >> 8) & 0xff
\ 000009 12.... LCALL `??sAddrExtCpy::?relay`; Banked call to: sAddrExtCpy
\ 00000C 22 RET
949
950 /*********************************************************************
951 * @fn ZDApp_InitUserDesc()
952 *
953 * @brief Initialize the User Descriptor, the descriptor is read from NV
954 * when needed. If you want to initialize the User descriptor to
955 * something other than all zero, do it here.
956 *
957 * @param none
958 *
959 * @return none
960 */
\ In segment BANKED_CODE, align 1, keep-with-next
961 void ZDApp_InitUserDesc( void )
\ ZDApp_InitUserDesc:
962 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 74F6 MOV A,#-0xa
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 10
\ 000005 ; Auto size: 17
\ 000005 74EF MOV A,#-0x11
\ 000007 12.... LCALL ?ALLOC_XSTACK8
963 UserDescriptorFormat_t ZDO_DefaultUserDescriptor;
964
965 // Initialize the User Descriptor, the descriptor is read from NV
966 // when needed. If you want to initialize the User descriptor to something
967 // other than all zero, do it here.
968 osal_memset( &ZDO_DefaultUserDescriptor, 0, sizeof( UserDescriptorFormat_t ) );
\ 00000A ; Setup parameters for call to function osal_memset
\ 00000A 7C11 MOV R4,#0x11
\ 00000C 12.... LCALL ?Subroutine27 & 0xFFFF
969 if ( ZSUCCESS == osal_nv_item_init( ZCD_NV_USERDESC,
970 sizeof(UserDescriptorFormat_t), (void*)&ZDO_DefaultUserDescriptor ) )
\ ??CrossCallReturnLabel_25:
\ 00000F 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000012 7C11 MOV R4,#0x11
\ 000014 7D00 MOV R5,#0x0
\ 000016 7A81 MOV R2,#-0x7f
\ 000018 7B00 MOV R3,#0x0
\ 00001A 12.... LCALL `??osal_nv_item_init::?relay`; Banked call to: osal_nv_item_init
\ 00001D 7402 MOV A,#0x2
\ 00001F 12.... LCALL ?DEALLOC_XSTACK8
\ 000022 E9 MOV A,R1
\ 000023 702F JNZ ??ZDApp_InitUserDesc_0
971 {
972 if ( ZSUCCESS == osal_nv_read( ZCD_NV_USERDESC, 0,
973 sizeof(UserDescriptorFormat_t), (void*)&ZDO_DefaultUserDescriptor ) )
\ 000025 ; Setup parameters for call to function osal_nv_read
\ 000025 78.. MOV R0,#?V0
\ 000027 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00002A 75..11 MOV ?V0,#0x11
\ 00002D 75..00 MOV ?V1,#0x0
\ 000030 78.. MOV R0,#?V0
\ 000032 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000035 7C00 MOV R4,#0x0
\ 000037 7D00 MOV R5,#0x0
\ 000039 7A81 MOV R2,#-0x7f
\ 00003B 12.... LCALL ?Subroutine29 & 0xFFFF
\ ??CrossCallReturnLabel_29:
\ 00003E 12.... LCALL ?DEALLOC_XSTACK8
\ 000041 E9 MOV A,R1
\ 000042 7010 JNZ ??ZDApp_InitUserDesc_0
974 {
975 if ( ZDO_DefaultUserDescriptor.len != 0 )
\ 000044 85..82 MOV DPL,?XSP + 0
\ 000047 85..83 MOV DPH,?XSP + 1
\ 00004A E0 MOVX A,@DPTR
\ 00004B 6007 JZ ??ZDApp_InitUserDesc_0
976 {
977 ZDO_Config_Node_Descriptor.UserDescAvail = TRUE;
\ 00004D 90.... MOV DPTR,#ZDO_Config_Node_Descriptor
\ 000050 E0 MOVX A,@DPTR
\ 000051 D2E4 SETB 0xE0 /* A */.4
\ 000053 F0 MOVX @DPTR,A
978 }
979 }
980 }
981 }
\ ??ZDApp_InitUserDesc_0:
\ 000054 7411 MOV A,#0x11
\ 000056 02.... LJMP ??Subroutine45_0 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine27:
\ 000000 7D00 MOV R5,#0x0
\ 000002 7900 MOV R1,#0x0
\ 000004 AA.. MOV R2,?XSP + 0
\ 000006 AB.. MOV R3,?XSP + 1
\ 000008 12.... LCALL `??osal_memset::?relay`; Banked call to: osal_memset
\ 00000B ; Setup parameters for call to function osal_nv_item_init
\ 00000B ; Setup parameters for call to function osal_nv_write
\ 00000B A8.. MOV R0,?XSP + 0
\ 00000D A9.. MOV R1,?XSP + 1
\ 00000F 88.. MOV ?V0,R0
\ 000011 89.. MOV ?V1,R1
\ 000013 78.. MOV R0,#?V0
\ 000015 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine29:
\ 000000 7B00 MOV R3,#0x0
\ 000002 12.... LCALL `??osal_nv_read::?relay`; Banked call to: osal_nv_read
\ 000005 7404 MOV A,#0x4
\ 000007 22 RET
982
983 /*********************************************************************
984 * @fn ZDAppCheckForHoldKey()
985 *
986 * @brief Check for key to set the device into Hold Auto Start
987 *
988 * @param none
989 *
990 * @return none
991 */
\ In segment BANKED_CODE, align 1, keep-with-next
992 void ZDAppCheckForHoldKey( void )
\ ZDAppCheckForHoldKey:
993 {
\ 000000 ; Saved register size: 0
\ 000000 ; Auto size: 0
994 #if (defined HAL_KEY) && (HAL_KEY == TRUE)
995 // Get Keypad directly to see if a HOLD_START is needed.
996 // Hold down the SW_BYPASS_START key (see OnBoard.h)
997 // while booting to avoid starting up the device.
998 if ( HalKeyRead () == SW_BYPASS_START)
999 {
1000 // Change the device state to HOLD on start up
1001 devState = DEV_HOLD;
1002 }
1003 #endif // HAL_KEY
1004 }
\ 000000 02.... LJMP ?BRET
1005
1006 /*********************************************************************
1007 * @fn ZDApp_ProcessOSALMsg()
1008 *
1009 * @brief Process the incoming task message.
1010 *
1011 * @param msgPtr - message to process
1012 *
1013 * @return none
1014 */
\ In segment BANKED_CODE, align 1, keep-with-next
1015 void ZDApp_ProcessOSALMsg( osal_event_hdr_t *msgPtr )
\ ZDApp_ProcessOSALMsg:
1016 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 74F6 MOV A,#-0xa
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 10
\ 000005 ; Auto size: 1
\ 000005 74FF MOV A,#-0x1
\ 000007 12.... LCALL ?ALLOC_XSTACK8
1017 // Data Confirmation message fields
1018 uint8 sentEP; // This should always be 0
1019 uint8 sentStatus;
1020 afDataConfirm_t *afDataConfirm;
1021 uint8 tmp;
1022
1023 switch ( msgPtr->event )
\ 00000A 8A82 MOV DPL,R2
\ 00000C 8B83 MOV DPH,R3
\ 00000E E0 MOVX A,@DPTR
\ 00000F 14 DEC A
\ 000010 6023 JZ ??ZDApp_ProcessOSALMsg_0
\ 000012 14 DEC A
\ 000013 7003 JNZ $+5
\ 000015 02.... LJMP ??ZDApp_ProcessOSALMsg_1 & 0xFFFF
\ 000018 14 DEC A
\ 000019 7003 JNZ $+5
\ 00001B 02.... LJMP ??ZDApp_ProcessOSALMsg_2 & 0xFFFF
\ 00001E 24E9 ADD A,#-0x17
\ 000020 6007 JZ ??ZDApp_ProcessOSALMsg_3
\ 000022 2447 ADD A,#0x47
\ 000024 6009 JZ ??ZDApp_ProcessOSALMsg_4
\ 000026 02.... LJMP ??ZDApp_ProcessOSALMsg_5 & 0xFFFF
1024 {
1025 // Incoming ZDO Message
1026 case AF_INCOMING_MSG_CMD:
1027 ZDP_IncomingData( (afIncomingMSGPacket_t *)msgPtr );
\ ??ZDApp_ProcessOSALMsg_3:
\ 000029 ; Setup parameters for call to function ZDP_IncomingData
\ 000029 12.... LCALL `??ZDP_IncomingData::?relay`; Banked call to: ZDP_IncomingData
1028 break;
\ 00002C 02.... LJMP ??ZDApp_ProcessOSALMsg_5 & 0xFFFF
1029
1030 case ZDO_CB_MSG:
1031 ZDApp_ProcessMsgCBs( (zdoIncomingMsg_t *)msgPtr );
\ ??ZDApp_ProcessOSALMsg_4:
\ 00002F ; Setup parameters for call to function ZDApp_ProcessMsgCBs
\ 00002F 12.... LCALL `??ZDApp_ProcessMsgCBs::?relay`; Banked call to: ZDApp_ProcessMsgCBs
1032 break;
\ 000032 02.... LJMP ??ZDApp_ProcessOSALMsg_5 & 0xFFFF
1033
1034 case AF_DATA_CONFIRM_CMD:
1035 // This message is received as a confirmation of a data packet sent.
1036 // The status is of ZStatus_t type [defined in NLMEDE.h]
1037 // The message fields are defined in AF.h
1038 afDataConfirm = (afDataConfirm_t *)msgPtr;
1039 sentEP = afDataConfirm->endpoint;
1040 sentStatus = afDataConfirm->hdr.status;
1041
1042 // Action taken when confirmation is received.
1043 #if defined ( ZIGBEE_FREQ_AGILITY )
1044 if ( pZDNwkMgr_ProcessDataConfirm )
1045 pZDNwkMgr_ProcessDataConfirm( afDataConfirm );
1046 #endif
1047 (void)sentEP;
1048 (void)sentStatus;
1049 break;
1050
1051 case ZDO_NWK_DISC_CNF:
1052 if (devState != DEV_NWK_DISC)
\ ??ZDApp_ProcessOSALMsg_0:
\ 000035 90.... MOV DPTR,#devState
\ 000038 E0 MOVX A,@DPTR
\ 000039 6402 XRL A,#0x2
\ 00003B 6003 JZ $+5
\ 00003D 02.... LJMP ??ZDApp_ProcessOSALMsg_5 & 0xFFFF
1053 break;
1054
1055 if ( ZG_BUILD_JOINING_TYPE && ZG_DEVICE_JOINING_TYPE )
\ 000040 90.... MOV DPTR,#zgDeviceLogicalType
\ 000043 E0 MOVX A,@DPTR
\ 000044 6401 XRL A,#0x1
\ 000046 6008 JZ ??ZDApp_ProcessOSALMsg_6
\ 000048 E0 MOVX A,@DPTR
\ 000049 6402 XRL A,#0x2
\ 00004B 6003 JZ $+5
\ 00004D 02.... LJMP ??ZDApp_ProcessOSALMsg_5 & 0xFFFF
1056 {
1057 // Process the network discovery scan results and choose a parent
1058 // device to join/rejoin itself
1059 networkDesc_t *pChosenNwk;
1060 if ( ( (pChosenNwk = ZDApp_NwkDescListProcessing()) != NULL ) && (zdoDiscCounter > NUM_DISC_ATTEMPTS) )
\ ??ZDApp_ProcessOSALMsg_6:
\ 000050 ; Setup parameters for call to function ZDApp_NwkDescListProcessing
\ 000050 12.... LCALL `??ZDApp_NwkDescListProcessing::?relay`; Banked call to: ZDApp_NwkDescListProcessing
\ 000053 8A.. MOV ?V0,R2
\ 000055 8B.. MOV ?V1,R3
\ 000057 AE.. MOV R6,?V0
\ 000059 AF.. MOV R7,?V1
\ 00005B EA MOV A,R2
\ 00005C 4F ORL A,R7
\ 00005D 7003 JNZ $+5
\ 00005F 02.... LJMP ??ZDApp_ProcessOSALMsg_7 & 0xFFFF
\ 000062 90.... MOV DPTR,#zdoDiscCounter
\ 000065 E0 MOVX A,@DPTR
\ 000066 C3 CLR C
\ 000067 9403 SUBB A,#0x3
\ 000069 5003 JNC $+5
\ 00006B 02.... LJMP ??ZDApp_ProcessOSALMsg_7 & 0xFFFF
1061 {
1062 if ( devStartMode == MODE_JOIN )
\ 00006E 90.... MOV DPTR,#devStartMode
\ 000071 E0 MOVX A,@DPTR
\ 000072 7061 JNZ ??ZDApp_ProcessOSALMsg_8
1063 {
1064 devState = DEV_NWK_JOINING;
\ 000074 90.... MOV DPTR,#devState
\ 000077 7403 MOV A,#0x3
\ 000079 F0 MOVX @DPTR,A
1065
1066 ZDApp_NodeProfileSync( pChosenNwk->stackProfile);
\ 00007A ; Setup parameters for call to function ZDApp_NodeProfileSync
\ 00007A 8A82 MOV DPL,R2
\ 00007C 8B83 MOV DPH,R3
\ 00007E A3 INC DPTR
\ 00007F A3 INC DPTR
\ 000080 A3 INC DPTR
\ 000081 A3 INC DPTR
\ 000082 A3 INC DPTR
\ 000083 A3 INC DPTR
\ 000084 E0 MOVX A,@DPTR
\ 000085 F9 MOV R1,A
\ 000086 12.... LCALL `??ZDApp_NodeProfileSync::?relay`; Banked call to: ZDApp_NodeProfileSync
1067
1068 if ( NLME_JoinRequest( pChosenNwk->extendedPANID, pChosenNwk->panId,
1069 pChosenNwk->logicalChannel,
1070 ZDO_Config_Node_Descriptor.CapabilityFlags,
1071 pChosenNwk->chosenRouter, pChosenNwk->chosenRouterDepth ) != ZSuccess )
\ 000089 ; Setup parameters for call to function NLME_JoinRequest
\ 000089 8E82 MOV DPL,R6
\ 00008B 8F83 MOV DPH,R7
\ 00008D A3 INC DPTR
\ 00008E A3 INC DPTR
\ 00008F A3 INC DPTR
\ 000090 A3 INC DPTR
\ 000091 A3 INC DPTR
\ 000092 A3 INC DPTR
\ 000093 A3 INC DPTR
\ 000094 A3 INC DPTR
\ 000095 A3 INC DPTR
\ 000096 A3 INC DPTR
\ 000097 E0 MOVX A,@DPTR
\ 000098 F5.. MOV ?V0,A
\ 00009A 78.. MOV R0,#?V0
\ 00009C 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 00009F 8E82 MOV DPL,R6
\ 0000A1 8F83 MOV DPH,R7
\ 0000A3 A3 INC DPTR
\ 0000A4 A3 INC DPTR
\ 0000A5 A3 INC DPTR
\ 0000A6 A3 INC DPTR
\ 0000A7 A3 INC DPTR
\ 0000A8 A3 INC DPTR
\ 0000A9 A3 INC DPTR
\ 0000AA 12.... LCALL ?PUSH_XSTACK8_X_TWO
\ 0000AD 90.... MOV DPTR,#ZDO_Config_Node_Descriptor + 2
\ 0000B0 E0 MOVX A,@DPTR
\ 0000B1 F5.. MOV ?V0,A
\ 0000B3 78.. MOV R0,#?V0
\ 0000B5 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 0000B8 8E82 MOV DPL,R6
\ 0000BA 8F83 MOV DPH,R7
\ 0000BC A3 INC DPTR
\ 0000BD A3 INC DPTR
\ 0000BE E0 MOVX A,@DPTR
\ 0000BF F9 MOV R1,A
\ 0000C0 8E82 MOV DPL,R6
\ 0000C2 8F83 MOV DPH,R7
\ 0000C4 E0 MOVX A,@DPTR
\ 0000C5 FC MOV R4,A
\ 0000C6 A3 INC DPTR
\ 0000C7 E0 MOVX A,@DPTR
\ 0000C8 12.... LCALL ?Subroutine30 & 0xFFFF
1072 {
1073 ZDApp_NetworkInit( (uint16)(NWK_START_DELAY
1074 + ((uint16)(osal_rand()& EXTENDED_JOINING_RANDOM_MASK))) );
1075 }
1076 } // if ( devStartMode == MODE_JOIN )
\ ??CrossCallReturnLabel_60:
\ 0000CB 12.... LCALL `??NLME_JoinRequest::?relay`; Banked call to: NLME_JoinRequest
\ 0000CE 7404 MOV A,#0x4
\ 0000D0 12.... LCALL ?DEALLOC_XSTACK8
\ 0000D3 806B SJMP ??ZDApp_ProcessOSALMsg_9
1077 else if ( devStartMode == MODE_REJOIN )
\ ??ZDApp_ProcessOSALMsg_8:
\ 0000D5 6403 XRL A,#0x3
\ 0000D7 706D JNZ ??CrossCallReturnLabel_19
1078 {
1079 devState = DEV_NWK_REJOIN;
\ 0000D9 90.... MOV DPTR,#devState
\ 0000DC 7404 MOV A,#0x4
\ 0000DE F0 MOVX @DPTR,A
1080
1081 // Before trying to do rejoin, check if the device has a valid short address
1082 // If not, generate a random short address for itself
1083 if ( _NIB.nwkDevAddress == INVALID_NODE_ADDR )
\ 0000DF 90.... MOV DPTR,#_NIB + 20
\ 0000E2 E0 MOVX A,@DPTR
\ 0000E3 64FE XRL A,#0xfe
\ 0000E5 7003 JNZ ??ZDApp_ProcessOSALMsg_10
\ 0000E7 A3 INC DPTR
\ 0000E8 E0 MOVX A,@DPTR
\ 0000E9 F4 CPL A
\ ??ZDApp_ProcessOSALMsg_10:
\ 0000EA 7012 JNZ ??ZDApp_ProcessOSALMsg_11
1084 {
1085 _NIB.nwkDevAddress = osal_rand();
\ 0000EC ; Setup parameters for call to function osal_rand
\ 0000EC 12.... LCALL `??osal_rand::?relay`; Banked call to: osal_rand
\ 0000EF 90.... MOV DPTR,#_NIB + 20
\ 0000F2 12.... LCALL ??Subroutine55_0 & 0xFFFF
1086 ZMacSetReq( ZMacShortAddress, (byte*)&_NIB.nwkDevAddress );
\ ??CrossCallReturnLabel_96:
\ 0000F5 ; Setup parameters for call to function ZMacSetReq
\ 0000F5 7A.. MOV R2,#(_NIB + 20) & 0xff
\ 0000F7 7B.. MOV R3,#((_NIB + 20) >> 8) & 0xff
\ 0000F9 7953 MOV R1,#0x53
\ 0000FB 12.... LCALL `??ZMacSetReq::?relay`; Banked call to: ZMacSetReq
1087 }
1088
1089 if ( ZG_SECURE_ENABLED )
1090 {
1091 ZDApp_RestoreNwkKey();
1092 }
1093
1094 // Check if the device has a valid PanID, if not, set it to the discovered Pan
1095 if ( _NIB.nwkPanId == INVALID_PAN_ID )
\ ??ZDApp_ProcessOSALMsg_11:
\ 0000FE 90.... MOV DPTR,#_NIB + 33
\ 000101 E0 MOVX A,@DPTR
\ 000102 64FE XRL A,#0xfe
\ 000104 7003 JNZ ??ZDApp_ProcessOSALMsg_12
\ 000106 A3 INC DPTR
\ 000107 E0 MOVX A,@DPTR
\ 000108 F4 CPL A
\ ??ZDApp_ProcessOSALMsg_12:
\ 000109 7014 JNZ ??ZDApp_ProcessOSALMsg_13
1096 {
1097 _NIB.nwkPanId = pChosenNwk->panId;
\ 00010B 12.... LCALL ?Subroutine16 & 0xFFFF
\ ??CrossCallReturnLabel_73:
\ 00010E 90.... MOV DPTR,#_NIB + 33
\ 000111 E8 MOV A,R0
\ 000112 F0 MOVX @DPTR,A
\ 000113 A3 INC DPTR
\ 000114 E9 MOV A,R1
\ 000115 F0 MOVX @DPTR,A
1098 ZMacSetReq( ZMacPanId, (byte*)&(_NIB.nwkPanId) );
\ 000116 ; Setup parameters for call to function ZMacSetReq
\ 000116 7A.. MOV R2,#(_NIB + 33) & 0xff
\ 000118 7B.. MOV R3,#((_NIB + 33) >> 8) & 0xff
\ 00011A 7950 MOV R1,#0x50
\ 00011C 12.... LCALL `??ZMacSetReq::?relay`; Banked call to: ZMacSetReq
1099 }
1100
1101 tmp = true;
\ ??ZDApp_ProcessOSALMsg_13:
\ 00011F 85..82 MOV DPL,?XSP + 0
\ 000122 85..83 MOV DPH,?XSP + 1
\ 000125 7401 MOV A,#0x1
\ 000127 F0 MOVX @DPTR,A
1102 ZMacSetReq( ZMacRxOnIdle, &tmp ); // Set receiver always on during rejoin
\ 000128 ; Setup parameters for call to function ZMacSetReq
\ 000128 AA.. MOV R2,?XSP + 0
\ 00012A AB.. MOV R3,?XSP + 1
\ 00012C 7952 MOV R1,#0x52
\ 00012E 12.... LCALL `??ZMacSetReq::?relay`; Banked call to: ZMacSetReq
1103 if ( NLME_ReJoinRequest( ZDO_UseExtendedPANID, pChosenNwk->logicalChannel) != ZSuccess )
\ 000131 ; Setup parameters for call to function NLME_ReJoinRequest
\ 000131 8E82 MOV DPL,R6
\ 000133 8F83 MOV DPH,R7
\ 000135 A3 INC DPTR
\ 000136 A3 INC DPTR
\ 000137 E0 MOVX A,@DPTR
\ 000138 F9 MOV R1,A
\ 000139 7A.. MOV R2,#ZDO_UseExtendedPANID & 0xff
\ 00013B 7B.. MOV R3,#(ZDO_UseExtendedPANID >> 8) & 0xff
\ 00013D 12.... LCALL `??NLME_ReJoinRequest::?relay`; Banked call to: NLME_ReJoinRequest
\ ??ZDApp_ProcessOSALMsg_9:
\ 000140 E9 MOV A,R1
\ 000141 6003 JZ ??CrossCallReturnLabel_19
1104 {
1105 ZDApp_NetworkInit( (uint16)(NWK_START_DELAY
1106 + ((uint16)(osal_rand()& EXTENDED_JOINING_RANDOM_MASK))) );
\ 000143 ; Setup parameters for call to function osal_rand
\ 000143 12.... LCALL ?Subroutine23 & 0xFFFF
1107 }
1108 } // else if ( devStartMode == MODE_REJOIN )
1109
1110 if ( ZDO_Config_Node_Descriptor.CapabilityFlags & CAPINFO_RCVR_ON_IDLE )
\ ??CrossCallReturnLabel_19:
\ 000146 90.... MOV DPTR,#ZDO_Config_Node_Descriptor + 2
\ 000149 E0 MOVX A,@DPTR
\ 00014A A2E3 MOV C,0xE0 /* A */.3
\ 00014C 505A JNC ??ZDApp_ProcessOSALMsg_5
1111 {
1112 // The receiver is on, turn network layer polling off.
1113 NLME_SetPollRate( 0 );
\ 00014E ; Setup parameters for call to function NLME_SetPollRate
\ 00014E 12.... LCALL ?Subroutine24 & 0xFFFF
1114 NLME_SetQueuedPollRate( 0 );
1115 NLME_SetResponseRate( 0 );
1116 }
1117 else
1118 {
1119 if ( (ZG_SECURE_ENABLED) && (devStartMode == MODE_JOIN) )
1120 {
1121 ZDApp_SavedPollRate = zgPollRate;
1122 NLME_SetPollRate( zgRejoinPollRate );
1123 }
1124 }
1125 }
\ ??CrossCallReturnLabel_21:
\ 000151 8055 SJMP ??ZDApp_ProcessOSALMsg_5
1126 else
1127 {
1128 if ( continueJoining )
\ ??ZDApp_ProcessOSALMsg_7:
\ 000153 90.... MOV DPTR,#continueJoining
\ 000156 E0 MOVX A,@DPTR
\ 000157 604F JZ ??ZDApp_ProcessOSALMsg_5
1129 {
1130 #if defined ( MANAGED_SCAN )
1131 ZDApp_NetworkInit( MANAGEDSCAN_DELAY_BETWEEN_SCANS );
1132 #else
1133 zdoDiscCounter++;
\ 000159 90.... MOV DPTR,#zdoDiscCounter
\ 00015C E0 MOVX A,@DPTR
\ 00015D 04 INC A
\ 00015E F0 MOVX @DPTR,A
1134 ZDApp_NetworkInit( (uint16)(BEACON_REQUEST_DELAY
1135 + ((uint16)(osal_rand()& BEACON_REQ_DELAY_MASK))) );
\ 00015F ; Setup parameters for call to function osal_rand
\ 00015F 12.... LCALL `??osal_rand::?relay`; Banked call to: osal_rand
\ 000162 ; Setup parameters for call to function ZDApp_NetworkInit
\ 000162 EA MOV A,R2
\ 000163 2464 ADD A,#0x64
\ 000165 FA MOV R2,A
\ 000166 E4 CLR A
\ 000167 3400 ADDC A,#0x0
\ 000169 FB MOV R3,A
\ 00016A 8039 SJMP ??ZDApp_ProcessOSALMsg_14
1136 #endif
1137 }
1138 }
1139 }
1140 break;
1141
1142 case ZDO_NWK_JOIN_IND:
1143 if ( ZG_BUILD_JOINING_TYPE && ZG_DEVICE_JOINING_TYPE )
\ ??ZDApp_ProcessOSALMsg_1:
\ 00016C 90.... MOV DPTR,#zgDeviceLogicalType
\ 00016F E0 MOVX A,@DPTR
\ 000170 6401 XRL A,#0x1
\ 000172 6005 JZ ??ZDApp_ProcessOSALMsg_15
\ 000174 E0 MOVX A,@DPTR
\ 000175 6402 XRL A,#0x2
\ 000177 702F JNZ ??ZDApp_ProcessOSALMsg_5
1144 {
1145 ZDApp_ProcessNetworkJoin();
\ ??ZDApp_ProcessOSALMsg_15:
\ 000179 ; Setup parameters for call to function ZDApp_ProcessNetworkJoin
\ 000179 12.... LCALL `??ZDApp_ProcessNetworkJoin::?relay`; Banked call to: ZDApp_ProcessNetworkJoin
\ 00017C 802A SJMP ??ZDApp_ProcessOSALMsg_5
1146 }
1147 break;
1148
1149 case ZDO_NWK_JOIN_REQ:
1150 if ( ZG_BUILD_JOINING_TYPE && ZG_DEVICE_JOINING_TYPE )
\ ??ZDApp_ProcessOSALMsg_2:
\ 00017E 90.... MOV DPTR,#zgDeviceLogicalType
\ 000181 E0 MOVX A,@DPTR
\ 000182 6401 XRL A,#0x1
\ 000184 6005 JZ ??ZDApp_ProcessOSALMsg_16
\ 000186 E0 MOVX A,@DPTR
\ 000187 6402 XRL A,#0x2
\ 000189 701D JNZ ??ZDApp_ProcessOSALMsg_5
1151 {
1152 retryCnt = 0;
\ ??ZDApp_ProcessOSALMsg_16:
\ 00018B 90.... MOV DPTR,#retryCnt
\ 00018E E4 CLR A
\ 00018F F0 MOVX @DPTR,A
1153 devStartMode = MODE_RESUME;
\ 000190 90.... MOV DPTR,#devStartMode
\ 000193 04 INC A
\ 000194 F0 MOVX @DPTR,A
1154 _tmpRejoinState = true;
\ 000195 90.... MOV DPTR,#_tmpRejoinState
\ 000198 12.... LCALL ?Subroutine10 & 0xFFFF
1155 osal_cpyExtAddr( ZDO_UseExtendedPANID, _NIB.extendedPANID );
1156 zgDefaultStartingScanDuration = BEACON_ORDER_60_MSEC;
\ ??CrossCallReturnLabel_1:
\ 00019B 90.... MOV DPTR,#zgDefaultStartingScanDuration
\ 00019E 7402 MOV A,#0x2
\ 0001A0 F0 MOVX @DPTR,A
1157 ZDApp_NetworkInit( 0 );
\ 0001A1 ; Setup parameters for call to function ZDApp_NetworkInit
\ 0001A1 7A00 MOV R2,#0x0
\ 0001A3 7B00 MOV R3,#0x0
\ ??ZDApp_ProcessOSALMsg_14:
\ 0001A5 12.... LCALL `??ZDApp_NetworkInit::?relay`; Banked call to: ZDApp_NetworkInit
1158 }
1159 break;
1160
1161 default:
1162 if ( ZG_SECURE_ENABLED )
1163 ZDApp_ProcessSecMsg( msgPtr );
1164 break;
1165 }
1166
1167 }
\ ??ZDApp_ProcessOSALMsg_5:
\ 0001A8 7401 MOV A,#0x1
\ 0001AA 02.... LJMP ??Subroutine45_0 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine30:
\ 000000 FD MOV R5,A
\ 000001 REQUIRE ??Subroutine43_0
\ 000001 ; // Fall through to label ??Subroutine43_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine43_0:
\ 000000 EE MOV A,R6
\ 000001 240B ADD A,#0xb
\ 000003 FA MOV R2,A
\ 000004 E4 CLR A
\ 000005 3F ADDC A,R7
\ 000006 FB MOV R3,A
\ 000007 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine24:
\ 000000 7A00 MOV R2,#0x0
\ 000002 7B00 MOV R3,#0x0
\ 000004 12.... LCALL `??NLME_SetPollRate::?relay`; Banked call to: NLME_SetPollRate
\ 000007 ; Setup parameters for call to function NLME_SetQueuedPollRate
\ 000007 ; Setup parameters for call to function NLME_SetQueuedPollRate
\ 000007 7A00 MOV R2,#0x0
\ 000009 7B00 MOV R3,#0x0
\ 00000B 12.... LCALL `??NLME_SetQueuedPollRate::?relay`; Banked call to: NLME_SetQueuedPollRate
\ 00000E ; Setup parameters for call to function NLME_SetResponseRate
\ 00000E ; Setup parameters for call to function NLME_SetResponseRate
\ 00000E 7A00 MOV R2,#0x0
\ 000010 7B00 MOV R3,#0x0
\ 000012 12.... LCALL `??NLME_SetResponseRate::?relay`; Banked call to: NLME_SetResponseRate
\ 000015 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine23:
\ 000000 12.... LCALL `??osal_rand::?relay`; Banked call to: osal_rand
\ 000003 ; Setup parameters for call to function ZDApp_NetworkInit
\ 000003 ; Setup parameters for call to function ZDApp_NetworkInit
\ 000003 EA MOV A,R2
\ 000004 547F ANL A,#0x7f
\ 000006 2464 ADD A,#0x64
\ 000008 FA MOV R2,A
\ 000009 7B00 MOV R3,#0x0
\ 00000B 12.... LCALL `??ZDApp_NetworkInit::?relay`; Banked call to: ZDApp_NetworkInit
\ 00000E 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine16:
\ 000000 8E82 MOV DPL,R6
\ 000002 8F83 MOV DPH,R7
\ 000004 REQUIRE ??Subroutine49_0
\ 000004 ; // Fall through to label ??Subroutine49_0
1168
1169 /*********************************************************************
1170 * @fn ZDApp_ProcessMsgCBs()
1171 *
1172 * @brief Process response messages
1173 *
1174 * @param none
1175 *
1176 * @return none
1177 */
\ In segment BANKED_CODE, align 1, keep-with-next
1178 void ZDApp_ProcessMsgCBs( zdoIncomingMsg_t *inMsg )
\ ZDApp_ProcessMsgCBs:
1179 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 74F6 MOV A,#-0xa
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 10
\ 000005 ; Auto size: 21
\ 000005 74EB MOV A,#-0x15
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A EA MOV A,R2
\ 00000B FE MOV R6,A
\ 00000C EB MOV A,R3
\ 00000D FF MOV R7,A
1180 switch ( inMsg->clusterID )
\ 00000E 12.... LCALL ?Subroutine31 & 0xFFFF
\ ??CrossCallReturnLabel_33:
\ 000011 F5.. MOV ?V1,A
\ 000013 78.. MOV R0,#?V0
\ 000015 12.... LCALL ?US_SWITCH_SPARSE
\ `?<Jumptable for ZDApp_ProcessMsgCBs>_0`:
\ 000018 0200 DW 2
\ 00001A 2100 DW 33
\ 00001C 2200 DW 34
\ 00001E .... DW ??ZDApp_ProcessMsgCBs_0
\ 000020 0080 DW 32768
\ 000022 0180 DW 32769
\ 000024 .... DW ??ZDApp_ProcessMsgCBs_1
\ 000026 0000 DW 0
\ 000028 .... DW ??ZDApp_ProcessMsgCBs_2
1181 {
1182 #if defined ( ZDO_NWKADDR_REQUEST ) || defined ( ZDO_IEEEADDR_REQUEST ) || defined ( REFLECTOR )
1183 case NWK_addr_rsp:
1184 case IEEE_addr_rsp:
1185 {
1186 ZDO_NwkIEEEAddrResp_t *pAddrRsp;
1187 pAddrRsp = ZDO_ParseAddrRsp( inMsg );
\ ??ZDApp_ProcessMsgCBs_1:
\ 00002A ; Setup parameters for call to function ZDO_ParseAddrRsp
\ 00002A 12.... LCALL `??ZDO_ParseAddrRsp::?relay`; Banked call to: ZDO_ParseAddrRsp
\ 00002D 8A.. MOV ?V0,R2
\ 00002F 8B.. MOV ?V1,R3
\ 000031 AF.. MOV R7,?V1
1188 if ( pAddrRsp )
\ 000033 EA MOV A,R2
\ 000034 4F ORL A,R7
\ 000035 6032 JZ ??ZDApp_ProcessMsgCBs_2
1189 {
1190 if ( pAddrRsp->status == ZSuccess )
\ 000037 8A82 MOV DPL,R2
\ 000039 8B83 MOV DPH,R3
\ 00003B E0 MOVX A,@DPTR
\ 00003C 7010 JNZ ??ZDApp_ProcessMsgCBs_3
1191 {
1192 ZDO_UpdateAddrManager( pAddrRsp->nwkAddr, pAddrRsp->extAddr );
\ 00003E ; Setup parameters for call to function ZDO_UpdateAddrManager
\ 00003E EA MOV A,R2
\ 00003F 2403 ADD A,#0x3
\ 000041 FC MOV R4,A
\ 000042 E4 CLR A
\ 000043 3F ADDC A,R7
\ 000044 FD MOV R5,A
\ 000045 A3 INC DPTR
\ 000046 E0 MOVX A,@DPTR
\ 000047 FA MOV R2,A
\ 000048 A3 INC DPTR
\ 000049 E0 MOVX A,@DPTR
\ 00004A FB MOV R3,A
\ 00004B 12.... LCALL `??ZDO_UpdateAddrManager::?relay`; Banked call to: ZDO_UpdateAddrManager
1193 }
1194 osal_mem_free( pAddrRsp );
\ ??ZDApp_ProcessMsgCBs_3:
\ 00004E ; Setup parameters for call to function osal_mem_free
\ 00004E AA.. MOV R2,?V0
\ 000050 EF MOV A,R7
\ 000051 FB MOV R3,A
\ 000052 12.... LCALL `??osal_mem_free::?relay`; Banked call to: osal_mem_free
\ 000055 8012 SJMP ??ZDApp_ProcessMsgCBs_2
1195 }
1196 }
1197 break;
1198 #endif
1199
1200 #if defined ( REFLECTOR )
1201 case Bind_req:
1202 case Unbind_req:
1203 {
1204 ZDO_BindUnbindReq_t bindReq;
1205 ZDO_ParseBindUnbindReq( inMsg, &bindReq );
\ ??ZDApp_ProcessMsgCBs_0:
\ 000057 ; Setup parameters for call to function ZDO_ParseBindUnbindReq
\ 000057 AC.. MOV R4,?XSP + 0
\ 000059 AD.. MOV R5,?XSP + 1
\ 00005B 12.... LCALL `??ZDO_ParseBindUnbindReq::?relay`; Banked call to: ZDO_ParseBindUnbindReq
1206 ZDO_ProcessBindUnbindReq( inMsg, &bindReq );
\ 00005E ; Setup parameters for call to function ZDO_ProcessBindUnbindReq
\ 00005E AC.. MOV R4,?XSP + 0
\ 000060 AD.. MOV R5,?XSP + 1
\ 000062 EE MOV A,R6
\ 000063 FA MOV R2,A
\ 000064 EF MOV A,R7
\ 000065 FB MOV R3,A
\ 000066 12.... LCALL `??ZDO_ProcessBindUnbindReq::?relay`; Banked call to: ZDO_ProcessBindUnbindReq
1207 }
1208 break;
1209 #endif
1210
1211 #if ( ZG_BUILD_COORDINATOR_TYPE )
1212 case Bind_rsp:
1213 case Unbind_rsp:
1214 if (ZG_DEVICE_COORDINATOR_TYPE && matchED)
1215 {
1216 ZDMatchSendState(
1217 (uint8)((inMsg->clusterID == Bind_rsp) ? ZDMATCH_REASON_BIND_RSP : ZDMATCH_REASON_UNBIND_RSP),
1218 ZDO_ParseBindRsp(inMsg), inMsg->TransSeq );
1219 }
1220 break;
1221
1222 case End_Device_Bind_req:
1223 if (ZG_DEVICE_COORDINATOR_TYPE)
1224 {
1225 ZDEndDeviceBind_t bindReq;
1226 ZDO_ParseEndDeviceBindReq( inMsg, &bindReq );
1227 ZDO_MatchEndDeviceBind( &bindReq );
1228
1229 // Freeing the cluster lists - if allocated.
1230 if ( bindReq.numInClusters )
1231 osal_mem_free( bindReq.inClusters );
1232 if ( bindReq.numOutClusters )
1233 osal_mem_free( bindReq.outClusters );
1234 }
1235 break;
1236 #endif
1237 }
1238 }
\ ??ZDApp_ProcessMsgCBs_2:
\ 000069 REQUIRE ?Subroutine8
\ 000069 ; // Fall through to label ?Subroutine8
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine8:
\ 000000 7415 MOV A,#0x15
\ 000002 02.... LJMP ??Subroutine45_0 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine37:
\ 000000 12.... LCALL ?Subroutine38 & 0xFFFF
\ ??CrossCallReturnLabel_48:
\ 000003 E0 MOVX A,@DPTR
\ 000004 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine38:
\ 000000 240C ADD A,#0xc
\ 000002 F582 MOV DPL,A
\ 000004 E4 CLR A
\ 000005 3F ADDC A,R7
\ 000006 F583 MOV DPH,A
\ 000008 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine31:
\ 000000 EA MOV A,R2
\ 000001 12.... LCALL ?Subroutine37 & 0xFFFF
\ ??CrossCallReturnLabel_45:
\ 000004 F5.. MOV ?V0,A
\ 000006 A3 INC DPTR
\ 000007 E0 MOVX A,@DPTR
\ 000008 22 RET
1239
1240 /*********************************************************************
1241 * @fn ZDApp_RegisterCBs()
1242 *
1243 * @brief Process response messages
1244 *
1245 * @param none
1246 *
1247 * @return none
1248 */
\ In segment BANKED_CODE, align 1, keep-with-next
1249 void ZDApp_RegisterCBs( void )
\ ZDApp_RegisterCBs:
1250 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
1251 #if defined ( ZDO_IEEEADDR_REQUEST ) || defined ( REFLECTOR )
1252 ZDO_RegisterForZDOMsg( ZDAppTaskID, IEEE_addr_rsp );
\ 000004 ; Setup parameters for call to function ZDO_RegisterForZDOMsg
\ 000004 7A01 MOV R2,#0x1
\ 000006 12.... LCALL ?Subroutine19 & 0xFFFF
1253 #endif
1254 #if defined ( ZDO_NWKADDR_REQUEST ) || defined ( REFLECTOR )
1255 ZDO_RegisterForZDOMsg( ZDAppTaskID, NWK_addr_rsp );
\ ??CrossCallReturnLabel_62:
\ 000009 ; Setup parameters for call to function ZDO_RegisterForZDOMsg
\ 000009 7A00 MOV R2,#0x0
\ 00000B 12.... LCALL ?Subroutine19 & 0xFFFF
1256 #endif
1257 #if ZG_BUILD_COORDINATOR_TYPE
1258 ZDO_RegisterForZDOMsg( ZDAppTaskID, Bind_rsp );
1259 ZDO_RegisterForZDOMsg( ZDAppTaskID, Unbind_rsp );
1260 ZDO_RegisterForZDOMsg( ZDAppTaskID, End_Device_Bind_req );
1261 #endif
1262 #if defined ( REFLECTOR )
1263 ZDO_RegisterForZDOMsg( ZDAppTaskID, Bind_req );
\ ??CrossCallReturnLabel_63:
\ 00000E ; Setup parameters for call to function ZDO_RegisterForZDOMsg
\ 00000E 7A21 MOV R2,#0x21
\ 000010 7B00 MOV R3,#0x0
\ 000012 12.... LCALL ??Subroutine44_0 & 0xFFFF
1264 ZDO_RegisterForZDOMsg( ZDAppTaskID, Unbind_req );
\ ??CrossCallReturnLabel_64:
\ 000015 ; Setup parameters for call to function ZDO_RegisterForZDOMsg
\ 000015 7A22 MOV R2,#0x22
\ 000017 7B00 MOV R3,#0x0
\ 000019 12.... LCALL ??Subroutine44_0 & 0xFFFF
1265 #endif
1266 }
\ ??CrossCallReturnLabel_65:
\ 00001C 02.... LJMP ?Subroutine3 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine19:
\ 000000 7B80 MOV R3,#-0x80
\ 000002 REQUIRE ??Subroutine44_0
\ 000002 ; // Fall through to label ??Subroutine44_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine44_0:
\ 000000 90.... MOV DPTR,#ZDAppTaskID
\ 000003 E0 MOVX A,@DPTR
\ 000004 F9 MOV R1,A
\ 000005 12.... LCALL `??ZDO_RegisterForZDOMsg::?relay`; Banked call to: ZDO_RegisterForZDOMsg
\ 000008 22 RET
1267
1268 /*********************************************************************
1269 * @fn ZDApp_ProcessSecMsg()
1270 *
1271 * @brief Process the incoming security message.
1272 *
1273 * @param msgPtr - message to process
1274 *
1275 * @return none
1276 */
\ In segment BANKED_CODE, align 1, keep-with-next
1277 void ZDApp_ProcessSecMsg( osal_event_hdr_t *msgPtr )
\ ZDApp_ProcessSecMsg:
1278 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
1279 switch ( msgPtr->event )
\ 000004 8A82 MOV DPL,R2
\ 000006 8B83 MOV DPH,R3
\ 000008 E0 MOVX A,@DPTR
\ 000009 24FA ADD A,#-0x6
\ 00000B 6006 JZ ??ZDApp_ProcessSecMsg_0
\ 00000D 24FC ADD A,#-0x4
\ 00000F 6014 JZ ??ZDApp_ProcessSecMsg_1
\ 000011 8022 SJMP ??ZDApp_ProcessSecMsg_2
1280 {
1281 case ZDO_ESTABLISH_KEY_CFM:
1282 if ( ZG_CHECK_SECURITY_MODE == ZG_SECURITY_PRO_HIGH )
1283 {
1284 ZDSecMgrEstablishKeyCfm( (ZDO_EstablishKeyCfm_t*)msgPtr );
1285 }
1286 break;
1287
1288 case ZDO_ESTABLISH_KEY_IND:
1289 if ( ZG_CHECK_SECURITY_MODE == ZG_SECURITY_PRO_HIGH )
1290 {
1291 if ( ZG_BUILD_JOINING_TYPE && ZG_DEVICE_JOINING_TYPE )
1292 {
1293 ZDSecMgrEstablishKeyInd( (ZDO_EstablishKeyInd_t*)msgPtr );
1294 }
1295 }
1296 break;
1297
1298 case ZDO_TRANSPORT_KEY_IND:
1299 if ( ZG_BUILD_JOINING_TYPE && ZG_DEVICE_JOINING_TYPE )
\ ??ZDApp_ProcessSecMsg_0:
\ 000013 90.... MOV DPTR,#zgDeviceLogicalType
\ 000016 E0 MOVX A,@DPTR
\ 000017 6401 XRL A,#0x1
\ 000019 6005 JZ ??ZDApp_ProcessSecMsg_3
\ 00001B E0 MOVX A,@DPTR
\ 00001C 6402 XRL A,#0x2
\ 00001E 7015 JNZ ??ZDApp_ProcessSecMsg_2
1300 {
1301 ZDSecMgrTransportKeyInd( (ZDO_TransportKeyInd_t*)msgPtr );
\ ??ZDApp_ProcessSecMsg_3:
\ 000020 ; Setup parameters for call to function ZDSecMgrTransportKeyInd
\ 000020 12.... LCALL `??ZDSecMgrTransportKeyInd::?relay`; Banked call to: ZDSecMgrTransportKeyInd
\ 000023 8010 SJMP ??ZDApp_ProcessSecMsg_2
1302 }
1303 break;
1304
1305 case ZDO_UPDATE_DEVICE_IND:
1306 if ( ZG_BUILD_COORDINATOR_TYPE && ZG_DEVICE_COORDINATOR_TYPE )
1307 {
1308 ZDSecMgrUpdateDeviceInd( (ZDO_UpdateDeviceInd_t*)msgPtr );
1309 }
1310 break;
1311
1312 case ZDO_REMOVE_DEVICE_IND:
1313 if ( ZG_BUILD_RTRONLY_TYPE && ( zgDeviceLogicalType == ZG_DEVICETYPE_ROUTER ) )
1314 {
1315 ZDSecMgrRemoveDeviceInd( (ZDO_RemoveDeviceInd_t*)msgPtr );
1316 }
1317 break;
1318
1319 case ZDO_REQUEST_KEY_IND:
1320 if (( ZG_CHECK_SECURITY_MODE == ZG_SECURITY_PRO_HIGH ) ||
1321 ( ZG_CHECK_SECURITY_MODE == ZG_SECURITY_SE_STANDARD ))
1322 {
1323 if ( ZG_BUILD_COORDINATOR_TYPE && ZG_DEVICE_COORDINATOR_TYPE )
1324 {
1325 ZDSecMgrRequestKeyInd( (ZDO_RequestKeyInd_t*)msgPtr );
1326 }
1327 }
1328 break;
1329
1330 case ZDO_SWITCH_KEY_IND:
1331 if ( ZG_BUILD_JOINING_TYPE && ZG_DEVICE_JOINING_TYPE )
\ ??ZDApp_ProcessSecMsg_1:
\ 000025 90.... MOV DPTR,#zgDeviceLogicalType
\ 000028 E0 MOVX A,@DPTR
\ 000029 6401 XRL A,#0x1
\ 00002B 6005 JZ ??ZDApp_ProcessSecMsg_4
\ 00002D E0 MOVX A,@DPTR
\ 00002E 6402 XRL A,#0x2
\ 000030 7003 JNZ ??ZDApp_ProcessSecMsg_2
1332 {
1333 ZDSecMgrSwitchKeyInd( (ZDO_SwitchKeyInd_t*)msgPtr );
\ ??ZDApp_ProcessSecMsg_4:
\ 000032 ; Setup parameters for call to function ZDSecMgrSwitchKeyInd
\ 000032 12.... LCALL `??ZDSecMgrSwitchKeyInd::?relay`; Banked call to: ZDSecMgrSwitchKeyInd
1334 }
1335 break;
1336
1337 case ZDO_AUTHENTICATE_IND:
1338 if ( ZG_CHECK_SECURITY_MODE == ZG_SECURITY_PRO_HIGH )
1339 {
1340 ZDSecMgrAuthenticateInd( (ZDO_AuthenticateInd_t*)msgPtr );
1341 }
1342 break;
1343
1344 case ZDO_AUTHENTICATE_CFM:
1345 if ( ZG_CHECK_SECURITY_MODE == ZG_SECURITY_PRO_HIGH )
1346 {
1347 ZDSecMgrAuthenticateCfm( (ZDO_AuthenticateCfm_t*)msgPtr );
1348 }
1349 break;
1350
1351 default:
1352 // Unsupported messages
1353 break;
1354 }
1355 }
\ ??ZDApp_ProcessSecMsg_2:
\ 000035 02.... LJMP ?Subroutine3 & 0xFFFF
1356
1357 /*********************************************************************
1358 * @fn ZDApp_ProcessNetworkJoin()
1359 *
1360 * @brief
1361 *
1362 * Save off the Network key information.
1363 *
1364 * @param none
1365 *
1366 * @return none
1367 */
\ In segment BANKED_CODE, align 1, keep-with-next
1368 void ZDApp_ProcessNetworkJoin( void )
\ ZDApp_ProcessNetworkJoin:
1369 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 74F6 MOV A,#-0xa
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 10
\ 000005 ; Auto size: 2
\ 000005 74FE MOV A,#-0x2
\ 000007 12.... LCALL ?ALLOC_XSTACK8
1370 if ( (devState == DEV_NWK_JOINING) ||
1371 ((devState == DEV_NWK_ORPHAN) &&
1372 (ZDO_Config_Node_Descriptor.LogicalType == NODETYPE_ROUTER)) )
\ 00000A 90.... MOV DPTR,#devState
\ 00000D E0 MOVX A,@DPTR
\ 00000E 6403 XRL A,#0x3
\ 000010 6015 JZ ??ZDApp_ProcessNetworkJoin_0
\ 000012 E0 MOVX A,@DPTR
\ 000013 640A XRL A,#0xa
\ 000015 6003 JZ $+5
\ 000017 02.... LJMP ??ZDApp_ProcessNetworkJoin_1 & 0xFFFF
\ 00001A 90.... MOV DPTR,#ZDO_Config_Node_Descriptor
\ 00001D E0 MOVX A,@DPTR
\ 00001E 5407 ANL A,#0x7
\ 000020 6401 XRL A,#0x1
\ 000022 6003 JZ $+5
\ 000024 02.... LJMP ??ZDApp_ProcessNetworkJoin_2 & 0xFFFF
1373 {
1374 // Result of a Join attempt by this device.
1375 if ( nwkStatus == ZSuccess )
\ ??ZDApp_ProcessNetworkJoin_0:
\ 000027 90.... MOV DPTR,#nwkStatus
\ 00002A E0 MOVX A,@DPTR
\ 00002B 7017 JNZ ??ZDApp_ProcessNetworkJoin_3
1376 {
1377 osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );
\ 00002D ; Setup parameters for call to function osal_set_event
\ 00002D 12.... LCALL ?Subroutine15 & 0xFFFF
1378
1379 #if defined ( POWER_SAVING )
1380 osal_pwrmgr_device( PWRMGR_BATTERY );
1381 #endif
1382
1383 if ( ZG_SECURE_ENABLED && ( ZDApp_RestoreNwkKey() == false ) )
1384 {
1385 // wait for auth from trust center!!
1386 devState = DEV_END_DEVICE_UNAUTH;
1387
1388 // Start the reset timer for MAX UNAUTH time
1389 ZDApp_ResetTimerStart( 10000 );//MAX_DEVICE_UNAUTH_TIMEOUT );
1390 }
1391 else
1392 {
1393 if ( ZSTACK_ROUTER_BUILD )
1394 {
1395 if ( devState == DEV_NWK_ORPHAN
1396 && ZDO_Config_Node_Descriptor.LogicalType != NODETYPE_DEVICE )
1397 {
1398 // Change NIB state to router for restore
1399 _NIB.nwkState = NWK_ROUTER;
1400 }
1401 }
1402
1403 if ( devState == DEV_NWK_JOINING )
\ ??CrossCallReturnLabel_50:
\ 000030 90.... MOV DPTR,#devState
\ 000033 E0 MOVX A,@DPTR
\ 000034 6403 XRL A,#0x3
\ 000036 7003 JNZ ??ZDApp_ProcessNetworkJoin_4
1404 {
1405 ZDApp_AnnounceNewAddress();
\ 000038 ; Setup parameters for call to function ZDApp_AnnounceNewAddress
\ 000038 12.... LCALL `??ZDApp_AnnounceNewAddress::?relay`; Banked call to: ZDApp_AnnounceNewAddress
1406 }
1407
1408 devState = DEV_END_DEVICE;
\ ??ZDApp_ProcessNetworkJoin_4:
\ 00003B 90.... MOV DPTR,#devState
\ 00003E 7406 MOV A,#0x6
\ 000040 F0 MOVX @DPTR,A
1409 if ( ZSTACK_ROUTER_BUILD )
\ 000041 02.... LJMP ??CrossCallReturnLabel_51 & 0xFFFF
1410 {
1411 // NOTE: first two parameters are not used, see NLMEDE.h for details
1412 if ( ZDO_Config_Node_Descriptor.LogicalType != NODETYPE_DEVICE )
1413 {
1414 NLME_StartRouterRequest( 0, 0, false );
1415 }
1416 }
1417 }
1418 }
1419 else
1420 {
1421 if ( (devStartMode == MODE_RESUME) && (++retryCnt >= MAX_RESUME_RETRY) )
\ ??ZDApp_ProcessNetworkJoin_3:
\ 000044 90.... MOV DPTR,#devStartMode
\ 000047 E0 MOVX A,@DPTR
\ 000048 6401 XRL A,#0x1
\ 00004A 7036 JNZ ??ZDApp_ProcessNetworkJoin_5
\ 00004C 90.... MOV DPTR,#retryCnt
\ 00004F E0 MOVX A,@DPTR
\ 000050 04 INC A
\ 000051 F0 MOVX @DPTR,A
\ 000052 C3 CLR C
\ 000053 9403 SUBB A,#0x3
\ 000055 402B JC ??ZDApp_ProcessNetworkJoin_5
1422 {
1423 if ( _NIB.nwkPanId == 0xFFFF || _NIB.nwkPanId == INVALID_PAN_ID )
\ 000057 90.... MOV DPTR,#_NIB + 33
\ 00005A E0 MOVX A,@DPTR
\ 00005B F4 CPL A
\ 00005C 7003 JNZ ??ZDApp_ProcessNetworkJoin_6
\ 00005E A3 INC DPTR
\ 00005F E0 MOVX A,@DPTR
\ 000060 F4 CPL A
\ ??ZDApp_ProcessNetworkJoin_6:
\ 000061 600D JZ ??ZDApp_ProcessNetworkJoin_7
\ 000063 90.... MOV DPTR,#_NIB + 33
\ 000066 E0 MOVX A,@DPTR
\ 000067 64FE XRL A,#0xfe
\ 000069 7003 JNZ ??ZDApp_ProcessNetworkJoin_8
\ 00006B A3 INC DPTR
\ 00006C E0 MOVX A,@DPTR
\ 00006D F4 CPL A
\ ??ZDApp_ProcessNetworkJoin_8:
\ 00006E 7006 JNZ ??ZDApp_ProcessNetworkJoin_9
1424 devStartMode = MODE_JOIN;
\ ??ZDApp_ProcessNetworkJoin_7:
\ 000070 90.... MOV DPTR,#devStartMode
\ 000073 E4 CLR A
\ 000074 800B SJMP ??ZDApp_ProcessNetworkJoin_10
1425 else
1426 {
1427 devStartMode = MODE_REJOIN;
\ ??ZDApp_ProcessNetworkJoin_9:
\ 000076 90.... MOV DPTR,#devStartMode
\ 000079 7403 MOV A,#0x3
\ 00007B F0 MOVX @DPTR,A
1428 _tmpRejoinState = true;
\ 00007C 90.... MOV DPTR,#_tmpRejoinState
\ 00007F 7401 MOV A,#0x1
\ ??ZDApp_ProcessNetworkJoin_10:
\ 000081 F0 MOVX @DPTR,A
1429 }
1430 }
1431
1432 if ( (NLME_GetShortAddr() != INVALID_NODE_ADDR) ||
1433 (_NIB.nwkDevAddress != INVALID_NODE_ADDR) )
\ ??ZDApp_ProcessNetworkJoin_5:
\ 000082 ; Setup parameters for call to function NLME_GetShortAddr
\ 000082 12.... LCALL `??NLME_GetShortAddr::?relay`; Banked call to: NLME_GetShortAddr
\ 000085 74FE MOV A,#-0x2
\ 000087 6A XRL A,R2
\ 000088 7003 JNZ ??ZDApp_ProcessNetworkJoin_11
\ 00008A 74FF MOV A,#-0x1
\ 00008C 6B XRL A,R3
\ ??ZDApp_ProcessNetworkJoin_11:
\ 00008D 700D JNZ ??ZDApp_ProcessNetworkJoin_12
\ 00008F 90.... MOV DPTR,#_NIB + 20
\ 000092 E0 MOVX A,@DPTR
\ 000093 64FE XRL A,#0xfe
\ 000095 7003 JNZ ??ZDApp_ProcessNetworkJoin_13
\ 000097 A3 INC DPTR
\ 000098 E0 MOVX A,@DPTR
\ 000099 F4 CPL A
\ ??ZDApp_ProcessNetworkJoin_13:
\ 00009A 601D JZ ??ZDApp_ProcessNetworkJoin_14
1434 {
1435 uint16 addr = INVALID_NODE_ADDR;
\ ??ZDApp_ProcessNetworkJoin_12:
\ 00009C 85..82 MOV DPL,?XSP + 0
\ 00009F 85..83 MOV DPH,?XSP + 1
\ 0000A2 74FE MOV A,#-0x2
\ 0000A4 F0 MOVX @DPTR,A
\ 0000A5 A3 INC DPTR
\ 0000A6 04 INC A
\ 0000A7 F0 MOVX @DPTR,A
1436 // Invalidate nwk addr so end device does not use in its data reqs.
1437 _NIB.nwkDevAddress = INVALID_NODE_ADDR;
\ 0000A8 90.... MOV DPTR,#_NIB + 20
\ 0000AB 14 DEC A
\ 0000AC F0 MOVX @DPTR,A
\ 0000AD A3 INC DPTR
\ 0000AE 04 INC A
\ 0000AF F0 MOVX @DPTR,A
1438 ZMacSetReq( ZMacShortAddress, (uint8 *)&addr );
\ 0000B0 ; Setup parameters for call to function ZMacSetReq
\ 0000B0 AA.. MOV R2,?XSP + 0
\ 0000B2 AB.. MOV R3,?XSP + 1
\ 0000B4 7953 MOV R1,#0x53
\ 0000B6 12.... LCALL `??ZMacSetReq::?relay`; Banked call to: ZMacSetReq
1439 }
1440
1441 // Clear the neighbor Table and network discovery tables.
1442 nwkNeighborInitTable();
\ ??ZDApp_ProcessNetworkJoin_14:
\ 0000B9 ; Setup parameters for call to function nwkNeighborInitTable
\ 0000B9 12.... LCALL `??nwkNeighborInitTable::?relay`; Banked call to: nwkNeighborInitTable
1443 NLME_NwkDiscTerm();
\ 0000BC ; Setup parameters for call to function NLME_NwkDiscTerm
\ 0000BC 12.... LCALL `??NLME_NwkDiscTerm::?relay`; Banked call to: NLME_NwkDiscTerm
1444
1445 zdoDiscCounter = 1;
\ 0000BF 90.... MOV DPTR,#zdoDiscCounter
\ 0000C2 7401 MOV A,#0x1
\ 0000C4 F0 MOVX @DPTR,A
1446
1447 // ZDApp_NetworkInit( (uint16)
1448 // ((NWK_START_DELAY * (osal_rand() & 0x0F)) +
1449 // (NWK_START_DELAY * 5)) );
1450 ZDApp_NetworkInit( (uint16)(NWK_START_DELAY
1451 + ((uint16)(osal_rand()& EXTENDED_JOINING_RANDOM_MASK))) );
\ 0000C5 ; Setup parameters for call to function osal_rand
\ 0000C5 806A SJMP ??ZDApp_ProcessNetworkJoin_15
1452 }
1453 }
1454 else if ( devState == DEV_NWK_ORPHAN || devState == DEV_NWK_REJOIN )
\ ??ZDApp_ProcessNetworkJoin_1:
\ 0000C7 E0 MOVX A,@DPTR
\ 0000C8 6404 XRL A,#0x4
\ 0000CA 706A JNZ ??ZDApp_ProcessNetworkJoin_16
1455 {
1456 // results of an orphaning attempt by this device
1457 if (nwkStatus == ZSuccess)
\ ??ZDApp_ProcessNetworkJoin_2:
\ 0000CC 90.... MOV DPTR,#nwkStatus
\ 0000CF E0 MOVX A,@DPTR
\ 0000D0 7013 JNZ ??ZDApp_ProcessNetworkJoin_17
1458 {
1459 if ( ZG_SECURE_ENABLED )
1460 {
1461 ZDApp_RestoreNwkKey();
1462 }
1463
1464 devState = DEV_END_DEVICE;
\ 0000D2 12.... LCALL ?Subroutine9 & 0xFFFF
1465 osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );
1466 // setup Power Manager Device
1467 #if defined ( POWER_SAVING )
1468 osal_pwrmgr_device( PWRMGR_BATTERY );
1469 #endif
1470
1471 if ( ZDO_Config_Node_Descriptor.CapabilityFlags & CAPINFO_RCVR_ON_IDLE )
\ ??CrossCallReturnLabel_57:
\ 0000D5 90.... MOV DPTR,#ZDO_Config_Node_Descriptor + 2
\ 0000D8 E0 MOVX A,@DPTR
\ 0000D9 A2E3 MOV C,0xE0 /* A */.3
\ 0000DB 5003 JNC ??CrossCallReturnLabel_22
1472 {
1473 // The receiver is on, turn network layer polling off.
1474 NLME_SetPollRate( 0 );
\ 0000DD ; Setup parameters for call to function NLME_SetPollRate
\ 0000DD 12.... LCALL ?Subroutine24 & 0xFFFF
1475 NLME_SetQueuedPollRate( 0 );
1476 NLME_SetResponseRate( 0 );
1477 }
1478
1479 if ( ZSTACK_ROUTER_BUILD )
1480 {
1481 // NOTE: first two parameters are not used, see NLMEDE.h for details
1482 if ( ZDO_Config_Node_Descriptor.LogicalType != NODETYPE_DEVICE )
1483 {
1484 NLME_StartRouterRequest( 0, 0, false );
1485 }
1486 }
1487
1488 ZDApp_AnnounceNewAddress();
\ ??CrossCallReturnLabel_22:
\ 0000E0 ; Setup parameters for call to function ZDApp_AnnounceNewAddress
\ 0000E0 12.... LCALL `??ZDApp_AnnounceNewAddress::?relay`; Banked call to: ZDApp_AnnounceNewAddress
\ 0000E3 805F SJMP ??CrossCallReturnLabel_51
1489 }
1490 else
1491 {
1492 if ( devStartMode == MODE_RESUME )
\ ??ZDApp_ProcessNetworkJoin_17:
\ 0000E5 90.... MOV DPTR,#devStartMode
\ 0000E8 E0 MOVX A,@DPTR
\ 0000E9 6401 XRL A,#0x1
\ 0000EB 703E JNZ ??ZDApp_ProcessNetworkJoin_18
1493 {
1494 if ( ++retryCnt <= MAX_RESUME_RETRY )
\ 0000ED 90.... MOV DPTR,#retryCnt
\ 0000F0 E0 MOVX A,@DPTR
\ 0000F1 04 INC A
\ 0000F2 F0 MOVX @DPTR,A
\ 0000F3 C3 CLR C
\ 0000F4 9404 SUBB A,#0x4
\ 0000F6 5026 JNC ??ZDApp_ProcessNetworkJoin_19
1495 {
1496 if ( _NIB.nwkPanId == 0xFFFF || _NIB.nwkPanId == INVALID_PAN_ID )
\ 0000F8 90.... MOV DPTR,#_NIB + 33
\ 0000FB E0 MOVX A,@DPTR
\ 0000FC F4 CPL A
\ 0000FD 7003 JNZ ??ZDApp_ProcessNetworkJoin_20
\ 0000FF A3 INC DPTR
\ 000100 E0 MOVX A,@DPTR
\ 000101 F4 CPL A
\ ??ZDApp_ProcessNetworkJoin_20:
\ 000102 6022 JZ ??ZDApp_ProcessNetworkJoin_21
\ 000104 90.... MOV DPTR,#_NIB + 33
\ 000107 E0 MOVX A,@DPTR
\ 000108 64FE XRL A,#0xfe
\ 00010A 7003 JNZ ??ZDApp_ProcessNetworkJoin_22
\ 00010C A3 INC DPTR
\ 00010D E0 MOVX A,@DPTR
\ 00010E F4 CPL A
\ ??ZDApp_ProcessNetworkJoin_22:
\ 00010F 6015 JZ ??ZDApp_ProcessNetworkJoin_21
1497 devStartMode = MODE_JOIN;
1498 else
1499 {
1500 devStartMode = MODE_REJOIN;
\ 000111 90.... MOV DPTR,#devStartMode
\ 000114 7403 MOV A,#0x3
\ 000116 F0 MOVX @DPTR,A
1501 _tmpRejoinState = true;
\ 000117 90.... MOV DPTR,#_tmpRejoinState
\ 00011A 7401 MOV A,#0x1
\ 00011C 800C SJMP ??ZDApp_ProcessNetworkJoin_23
1502 }
1503 }
1504 // Do a normal join to the network after certain times of rejoin retries
1505 else if( AIB_apsUseInsecureJoin == true )
\ ??ZDApp_ProcessNetworkJoin_19:
\ 00011E 90.... MOV DPTR,#AIB_apsUseInsecureJoin
\ 000121 E0 MOVX A,@DPTR
\ 000122 6401 XRL A,#0x1
\ 000124 7005 JNZ ??ZDApp_ProcessNetworkJoin_18
1506 {
1507 devStartMode = MODE_JOIN;
\ ??ZDApp_ProcessNetworkJoin_21:
\ 000126 90.... MOV DPTR,#devStartMode
\ 000129 E4 CLR A
\ ??ZDApp_ProcessNetworkJoin_23:
\ 00012A F0 MOVX @DPTR,A
1508 }
1509 }
1510
1511 // Clear the neighbor Table and network discovery tables.
1512 nwkNeighborInitTable();
\ ??ZDApp_ProcessNetworkJoin_18:
\ 00012B ; Setup parameters for call to function nwkNeighborInitTable
\ 00012B 12.... LCALL `??nwkNeighborInitTable::?relay`; Banked call to: nwkNeighborInitTable
1513 NLME_NwkDiscTerm();
\ 00012E ; Setup parameters for call to function NLME_NwkDiscTerm
\ 00012E 12.... LCALL `??NLME_NwkDiscTerm::?relay`; Banked call to: NLME_NwkDiscTerm
1514
1515 // setup a retry for later...
1516 ZDApp_NetworkInit( (uint16)(NWK_START_DELAY
1517 + (osal_rand()& EXTENDED_JOINING_RANDOM_MASK)) );
\ 000131 ; Setup parameters for call to function osal_rand
1518 }
1519 }
\ ??ZDApp_ProcessNetworkJoin_15:
\ 000131 12.... LCALL ?Subroutine23 & 0xFFFF
\ ??CrossCallReturnLabel_20:
\ 000134 800E SJMP ??CrossCallReturnLabel_51
1520 #if defined ( ZIGBEE_STOCHASTIC_ADDRESSING )
1521 else
1522 {
1523 // Assume from address conflict
1524 if ( _NIB.nwkAddrAlloc == NWK_ADDRESSING_STOCHASTIC )
\ ??ZDApp_ProcessNetworkJoin_16:
\ 000136 90.... MOV DPTR,#_NIB + 96
\ 000139 E0 MOVX A,@DPTR
\ 00013A 6402 XRL A,#0x2
\ 00013C 7006 JNZ ??CrossCallReturnLabel_51
1525 {
1526 // Notify the network
1527 ZDApp_AnnounceNewAddress();
\ 00013E ; Setup parameters for call to function ZDApp_AnnounceNewAddress
\ 00013E 12.... LCALL `??ZDApp_AnnounceNewAddress::?relay`; Banked call to: ZDApp_AnnounceNewAddress
1528
1529 // Notify apps
1530 osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );
\ 000141 ; Setup parameters for call to function osal_set_event
\ 000141 12.... LCALL ?Subroutine15 & 0xFFFF
1531 }
1532 }
1533 #endif
1534 }
\ ??CrossCallReturnLabel_51:
\ 000144 02.... LJMP ?Subroutine7 & 0xFFFF
1535
1536 /*********************************************************************
1537 * @fn ZDApp_SaveNwkKey()
1538 *
1539 * @brief Save off the Network key information.
1540 *
1541 * @param none
1542 *
1543 * @return none
1544 */
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine1:
\ 000000 7415 MOV A,#0x15
\ 000002 REQUIRE ??Subroutine39_0
\ 000002 ; // Fall through to label ??Subroutine39_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine39_0:
\ 000000 12.... LCALL ?DEALLOC_XSTACK8
\ 000003 REQUIRE ??Subroutine40_0
\ 000003 ; // Fall through to label ??Subroutine40_0
\ In segment BANKED_CODE, align 1, keep-with-next
1545 void ZDApp_SaveNwkKey( void )
\ ZDApp_SaveNwkKey:
1546 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 REQUIRE ?V2
\ 000000 REQUIRE ?V3
\ 000000 74F4 MOV A,#-0xc
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 12
\ 000005 ; Auto size: 21
\ 000005 74EB MOV A,#-0x15
\ 000007 12.... LCALL ?ALLOC_XSTACK8
1547 nwkActiveKeyItems keyItems;
1548
1549 SSP_ReadNwkActiveKey( &keyItems );
\ 00000A ; Setup parameters for call to function SSP_ReadNwkActiveKey
\ 00000A AA.. MOV R2,?XSP + 0
\ 00000C AB.. MOV R3,?XSP + 1
\ 00000E 12.... LCALL `??SSP_ReadNwkActiveKey::?relay`; Banked call to: SSP_ReadNwkActiveKey
1550 keyItems.frameCounter++;
\ 000011 90.... MOV DPTR,#__Constant_1
\ 000014 78.. MOV R0,#?V0
\ 000016 12.... LCALL ?L_MOV_X
\ 000019 7411 MOV A,#0x11
\ 00001B 12.... LCALL ?XSTACK_DISP0_8
\ 00001E 78.. MOV R0,#?V0
\ 000020 12.... LCALL ?L_ADD_TO_X
1551
1552 osal_nv_write( ZCD_NV_NWKKEY, 0, sizeof( nwkActiveKeyItems ),
1553 (void *)&keyItems );
\ 000023 ; Setup parameters for call to function osal_nv_write
\ 000023 A8.. MOV R0,?XSP + 0
\ 000025 A9.. MOV R1,?XSP + 1
\ 000027 88.. MOV ?V0,R0
\ 000029 89.. MOV ?V1,R1
\ 00002B 78.. MOV R0,#?V0
\ 00002D 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000030 75..15 MOV ?V0,#0x15
\ 000033 75..00 MOV ?V1,#0x0
\ 000036 78.. MOV R0,#?V0
\ 000038 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00003B 7C00 MOV R4,#0x0
\ 00003D 7D00 MOV R5,#0x0
\ 00003F 7A82 MOV R2,#-0x7e
\ 000041 7B00 MOV R3,#0x0
\ 000043 12.... LCALL `??osal_nv_write::?relay`; Banked call to: osal_nv_write
\ 000046 7404 MOV A,#0x4
\ 000048 12.... LCALL ?DEALLOC_XSTACK8
1554
1555 nwkFrameCounterChanges = 0;
\ 00004B 90.... MOV DPTR,#nwkFrameCounterChanges
\ 00004E E4 CLR A
\ 00004F F0 MOVX @DPTR,A
\ 000050 A3 INC DPTR
\ 000051 F0 MOVX @DPTR,A
1556
1557 // Clear copy in RAM before return.
1558 osal_memset( &keyItems, 0x00, sizeof(keyItems) );
\ 000052 ; Setup parameters for call to function osal_memset
\ 000052 7C15 MOV R4,#0x15
\ 000054 FD MOV R5,A
\ 000055 F9 MOV R1,A
\ 000056 AA.. MOV R2,?XSP + 0
\ 000058 AB.. MOV R3,?XSP + 1
\ 00005A 12.... LCALL `??osal_memset::?relay`; Banked call to: osal_memset
1559
1560 }
\ 00005D 02.... LJMP ?Subroutine1 & 0xFFFF
1561
1562 /*********************************************************************
1563 * @fn ZDApp_ResetNwkKey()
1564 *
1565 * @brief Reset the Network key information in NV.
1566 *
1567 * @param none
1568 *
1569 * @return none
1570 */
\ In segment BANKED_CODE, align 1, keep-with-next
1571 void ZDApp_ResetNwkKey( void )
\ ZDApp_ResetNwkKey:
1572 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 74F6 MOV A,#-0xa
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 10
\ 000005 ; Auto size: 21
\ 000005 74EB MOV A,#-0x15
\ 000007 12.... LCALL ?ALLOC_XSTACK8
1573 nwkActiveKeyItems keyItems;
1574
1575 osal_memset( &keyItems, 0, sizeof( nwkActiveKeyItems ) );
\ 00000A ; Setup parameters for call to function osal_memset
\ 00000A 7C15 MOV R4,#0x15
\ 00000C 12.... LCALL ?Subroutine27 & 0xFFFF
1576 osal_nv_write( ZCD_NV_NWKKEY, 0, sizeof( nwkActiveKeyItems ),
1577 (void *)&keyItems );
\ ??CrossCallReturnLabel_26:
\ 00000F 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000012 75..15 MOV ?V0,#0x15
\ 000015 75..00 MOV ?V1,#0x0
\ 000018 78.. MOV R0,#?V0
\ 00001A 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00001D 7C00 MOV R4,#0x0
\ 00001F 7D00 MOV R5,#0x0
\ 000021 7A82 MOV R2,#-0x7e
\ 000023 7B00 MOV R3,#0x0
\ 000025 12.... LCALL `??osal_nv_write::?relay`; Banked call to: osal_nv_write
\ 000028 7404 MOV A,#0x4
\ 00002A 12.... LCALL ?DEALLOC_XSTACK8
1578 }
\ 00002D 02.... LJMP ?Subroutine8 & 0xFFFF
1579
1580 /*********************************************************************
1581 * @fn ZDApp_RestoreNwkKey()
1582 *
1583 * @brief
1584 *
1585 * Save off the Network key information.
1586 *
1587 * @param none
1588 *
1589 * @return true if restored from NV, false if not
1590 */
\ In segment BANKED_CODE, align 1, keep-with-next
1591 uint8 ZDApp_RestoreNwkKey( void )
\ ZDApp_RestoreNwkKey:
1592 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 REQUIRE ?V2
\ 000000 REQUIRE ?V3
\ 000000 74F4 MOV A,#-0xc
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 12
\ 000005 ; Auto size: 21
\ 000005 74EB MOV A,#-0x15
\ 000007 12.... LCALL ?ALLOC_XSTACK8
1593 nwkActiveKeyItems keyItems;
1594 uint8 ret = false;
\ 00000A 7E00 MOV R6,#0x0
1595
1596 if ( osal_nv_read( ZCD_NV_NWKKEY, 0, sizeof(nwkActiveKeyItems), (void*)&keyItems )
1597 == ZSUCCESS )
\ 00000C ; Setup parameters for call to function osal_nv_read
\ 00000C A8.. MOV R0,?XSP + 0
\ 00000E A9.. MOV R1,?XSP + 1
\ 000010 88.. MOV ?V0,R0
\ 000012 89.. MOV ?V1,R1
\ 000014 78.. MOV R0,#?V0
\ 000016 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000019 75..15 MOV ?V0,#0x15
\ 00001C 8E.. MOV ?V1,R6
\ 00001E 78.. MOV R0,#?V0
\ 000020 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000023 7C00 MOV R4,#0x0
\ 000025 7D00 MOV R5,#0x0
\ 000027 7A82 MOV R2,#-0x7e
\ 000029 12.... LCALL ?Subroutine29 & 0xFFFF
\ ??CrossCallReturnLabel_30:
\ 00002C 12.... LCALL ?DEALLOC_XSTACK8
\ 00002F E9 MOV A,R1
\ 000030 703A JNZ ??ZDApp_RestoreNwkKey_0
1598 {
1599 if ( keyItems.frameCounter > 0 )
\ 000032 7411 MOV A,#0x11
\ 000034 12.... LCALL ?XSTACK_DISP0_8
\ 000037 12.... LCALL ?XLOAD_R0123
\ 00003A E8 MOV A,R0
\ 00003B 49 ORL A,R1
\ 00003C 4A ORL A,R2
\ 00003D 4B ORL A,R3
\ 00003E 6022 JZ ??ZDApp_RestoreNwkKey_1
1600 {
1601 // Restore the key information
1602 keyItems.frameCounter += MAX_NWK_FRAMECOUNTER_CHANGES;
\ 000040 90.... MOV DPTR,#__Constant_3e8
\ 000043 78.. MOV R0,#?V0
\ 000045 12.... LCALL ?L_MOV_X
\ 000048 7411 MOV A,#0x11
\ 00004A 12.... LCALL ?XSTACK_DISP0_8
\ 00004D 78.. MOV R0,#?V0
\ 00004F 12.... LCALL ?L_ADD_TO_X
1603 nwkFrameCounter = keyItems.frameCounter;
\ 000052 7411 MOV A,#0x11
\ 000054 12.... LCALL ?XSTACK_DISP0_8
\ 000057 12.... LCALL ?XLOAD_R0123
\ 00005A 90.... MOV DPTR,#nwkFrameCounter
\ 00005D 12.... LCALL ?XSTORE_R0123
1604 ret = true;
\ 000060 7E01 MOV R6,#0x1
1605 }
1606
1607 // Force a save for the first frame counter increment
1608 nwkFrameCounterChanges = MAX_NWK_FRAMECOUNTER_CHANGES + 1;
\ ??ZDApp_RestoreNwkKey_1:
\ 000062 90.... MOV DPTR,#nwkFrameCounterChanges
\ 000065 74E9 MOV A,#-0x17
\ 000067 F0 MOVX @DPTR,A
\ 000068 A3 INC DPTR
\ 000069 7403 MOV A,#0x3
\ 00006B F0 MOVX @DPTR,A
1609 }
1610 // Clear copy in RAM before return.
1611 osal_memset( &keyItems, 0x00, sizeof(keyItems) );
\ ??ZDApp_RestoreNwkKey_0:
\ 00006C ; Setup parameters for call to function osal_memset
\ 00006C 7C15 MOV R4,#0x15
\ 00006E 7D00 MOV R5,#0x0
\ 000070 7900 MOV R1,#0x0
\ 000072 AA.. MOV R2,?XSP + 0
\ 000074 AB.. MOV R3,?XSP + 1
\ 000076 12.... LCALL `??osal_memset::?relay`; Banked call to: osal_memset
1612
1613 return ( ret );
\ 000079 EE MOV A,R6
\ 00007A F9 MOV R1,A
\ 00007B 02.... LJMP ?Subroutine1 & 0xFFFF
1614 }
1615
1616 /*********************************************************************
1617 * @fn ZDApp_ResetTimerStart
1618 *
1619 * @brief Start the reset timer.
1620 *
1621 * @param delay - delay time(ms) before reset
1622 *
1623 * @return none
1624 */
\ In segment BANKED_CODE, align 1, keep-with-next
1625 void ZDApp_ResetTimerStart( uint16 delay )
\ ZDApp_ResetTimerStart:
1626 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
1627 // Start the rest timer
1628 osal_start_timerEx( ZDAppTaskID, ZDO_DEVICE_RESET, delay );
\ 000004 ; Setup parameters for call to function osal_start_timerEx
\ 000004 EA MOV A,R2
\ 000005 FC MOV R4,A
\ 000006 EB MOV A,R3
\ 000007 FD MOV R5,A
\ 000008 7A04 MOV R2,#0x4
\ 00000A 12.... LCALL ?Subroutine22 & 0xFFFF
1629 }
\ ??CrossCallReturnLabel_66:
\ 00000D 02.... LJMP ?Subroutine3 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine22:
\ 000000 7B00 MOV R3,#0x0
\ 000002 90.... MOV DPTR,#ZDAppTaskID
\ 000005 REQUIRE ??Subroutine47_0
\ 000005 ; // Fall through to label ??Subroutine47_0
1630
1631 /*********************************************************************
1632 * @fn ZDApp_ResetTimerCancel
1633 *
1634 * @brief Cancel the reset timer.
1635 *
1636 * @param none
1637 *
1638 * @return none
1639 */
\ In segment BANKED_CODE, align 1, keep-with-next
1640 void ZDApp_ResetTimerCancel( void )
\ ZDApp_ResetTimerCancel:
1641 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
1642 // Cancel the reset timer
1643 osal_stop_timerEx( ZDAppTaskID, ZDO_DEVICE_RESET );
\ 000004 ; Setup parameters for call to function osal_stop_timerEx
\ 000004 7A04 MOV R2,#0x4
\ 000006 7B00 MOV R3,#0x0
\ 000008 90.... MOV DPTR,#ZDAppTaskID
\ 00000B E0 MOVX A,@DPTR
\ 00000C F9 MOV R1,A
\ 00000D 12.... LCALL `??osal_stop_timerEx::?relay`; Banked call to: osal_stop_timerEx
1644 }
\ 000010 02.... LJMP ?Subroutine3 & 0xFFFF
1645
1646 /*********************************************************************
1647 * @fn ZDApp_LeaveCtrlInit
1648 *
1649 * @brief Initialize the leave control logic.
1650 *
1651 * @param none
1652 *
1653 * @return none
1654 */
\ In segment BANKED_CODE, align 1, keep-with-next
1655 void ZDApp_LeaveCtrlInit( void )
\ ZDApp_LeaveCtrlInit:
1656 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 74F6 MOV A,#-0xa
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 10
\ 000005 ; Auto size: 0
1657 uint8 status;
1658
1659
1660 // Initialize control state
1661 ZDApp_LeaveCtrl = ZDAPP_LEAVE_CTRL_INIT;
\ 000005 90.... MOV DPTR,#ZDApp_LeaveCtrl
\ 000008 E4 CLR A
\ 000009 F0 MOVX @DPTR,A
1662
1663 status = osal_nv_item_init( ZCD_NV_LEAVE_CTRL,
1664 sizeof(ZDApp_LeaveCtrl),
1665 &ZDApp_LeaveCtrl );
1666
1667 if ( status == ZSUCCESS )
\ 00000A ; Setup parameters for call to function osal_nv_item_init
\ 00000A 75.... MOV ?V0,#ZDApp_LeaveCtrl & 0xff
\ 00000D 75.... MOV ?V1,#(ZDApp_LeaveCtrl >> 8) & 0xff
\ 000010 78.. MOV R0,#?V0
\ 000012 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000015 7C01 MOV R4,#0x1
\ 000017 7D00 MOV R5,#0x0
\ 000019 7A85 MOV R2,#-0x7b
\ 00001B 7B00 MOV R3,#0x0
\ 00001D 12.... LCALL `??osal_nv_item_init::?relay`; Banked call to: osal_nv_item_init
\ 000020 7402 MOV A,#0x2
\ 000022 12.... LCALL ?DEALLOC_XSTACK8
\ 000025 E9 MOV A,R1
\ 000026 701C JNZ ??ZDApp_LeaveCtrlInit_0
1668 {
1669 // Read saved control
1670 osal_nv_read( ZCD_NV_LEAVE_CTRL,
1671 0,
1672 sizeof( uint8 ),
1673 &ZDApp_LeaveCtrl);
\ 000028 ; Setup parameters for call to function osal_nv_read
\ 000028 78.. MOV R0,#?V0
\ 00002A 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00002D 75..01 MOV ?V0,#0x1
\ 000030 75..00 MOV ?V1,#0x0
\ 000033 78.. MOV R0,#?V0
\ 000035 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000038 7C00 MOV R4,#0x0
\ 00003A 7D00 MOV R5,#0x0
\ 00003C 7A85 MOV R2,#-0x7b
\ 00003E 12.... LCALL ?Subroutine29 & 0xFFFF
1674 }
\ ??CrossCallReturnLabel_31:
\ 000041 12.... LCALL ?DEALLOC_XSTACK8
1675 }
\ ??ZDApp_LeaveCtrlInit_0:
\ 000044 02.... LJMP ??Subroutine46_0 & 0xFFFF
1676
1677 /*********************************************************************
1678 * @fn ZDApp_LeaveCtrlSet
1679 *
1680 * @brief Set the leave control logic.
1681 *
1682 * @param ra - reassociate flag
1683 *
1684 * @return none
1685 */
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine2:
\ 000000 75.... MOV ?V0,#ZDApp_LeaveCtrl & 0xff
\ 000003 75.... MOV ?V1,#(ZDApp_LeaveCtrl >> 8) & 0xff
\ 000006 78.. MOV R0,#?V0
\ 000008 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00000B 75..01 MOV ?V0,#0x1
\ 00000E 75..00 MOV ?V1,#0x0
\ 000011 78.. MOV R0,#?V0
\ 000013 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000016 7C00 MOV R4,#0x0
\ 000018 7D00 MOV R5,#0x0
\ 00001A 7A85 MOV R2,#-0x7b
\ 00001C 7B00 MOV R3,#0x0
\ 00001E 12.... LCALL `??osal_nv_write::?relay`; Banked call to: osal_nv_write
\ 000021 7404 MOV A,#0x4
\ 000023 REQUIRE ??Subroutine45_0
\ 000023 ; // Fall through to label ??Subroutine45_0
\ In segment BANKED_CODE, align 1, keep-with-next
1686 void ZDApp_LeaveCtrlSet( uint8 ra )
\ ZDApp_LeaveCtrlSet:
1687 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 74F6 MOV A,#-0xa
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 10
\ 000005 ; Auto size: 0
\ 000005 E9 MOV A,R1
\ 000006 FE MOV R6,A
1688 ZDApp_LeaveCtrl = ZDAPP_LEAVE_CTRL_SET;
\ 000007 90.... MOV DPTR,#ZDApp_LeaveCtrl
\ 00000A 7401 MOV A,#0x1
\ 00000C F0 MOVX @DPTR,A
1689
1690 if ( ra == TRUE )
\ 00000D 6E XRL A,R6
\ 00000E 7003 JNZ ??ZDApp_LeaveCtrlSet_0
1691 {
1692 ZDApp_LeaveCtrl |= ZDAPP_LEAVE_CTRL_RA;
\ 000010 7403 MOV A,#0x3
\ 000012 F0 MOVX @DPTR,A
1693 }
1694
1695 // Write the leave control
1696 osal_nv_write( ZCD_NV_LEAVE_CTRL,
1697 0,
1698 sizeof( uint8 ),
1699 &ZDApp_LeaveCtrl);
\ ??ZDApp_LeaveCtrlSet_0:
\ 000013 ; Setup parameters for call to function osal_nv_write
\ 000013 02.... LJMP ?Subroutine2 & 0xFFFF
1700 }
1701
1702 /*********************************************************************
1703 * @fn ZDApp_LeaveCtrlReset
1704 *
1705 * @brief Re-initialize the leave control logic.
1706 *
1707 * @param none
1708 *
1709 * @return none
1710 */
\ In segment BANKED_CODE, align 1, keep-with-next
1711 void ZDApp_LeaveCtrlReset( void )
\ ZDApp_LeaveCtrlReset:
1712 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 74F6 MOV A,#-0xa
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 10
\ 000005 ; Auto size: 0
1713 // Set leave control to initialized state
1714 ZDApp_LeaveCtrl = ZDAPP_LEAVE_CTRL_INIT;
\ 000005 90.... MOV DPTR,#ZDApp_LeaveCtrl
\ 000008 E4 CLR A
\ 000009 F0 MOVX @DPTR,A
1715
1716 // Write initialized control
1717 osal_nv_write( ZCD_NV_LEAVE_CTRL,
1718 0,
1719 sizeof( uint8 ),
1720 &ZDApp_LeaveCtrl);
\ 00000A ; Setup parameters for call to function osal_nv_write
\ 00000A 02.... LJMP ?Subroutine2 & 0xFFFF
1721 }
1722
1723 /*********************************************************************
1724 * @fn ZDApp_LeaveCtrlBypass
1725 *
1726 * @brief Check if NV restore should be skipped during a leave reset.
1727 *
1728 * @param none
1729 *
1730 * @return uint8 - (TRUE bypass:FALSE do not bypass)
1731 */
\ In segment BANKED_CODE, align 1, keep-with-next
1732 uint8 ZDApp_LeaveCtrlBypass( void )
\ ZDApp_LeaveCtrlBypass:
1733 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
1734 uint8 bypass;
1735
1736 if ( ZDApp_LeaveCtrl & ZDAPP_LEAVE_CTRL_SET )
1737 {
1738 bypass = TRUE;
1739 }
1740 else
1741 {
1742 bypass = FALSE;
1743 }
1744
1745 return bypass;
\ 000004 90.... MOV DPTR,#ZDApp_LeaveCtrl
\ 000007 E0 MOVX A,@DPTR
\ 000008 A2E0 MOV C,0xE0 /* A */.0
\ 00000A E4 CLR A
\ 00000B 33 RLC A
\ 00000C F9 MOV R1,A
\ 00000D 02.... LJMP ?Subroutine3 & 0xFFFF
1746 }
1747
1748 /*********************************************************************
1749 * @fn ZDApp_LeaveCtrlStartup
1750 *
1751 * @brief Check for startup conditions during a leave reset.
1752 *
1753 * @param state - devState_t determined by leave control logic
1754 * @param startDelay - startup delay
1755 *
1756 * @return none
1757 */
\ In segment BANKED_CODE, align 1, keep-with-next
1758 void ZDApp_LeaveCtrlStartup( devStates_t* state, uint16* startDelay )
\ ZDApp_LeaveCtrlStartup:
1759 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
1760 *startDelay = 0;
\ 000004 8C82 MOV DPL,R4
\ 000006 8D83 MOV DPH,R5
\ 000008 E4 CLR A
\ 000009 F0 MOVX @DPTR,A
\ 00000A A3 INC DPTR
\ 00000B F0 MOVX @DPTR,A
1761
1762 if ( ZDApp_LeaveCtrl & ZDAPP_LEAVE_CTRL_SET )
\ 00000C 90.... MOV DPTR,#ZDApp_LeaveCtrl
\ 00000F E0 MOVX A,@DPTR
\ 000010 A2E0 MOV C,0xE0 /* A */.0
\ 000012 5019 JNC ??ZDApp_LeaveCtrlStartup_0
1763 {
1764 if ( ZDApp_LeaveCtrl & ZDAPP_LEAVE_CTRL_RA )
\ 000014 A2E1 MOV C,0xE0 /* A */.1
\ 000016 500C JNC ??ZDApp_LeaveCtrlStartup_1
1765 {
1766 *startDelay = LEAVE_RESET_DELAY;
\ 000018 8C82 MOV DPL,R4
\ 00001A 8D83 MOV DPH,R5
\ 00001C 7488 MOV A,#-0x78
\ 00001E F0 MOVX @DPTR,A
\ 00001F A3 INC DPTR
\ 000020 7413 MOV A,#0x13
\ 000022 8005 SJMP ??ZDApp_LeaveCtrlStartup_2
1767 }
1768 else
1769 {
1770 *state = DEV_HOLD;
\ ??ZDApp_LeaveCtrlStartup_1:
\ 000024 8A82 MOV DPL,R2
\ 000026 8B83 MOV DPH,R3
\ 000028 E4 CLR A
\ ??ZDApp_LeaveCtrlStartup_2:
\ 000029 F0 MOVX @DPTR,A
1771 }
1772
1773 // Reset leave control logic
1774 ZDApp_LeaveCtrlReset();
\ 00002A ; Setup parameters for call to function ZDApp_LeaveCtrlReset
\ 00002A 12.... LCALL `??ZDApp_LeaveCtrlReset::?relay`; Banked call to: ZDApp_LeaveCtrlReset
1775 }
1776 }
\ ??ZDApp_LeaveCtrlStartup_0:
\ 00002D 02.... LJMP ?Subroutine3 & 0xFFFF
1777
1778 /*********************************************************************
1779 * @fn ZDApp_LeaveReset
1780 *
1781 * @brief Setup a device reset due to a leave indication/confirm.
1782 *
1783 * @param ra - reassociate flag
1784 *
1785 * @return none
1786 */
\ In segment BANKED_CODE, align 1, keep-with-next
1787 void ZDApp_LeaveReset( uint8 ra )
\ ZDApp_LeaveReset:
1788 {
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 0
1789 ZDApp_LeaveCtrlSet( ra );
\ 000005 ; Setup parameters for call to function ZDApp_LeaveCtrlSet
\ 000005 12.... LCALL `??ZDApp_LeaveCtrlSet::?relay`; Banked call to: ZDApp_LeaveCtrlSet
1790
1791 ZDApp_ResetTimerStart( LEAVE_RESET_DELAY );
\ 000008 ; Setup parameters for call to function ZDApp_ResetTimerStart
\ 000008 7A88 MOV R2,#-0x78
\ 00000A 7B13 MOV R3,#0x13
\ 00000C 12.... LCALL `??ZDApp_ResetTimerStart::?relay`; Banked call to: ZDApp_ResetTimerStart
1792 }
\ 00000F 80.. SJMP ??Subroutine48_0
1793
1794 /*********************************************************************
1795 * @fn ZDApp_LeaveUpdate
1796 *
1797 * @brief Update local device data related to leaving device.
1798 *
1799 * @param nwkAddr - NWK address of leaving device
1800 * @param extAddr - EXT address of leaving device
1801 * @param removeChildren - remove children of leaving device
1802 *
1803 * @return none
1804 */
\ In segment BANKED_CODE, align 1, keep-with-next
1805 void ZDApp_LeaveUpdate( uint16 nwkAddr, uint8* extAddr,
\ ZDApp_LeaveUpdate:
1806 uint8 removeChildren )
1807 {
\ 000000 ; Saved register size: 0
\ 000000 ; Auto size: 0
1808 /*
1809 AddrMgrEntry_t entry;
1810 */
1811 (void)nwkAddr; // Intentionally unreferenced parameter
1812
1813 // Remove if child
1814 if ( ZSTACK_ROUTER_BUILD )
1815 {
1816 NLME_RemoveChild( extAddr, removeChildren );
1817 }
1818
1819 /*
1820 // Set NWK address to invalid
1821 entry.user = ADDRMGR_USER_DEFAULT;
1822 entry.nwkAddr = INVALID_NODE_ADDR;
1823 AddrMgrExtAddrSet( entry.extAddr, extAddr );
1824 AddrMgrEntryUpdate( &entry );
1825
1826 // Check
1827 if ( removeChildren == TRUE )
1828 {
1829 // Set index to INVALID_NODE_ADDR to start search
1830 entry.index = INVALID_NODE_ADDR;
1831
1832 // Get first entry
1833 AddrMgrEntryGetNext( &entry );
1834
1835 // Remove all descendents
1836 while ( entry.index != INVALID_NODE_ADDR )
1837 {
1838 // Check NWK address allocation algorithm
1839 if ( RTG_ANCESTOR( entry.nwkAddr, thisAddr ) != 0 )
1840 {
1841 // Set NWK address to invalid
1842 entry.nwkAddr = INVALID_NODE_ADDR;
1843 AddrMgrEntryUpdate( &entry );
1844 }
1845
1846 // Get next entry
1847 AddrMgrEntryGetNext( &entry );
1848 }
1849 }
1850 */
1851 }
\ 000000 02.... LJMP ?BRET
1852
1853 /*********************************************************************
1854 * @fn ZDApp_NetworkDiscoveryReq
1855 *
1856 * @brief Request a network discovery.
1857 *
1858 * @param scanChannels -
1859 * @param scanDuration -
1860 *
1861 * @return ZStatus_t
1862 */
\ In segment BANKED_CODE, align 1, keep-with-next
1863 ZStatus_t ZDApp_NetworkDiscoveryReq( uint32 scanChannels, uint8 scanDuration)
\ ZDApp_NetworkDiscoveryReq:
1864 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 REQUIRE ?V2
\ 000000 REQUIRE ?V3
\ 000000 74F4 MOV A,#-0xc
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 12
\ 000005 ; Auto size: 0
1865 // Setup optional filters - tbd
1866
1867 // Request NLME network discovery
1868 return NLME_NetworkDiscoveryRequest(scanChannels, scanDuration);
\ 000005 ; Setup parameters for call to function NLME_NetworkDiscoveryRequest
\ 000005 12.... LCALL `??NLME_NetworkDiscoveryRequest::?relay`; Banked call to: NLME_NetworkDiscoveryRequest
\ 000008 02.... LJMP ??Subroutine40_0 & 0xFFFF
1869 }
1870
1871 /*********************************************************************
1872 * @fn ZDApp_JoinReq
1873 *
1874 * @brief Request the device to join a parent in a network.
1875 *
1876 * @param channel -
1877 * @param panID -
1878 *
1879 * @return ZStatus_t
1880 */
\ In segment BANKED_CODE, align 1, keep-with-next
1881 ZStatus_t ZDApp_JoinReq( uint8 channel, uint16 panID, uint8 *extendedPanID,
\ ZDApp_JoinReq:
1882 uint16 chosenParent, uint8 parentDepth, uint8 stackProfile )
1883 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 REQUIRE ?V2
\ 000000 REQUIRE ?V3
\ 000000 74F4 MOV A,#-0xc
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 12
\ 000005 ; Auto size: 0
\ 000005 89.. MOV ?V2,R1
\ 000007 EA MOV A,R2
\ 000008 FE MOV R6,A
\ 000009 EB MOV A,R3
\ 00000A FF MOV R7,A
\ 00000B 8C.. MOV ?V0,R4
\ 00000D 8D.. MOV ?V1,R5
1884 // Sync up the node with the stack profile (In the case where a pro device
1885 // joins a non-pro network, or verse versa)
1886 ZDApp_NodeProfileSync( stackProfile);
\ 00000F ; Setup parameters for call to function ZDApp_NodeProfileSync
\ 00000F 740F MOV A,#0xf
\ 000011 12.... LCALL ?XSTACK_DISP0_8
\ 000014 E0 MOVX A,@DPTR
\ 000015 F9 MOV R1,A
\ 000016 12.... LCALL `??ZDApp_NodeProfileSync::?relay`; Banked call to: ZDApp_NodeProfileSync
1887
1888 // Request NLME Join Request
1889 return NLME_JoinRequest(extendedPanID, panID,channel,
1890 ZDO_Config_Node_Descriptor.CapabilityFlags,
1891 chosenParent, parentDepth);
\ 000019 ; Setup parameters for call to function NLME_JoinRequest
\ 000019 740E MOV A,#0xe
\ 00001B 12.... LCALL ?XSTACK_DISP0_8
\ 00001E E0 MOVX A,@DPTR
\ 00001F F5.. MOV ?V3,A
\ 000021 78.. MOV R0,#?V3
\ 000023 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 000026 740D MOV A,#0xd
\ 000028 12.... LCALL ?XSTACK_DISP0_8
\ 00002B 12.... LCALL ?PUSH_XSTACK8_X_TWO
\ 00002E 90.... MOV DPTR,#ZDO_Config_Node_Descriptor + 2
\ 000031 E0 MOVX A,@DPTR
\ 000032 F5.. MOV ?V3,A
\ 000034 78.. MOV R0,#?V3
\ 000036 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 000039 A9.. MOV R1,?V2
\ 00003B EE MOV A,R6
\ 00003C FC MOV R4,A
\ 00003D EF MOV A,R7
\ 00003E FD MOV R5,A
\ 00003F AA.. MOV R2,?V0
\ 000041 AB.. MOV R3,?V1
\ 000043 12.... LCALL `??NLME_JoinRequest::?relay`; Banked call to: NLME_JoinRequest
\ 000046 7404 MOV A,#0x4
\ 000048 02.... LJMP ??Subroutine39_0 & 0xFFFF
1892
1893 }
1894
1895 /*********************************************************************
1896 * @fn ZDApp_DeviceConfigured
1897 *
1898 * @brief Check to see if the local device is configured (i.e., part
1899 * of a network).
1900 *
1901 * @param none
1902 *
1903 * @return TRUE if configured. FALSE, otherwise.
1904 */
\ In segment BANKED_CODE, align 1, keep-with-next
1905 uint8 ZDApp_DeviceConfigured( void )
\ ZDApp_DeviceConfigured:
1906 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 74F6 MOV A,#-0xa
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 10
\ 000005 ; Auto size: 2
\ 000005 74FE MOV A,#-0x2
\ 000007 12.... LCALL ?ALLOC_XSTACK8
1907 uint16 nwkAddr = INVALID_NODE_ADDR;
\ 00000A 85..82 MOV DPL,?XSP + 0
\ 00000D 85..83 MOV DPH,?XSP + 1
\ 000010 74FE MOV A,#-0x2
\ 000012 F0 MOVX @DPTR,A
\ 000013 A3 INC DPTR
\ 000014 04 INC A
\ 000015 F0 MOVX @DPTR,A
1908
1909 osal_nv_read( ZCD_NV_NIB, osal_offsetof( nwkIB_t, nwkDevAddress ),
1910 sizeof( uint16), &nwkAddr );
\ 000016 ; Setup parameters for call to function osal_nv_read
\ 000016 A8.. MOV R0,?XSP + 0
\ 000018 A9.. MOV R1,?XSP + 1
\ 00001A 88.. MOV ?V0,R0
\ 00001C 89.. MOV ?V1,R1
\ 00001E 78.. MOV R0,#?V0
\ 000020 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000023 75..02 MOV ?V0,#0x2
\ 000026 75..00 MOV ?V1,#0x0
\ 000029 78.. MOV R0,#?V0
\ 00002B 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00002E 7C14 MOV R4,#0x14
\ 000030 7D00 MOV R5,#0x0
\ 000032 7A21 MOV R2,#0x21
\ 000034 12.... LCALL ?Subroutine29 & 0xFFFF
\ ??CrossCallReturnLabel_32:
\ 000037 12.... LCALL ?DEALLOC_XSTACK8
1911
1912 // Does the NIB have anything more than default?
1913 return ( nwkAddr == INVALID_NODE_ADDR ? FALSE : TRUE );
\ 00003A 85..82 MOV DPL,?XSP + 0
\ 00003D 85..83 MOV DPH,?XSP + 1
\ 000040 E0 MOVX A,@DPTR
\ 000041 64FE XRL A,#0xfe
\ 000043 7003 JNZ ??ZDApp_DeviceConfigured_0
\ 000045 A3 INC DPTR
\ 000046 E0 MOVX A,@DPTR
\ 000047 F4 CPL A
\ ??ZDApp_DeviceConfigured_0:
\ 000048 7004 JNZ ??ZDApp_DeviceConfigured_1
\ 00004A 7900 MOV R1,#0x0
\ 00004C 8002 SJMP ??ZDApp_DeviceConfigured_2
\ ??ZDApp_DeviceConfigured_1:
\ 00004E 7901 MOV R1,#0x1
\ ??ZDApp_DeviceConfigured_2:
\ 000050 02.... LJMP ?Subroutine7 & 0xFFFF
1914 }
1915
1916 /*********************************************************************
1917 * CALLBACK FUNCTIONS
1918 */
1919
1920
1921 /*********************************************************************
1922 * @fn ZDApp_SendEventMsg()
1923 *
1924 * @brief
1925 *
1926 * Sends a Network Join message
1927 *
1928 * @param cmd - command ID
1929 * @param len - length (in bytes) of the buf field
1930 * @param buf - buffer for the rest of the message.
1931 *
1932 * @return none
1933 */
\ In segment BANKED_CODE, align 1, keep-with-next
1934 void ZDApp_SendEventMsg( uint8 cmd, uint8 len, uint8 *buf )
\ ZDApp_SendEventMsg:
1935 {
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 0
\ 000005 EA MOV A,R2
1936 ZDApp_SendMsg( ZDAppTaskID, cmd, len, buf );
\ 000006 ; Setup parameters for call to function ZDApp_SendMsg
\ 000006 FB MOV R3,A
\ 000007 E9 MOV A,R1
\ 000008 FA MOV R2,A
\ 000009 12.... LCALL ?Subroutine20 & 0xFFFF
1937 }
\ ??CrossCallReturnLabel_13:
\ 00000C 02.... LJMP ??Subroutine48_0 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine20:
\ 000000 90.... MOV DPTR,#ZDAppTaskID
\ 000003 E0 MOVX A,@DPTR
\ 000004 F9 MOV R1,A
\ 000005 12.... LCALL `??ZDApp_SendMsg::?relay`; Banked call to: ZDApp_SendMsg
\ 000008 22 RET
1938
1939 /*********************************************************************
1940 * @fn ZDApp_SendMsg()
1941 *
1942 * @brief Sends a OSAL message
1943 *
1944 * @param taskID - Where to send the message
1945 * @param cmd - command ID
1946 * @param len - length (in bytes) of the buf field
1947 * @param buf - buffer for the rest of the message.
1948 *
1949 * @return none
1950 */
\ In segment BANKED_CODE, align 1, keep-with-next
1951 void ZDApp_SendMsg( uint8 taskID, uint8 cmd, uint8 len, uint8 *buf )
\ ZDApp_SendMsg:
1952 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 REQUIRE ?V2
\ 000000 REQUIRE ?V3
\ 000000 REQUIRE ?V4
\ 000000 REQUIRE ?V5
\ 000000 REQUIRE ?V6
\ 000000 REQUIRE ?V7
\ 000000 74F0 MOV A,#-0x10
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 16
\ 000005 ; Auto size: 0
\ 000005 89.. MOV ?V7,R1
\ 000007 8A.. MOV ?V6,R2
\ 000009 8B.. MOV ?V3,R3
\ 00000B 8C.. MOV ?V0,R4
\ 00000D 8D.. MOV ?V1,R5
1953 osal_event_hdr_t *msgPtr;
1954
1955 // Send the address to the task
1956 msgPtr = (osal_event_hdr_t *)osal_msg_allocate( len );
\ 00000F ; Setup parameters for call to function osal_msg_allocate
\ 00000F AA.. MOV R2,?V3
\ 000011 7B00 MOV R3,#0x0
\ 000013 12.... LCALL `??osal_msg_allocate::?relay`; Banked call to: osal_msg_allocate
\ 000016 8A.. MOV ?V4,R2
\ 000018 8B.. MOV ?V5,R3
\ 00001A AE.. MOV R6,?V4
\ 00001C AF.. MOV R7,?V5
1957 if ( msgPtr )
\ 00001E EA MOV A,R2
\ 00001F 4F ORL A,R7
\ 000020 602E JZ ??ZDApp_SendMsg_0
1958 {
1959 if ( (len > 0) && (buf != NULL) )
\ 000022 E5.. MOV A,?V3
\ 000024 601A JZ ??ZDApp_SendMsg_1
\ 000026 E5.. MOV A,?V0
\ 000028 45.. ORL A,?V1
\ 00002A 6014 JZ ??ZDApp_SendMsg_1
1960 osal_memcpy( msgPtr, buf, len );
\ 00002C ; Setup parameters for call to function osal_memcpy
\ 00002C 75..00 MOV ?V2,#0x0
\ 00002F 78.. MOV R0,#?V0
\ 000031 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 000034 AC.. MOV R4,?V3
\ 000036 7D00 MOV R5,#0x0
\ 000038 12.... LCALL `??osal_memcpy::?relay`; Banked call to: osal_memcpy
\ 00003B 7403 MOV A,#0x3
\ 00003D 12.... LCALL ?DEALLOC_XSTACK8
1961
1962 msgPtr->event = cmd;
\ ??ZDApp_SendMsg_1:
\ 000040 8E82 MOV DPL,R6
\ 000042 8F83 MOV DPH,R7
\ 000044 E5.. MOV A,?V6
\ 000046 F0 MOVX @DPTR,A
1963 osal_msg_send( taskID, (uint8 *)msgPtr );
\ 000047 ; Setup parameters for call to function osal_msg_send
\ 000047 EE MOV A,R6
\ 000048 FA MOV R2,A
\ 000049 EF MOV A,R7
\ 00004A FB MOV R3,A
\ 00004B A9.. MOV R1,?V7
\ 00004D 12.... LCALL `??osal_msg_send::?relay`; Banked call to: osal_msg_send
1964 }
1965 }
\ ??ZDApp_SendMsg_0:
\ 000050 7F08 MOV R7,#0x8
\ 000052 02.... LJMP ?BANKED_LEAVE_XDATA
1966
1967 /*********************************************************************
1968 * Call Back Functions from NWK - API
1969 */
1970
1971 /*********************************************************************
1972 * @fn ZDO_NetworkDiscoveryConfirmCB
1973 *
1974 * @brief This function returns a choice of PAN to join.
1975 *
1976 * @param status - return status of the nwk discovery confirm
1977 *
1978 * @return ZStatus_t
1979 */
\ In segment BANKED_CODE, align 1, keep-with-next
1980 ZStatus_t ZDO_NetworkDiscoveryConfirmCB(uint8 status)
\ ZDO_NetworkDiscoveryConfirmCB:
1981 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 3
\ 000004 74FD MOV A,#-0x3
\ 000006 12.... LCALL ?ALLOC_XSTACK8
\ 000009 E9 MOV A,R1
\ 00000A 85..82 MOV DPL,?XSP + 0
\ 00000D 85..83 MOV DPH,?XSP + 1
\ 000010 F0 MOVX @DPTR,A
1982 osal_event_hdr_t msg;
1983
1984 // If Scan is initiated by ZDO_MGMT_NWK_DISC_REQ
1985 // Send ZDO_MGMT_NWK_DISC_RSP back
1986 #if defined ( ZDO_MGMT_NWKDISC_RESPONSE )
1987 if ( zdappMgmtNwkDiscReqInProgress )
1988 {
1989 zdappMgmtNwkDiscReqInProgress = false;
1990 ZDO_FinishProcessingMgmtNwkDiscReq();
1991 }
1992 else
1993 #endif
1994 {
1995 // Pass the confirm to another task if it registers the callback
1996 // Otherwise, pass the confirm to ZDApp.
1997 if (zdoCBFunc[ZDO_NWK_DISCOVERY_CNF_CBID] != NULL )
\ 000011 90.... MOV DPTR,#zdoCBFunc + 4
\ 000014 12.... LCALL ?Subroutine13 & 0xFFFF
\ ??CrossCallReturnLabel_4:
\ 000017 600C JZ ??ZDO_NetworkDiscoveryConfirmCB_0
1998 {
1999 zdoCBFunc[ZDO_NWK_DISCOVERY_CNF_CBID]( (void*)&status );
\ 000019 ; Setup parameters for indirect call
\ 000019 AA.. MOV R2,?XSP + 0
\ 00001B AB.. MOV R3,?XSP + 1
\ 00001D 12.... LCALL ??Subroutine54_0 & 0xFFFF
2000 }
\ ??CrossCallReturnLabel_85:
\ 000020 12.... LCALL ?CALL_IND
\ 000023 8012 SJMP ??CrossCallReturnLabel_14
2001 else
2002 {
2003 // Otherwise, send scan confirm to ZDApp task to proceed
2004 msg.status = ZDO_SUCCESS;
\ ??ZDO_NetworkDiscoveryConfirmCB_0:
\ 000025 7402 MOV A,#0x2
\ 000027 12.... LCALL ?XSTACK_DISP0_8
\ 00002A E4 CLR A
\ 00002B F0 MOVX @DPTR,A
2005 ZDApp_SendMsg( ZDAppTaskID, ZDO_NWK_DISC_CNF, sizeof(osal_event_hdr_t), (uint8 *)&msg );
\ 00002C ; Setup parameters for call to function ZDApp_SendMsg
\ 00002C 04 INC A
\ 00002D 12.... LCALL ?XSTACK_DISP102_8
\ 000030 7B02 MOV R3,#0x2
\ 000032 7A01 MOV R2,#0x1
\ 000034 12.... LCALL ?Subroutine20 & 0xFFFF
2006 }
2007 }
2008 return (ZSuccess);
\ ??CrossCallReturnLabel_14:
\ 000037 7900 MOV R1,#0x0
\ 000039 7403 MOV A,#0x3
\ 00003B 12.... LCALL ?DEALLOC_XSTACK8
\ 00003E REQUIRE ?Subroutine3
\ 00003E ; // Fall through to label ?Subroutine3
2009 } // ZDO_NetworkDiscoveryConfirmCB
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine13:
\ 000000 E0 MOVX A,@DPTR
\ 000001 F8 MOV R0,A
\ 000002 A3 INC DPTR
\ 000003 E0 MOVX A,@DPTR
\ 000004 F9 MOV R1,A
\ 000005 E8 MOV A,R0
\ 000006 49 ORL A,R1
\ 000007 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine54_0:
\ 000000 E0 MOVX A,@DPTR
\ 000001 F583 MOV DPH,A
\ 000003 8882 MOV DPL,R0
\ 000005 22 RET
2010
2011 /*********************************************************************
2012 * @fn ZDApp_NwkDescListProcessing
2013 *
2014 * @brief This function process the network discovery result and select
2015 * a parent device to join itself.
2016 *
2017 * @param none
2018 *
2019 * @return ZStatus_t
2020 */
2021 #define STACK_PROFILE_MAX 2
\ In segment BANKED_CODE, align 1, keep-with-next
2022 networkDesc_t* ZDApp_NwkDescListProcessing(void)
\ ZDApp_NwkDescListProcessing:
2023 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 REQUIRE ?V2
\ 000000 REQUIRE ?V3
\ 000000 REQUIRE ?V4
\ 000000 REQUIRE ?V5
\ 000000 74F2 MOV A,#-0xe
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 14
\ 000005 ; Auto size: 0
2024 networkDesc_t *pNwkDesc;
2025 uint8 i, ResultCount = 0;
\ 000005 75..00 MOV ?V3,#0x0
2026 uint8 stackProfile;
2027 uint8 stackProfilePro;
2028 uint8 selected;
2029
2030 // Count the number of nwk descriptors in the list
2031 pNwkDesc = nwk_getNwkDescList();
\ 000008 ; Setup parameters for call to function nwk_getNwkDescList
\ 000008 12.... LCALL `??nwk_getNwkDescList::?relay`; Banked call to: nwk_getNwkDescList
\ 00000B 8A.. MOV ?V0,R2
\ 00000D 8B.. MOV ?V1,R3
\ 00000F AE.. MOV R6,?V0
\ 000011 AF.. MOV R7,?V1
\ 000013 8005 SJMP ??CrossCallReturnLabel_79
2032 while (pNwkDesc)
2033 {
2034 ResultCount++;
\ ??ZDApp_NwkDescListProcessing_0:
\ 000015 05.. INC ?V3
2035 pNwkDesc = pNwkDesc->nextDesc;
\ 000017 12.... LCALL ?Subroutine18 & 0xFFFF
2036 }
\ ??CrossCallReturnLabel_79:
\ 00001A EE MOV A,R6
\ 00001B 4F ORL A,R7
\ 00001C 70F7 JNZ ??ZDApp_NwkDescListProcessing_0
2037
2038 // process discovery results
2039 stackProfilePro = FALSE;
\ 00001E 75..00 MOV ?V2,#0x0
2040 selected = FALSE;
2041
2042
2043 for ( stackProfile = 0; stackProfile < STACK_PROFILE_MAX; stackProfile++ )
\ 000021 75..00 MOV ?V0,#0x0
2044 {
2045 pNwkDesc = nwk_getNwkDescList();
\ ??ZDApp_NwkDescListProcessing_1:
\ 000024 ; Setup parameters for call to function nwk_getNwkDescList
\ 000024 12.... LCALL `??nwk_getNwkDescList::?relay`; Banked call to: nwk_getNwkDescList
\ 000027 8A.. MOV ?V4,R2
\ 000029 8B.. MOV ?V5,R3
\ 00002B AE.. MOV R6,?V4
\ 00002D AF.. MOV R7,?V5
2046 for ( i = 0; i < ResultCount; i++, pNwkDesc = pNwkDesc->nextDesc )
\ 00002F 75..00 MOV ?V1,#0x0
\ 000032 8023 SJMP ??CrossCallReturnLabel_80
2047 {
2048 if ( zgConfigPANID != 0xFFFF )
2049 {
2050 // PAN Id is preconfigured. check if it matches
2051 if ( pNwkDesc->panId != zgConfigPANID )
2052 continue;
2053 }
2054
2055 if ( nwk_ExtPANIDValid( ZDO_UseExtendedPANID) == true )
2056 {
2057 // If the extended Pan ID is commissioned to a non zero value
2058 // Only join the Pan that has match EPID
2059 if ( osal_ExtAddrEqual( ZDO_UseExtendedPANID, pNwkDesc->extendedPANID) == false )
2060 continue;
2061
2062 }
2063
2064 // check that network is allowing joining
2065 if ( ZSTACK_ROUTER_BUILD )
2066 {
2067 if ( stackProfilePro == FALSE )
2068 {
2069 if ( !pNwkDesc->routerCapacity )
2070 {
2071 continue;
2072 }
2073 }
2074 else
2075 {
2076 if ( !pNwkDesc->deviceCapacity )
2077 {
2078 continue;
2079 }
2080 }
2081 }
2082 else if ( ZSTACK_END_DEVICE_BUILD )
2083 {
2084 if ( !pNwkDesc->deviceCapacity )
2085 {
2086 continue;
2087 }
2088 }
2089
2090 // check version of zigbee protocol
2091 if ( pNwkDesc->version != _NIB.nwkProtocolVersion )
2092 continue;
2093
2094 // check version of stack profile
2095 if ( pNwkDesc->stackProfile != zgStackProfile )
2096 {
2097 if ( ((zgStackProfile == HOME_CONTROLS) && (pNwkDesc->stackProfile == ZIGBEEPRO_PROFILE))
2098 || ((zgStackProfile == ZIGBEEPRO_PROFILE) && (pNwkDesc->stackProfile == HOME_CONTROLS)) )
\ ??ZDApp_NwkDescListProcessing_2:
\ 000034 E0 MOVX A,@DPTR
\ 000035 6402 XRL A,#0x2
\ 000037 7012 JNZ ??ZDApp_NwkDescListProcessing_3
\ 000039 8E82 MOV DPL,R6
\ 00003B 8F83 MOV DPH,R7
\ 00003D A3 INC DPTR
\ 00003E A3 INC DPTR
\ 00003F A3 INC DPTR
\ 000040 A3 INC DPTR
\ 000041 A3 INC DPTR
\ 000042 A3 INC DPTR
\ 000043 E0 MOVX A,@DPTR
\ 000044 6401 XRL A,#0x1
\ 000046 7003 JNZ ??ZDApp_NwkDescListProcessing_3
2099 {
2100 stackProfilePro = TRUE;
\ ??ZDApp_NwkDescListProcessing_4:
\ 000048 75..01 MOV ?V2,#0x1
2101 }
2102
2103 if ( stackProfile == 0 )
\ ??ZDApp_NwkDescListProcessing_3:
\ 00004B E5.. MOV A,?V0
\ 00004D 6003 JZ $+5
\ 00004F 02.... LJMP ??ZDApp_NwkDescListProcessing_5 & 0xFFFF
\ ??ZDApp_NwkDescListProcessing_6:
\ 000052 05.. INC ?V1
\ 000054 12.... LCALL ?Subroutine18 & 0xFFFF
\ ??CrossCallReturnLabel_80:
\ 000057 E5.. MOV A,?V1
\ 000059 C3 CLR C
\ 00005A 95.. SUBB A,?V3
\ 00005C 4003 JC $+5
\ 00005E 02.... LJMP ??ZDApp_NwkDescListProcessing_7 & 0xFFFF
\ 000061 90.... MOV DPTR,#zgConfigPANID
\ 000064 E0 MOVX A,@DPTR
\ 000065 F4 CPL A
\ 000066 7003 JNZ ??ZDApp_NwkDescListProcessing_8
\ 000068 A3 INC DPTR
\ 000069 E0 MOVX A,@DPTR
\ 00006A F4 CPL A
\ ??ZDApp_NwkDescListProcessing_8:
\ 00006B 600F JZ ??ZDApp_NwkDescListProcessing_9
\ 00006D 12.... LCALL ?Subroutine16 & 0xFFFF
\ ??CrossCallReturnLabel_74:
\ 000070 90.... MOV DPTR,#zgConfigPANID
\ 000073 E0 MOVX A,@DPTR
\ 000074 68 XRL A,R0
\ 000075 7003 JNZ ??ZDApp_NwkDescListProcessing_10
\ 000077 A3 INC DPTR
\ 000078 E0 MOVX A,@DPTR
\ 000079 69 XRL A,R1
\ ??ZDApp_NwkDescListProcessing_10:
\ 00007A 70D6 JNZ ??ZDApp_NwkDescListProcessing_6
\ ??ZDApp_NwkDescListProcessing_9:
\ 00007C ; Setup parameters for call to function nwk_ExtPANIDValid
\ 00007C 7A.. MOV R2,#ZDO_UseExtendedPANID & 0xff
\ 00007E 7B.. MOV R3,#(ZDO_UseExtendedPANID >> 8) & 0xff
\ 000080 12.... LCALL `??nwk_ExtPANIDValid::?relay`; Banked call to: nwk_ExtPANIDValid
\ 000083 E9 MOV A,R1
\ 000084 6401 XRL A,#0x1
\ 000086 7011 JNZ ??ZDApp_NwkDescListProcessing_11
\ 000088 ; Setup parameters for call to function sAddrExtCmp
\ 000088 EE MOV A,R6
\ 000089 240B ADD A,#0xb
\ 00008B FC MOV R4,A
\ 00008C E4 CLR A
\ 00008D 3F ADDC A,R7
\ 00008E FD MOV R5,A
\ 00008F 7A.. MOV R2,#ZDO_UseExtendedPANID & 0xff
\ 000091 7B.. MOV R3,#(ZDO_UseExtendedPANID >> 8) & 0xff
\ 000093 12.... LCALL `??sAddrExtCmp::?relay`; Banked call to: sAddrExtCmp
\ 000096 E9 MOV A,R1
\ 000097 60B9 JZ ??ZDApp_NwkDescListProcessing_6
\ ??ZDApp_NwkDescListProcessing_11:
\ 000099 8E82 MOV DPL,R6
\ 00009B 8F83 MOV DPH,R7
\ 00009D A3 INC DPTR
\ 00009E A3 INC DPTR
\ 00009F A3 INC DPTR
\ 0000A0 A3 INC DPTR
\ 0000A1 E0 MOVX A,@DPTR
\ 0000A2 60AE JZ ??ZDApp_NwkDescListProcessing_6
\ 0000A4 8E82 MOV DPL,R6
\ 0000A6 8F83 MOV DPH,R7
\ 0000A8 A3 INC DPTR
\ 0000A9 A3 INC DPTR
\ 0000AA A3 INC DPTR
\ 0000AB A3 INC DPTR
\ 0000AC A3 INC DPTR
\ 0000AD E0 MOVX A,@DPTR
\ 0000AE F8 MOV R0,A
\ 0000AF 90.... MOV DPTR,#_NIB + 17
\ 0000B2 E0 MOVX A,@DPTR
\ 0000B3 68 XRL A,R0
\ 0000B4 709C JNZ ??ZDApp_NwkDescListProcessing_6
\ 0000B6 8E82 MOV DPL,R6
\ 0000B8 8F83 MOV DPH,R7
\ 0000BA A3 INC DPTR
\ 0000BB A3 INC DPTR
\ 0000BC A3 INC DPTR
\ 0000BD A3 INC DPTR
\ 0000BE A3 INC DPTR
\ 0000BF A3 INC DPTR
\ 0000C0 E0 MOVX A,@DPTR
\ 0000C1 F8 MOV R0,A
\ 0000C2 90.... MOV DPTR,#zgStackProfile
\ 0000C5 E0 MOVX A,@DPTR
\ 0000C6 68 XRL A,R0
\ 0000C7 6039 JZ ??ZDApp_NwkDescListProcessing_5
\ 0000C9 E0 MOVX A,@DPTR
\ 0000CA 6401 XRL A,#0x1
\ 0000CC 6003 JZ $+5
\ 0000CE 02.... LJMP ??ZDApp_NwkDescListProcessing_2 & 0xFFFF
\ 0000D1 8E82 MOV DPL,R6
\ 0000D3 8F83 MOV DPH,R7
\ 0000D5 A3 INC DPTR
\ 0000D6 A3 INC DPTR
\ 0000D7 A3 INC DPTR
\ 0000D8 A3 INC DPTR
\ 0000D9 A3 INC DPTR
\ 0000DA A3 INC DPTR
\ 0000DB E0 MOVX A,@DPTR
\ 0000DC 6402 XRL A,#0x2
\ 0000DE 6003 JZ $+5
\ 0000E0 02.... LJMP ??ZDApp_NwkDescListProcessing_3 & 0xFFFF
\ 0000E3 02.... LJMP ??ZDApp_NwkDescListProcessing_4 & 0xFFFF
2104 {
2105 continue;
2106 }
2107 }
2108
2109 break;
2110 }
2111
2112 if (i < ResultCount)
2113 {
2114 selected = TRUE;
2115 break;
2116 }
2117
2118 // break if selected or stack profile pro wasn't found
2119 if ( (selected == TRUE) || (stackProfilePro == FALSE) )
\ ??ZDApp_NwkDescListProcessing_7:
\ 0000E6 E5.. MOV A,?V2
\ 0000E8 600C JZ ??ZDApp_NwkDescListProcessing_12
2120 {
2121 break;
2122 }
2123 }
\ 0000EA 05.. INC ?V0
\ 0000EC E5.. MOV A,?V0
\ 0000EE C3 CLR C
\ 0000EF 9402 SUBB A,#0x2
\ 0000F1 5003 JNC $+5
\ 0000F3 02.... LJMP ??ZDApp_NwkDescListProcessing_1 & 0xFFFF
2124
2125 if ( i == ResultCount )
\ ??ZDApp_NwkDescListProcessing_12:
\ 0000F6 E5.. MOV A,?V3
\ 0000F8 65.. XRL A,?V1
\ 0000FA 7006 JNZ ??ZDApp_NwkDescListProcessing_5
2126 {
2127 return (NULL); // couldn't find appropriate PAN to join !
\ 0000FC 7A00 MOV R2,#0x0
\ 0000FE 7B00 MOV R3,#0x0
\ 000100 8004 SJMP ??ZDApp_NwkDescListProcessing_13
2128 }
2129 else
2130 {
2131 return (pNwkDesc);
\ ??ZDApp_NwkDescListProcessing_5:
\ 000102 EE MOV A,R6
\ 000103 FA MOV R2,A
\ 000104 EF MOV A,R7
\ 000105 FB MOV R3,A
2132 }
\ ??ZDApp_NwkDescListProcessing_13:
\ 000106 REQUIRE ?Subroutine5
\ 000106 ; // Fall through to label ?Subroutine5
2133 }// ZDApp_NwkDescListProcessing()
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine5:
\ 000000 7F06 MOV R7,#0x6
\ 000002 02.... LJMP ?BANKED_LEAVE_XDATA
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine18:
\ 000000 EE MOV A,R6
\ 000001 2414 ADD A,#0x14
\ 000003 F582 MOV DPL,A
\ 000005 E4 CLR A
\ 000006 3F ADDC A,R7
\ 000007 F583 MOV DPH,A
\ 000009 REQUIRE ??Subroutine50_0
\ 000009 ; // Fall through to label ??Subroutine50_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine50_0:
\ 000000 E0 MOVX A,@DPTR
\ 000001 FE MOV R6,A
\ 000002 A3 INC DPTR
\ 000003 E0 MOVX A,@DPTR
\ 000004 FF MOV R7,A
\ 000005 22 RET
2134
2135 /*********************************************************************
2136 * @fn ZDO_NetworkFormationConfirmCB
2137 *
2138 * @brief This function reports the results of the request to
2139 * initialize a coordinator in a network.
2140 *
2141 * @param Status - Result of NLME_NetworkFormationRequest()
2142 *
2143 * @return none
2144 */
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine0:
\ 000000 12.... LCALL ??Subroutine41_0 & 0xFFFF
\ ??CrossCallReturnLabel_54:
\ 000003 REQUIRE ??Subroutine48_0
\ 000003 ; // Fall through to label ??Subroutine48_0
\ In segment BANKED_CODE, align 1, keep-with-next
2145 void ZDO_NetworkFormationConfirmCB( ZStatus_t Status )
\ ZDO_NetworkFormationConfirmCB:
2146 {
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 0
\ 000005 E9 MOV A,R1
2147 nwkStatus = (byte)Status;
\ 000006 90.... MOV DPTR,#nwkStatus
\ 000009 F0 MOVX @DPTR,A
2148
2149 if ( Status == ZSUCCESS )
\ 00000A 7009 JNZ ??ZDO_NetworkFormationConfirmCB_0
2150 {
2151 #if 0
2152 // LED on shows Coordinator started
2153 HalLedSet ( HAL_LED_3, HAL_LED_MODE_ON );
2154
2155 // LED off forgets HOLD_AUTO_START
2156 HalLedSet (HAL_LED_4, HAL_LED_MODE_OFF);
2157 #endif
2158 #if defined ( ZBIT )
2159 SIM_SetColor(0xd0ffd0);
2160 #endif
2161
2162 if ( devState == DEV_HOLD )
\ 00000C 90.... MOV DPTR,#devState
\ 00000F E0 MOVX A,@DPTR
\ 000010 7003 JNZ ??ZDO_NetworkFormationConfirmCB_0
2163 {
2164 // Began with HOLD_AUTO_START
2165 devState = DEV_COORD_STARTING;
\ 000012 7408 MOV A,#0x8
\ 000014 F0 MOVX @DPTR,A
2166 }
2167 }
2168 #if defined(BLINK_LEDS)
2169 else
2170 {
2171 #if 0
2172 HalLedSet ( HAL_LED_3, HAL_LED_MODE_FLASH ); // Flash LED to show failure
2173 #endif
2174 }
2175 #endif
2176
2177 osal_set_event( ZDAppTaskID, ZDO_NETWORK_START );
\ ??ZDO_NetworkFormationConfirmCB_0:
\ 000015 ; Setup parameters for call to function osal_set_event
\ 000015 7A02 MOV R2,#0x2
\ 000017 02.... LJMP ?Subroutine0 & 0xFFFF
2178 }
2179
2180 /****************************************************************************
2181 * @fn ZDApp_beaconIndProcessing
2182 *
2183 * @brief This function processes the incoming beacon indication.
2184 *
2185 * When another task (MT or App) is registered to process
2186 * beacon indication themselves, this function will parse the
2187 * beacon payload and pass the beacon descriptor to that task
2188 * If no other tasks registered, this function will process
2189 * the beacon payload and generate the network descriptor link
2190 * list.
2191 *
2192 * @param
2193 *
2194 * @return none
2195 *
2196 */
\ In segment BANKED_CODE, align 1, keep-with-next
2197 void ZDO_beaconNotifyIndCB( NLME_beaconInd_t *pBeacon )
\ ZDO_beaconNotifyIndCB:
2198 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 REQUIRE ?V2
\ 000000 REQUIRE ?V3
\ 000000 REQUIRE ?V4
\ 000000 REQUIRE ?V5
\ 000000 74F2 MOV A,#-0xe
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 14
\ 000005 ; Auto size: 0
\ 000005 8A.. MOV ?V0,R2
\ 000007 8B.. MOV ?V1,R3
2199 // Pass the beacon Indication to another task if it registers the callback
2200 // Otherwise, process the beacon notification here.
2201 if (zdoCBFunc[ZDO_BEACON_NOTIFY_IND_CBID] != NULL )
\ 000009 90.... MOV DPTR,#zdoCBFunc + 6
\ 00000C 12.... LCALL ?Subroutine13 & 0xFFFF
\ ??CrossCallReturnLabel_5:
\ 00000F 6009 JZ ??ZDO_beaconNotifyIndCB_0
2202 {
2203 zdoCBFunc[ZDO_BEACON_NOTIFY_IND_CBID]( (void*)pBeacon );
\ 000011 ; Setup parameters for indirect call
\ 000011 12.... LCALL ??Subroutine54_0 & 0xFFFF
2204 }
\ ??CrossCallReturnLabel_86:
\ 000014 12.... LCALL ?CALL_IND
\ 000017 02.... LJMP ??ZDO_beaconNotifyIndCB_1 & 0xFFFF
2205 else
2206 {
2207 networkDesc_t *pNwkDesc;
2208 networkDesc_t *pLastNwkDesc;
2209 uint8 found = false;
2210
2211 // Add the network to the Network Descriptor List
2212 pNwkDesc = NwkDescList;
\ ??ZDO_beaconNotifyIndCB_0:
\ 00001A 90.... MOV DPTR,#NwkDescList
\ 00001D 12.... LCALL ??Subroutine50_0 & 0xFFFF
2213 pLastNwkDesc = NwkDescList;
\ ??CrossCallReturnLabel_76:
\ 000020 90.... MOV DPTR,#NwkDescList
\ 000023 E0 MOVX A,@DPTR
\ 000024 F5.. MOV ?V2,A
\ 000026 A3 INC DPTR
\ 000027 E0 MOVX A,@DPTR
\ 000028 F5.. MOV ?V3,A
\ 00002A 802D SJMP ??CrossCallReturnLabel_81
2214 while (pNwkDesc)
2215 {
2216 if ((pNwkDesc->panId == pBeacon->panID) &&
2217 (pNwkDesc->logicalChannel == pBeacon->logicalChannel))
\ ??ZDO_beaconNotifyIndCB_2:
\ 00002C 12.... LCALL ?Subroutine16 & 0xFFFF
\ ??CrossCallReturnLabel_75:
\ 00002F 8A82 MOV DPL,R2
\ 000031 8B83 MOV DPH,R3
\ 000033 A3 INC DPTR
\ 000034 A3 INC DPTR
\ 000035 E0 MOVX A,@DPTR
\ 000036 68 XRL A,R0
\ 000037 7003 JNZ ??ZDO_beaconNotifyIndCB_3
\ 000039 A3 INC DPTR
\ 00003A E0 MOVX A,@DPTR
\ 00003B 69 XRL A,R1
\ ??ZDO_beaconNotifyIndCB_3:
\ 00003C 7014 JNZ ??ZDO_beaconNotifyIndCB_4
\ 00003E 8E82 MOV DPL,R6
\ 000040 8F83 MOV DPH,R7
\ 000042 A3 INC DPTR
\ 000043 A3 INC DPTR
\ 000044 E0 MOVX A,@DPTR
\ 000045 F8 MOV R0,A
\ 000046 8A82 MOV DPL,R2
\ 000048 8B83 MOV DPH,R3
\ 00004A A3 INC DPTR
\ 00004B A3 INC DPTR
\ 00004C A3 INC DPTR
\ 00004D A3 INC DPTR
\ 00004E E0 MOVX A,@DPTR
\ 00004F 68 XRL A,R0
\ 000050 6067 JZ ??ZDO_beaconNotifyIndCB_5
2218 {
2219 found = true;
2220 break;
2221 }
2222 pLastNwkDesc = pNwkDesc;
\ ??ZDO_beaconNotifyIndCB_4:
\ 000052 8E.. MOV ?V2,R6
\ 000054 8F.. MOV ?V3,R7
2223 pNwkDesc = pNwkDesc->nextDesc;
\ 000056 12.... LCALL ?Subroutine18 & 0xFFFF
2224 }
\ ??CrossCallReturnLabel_81:
\ 000059 EE MOV A,R6
\ 00005A 4F ORL A,R7
\ 00005B 70CF JNZ ??ZDO_beaconNotifyIndCB_2
2225
2226 // If no existing descriptor found, make a new one and add to the list
2227 if (found == false)
2228 {
2229 pNwkDesc = osal_mem_alloc( sizeof(networkDesc_t) );
\ 00005D ; Setup parameters for call to function osal_mem_alloc
\ 00005D 7A16 MOV R2,#0x16
\ 00005F 7B00 MOV R3,#0x0
\ 000061 12.... LCALL `??osal_mem_alloc::?relay`; Banked call to: osal_mem_alloc
\ 000064 8A.. MOV ?V4,R2
\ 000066 8B.. MOV ?V5,R3
\ 000068 AE.. MOV R6,?V4
\ 00006A AF.. MOV R7,?V5
2230 if ( !pNwkDesc )
\ 00006C EA MOV A,R2
\ 00006D 4F ORL A,R7
\ 00006E 7003 JNZ $+5
\ 000070 02.... LJMP ??ZDO_beaconNotifyIndCB_1 & 0xFFFF
2231 {
2232 // Memory alloc failed, discard this beacon
2233 return;
2234 }
2235
2236 // Clear the network descriptor
2237 osal_memset( pNwkDesc, 0, sizeof(networkDesc_t) );
\ 000073 ; Setup parameters for call to function osal_memset
\ 000073 7C16 MOV R4,#0x16
\ 000075 7D00 MOV R5,#0x0
\ 000077 7900 MOV R1,#0x0
\ 000079 12.... LCALL `??osal_memset::?relay`; Banked call to: osal_memset
2238
2239 // Initialize the descriptor
2240 pNwkDesc->chosenRouter = INVALID_NODE_ADDR;
\ 00007C 8E82 MOV DPL,R6
\ 00007E 8F83 MOV DPH,R7
\ 000080 A3 INC DPTR
\ 000081 A3 INC DPTR
\ 000082 A3 INC DPTR
\ 000083 A3 INC DPTR
\ 000084 A3 INC DPTR
\ 000085 A3 INC DPTR
\ 000086 A3 INC DPTR
\ 000087 74FE MOV A,#-0x2
\ 000089 F0 MOVX @DPTR,A
\ 00008A A3 INC DPTR
\ 00008B 04 INC A
\ 00008C F0 MOVX @DPTR,A
2241 pNwkDesc->chosenRouterDepth = 0xFF;
\ 00008D 8E82 MOV DPL,R6
\ 00008F 8F83 MOV DPH,R7
\ 000091 A3 INC DPTR
\ 000092 A3 INC DPTR
\ 000093 A3 INC DPTR
\ 000094 A3 INC DPTR
\ 000095 A3 INC DPTR
\ 000096 A3 INC DPTR
\ 000097 A3 INC DPTR
\ 000098 A3 INC DPTR
\ 000099 A3 INC DPTR
\ 00009A A3 INC DPTR
\ 00009B F0 MOVX @DPTR,A
2242
2243 // Save new entry into the descriptor list
2244 if ( !NwkDescList )
\ 00009C 90.... MOV DPTR,#NwkDescList
\ 00009F 12.... LCALL ?Subroutine13 & 0xFFFF
\ ??CrossCallReturnLabel_6:
\ 0000A2 7005 JNZ ??ZDO_beaconNotifyIndCB_6
2245 {
2246 NwkDescList = pNwkDesc;
\ 0000A4 90.... MOV DPTR,#NwkDescList
\ 0000A7 800B SJMP ??ZDO_beaconNotifyIndCB_7
2247 }
2248 else
2249 {
2250 pLastNwkDesc->nextDesc = pNwkDesc;
\ ??ZDO_beaconNotifyIndCB_6:
\ 0000A9 E5.. MOV A,?V2
\ 0000AB 2414 ADD A,#0x14
\ 0000AD F582 MOV DPL,A
\ 0000AF E4 CLR A
\ 0000B0 35.. ADDC A,?V3
\ 0000B2 F583 MOV DPH,A
\ ??ZDO_beaconNotifyIndCB_7:
\ 0000B4 EE MOV A,R6
\ 0000B5 F0 MOVX @DPTR,A
\ 0000B6 A3 INC DPTR
\ 0000B7 EF MOV A,R7
\ 0000B8 F0 MOVX @DPTR,A
2251 }
2252 }
2253
2254 // Update the descriptor with the incoming beacon
2255 pNwkDesc->stackProfile = pBeacon->stackProfile;
\ ??ZDO_beaconNotifyIndCB_5:
\ 0000B9 85..82 MOV DPL,?V0
\ 0000BC 85..83 MOV DPH,?V1
\ 0000BF A3 INC DPTR
\ 0000C0 A3 INC DPTR
\ 0000C1 A3 INC DPTR
\ 0000C2 A3 INC DPTR
\ 0000C3 A3 INC DPTR
\ 0000C4 A3 INC DPTR
\ 0000C5 A3 INC DPTR
\ 0000C6 A3 INC DPTR
\ 0000C7 A3 INC DPTR
\ 0000C8 12.... LCALL ?Subroutine21 & 0xFFFF
\ ??CrossCallReturnLabel_17:
\ 0000CB A3 INC DPTR
\ 0000CC F0 MOVX @DPTR,A
2256 pNwkDesc->version = pBeacon->protocolVersion;
\ 0000CD E5.. MOV A,?V0
\ 0000CF 2408 ADD A,#0x8
\ 0000D1 F8 MOV R0,A
\ 0000D2 E4 CLR A
\ 0000D3 35.. ADDC A,?V1
\ 0000D5 F9 MOV R1,A
\ 0000D6 8882 MOV DPL,R0
\ 0000D8 F583 MOV DPH,A
\ 0000DA 12.... LCALL ?Subroutine21 & 0xFFFF
\ ??CrossCallReturnLabel_18:
\ 0000DD 12.... LCALL ?Subroutine11 & 0xFFFF
2257 pNwkDesc->logicalChannel = pBeacon->logicalChannel;
\ ??CrossCallReturnLabel_2:
\ 0000E0 E0 MOVX A,@DPTR
\ 0000E1 8E82 MOV DPL,R6
\ 0000E3 8F83 MOV DPH,R7
\ 0000E5 A3 INC DPTR
\ 0000E6 A3 INC DPTR
\ 0000E7 12.... LCALL ?Subroutine33 & 0xFFFF
2258 pNwkDesc->panId = pBeacon->panID;
\ ??CrossCallReturnLabel_37:
\ 0000EA E0 MOVX A,@DPTR
\ 0000EB FA MOV R2,A
\ 0000EC A3 INC DPTR
\ 0000ED E0 MOVX A,@DPTR
\ 0000EE FB MOV R3,A
\ 0000EF 8E82 MOV DPL,R6
\ 0000F1 8F83 MOV DPH,R7
\ 0000F3 12.... LCALL ??Subroutine55_0 & 0xFFFF
2259 pNwkDesc->updateId = pBeacon->updateID;
\ ??CrossCallReturnLabel_97:
\ 0000F6 E5.. MOV A,?V0
\ 0000F8 240C ADD A,#0xc
\ 0000FA F582 MOV DPL,A
\ 0000FC E4 CLR A
\ 0000FD 35.. ADDC A,?V1
\ 0000FF F583 MOV DPH,A
\ 000101 E0 MOVX A,@DPTR
\ 000102 C0E0 PUSH A
\ 000104 EE MOV A,R6
\ 000105 2413 ADD A,#0x13
\ 000107 F582 MOV DPL,A
\ 000109 E4 CLR A
\ 00010A 3F ADDC A,R7
\ 00010B F583 MOV DPH,A
\ 00010D D0E0 POP A
\ 00010F F0 MOVX @DPTR,A
2260
2261 // Save the extended PAN ID from the beacon payload only if 1.1 version network
2262 if ( pBeacon->protocolVersion != ZB_PROT_V1_0 )
\ 000110 8882 MOV DPL,R0
\ 000112 8983 MOV DPH,R1
\ 000114 E0 MOVX A,@DPTR
\ 000115 6401 XRL A,#0x1
\ 000117 6010 JZ ??ZDO_beaconNotifyIndCB_8
2263 {
2264 osal_cpyExtAddr( pNwkDesc->extendedPANID, pBeacon->extendedPanID );
\ 000119 ; Setup parameters for call to function sAddrExtCpy
\ 000119 E5.. MOV A,?V0
\ 00011B 240D ADD A,#0xd
\ 00011D FC MOV R4,A
\ 00011E E4 CLR A
\ 00011F 35.. ADDC A,?V1
\ 000121 12.... LCALL ?Subroutine30 & 0xFFFF
2265 }
\ ??CrossCallReturnLabel_61:
\ 000124 12.... LCALL `??sAddrExtCpy::?relay`; Banked call to: sAddrExtCpy
\ 000127 800C SJMP ??ZDO_beaconNotifyIndCB_9
2266 else
2267 {
2268 osal_memset( pNwkDesc->extendedPANID, 0xFF, Z_EXTADDR_LEN );
\ ??ZDO_beaconNotifyIndCB_8:
\ 000129 ; Setup parameters for call to function osal_memset
\ 000129 7C08 MOV R4,#0x8
\ 00012B 7D00 MOV R5,#0x0
\ 00012D 79FF MOV R1,#-0x1
\ 00012F 12.... LCALL ??Subroutine43_0 & 0xFFFF
2269 }
\ ??CrossCallReturnLabel_59:
\ 000132 12.... LCALL `??osal_memset::?relay`; Banked call to: osal_memset
2270
2271 // check if this device is a better choice to join...
2272 // ...dont bother checking assocPermit flag is doing a rejoin
2273 if ( ( pBeacon->LQI > gMIN_TREE_LINK_COST ) &&
2274 ( ( pBeacon->permitJoining == TRUE ) || ( _tmpRejoinState ) ) )
\ ??ZDO_beaconNotifyIndCB_9:
\ 000135 85..82 MOV DPL,?V0
\ 000138 85..83 MOV DPH,?V1
\ 00013B A3 INC DPTR
\ 00013C A3 INC DPTR
\ 00013D A3 INC DPTR
\ 00013E A3 INC DPTR
\ 00013F A3 INC DPTR
\ 000140 A3 INC DPTR
\ 000141 A3 INC DPTR
\ 000142 A3 INC DPTR
\ 000143 A3 INC DPTR
\ 000144 A3 INC DPTR
\ 000145 E0 MOVX A,@DPTR
\ 000146 F8 MOV R0,A
\ 000147 90.... MOV DPTR,#gMIN_TREE_LINK_COST
\ 00014A E0 MOVX A,@DPTR
\ 00014B C3 CLR C
\ 00014C 98 SUBB A,R0
\ 00014D 4003 JC $+5
\ 00014F 02.... LJMP ??ZDO_beaconNotifyIndCB_1 & 0xFFFF
\ 000152 85..82 MOV DPL,?V0
\ 000155 85..83 MOV DPH,?V1
\ 000158 A3 INC DPTR
\ 000159 A3 INC DPTR
\ 00015A A3 INC DPTR
\ 00015B A3 INC DPTR
\ 00015C A3 INC DPTR
\ 00015D E0 MOVX A,@DPTR
\ 00015E 6401 XRL A,#0x1
\ 000160 6009 JZ ??ZDO_beaconNotifyIndCB_10
\ 000162 90.... MOV DPTR,#_tmpRejoinState
\ 000165 E0 MOVX A,@DPTR
\ 000166 7003 JNZ $+5
\ 000168 02.... LJMP ??ZDO_beaconNotifyIndCB_1 & 0xFFFF
2275 {
2276 uint8 selected = FALSE;
\ ??ZDO_beaconNotifyIndCB_10:
\ 00016B C2F0 CLR B.0
2277 uint8 capacity = FALSE;
2278
2279 if ( _NIB.nwkAddrAlloc == NWK_ADDRESSING_STOCHASTIC )
\ 00016D 90.... MOV DPTR,#_NIB + 96
\ 000170 E0 MOVX A,@DPTR
\ 000171 6402 XRL A,#0x2
\ 000173 702C JNZ ??ZDO_beaconNotifyIndCB_11
2280 {
2281 if ( ((pBeacon->LQI > pNwkDesc->chosenRouterLinkQuality) &&
2282 (pBeacon->depth < MAX_NODE_DEPTH)) ||
2283 ((pBeacon->LQI == pNwkDesc->chosenRouterLinkQuality) &&
2284 (pBeacon->depth < pNwkDesc->chosenRouterDepth)) )
\ 000175 8E82 MOV DPL,R6
\ 000177 8F83 MOV DPH,R7
\ 000179 A3 INC DPTR
\ 00017A A3 INC DPTR
\ 00017B A3 INC DPTR
\ 00017C A3 INC DPTR
\ 00017D A3 INC DPTR
\ 00017E A3 INC DPTR
\ 00017F A3 INC DPTR
\ 000180 A3 INC DPTR
\ 000181 A3 INC DPTR
\ 000182 E0 MOVX A,@DPTR
\ 000183 C3 CLR C
\ 000184 98 SUBB A,R0
\ 000185 5009 JNC ??ZDO_beaconNotifyIndCB_12
\ 000187 12.... LCALL ?Subroutine28 & 0xFFFF
2285 {
2286 selected = TRUE;
2287 }
2288 }
\ ??CrossCallReturnLabel_27:
\ 00018A 9414 SUBB A,#0x14
\ 00018C 4029 JC ??ZDO_beaconNotifyIndCB_13
\ 00018E 8029 SJMP ??ZDO_beaconNotifyIndCB_14
\ ??ZDO_beaconNotifyIndCB_12:
\ 000190 8E82 MOV DPL,R6
\ 000192 8F83 MOV DPH,R7
\ 000194 A3 INC DPTR
\ 000195 A3 INC DPTR
\ 000196 A3 INC DPTR
\ 000197 A3 INC DPTR
\ 000198 A3 INC DPTR
\ 000199 A3 INC DPTR
\ 00019A A3 INC DPTR
\ 00019B A3 INC DPTR
\ 00019C A3 INC DPTR
\ 00019D E0 MOVX A,@DPTR
\ 00019E 68 XRL A,R0
\ 00019F 7059 JNZ ??ZDO_beaconNotifyIndCB_15
2289 else
2290 {
2291 if ( pBeacon->depth < pNwkDesc->chosenRouterDepth )
\ ??ZDO_beaconNotifyIndCB_11:
\ 0001A1 8E82 MOV DPL,R6
\ 0001A3 8F83 MOV DPH,R7
\ 0001A5 A3 INC DPTR
\ 0001A6 A3 INC DPTR
\ 0001A7 A3 INC DPTR
\ 0001A8 A3 INC DPTR
\ 0001A9 A3 INC DPTR
\ 0001AA A3 INC DPTR
\ 0001AB A3 INC DPTR
\ 0001AC A3 INC DPTR
\ 0001AD A3 INC DPTR
\ 0001AE A3 INC DPTR
\ 0001AF E0 MOVX A,@DPTR
\ 0001B0 F8 MOV R0,A
\ 0001B1 12.... LCALL ?Subroutine28 & 0xFFFF
\ ??CrossCallReturnLabel_28:
\ 0001B4 98 SUBB A,R0
\ 0001B5 5043 JNC ??ZDO_beaconNotifyIndCB_15
2292 {
2293 selected = TRUE;
\ ??ZDO_beaconNotifyIndCB_13:
\ 0001B7 D2F0 SETB B.0
2294 }
2295 }
2296
2297 if ( ZSTACK_ROUTER_BUILD )
2298 {
2299 capacity = pBeacon->routerCapacity;
2300 }
2301 else if ( ZSTACK_END_DEVICE_BUILD )
2302 {
2303 capacity = pBeacon->deviceCapacity;
2304 }
2305
2306 if ( (capacity) && (selected) )
\ ??ZDO_beaconNotifyIndCB_14:
\ 0001B9 85..82 MOV DPL,?V0
\ 0001BC 85..83 MOV DPH,?V1
\ 0001BF A3 INC DPTR
\ 0001C0 A3 INC DPTR
\ 0001C1 A3 INC DPTR
\ 0001C2 A3 INC DPTR
\ 0001C3 A3 INC DPTR
\ 0001C4 A3 INC DPTR
\ 0001C5 A3 INC DPTR
\ 0001C6 E0 MOVX A,@DPTR
\ 0001C7 604C JZ ??ZDO_beaconNotifyIndCB_16
\ 0001C9 A2F0 MOV C,B.0
\ 0001CB 503D JNC ??ZDO_beaconNotifyIndCB_17
2307 {
2308 // this is the new chosen router for joining...
2309 pNwkDesc->chosenRouter = pBeacon->sourceAddr;
\ 0001CD 85..82 MOV DPL,?V0
\ 0001D0 85..83 MOV DPH,?V1
\ 0001D3 12.... LCALL ??Subroutine49_0 & 0xFFFF
\ ??CrossCallReturnLabel_70:
\ 0001D6 8E82 MOV DPL,R6
\ 0001D8 8F83 MOV DPH,R7
\ 0001DA A3 INC DPTR
\ 0001DB A3 INC DPTR
\ 0001DC A3 INC DPTR
\ 0001DD A3 INC DPTR
\ 0001DE A3 INC DPTR
\ 0001DF A3 INC DPTR
\ 0001E0 A3 INC DPTR
\ 0001E1 E8 MOV A,R0
\ 0001E2 F0 MOVX @DPTR,A
\ 0001E3 A3 INC DPTR
\ 0001E4 E9 MOV A,R1
\ 0001E5 12.... LCALL ?Subroutine11 & 0xFFFF
2310 pNwkDesc->chosenRouterLinkQuality = pBeacon->LQI;
\ ??CrossCallReturnLabel_3:
\ 0001E8 A3 INC DPTR
\ 0001E9 A3 INC DPTR
\ 0001EA A3 INC DPTR
\ 0001EB A3 INC DPTR
\ 0001EC A3 INC DPTR
\ 0001ED A3 INC DPTR
\ 0001EE 12.... LCALL ?Subroutine17 & 0xFFFF
\ ??CrossCallReturnLabel_11:
\ 0001F1 F0 MOVX @DPTR,A
2311 pNwkDesc->chosenRouterDepth = pBeacon->depth;
\ 0001F2 12.... LCALL ?Subroutine36 & 0xFFFF
2312 }
\ ??CrossCallReturnLabel_43:
\ 0001F5 12.... LCALL ?Subroutine17 & 0xFFFF
\ ??CrossCallReturnLabel_12:
\ 0001F8 A3 INC DPTR
\ 0001F9 F0 MOVX @DPTR,A
2313
2314 if ( pBeacon->deviceCapacity )
\ ??ZDO_beaconNotifyIndCB_15:
\ 0001FA 85..82 MOV DPL,?V0
\ 0001FD 85..83 MOV DPH,?V1
\ 000200 A3 INC DPTR
\ 000201 A3 INC DPTR
\ 000202 A3 INC DPTR
\ 000203 A3 INC DPTR
\ 000204 A3 INC DPTR
\ 000205 A3 INC DPTR
\ 000206 A3 INC DPTR
\ 000207 E0 MOVX A,@DPTR
\ 000208 600B JZ ??ZDO_beaconNotifyIndCB_16
2315 pNwkDesc->deviceCapacity = 1;
\ ??ZDO_beaconNotifyIndCB_17:
\ 00020A 8E82 MOV DPL,R6
\ 00020C 8F83 MOV DPH,R7
\ 00020E A3 INC DPTR
\ 00020F A3 INC DPTR
\ 000210 A3 INC DPTR
\ 000211 A3 INC DPTR
\ 000212 7401 MOV A,#0x1
\ 000214 F0 MOVX @DPTR,A
2316
2317 if ( pBeacon->routerCapacity )
\ ??ZDO_beaconNotifyIndCB_16:
\ 000215 85..82 MOV DPL,?V0
\ 000218 85..83 MOV DPH,?V1
\ 00021B A3 INC DPTR
\ 00021C A3 INC DPTR
\ 00021D A3 INC DPTR
\ 00021E A3 INC DPTR
\ 00021F A3 INC DPTR
\ 000220 A3 INC DPTR
\ 000221 E0 MOVX A,@DPTR
\ 000222 600A JZ ??ZDO_beaconNotifyIndCB_1
2318 pNwkDesc->routerCapacity = 1;
\ 000224 8E82 MOV DPL,R6
\ 000226 8F83 MOV DPH,R7
\ 000228 A3 INC DPTR
\ 000229 A3 INC DPTR
\ 00022A A3 INC DPTR
\ 00022B 7401 MOV A,#0x1
\ 00022D F0 MOVX @DPTR,A
2319 }
2320 }
2321 }
\ ??ZDO_beaconNotifyIndCB_1:
\ 00022E 02.... LJMP ?Subroutine5 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine28:
\ 000000 12.... LCALL ?Subroutine36 & 0xFFFF
\ ??CrossCallReturnLabel_44:
\ 000003 E0 MOVX A,@DPTR
\ 000004 C3 CLR C
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine36:
\ 000000 E5.. MOV A,?V0
\ 000002 240B ADD A,#0xb
\ 000004 F582 MOV DPL,A
\ 000006 E4 CLR A
\ 000007 35.. ADDC A,?V1
\ 000009 F583 MOV DPH,A
\ 00000B 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine21:
\ 000000 12.... LCALL ?Subroutine34 & 0xFFFF
\ ??CrossCallReturnLabel_40:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine34:
\ 000000 E0 MOVX A,@DPTR
\ 000001 8E82 MOV DPL,R6
\ 000003 8F83 MOV DPH,R7
\ 000005 A3 INC DPTR
\ 000006 A3 INC DPTR
\ 000007 A3 INC DPTR
\ 000008 A3 INC DPTR
\ 000009 A3 INC DPTR
\ 00000A 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine17:
\ 000000 12.... LCALL ?Subroutine34 & 0xFFFF
\ ??CrossCallReturnLabel_39:
\ 000003 A3 INC DPTR
\ 000004 A3 INC DPTR
\ 000005 A3 INC DPTR
\ 000006 A3 INC DPTR
\ 000007 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine11:
\ 000000 12.... LCALL ?Subroutine33 & 0xFFFF
\ ??CrossCallReturnLabel_38:
\ 000003 A3 INC DPTR
\ 000004 A3 INC DPTR
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine33:
\ 000000 F0 MOVX @DPTR,A
\ 000001 85..82 MOV DPL,?V0
\ 000004 85..83 MOV DPH,?V1
\ 000007 A3 INC DPTR
\ 000008 A3 INC DPTR
\ 000009 22 RET
2322
2323 /*********************************************************************
2324 * @fn ZDO_StartRouterConfirmCB
2325 *
2326 * @brief This function reports the results of the request to
2327 * start functioning as a router in a network.
2328 *
2329 * @param Status - Result of NLME_StartRouterRequest()
2330 *
2331 * @return none
2332 */
\ In segment BANKED_CODE, align 1, keep-with-next
2333 void ZDO_StartRouterConfirmCB( ZStatus_t Status )
\ ZDO_StartRouterConfirmCB:
2334 {
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 0
\ 000005 E9 MOV A,R1
2335 nwkStatus = (byte)Status;
\ 000006 90.... MOV DPTR,#nwkStatus
\ 000009 F0 MOVX @DPTR,A
2336
2337 if ( Status == ZSUCCESS )
\ 00000A 7009 JNZ ??ZDO_StartRouterConfirmCB_0
2338 {
2339 #if 0
2340 // LED on shows Router started
2341 HalLedSet ( HAL_LED_3, HAL_LED_MODE_ON );
2342 // LED off forgets HOLD_AUTO_START
2343 HalLedSet ( HAL_LED_4, HAL_LED_MODE_OFF);
2344 #endif
2345 if ( devState == DEV_HOLD )
\ 00000C 90.... MOV DPTR,#devState
\ 00000F E0 MOVX A,@DPTR
\ 000010 7003 JNZ ??ZDO_StartRouterConfirmCB_0
2346 {
2347 // Began with HOLD_AUTO_START
2348 devState = DEV_END_DEVICE;
\ 000012 7406 MOV A,#0x6
\ 000014 F0 MOVX @DPTR,A
2349 }
2350 }
2351 #if defined(BLINK_LEDS)
2352 else
2353 {
2354 #if 0
2355 HalLedSet( HAL_LED_3, HAL_LED_MODE_FLASH ); // Flash LED to show failure
2356 #endif
2357 }
2358 #endif
2359
2360 osal_set_event( ZDAppTaskID, ZDO_ROUTER_START );
\ ??ZDO_StartRouterConfirmCB_0:
\ 000015 ; Setup parameters for call to function osal_set_event
\ 000015 7A20 MOV R2,#0x20
\ 000017 02.... LJMP ?Subroutine0 & 0xFFFF
2361 }
2362
2363 /*********************************************************************
2364 * @fn ZDO_JoinConfirmCB
2365 *
2366 * @brief This function allows the next hight layer to be notified
2367 * of the results of its request to join itself or another
2368 * device to a network.
2369 *
2370 * @param Status - Result of NLME_JoinRequest()
2371 *
2372 * @return none
2373 */
\ In segment BANKED_CODE, align 1, keep-with-next
2374 void ZDO_JoinConfirmCB( uint16 PanId, ZStatus_t Status )
\ ZDO_JoinConfirmCB:
2375 {
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 5
\ 000005 74FB MOV A,#-0x5
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A E9 MOV A,R1
\ 00000B FE MOV R6,A
2376 (void)PanId; // remove if this parameter is used.
2377
2378 nwkStatus = (byte)Status;
\ 00000C 90.... MOV DPTR,#nwkStatus
\ 00000F F0 MOVX @DPTR,A
2379
2380 if ( Status == ZSUCCESS )
\ 000010 7009 JNZ ??ZDO_JoinConfirmCB_0
2381 {
2382 #if 0
2383 // LED on shows device joined
2384 HalLedSet ( HAL_LED_3, HAL_LED_MODE_ON );
2385 // LED off forgets HOLD_AUTO_START
2386 HalLedSet ( HAL_LED_4, HAL_LED_MODE_OFF);
2387 #endif
2388 if ( (devState == DEV_HOLD) )
\ 000012 90.... MOV DPTR,#devState
\ 000015 E0 MOVX A,@DPTR
\ 000016 7003 JNZ ??ZDO_JoinConfirmCB_0
2389 {
2390 // Began with HOLD_AUTO_START
2391 devState = DEV_NWK_JOINING;
\ 000018 7403 MOV A,#0x3
\ 00001A F0 MOVX @DPTR,A
2392 }
2393
2394 if ( !ZG_SECURE_ENABLED )
2395 {
2396 // Notify to save info into NV
2397 ZDApp_NVUpdate();
2398 }
2399 }
2400 else
2401 {
2402 #if defined(BLINK_LEDS)
2403 #if 0
2404 HalLedSet ( HAL_LED_3, HAL_LED_MODE_FLASH ); // Flash LED to show failure
2405 #endif
2406 #endif
2407 }
2408
2409 // Pass the join confirm to higher layer if callback registered
2410 if (zdoCBFunc[ZDO_JOIN_CNF_CBID] != NULL )
\ ??ZDO_JoinConfirmCB_0:
\ 00001B 90.... MOV DPTR,#zdoCBFunc + 8
\ 00001E 12.... LCALL ?Subroutine13 & 0xFFFF
\ ??CrossCallReturnLabel_7:
\ 000021 6035 JZ ??ZDO_JoinConfirmCB_1
2411 {
2412 zdoJoinCnf_t joinCnf;
2413
2414 joinCnf.status = Status;
\ 000023 EE MOV A,R6
\ 000024 85..82 MOV DPL,?XSP + 0
\ 000027 85..83 MOV DPH,?XSP + 1
\ 00002A F0 MOVX @DPTR,A
2415 joinCnf.deviceAddr = _NIB.nwkDevAddress;
\ 00002B 90.... MOV DPTR,#_NIB + 20
\ 00002E 12.... LCALL ??Subroutine49_0 & 0xFFFF
\ ??CrossCallReturnLabel_71:
\ 000031 7401 MOV A,#0x1
\ 000033 12.... LCALL ?XSTACK_DISP0_8
\ 000036 E8 MOV A,R0
\ 000037 F0 MOVX @DPTR,A
\ 000038 A3 INC DPTR
\ 000039 E9 MOV A,R1
\ 00003A F0 MOVX @DPTR,A
2416 joinCnf.parentAddr = _NIB.nwkCoordAddress;
\ 00003B 90.... MOV DPTR,#_NIB + 23
\ 00003E 12.... LCALL ??Subroutine49_0 & 0xFFFF
\ ??CrossCallReturnLabel_72:
\ 000041 7403 MOV A,#0x3
\ 000043 12.... LCALL ?XSTACK_DISP0_8
\ 000046 E8 MOV A,R0
\ 000047 F0 MOVX @DPTR,A
\ 000048 A3 INC DPTR
\ 000049 E9 MOV A,R1
\ 00004A F0 MOVX @DPTR,A
2417
2418 zdoCBFunc[ZDO_JOIN_CNF_CBID]( (void*)&joinCnf );
\ 00004B ; Setup parameters for indirect call
\ 00004B AA.. MOV R2,?XSP + 0
\ 00004D AB.. MOV R3,?XSP + 1
\ 00004F 90.... MOV DPTR,#zdoCBFunc + 8
\ 000052 12.... LCALL ??Subroutine53_0 & 0xFFFF
2419 }
\ ??CrossCallReturnLabel_90:
\ 000055 12.... LCALL ?CALL_IND
2420
2421 // Notify ZDApp
2422 ZDApp_SendMsg( ZDAppTaskID, ZDO_NWK_JOIN_IND, sizeof(osal_event_hdr_t), (byte*)NULL );
\ ??ZDO_JoinConfirmCB_1:
\ 000058 ; Setup parameters for call to function ZDApp_SendMsg
\ 000058 7C00 MOV R4,#0x0
\ 00005A 7D00 MOV R5,#0x0
\ 00005C 7B02 MOV R3,#0x2
\ 00005E 7A02 MOV R2,#0x2
\ 000060 12.... LCALL ?Subroutine20 & 0xFFFF
2423
2424 }
\ ??CrossCallReturnLabel_15:
\ 000063 REQUIRE ?Subroutine6
\ 000063 ; // Fall through to label ?Subroutine6
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine6:
\ 000000 7405 MOV A,#0x5
\ 000002 12.... LCALL ?DEALLOC_XSTACK8
\ 000005 02.... LJMP ??Subroutine48_0 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine53_0:
\ 000000 E0 MOVX A,@DPTR
\ 000001 F8 MOV R0,A
\ 000002 A3 INC DPTR
\ 000003 REQUIRE ??Subroutine54_0
\ 000003 ; // Fall through to label ??Subroutine54_0
2425
2426 /*********************************************************************
2427 * @fn ZDO_AddrChangeIndicationCB
2428 *
2429 * @brief This function notifies the application that this
2430 * device's address has changed. Could happen in
2431 * a network with stochastic addressing (PRO).
2432 *
2433 * @param newAddr - the new address
2434 *
2435 * @return none
2436 */
\ In segment BANKED_CODE, align 1, keep-with-next
2437 void ZDO_AddrChangeIndicationCB( uint16 newAddr )
\ ZDO_AddrChangeIndicationCB:
2438 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 REQUIRE ?V2
\ 000000 REQUIRE ?V3
\ 000000 74F4 MOV A,#-0xc
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 12
\ 000005 ; Auto size: 0
\ 000005 8A.. MOV ?V0,R2
\ 000007 8B.. MOV ?V1,R3
2439 ZDO_AddrChangeInd_t *pZDOAddrChangeMsg;
2440 epList_t *pItem = epList;
\ 000009 90.... MOV DPTR,#epList
\ 00000C 12.... LCALL ??Subroutine50_0 & 0xFFFF
2441
2442 // Notify to save info into NV
2443 ZDApp_NVUpdate();
2444
2445 // Notify the applications
2446 osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );
\ ??CrossCallReturnLabel_77:
\ 00000F ; Setup parameters for call to function osal_set_event
\ 00000F 12.... LCALL ?Subroutine15 & 0xFFFF
\ ??CrossCallReturnLabel_52:
\ 000012 8033 SJMP ??CrossCallReturnLabel_78
2447
2448 while (pItem != NULL)
2449 {
2450 if (pItem->epDesc->endPoint != ZDO_EP)
\ ??ZDO_AddrChangeIndicationCB_0:
\ 000014 12.... LCALL ?Subroutine14 & 0xFFFF
\ ??CrossCallReturnLabel_92:
\ 000017 E0 MOVX A,@DPTR
\ 000018 6026 JZ ??ZDO_AddrChangeIndicationCB_1
2451 {
2452 pZDOAddrChangeMsg = (ZDO_AddrChangeInd_t *)osal_msg_allocate( sizeof( ZDO_AddrChangeInd_t ) );
\ 00001A ; Setup parameters for call to function osal_msg_allocate
\ 00001A 7A04 MOV R2,#0x4
\ 00001C 7B00 MOV R3,#0x0
\ 00001E 12.... LCALL `??osal_msg_allocate::?relay`; Banked call to: osal_msg_allocate
2453 if (pZDOAddrChangeMsg != NULL)
\ 000021 EA MOV A,R2
\ 000022 4B ORL A,R3
\ 000023 601B JZ ??ZDO_AddrChangeIndicationCB_1
2454 {
2455 pZDOAddrChangeMsg->hdr.event = ZDO_ADDR_CHANGE_IND;
\ 000025 8A82 MOV DPL,R2
\ 000027 8B83 MOV DPH,R3
\ 000029 74D6 MOV A,#-0x2a
\ 00002B F0 MOVX @DPTR,A
2456 pZDOAddrChangeMsg->shortAddr = newAddr;
\ 00002C A3 INC DPTR
\ 00002D A3 INC DPTR
\ 00002E E5.. MOV A,?V0
\ 000030 F0 MOVX @DPTR,A
\ 000031 A3 INC DPTR
\ 000032 E5.. MOV A,?V1
\ 000034 F0 MOVX @DPTR,A
2457 osal_msg_send( *(pItem->epDesc->task_id), (uint8 *)pZDOAddrChangeMsg );
\ 000035 ; Setup parameters for call to function osal_msg_send
\ 000035 12.... LCALL ?Subroutine14 & 0xFFFF
2458 }
2459 }
\ ??CrossCallReturnLabel_93:
\ 000038 12.... LCALL ??Subroutine52_0 & 0xFFFF
\ ??CrossCallReturnLabel_91:
\ 00003B E0 MOVX A,@DPTR
\ 00003C F9 MOV R1,A
\ 00003D 12.... LCALL `??osal_msg_send::?relay`; Banked call to: osal_msg_send
2460 pItem = pItem->nextDesc;
\ ??ZDO_AddrChangeIndicationCB_1:
\ 000040 8E82 MOV DPL,R6
\ 000042 8F83 MOV DPH,R7
\ 000044 12.... LCALL ??Subroutine50_0 & 0xFFFF
2461 }
\ ??CrossCallReturnLabel_78:
\ 000047 EE MOV A,R6
\ 000048 4F ORL A,R7
\ 000049 70C9 JNZ ??ZDO_AddrChangeIndicationCB_0
2462
2463 // Send out a device announce
2464 ZDApp_AnnounceNewAddress();
\ 00004B ; Setup parameters for call to function ZDApp_AnnounceNewAddress
\ 00004B 12.... LCALL `??ZDApp_AnnounceNewAddress::?relay`; Banked call to: ZDApp_AnnounceNewAddress
2465 }
\ 00004E 02.... LJMP ??Subroutine40_0 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine14:
\ 000000 8E82 MOV DPL,R6
\ 000002 8F83 MOV DPH,R7
\ 000004 A3 INC DPTR
\ 000005 REQUIRE ??Subroutine52_0
\ 000005 ; // Fall through to label ??Subroutine52_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine52_0:
\ 000000 A3 INC DPTR
\ 000001 REQUIRE ??Subroutine53_0
\ 000001 ; // Fall through to label ??Subroutine53_0
2466
2467 /*********************************************************************
2468 * @fn ZDO_JoinIndicationCB
2469 *
2470 * @brief This function allows the next higher layer of a
2471 * coordinator to be notified of a remote join request.
2472 *
2473 * @param ShortAddress - 16-bit address
2474 * @param ExtendedAddress - IEEE (64-bit) address
2475 * @param CapabilityFlags - Association Capability Flags
2476 * @param type - of joining -
2477 * NWK_ASSOC_JOIN
2478 * NWK_ASSOC_REJOIN_UNSECURE
2479 * NWK_ASSOC_REJOIN_SECURE
2480 *
2481 * @return ZStatus_t
2482 */
\ In segment BANKED_CODE, align 1, keep-with-next
2483 ZStatus_t ZDO_JoinIndicationCB(uint16 ShortAddress, uint8 *ExtendedAddress,
\ ZDO_JoinIndicationCB:
2484 uint8 CapabilityFlags, uint8 type)
2485 {
\ 000000 ; Saved register size: 0
\ 000000 ; Auto size: 0
2486 (void)ShortAddress;
2487 (void)ExtendedAddress;
2488 #if ZDO_NV_SAVE_RFDs
2489 (void)CapabilityFlags;
2490
2491 #else // if !ZDO_NV_SAVE_RFDs
2492 if (CapabilityFlags & CAPINFO_DEVICETYPE_FFD)
2493 #endif
2494 {
2495 ZDApp_NVUpdate(); // Notify to save info into NV.
2496 }
2497
2498 if (ZG_SECURE_ENABLED) // Send notification to TC of new device.
2499 {
2500 if (type == NWK_ASSOC_JOIN || type == NWK_ASSOC_REJOIN_UNSECURE)
2501 {
2502 osal_start_timerEx( ZDAppTaskID, ZDO_NEW_DEVICE, 600 );
2503 }
2504 }
2505
2506 return ZSuccess;
\ 000000 REQUIRE ?Subroutine4
\ 000000 ; // Fall through to label ?Subroutine4
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine4:
\ 000000 7900 MOV R1,#0x0
\ 000002 02.... LJMP ?BRET
2507 }
2508
2509 /*********************************************************************
2510 * @fn ZDO_ConcentratorIndicationCB
2511 *
2512 * @brief This function allows the next higher layer of a
2513 * device to be notified of existence of the concentrator.
2514 *
2515 * @param nwkAddr - 16-bit NWK address of the concentrator
2516 * @param extAddr - pointer to extended Address
2517 * NULL if not available
2518 * @param pktCost - PktCost from RREQ
2519 *
2520 * @return void
2521 */
\ In segment BANKED_CODE, align 1, keep-with-next
2522 void ZDO_ConcentratorIndicationCB( uint16 nwkAddr, uint8 *extAddr, uint8 pktCost )
\ ZDO_ConcentratorIndicationCB:
2523 {
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 5
\ 000005 74FB MOV A,#-0x5
\ 000007 12.... LCALL ?ALLOC_XSTACK8
2524 zdoConcentratorInd_t conInd;
2525
2526 conInd.nwkAddr = nwkAddr;
\ 00000A 12.... LCALL ?Subroutine12 & 0xFFFF
2527 conInd.extAddr = extAddr;
\ ??CrossCallReturnLabel_100:
\ 00000D 7402 MOV A,#0x2
\ 00000F 12.... LCALL ?XSTACK_DISP0_8
\ 000012 EC MOV A,R4
\ 000013 F0 MOVX @DPTR,A
\ 000014 A3 INC DPTR
\ 000015 ED MOV A,R5
\ 000016 F0 MOVX @DPTR,A
2528 conInd.pktCost = pktCost;
\ 000017 7404 MOV A,#0x4
\ 000019 12.... LCALL ?XSTACK_DISP0_8
\ 00001C E9 MOV A,R1
\ 00001D F0 MOVX @DPTR,A
2529
2530 if( zdoCBFunc[ZDO_CONCENTRATOR_IND_CBID] != NULL )
\ 00001E 90.... MOV DPTR,#zdoCBFunc + 2
\ 000021 12.... LCALL ?Subroutine13 & 0xFFFF
\ ??CrossCallReturnLabel_8:
\ 000024 600A JZ ??ZDO_ConcentratorIndicationCB_0
2531 {
2532 zdoCBFunc[ZDO_CONCENTRATOR_IND_CBID]( (void*)&conInd );
\ 000026 ; Setup parameters for indirect call
\ 000026 AA.. MOV R2,?XSP + 0
\ 000028 AB.. MOV R3,?XSP + 1
\ 00002A 12.... LCALL ??Subroutine54_0 & 0xFFFF
2533 }
\ ??CrossCallReturnLabel_87:
\ 00002D 12.... LCALL ?CALL_IND
2534 }
\ ??ZDO_ConcentratorIndicationCB_0:
\ 000030 02.... LJMP ?Subroutine6 & 0xFFFF
2535
2536 /*********************************************************************
2537 * @fn ZDO_LeaveCnf
2538 *
2539 * @brief This function allows the next higher layer to be
2540 * notified of the results of its request for this or
2541 * a child device to leave the network.
2542 *
2543 * @param cnf - NLME_LeaveCnf_t
2544 *
2545 * @return none
2546 */
\ In segment BANKED_CODE, align 1, keep-with-next
2547 void ZDO_LeaveCnf( NLME_LeaveCnf_t* cnf )
\ ZDO_LeaveCnf:
2548 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 74F6 MOV A,#-0xa
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 10
\ 000005 ; Auto size: 0
\ 000005 EA MOV A,R2
\ 000006 FE MOV R6,A
\ 000007 EB MOV A,R3
\ 000008 FF MOV R7,A
2549 // Check for this device
2550 if ( osal_ExtAddrEqual( cnf->extAddr,
2551 NLME_GetExtAddr() ) == TRUE )
\ 000009 ; Setup parameters for call to function NLME_GetExtAddr
\ 000009 12.... LCALL `??NLME_GetExtAddr::?relay`; Banked call to: NLME_GetExtAddr
\ 00000C 8A.. MOV ?V0,R2
\ 00000E 8B.. MOV ?V1,R3
\ 000010 AC.. MOV R4,?V0
\ 000012 AD.. MOV R5,?V1
\ 000014 ; Setup parameters for call to function sAddrExtCmp
\ 000014 EE MOV A,R6
\ 000015 2402 ADD A,#0x2
\ 000017 FA MOV R2,A
\ 000018 E4 CLR A
\ 000019 3F ADDC A,R7
\ 00001A FB MOV R3,A
\ 00001B 12.... LCALL `??sAddrExtCmp::?relay`; Banked call to: sAddrExtCmp
\ 00001E E9 MOV A,R1
\ 00001F 6401 XRL A,#0x1
\ 000021 701D JNZ ??ZDO_LeaveCnf_0
2552 {
2553 // Pass the leave confirm to higher layer if callback registered
2554 if ( ( zdoCBFunc[ZDO_LEAVE_CNF_CBID] == NULL ) ||
2555 ( (*zdoCBFunc[ZDO_LEAVE_CNF_CBID])( cnf ) == NULL ) )
\ 000023 90.... MOV DPTR,#zdoCBFunc + 10
\ 000026 12.... LCALL ?Subroutine13 & 0xFFFF
\ ??CrossCallReturnLabel_9:
\ 000029 600E JZ ??ZDO_LeaveCnf_1
\ 00002B ; Setup parameters for indirect call
\ 00002B EE MOV A,R6
\ 00002C FA MOV R2,A
\ 00002D EF MOV A,R7
\ 00002E FB MOV R3,A
\ 00002F 12.... LCALL ??Subroutine54_0 & 0xFFFF
\ ??CrossCallReturnLabel_88:
\ 000032 12.... LCALL ?CALL_IND
\ 000035 EA MOV A,R2
\ 000036 4B ORL A,R3
\ 000037 7007 JNZ ??ZDO_LeaveCnf_0
2556 {
2557 // Prepare to leave with reset
2558 ZDApp_LeaveReset( cnf->rejoin );
\ ??ZDO_LeaveCnf_1:
\ 000039 ; Setup parameters for call to function ZDApp_LeaveReset
\ 000039 12.... LCALL ?Subroutine26 & 0xFFFF
2559 }
2560 }
\ ??CrossCallReturnLabel_83:
\ 00003C F9 MOV R1,A
\ 00003D 12.... LCALL `??ZDApp_LeaveReset::?relay`; Banked call to: ZDApp_LeaveReset
2561 else if ( ZSTACK_ROUTER_BUILD )
2562 {
2563 // Remove device address(optionally descendents) from data
2564 ZDApp_LeaveUpdate( cnf->dstAddr,
2565 cnf->extAddr,
2566 cnf->removeChildren );
2567 }
2568 }
\ ??ZDO_LeaveCnf_0:
\ 000040 02.... LJMP ??Subroutine46_0 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine26:
\ 000000 EE MOV A,R6
\ 000001 REQUIRE ??Subroutine51_0
\ 000001 ; // Fall through to label ??Subroutine51_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine51_0:
\ 000000 240B ADD A,#0xb
\ 000002 F582 MOV DPL,A
\ 000004 E4 CLR A
\ 000005 3F ADDC A,R7
\ 000006 F583 MOV DPH,A
\ 000008 E0 MOVX A,@DPTR
\ 000009 22 RET
2569
2570 /*********************************************************************
2571 * @fn ZDO_LeaveInd
2572 *
2573 * @brief This function allows the next higher layer of a
2574 * device to be notified of a remote leave request or
2575 * indication.
2576 *
2577 * @param ind - NLME_LeaveInd_t
2578 *
2579 * @return none
2580 */
\ In segment BANKED_CODE, align 1, keep-with-next
2581 void ZDO_LeaveInd( NLME_LeaveInd_t* ind )
\ ZDO_LeaveInd:
2582 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 74F6 MOV A,#-0xa
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 10
\ 000005 ; Auto size: 0
\ 000005 EA MOV A,R2
\ 000006 FE MOV R6,A
\ 000007 EB MOV A,R3
\ 000008 FF MOV R7,A
2583 uint8 leave;
2584
2585
2586 // Parent is requesting the leave - NWK layer filters out illegal
2587 // requests
2588 if ( ind->request == TRUE )
\ 000009 8A82 MOV DPL,R2
\ 00000B F583 MOV DPH,A
\ 00000D A3 INC DPTR
\ 00000E A3 INC DPTR
\ 00000F A3 INC DPTR
\ 000010 A3 INC DPTR
\ 000011 A3 INC DPTR
\ 000012 A3 INC DPTR
\ 000013 A3 INC DPTR
\ 000014 A3 INC DPTR
\ 000015 A3 INC DPTR
\ 000016 A3 INC DPTR
\ 000017 E0 MOVX A,@DPTR
\ 000018 6401 XRL A,#0x1
\ 00001A 7003 JNZ ??ZDO_LeaveInd_0
2589 {
2590 // Notify network of leave
2591 if ( ZSTACK_ROUTER_BUILD )
2592 {
2593 NLME_LeaveRsp_t rsp;
2594 rsp.rejoin = ind->rejoin;
2595 rsp.removeChildren = ind->removeChildren;
2596 NLME_LeaveRsp( &rsp );
2597 }
2598
2599 // Prepare to leave with reset
2600 ZDApp_LeaveReset( ind->rejoin );
\ 00001C ; Setup parameters for call to function ZDApp_LeaveReset
\ 00001C EA MOV A,R2
\ 00001D 802A SJMP ??ZDO_LeaveInd_1
2601 }
2602 else
2603 {
2604 leave = FALSE;
2605
2606 // Check if this device needs to leave as a child or descendent
2607 if ( ind->srcAddr == NLME_GetCoordShortAddr() )
\ ??ZDO_LeaveInd_0:
\ 00001F ; Setup parameters for call to function NLME_GetCoordShortAddr
\ 00001F 12.... LCALL `??NLME_GetCoordShortAddr::?relay`; Banked call to: NLME_GetCoordShortAddr
\ 000022 8A.. MOV ?V0,R2
\ 000024 8B.. MOV ?V1,R3
\ 000026 A8.. MOV R0,?V0
\ 000028 A9.. MOV R1,?V1
\ 00002A 8E82 MOV DPL,R6
\ 00002C 8F83 MOV DPH,R7
\ 00002E E0 MOVX A,@DPTR
\ 00002F 68 XRL A,R0
\ 000030 7003 JNZ ??ZDO_LeaveInd_2
\ 000032 A3 INC DPTR
\ 000033 E0 MOVX A,@DPTR
\ 000034 69 XRL A,R1
\ ??ZDO_LeaveInd_2:
\ 000035 7019 JNZ ??ZDO_LeaveInd_3
2608 {
2609 if ( ( ind->removeChildren == TRUE ) ||
2610 ( ZDO_Config_Node_Descriptor.LogicalType ==
2611 NODETYPE_DEVICE ) )
\ 000037 12.... LCALL ?Subroutine26 & 0xFFFF
\ ??CrossCallReturnLabel_84:
\ 00003A 6401 XRL A,#0x1
\ 00003C 600A JZ ??ZDO_LeaveInd_4
\ 00003E 90.... MOV DPTR,#ZDO_Config_Node_Descriptor
\ 000041 E0 MOVX A,@DPTR
\ 000042 5407 ANL A,#0x7
\ 000044 6402 XRL A,#0x2
\ 000046 7008 JNZ ??ZDO_LeaveInd_3
2612 {
2613 leave = TRUE;
2614 }
2615 }
2616 else if ( ind->removeChildren == TRUE )
2617 {
2618 // Check NWK address allocation algorithm
2619 //leave = RTG_ANCESTOR(nwkAddr,thisAddr);
2620 }
2621
2622 if ( leave == TRUE )
2623 {
2624 // Prepare to leave with reset
2625 ZDApp_LeaveReset( ind->rejoin );
\ ??ZDO_LeaveInd_4:
\ 000048 ; Setup parameters for call to function ZDApp_LeaveReset
\ 000048 EE MOV A,R6
2626 }
2627 else
2628 {
2629 // Remove device address(optionally descendents) from data
2630 ZDApp_LeaveUpdate( ind->srcAddr,
2631 ind->extAddr,
2632 ind->removeChildren );
2633 }
2634 }
\ ??ZDO_LeaveInd_1:
\ 000049 12.... LCALL ?Subroutine32 & 0xFFFF
\ ??CrossCallReturnLabel_35:
\ 00004C F9 MOV R1,A
\ 00004D 12.... LCALL `??ZDApp_LeaveReset::?relay`; Banked call to: ZDApp_LeaveReset
2635 }
\ ??ZDO_LeaveInd_3:
\ 000050 02.... LJMP ??Subroutine46_0 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine32:
\ 000000 12.... LCALL ?Subroutine37 & 0xFFFF
\ ??CrossCallReturnLabel_46:
\ 000003 22 RET
2636
2637 /*********************************************************************
2638 * @fn ZDO_SyncIndicationCB
2639 *
2640 * @brief This function allows the next higher layer of a
2641 * coordinator to be notified of a loss of synchronization
2642 * with the parent/child device.
2643 *
2644 * @param type: 0 - child; 1 - parent
2645 *
2646 *
2647 * @return none
2648 */
\ In segment BANKED_CODE, align 1, keep-with-next
2649 void ZDO_SyncIndicationCB( uint8 type, uint16 shortAddr )
\ ZDO_SyncIndicationCB:
2650 {
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 0
\ 000005 E9 MOV A,R1
\ 000006 FE MOV R6,A
2651 (void)shortAddr; // Remove this line if this parameter is used.
2652
2653 if ( ZSTACK_END_DEVICE_BUILD
2654 || (ZSTACK_ROUTER_BUILD && ((_NIB.CapabilityFlags & ZMAC_ASSOC_CAPINFO_FFD_TYPE) == 0)))
2655 {
2656 if ( type == 1 )
\ 000007 7401 MOV A,#0x1
\ 000009 6E XRL A,R6
\ 00000A 700E JNZ ??CrossCallReturnLabel_16
2657 {
2658 // We lost contact with our parent. Clear the neighbor Table.
2659 nwkNeighborInitTable();
\ 00000C ; Setup parameters for call to function nwkNeighborInitTable
\ 00000C 12.... LCALL `??nwkNeighborInitTable::?relay`; Banked call to: nwkNeighborInitTable
2660
2661 // Start the rejoin process.
2662 ZDApp_SendMsg( ZDAppTaskID, ZDO_NWK_JOIN_REQ, sizeof(osal_event_hdr_t), NULL );
\ 00000F ; Setup parameters for call to function ZDApp_SendMsg
\ 00000F 7C00 MOV R4,#0x0
\ 000011 7D00 MOV R5,#0x0
\ 000013 7B02 MOV R3,#0x2
\ 000015 7A03 MOV R2,#0x3
\ 000017 12.... LCALL ?Subroutine20 & 0xFFFF
2663 }
2664 }
2665 }
\ ??CrossCallReturnLabel_16:
\ 00001A 02.... LJMP ??Subroutine48_0 & 0xFFFF
2666
2667 /*********************************************************************
2668 * @fn ZDO_ManytoOneFailureIndicationCB
2669 *
2670 * @brief This function allows the next higher layer of a
2671 * concentrator to be notified of a many-to-one route
2672 * failure.
2673 *
2674 * @param none
2675 *
2676 *
2677 * @return none
2678 */
\ In segment BANKED_CODE, align 1, keep-with-next
2679 void ZDO_ManytoOneFailureIndicationCB()
\ ZDO_ManytoOneFailureIndicationCB:
2680 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
2681 // By default, the concentrator automatically redo many-to-one route
2682 // discovery to update all many-to-one routes in the network
2683 // If you want anything processing other than the default,
2684 // please replace the following code.
2685
2686 RTG_MTORouteReq();
\ 000004 ; Setup parameters for call to function RTG_MTORouteReq
\ 000004 12.... LCALL `??RTG_MTORouteReq::?relay`; Banked call to: RTG_MTORouteReq
2687 }
\ 000007 02.... LJMP ?Subroutine3 & 0xFFFF
2688
2689 /*********************************************************************
2690 * @fn ZDO_PollConfirmCB
2691 *
2692 * @brief This function allows the next higher layer to be
2693 * notified of a Poll Confirm.
2694 *
2695 * @param none
2696 *
2697 * @return none
2698 */
\ In segment BANKED_CODE, align 1, keep-with-next
2699 void ZDO_PollConfirmCB( uint8 status )
\ ZDO_PollConfirmCB:
2700 {
\ 000000 ; Saved register size: 0
\ 000000 ; Auto size: 0
2701 (void)status; // Remove this line if this parameter is used.
2702 return;
\ 000000 02.... LJMP ?BRET
2703 }
2704
2705 /******************************************************************************
2706 * @fn ZDApp_NwkWriteNVRequest (stubs AddrMgrWriteNVRequest)
2707 *
2708 * @brief Stub routine implemented by NHLE. NHLE should call
2709 * <AddrMgrWriteNV> when appropriate.
2710 *
2711 * @param none
2712 *
2713 * @return none
2714 */
\ In segment BANKED_CODE, align 1, keep-with-next
2715 void ZDApp_NwkWriteNVRequest( void )
\ AddrMgrWriteNVRequest:
2716 {
\ 000000 ; Saved register size: 0
\ 000000 ; Auto size: 0
2717 #if defined ( NV_RESTORE )
2718 if ( !osal_get_timeoutEx( ZDAppTaskID, ZDO_NWK_UPDATE_NV ) )
2719 {
2720 // Trigger to save info into NV
2721 ZDApp_NVUpdate();
2722 }
2723 #endif
2724 }
\ 000000 02.... LJMP ?BRET
2725
2726 /*********************************************************************
2727 * Call Back Functions from Security - API
2728 */
2729
2730 /*********************************************************************
2731 * @fn ZDO_UpdateDeviceIndication
2732 *
2733 * @brief This function notifies the "Trust Center" of a
2734 * network when a device joins or leaves the network.
2735 *
2736 * @param extAddr - pointer to 64 bit address of new device
2737 * @param status - 0 if a new device joined securely
2738 * - 1 if a new device joined un-securely
2739 * - 2 if a device left the network
2740 *
2741 * @return true if newly joined device should be allowed to
2742 * remain on network
2743 */
\ In segment BANKED_CODE, align 1, keep-with-next
2744 ZStatus_t ZDO_UpdateDeviceIndication( uint8 *extAddr, uint8 status )
\ ZDO_UpdateDeviceIndication:
2745 {
\ 000000 ; Saved register size: 0
\ 000000 ; Auto size: 0
2746 // can implement a network access policy based on the
2747 // IEEE address of newly joining devices...
2748 (void)extAddr;
2749 (void)status;
2750
2751 return ZSuccess;
\ 000000 02.... LJMP ?Subroutine4 & 0xFFFF
2752 }
2753
2754 /*********************************************************************
2755 * @fn ZDApp_InMsgCB
2756 *
2757 * @brief This function is called to pass up any message that is
2758 * not yet supported. This allows for the developer to
2759 * support features themselves..
2760 *
2761 * @return none
2762 */
\ In segment BANKED_CODE, align 1, keep-with-next
2763 void ZDApp_InMsgCB( zdoIncomingMsg_t *inMsg )
\ ZDApp_InMsgCB:
2764 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 74F6 MOV A,#-0xa
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 10
\ 000005 ; Auto size: 0
\ 000005 EA MOV A,R2
\ 000006 FE MOV R6,A
\ 000007 EB MOV A,R3
\ 000008 FF MOV R7,A
2765 if ( inMsg->clusterID & ZDO_RESPONSE_BIT )
\ 000009 EA MOV A,R2
\ 00000A 12.... LCALL ?Subroutine38 & 0xFFFF
\ ??CrossCallReturnLabel_47:
\ 00000D A3 INC DPTR
\ 00000E E0 MOVX A,@DPTR
\ 00000F 5480 ANL A,#0x80
\ 000011 704F JNZ ??ZDApp_InMsgCB_0
2766 {
2767 // Handle the response message
2768 }
2769 else
2770 {
2771 // Handle the request message by sending a generic "not supported".
2772 // Device Announce doesn't have a response.
2773 if ( !(inMsg->wasBroadcast) && inMsg->clusterID != Device_annce )
\ 000013 EA MOV A,R2
\ 000014 12.... LCALL ??Subroutine51_0 & 0xFFFF
\ ??CrossCallReturnLabel_82:
\ 000017 7049 JNZ ??ZDApp_InMsgCB_0
\ 000019 EA MOV A,R2
\ 00001A 12.... LCALL ?Subroutine32 & 0xFFFF
\ ??CrossCallReturnLabel_36:
\ 00001D 6413 XRL A,#0x13
\ 00001F 7002 JNZ ??ZDApp_InMsgCB_1
\ 000021 A3 INC DPTR
\ 000022 E0 MOVX A,@DPTR
\ ??ZDApp_InMsgCB_1:
\ 000023 603D JZ ??ZDApp_InMsgCB_0
2774 {
2775 ZDP_GenericRsp( inMsg->TransSeq, &(inMsg->srcAddr), ZDP_NOT_SUPPORTED, 0,
2776 (uint16)(inMsg->clusterID | ZDO_RESPONSE_BIT), inMsg->SecurityUse );
\ 000025 ; Setup parameters for call to function ZDP_GenericRsp
\ 000025 12.... LCALL ?Subroutine31 & 0xFFFF
2777 }
2778 }
\ ??CrossCallReturnLabel_34:
\ 000028 4480 ORL A,#0x80
\ 00002A F5.. MOV ?V1,A
\ 00002C 78.. MOV R0,#?V0
\ 00002E 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000031 E4 CLR A
\ 000032 F5.. MOV ?V0,A
\ 000034 F5.. MOV ?V1,A
\ 000036 78.. MOV R0,#?V0
\ 000038 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00003B EA MOV A,R2
\ 00003C 240E ADD A,#0xe
\ 00003E F582 MOV DPL,A
\ 000040 E4 CLR A
\ 000041 3F ADDC A,R7
\ 000042 F583 MOV DPH,A
\ 000044 E0 MOVX A,@DPTR
\ 000045 FD MOV R5,A
\ 000046 7C84 MOV R4,#-0x7c
\ 000048 EA MOV A,R2
\ 000049 2402 ADD A,#0x2
\ 00004B FA MOV R2,A
\ 00004C E4 CLR A
\ 00004D 3F ADDC A,R7
\ 00004E FB MOV R3,A
\ 00004F EE MOV A,R6
\ 000050 240F ADD A,#0xf
\ 000052 F582 MOV DPL,A
\ 000054 E4 CLR A
\ 000055 3F ADDC A,R7
\ 000056 F583 MOV DPH,A
\ 000058 E0 MOVX A,@DPTR
\ 000059 F9 MOV R1,A
\ 00005A 12.... LCALL `??ZDP_GenericRsp::?relay`; Banked call to: ZDP_GenericRsp
\ 00005D 7404 MOV A,#0x4
\ 00005F 12.... LCALL ?DEALLOC_XSTACK8
2779 }
\ ??ZDApp_InMsgCB_0:
\ 000062 02.... LJMP ??Subroutine46_0 & 0xFFFF
2780
2781
2782 /*********************************************************************
2783 * @fn ZDApp_ChangeMatchDescRespPermission()
2784 *
2785 * @brief Changes the Match Descriptor Response permission.
2786 *
2787 * @param endpoint - endpoint to allow responses
2788 * @param action - true to allow responses, false to not
2789 *
2790 * @return none
2791 */
\ In segment BANKED_CODE, align 1, keep-with-next
2792 void ZDApp_ChangeMatchDescRespPermission( uint8 endpoint, uint8 action )
\ ZDApp_ChangeMatchDescRespPermission:
2793 {
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 0
2794 // Store the action
2795 afSetMatch( endpoint, action );
\ 000005 ; Setup parameters for call to function afSetMatch
\ 000005 12.... LCALL `??afSetMatch::?relay`; Banked call to: afSetMatch
2796 }
\ 000008 02.... LJMP ??Subroutine48_0 & 0xFFFF
2797
2798 /*********************************************************************
2799 * @fn ZDApp_NetworkInit()
2800 *
2801 * @brief Used to start the network joining process
2802 *
2803 * @param delay - mSec delay to wait before starting
2804 *
2805 * @return none
2806 */
\ In segment BANKED_CODE, align 1, keep-with-next
2807 void ZDApp_NetworkInit( uint16 delay )
\ ZDApp_NetworkInit:
2808 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
2809 if ( delay )
\ 000004 EA MOV A,R2
\ 000005 4B ORL A,R3
\ 000006 600B JZ ??ZDApp_NetworkInit_0
2810 {
2811 // Wait awhile before starting the device
2812 osal_start_timerEx( ZDAppTaskID, ZDO_NETWORK_INIT, delay );
\ 000008 ; Setup parameters for call to function osal_start_timerEx
\ 000008 EA MOV A,R2
\ 000009 FC MOV R4,A
\ 00000A EB MOV A,R3
\ 00000B FD MOV R5,A
\ 00000C 7A01 MOV R2,#0x1
\ 00000E 12.... LCALL ?Subroutine22 & 0xFFFF
2813 }
\ ??CrossCallReturnLabel_67:
\ 000011 8005 SJMP ??CrossCallReturnLabel_55
2814 else
2815 {
2816 osal_set_event( ZDAppTaskID, ZDO_NETWORK_INIT );
\ ??ZDApp_NetworkInit_0:
\ 000013 ; Setup parameters for call to function osal_set_event
\ 000013 7A01 MOV R2,#0x1
\ 000015 12.... LCALL ??Subroutine41_0 & 0xFFFF
2817 }
2818 }
\ ??CrossCallReturnLabel_55:
\ 000018 02.... LJMP ?Subroutine3 & 0xFFFF
2819
2820 /*********************************************************************
2821 * @fn ZDApp_NwkStateUpdateCB()
2822 *
2823 * @brief This function notifies that this device's network
2824 * state info has been changed.
2825 *
2826 * @param none
2827 *
2828 * @return none
2829 */
\ In segment BANKED_CODE, align 1, keep-with-next
2830 void ZDApp_NwkStateUpdateCB( void )
\ ZDApp_NwkStateUpdateCB:
2831 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
2832 // Notify to save info into NV
2833 if ( !osal_get_timeoutEx( ZDAppTaskID, ZDO_NWK_UPDATE_NV ) )
\ 000004 ; Setup parameters for call to function osal_get_timeoutEx
\ 000004 7A00 MOV R2,#0x0
\ 000006 7B02 MOV R3,#0x2
\ 000008 90.... MOV DPTR,#ZDAppTaskID
\ 00000B E0 MOVX A,@DPTR
\ 00000C F9 MOV R1,A
\ 00000D 12.... LCALL `??osal_get_timeoutEx::?relay`; Banked call to: osal_get_timeoutEx
2834 {
2835 // Trigger to save info into NV
2836 ZDApp_NVUpdate();
2837 }
2838 }
\ 000010 02.... LJMP ?Subroutine3 & 0xFFFF
2839
2840 /*********************************************************************
2841 * @fn ZDApp_NodeProfileSync()
2842 *
2843 * @brief Sync node with stack profile.
2844 *
2845 * @param stackProfile - stack profile of the network to join
2846 *
2847 * @return none
2848 */
\ In segment BANKED_CODE, align 1, keep-with-next
2849 void ZDApp_NodeProfileSync( uint8 stackProfile )
\ ZDApp_NodeProfileSync:
2850 {
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 0
\ 000005 E9 MOV A,R1
\ 000006 FE MOV R6,A
2851 if ( ZDO_Config_Node_Descriptor.CapabilityFlags & CAPINFO_DEVICETYPE_FFD )
\ 000007 90.... MOV DPTR,#ZDO_Config_Node_Descriptor + 2
\ 00000A E0 MOVX A,@DPTR
\ 00000B A2E1 MOV C,0xE0 /* A */.1
\ 00000D 501A JNC ??ZDApp_NodeProfileSync_0
2852 {
2853 if ( stackProfile != zgStackProfile )
\ 00000F 90.... MOV DPTR,#zgStackProfile
\ 000012 E0 MOVX A,@DPTR
\ 000013 6E XRL A,R6
\ 000014 6013 JZ ??ZDApp_NodeProfileSync_0
2854 {
2855 ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_DEVICE;
\ 000016 90.... MOV DPTR,#ZDO_Config_Node_Descriptor
\ 000019 E0 MOVX A,@DPTR
\ 00001A 54F8 ANL A,#0xf8
\ 00001C 4402 ORL A,#0x2
\ 00001E F0 MOVX @DPTR,A
2856 ZDO_Config_Node_Descriptor.CapabilityFlags = CAPINFO_DEVICETYPE_RFD | CAPINFO_POWER_AC | CAPINFO_RCVR_ON_IDLE;
\ 00001F 90.... MOV DPTR,#ZDO_Config_Node_Descriptor + 2
\ 000022 740C MOV A,#0xc
\ 000024 F0 MOVX @DPTR,A
2857 NLME_SetBroadcastFilter( ZDO_Config_Node_Descriptor.CapabilityFlags );
\ 000025 ; Setup parameters for call to function NLME_SetBroadcastFilter
\ 000025 F9 MOV R1,A
\ 000026 12.... LCALL `??NLME_SetBroadcastFilter::?relay`; Banked call to: NLME_SetBroadcastFilter
2858 }
2859 }
2860 }
\ ??ZDApp_NodeProfileSync_0:
\ 000029 02.... LJMP ??Subroutine48_0 & 0xFFFF
2861
2862 /*********************************************************************
2863 * @fn ZDApp_StartJoiningCycle()
2864 *
2865 * @brief Starts the joining cycle of a device. This will only
2866 * continue an already started (or stopped) joining cycle.
2867 *
2868 * @param none
2869 *
2870 * @return TRUE if joining stopped, FALSE if joining or rejoining
2871 */
\ In segment BANKED_CODE, align 1, keep-with-next
2872 uint8 ZDApp_StartJoiningCycle( void )
\ ZDApp_StartJoiningCycle:
2873 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
2874 if ( devState == DEV_INIT || devState == DEV_NWK_DISC )
\ 000004 90.... MOV DPTR,#devState
\ 000007 E0 MOVX A,@DPTR
\ 000008 6401 XRL A,#0x1
\ 00000A 6005 JZ ??ZDApp_StartJoiningCycle_0
\ 00000C E0 MOVX A,@DPTR
\ 00000D 6402 XRL A,#0x2
\ 00000F 7011 JNZ ??ZDApp_StartJoiningCycle_1
2875 {
2876 continueJoining = TRUE;
\ ??ZDApp_StartJoiningCycle_0:
\ 000011 90.... MOV DPTR,#continueJoining
\ 000014 7401 MOV A,#0x1
\ 000016 F0 MOVX @DPTR,A
2877 ZDApp_NetworkInit( 0 );
\ 000017 ; Setup parameters for call to function ZDApp_NetworkInit
\ 000017 7A00 MOV R2,#0x0
\ 000019 7B00 MOV R3,#0x0
\ 00001B 12.... LCALL `??ZDApp_NetworkInit::?relay`; Banked call to: ZDApp_NetworkInit
2878
2879 return ( TRUE );
\ 00001E 7901 MOV R1,#0x1
\ 000020 8002 SJMP ??ZDApp_StartJoiningCycle_2
2880 }
2881 else
2882 return ( FALSE );
\ ??ZDApp_StartJoiningCycle_1:
\ 000022 7900 MOV R1,#0x0
\ ??ZDApp_StartJoiningCycle_2:
\ 000024 02.... LJMP ?Subroutine3 & 0xFFFF
2883 }
2884
2885 /*********************************************************************
2886 * @fn ZDApp_StopJoiningCycle()
2887 *
2888 * @brief Stops the joining or rejoining process of a device.
2889 *
2890 * @param none
2891 *
2892 * @return TRUE if joining stopped, FALSE if joining or rejoining
2893 */
\ In segment BANKED_CODE, align 1, keep-with-next
2894 uint8 ZDApp_StopJoiningCycle( void )
\ ZDApp_StopJoiningCycle:
2895 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
2896 if ( devState == DEV_INIT || devState == DEV_NWK_DISC )
\ 000004 90.... MOV DPTR,#devState
\ 000007 E0 MOVX A,@DPTR
\ 000008 6401 XRL A,#0x1
\ 00000A 6005 JZ ??ZDApp_StopJoiningCycle_0
\ 00000C E0 MOVX A,@DPTR
\ 00000D 6402 XRL A,#0x2
\ 00000F 7009 JNZ ??ZDApp_StopJoiningCycle_1
2897 {
2898 continueJoining = FALSE;
\ ??ZDApp_StopJoiningCycle_0:
\ 000011 90.... MOV DPTR,#continueJoining
\ 000014 E4 CLR A
\ 000015 F0 MOVX @DPTR,A
2899 return ( TRUE );
\ 000016 7901 MOV R1,#0x1
\ 000018 8002 SJMP ??ZDApp_StopJoiningCycle_2
2900 }
2901 else
2902 return ( FALSE );
\ ??ZDApp_StopJoiningCycle_1:
\ 00001A 7900 MOV R1,#0x0
\ ??ZDApp_StopJoiningCycle_2:
\ 00001C 02.... LJMP ?Subroutine3 & 0xFFFF
2903 }
2904
2905 /*********************************************************************
2906 * @fn ZDApp_AnnounceNewAddress()
2907 *
2908 * @brief Send Device Announce and hold all transmissions for
2909 * new address timeout.
2910 *
2911 * @param none
2912 *
2913 * @return none
2914 */
\ In segment BANKED_CODE, align 1, keep-with-next
2915 void ZDApp_AnnounceNewAddress( void )
\ ZDApp_AnnounceNewAddress:
2916 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 74F6 MOV A,#-0xa
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 10
\ 000005 ; Auto size: 0
2917 #if defined ( ZIGBEE_NWK_UNIQUE_ADDR_CHECK )
2918 // Turn off data request hold
2919 APSME_HoldDataRequests( 0 );
\ 000005 ; Setup parameters for call to function APSME_HoldDataRequests
\ 000005 7A00 MOV R2,#0x0
\ 000007 7B00 MOV R3,#0x0
\ 000009 12.... LCALL `??APSME_HoldDataRequests::?relay`; Banked call to: APSME_HoldDataRequests
2920 #endif
2921
2922 ZDP_DeviceAnnce( NLME_GetShortAddr(), NLME_GetExtAddr(),
2923 ZDO_Config_Node_Descriptor.CapabilityFlags, 0 );
\ 00000C ; Setup parameters for call to function NLME_GetExtAddr
\ 00000C 12.... LCALL `??NLME_GetExtAddr::?relay`; Banked call to: NLME_GetExtAddr
\ 00000F 8A.. MOV ?V0,R2
\ 000011 8B.. MOV ?V1,R3
\ 000013 AE.. MOV R6,?V0
\ 000015 ; Setup parameters for call to function NLME_GetShortAddr
\ 000015 12.... LCALL `??NLME_GetShortAddr::?relay`; Banked call to: NLME_GetShortAddr
\ 000018 ; Setup parameters for call to function ZDP_DeviceAnnce
\ 000018 75..00 MOV ?V0,#0x0
\ 00001B 78.. MOV R0,#?V0
\ 00001D 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 000020 90.... MOV DPTR,#ZDO_Config_Node_Descriptor + 2
\ 000023 E0 MOVX A,@DPTR
\ 000024 F9 MOV R1,A
\ 000025 EE MOV A,R6
\ 000026 FC MOV R4,A
\ 000027 AD.. MOV R5,?V1
\ 000029 12.... LCALL `??ZDP_DeviceAnnce::?relay`; Banked call to: ZDP_DeviceAnnce
\ 00002C 7401 MOV A,#0x1
\ 00002E 12.... LCALL ?DEALLOC_XSTACK8
2924
2925 #if defined ( ZIGBEE_NWK_UNIQUE_ADDR_CHECK )
2926 // Setup the timeout
2927 APSME_HoldDataRequests( ZDAPP_HOLD_DATA_REQUESTS_TIMEOUT );
\ 000031 ; Setup parameters for call to function APSME_HoldDataRequests
\ 000031 7A00 MOV R2,#0x0
\ 000033 7B00 MOV R3,#0x0
\ 000035 12.... LCALL `??APSME_HoldDataRequests::?relay`; Banked call to: APSME_HoldDataRequests
2928 #endif
2929 }
\ 000038 02.... LJMP ??Subroutine46_0 & 0xFFFF
2930
2931 /*********************************************************************
2932 * @fn ZDApp_NVUpdate
2933 *
2934 * @brief Set the NV Update Timer.
2935 *
2936 * @param none
2937 *
2938 * @return none
2939 */
\ In segment BANKED_CODE, align 1, keep-with-next
2940 void ZDApp_NVUpdate( void )
\ ZDApp_NVUpdate:
2941 {
\ 000000 ; Saved register size: 0
\ 000000 ; Auto size: 0
2942 #if defined ( NV_RESTORE )
2943 osal_start_timerEx( ZDAppTaskID, ZDO_NWK_UPDATE_NV, ZDAPP_UPDATE_NWK_NV_TIME );
2944 #endif
2945 }
\ 000000 02.... LJMP ?BRET
2946
2947 /*********************************************************************
2948 * @fn ZDApp_CoordStartPANIDConflictCB()
2949 *
2950 * @brief Returns a PAN ID for the network layer to use during
2951 * a coordinator start and there is another network with
2952 * the intended PANID.
2953 *
2954 * @param panid - the intended PAN ID
2955 *
2956 * @return PANID to try
2957 */
\ In segment BANKED_CODE, align 1, keep-with-next
2958 uint16 ZDApp_CoordStartPANIDConflictCB( uint16 panid )
\ ZDApp_CoordStartPANIDConflictCB:
2959 {
\ 000000 ; Saved register size: 0
\ 000000 ; Auto size: 0
2960 return ( panid + 1 );
\ 000000 EA MOV A,R2
\ 000001 2401 ADD A,#0x1
\ 000003 0A INC R2
\ 000004 5001 JNC ??ZDApp_CoordStartPANIDConflictCB_0
\ 000006 0B INC R3
\ ??ZDApp_CoordStartPANIDConflictCB_0:
\ 000007 02.... LJMP ?BRET
2961 }
2962
2963 /*********************************************************************
2964 * @fn ZDO_SrcRtgIndCB
2965 *
2966 * @brief This function notifies the ZDO available src route record received.
2967 *
2968 * @param srcAddr - source address of the source route
2969 * @param relayCnt - number of devices in the relay list
2970 * @param relayList - relay list of the source route
2971 *
2972 * @return none
2973 */
\ In segment BANKED_CODE, align 1, keep-with-next
2974 void ZDO_SrcRtgIndCB (uint16 srcAddr, uint8 relayCnt, uint16* pRelayList )
\ ZDO_SrcRtgIndCB:
2975 {
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 5
\ 000005 74FB MOV A,#-0x5
\ 000007 12.... LCALL ?ALLOC_XSTACK8
2976 zdoSrcRtg_t srcRtg;
2977
2978 srcRtg.srcAddr = srcAddr;
\ 00000A 12.... LCALL ?Subroutine12 & 0xFFFF
2979 srcRtg.relayCnt = relayCnt;
\ ??CrossCallReturnLabel_101:
\ 00000D 7402 MOV A,#0x2
\ 00000F 12.... LCALL ?XSTACK_DISP0_8
\ 000012 E9 MOV A,R1
\ 000013 F0 MOVX @DPTR,A
2980 srcRtg.pRelayList = pRelayList;
\ 000014 7403 MOV A,#0x3
\ 000016 12.... LCALL ?XSTACK_DISP0_8
\ 000019 EC MOV A,R4
\ 00001A F0 MOVX @DPTR,A
\ 00001B A3 INC DPTR
\ 00001C ED MOV A,R5
\ 00001D F0 MOVX @DPTR,A
2981
2982 if( zdoCBFunc[ZDO_SRC_RTG_IND_CBID] != NULL )
\ 00001E 90.... MOV DPTR,#zdoCBFunc
\ 000021 12.... LCALL ?Subroutine13 & 0xFFFF
\ ??CrossCallReturnLabel_10:
\ 000024 600A JZ ??ZDO_SrcRtgIndCB_0
2983 {
2984 zdoCBFunc[ZDO_SRC_RTG_IND_CBID]( (void*)&srcRtg );
\ 000026 ; Setup parameters for indirect call
\ 000026 AA.. MOV R2,?XSP + 0
\ 000028 AB.. MOV R3,?XSP + 1
\ 00002A 12.... LCALL ??Subroutine54_0 & 0xFFFF
2985 }
\ ??CrossCallReturnLabel_89:
\ 00002D 12.... LCALL ?CALL_IND
2986 }
\ ??ZDO_SrcRtgIndCB_0:
\ 000030 02.... LJMP ?Subroutine6 & 0xFFFF
2987
2988 /*********************************************************************
2989 * @fn ZDApp_InitZdoCBFunc
2990 *
2991 * @brief Call this function to initialize zdoCBFunc[]
2992 *
2993 * @param none
2994 *
2995 * @return none
2996 */
\ In segment BANKED_CODE, align 1, keep-with-next
2997 void ZDApp_InitZdoCBFunc( void )
\ ZDApp_InitZdoCBFunc:
2998 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
2999 uint8 i;
3000
3001 for ( i=0; i< MAX_ZDO_CB_FUNC; i++ )
\ 000004 7A00 MOV R2,#0x0
3002 {
3003 zdoCBFunc[i] = NULL;
\ ??ZDApp_InitZdoCBFunc_0:
\ 000006 EA MOV A,R2
\ 000007 25E0 ADD A,0xE0 /* A */
\ 000009 12.... LCALL ?Subroutine35 & 0xFFFF
3004 }
\ ??CrossCallReturnLabel_41:
\ 00000C E4 CLR A
\ 00000D F0 MOVX @DPTR,A
\ 00000E A3 INC DPTR
\ 00000F F0 MOVX @DPTR,A
\ 000010 0A INC R2
\ 000011 EA MOV A,R2
\ 000012 C3 CLR C
\ 000013 9406 SUBB A,#0x6
\ 000015 40EF JC ??ZDApp_InitZdoCBFunc_0
3005 }
\ 000017 02.... LJMP ?Subroutine3 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine35:
\ 000000 F8 MOV R0,A
\ 000001 E4 CLR A
\ 000002 33 RLC A
\ 000003 F9 MOV R1,A
\ 000004 74.. MOV A,#zdoCBFunc & 0xff
\ 000006 28 ADD A,R0
\ 000007 F582 MOV DPL,A
\ 000009 74.. MOV A,#(zdoCBFunc >> 8) & 0xff
\ 00000B 39 ADDC A,R1
\ 00000C F583 MOV DPH,A
\ 00000E 22 RET
3006
3007 /*********************************************************************
3008 * @fn ZDO_RegisterForZdoCB
3009 *
3010 * @brief Call this function to register the higher layer (for
3011 * example, the Application layer or MT layer) with ZDO
3012 * callbacks to get notified of some ZDO indication like
3013 * existence of a concentrator or receipt of a source
3014 * route record.
3015 *
3016 * @param indID - ZDO Indication ID
3017 * @param pFn - Callback function pointer
3018 *
3019 * @return ZSuccess - successful, ZInvalidParameter if not
3020 */
\ In segment BANKED_CODE, align 1, keep-with-next
3021 ZStatus_t ZDO_RegisterForZdoCB( uint8 indID, pfnZdoCb pFn )
\ ZDO_RegisterForZdoCB:
3022 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
\ 000004 E9 MOV A,R1
3023 // Check the range of the indication ID
3024 if ( indID < MAX_ZDO_CB_FUNC )
\ 000005 C3 CLR C
\ 000006 9406 SUBB A,#0x6
\ 000008 500A JNC ??ZDO_RegisterForZdoCB_0
3025 {
3026 zdoCBFunc[indID] = pFn;
\ 00000A 12.... LCALL ?Subroutine25 & 0xFFFF
\ ??CrossCallReturnLabel_23:
\ 00000D 12.... LCALL ??Subroutine55_0 & 0xFFFF
3027 return ZSuccess;
\ ??CrossCallReturnLabel_98:
\ 000010 7900 MOV R1,#0x0
\ 000012 8002 SJMP ??ZDO_RegisterForZdoCB_1
3028 }
3029
3030 return ZInvalidParameter;
\ ??ZDO_RegisterForZdoCB_0:
\ 000014 7902 MOV R1,#0x2
\ ??ZDO_RegisterForZdoCB_1:
\ 000016 02.... LJMP ?Subroutine3 & 0xFFFF
3031 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine25:
\ 000000 E9 MOV A,R1
\ 000001 29 ADD A,R1
\ 000002 12.... LCALL ?Subroutine35 & 0xFFFF
\ ??CrossCallReturnLabel_42:
\ 000005 22 RET
3032
3033 /*********************************************************************
3034 * @fn ZDO_DeregisterForZdoCB
3035 *
3036 * @brief Call this function to de-register the higher layer (for
3037 * example, the Application layer or MT layer) with ZDO
3038 * callbacks to get notified of some ZDO indication like
3039 * existence of a concentrator or receipt of a source
3040 * route record.
3041 *
3042 * @param indID - ZDO Indication ID
3043 *
3044 * @return ZSuccess - successful, ZInvalidParameter if not
3045 */
\ In segment BANKED_CODE, align 1, keep-with-next
3046 ZStatus_t ZDO_DeregisterForZdoCB( uint8 indID )
\ ZDO_DeregisterForZdoCB:
3047 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
\ 000004 E9 MOV A,R1
3048 // Check the range of the indication ID
3049 if ( indID < MAX_ZDO_CB_FUNC )
\ 000005 C3 CLR C
\ 000006 9406 SUBB A,#0x6
\ 000008 500A JNC ??ZDO_DeregisterForZdoCB_0
3050 {
3051 zdoCBFunc[indID] = NULL;
\ 00000A 12.... LCALL ?Subroutine25 & 0xFFFF
\ ??CrossCallReturnLabel_24:
\ 00000D E4 CLR A
\ 00000E F0 MOVX @DPTR,A
\ 00000F A3 INC DPTR
\ 000010 F0 MOVX @DPTR,A
3052 return ZSuccess;
\ 000011 F9 MOV R1,A
\ 000012 8002 SJMP ??ZDO_DeregisterForZdoCB_1
3053 }
3054
3055 return ZInvalidParameter;
\ ??ZDO_DeregisterForZdoCB_0:
\ 000014 7902 MOV R1,#0x2
\ ??ZDO_DeregisterForZdoCB_1:
\ 000016 02.... LJMP ?Subroutine3 & 0xFFFF
3056 }
\ In segment XDATA_ID, align 1, keep-with-next
\ `?<Initializer for zdoDiscCounter>`:
\ 000000 01 DB 1
\ In segment XDATA_ID, align 1, keep-with-next
\ `?<Initializer for continueJoining>`:
\ 000000 01 DB 1
\ In segment XDATA_ID, align 1, keep-with-next
\ `?<Initializer for devState>`:
\ 000000 01 DB 1
\ In segment XDATA_ID, align 1, keep-with-next
\ `?<Initializer for ZDApp_epDesc>`:
\ 000000 00 DB 0
\ 000001 .... DW ZDAppTaskID
\ 000003 0000 DW 0H
\ 000005 00 DB 0
\ In segment XDATA_ID, align 1, keep-with-next
\ `?<Initializer for ZDApp_SavedPollRate>`:
\ 000000 E803 DW 1000
\ In segment XDATA_ROM_C, align 1
\ __Constant_1:
\ 000000 01000000 DD 1
\ In segment XDATA_ROM_C, align 1
\ __Constant_3e8:
\ 000000 E8030000 DD 1000
3057
3058 /*********************************************************************
3059 *********************************************************************/
Maximum stack usage in bytes:
ISTACK XSTACK Function
------ ------ --------
0 0 AddrMgrWriteNVRequest
0 0 ZDAppCheckForHoldKey
2 12 ZDAppDetermineDeviceType
2 0 -> nwk_ExtPANIDValid
0 23 ZDApp_AnnounceNewAddress
0 10 -> APSME_HoldDataRequests
0 10 -> NLME_GetExtAddr
0 10 -> NLME_GetShortAddr
0 11 -> ZDP_DeviceAnnce
0 9 ZDApp_ChangeMatchDescRespPermission
0 9 -> afSetMatch
0 0 ZDApp_CoordStartPANIDConflictCB
2 9 ZDApp_DeviceAuthEvt
2 0 -> NLME_SetPollRate
2 0 -> ZDApp_AnnounceNewAddress
2 0 -> ZDApp_ResetTimerCancel
2 0 -> ZDApp_SaveNwkKey
2 0 -> osal_set_event
0 16 ZDApp_DeviceConfigured
0 16 -> osal_nv_read
0 14 ZDApp_InMsgCB
0 14 -> ZDP_GenericRsp
0 9 ZDApp_Init
0 9 -> NLME_GetExtAddr
0 9 -> ZDApp_InitUserDesc
0 9 -> ZDApp_InitZdoCBFunc
0 9 -> ZDApp_RegisterCBs
0 9 -> ZDOInitDevice
0 9 -> ZDO_Init
0 9 -> afRegister
0 40 ZDApp_InitUserDesc
0 27 -> osal_memset
0 29 -> osal_nv_item_init
0 31 -> osal_nv_read
2 9 ZDApp_InitZdoCBFunc
0 20 ZDApp_JoinReq
0 16 -> NLME_JoinRequest
0 12 -> ZDApp_NodeProfileSync
2 0 ZDApp_LeaveCtrlBypass
0 26 ZDApp_LeaveCtrlInit
0 12 -> osal_nv_item_init
0 14 -> osal_nv_read
0 14 ZDApp_LeaveCtrlReset
0 14 -> osal_nv_write
0 23 ZDApp_LeaveCtrlSet
0 14 -> osal_nv_write
2 12 ZDApp_LeaveCtrlStartup
2 0 -> ZDApp_LeaveCtrlReset
0 19 ZDApp_LeaveReset
0 9 -> ZDApp_LeaveCtrlSet
0 9 -> ZDApp_ResetTimerStart
0 0 ZDApp_LeaveUpdate
0 0 ZDApp_NVUpdate
0 12 ZDApp_NetworkDiscoveryReq
0 12 -> NLME_NetworkDiscoveryRequest
2 12 ZDApp_NetworkInit
2 0 -> osal_set_event
2 0 -> osal_start_timerEx
2 0 ZDApp_NetworkStartEvt
2 0 -> NLME_GetEnergyThreshold
2 0 -> NLME_SetEnergyThreshold
2 0 -> osal_pwrmgr_device
2 0 -> osal_set_event
0 21 ZDApp_NodeProfileSync
0 9 -> NLME_SetBroadcastFilter
0 25 ZDApp_NwkDescListProcessing
0 14 -> nwk_ExtPANIDValid
0 14 -> nwk_getNwkDescList
0 14 -> sAddrExtCmp
2 0 ZDApp_NwkStateUpdateCB
2 0 -> osal_get_timeoutEx
0 42 ZDApp_ProcessMsgCBs
0 31 -> ZDO_ParseAddrRsp
0 31 -> ZDO_ParseBindUnbindReq
0 31 -> ZDO_ProcessBindUnbindReq
0 31 -> ZDO_UpdateAddrManager
0 31 -> osal_mem_free
0 23 ZDApp_ProcessNetworkJoin
0 12 -> NLME_GetShortAddr
0 12 -> NLME_NwkDiscTerm
0 12 -> NLME_SetPollRate
0 12 -> NLME_SetQueuedPollRate
0 12 -> NLME_SetResponseRate
0 12 -> ZDApp_AnnounceNewAddress
0 12 -> ZDApp_NetworkInit
0 12 -> ZMacSetReq
0 12 -> nwkNeighborInitTable
0 12 -> osal_rand
0 12 -> osal_set_event
0 27 ZDApp_ProcessOSALMsg
0 15 -> NLME_JoinRequest
0 11 -> NLME_ReJoinRequest
0 11 -> NLME_SetPollRate
0 11 -> NLME_SetQueuedPollRate
0 11 -> NLME_SetResponseRate
0 11 -> ZDApp_NetworkInit
0 11 -> ZDApp_NodeProfileSync
0 11 -> ZDApp_NwkDescListProcessing
0 11 -> ZDApp_ProcessMsgCBs
0 11 -> ZDApp_ProcessNetworkJoin
0 11 -> ZDP_IncomingData
0 11 -> ZMacSetReq
0 11 -> osal_rand
0 11 -> sAddrExtCpy
0 9 ZDApp_ProcessSecEvent
0 9 -> ZDApp_DeviceAuthEvt
0 9 -> ZDApp_SaveNwkKey
0 9 -> ZDSecMgrSaveTCLinkKey
2 0 ZDApp_ProcessSecMsg
2 0 -> ZDSecMgrSwitchKeyInd
2 0 -> ZDSecMgrTransportKeyInd
0 9 ZDApp_ReadNetworkRestoreState
0 9 -> zgReadStartupOptions
2 9 ZDApp_RegisterCBs
2 0 -> ZDO_RegisterForZDOMsg
0 35 ZDApp_ResetNwkKey
0 31 -> osal_memset
0 35 -> osal_nv_write
2 0 ZDApp_ResetTimerCancel
2 0 -> osal_stop_timerEx
2 9 ZDApp_ResetTimerStart
2 0 -> osal_start_timerEx
0 9 ZDApp_RestoreNetworkState
0 9 -> NLME_GetShortAddr
0 9 -> NLME_InitNV
0 9 -> NLME_RestoreFromNV
0 9 -> sAddrExtCpy
0 37 ZDApp_RestoreNwkKey
0 33 -> osal_memset
0 37 -> osal_nv_read
0 0 ZDApp_SaveNetworkStateEvt
0 46 ZDApp_SaveNwkKey
0 33 -> SSP_ReadNwkActiveKey
0 33 -> osal_memset
0 37 -> osal_nv_write
0 9 ZDApp_SecInit
0 9 -> ZDSecMgrInit
0 9 ZDApp_SendEventMsg
0 9 -> ZDApp_SendMsg
1 33 ZDApp_SendMsg
0 19 -> osal_memcpy
0 16 -> osal_msg_allocate
0 16 -> osal_msg_send
2 0 ZDApp_StartJoiningCycle
2 0 -> ZDApp_NetworkInit
2 0 ZDApp_StopJoiningCycle
0 12 ZDApp_event_loop
0 12 -> Onboard_soft_reset
0 12 -> ZDApp_ProcessOSALMsg
0 12 -> ZDO_StartDevice
0 12 -> ZDO_UpdateNwkStatus
0 12 -> osal_msg_deallocate
0 12 -> osal_msg_receive
0 12 -> osal_set_event
0 12 -> osal_start_timerEx
0 12 -> zgWriteStartupOptions
0 21 ZDOInitDevice
0 12 -> NLME_SetBroadcastFilter
0 12 -> ZDAppDetermineDeviceType
0 12 -> ZDApp_LeaveCtrlInit
0 12 -> ZDApp_LeaveCtrlStartup
0 12 -> ZDApp_NetworkInit
0 12 -> ZDConfig_InitDescriptors
0 12 -> ZDSecMgrInit
0 12 -> osal_rand
0 12 -> osal_set_event
0 12 -> zgInitItems
0 12 -> zgWriteStartupOptions
0 12 ZDO_AddrChangeIndicationCB
0 12 -> ZDApp_AnnounceNewAddress
0 12 -> osal_msg_allocate
0 12 -> osal_msg_send
0 12 -> osal_set_event
1 14 ZDO_ConcentratorIndicationCB
2 0 ZDO_DeregisterForZdoCB
1 14 ZDO_JoinConfirmCB
0 14 -> ZDApp_SendMsg
0 1 ZDO_JoinIndicationCB
0 10 ZDO_LeaveCnf
0 10 -> NLME_GetExtAddr
0 10 -> ZDApp_LeaveReset
0 10 -> sAddrExtCmp
0 10 ZDO_LeaveInd
0 10 -> NLME_GetCoordShortAddr
0 10 -> ZDApp_LeaveReset
2 0 ZDO_ManytoOneFailureIndicationCB
2 0 -> RTG_MTORouteReq
3 3 ZDO_NetworkDiscoveryConfirmCB
2 3 -> ZDApp_SendMsg
0 9 ZDO_NetworkFormationConfirmCB
0 9 -> osal_set_event
0 0 ZDO_PollConfirmCB
2 0 ZDO_RegisterForZdoCB
1 14 ZDO_SrcRtgIndCB
0 9 ZDO_StartRouterConfirmCB
0 9 -> osal_set_event
0 9 ZDO_SyncIndicationCB
0 9 -> ZDApp_SendMsg
0 9 -> nwkNeighborInitTable
0 0 ZDO_UpdateDeviceIndication
1 14 ZDO_beaconNotifyIndCB
0 14 -> osal_mem_alloc
0 14 -> osal_memset
0 14 -> sAddrExtCpy
Segment part sizes:
Bytes Function/Label
----- --------------
2 ?<Initializer for ZDApp_SavedPollRate>
6 ?<Initializer for ZDApp_epDesc>
1 ?<Initializer for continueJoining>
1 ?<Initializer for devState>
1 ?<Initializer for zdoDiscCounter>
3 ??Subroutine39_0
5 ??Subroutine40_0
11 ??Subroutine41_0
14 ??Subroutine42_0
8 ??Subroutine43_0
9 ??Subroutine44_0
3 ??Subroutine45_0
5 ??Subroutine46_0
6 ??Subroutine47_0
5 ??Subroutine48_0
6 ??Subroutine49_0
6 ??Subroutine50_0
10 ??Subroutine51_0
1 ??Subroutine52_0
3 ??Subroutine53_0
6 ??Subroutine54_0
6 ??Subroutine55_0
3 ?Subroutine0
2 ?Subroutine1
13 ?Subroutine10
6 ?Subroutine11
6 ?Subroutine12
8 ?Subroutine13
5 ?Subroutine14
2 ?Subroutine15
4 ?Subroutine16
8 ?Subroutine17
9 ?Subroutine18
2 ?Subroutine19
35 ?Subroutine2
9 ?Subroutine20
4 ?Subroutine21
5 ?Subroutine22
15 ?Subroutine23
22 ?Subroutine24
6 ?Subroutine25
1 ?Subroutine26
22 ?Subroutine27
6 ?Subroutine28
8 ?Subroutine29
7 ?Subroutine3
1 ?Subroutine30
9 ?Subroutine31
4 ?Subroutine32
10 ?Subroutine33
11 ?Subroutine34
15 ?Subroutine35
12 ?Subroutine36
5 ?Subroutine37
9 ?Subroutine38
5 ?Subroutine4
5 ?Subroutine5
8 ?Subroutine6
5 ?Subroutine7
5 ?Subroutine8
5 ?Subroutine9
3 AddrMgrWriteNVRequest
3 ZDAppCheckForHoldKey
74 ZDAppDetermineDeviceType
9 ZDAppNwkAddr
1 ZDAppTaskID
59 ZDApp_AnnounceNewAddress
2 ZDApp_AutoFindMode_epDesc
11 ZDApp_ChangeMatchDescRespPermission
10 ZDApp_CoordStartPANIDConflictCB
46 ZDApp_DeviceAuthEvt
83 ZDApp_DeviceConfigured
101 ZDApp_InMsgCB
69 ZDApp_Init
89 ZDApp_InitUserDesc
26 ZDApp_InitZdoCBFunc
75 ZDApp_JoinReq
1 ZDApp_LeaveCtrl
16 ZDApp_LeaveCtrlBypass
71 ZDApp_LeaveCtrlInit
13 ZDApp_LeaveCtrlReset
22 ZDApp_LeaveCtrlSet
48 ZDApp_LeaveCtrlStartup
17 ZDApp_LeaveReset
3 ZDApp_LeaveUpdate
3 ZDApp_NVUpdate
11 ZDApp_NetworkDiscoveryReq
27 ZDApp_NetworkInit
82 ZDApp_NetworkStartEvt
44 ZDApp_NodeProfileSync
262 ZDApp_NwkDescListProcessing
19 ZDApp_NwkStateUpdateCB
105 ZDApp_ProcessMsgCBs
327 ZDApp_ProcessNetworkJoin
429 ZDApp_ProcessOSALMsg
100 ZDApp_ProcessSecEvent
56 ZDApp_ProcessSecMsg
23 ZDApp_ReadNetworkRestoreState
31 ZDApp_RegisterCBs
48 ZDApp_ResetNwkKey
19 ZDApp_ResetTimerCancel
16 ZDApp_ResetTimerStart
62 ZDApp_RestoreNetworkState
126 ZDApp_RestoreNwkKey
3 ZDApp_SaveNetworkStateEvt
96 ZDApp_SaveNwkKey
2 ZDApp_SavedPollRate
11 ZDApp_SecInit
15 ZDApp_SendEventMsg
85 ZDApp_SendMsg
39 ZDApp_StartJoiningCycle
31 ZDApp_StopJoiningCycle
6 ZDApp_epDesc
167 ZDApp_event_loop
143 ZDOInitDevice
81 ZDO_AddrChangeIndicationCB
51 ZDO_ConcentratorIndicationCB
25 ZDO_DeregisterForZdoCB
99 ZDO_JoinConfirmCB
0 ZDO_JoinIndicationCB
67 ZDO_LeaveCnf
83 ZDO_LeaveInd
10 ZDO_ManytoOneFailureIndicationCB
62 ZDO_NetworkDiscoveryConfirmCB
26 ZDO_NetworkFormationConfirmCB
3 ZDO_PollConfirmCB
25 ZDO_RegisterForZdoCB
51 ZDO_SrcRtgIndCB
26 ZDO_StartRouterConfirmCB
29 ZDO_SyncIndicationCB
3 ZDO_UpdateDeviceIndication
8 ZDO_UseExtendedPANID
561 ZDO_beaconNotifyIndCB
4 __Constant_1
4 __Constant_3e8
1 _tmpRejoinState
1 continueJoining
1 devStartMode
1 devState
2 nwkFrameCounterChanges
1 nwkStatus
1 retryCnt
1 zdappMgmtNwkDiscReqInProgress
9 zdappMgmtNwkDiscRspAddr
1 zdappMgmtNwkDiscRspTransSeq
1 zdappMgmtNwkDiscStartIndex
1 zdappMgmtSavedNwkState
12 zdoCBFunc
1 zdoDiscCounter
390 -- Other
4 845 bytes in segment BANKED_CODE
390 bytes in segment BANK_RELAYS
11 bytes in segment XDATA_I
11 bytes in segment XDATA_ID
8 bytes in segment XDATA_ROM_C
52 bytes in segment XDATA_Z
401 bytes of CODE memory
0 bytes of CONST memory (+ 8 bytes shared)
4 845 bytes of HUGECODE memory
63 bytes of XDATA memory
Errors: none
Warnings: none