7536 lines
357 KiB
Plaintext
7536 lines
357 KiB
Plaintext
###############################################################################
|
|
#
|
|
# IAR C/C++ Compiler V10.30.1.6000 for 8051 23/Aug/2019 12:13:09
|
|
# 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\EWDF27.tmp
|
|
# (E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Components\stack\zdo\ZDApp.c
|
|
# -D ZIGBEEPRO -D ZTOOL_P1 -D MT_TASK -D MT_SYS_FUNC -D MT_ZDO_FUNC -D
|
|
# LCD_SUPPORTED=DEBUG -D SAPP_ZSTACK -lC
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\RouterEB\List
|
|
# -lA
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\RouterEB\List
|
|
# --diag_suppress Pe001,Pa010 -o
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\RouterEB\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\f8wRouter.cfg
|
|
# (-DCPU32MHZ -DROOT=__near_func -DMAC_CFG_APP_PENDING_QUEUE=TRUE
|
|
# -DMAC_CFG_TX_DATA_MAX=5 -DMAC_CFG_TX_MAX=8 -DMAC_CFG_RX_MAX=5
|
|
# -DRTR_NWK) -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\RouterEB\List\ZDApp.lst
|
|
# Object file =
|
|
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\RouterEB\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 )
|
|
|
|
\ In segment XDATA_Z, align 1, keep-with-next
|
|
145 uint8 MatchRsps = 0;
|
|
\ MatchRsps:
|
|
\ 000000 DS 1
|
|
\ 000001 REQUIRE __INIT_XDATA_Z
|
|
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 ??Subroutine52_0 & 0xFFFF
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ??Subroutine52_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 ??Subroutine52_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 ??Subroutine46_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_69:
|
|
\ 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 8076 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 806C SJMP ??ZDApp_event_loop_4
|
|
395
|
|
396 if ( ZSTACK_ROUTER_BUILD )
|
|
397 {
|
|
398 if ( events & ZDO_NETWORK_START )
|
|
\ ??ZDApp_event_loop_1:
|
|
\ 000053 5402 ANL A,#0x2
|
|
\ 000055 6008 JZ ??ZDApp_event_loop_5
|
|
399 {
|
|
400 ZDApp_NetworkStartEvt();
|
|
\ 000057 ; Setup parameters for call to function ZDApp_NetworkStartEvt
|
|
\ 000057 12.... LCALL `??ZDApp_NetworkStartEvt::?relay`; Banked call to: ZDApp_NetworkStartEvt
|
|
401
|
|
402 // Return unprocessed events
|
|
403 return (events ^ ZDO_NETWORK_START);
|
|
\ 00005A EE MOV A,R6
|
|
\ 00005B 6402 XRL A,#0x2
|
|
\ 00005D 8049 SJMP ??ZDApp_event_loop_2
|
|
404 }
|
|
405
|
|
406 if ( events & ZDO_ROUTER_START )
|
|
\ ??ZDApp_event_loop_5:
|
|
\ 00005F EA MOV A,R2
|
|
\ 000060 5420 ANL A,#0x20
|
|
\ 000062 601E JZ ??ZDApp_event_loop_6
|
|
407 {
|
|
408 if ( nwkStatus == ZSuccess )
|
|
\ 000064 90.... MOV DPTR,#nwkStatus
|
|
\ 000067 E0 MOVX A,@DPTR
|
|
\ 000068 7010 JNZ ??ZDApp_event_loop_7
|
|
409 {
|
|
410 if ( devState == DEV_END_DEVICE )
|
|
\ 00006A 90.... MOV DPTR,#devState
|
|
\ 00006D E0 MOVX A,@DPTR
|
|
\ 00006E 6406 XRL A,#0x6
|
|
\ 000070 7003 JNZ ??ZDApp_event_loop_8
|
|
411 devState = DEV_ROUTER;
|
|
\ 000072 7407 MOV A,#0x7
|
|
\ 000074 F0 MOVX @DPTR,A
|
|
412
|
|
413 osal_pwrmgr_device( PWRMGR_ALWAYS_ON );
|
|
\ ??ZDApp_event_loop_8:
|
|
\ 000075 ; Setup parameters for call to function osal_pwrmgr_device
|
|
\ 000075 7900 MOV R1,#0x0
|
|
\ 000077 12.... LCALL `??osal_pwrmgr_device::?relay`; Banked call to: osal_pwrmgr_device
|
|
414 }
|
|
415 else
|
|
416 {
|
|
417 // remain as end device!!
|
|
418 }
|
|
419 osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );
|
|
\ ??ZDApp_event_loop_7:
|
|
\ 00007A ; Setup parameters for call to function osal_set_event
|
|
\ 00007A 12.... LCALL ?Subroutine17 & 0xFFFF
|
|
420
|
|
421 // Return unprocessed events
|
|
422 return (events ^ ZDO_ROUTER_START);
|
|
\ ??CrossCallReturnLabel_59:
|
|
\ 00007D EE MOV A,R6
|
|
\ 00007E 6420 XRL A,#0x20
|
|
\ 000080 8026 SJMP ??ZDApp_event_loop_2
|
|
423 }
|
|
424 }
|
|
425
|
|
426 if ( events & ZDO_STATE_CHANGE_EVT )
|
|
\ ??ZDApp_event_loop_6:
|
|
\ 000082 EA MOV A,R2
|
|
\ 000083 5410 ANL A,#0x10
|
|
\ 000085 6025 JZ ??ZDApp_event_loop_9
|
|
427 {
|
|
428 ZDO_UpdateNwkStatus( devState );
|
|
\ 000087 ; Setup parameters for call to function ZDO_UpdateNwkStatus
|
|
\ 000087 90.... MOV DPTR,#devState
|
|
\ 00008A E0 MOVX A,@DPTR
|
|
\ 00008B F9 MOV R1,A
|
|
\ 00008C 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 )
|
|
\ 00008F 90.... MOV DPTR,#zgConcentratorEnable
|
|
\ 000092 E0 MOVX A,@DPTR
|
|
\ 000093 6401 XRL A,#0x1
|
|
\ 000095 700E JNZ ??CrossCallReturnLabel_80
|
|
432 {
|
|
433 // Start next event
|
|
434 osal_start_timerEx( NWK_TaskID, NWK_MTO_RTG_REQ_EVT, 100 );
|
|
\ 000097 ; Setup parameters for call to function osal_start_timerEx
|
|
\ 000097 7C64 MOV R4,#0x64
|
|
\ 000099 7D00 MOV R5,#0x0
|
|
\ 00009B 7A00 MOV R2,#0x0
|
|
\ 00009D 7B08 MOV R3,#0x8
|
|
\ 00009F 90.... MOV DPTR,#NWK_TaskID
|
|
\ 0000A2 12.... LCALL ??Subroutine51_0 & 0xFFFF
|
|
435 }
|
|
436
|
|
437 // Return unprocessed events
|
|
438 return (events ^ ZDO_STATE_CHANGE_EVT);
|
|
\ ??CrossCallReturnLabel_80:
|
|
\ 0000A5 EE MOV A,R6
|
|
\ 0000A6 6410 XRL A,#0x10
|
|
\ ??ZDApp_event_loop_2:
|
|
\ 0000A8 FA MOV R2,A
|
|
\ 0000A9 EF MOV A,R7
|
|
\ 0000AA 8013 SJMP ??ZDApp_event_loop_4
|
|
439 }
|
|
440
|
|
441 if ( events & ZDO_COMMAND_CNF )
|
|
\ ??ZDApp_event_loop_9:
|
|
\ 0000AC EA MOV A,R2
|
|
\ 0000AD 5408 ANL A,#0x8
|
|
\ 0000AF 6006 JZ ??ZDApp_event_loop_10
|
|
442 {
|
|
443 // User defined logic
|
|
444
|
|
445 // Return unprocessed events
|
|
446 return (events ^ ZDO_COMMAND_CNF);
|
|
\ 0000B1 EA MOV A,R2
|
|
\ 0000B2 6408 XRL A,#0x8
|
|
\ 0000B4 FA MOV R2,A
|
|
\ 0000B5 801E SJMP ??ZDApp_event_loop_11
|
|
447 }
|
|
448
|
|
449 if ( events & ZDO_NWK_UPDATE_NV )
|
|
\ ??ZDApp_event_loop_10:
|
|
\ 0000B7 EB MOV A,R3
|
|
\ 0000B8 5402 ANL A,#0x2
|
|
\ 0000BA 6006 JZ ??ZDApp_event_loop_12
|
|
450 {
|
|
451 ZDApp_SaveNetworkStateEvt();
|
|
452
|
|
453 // Return unprocessed events
|
|
454 return (events ^ ZDO_NWK_UPDATE_NV);
|
|
\ 0000BC EB MOV A,R3
|
|
\ 0000BD 6402 XRL A,#0x2
|
|
\ ??ZDApp_event_loop_4:
|
|
\ 0000BF FB MOV R3,A
|
|
\ 0000C0 8013 SJMP ??ZDApp_event_loop_11
|
|
455 }
|
|
456
|
|
457 if ( events & ZDO_DEVICE_RESET )
|
|
\ ??ZDApp_event_loop_12:
|
|
\ 0000C2 EA MOV A,R2
|
|
\ 0000C3 5404 ANL A,#0x4
|
|
\ 0000C5 600A JZ ??ZDApp_event_loop_13
|
|
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 );
|
|
\ 0000C7 ; Setup parameters for call to function zgWriteStartupOptions
|
|
\ 0000C7 7A02 MOV R2,#0x2
|
|
\ 0000C9 79FF MOV R1,#-0x1
|
|
\ 0000CB 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();
|
|
\ 0000CE ; Setup parameters for call to function Onboard_soft_reset
|
|
\ 0000CE 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_13:
|
|
\ 0000D1 7A00 MOV R2,#0x0
|
|
\ 0000D3 7B00 MOV R3,#0x0
|
|
484 }
|
|
\ ??ZDApp_event_loop_11:
|
|
\ 0000D5 80.. SJMP ??Subroutine45_0
|
|
485 }
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine17:
|
|
\ 000000 7A10 MOV R2,#0x10
|
|
\ 000002 REQUIRE ??Subroutine43_0
|
|
\ 000002 ; // Fall through to label ??Subroutine43_0
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ??Subroutine43_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 7F04 MOV R7,#0x4
|
|
\ 000002 02.... LJMP ?BANKED_LEAVE_XDATA
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ??Subroutine46_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
|
|
\ ??Subroutine51_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 )
|
|
\ 000009 EA MOV A,R2
|
|
\ 00000A 5440 ANL A,#0x40
|
|
\ 00000C 6016 JZ ??ZDApp_ProcessSecEvent_0
|
|
504 {
|
|
505 // process the new device event
|
|
506 if ( ZDSecMgrNewDeviceEvent() == TRUE )
|
|
\ 00000E ; Setup parameters for call to function ZDSecMgrNewDeviceEvent
|
|
\ 00000E 12.... LCALL `??ZDSecMgrNewDeviceEvent::?relay`; Banked call to: ZDSecMgrNewDeviceEvent
|
|
\ 000011 E9 MOV A,R1
|
|
\ 000012 6401 XRL A,#0x1
|
|
\ 000014 7009 JNZ ??CrossCallReturnLabel_77
|
|
507 {
|
|
508 osal_start_timerEx( ZDAppTaskID, ZDO_NEW_DEVICE, 1000 );
|
|
\ 000016 ; Setup parameters for call to function osal_start_timerEx
|
|
\ 000016 7CE8 MOV R4,#-0x18
|
|
\ 000018 7D03 MOV R5,#0x3
|
|
\ 00001A 7A40 MOV R2,#0x40
|
|
\ 00001C 12.... LCALL ?Subroutine22 & 0xFFFF
|
|
509 }
|
|
510
|
|
511 // Return unprocessed events
|
|
512 return (events ^ ZDO_NEW_DEVICE);
|
|
\ ??CrossCallReturnLabel_77:
|
|
\ 00001F EE MOV A,R6
|
|
\ 000020 6440 XRL A,#0x40
|
|
\ 000022 800B SJMP ??ZDApp_ProcessSecEvent_1
|
|
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 )
|
|
\ ??ZDApp_ProcessSecEvent_0:
|
|
\ 000024 EA MOV A,R2
|
|
\ 000025 5480 ANL A,#0x80
|
|
\ 000027 600A JZ ??ZDApp_ProcessSecEvent_2
|
|
532 {
|
|
533 ZDApp_DeviceAuthEvt();
|
|
\ 000029 ; Setup parameters for call to function ZDApp_DeviceAuthEvt
|
|
\ 000029 12.... LCALL `??ZDApp_DeviceAuthEvt::?relay`; Banked call to: ZDApp_DeviceAuthEvt
|
|
534
|
|
535 // Return unprocessed events
|
|
536 return (events ^ ZDO_DEVICE_AUTH);
|
|
\ 00002C EE MOV A,R6
|
|
\ 00002D 6480 XRL A,#0x80
|
|
\ ??ZDApp_ProcessSecEvent_1:
|
|
\ 00002F FA MOV R2,A
|
|
\ 000030 EF MOV A,R7
|
|
\ 000031 8042 SJMP ??ZDApp_ProcessSecEvent_3
|
|
537 }
|
|
538
|
|
539 if ( events & ZDO_FRAMECOUNTER_CHANGE )
|
|
\ ??ZDApp_ProcessSecEvent_2:
|
|
\ 000033 EB MOV A,R3
|
|
\ 000034 5404 ANL A,#0x4
|
|
\ 000036 6026 JZ ??ZDApp_ProcessSecEvent_4
|
|
540 {
|
|
541 if ( nwkFrameCounterChanges++ > MAX_NWK_FRAMECOUNTER_CHANGES )
|
|
\ 000038 90.... MOV DPTR,#nwkFrameCounterChanges
|
|
\ 00003B 12.... LCALL ??Subroutine53_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_81:
|
|
\ 00003E E8 MOV A,R0
|
|
\ 00003F 2401 ADD A,#0x1
|
|
\ 000041 FA MOV R2,A
|
|
\ 000042 E4 CLR A
|
|
\ 000043 39 ADDC A,R1
|
|
\ 000044 FB MOV R3,A
|
|
\ 000045 90.... MOV DPTR,#nwkFrameCounterChanges
|
|
\ 000048 12.... LCALL ??Subroutine60_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_115:
|
|
\ 00004B C3 CLR C
|
|
\ 00004C E8 MOV A,R0
|
|
\ 00004D 94E9 SUBB A,#-0x17
|
|
\ 00004F E9 MOV A,R1
|
|
\ 000050 9403 SUBB A,#0x3
|
|
\ 000052 4003 JC ??ZDApp_ProcessSecEvent_5
|
|
542 {
|
|
543 ZDApp_SaveNwkKey();
|
|
\ 000054 ; Setup parameters for call to function ZDApp_SaveNwkKey
|
|
\ 000054 12.... LCALL `??ZDApp_SaveNwkKey::?relay`; Banked call to: ZDApp_SaveNwkKey
|
|
544 }
|
|
545
|
|
546 // Return unprocessed events
|
|
547 return (events ^ ZDO_FRAMECOUNTER_CHANGE);
|
|
\ ??ZDApp_ProcessSecEvent_5:
|
|
\ 000057 EE MOV A,R6
|
|
\ 000058 FA MOV R2,A
|
|
\ 000059 EF MOV A,R7
|
|
\ 00005A 6404 XRL A,#0x4
|
|
\ 00005C 8017 SJMP ??ZDApp_ProcessSecEvent_3
|
|
548 }
|
|
549
|
|
550 if ( events & ZDO_APS_FRAMECOUNTER_CHANGE )
|
|
\ ??ZDApp_ProcessSecEvent_4:
|
|
\ 00005E EB MOV A,R3
|
|
\ 00005F 5410 ANL A,#0x10
|
|
\ 000061 6005 JZ ??ZDApp_ProcessSecEvent_6
|
|
551 {
|
|
552 #if defined (NV_RESTORE)
|
|
553 ZDSecMgrSaveApsLinkKey();
|
|
554 #endif // (NV_RESTORE)
|
|
555
|
|
556 // Return unprocessed events
|
|
557 return (events ^ ZDO_APS_FRAMECOUNTER_CHANGE);
|
|
\ 000063 EB MOV A,R3
|
|
\ 000064 6410 XRL A,#0x10
|
|
\ 000066 800D SJMP ??ZDApp_ProcessSecEvent_3
|
|
558 }
|
|
559
|
|
560 if ( events & ZDO_TCLK_FRAMECOUNTER_CHANGE )
|
|
\ ??ZDApp_ProcessSecEvent_6:
|
|
\ 000068 EB MOV A,R3
|
|
\ 000069 5408 ANL A,#0x8
|
|
\ 00006B 600B JZ ??ZDApp_ProcessSecEvent_7
|
|
561 {
|
|
562 ZDSecMgrSaveTCLinkKey();
|
|
\ 00006D ; Setup parameters for call to function ZDSecMgrSaveTCLinkKey
|
|
\ 00006D 12.... LCALL `??ZDSecMgrSaveTCLinkKey::?relay`; Banked call to: ZDSecMgrSaveTCLinkKey
|
|
563
|
|
564 // Return unprocessed events
|
|
565 return (events ^ ZDO_TCLK_FRAMECOUNTER_CHANGE);
|
|
\ 000070 EE MOV A,R6
|
|
\ 000071 FA MOV R2,A
|
|
\ 000072 EF MOV A,R7
|
|
\ 000073 6408 XRL A,#0x8
|
|
\ ??ZDApp_ProcessSecEvent_3:
|
|
\ 000075 FB MOV R3,A
|
|
\ 000076 8004 SJMP ??ZDApp_ProcessSecEvent_8
|
|
566 }
|
|
567
|
|
568 // Discard or make more handlers
|
|
569 return 0;
|
|
\ ??ZDApp_ProcessSecEvent_7:
|
|
\ 000078 7A00 MOV R2,#0x0
|
|
\ 00007A 7B00 MOV R3,#0x0
|
|
\ ??ZDApp_ProcessSecEvent_8:
|
|
\ 00007C 02.... LJMP ??Subroutine52_0 & 0xFFFF
|
|
570 }
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine22:
|
|
\ 000000 7B00 MOV R3,#0x0
|
|
\ 000002 90.... MOV DPTR,#ZDAppTaskID
|
|
\ 000005 REQUIRE ??Subroutine51_0
|
|
\ 000005 ; // Fall through to label ??Subroutine51_0
|
|
|
|
\ 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 E0 MOVX A,@DPTR
|
|
\ 000004 F9 MOV R1,A
|
|
\ 000005 22 RET
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ??Subroutine60_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_120:
|
|
\ 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 ?Subroutine17 & 0xFFFF
|
|
680
|
|
681 return ( ZDO_INITDEV_LEAVE_NOT_STARTED ); // Don't join - (one time).
|
|
\ ??CrossCallReturnLabel_60:
|
|
\ 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 02.... LJMP ?Subroutine7 & 0xFFFF
|
|
692 }
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ??Subroutine49_0:
|
|
\ 000000 12.... LCALL ?DEALLOC_XSTACK8
|
|
\ 000003 REQUIRE ??Subroutine50_0
|
|
\ 000003 ; // Fall through to label ??Subroutine50_0
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ??Subroutine50_0:
|
|
\ 000000 7F02 MOV R7,#0x2
|
|
\ 000002 02.... LJMP ?BANKED_LEAVE_XDATA
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine7:
|
|
\ 000000 7402 MOV A,#0x2
|
|
\ 000002 02.... LJMP ??Subroutine49_0 & 0xFFFF
|
|
|
|
\ 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 ??Subroutine60_0
|
|
\ 000006 ; // Fall through to label ??Subroutine60_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 ??Subroutine52_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 ??Subroutine43_0 & 0xFFFF
|
|
801 }
|
|
\ ??CrossCallReturnLabel_64:
|
|
\ 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 702B 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 )
|
|
\ ??CrossCallReturnLabel_67:
|
|
\ 000012 12.... LCALL ?Subroutine21 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_20:
|
|
\ 000015 6009 JZ ??ZDApp_DeviceAuthEvt_1
|
|
831 {
|
|
832 // NOTE: first two parameters are not used, see NLMEDE.h for details
|
|
833 NLME_StartRouterRequest( 0, 0, false );
|
|
\ 000017 ; Setup parameters for call to function NLME_StartRouterRequest
|
|
\ 000017 7B00 MOV R3,#0x0
|
|
\ 000019 7A00 MOV R2,#0x0
|
|
\ 00001B 7900 MOV R1,#0x0
|
|
\ 00001D 12.... LCALL `??NLME_StartRouterRequest::?relay`; Banked call to: NLME_StartRouterRequest
|
|
834 }
|
|
835 }
|
|
836
|
|
837 // Notify to save info into NV
|
|
838 ZDApp_NVUpdate();
|
|
839
|
|
840 // Save off the security
|
|
841 ZDApp_SaveNwkKey();
|
|
\ ??ZDApp_DeviceAuthEvt_1:
|
|
\ 000020 ; Setup parameters for call to function ZDApp_SaveNwkKey
|
|
\ 000020 12.... LCALL `??ZDApp_SaveNwkKey::?relay`; Banked call to: ZDApp_SaveNwkKey
|
|
842
|
|
843 ZDApp_AnnounceNewAddress();
|
|
\ 000023 ; Setup parameters for call to function ZDApp_AnnounceNewAddress
|
|
\ 000023 12.... LCALL `??ZDApp_AnnounceNewAddress::?relay`; Banked call to: ZDApp_AnnounceNewAddress
|
|
844
|
|
845 if ( (ZDO_Config_Node_Descriptor.CapabilityFlags & CAPINFO_RCVR_ON_IDLE) == 0 )
|
|
\ 000026 90.... MOV DPTR,#ZDO_Config_Node_Descriptor + 2
|
|
\ 000029 E0 MOVX A,@DPTR
|
|
\ 00002A A2E3 MOV C,0xE0 /* A */.3
|
|
\ 00002C 4009 JC ??ZDApp_DeviceAuthEvt_0
|
|
846 {
|
|
847 NLME_SetPollRate( ZDApp_SavedPollRate );
|
|
\ 00002E ; Setup parameters for call to function NLME_SetPollRate
|
|
\ 00002E 90.... MOV DPTR,#ZDApp_SavedPollRate
|
|
\ 000031 12.... LCALL ?Subroutine38 & 0xFFFF
|
|
848 }
|
|
849 }
|
|
\ ??CrossCallReturnLabel_51:
|
|
\ 000034 12.... LCALL `??NLME_SetPollRate::?relay`; Banked call to: NLME_SetPollRate
|
|
850 else
|
|
851 {
|
|
852 ZDApp_NVUpdate();
|
|
853 }
|
|
854 }
|
|
\ ??ZDApp_DeviceAuthEvt_0:
|
|
\ 000037 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 ??Subroutine46_0
|
|
\ 000005 ; // Fall through to label ??Subroutine46_0
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine21:
|
|
\ 000000 90.... MOV DPTR,#ZDO_Config_Node_Descriptor
|
|
\ 000003 E0 MOVX A,@DPTR
|
|
\ 000004 5407 ANL A,#0x7
|
|
\ 000006 6402 XRL A,#0x2
|
|
\ 000008 22 RET
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine38:
|
|
\ 000000 E0 MOVX A,@DPTR
|
|
\ 000001 FA MOV R2,A
|
|
\ 000002 A3 INC DPTR
|
|
\ 000003 E0 MOVX A,@DPTR
|
|
\ 000004 FB MOV R3,A
|
|
\ 000005 22 RET
|
|
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 ??Subroutine60_0 & 0xFFFF
|
|
921 if ( ZDAppNwkAddr.addr.shortAddr == 0 )
|
|
\ ??CrossCallReturnLabel_116:
|
|
\ 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 ??Subroutine52_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 ?Subroutine29 & 0xFFFF
|
|
969 if ( ZSUCCESS == osal_nv_item_init( ZCD_NV_USERDESC,
|
|
970 sizeof(UserDescriptorFormat_t), (void*)&ZDO_DefaultUserDescriptor ) )
|
|
\ ??CrossCallReturnLabel_37:
|
|
\ 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 ?Subroutine30 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_39:
|
|
\ 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 ??Subroutine49_0 & 0xFFFF
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine29:
|
|
\ 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
|
|
\ ?Subroutine30:
|
|
\ 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 603B 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 600B JZ ??ZDApp_ProcessOSALMsg_3
|
|
\ 000022 2447 ADD A,#0x47
|
|
\ 000024 600D JZ ??ZDApp_ProcessOSALMsg_4
|
|
\ 000026 24D6 ADD A,#-0x2a
|
|
\ 000028 600F JZ ??ZDApp_ProcessOSALMsg_5
|
|
\ 00002A 02.... LJMP ??ZDApp_ProcessOSALMsg_6 & 0xFFFF
|
|
1024 {
|
|
1025 // Incoming ZDO Message
|
|
1026 case AF_INCOMING_MSG_CMD:
|
|
1027 ZDP_IncomingData( (afIncomingMSGPacket_t *)msgPtr );
|
|
\ ??ZDApp_ProcessOSALMsg_3:
|
|
\ 00002D ; Setup parameters for call to function ZDP_IncomingData
|
|
\ 00002D 12.... LCALL `??ZDP_IncomingData::?relay`; Banked call to: ZDP_IncomingData
|
|
1028 break;
|
|
\ 000030 02.... LJMP ??ZDApp_ProcessOSALMsg_6 & 0xFFFF
|
|
1029
|
|
1030 case ZDO_CB_MSG:
|
|
1031 ZDApp_ProcessMsgCBs( (zdoIncomingMsg_t *)msgPtr );
|
|
\ ??ZDApp_ProcessOSALMsg_4:
|
|
\ 000033 ; Setup parameters for call to function ZDApp_ProcessMsgCBs
|
|
\ 000033 12.... LCALL `??ZDApp_ProcessMsgCBs::?relay`; Banked call to: ZDApp_ProcessMsgCBs
|
|
1032 break;
|
|
\ 000036 02.... LJMP ??ZDApp_ProcessOSALMsg_6 & 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 )
|
|
\ ??ZDApp_ProcessOSALMsg_5:
|
|
\ 000039 90.... MOV DPTR,#pZDNwkMgr_ProcessDataConfirm
|
|
\ 00003C 12.... LCALL ?Subroutine14 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_8:
|
|
\ 00003F 7003 JNZ $+5
|
|
\ 000041 02.... LJMP ??ZDApp_ProcessOSALMsg_6 & 0xFFFF
|
|
1045 pZDNwkMgr_ProcessDataConfirm( afDataConfirm );
|
|
\ 000044 ; Setup parameters for indirect call
|
|
\ 000044 12.... LCALL ??Subroutine57_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_94:
|
|
\ 000047 12.... LCALL ?CALL_IND
|
|
\ 00004A 02.... LJMP ??ZDApp_ProcessOSALMsg_6 & 0xFFFF
|
|
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:
|
|
\ 00004D 90.... MOV DPTR,#devState
|
|
\ 000050 E0 MOVX A,@DPTR
|
|
\ 000051 6402 XRL A,#0x2
|
|
\ 000053 6003 JZ $+5
|
|
\ 000055 02.... LJMP ??ZDApp_ProcessOSALMsg_6 & 0xFFFF
|
|
1053 break;
|
|
1054
|
|
1055 if ( ZG_BUILD_JOINING_TYPE && ZG_DEVICE_JOINING_TYPE )
|
|
\ 000058 90.... MOV DPTR,#zgDeviceLogicalType
|
|
\ 00005B E0 MOVX A,@DPTR
|
|
\ 00005C 6401 XRL A,#0x1
|
|
\ 00005E 6008 JZ ??ZDApp_ProcessOSALMsg_7
|
|
\ 000060 E0 MOVX A,@DPTR
|
|
\ 000061 6402 XRL A,#0x2
|
|
\ 000063 6003 JZ $+5
|
|
\ 000065 02.... LJMP ??ZDApp_ProcessOSALMsg_6 & 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_7:
|
|
\ 000068 ; Setup parameters for call to function ZDApp_NwkDescListProcessing
|
|
\ 000068 12.... LCALL `??ZDApp_NwkDescListProcessing::?relay`; Banked call to: ZDApp_NwkDescListProcessing
|
|
\ 00006B 8A.. MOV ?V0,R2
|
|
\ 00006D 8B.. MOV ?V1,R3
|
|
\ 00006F AE.. MOV R6,?V0
|
|
\ 000071 AF.. MOV R7,?V1
|
|
\ 000073 EA MOV A,R2
|
|
\ 000074 4F ORL A,R7
|
|
\ 000075 7003 JNZ $+5
|
|
\ 000077 02.... LJMP ??ZDApp_ProcessOSALMsg_8 & 0xFFFF
|
|
\ 00007A 90.... MOV DPTR,#zdoDiscCounter
|
|
\ 00007D E0 MOVX A,@DPTR
|
|
\ 00007E C3 CLR C
|
|
\ 00007F 9403 SUBB A,#0x3
|
|
\ 000081 5003 JNC $+5
|
|
\ 000083 02.... LJMP ??ZDApp_ProcessOSALMsg_8 & 0xFFFF
|
|
1061 {
|
|
1062 if ( devStartMode == MODE_JOIN )
|
|
\ 000086 90.... MOV DPTR,#devStartMode
|
|
\ 000089 E0 MOVX A,@DPTR
|
|
\ 00008A 7061 JNZ ??ZDApp_ProcessOSALMsg_9
|
|
1063 {
|
|
1064 devState = DEV_NWK_JOINING;
|
|
\ 00008C 90.... MOV DPTR,#devState
|
|
\ 00008F 7403 MOV A,#0x3
|
|
\ 000091 F0 MOVX @DPTR,A
|
|
1065
|
|
1066 ZDApp_NodeProfileSync( pChosenNwk->stackProfile);
|
|
\ 000092 ; Setup parameters for call to function ZDApp_NodeProfileSync
|
|
\ 000092 8A82 MOV DPL,R2
|
|
\ 000094 8B83 MOV DPH,R3
|
|
\ 000096 A3 INC DPTR
|
|
\ 000097 A3 INC DPTR
|
|
\ 000098 A3 INC DPTR
|
|
\ 000099 A3 INC DPTR
|
|
\ 00009A A3 INC DPTR
|
|
\ 00009B A3 INC DPTR
|
|
\ 00009C E0 MOVX A,@DPTR
|
|
\ 00009D F9 MOV R1,A
|
|
\ 00009E 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 )
|
|
\ 0000A1 ; Setup parameters for call to function NLME_JoinRequest
|
|
\ 0000A1 8E82 MOV DPL,R6
|
|
\ 0000A3 8F83 MOV DPH,R7
|
|
\ 0000A5 A3 INC DPTR
|
|
\ 0000A6 A3 INC DPTR
|
|
\ 0000A7 A3 INC DPTR
|
|
\ 0000A8 A3 INC DPTR
|
|
\ 0000A9 A3 INC DPTR
|
|
\ 0000AA A3 INC DPTR
|
|
\ 0000AB A3 INC DPTR
|
|
\ 0000AC A3 INC DPTR
|
|
\ 0000AD A3 INC DPTR
|
|
\ 0000AE A3 INC DPTR
|
|
\ 0000AF E0 MOVX A,@DPTR
|
|
\ 0000B0 F5.. MOV ?V0,A
|
|
\ 0000B2 78.. MOV R0,#?V0
|
|
\ 0000B4 12.... LCALL ?PUSH_XSTACK_I_ONE
|
|
\ 0000B7 8E82 MOV DPL,R6
|
|
\ 0000B9 8F83 MOV DPH,R7
|
|
\ 0000BB A3 INC DPTR
|
|
\ 0000BC A3 INC DPTR
|
|
\ 0000BD A3 INC DPTR
|
|
\ 0000BE A3 INC DPTR
|
|
\ 0000BF A3 INC DPTR
|
|
\ 0000C0 A3 INC DPTR
|
|
\ 0000C1 A3 INC DPTR
|
|
\ 0000C2 12.... LCALL ?PUSH_XSTACK8_X_TWO
|
|
\ 0000C5 90.... MOV DPTR,#ZDO_Config_Node_Descriptor + 2
|
|
\ 0000C8 E0 MOVX A,@DPTR
|
|
\ 0000C9 F5.. MOV ?V0,A
|
|
\ 0000CB 78.. MOV R0,#?V0
|
|
\ 0000CD 12.... LCALL ?PUSH_XSTACK_I_ONE
|
|
\ 0000D0 8E82 MOV DPL,R6
|
|
\ 0000D2 8F83 MOV DPH,R7
|
|
\ 0000D4 A3 INC DPTR
|
|
\ 0000D5 A3 INC DPTR
|
|
\ 0000D6 E0 MOVX A,@DPTR
|
|
\ 0000D7 F9 MOV R1,A
|
|
\ 0000D8 8E82 MOV DPL,R6
|
|
\ 0000DA 8F83 MOV DPH,R7
|
|
\ 0000DC E0 MOVX A,@DPTR
|
|
\ 0000DD FC MOV R4,A
|
|
\ 0000DE A3 INC DPTR
|
|
\ 0000DF E0 MOVX A,@DPTR
|
|
\ 0000E0 12.... LCALL ?Subroutine35 & 0xFFFF
|
|
1072 {
|
|
1073 ZDApp_NetworkInit( (uint16)(NWK_START_DELAY
|
|
1074 + ((uint16)(osal_rand()& EXTENDED_JOINING_RANDOM_MASK))) );
|
|
1075 }
|
|
1076 } // if ( devStartMode == MODE_JOIN )
|
|
\ ??CrossCallReturnLabel_71:
|
|
\ 0000E3 12.... LCALL `??NLME_JoinRequest::?relay`; Banked call to: NLME_JoinRequest
|
|
\ 0000E6 7404 MOV A,#0x4
|
|
\ 0000E8 12.... LCALL ?DEALLOC_XSTACK8
|
|
\ 0000EB 8069 SJMP ??ZDApp_ProcessOSALMsg_10
|
|
1077 else if ( devStartMode == MODE_REJOIN )
|
|
\ ??ZDApp_ProcessOSALMsg_9:
|
|
\ 0000ED 6403 XRL A,#0x3
|
|
\ 0000EF 706B JNZ ??CrossCallReturnLabel_33
|
|
1078 {
|
|
1079 devState = DEV_NWK_REJOIN;
|
|
\ 0000F1 90.... MOV DPTR,#devState
|
|
\ 0000F4 7404 MOV A,#0x4
|
|
\ 0000F6 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 )
|
|
\ 0000F7 90.... MOV DPTR,#_NIB + 20
|
|
\ 0000FA E0 MOVX A,@DPTR
|
|
\ 0000FB 64FE XRL A,#0xfe
|
|
\ 0000FD 7003 JNZ ??ZDApp_ProcessOSALMsg_11
|
|
\ 0000FF A3 INC DPTR
|
|
\ 000100 E0 MOVX A,@DPTR
|
|
\ 000101 F4 CPL A
|
|
\ ??ZDApp_ProcessOSALMsg_11:
|
|
\ 000102 7012 JNZ ??ZDApp_ProcessOSALMsg_12
|
|
1084 {
|
|
1085 _NIB.nwkDevAddress = osal_rand();
|
|
\ 000104 ; Setup parameters for call to function osal_rand
|
|
\ 000104 12.... LCALL `??osal_rand::?relay`; Banked call to: osal_rand
|
|
\ 000107 90.... MOV DPTR,#_NIB + 20
|
|
\ 00010A 12.... LCALL ??Subroutine60_0 & 0xFFFF
|
|
1086 ZMacSetReq( ZMacShortAddress, (byte*)&_NIB.nwkDevAddress );
|
|
\ ??CrossCallReturnLabel_117:
|
|
\ 00010D ; Setup parameters for call to function ZMacSetReq
|
|
\ 00010D 7A.. MOV R2,#(_NIB + 20) & 0xff
|
|
\ 00010F 7B.. MOV R3,#((_NIB + 20) >> 8) & 0xff
|
|
\ 000111 7953 MOV R1,#0x53
|
|
\ 000113 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_12:
|
|
\ 000116 90.... MOV DPTR,#_NIB + 33
|
|
\ 000119 E0 MOVX A,@DPTR
|
|
\ 00011A 64FE XRL A,#0xfe
|
|
\ 00011C 7003 JNZ ??ZDApp_ProcessOSALMsg_13
|
|
\ 00011E A3 INC DPTR
|
|
\ 00011F E0 MOVX A,@DPTR
|
|
\ 000120 F4 CPL A
|
|
\ ??ZDApp_ProcessOSALMsg_13:
|
|
\ 000121 7014 JNZ ??ZDApp_ProcessOSALMsg_14
|
|
1096 {
|
|
1097 _NIB.nwkPanId = pChosenNwk->panId;
|
|
\ 000123 12.... LCALL ?Subroutine18 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_85:
|
|
\ 000126 90.... MOV DPTR,#_NIB + 33
|
|
\ 000129 E8 MOV A,R0
|
|
\ 00012A F0 MOVX @DPTR,A
|
|
\ 00012B A3 INC DPTR
|
|
\ 00012C E9 MOV A,R1
|
|
\ 00012D F0 MOVX @DPTR,A
|
|
1098 ZMacSetReq( ZMacPanId, (byte*)&(_NIB.nwkPanId) );
|
|
\ 00012E ; Setup parameters for call to function ZMacSetReq
|
|
\ 00012E 7A.. MOV R2,#(_NIB + 33) & 0xff
|
|
\ 000130 7B.. MOV R3,#((_NIB + 33) >> 8) & 0xff
|
|
\ 000132 7950 MOV R1,#0x50
|
|
\ 000134 12.... LCALL `??ZMacSetReq::?relay`; Banked call to: ZMacSetReq
|
|
1099 }
|
|
1100
|
|
1101 tmp = true;
|
|
\ ??ZDApp_ProcessOSALMsg_14:
|
|
\ 000137 85..82 MOV DPL,?XSP + 0
|
|
\ 00013A 85..83 MOV DPH,?XSP + 1
|
|
\ 00013D 7401 MOV A,#0x1
|
|
\ 00013F 12.... LCALL ?Subroutine13 & 0xFFFF
|
|
1102 ZMacSetReq( ZMacRxOnIdle, &tmp ); // Set receiver always on during rejoin
|
|
\ ??CrossCallReturnLabel_4:
|
|
\ 000142 7952 MOV R1,#0x52
|
|
\ 000144 12.... LCALL `??ZMacSetReq::?relay`; Banked call to: ZMacSetReq
|
|
1103 if ( NLME_ReJoinRequest( ZDO_UseExtendedPANID, pChosenNwk->logicalChannel) != ZSuccess )
|
|
\ 000147 ; Setup parameters for call to function NLME_ReJoinRequest
|
|
\ 000147 8E82 MOV DPL,R6
|
|
\ 000149 8F83 MOV DPH,R7
|
|
\ 00014B A3 INC DPTR
|
|
\ 00014C A3 INC DPTR
|
|
\ 00014D E0 MOVX A,@DPTR
|
|
\ 00014E F9 MOV R1,A
|
|
\ 00014F 7A.. MOV R2,#ZDO_UseExtendedPANID & 0xff
|
|
\ 000151 7B.. MOV R3,#(ZDO_UseExtendedPANID >> 8) & 0xff
|
|
\ 000153 12.... LCALL `??NLME_ReJoinRequest::?relay`; Banked call to: NLME_ReJoinRequest
|
|
\ ??ZDApp_ProcessOSALMsg_10:
|
|
\ 000156 E9 MOV A,R1
|
|
\ 000157 6003 JZ ??CrossCallReturnLabel_33
|
|
1104 {
|
|
1105 ZDApp_NetworkInit( (uint16)(NWK_START_DELAY
|
|
1106 + ((uint16)(osal_rand()& EXTENDED_JOINING_RANDOM_MASK))) );
|
|
\ 000159 ; Setup parameters for call to function osal_rand
|
|
\ 000159 12.... LCALL ?Subroutine27 & 0xFFFF
|
|
1107 }
|
|
1108 } // else if ( devStartMode == MODE_REJOIN )
|
|
1109
|
|
1110 if ( ZDO_Config_Node_Descriptor.CapabilityFlags & CAPINFO_RCVR_ON_IDLE )
|
|
\ ??CrossCallReturnLabel_33:
|
|
\ 00015C 90.... MOV DPTR,#ZDO_Config_Node_Descriptor + 2
|
|
\ 00015F E0 MOVX A,@DPTR
|
|
\ 000160 A2E3 MOV C,0xE0 /* A */.3
|
|
\ 000162 505A JNC ??ZDApp_ProcessOSALMsg_6
|
|
1111 {
|
|
1112 // The receiver is on, turn network layer polling off.
|
|
1113 NLME_SetPollRate( 0 );
|
|
\ 000164 ; Setup parameters for call to function NLME_SetPollRate
|
|
\ 000164 12.... LCALL ?Subroutine26 & 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_31:
|
|
\ 000167 8055 SJMP ??ZDApp_ProcessOSALMsg_6
|
|
1126 else
|
|
1127 {
|
|
1128 if ( continueJoining )
|
|
\ ??ZDApp_ProcessOSALMsg_8:
|
|
\ 000169 90.... MOV DPTR,#continueJoining
|
|
\ 00016C E0 MOVX A,@DPTR
|
|
\ 00016D 604F JZ ??ZDApp_ProcessOSALMsg_6
|
|
1129 {
|
|
1130 #if defined ( MANAGED_SCAN )
|
|
1131 ZDApp_NetworkInit( MANAGEDSCAN_DELAY_BETWEEN_SCANS );
|
|
1132 #else
|
|
1133 zdoDiscCounter++;
|
|
\ 00016F 90.... MOV DPTR,#zdoDiscCounter
|
|
\ 000172 E0 MOVX A,@DPTR
|
|
\ 000173 04 INC A
|
|
\ 000174 F0 MOVX @DPTR,A
|
|
1134 ZDApp_NetworkInit( (uint16)(BEACON_REQUEST_DELAY
|
|
1135 + ((uint16)(osal_rand()& BEACON_REQ_DELAY_MASK))) );
|
|
\ 000175 ; Setup parameters for call to function osal_rand
|
|
\ 000175 12.... LCALL `??osal_rand::?relay`; Banked call to: osal_rand
|
|
\ 000178 ; Setup parameters for call to function ZDApp_NetworkInit
|
|
\ 000178 EA MOV A,R2
|
|
\ 000179 2464 ADD A,#0x64
|
|
\ 00017B FA MOV R2,A
|
|
\ 00017C E4 CLR A
|
|
\ 00017D 3400 ADDC A,#0x0
|
|
\ 00017F FB MOV R3,A
|
|
\ 000180 8039 SJMP ??ZDApp_ProcessOSALMsg_15
|
|
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:
|
|
\ 000182 90.... MOV DPTR,#zgDeviceLogicalType
|
|
\ 000185 E0 MOVX A,@DPTR
|
|
\ 000186 6401 XRL A,#0x1
|
|
\ 000188 6005 JZ ??ZDApp_ProcessOSALMsg_16
|
|
\ 00018A E0 MOVX A,@DPTR
|
|
\ 00018B 6402 XRL A,#0x2
|
|
\ 00018D 702F JNZ ??ZDApp_ProcessOSALMsg_6
|
|
1144 {
|
|
1145 ZDApp_ProcessNetworkJoin();
|
|
\ ??ZDApp_ProcessOSALMsg_16:
|
|
\ 00018F ; Setup parameters for call to function ZDApp_ProcessNetworkJoin
|
|
\ 00018F 12.... LCALL `??ZDApp_ProcessNetworkJoin::?relay`; Banked call to: ZDApp_ProcessNetworkJoin
|
|
\ 000192 802A SJMP ??ZDApp_ProcessOSALMsg_6
|
|
1146 }
|
|
1147 break;
|
|
1148
|
|
1149 case ZDO_NWK_JOIN_REQ:
|
|
1150 if ( ZG_BUILD_JOINING_TYPE && ZG_DEVICE_JOINING_TYPE )
|
|
\ ??ZDApp_ProcessOSALMsg_2:
|
|
\ 000194 90.... MOV DPTR,#zgDeviceLogicalType
|
|
\ 000197 E0 MOVX A,@DPTR
|
|
\ 000198 6401 XRL A,#0x1
|
|
\ 00019A 6005 JZ ??ZDApp_ProcessOSALMsg_17
|
|
\ 00019C E0 MOVX A,@DPTR
|
|
\ 00019D 6402 XRL A,#0x2
|
|
\ 00019F 701D JNZ ??ZDApp_ProcessOSALMsg_6
|
|
1151 {
|
|
1152 retryCnt = 0;
|
|
\ ??ZDApp_ProcessOSALMsg_17:
|
|
\ 0001A1 90.... MOV DPTR,#retryCnt
|
|
\ 0001A4 E4 CLR A
|
|
\ 0001A5 F0 MOVX @DPTR,A
|
|
1153 devStartMode = MODE_RESUME;
|
|
\ 0001A6 90.... MOV DPTR,#devStartMode
|
|
\ 0001A9 04 INC A
|
|
\ 0001AA F0 MOVX @DPTR,A
|
|
1154 _tmpRejoinState = true;
|
|
\ 0001AB 90.... MOV DPTR,#_tmpRejoinState
|
|
\ 0001AE 12.... LCALL ?Subroutine10 & 0xFFFF
|
|
1155 osal_cpyExtAddr( ZDO_UseExtendedPANID, _NIB.extendedPANID );
|
|
1156 zgDefaultStartingScanDuration = BEACON_ORDER_60_MSEC;
|
|
\ ??CrossCallReturnLabel_1:
|
|
\ 0001B1 90.... MOV DPTR,#zgDefaultStartingScanDuration
|
|
\ 0001B4 7402 MOV A,#0x2
|
|
\ 0001B6 F0 MOVX @DPTR,A
|
|
1157 ZDApp_NetworkInit( 0 );
|
|
\ 0001B7 ; Setup parameters for call to function ZDApp_NetworkInit
|
|
\ 0001B7 7A00 MOV R2,#0x0
|
|
\ 0001B9 7B00 MOV R3,#0x0
|
|
\ ??ZDApp_ProcessOSALMsg_15:
|
|
\ 0001BB 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_6:
|
|
\ 0001BE 7401 MOV A,#0x1
|
|
\ 0001C0 02.... LJMP ??Subroutine49_0 & 0xFFFF
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine35:
|
|
\ 000000 FD MOV R5,A
|
|
\ 000001 REQUIRE ??Subroutine47_0
|
|
\ 000001 ; // Fall through to label ??Subroutine47_0
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ??Subroutine47_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
|
|
\ ?Subroutine27:
|
|
\ 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
|
|
\ ?Subroutine26:
|
|
\ 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
|
|
\ ?Subroutine18:
|
|
\ 000000 8E82 MOV DPL,R6
|
|
\ 000002 8F83 MOV DPH,R7
|
|
\ 000004 REQUIRE ??Subroutine53_0
|
|
\ 000004 ; // Fall through to label ??Subroutine53_0
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine14:
|
|
\ 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
|
|
\ ?Subroutine13:
|
|
\ 000000 F0 MOVX @DPTR,A
|
|
\ 000001 ; Setup parameters for call to function ZMacSetReq
|
|
\ 000001 ; Setup parameters for call to function ZMacSetReq
|
|
\ 000001 ; Setup parameters for indirect call
|
|
\ 000001 ; Setup parameters for call to function NLME_LeaveRsp
|
|
\ 000001 AA.. MOV R2,?XSP + 0
|
|
\ 000003 AB.. MOV R3,?XSP + 1
|
|
\ 000005 22 RET
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ??Subroutine57_0:
|
|
\ 000000 E0 MOVX A,@DPTR
|
|
\ 000001 F583 MOV DPH,A
|
|
\ 000003 8882 MOV DPL,R0
|
|
\ 000005 22 RET
|
|
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 ?Subroutine32 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_43:
|
|
\ 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 6030 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 700E 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 12.... LCALL ?Subroutine38 & 0xFFFF
|
|
1193 }
|
|
\ ??CrossCallReturnLabel_52:
|
|
\ 000049 12.... LCALL `??ZDO_UpdateAddrManager::?relay`; Banked call to: ZDO_UpdateAddrManager
|
|
1194 osal_mem_free( pAddrRsp );
|
|
\ ??ZDApp_ProcessMsgCBs_3:
|
|
\ 00004C ; Setup parameters for call to function osal_mem_free
|
|
\ 00004C AA.. MOV R2,?V0
|
|
\ 00004E EF MOV A,R7
|
|
\ 00004F FB MOV R3,A
|
|
\ 000050 12.... LCALL `??osal_mem_free::?relay`; Banked call to: osal_mem_free
|
|
\ 000053 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:
|
|
\ 000055 ; Setup parameters for call to function ZDO_ParseBindUnbindReq
|
|
\ 000055 AC.. MOV R4,?XSP + 0
|
|
\ 000057 AD.. MOV R5,?XSP + 1
|
|
\ 000059 12.... LCALL `??ZDO_ParseBindUnbindReq::?relay`; Banked call to: ZDO_ParseBindUnbindReq
|
|
1206 ZDO_ProcessBindUnbindReq( inMsg, &bindReq );
|
|
\ 00005C ; Setup parameters for call to function ZDO_ProcessBindUnbindReq
|
|
\ 00005C AC.. MOV R4,?XSP + 0
|
|
\ 00005E AD.. MOV R5,?XSP + 1
|
|
\ 000060 EE MOV A,R6
|
|
\ 000061 FA MOV R2,A
|
|
\ 000062 EF MOV A,R7
|
|
\ 000063 FB MOV R3,A
|
|
\ 000064 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:
|
|
\ 000067 REQUIRE ?Subroutine8
|
|
\ 000067 ; // Fall through to label ?Subroutine8
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine8:
|
|
\ 000000 7415 MOV A,#0x15
|
|
\ 000002 02.... LJMP ??Subroutine49_0 & 0xFFFF
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine42:
|
|
\ 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
|
|
\ ?Subroutine32:
|
|
\ 000000 EA MOV A,R2
|
|
\ 000001 12.... LCALL ?Subroutine42 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_107:
|
|
\ 000004 E0 MOVX A,@DPTR
|
|
\ 000005 F5.. MOV ?V0,A
|
|
\ 000007 A3 INC DPTR
|
|
\ 000008 E0 MOVX A,@DPTR
|
|
\ 000009 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 ?Subroutine23 & 0xFFFF
|
|
1253 #endif
|
|
1254 #if defined ( ZDO_NWKADDR_REQUEST ) || defined ( REFLECTOR )
|
|
1255 ZDO_RegisterForZDOMsg( ZDAppTaskID, NWK_addr_rsp );
|
|
\ ??CrossCallReturnLabel_73:
|
|
\ 000009 ; Setup parameters for call to function ZDO_RegisterForZDOMsg
|
|
\ 000009 7A00 MOV R2,#0x0
|
|
\ 00000B 12.... LCALL ?Subroutine23 & 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_74:
|
|
\ 00000E ; Setup parameters for call to function ZDO_RegisterForZDOMsg
|
|
\ 00000E 7A21 MOV R2,#0x21
|
|
\ 000010 7B00 MOV R3,#0x0
|
|
\ 000012 12.... LCALL ??Subroutine48_0 & 0xFFFF
|
|
1264 ZDO_RegisterForZDOMsg( ZDAppTaskID, Unbind_req );
|
|
\ ??CrossCallReturnLabel_75:
|
|
\ 000015 ; Setup parameters for call to function ZDO_RegisterForZDOMsg
|
|
\ 000015 7A22 MOV R2,#0x22
|
|
\ 000017 7B00 MOV R3,#0x0
|
|
\ 000019 12.... LCALL ??Subroutine48_0 & 0xFFFF
|
|
1265 #endif
|
|
1266 }
|
|
\ ??CrossCallReturnLabel_76:
|
|
\ 00001C 02.... LJMP ?Subroutine3 & 0xFFFF
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine23:
|
|
\ 000000 7B80 MOV R3,#-0x80
|
|
\ 000002 REQUIRE ??Subroutine48_0
|
|
\ 000002 ; // Fall through to label ??Subroutine48_0
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ??Subroutine48_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 600A JZ ??ZDApp_ProcessSecMsg_0
|
|
\ 00000D 24FE ADD A,#-0x2
|
|
\ 00000F 6018 JZ ??ZDApp_ProcessSecMsg_1
|
|
\ 000011 24FE ADD A,#-0x2
|
|
\ 000013 6021 JZ ??ZDApp_ProcessSecMsg_2
|
|
\ 000015 802F SJMP ??ZDApp_ProcessSecMsg_3
|
|
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:
|
|
\ 000017 90.... MOV DPTR,#zgDeviceLogicalType
|
|
\ 00001A E0 MOVX A,@DPTR
|
|
\ 00001B 6401 XRL A,#0x1
|
|
\ 00001D 6005 JZ ??ZDApp_ProcessSecMsg_4
|
|
\ 00001F E0 MOVX A,@DPTR
|
|
\ 000020 6402 XRL A,#0x2
|
|
\ 000022 7022 JNZ ??ZDApp_ProcessSecMsg_3
|
|
1300 {
|
|
1301 ZDSecMgrTransportKeyInd( (ZDO_TransportKeyInd_t*)msgPtr );
|
|
\ ??ZDApp_ProcessSecMsg_4:
|
|
\ 000024 ; Setup parameters for call to function ZDSecMgrTransportKeyInd
|
|
\ 000024 12.... LCALL `??ZDSecMgrTransportKeyInd::?relay`; Banked call to: ZDSecMgrTransportKeyInd
|
|
\ 000027 801D SJMP ??ZDApp_ProcessSecMsg_3
|
|
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 ) )
|
|
\ ??ZDApp_ProcessSecMsg_1:
|
|
\ 000029 90.... MOV DPTR,#zgDeviceLogicalType
|
|
\ 00002C E0 MOVX A,@DPTR
|
|
\ 00002D 6401 XRL A,#0x1
|
|
\ 00002F 7015 JNZ ??ZDApp_ProcessSecMsg_3
|
|
1314 {
|
|
1315 ZDSecMgrRemoveDeviceInd( (ZDO_RemoveDeviceInd_t*)msgPtr );
|
|
\ 000031 ; Setup parameters for call to function ZDSecMgrRemoveDeviceInd
|
|
\ 000031 12.... LCALL `??ZDSecMgrRemoveDeviceInd::?relay`; Banked call to: ZDSecMgrRemoveDeviceInd
|
|
\ 000034 8010 SJMP ??ZDApp_ProcessSecMsg_3
|
|
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_2:
|
|
\ 000036 90.... MOV DPTR,#zgDeviceLogicalType
|
|
\ 000039 E0 MOVX A,@DPTR
|
|
\ 00003A 6401 XRL A,#0x1
|
|
\ 00003C 6005 JZ ??ZDApp_ProcessSecMsg_5
|
|
\ 00003E E0 MOVX A,@DPTR
|
|
\ 00003F 6402 XRL A,#0x2
|
|
\ 000041 7003 JNZ ??ZDApp_ProcessSecMsg_3
|
|
1332 {
|
|
1333 ZDSecMgrSwitchKeyInd( (ZDO_SwitchKeyInd_t*)msgPtr );
|
|
\ ??ZDApp_ProcessSecMsg_5:
|
|
\ 000043 ; Setup parameters for call to function ZDSecMgrSwitchKeyInd
|
|
\ 000043 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_3:
|
|
\ 000046 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 703A 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 ?Subroutine17 & 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 )
|
|
\ ??CrossCallReturnLabel_61:
|
|
\ 000030 90.... MOV DPTR,#devState
|
|
\ 000033 E0 MOVX A,@DPTR
|
|
\ 000034 640A XRL A,#0xa
|
|
\ 000036 700D JNZ ??ZDApp_ProcessNetworkJoin_4
|
|
\ 000038 12.... LCALL ?Subroutine21 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_21:
|
|
\ 00003B 6010 JZ ??ZDApp_ProcessNetworkJoin_5
|
|
1397 {
|
|
1398 // Change NIB state to router for restore
|
|
1399 _NIB.nwkState = NWK_ROUTER;
|
|
\ 00003D 90.... MOV DPTR,#_NIB + 35
|
|
\ 000040 7408 MOV A,#0x8
|
|
\ 000042 F0 MOVX @DPTR,A
|
|
\ 000043 8008 SJMP ??ZDApp_ProcessNetworkJoin_5
|
|
1400 }
|
|
1401 }
|
|
1402
|
|
1403 if ( devState == DEV_NWK_JOINING )
|
|
\ ??ZDApp_ProcessNetworkJoin_4:
|
|
\ 000045 E0 MOVX A,@DPTR
|
|
\ 000046 6403 XRL A,#0x3
|
|
\ 000048 7003 JNZ ??ZDApp_ProcessNetworkJoin_5
|
|
1404 {
|
|
1405 ZDApp_AnnounceNewAddress();
|
|
\ 00004A ; Setup parameters for call to function ZDApp_AnnounceNewAddress
|
|
\ 00004A 12.... LCALL `??ZDApp_AnnounceNewAddress::?relay`; Banked call to: ZDApp_AnnounceNewAddress
|
|
1406 }
|
|
1407
|
|
1408 devState = DEV_END_DEVICE;
|
|
\ ??ZDApp_ProcessNetworkJoin_5:
|
|
\ 00004D 90.... MOV DPTR,#devState
|
|
\ 000050 7406 MOV A,#0x6
|
|
\ 000052 F0 MOVX @DPTR,A
|
|
1409 if ( ZSTACK_ROUTER_BUILD )
|
|
1410 {
|
|
1411 // NOTE: first two parameters are not used, see NLMEDE.h for details
|
|
1412 if ( ZDO_Config_Node_Descriptor.LogicalType != NODETYPE_DEVICE )
|
|
\ 000053 12.... LCALL ?Subroutine21 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_22:
|
|
\ 000056 7003 JNZ $+5
|
|
\ 000058 02.... LJMP ??CrossCallReturnLabel_62 & 0xFFFF
|
|
1413 {
|
|
1414 NLME_StartRouterRequest( 0, 0, false );
|
|
\ 00005B ; Setup parameters for call to function NLME_StartRouterRequest
|
|
\ 00005B 7B00 MOV R3,#0x0
|
|
\ 00005D 7A00 MOV R2,#0x0
|
|
\ 00005F 7900 MOV R1,#0x0
|
|
\ 000061 12.... LCALL `??NLME_StartRouterRequest::?relay`; Banked call to: NLME_StartRouterRequest
|
|
\ 000064 02.... LJMP ??CrossCallReturnLabel_62 & 0xFFFF
|
|
1415 }
|
|
1416 }
|
|
1417 }
|
|
1418 }
|
|
1419 else
|
|
1420 {
|
|
1421 if ( (devStartMode == MODE_RESUME) && (++retryCnt >= MAX_RESUME_RETRY) )
|
|
\ ??ZDApp_ProcessNetworkJoin_3:
|
|
\ 000067 90.... MOV DPTR,#devStartMode
|
|
\ 00006A E0 MOVX A,@DPTR
|
|
\ 00006B 6401 XRL A,#0x1
|
|
\ 00006D 7036 JNZ ??ZDApp_ProcessNetworkJoin_6
|
|
\ 00006F 90.... MOV DPTR,#retryCnt
|
|
\ 000072 E0 MOVX A,@DPTR
|
|
\ 000073 04 INC A
|
|
\ 000074 F0 MOVX @DPTR,A
|
|
\ 000075 C3 CLR C
|
|
\ 000076 9403 SUBB A,#0x3
|
|
\ 000078 402B JC ??ZDApp_ProcessNetworkJoin_6
|
|
1422 {
|
|
1423 if ( _NIB.nwkPanId == 0xFFFF || _NIB.nwkPanId == INVALID_PAN_ID )
|
|
\ 00007A 90.... MOV DPTR,#_NIB + 33
|
|
\ 00007D E0 MOVX A,@DPTR
|
|
\ 00007E F4 CPL A
|
|
\ 00007F 7003 JNZ ??ZDApp_ProcessNetworkJoin_7
|
|
\ 000081 A3 INC DPTR
|
|
\ 000082 E0 MOVX A,@DPTR
|
|
\ 000083 F4 CPL A
|
|
\ ??ZDApp_ProcessNetworkJoin_7:
|
|
\ 000084 600D JZ ??ZDApp_ProcessNetworkJoin_8
|
|
\ 000086 90.... MOV DPTR,#_NIB + 33
|
|
\ 000089 E0 MOVX A,@DPTR
|
|
\ 00008A 64FE XRL A,#0xfe
|
|
\ 00008C 7003 JNZ ??ZDApp_ProcessNetworkJoin_9
|
|
\ 00008E A3 INC DPTR
|
|
\ 00008F E0 MOVX A,@DPTR
|
|
\ 000090 F4 CPL A
|
|
\ ??ZDApp_ProcessNetworkJoin_9:
|
|
\ 000091 7006 JNZ ??ZDApp_ProcessNetworkJoin_10
|
|
1424 devStartMode = MODE_JOIN;
|
|
\ ??ZDApp_ProcessNetworkJoin_8:
|
|
\ 000093 90.... MOV DPTR,#devStartMode
|
|
\ 000096 E4 CLR A
|
|
\ 000097 800B SJMP ??ZDApp_ProcessNetworkJoin_11
|
|
1425 else
|
|
1426 {
|
|
1427 devStartMode = MODE_REJOIN;
|
|
\ ??ZDApp_ProcessNetworkJoin_10:
|
|
\ 000099 90.... MOV DPTR,#devStartMode
|
|
\ 00009C 7403 MOV A,#0x3
|
|
\ 00009E F0 MOVX @DPTR,A
|
|
1428 _tmpRejoinState = true;
|
|
\ 00009F 90.... MOV DPTR,#_tmpRejoinState
|
|
\ 0000A2 7401 MOV A,#0x1
|
|
\ ??ZDApp_ProcessNetworkJoin_11:
|
|
\ 0000A4 F0 MOVX @DPTR,A
|
|
1429 }
|
|
1430 }
|
|
1431
|
|
1432 if ( (NLME_GetShortAddr() != INVALID_NODE_ADDR) ||
|
|
1433 (_NIB.nwkDevAddress != INVALID_NODE_ADDR) )
|
|
\ ??ZDApp_ProcessNetworkJoin_6:
|
|
\ 0000A5 ; Setup parameters for call to function NLME_GetShortAddr
|
|
\ 0000A5 12.... LCALL `??NLME_GetShortAddr::?relay`; Banked call to: NLME_GetShortAddr
|
|
\ 0000A8 74FE MOV A,#-0x2
|
|
\ 0000AA 6A XRL A,R2
|
|
\ 0000AB 7003 JNZ ??ZDApp_ProcessNetworkJoin_12
|
|
\ 0000AD 74FF MOV A,#-0x1
|
|
\ 0000AF 6B XRL A,R3
|
|
\ ??ZDApp_ProcessNetworkJoin_12:
|
|
\ 0000B0 700D JNZ ??ZDApp_ProcessNetworkJoin_13
|
|
\ 0000B2 90.... MOV DPTR,#_NIB + 20
|
|
\ 0000B5 E0 MOVX A,@DPTR
|
|
\ 0000B6 64FE XRL A,#0xfe
|
|
\ 0000B8 7003 JNZ ??ZDApp_ProcessNetworkJoin_14
|
|
\ 0000BA A3 INC DPTR
|
|
\ 0000BB E0 MOVX A,@DPTR
|
|
\ 0000BC F4 CPL A
|
|
\ ??ZDApp_ProcessNetworkJoin_14:
|
|
\ 0000BD 601B JZ ??ZDApp_ProcessNetworkJoin_15
|
|
1434 {
|
|
1435 uint16 addr = INVALID_NODE_ADDR;
|
|
\ ??ZDApp_ProcessNetworkJoin_13:
|
|
\ 0000BF 85..82 MOV DPL,?XSP + 0
|
|
\ 0000C2 85..83 MOV DPH,?XSP + 1
|
|
\ 0000C5 74FE MOV A,#-0x2
|
|
\ 0000C7 F0 MOVX @DPTR,A
|
|
\ 0000C8 A3 INC DPTR
|
|
\ 0000C9 04 INC A
|
|
\ 0000CA F0 MOVX @DPTR,A
|
|
1436 // Invalidate nwk addr so end device does not use in its data reqs.
|
|
1437 _NIB.nwkDevAddress = INVALID_NODE_ADDR;
|
|
\ 0000CB 90.... MOV DPTR,#_NIB + 20
|
|
\ 0000CE 14 DEC A
|
|
\ 0000CF F0 MOVX @DPTR,A
|
|
\ 0000D0 A3 INC DPTR
|
|
\ 0000D1 04 INC A
|
|
\ 0000D2 12.... LCALL ?Subroutine13 & 0xFFFF
|
|
1438 ZMacSetReq( ZMacShortAddress, (uint8 *)&addr );
|
|
1439 }
|
|
\ ??CrossCallReturnLabel_5:
|
|
\ 0000D5 7953 MOV R1,#0x53
|
|
\ 0000D7 12.... LCALL `??ZMacSetReq::?relay`; Banked call to: ZMacSetReq
|
|
1440
|
|
1441 // Clear the neighbor Table and network discovery tables.
|
|
1442 nwkNeighborInitTable();
|
|
\ ??ZDApp_ProcessNetworkJoin_15:
|
|
\ 0000DA ; Setup parameters for call to function nwkNeighborInitTable
|
|
\ 0000DA 12.... LCALL `??nwkNeighborInitTable::?relay`; Banked call to: nwkNeighborInitTable
|
|
1443 NLME_NwkDiscTerm();
|
|
\ 0000DD ; Setup parameters for call to function NLME_NwkDiscTerm
|
|
\ 0000DD 12.... LCALL `??NLME_NwkDiscTerm::?relay`; Banked call to: NLME_NwkDiscTerm
|
|
1444
|
|
1445 zdoDiscCounter = 1;
|
|
\ 0000E0 90.... MOV DPTR,#zdoDiscCounter
|
|
\ 0000E3 7401 MOV A,#0x1
|
|
\ 0000E5 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))) );
|
|
\ 0000E6 ; Setup parameters for call to function osal_rand
|
|
\ 0000E6 8078 SJMP ??ZDApp_ProcessNetworkJoin_16
|
|
1452 }
|
|
1453 }
|
|
1454 else if ( devState == DEV_NWK_ORPHAN || devState == DEV_NWK_REJOIN )
|
|
\ ??ZDApp_ProcessNetworkJoin_1:
|
|
\ 0000E8 E0 MOVX A,@DPTR
|
|
\ 0000E9 6404 XRL A,#0x4
|
|
\ 0000EB 7078 JNZ ??ZDApp_ProcessNetworkJoin_17
|
|
1455 {
|
|
1456 // results of an orphaning attempt by this device
|
|
1457 if (nwkStatus == ZSuccess)
|
|
\ ??ZDApp_ProcessNetworkJoin_2:
|
|
\ 0000ED 90.... MOV DPTR,#nwkStatus
|
|
\ 0000F0 E0 MOVX A,@DPTR
|
|
\ 0000F1 7021 JNZ ??ZDApp_ProcessNetworkJoin_18
|
|
1458 {
|
|
1459 if ( ZG_SECURE_ENABLED )
|
|
1460 {
|
|
1461 ZDApp_RestoreNwkKey();
|
|
1462 }
|
|
1463
|
|
1464 devState = DEV_END_DEVICE;
|
|
\ 0000F3 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_68:
|
|
\ 0000F6 90.... MOV DPTR,#ZDO_Config_Node_Descriptor + 2
|
|
\ 0000F9 E0 MOVX A,@DPTR
|
|
\ 0000FA A2E3 MOV C,0xE0 /* A */.3
|
|
\ 0000FC 5003 JNC ??CrossCallReturnLabel_32
|
|
1472 {
|
|
1473 // The receiver is on, turn network layer polling off.
|
|
1474 NLME_SetPollRate( 0 );
|
|
\ 0000FE ; Setup parameters for call to function NLME_SetPollRate
|
|
\ 0000FE 12.... LCALL ?Subroutine26 & 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 )
|
|
\ ??CrossCallReturnLabel_32:
|
|
\ 000101 12.... LCALL ?Subroutine21 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_23:
|
|
\ 000104 6009 JZ ??ZDApp_ProcessNetworkJoin_19
|
|
1483 {
|
|
1484 NLME_StartRouterRequest( 0, 0, false );
|
|
\ 000106 ; Setup parameters for call to function NLME_StartRouterRequest
|
|
\ 000106 7B00 MOV R3,#0x0
|
|
\ 000108 7A00 MOV R2,#0x0
|
|
\ 00010A 7900 MOV R1,#0x0
|
|
\ 00010C 12.... LCALL `??NLME_StartRouterRequest::?relay`; Banked call to: NLME_StartRouterRequest
|
|
1485 }
|
|
1486 }
|
|
1487
|
|
1488 ZDApp_AnnounceNewAddress();
|
|
\ ??ZDApp_ProcessNetworkJoin_19:
|
|
\ 00010F ; Setup parameters for call to function ZDApp_AnnounceNewAddress
|
|
\ 00010F 12.... LCALL `??ZDApp_AnnounceNewAddress::?relay`; Banked call to: ZDApp_AnnounceNewAddress
|
|
\ 000112 805F SJMP ??CrossCallReturnLabel_62
|
|
1489 }
|
|
1490 else
|
|
1491 {
|
|
1492 if ( devStartMode == MODE_RESUME )
|
|
\ ??ZDApp_ProcessNetworkJoin_18:
|
|
\ 000114 90.... MOV DPTR,#devStartMode
|
|
\ 000117 E0 MOVX A,@DPTR
|
|
\ 000118 6401 XRL A,#0x1
|
|
\ 00011A 703E JNZ ??ZDApp_ProcessNetworkJoin_20
|
|
1493 {
|
|
1494 if ( ++retryCnt <= MAX_RESUME_RETRY )
|
|
\ 00011C 90.... MOV DPTR,#retryCnt
|
|
\ 00011F E0 MOVX A,@DPTR
|
|
\ 000120 04 INC A
|
|
\ 000121 F0 MOVX @DPTR,A
|
|
\ 000122 C3 CLR C
|
|
\ 000123 9404 SUBB A,#0x4
|
|
\ 000125 5026 JNC ??ZDApp_ProcessNetworkJoin_21
|
|
1495 {
|
|
1496 if ( _NIB.nwkPanId == 0xFFFF || _NIB.nwkPanId == INVALID_PAN_ID )
|
|
\ 000127 90.... MOV DPTR,#_NIB + 33
|
|
\ 00012A E0 MOVX A,@DPTR
|
|
\ 00012B F4 CPL A
|
|
\ 00012C 7003 JNZ ??ZDApp_ProcessNetworkJoin_22
|
|
\ 00012E A3 INC DPTR
|
|
\ 00012F E0 MOVX A,@DPTR
|
|
\ 000130 F4 CPL A
|
|
\ ??ZDApp_ProcessNetworkJoin_22:
|
|
\ 000131 6022 JZ ??ZDApp_ProcessNetworkJoin_23
|
|
\ 000133 90.... MOV DPTR,#_NIB + 33
|
|
\ 000136 E0 MOVX A,@DPTR
|
|
\ 000137 64FE XRL A,#0xfe
|
|
\ 000139 7003 JNZ ??ZDApp_ProcessNetworkJoin_24
|
|
\ 00013B A3 INC DPTR
|
|
\ 00013C E0 MOVX A,@DPTR
|
|
\ 00013D F4 CPL A
|
|
\ ??ZDApp_ProcessNetworkJoin_24:
|
|
\ 00013E 6015 JZ ??ZDApp_ProcessNetworkJoin_23
|
|
1497 devStartMode = MODE_JOIN;
|
|
1498 else
|
|
1499 {
|
|
1500 devStartMode = MODE_REJOIN;
|
|
\ 000140 90.... MOV DPTR,#devStartMode
|
|
\ 000143 7403 MOV A,#0x3
|
|
\ 000145 F0 MOVX @DPTR,A
|
|
1501 _tmpRejoinState = true;
|
|
\ 000146 90.... MOV DPTR,#_tmpRejoinState
|
|
\ 000149 7401 MOV A,#0x1
|
|
\ 00014B 800C SJMP ??ZDApp_ProcessNetworkJoin_25
|
|
1502 }
|
|
1503 }
|
|
1504 // Do a normal join to the network after certain times of rejoin retries
|
|
1505 else if( AIB_apsUseInsecureJoin == true )
|
|
\ ??ZDApp_ProcessNetworkJoin_21:
|
|
\ 00014D 90.... MOV DPTR,#AIB_apsUseInsecureJoin
|
|
\ 000150 E0 MOVX A,@DPTR
|
|
\ 000151 6401 XRL A,#0x1
|
|
\ 000153 7005 JNZ ??ZDApp_ProcessNetworkJoin_20
|
|
1506 {
|
|
1507 devStartMode = MODE_JOIN;
|
|
\ ??ZDApp_ProcessNetworkJoin_23:
|
|
\ 000155 90.... MOV DPTR,#devStartMode
|
|
\ 000158 E4 CLR A
|
|
\ ??ZDApp_ProcessNetworkJoin_25:
|
|
\ 000159 F0 MOVX @DPTR,A
|
|
1508 }
|
|
1509 }
|
|
1510
|
|
1511 // Clear the neighbor Table and network discovery tables.
|
|
1512 nwkNeighborInitTable();
|
|
\ ??ZDApp_ProcessNetworkJoin_20:
|
|
\ 00015A ; Setup parameters for call to function nwkNeighborInitTable
|
|
\ 00015A 12.... LCALL `??nwkNeighborInitTable::?relay`; Banked call to: nwkNeighborInitTable
|
|
1513 NLME_NwkDiscTerm();
|
|
\ 00015D ; Setup parameters for call to function NLME_NwkDiscTerm
|
|
\ 00015D 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)) );
|
|
\ 000160 ; Setup parameters for call to function osal_rand
|
|
1518 }
|
|
1519 }
|
|
\ ??ZDApp_ProcessNetworkJoin_16:
|
|
\ 000160 12.... LCALL ?Subroutine27 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_34:
|
|
\ 000163 800E SJMP ??CrossCallReturnLabel_62
|
|
1520 #if defined ( ZIGBEE_STOCHASTIC_ADDRESSING )
|
|
1521 else
|
|
1522 {
|
|
1523 // Assume from address conflict
|
|
1524 if ( _NIB.nwkAddrAlloc == NWK_ADDRESSING_STOCHASTIC )
|
|
\ ??ZDApp_ProcessNetworkJoin_17:
|
|
\ 000165 90.... MOV DPTR,#_NIB + 96
|
|
\ 000168 E0 MOVX A,@DPTR
|
|
\ 000169 6402 XRL A,#0x2
|
|
\ 00016B 7006 JNZ ??CrossCallReturnLabel_62
|
|
1525 {
|
|
1526 // Notify the network
|
|
1527 ZDApp_AnnounceNewAddress();
|
|
\ 00016D ; Setup parameters for call to function ZDApp_AnnounceNewAddress
|
|
\ 00016D 12.... LCALL `??ZDApp_AnnounceNewAddress::?relay`; Banked call to: ZDApp_AnnounceNewAddress
|
|
1528
|
|
1529 // Notify apps
|
|
1530 osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );
|
|
\ 000170 ; Setup parameters for call to function osal_set_event
|
|
\ 000170 12.... LCALL ?Subroutine17 & 0xFFFF
|
|
1531 }
|
|
1532 }
|
|
1533 #endif
|
|
1534 }
|
|
\ ??CrossCallReturnLabel_62:
|
|
\ 000173 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 ??Subroutine44_0
|
|
\ 000002 ; // Fall through to label ??Subroutine44_0
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ??Subroutine44_0:
|
|
\ 000000 12.... LCALL ?DEALLOC_XSTACK8
|
|
\ 000003 REQUIRE ??Subroutine45_0
|
|
\ 000003 ; // Fall through to label ??Subroutine45_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 ?Subroutine29 & 0xFFFF
|
|
1576 osal_nv_write( ZCD_NV_NWKKEY, 0, sizeof( nwkActiveKeyItems ),
|
|
1577 (void *)&keyItems );
|
|
\ ??CrossCallReturnLabel_38:
|
|
\ 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 ?Subroutine30 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_40:
|
|
\ 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_78:
|
|
\ 00000D 02.... LJMP ?Subroutine3 & 0xFFFF
|
|
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 ?Subroutine30 & 0xFFFF
|
|
1674 }
|
|
\ ??CrossCallReturnLabel_41:
|
|
\ 000041 12.... LCALL ?DEALLOC_XSTACK8
|
|
1675 }
|
|
\ ??ZDApp_LeaveCtrlInit_0:
|
|
\ 000044 02.... LJMP ??Subroutine50_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 ??Subroutine49_0
|
|
\ 000023 ; // Fall through to label ??Subroutine49_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 ??Subroutine52_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 74F7 MOV A,#-0x9
|
|
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
|
|
\ 000005 ; Saved register size: 9
|
|
\ 000005 ; Auto size: 0
|
|
\ 000005 EC MOV A,R4
|
|
\ 000006 FA MOV R2,A
|
|
\ 000007 ED MOV A,R5
|
|
\ 000008 FB MOV R3,A
|
|
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 );
|
|
\ 000009 ; Setup parameters for call to function NLME_RemoveChild
|
|
\ 000009 12.... LCALL `??NLME_RemoveChild::?relay`; Banked call to: NLME_RemoveChild
|
|
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 }
|
|
\ 00000C 80.. SJMP ??Subroutine52_0
|
|
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 ??Subroutine45_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 ??Subroutine44_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 ?Subroutine30 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_42:
|
|
\ 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 REQUIRE ?Subroutine7
|
|
\ 000050 ; // Fall through to label ?Subroutine7
|
|
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 ?Subroutine24 & 0xFFFF
|
|
1937 }
|
|
\ ??CrossCallReturnLabel_25:
|
|
\ 00000C 02.... LJMP ??Subroutine52_0 & 0xFFFF
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine24:
|
|
\ 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 ?Subroutine14 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_9:
|
|
\ 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 ??Subroutine57_0 & 0xFFFF
|
|
2000 }
|
|
\ ??CrossCallReturnLabel_95:
|
|
\ 000020 12.... LCALL ?CALL_IND
|
|
\ 000023 8012 SJMP ??CrossCallReturnLabel_26
|
|
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 ?Subroutine24 & 0xFFFF
|
|
2006 }
|
|
2007 }
|
|
2008 return (ZSuccess);
|
|
\ ??CrossCallReturnLabel_26:
|
|
\ 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
|
|
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_91
|
|
2032 while (pNwkDesc)
|
|
2033 {
|
|
2034 ResultCount++;
|
|
\ ??ZDApp_NwkDescListProcessing_0:
|
|
\ 000015 05.. INC ?V3
|
|
2035 pNwkDesc = pNwkDesc->nextDesc;
|
|
\ 000017 12.... LCALL ?Subroutine20 & 0xFFFF
|
|
2036 }
|
|
\ ??CrossCallReturnLabel_91:
|
|
\ 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 ?V0,#0x0
|
|
2040 selected = FALSE;
|
|
2041
|
|
2042
|
|
2043 for ( stackProfile = 0; stackProfile < STACK_PROFILE_MAX; stackProfile++ )
|
|
\ 000021 75..00 MOV ?V2,#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_92
|
|
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 ?V0,#0x1
|
|
2101 }
|
|
2102
|
|
2103 if ( stackProfile == 0 )
|
|
\ ??ZDApp_NwkDescListProcessing_3:
|
|
\ 00004B E5.. MOV A,?V2
|
|
\ 00004D 6003 JZ $+5
|
|
\ 00004F 02.... LJMP ??ZDApp_NwkDescListProcessing_5 & 0xFFFF
|
|
\ ??ZDApp_NwkDescListProcessing_6:
|
|
\ 000052 05.. INC ?V1
|
|
\ 000054 12.... LCALL ?Subroutine20 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_92:
|
|
\ 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 ?Subroutine18 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_86:
|
|
\ 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 E5.. MOV A,?V0
|
|
\ 00009B 8E82 MOV DPL,R6
|
|
\ 00009D 8F83 MOV DPH,R7
|
|
\ 00009F A3 INC DPTR
|
|
\ 0000A0 A3 INC DPTR
|
|
\ 0000A1 A3 INC DPTR
|
|
\ 0000A2 7005 JNZ ??ZDApp_NwkDescListProcessing_12
|
|
\ 0000A4 E0 MOVX A,@DPTR
|
|
\ 0000A5 7006 JNZ ??ZDApp_NwkDescListProcessing_13
|
|
\ 0000A7 80A9 SJMP ??ZDApp_NwkDescListProcessing_6
|
|
\ ??ZDApp_NwkDescListProcessing_12:
|
|
\ 0000A9 A3 INC DPTR
|
|
\ 0000AA E0 MOVX A,@DPTR
|
|
\ 0000AB 60A5 JZ ??ZDApp_NwkDescListProcessing_6
|
|
\ ??ZDApp_NwkDescListProcessing_13:
|
|
\ 0000AD 8E82 MOV DPL,R6
|
|
\ 0000AF 8F83 MOV DPH,R7
|
|
\ 0000B1 A3 INC DPTR
|
|
\ 0000B2 A3 INC DPTR
|
|
\ 0000B3 A3 INC DPTR
|
|
\ 0000B4 A3 INC DPTR
|
|
\ 0000B5 A3 INC DPTR
|
|
\ 0000B6 E0 MOVX A,@DPTR
|
|
\ 0000B7 F8 MOV R0,A
|
|
\ 0000B8 90.... MOV DPTR,#_NIB + 17
|
|
\ 0000BB E0 MOVX A,@DPTR
|
|
\ 0000BC 68 XRL A,R0
|
|
\ 0000BD 7093 JNZ ??ZDApp_NwkDescListProcessing_6
|
|
\ 0000BF 8E82 MOV DPL,R6
|
|
\ 0000C1 8F83 MOV DPH,R7
|
|
\ 0000C3 A3 INC DPTR
|
|
\ 0000C4 A3 INC DPTR
|
|
\ 0000C5 A3 INC DPTR
|
|
\ 0000C6 A3 INC DPTR
|
|
\ 0000C7 A3 INC DPTR
|
|
\ 0000C8 A3 INC DPTR
|
|
\ 0000C9 E0 MOVX A,@DPTR
|
|
\ 0000CA F8 MOV R0,A
|
|
\ 0000CB 90.... MOV DPTR,#zgStackProfile
|
|
\ 0000CE E0 MOVX A,@DPTR
|
|
\ 0000CF 68 XRL A,R0
|
|
\ 0000D0 6039 JZ ??ZDApp_NwkDescListProcessing_5
|
|
\ 0000D2 E0 MOVX A,@DPTR
|
|
\ 0000D3 6401 XRL A,#0x1
|
|
\ 0000D5 6003 JZ $+5
|
|
\ 0000D7 02.... LJMP ??ZDApp_NwkDescListProcessing_2 & 0xFFFF
|
|
\ 0000DA 8E82 MOV DPL,R6
|
|
\ 0000DC 8F83 MOV DPH,R7
|
|
\ 0000DE A3 INC DPTR
|
|
\ 0000DF A3 INC DPTR
|
|
\ 0000E0 A3 INC DPTR
|
|
\ 0000E1 A3 INC DPTR
|
|
\ 0000E2 A3 INC DPTR
|
|
\ 0000E3 A3 INC DPTR
|
|
\ 0000E4 E0 MOVX A,@DPTR
|
|
\ 0000E5 6402 XRL A,#0x2
|
|
\ 0000E7 6003 JZ $+5
|
|
\ 0000E9 02.... LJMP ??ZDApp_NwkDescListProcessing_3 & 0xFFFF
|
|
\ 0000EC 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:
|
|
\ 0000EF E5.. MOV A,?V0
|
|
\ 0000F1 600C JZ ??ZDApp_NwkDescListProcessing_14
|
|
2120 {
|
|
2121 break;
|
|
2122 }
|
|
2123 }
|
|
\ 0000F3 05.. INC ?V2
|
|
\ 0000F5 E5.. MOV A,?V2
|
|
\ 0000F7 C3 CLR C
|
|
\ 0000F8 9402 SUBB A,#0x2
|
|
\ 0000FA 5003 JNC $+5
|
|
\ 0000FC 02.... LJMP ??ZDApp_NwkDescListProcessing_1 & 0xFFFF
|
|
2124
|
|
2125 if ( i == ResultCount )
|
|
\ ??ZDApp_NwkDescListProcessing_14:
|
|
\ 0000FF E5.. MOV A,?V3
|
|
\ 000101 65.. XRL A,?V1
|
|
\ 000103 7006 JNZ ??ZDApp_NwkDescListProcessing_5
|
|
2126 {
|
|
2127 return (NULL); // couldn't find appropriate PAN to join !
|
|
\ 000105 7A00 MOV R2,#0x0
|
|
\ 000107 7B00 MOV R3,#0x0
|
|
\ 000109 8004 SJMP ??ZDApp_NwkDescListProcessing_15
|
|
2128 }
|
|
2129 else
|
|
2130 {
|
|
2131 return (pNwkDesc);
|
|
\ ??ZDApp_NwkDescListProcessing_5:
|
|
\ 00010B EE MOV A,R6
|
|
\ 00010C FA MOV R2,A
|
|
\ 00010D EF MOV A,R7
|
|
\ 00010E FB MOV R3,A
|
|
2132 }
|
|
\ ??ZDApp_NwkDescListProcessing_15:
|
|
\ 00010F REQUIRE ?Subroutine5
|
|
\ 00010F ; // 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
|
|
\ ?Subroutine20:
|
|
\ 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 ??Subroutine54_0
|
|
\ 000009 ; // Fall through to label ??Subroutine54_0
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ??Subroutine54_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 ??Subroutine43_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_65:
|
|
\ 000003 REQUIRE ??Subroutine52_0
|
|
\ 000003 ; // Fall through to label ??Subroutine52_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 ?Subroutine14 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_10:
|
|
\ 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 ??Subroutine57_0 & 0xFFFF
|
|
2204 }
|
|
\ ??CrossCallReturnLabel_96:
|
|
\ 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 ??Subroutine54_0 & 0xFFFF
|
|
2213 pLastNwkDesc = NwkDescList;
|
|
\ ??CrossCallReturnLabel_88:
|
|
\ 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_93
|
|
2214 while (pNwkDesc)
|
|
2215 {
|
|
2216 if ((pNwkDesc->panId == pBeacon->panID) &&
|
|
2217 (pNwkDesc->logicalChannel == pBeacon->logicalChannel))
|
|
\ ??ZDO_beaconNotifyIndCB_2:
|
|
\ 00002C 12.... LCALL ?Subroutine18 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_87:
|
|
\ 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 ?Subroutine20 & 0xFFFF
|
|
2224 }
|
|
\ ??CrossCallReturnLabel_93:
|
|
\ 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 ?Subroutine14 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_11:
|
|
\ 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 ?Subroutine25 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_29:
|
|
\ 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 ?Subroutine25 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_30:
|
|
\ 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 ?Subroutine36 & 0xFFFF
|
|
2258 pNwkDesc->panId = pBeacon->panID;
|
|
\ ??CrossCallReturnLabel_47:
|
|
\ 0000EA 12.... LCALL ?Subroutine38 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_53:
|
|
\ 0000ED 8E82 MOV DPL,R6
|
|
\ 0000EF 8F83 MOV DPH,R7
|
|
\ 0000F1 12.... LCALL ??Subroutine60_0 & 0xFFFF
|
|
2259 pNwkDesc->updateId = pBeacon->updateID;
|
|
\ ??CrossCallReturnLabel_118:
|
|
\ 0000F4 E5.. MOV A,?V0
|
|
\ 0000F6 240C ADD A,#0xc
|
|
\ 0000F8 F582 MOV DPL,A
|
|
\ 0000FA E4 CLR A
|
|
\ 0000FB 35.. ADDC A,?V1
|
|
\ 0000FD F583 MOV DPH,A
|
|
\ 0000FF E0 MOVX A,@DPTR
|
|
\ 000100 C0E0 PUSH A
|
|
\ 000102 EE MOV A,R6
|
|
\ 000103 2413 ADD A,#0x13
|
|
\ 000105 F582 MOV DPL,A
|
|
\ 000107 E4 CLR A
|
|
\ 000108 3F ADDC A,R7
|
|
\ 000109 F583 MOV DPH,A
|
|
\ 00010B D0E0 POP A
|
|
\ 00010D 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 )
|
|
\ 00010E 8882 MOV DPL,R0
|
|
\ 000110 8983 MOV DPH,R1
|
|
\ 000112 E0 MOVX A,@DPTR
|
|
\ 000113 6401 XRL A,#0x1
|
|
\ 000115 6010 JZ ??ZDO_beaconNotifyIndCB_8
|
|
2263 {
|
|
2264 osal_cpyExtAddr( pNwkDesc->extendedPANID, pBeacon->extendedPanID );
|
|
\ 000117 ; Setup parameters for call to function sAddrExtCpy
|
|
\ 000117 E5.. MOV A,?V0
|
|
\ 000119 240D ADD A,#0xd
|
|
\ 00011B FC MOV R4,A
|
|
\ 00011C E4 CLR A
|
|
\ 00011D 35.. ADDC A,?V1
|
|
\ 00011F 12.... LCALL ?Subroutine35 & 0xFFFF
|
|
2265 }
|
|
\ ??CrossCallReturnLabel_72:
|
|
\ 000122 12.... LCALL `??sAddrExtCpy::?relay`; Banked call to: sAddrExtCpy
|
|
\ 000125 800C SJMP ??ZDO_beaconNotifyIndCB_9
|
|
2266 else
|
|
2267 {
|
|
2268 osal_memset( pNwkDesc->extendedPANID, 0xFF, Z_EXTADDR_LEN );
|
|
\ ??ZDO_beaconNotifyIndCB_8:
|
|
\ 000127 ; Setup parameters for call to function osal_memset
|
|
\ 000127 7C08 MOV R4,#0x8
|
|
\ 000129 7D00 MOV R5,#0x0
|
|
\ 00012B 79FF MOV R1,#-0x1
|
|
\ 00012D 12.... LCALL ??Subroutine47_0 & 0xFFFF
|
|
2269 }
|
|
\ ??CrossCallReturnLabel_70:
|
|
\ 000130 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:
|
|
\ 000133 85..82 MOV DPL,?V0
|
|
\ 000136 85..83 MOV DPH,?V1
|
|
\ 000139 A3 INC DPTR
|
|
\ 00013A A3 INC DPTR
|
|
\ 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 E0 MOVX A,@DPTR
|
|
\ 000144 F8 MOV R0,A
|
|
\ 000145 90.... MOV DPTR,#gMIN_TREE_LINK_COST
|
|
\ 000148 E0 MOVX A,@DPTR
|
|
\ 000149 C3 CLR C
|
|
\ 00014A 98 SUBB A,R0
|
|
\ 00014B 4003 JC $+5
|
|
\ 00014D 02.... LJMP ??ZDO_beaconNotifyIndCB_1 & 0xFFFF
|
|
\ 000150 85..82 MOV DPL,?V0
|
|
\ 000153 85..83 MOV DPH,?V1
|
|
\ 000156 A3 INC DPTR
|
|
\ 000157 A3 INC DPTR
|
|
\ 000158 A3 INC DPTR
|
|
\ 000159 A3 INC DPTR
|
|
\ 00015A A3 INC DPTR
|
|
\ 00015B E0 MOVX A,@DPTR
|
|
\ 00015C 6401 XRL A,#0x1
|
|
\ 00015E 6009 JZ ??ZDO_beaconNotifyIndCB_10
|
|
\ 000160 90.... MOV DPTR,#_tmpRejoinState
|
|
\ 000163 E0 MOVX A,@DPTR
|
|
\ 000164 7003 JNZ $+5
|
|
\ 000166 02.... LJMP ??ZDO_beaconNotifyIndCB_1 & 0xFFFF
|
|
2275 {
|
|
2276 uint8 selected = FALSE;
|
|
2277 uint8 capacity = FALSE;
|
|
2278
|
|
2279 if ( _NIB.nwkAddrAlloc == NWK_ADDRESSING_STOCHASTIC )
|
|
\ ??ZDO_beaconNotifyIndCB_10:
|
|
\ 000169 90.... MOV DPTR,#_NIB + 96
|
|
\ 00016C E0 MOVX A,@DPTR
|
|
\ 00016D 6402 XRL A,#0x2
|
|
\ 00016F 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)) )
|
|
\ 000171 8E82 MOV DPL,R6
|
|
\ 000173 8F83 MOV DPH,R7
|
|
\ 000175 A3 INC DPTR
|
|
\ 000176 A3 INC DPTR
|
|
\ 000177 A3 INC DPTR
|
|
\ 000178 A3 INC DPTR
|
|
\ 000179 A3 INC DPTR
|
|
\ 00017A A3 INC DPTR
|
|
\ 00017B A3 INC DPTR
|
|
\ 00017C A3 INC DPTR
|
|
\ 00017D A3 INC DPTR
|
|
\ 00017E E0 MOVX A,@DPTR
|
|
\ 00017F C3 CLR C
|
|
\ 000180 98 SUBB A,R0
|
|
\ 000181 5009 JNC ??ZDO_beaconNotifyIndCB_12
|
|
\ 000183 12.... LCALL ?Subroutine34 & 0xFFFF
|
|
2285 {
|
|
2286 selected = TRUE;
|
|
2287 }
|
|
2288 }
|
|
\ ??CrossCallReturnLabel_45:
|
|
\ 000186 9414 SUBB A,#0x14
|
|
\ 000188 4029 JC ??ZDO_beaconNotifyIndCB_13
|
|
\ 00018A 8063 SJMP ??ZDO_beaconNotifyIndCB_14
|
|
\ ??ZDO_beaconNotifyIndCB_12:
|
|
\ 00018C 8E82 MOV DPL,R6
|
|
\ 00018E 8F83 MOV DPH,R7
|
|
\ 000190 A3 INC DPTR
|
|
\ 000191 A3 INC DPTR
|
|
\ 000192 A3 INC DPTR
|
|
\ 000193 A3 INC DPTR
|
|
\ 000194 A3 INC DPTR
|
|
\ 000195 A3 INC DPTR
|
|
\ 000196 A3 INC DPTR
|
|
\ 000197 A3 INC DPTR
|
|
\ 000198 A3 INC DPTR
|
|
\ 000199 E0 MOVX A,@DPTR
|
|
\ 00019A 68 XRL A,R0
|
|
\ 00019B 7052 JNZ ??ZDO_beaconNotifyIndCB_14
|
|
2289 else
|
|
2290 {
|
|
2291 if ( pBeacon->depth < pNwkDesc->chosenRouterDepth )
|
|
\ ??ZDO_beaconNotifyIndCB_11:
|
|
\ 00019D 8E82 MOV DPL,R6
|
|
\ 00019F 8F83 MOV DPH,R7
|
|
\ 0001A1 A3 INC DPTR
|
|
\ 0001A2 A3 INC DPTR
|
|
\ 0001A3 A3 INC DPTR
|
|
\ 0001A4 A3 INC DPTR
|
|
\ 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 E0 MOVX A,@DPTR
|
|
\ 0001AC F8 MOV R0,A
|
|
\ 0001AD 12.... LCALL ?Subroutine34 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_46:
|
|
\ 0001B0 98 SUBB A,R0
|
|
\ 0001B1 503C JNC ??ZDO_beaconNotifyIndCB_14
|
|
2292 {
|
|
2293 selected = TRUE;
|
|
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_13:
|
|
\ 0001B3 85..82 MOV DPL,?V0
|
|
\ 0001B6 85..83 MOV DPH,?V1
|
|
\ 0001B9 A3 INC DPTR
|
|
\ 0001BA A3 INC DPTR
|
|
\ 0001BB A3 INC DPTR
|
|
\ 0001BC A3 INC DPTR
|
|
\ 0001BD A3 INC DPTR
|
|
\ 0001BE A3 INC DPTR
|
|
\ 0001BF E0 MOVX A,@DPTR
|
|
\ 0001C0 602D JZ ??ZDO_beaconNotifyIndCB_14
|
|
2307 {
|
|
2308 // this is the new chosen router for joining...
|
|
2309 pNwkDesc->chosenRouter = pBeacon->sourceAddr;
|
|
\ 0001C2 85..82 MOV DPL,?V0
|
|
\ 0001C5 85..83 MOV DPH,?V1
|
|
\ 0001C8 12.... LCALL ??Subroutine53_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_82:
|
|
\ 0001CB 8E82 MOV DPL,R6
|
|
\ 0001CD 8F83 MOV DPH,R7
|
|
\ 0001CF A3 INC DPTR
|
|
\ 0001D0 A3 INC DPTR
|
|
\ 0001D1 A3 INC DPTR
|
|
\ 0001D2 A3 INC DPTR
|
|
\ 0001D3 A3 INC DPTR
|
|
\ 0001D4 A3 INC DPTR
|
|
\ 0001D5 A3 INC DPTR
|
|
\ 0001D6 E8 MOV A,R0
|
|
\ 0001D7 F0 MOVX @DPTR,A
|
|
\ 0001D8 A3 INC DPTR
|
|
\ 0001D9 E9 MOV A,R1
|
|
\ 0001DA 12.... LCALL ?Subroutine11 & 0xFFFF
|
|
2310 pNwkDesc->chosenRouterLinkQuality = pBeacon->LQI;
|
|
\ ??CrossCallReturnLabel_3:
|
|
\ 0001DD A3 INC DPTR
|
|
\ 0001DE A3 INC DPTR
|
|
\ 0001DF A3 INC DPTR
|
|
\ 0001E0 A3 INC DPTR
|
|
\ 0001E1 A3 INC DPTR
|
|
\ 0001E2 A3 INC DPTR
|
|
\ 0001E3 12.... LCALL ?Subroutine19 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_18:
|
|
\ 0001E6 F0 MOVX @DPTR,A
|
|
2311 pNwkDesc->chosenRouterDepth = pBeacon->depth;
|
|
\ 0001E7 12.... LCALL ?Subroutine40 & 0xFFFF
|
|
2312 }
|
|
\ ??CrossCallReturnLabel_57:
|
|
\ 0001EA 12.... LCALL ?Subroutine19 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_19:
|
|
\ 0001ED A3 INC DPTR
|
|
\ 0001EE F0 MOVX @DPTR,A
|
|
2313
|
|
2314 if ( pBeacon->deviceCapacity )
|
|
\ ??ZDO_beaconNotifyIndCB_14:
|
|
\ 0001EF 85..82 MOV DPL,?V0
|
|
\ 0001F2 85..83 MOV DPH,?V1
|
|
\ 0001F5 A3 INC DPTR
|
|
\ 0001F6 A3 INC DPTR
|
|
\ 0001F7 A3 INC DPTR
|
|
\ 0001F8 A3 INC DPTR
|
|
\ 0001F9 A3 INC DPTR
|
|
\ 0001FA A3 INC DPTR
|
|
\ 0001FB A3 INC DPTR
|
|
\ 0001FC E0 MOVX A,@DPTR
|
|
\ 0001FD 600B JZ ??ZDO_beaconNotifyIndCB_15
|
|
2315 pNwkDesc->deviceCapacity = 1;
|
|
\ 0001FF 8E82 MOV DPL,R6
|
|
\ 000201 8F83 MOV DPH,R7
|
|
\ 000203 A3 INC DPTR
|
|
\ 000204 A3 INC DPTR
|
|
\ 000205 A3 INC DPTR
|
|
\ 000206 A3 INC DPTR
|
|
\ 000207 7401 MOV A,#0x1
|
|
\ 000209 F0 MOVX @DPTR,A
|
|
2316
|
|
2317 if ( pBeacon->routerCapacity )
|
|
\ ??ZDO_beaconNotifyIndCB_15:
|
|
\ 00020A 85..82 MOV DPL,?V0
|
|
\ 00020D 85..83 MOV DPH,?V1
|
|
\ 000210 A3 INC DPTR
|
|
\ 000211 A3 INC DPTR
|
|
\ 000212 A3 INC DPTR
|
|
\ 000213 A3 INC DPTR
|
|
\ 000214 A3 INC DPTR
|
|
\ 000215 A3 INC DPTR
|
|
\ 000216 E0 MOVX A,@DPTR
|
|
\ 000217 600A JZ ??ZDO_beaconNotifyIndCB_1
|
|
2318 pNwkDesc->routerCapacity = 1;
|
|
\ 000219 8E82 MOV DPL,R6
|
|
\ 00021B 8F83 MOV DPH,R7
|
|
\ 00021D A3 INC DPTR
|
|
\ 00021E A3 INC DPTR
|
|
\ 00021F A3 INC DPTR
|
|
\ 000220 7401 MOV A,#0x1
|
|
\ 000222 F0 MOVX @DPTR,A
|
|
2319 }
|
|
2320 }
|
|
2321 }
|
|
\ ??ZDO_beaconNotifyIndCB_1:
|
|
\ 000223 02.... LJMP ?Subroutine5 & 0xFFFF
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine34:
|
|
\ 000000 12.... LCALL ?Subroutine40 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_58:
|
|
\ 000003 E0 MOVX A,@DPTR
|
|
\ 000004 C3 CLR C
|
|
\ 000005 22 RET
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine40:
|
|
\ 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
|
|
\ ?Subroutine25:
|
|
\ 000000 12.... LCALL ?Subroutine37 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_50:
|
|
\ 000003 22 RET
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine37:
|
|
\ 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
|
|
\ ?Subroutine19:
|
|
\ 000000 12.... LCALL ?Subroutine37 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_49:
|
|
\ 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 ?Subroutine36 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_48:
|
|
\ 000003 A3 INC DPTR
|
|
\ 000004 A3 INC DPTR
|
|
\ 000005 22 RET
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine36:
|
|
\ 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 ?Subroutine14 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_12:
|
|
\ 000021 6033 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 ??Subroutine53_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_83:
|
|
\ 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 ??Subroutine53_0 & 0xFFFF
|
|
2417
|
|
2418 zdoCBFunc[ZDO_JOIN_CNF_CBID]( (void*)&joinCnf );
|
|
2419 }
|
|
\ ??CrossCallReturnLabel_84:
|
|
\ 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 12.... LCALL ?Subroutine13 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_6:
|
|
\ 00004D 90.... MOV DPTR,#zdoCBFunc + 8
|
|
\ 000050 12.... LCALL ??Subroutine56_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_100:
|
|
\ 000053 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:
|
|
\ 000056 ; Setup parameters for call to function ZDApp_SendMsg
|
|
\ 000056 7C00 MOV R4,#0x0
|
|
\ 000058 7D00 MOV R5,#0x0
|
|
\ 00005A 7B02 MOV R3,#0x2
|
|
\ 00005C 7A02 MOV R2,#0x2
|
|
\ 00005E 12.... LCALL ?Subroutine24 & 0xFFFF
|
|
2423
|
|
2424 }
|
|
\ ??CrossCallReturnLabel_27:
|
|
\ 000061 REQUIRE ?Subroutine6
|
|
\ 000061 ; // 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 ??Subroutine52_0 & 0xFFFF
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ??Subroutine56_0:
|
|
\ 000000 E0 MOVX A,@DPTR
|
|
\ 000001 F8 MOV R0,A
|
|
\ 000002 A3 INC DPTR
|
|
\ 000003 REQUIRE ??Subroutine57_0
|
|
\ 000003 ; // Fall through to label ??Subroutine57_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 ??Subroutine54_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_89:
|
|
\ 00000F ; Setup parameters for call to function osal_set_event
|
|
\ 00000F 12.... LCALL ?Subroutine17 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_63:
|
|
\ 000012 8033 SJMP ??CrossCallReturnLabel_90
|
|
2447
|
|
2448 while (pItem != NULL)
|
|
2449 {
|
|
2450 if (pItem->epDesc->endPoint != ZDO_EP)
|
|
\ ??ZDO_AddrChangeIndicationCB_0:
|
|
\ 000014 12.... LCALL ?Subroutine16 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_102:
|
|
\ 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 ?Subroutine16 & 0xFFFF
|
|
2458 }
|
|
2459 }
|
|
\ ??CrossCallReturnLabel_103:
|
|
\ 000038 12.... LCALL ??Subroutine55_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_101:
|
|
\ 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 ??Subroutine54_0 & 0xFFFF
|
|
2461 }
|
|
\ ??CrossCallReturnLabel_90:
|
|
\ 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 ??Subroutine45_0 & 0xFFFF
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine16:
|
|
\ 000000 8E82 MOV DPL,R6
|
|
\ 000002 8F83 MOV DPH,R7
|
|
\ 000004 A3 INC DPTR
|
|
\ 000005 REQUIRE ??Subroutine55_0
|
|
\ 000005 ; // Fall through to label ??Subroutine55_0
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ??Subroutine55_0:
|
|
\ 000000 A3 INC DPTR
|
|
\ 000001 REQUIRE ??Subroutine56_0
|
|
\ 000001 ; // Fall through to label ??Subroutine56_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_121:
|
|
\ 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 ?Subroutine14 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_13:
|
|
\ 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 ??Subroutine57_0 & 0xFFFF
|
|
2533 }
|
|
\ ??CrossCallReturnLabel_97:
|
|
\ 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 701F 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 ?Subroutine14 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_14:
|
|
\ 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 ??Subroutine57_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_98:
|
|
\ 000032 12.... LCALL ?CALL_IND
|
|
\ 000035 EA MOV A,R2
|
|
\ 000036 4B ORL A,R3
|
|
\ 000037 701A JNZ ??CrossCallReturnLabel_16
|
|
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 ?Subroutine31 & 0xFFFF
|
|
2559 }
|
|
2560 }
|
|
\ ??CrossCallReturnLabel_111:
|
|
\ 00003C F9 MOV R1,A
|
|
\ 00003D 12.... LCALL `??ZDApp_LeaveReset::?relay`; Banked call to: ZDApp_LeaveReset
|
|
\ 000040 8011 SJMP ??CrossCallReturnLabel_16
|
|
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 );
|
|
\ ??ZDO_LeaveCnf_0:
|
|
\ 000042 ; Setup parameters for call to function ZDApp_LeaveUpdate
|
|
\ 000042 8E82 MOV DPL,R6
|
|
\ 000044 8F83 MOV DPH,R7
|
|
\ 000046 A3 INC DPTR
|
|
\ 000047 A3 INC DPTR
|
|
\ 000048 A3 INC DPTR
|
|
\ 000049 A3 INC DPTR
|
|
\ 00004A A3 INC DPTR
|
|
\ 00004B A3 INC DPTR
|
|
\ 00004C A3 INC DPTR
|
|
\ 00004D A3 INC DPTR
|
|
\ 00004E A3 INC DPTR
|
|
\ 00004F A3 INC DPTR
|
|
\ 000050 12.... LCALL ?Subroutine15 & 0xFFFF
|
|
2567 }
|
|
2568 }
|
|
\ ??CrossCallReturnLabel_16:
|
|
\ 000053 02.... LJMP ??Subroutine50_0 & 0xFFFF
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine15:
|
|
\ 000000 E0 MOVX A,@DPTR
|
|
\ 000001 F9 MOV R1,A
|
|
\ 000002 EE MOV A,R6
|
|
\ 000003 2402 ADD A,#0x2
|
|
\ 000005 FC MOV R4,A
|
|
\ 000006 E4 CLR A
|
|
\ 000007 3F ADDC A,R7
|
|
\ 000008 FD MOV R5,A
|
|
\ 000009 8E82 MOV DPL,R6
|
|
\ 00000B 8F83 MOV DPH,R7
|
|
\ 00000D 12.... LCALL ?Subroutine38 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_54:
|
|
\ 000010 12.... LCALL `??ZDApp_LeaveUpdate::?relay`; Banked call to: ZDApp_LeaveUpdate
|
|
\ 000013 22 RET
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine31:
|
|
\ 000000 EE MOV A,R6
|
|
\ 000001 REQUIRE ??Subroutine59_0
|
|
\ 000001 ; // Fall through to label ??Subroutine59_0
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ??Subroutine59_0:
|
|
\ 000000 12.... LCALL ?Subroutine41 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_114:
|
|
\ 000003 E0 MOVX A,@DPTR
|
|
\ 000004 22 RET
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine41:
|
|
\ 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 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: 2
|
|
\ 000005 74FE MOV A,#-0x2
|
|
\ 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
|
|
2583 uint8 leave;
|
|
2584
|
|
2585
|
|
2586 // Parent is requesting the leave - NWK layer filters out illegal
|
|
2587 // requests
|
|
2588 if ( ind->request == TRUE )
|
|
\ 00000E 8A82 MOV DPL,R2
|
|
\ 000010 F583 MOV DPH,A
|
|
\ 000012 A3 INC DPTR
|
|
\ 000013 A3 INC DPTR
|
|
\ 000014 A3 INC DPTR
|
|
\ 000015 A3 INC DPTR
|
|
\ 000016 A3 INC DPTR
|
|
\ 000017 A3 INC DPTR
|
|
\ 000018 A3 INC DPTR
|
|
\ 000019 A3 INC DPTR
|
|
\ 00001A A3 INC DPTR
|
|
\ 00001B A3 INC DPTR
|
|
\ 00001C E0 MOVX A,@DPTR
|
|
\ 00001D 6401 XRL A,#0x1
|
|
\ 00001F 7031 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;
|
|
\ 000021 EA MOV A,R2
|
|
\ 000022 240C ADD A,#0xc
|
|
\ 000024 F5.. MOV ?V0,A
|
|
\ 000026 E4 CLR A
|
|
\ 000027 3F ADDC A,R7
|
|
\ 000028 F5.. MOV ?V1,A
|
|
\ 00002A 85..82 MOV DPL,?V0
|
|
\ 00002D F583 MOV DPH,A
|
|
\ 00002F E0 MOVX A,@DPTR
|
|
\ 000030 C0E0 PUSH A
|
|
\ 000032 7401 MOV A,#0x1
|
|
\ 000034 12.... LCALL ?XSTACK_DISP0_8
|
|
\ 000037 D0E0 POP A
|
|
\ 000039 F0 MOVX @DPTR,A
|
|
2595 rsp.removeChildren = ind->removeChildren;
|
|
\ 00003A EA MOV A,R2
|
|
\ 00003B 12.... LCALL ??Subroutine59_0 & 0xFFFF
|
|
2596 NLME_LeaveRsp( &rsp );
|
|
2597 }
|
|
\ ??CrossCallReturnLabel_109:
|
|
\ 00003E 85..82 MOV DPL,?XSP + 0
|
|
\ 000041 85..83 MOV DPH,?XSP + 1
|
|
\ 000044 12.... LCALL ?Subroutine13 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_7:
|
|
\ 000047 12.... LCALL `??NLME_LeaveRsp::?relay`; Banked call to: NLME_LeaveRsp
|
|
2598
|
|
2599 // Prepare to leave with reset
|
|
2600 ZDApp_LeaveReset( ind->rejoin );
|
|
\ 00004A ; Setup parameters for call to function ZDApp_LeaveReset
|
|
\ 00004A 85..82 MOV DPL,?V0
|
|
\ 00004D 85..83 MOV DPH,?V1
|
|
\ 000050 8028 SJMP ??CrossCallReturnLabel_104
|
|
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:
|
|
\ 000052 ; Setup parameters for call to function NLME_GetCoordShortAddr
|
|
\ 000052 12.... LCALL `??NLME_GetCoordShortAddr::?relay`; Banked call to: NLME_GetCoordShortAddr
|
|
\ 000055 8A.. MOV ?V0,R2
|
|
\ 000057 8B.. MOV ?V1,R3
|
|
\ 000059 A8.. MOV R0,?V0
|
|
\ 00005B A9.. MOV R1,?V1
|
|
\ 00005D 8E82 MOV DPL,R6
|
|
\ 00005F 8F83 MOV DPH,R7
|
|
\ 000061 E0 MOVX A,@DPTR
|
|
\ 000062 68 XRL A,R0
|
|
\ 000063 7003 JNZ ??ZDO_LeaveInd_1
|
|
\ 000065 A3 INC DPTR
|
|
\ 000066 E0 MOVX A,@DPTR
|
|
\ 000067 69 XRL A,R1
|
|
\ ??ZDO_LeaveInd_1:
|
|
\ 000068 7017 JNZ ??ZDO_LeaveInd_2
|
|
2608 {
|
|
2609 if ( ( ind->removeChildren == TRUE ) ||
|
|
2610 ( ZDO_Config_Node_Descriptor.LogicalType ==
|
|
2611 NODETYPE_DEVICE ) )
|
|
\ 00006A 12.... LCALL ?Subroutine31 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_112:
|
|
\ 00006D 6401 XRL A,#0x1
|
|
\ 00006F 6005 JZ ??ZDO_LeaveInd_3
|
|
\ 000071 12.... LCALL ?Subroutine21 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_24:
|
|
\ 000074 700B JNZ ??ZDO_LeaveInd_2
|
|
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_3:
|
|
\ 000076 ; Setup parameters for call to function ZDApp_LeaveReset
|
|
\ 000076 EE MOV A,R6
|
|
\ 000077 12.... LCALL ??Subroutine58_0 & 0xFFFF
|
|
2626 }
|
|
\ ??CrossCallReturnLabel_104:
|
|
\ 00007A E0 MOVX A,@DPTR
|
|
\ 00007B F9 MOV R1,A
|
|
\ 00007C 12.... LCALL `??ZDApp_LeaveReset::?relay`; Banked call to: ZDApp_LeaveReset
|
|
\ 00007F 8007 SJMP ??CrossCallReturnLabel_17
|
|
2627 else
|
|
2628 {
|
|
2629 // Remove device address(optionally descendents) from data
|
|
2630 ZDApp_LeaveUpdate( ind->srcAddr,
|
|
2631 ind->extAddr,
|
|
2632 ind->removeChildren );
|
|
\ ??ZDO_LeaveInd_2:
|
|
\ 000081 ; Setup parameters for call to function ZDApp_LeaveUpdate
|
|
\ 000081 EE MOV A,R6
|
|
\ 000082 12.... LCALL ?Subroutine41 & 0xFFFF
|
|
2633 }
|
|
2634 }
|
|
\ ??CrossCallReturnLabel_113:
|
|
\ 000085 12.... LCALL ?Subroutine15 & 0xFFFF
|
|
2635 }
|
|
\ ??CrossCallReturnLabel_17:
|
|
\ 000088 02.... LJMP ?Subroutine7 & 0xFFFF
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ??Subroutine58_0:
|
|
\ 000000 12.... LCALL ?Subroutine42 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_108:
|
|
\ 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)))
|
|
\ 000007 90.... MOV DPTR,#_NIB + 14
|
|
\ 00000A E0 MOVX A,@DPTR
|
|
\ 00000B A2E1 MOV C,0xE0 /* A */.1
|
|
\ 00000D 4013 JC ??CrossCallReturnLabel_28
|
|
2655 {
|
|
2656 if ( type == 1 )
|
|
\ 00000F 7401 MOV A,#0x1
|
|
\ 000011 6E XRL A,R6
|
|
\ 000012 700E JNZ ??CrossCallReturnLabel_28
|
|
2657 {
|
|
2658 // We lost contact with our parent. Clear the neighbor Table.
|
|
2659 nwkNeighborInitTable();
|
|
\ 000014 ; Setup parameters for call to function nwkNeighborInitTable
|
|
\ 000014 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 );
|
|
\ 000017 ; Setup parameters for call to function ZDApp_SendMsg
|
|
\ 000017 7C00 MOV R4,#0x0
|
|
\ 000019 7D00 MOV R5,#0x0
|
|
\ 00001B 7B02 MOV R3,#0x2
|
|
\ 00001D 7A03 MOV R2,#0x3
|
|
\ 00001F 12.... LCALL ?Subroutine24 & 0xFFFF
|
|
2663 }
|
|
2664 }
|
|
2665 }
|
|
\ ??CrossCallReturnLabel_28:
|
|
\ 000022 02.... LJMP ??Subroutine52_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 12.... LCALL ?Subroutine33 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_105:
|
|
\ 00000C A3 INC DPTR
|
|
\ 00000D E0 MOVX A,@DPTR
|
|
\ 00000E 5480 ANL A,#0x80
|
|
\ 000010 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 )
|
|
\ 000012 EA MOV A,R2
|
|
\ 000013 12.... LCALL ??Subroutine59_0 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_110:
|
|
\ 000016 7049 JNZ ??ZDApp_InMsgCB_0
|
|
\ 000018 12.... LCALL ?Subroutine33 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_106:
|
|
\ 00001B E0 MOVX A,@DPTR
|
|
\ 00001C 6413 XRL A,#0x13
|
|
\ 00001E 7002 JNZ ??ZDApp_InMsgCB_1
|
|
\ 000020 A3 INC DPTR
|
|
\ 000021 E0 MOVX A,@DPTR
|
|
\ ??ZDApp_InMsgCB_1:
|
|
\ 000022 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 );
|
|
\ 000024 ; Setup parameters for call to function ZDP_GenericRsp
|
|
\ 000024 12.... LCALL ?Subroutine32 & 0xFFFF
|
|
2777 }
|
|
2778 }
|
|
\ ??CrossCallReturnLabel_44:
|
|
\ 000027 4480 ORL A,#0x80
|
|
\ 000029 F5.. MOV ?V1,A
|
|
\ 00002B 78.. MOV R0,#?V0
|
|
\ 00002D 12.... LCALL ?PUSH_XSTACK_I_TWO
|
|
\ 000030 E4 CLR A
|
|
\ 000031 F5.. MOV ?V0,A
|
|
\ 000033 F5.. MOV ?V1,A
|
|
\ 000035 78.. MOV R0,#?V0
|
|
\ 000037 12.... LCALL ?PUSH_XSTACK_I_TWO
|
|
\ 00003A EA MOV A,R2
|
|
\ 00003B 240E ADD A,#0xe
|
|
\ 00003D F582 MOV DPL,A
|
|
\ 00003F E4 CLR A
|
|
\ 000040 3F ADDC A,R7
|
|
\ 000041 F583 MOV DPH,A
|
|
\ 000043 E0 MOVX A,@DPTR
|
|
\ 000044 FD MOV R5,A
|
|
\ 000045 7C84 MOV R4,#-0x7c
|
|
\ 000047 EA MOV A,R2
|
|
\ 000048 2402 ADD A,#0x2
|
|
\ 00004A FA MOV R2,A
|
|
\ 00004B E4 CLR A
|
|
\ 00004C 3F ADDC A,R7
|
|
\ 00004D FB MOV R3,A
|
|
\ 00004E EE MOV A,R6
|
|
\ 00004F 240F ADD A,#0xf
|
|
\ 000051 F582 MOV DPL,A
|
|
\ 000053 E4 CLR A
|
|
\ 000054 3F ADDC A,R7
|
|
\ 000055 F583 MOV DPH,A
|
|
\ 000057 E0 MOVX A,@DPTR
|
|
\ 000058 F9 MOV R1,A
|
|
\ 000059 12.... LCALL `??ZDP_GenericRsp::?relay`; Banked call to: ZDP_GenericRsp
|
|
\ 00005C 7404 MOV A,#0x4
|
|
\ 00005E 12.... LCALL ?DEALLOC_XSTACK8
|
|
2779 }
|
|
\ ??ZDApp_InMsgCB_0:
|
|
\ 000061 02.... LJMP ??Subroutine50_0 & 0xFFFF
|
|
|
|
\ In segment BANKED_CODE, align 1, keep-with-next
|
|
\ ?Subroutine33:
|
|
\ 000000 EA MOV A,R2
|
|
\ 000001 REQUIRE ??Subroutine58_0
|
|
\ 000001 ; // Fall through to label ??Subroutine58_0
|
|
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 ??Subroutine52_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_79:
|
|
\ 000011 8005 SJMP ??CrossCallReturnLabel_66
|
|
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 ??Subroutine43_0 & 0xFFFF
|
|
2817 }
|
|
2818 }
|
|
\ ??CrossCallReturnLabel_66:
|
|
\ 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 ??Subroutine52_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 ??Subroutine50_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_122:
|
|
\ 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 ?Subroutine14 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_15:
|
|
\ 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 ??Subroutine57_0 & 0xFFFF
|
|
2985 }
|
|
\ ??CrossCallReturnLabel_99:
|
|
\ 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 ?Subroutine39 & 0xFFFF
|
|
3004 }
|
|
\ ??CrossCallReturnLabel_55:
|
|
\ 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
|
|
\ ?Subroutine39:
|
|
\ 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 ?Subroutine28 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_35:
|
|
\ 00000D 12.... LCALL ??Subroutine60_0 & 0xFFFF
|
|
3027 return ZSuccess;
|
|
\ ??CrossCallReturnLabel_119:
|
|
\ 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
|
|
\ ?Subroutine28:
|
|
\ 000000 E9 MOV A,R1
|
|
\ 000001 29 ADD A,R1
|
|
\ 000002 12.... LCALL ?Subroutine39 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_56:
|
|
\ 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 ?Subroutine28 & 0xFFFF
|
|
\ ??CrossCallReturnLabel_36:
|
|
\ 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 -> NLME_StartRouterRequest
|
|
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 21 ZDApp_LeaveReset
|
|
0 9 -> ZDApp_LeaveCtrlSet
|
|
0 9 -> ZDApp_ResetTimerStart
|
|
0 21 ZDApp_LeaveUpdate
|
|
0 9 -> NLME_RemoveChild
|
|
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 12 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 -> NLME_StartRouterRequest
|
|
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 -> ZDSecMgrNewDeviceEvent
|
|
0 9 -> ZDSecMgrSaveTCLinkKey
|
|
0 9 -> osal_start_timerEx
|
|
2 0 ZDApp_ProcessSecMsg
|
|
2 0 -> ZDSecMgrRemoveDeviceInd
|
|
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_NetworkStartEvt
|
|
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_pwrmgr_device
|
|
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 -> ZDApp_LeaveUpdate
|
|
0 10 -> sAddrExtCmp
|
|
1 12 ZDO_LeaveInd
|
|
0 12 -> NLME_GetCoordShortAddr
|
|
0 12 -> NLME_LeaveRsp
|
|
0 12 -> ZDApp_LeaveReset
|
|
0 12 -> ZDApp_LeaveUpdate
|
|
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>
|
|
11 ??Subroutine43_0
|
|
3 ??Subroutine44_0
|
|
5 ??Subroutine45_0
|
|
14 ??Subroutine46_0
|
|
8 ??Subroutine47_0
|
|
9 ??Subroutine48_0
|
|
3 ??Subroutine49_0
|
|
5 ??Subroutine50_0
|
|
6 ??Subroutine51_0
|
|
5 ??Subroutine52_0
|
|
6 ??Subroutine53_0
|
|
6 ??Subroutine54_0
|
|
1 ??Subroutine55_0
|
|
3 ??Subroutine56_0
|
|
6 ??Subroutine57_0
|
|
4 ??Subroutine58_0
|
|
5 ??Subroutine59_0
|
|
6 ??Subroutine60_0
|
|
3 ?Subroutine0
|
|
2 ?Subroutine1
|
|
13 ?Subroutine10
|
|
6 ?Subroutine11
|
|
6 ?Subroutine12
|
|
6 ?Subroutine13
|
|
8 ?Subroutine14
|
|
20 ?Subroutine15
|
|
5 ?Subroutine16
|
|
2 ?Subroutine17
|
|
4 ?Subroutine18
|
|
8 ?Subroutine19
|
|
35 ?Subroutine2
|
|
9 ?Subroutine20
|
|
9 ?Subroutine21
|
|
5 ?Subroutine22
|
|
2 ?Subroutine23
|
|
9 ?Subroutine24
|
|
4 ?Subroutine25
|
|
22 ?Subroutine26
|
|
15 ?Subroutine27
|
|
6 ?Subroutine28
|
|
22 ?Subroutine29
|
|
7 ?Subroutine3
|
|
8 ?Subroutine30
|
|
1 ?Subroutine31
|
|
10 ?Subroutine32
|
|
1 ?Subroutine33
|
|
6 ?Subroutine34
|
|
1 ?Subroutine35
|
|
10 ?Subroutine36
|
|
11 ?Subroutine37
|
|
6 ?Subroutine38
|
|
15 ?Subroutine39
|
|
5 ?Subroutine4
|
|
12 ?Subroutine40
|
|
9 ?Subroutine41
|
|
9 ?Subroutine42
|
|
5 ?Subroutine5
|
|
8 ?Subroutine6
|
|
5 ?Subroutine7
|
|
5 ?Subroutine8
|
|
5 ?Subroutine9
|
|
3 AddrMgrWriteNVRequest
|
|
1 MatchRsps
|
|
3 ZDAppCheckForHoldKey
|
|
74 ZDAppDetermineDeviceType
|
|
9 ZDAppNwkAddr
|
|
1 ZDAppTaskID
|
|
59 ZDApp_AnnounceNewAddress
|
|
2 ZDApp_AutoFindMode_epDesc
|
|
11 ZDApp_ChangeMatchDescRespPermission
|
|
10 ZDApp_CoordStartPANIDConflictCB
|
|
58 ZDApp_DeviceAuthEvt
|
|
80 ZDApp_DeviceConfigured
|
|
100 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
|
|
14 ZDApp_LeaveUpdate
|
|
3 ZDApp_NVUpdate
|
|
11 ZDApp_NetworkDiscoveryReq
|
|
27 ZDApp_NetworkInit
|
|
82 ZDApp_NetworkStartEvt
|
|
44 ZDApp_NodeProfileSync
|
|
271 ZDApp_NwkDescListProcessing
|
|
19 ZDApp_NwkStateUpdateCB
|
|
103 ZDApp_ProcessMsgCBs
|
|
374 ZDApp_ProcessNetworkJoin
|
|
451 ZDApp_ProcessOSALMsg
|
|
127 ZDApp_ProcessSecEvent
|
|
73 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
|
|
215 ZDApp_event_loop
|
|
146 ZDOInitDevice
|
|
81 ZDO_AddrChangeIndicationCB
|
|
51 ZDO_ConcentratorIndicationCB
|
|
25 ZDO_DeregisterForZdoCB
|
|
97 ZDO_JoinConfirmCB
|
|
0 ZDO_JoinIndicationCB
|
|
86 ZDO_LeaveCnf
|
|
139 ZDO_LeaveInd
|
|
10 ZDO_ManytoOneFailureIndicationCB
|
|
62 ZDO_NetworkDiscoveryConfirmCB
|
|
26 ZDO_NetworkFormationConfirmCB
|
|
3 ZDO_PollConfirmCB
|
|
25 ZDO_RegisterForZdoCB
|
|
51 ZDO_SrcRtgIndCB
|
|
26 ZDO_StartRouterConfirmCB
|
|
37 ZDO_SyncIndicationCB
|
|
3 ZDO_UpdateDeviceIndication
|
|
8 ZDO_UseExtendedPANID
|
|
550 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
|
|
|
|
|
|
5 147 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
|
|
53 bytes in segment XDATA_Z
|
|
|
|
401 bytes of CODE memory
|
|
0 bytes of CONST memory (+ 8 bytes shared)
|
|
5 147 bytes of HUGECODE memory
|
|
64 bytes of XDATA memory
|
|
|
|
Errors: none
|
|
Warnings: none
|