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

13081 lines
617 KiB
Plaintext
Raw Blame History

###############################################################################
#
# IAR C/C++ Compiler V10.30.1.6000 for 8051 23/Aug/2019 12:13:12
# 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\ZDObject.c
# Command line =
# -f C:\Users\VULCAN\AppData\Local\Temp\EWE12E.tmp
# (E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Components\stack\zdo\ZDObject.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\ZDObject.lst
# Object file =
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\RouterEB\Obj\ZDObject.r51
#
###############################################################################
E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Components\stack\zdo\ZDObject.c
1 /**************************************************************************************************
2 Filename: ZDObject.c
3 Revised: $Date: 2011-07-13 10:55:53 -0700 (Wed, 13 Jul 2011) $
4 Revision: $Revision: 26766 $
5
6 Description: This is the Zigbee Device Object.
7
8
9 Copyright 2004-2011 Texas Instruments Incorporated. All rights reserved.
10
11 IMPORTANT: Your use of this Software is limited to those specific rights
12 granted under the terms of a software license agreement between the user
13 who downloaded the software, his/her employer (which must be your employer)
14 and Texas Instruments Incorporated (the "License"). You may not use this
15 Software unless you agree to abide by the terms of the License. The License
16 limits your use, and you acknowledge, that the Software may not be modified,
17 copied or distributed unless embedded on a Texas Instruments microcontroller
18 or used solely and exclusively in conjunction with a Texas Instruments radio
19 frequency transceiver, which is integrated into your product. Other than for
20 the foregoing purpose, you may not use, reproduce, copy, prepare derivative
21 works of, modify, distribute, perform, display or sell this Software and/or
22 its documentation for any purpose.
23
24 YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
25 PROVIDED 揂S IS<49> WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
26 INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
27 NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
28 TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,
29 NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
30 LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
31 INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE
32 OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT
33 OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
34 (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
35
36 Should you have any questions regarding your right to use this Software,
37 contact Texas Instruments Incorporated at www.TI.com.
38 **************************************************************************************************/
39
40 /*********************************************************************
41 * INCLUDES
42 */
43 #include "ZComdef.h"
44 #include "OSAL.h"
45 #include "OSAL_Nv.h"
46 #include "rtg.h"
47 #include "NLMEDE.h"
48 #include "nwk_globals.h"
49 #include "APS.h"
50 #include "APSMEDE.h"
51 #include "AssocList.h"
52 #include "BindingTable.h"
53 #include "AddrMgr.h"
54 #include "AF.h"
55 #include "ZDObject.h"
56 #include "ZDProfile.h"
57 #include "ZDConfig.h"
58 #include "ZDSecMgr.h"
59 #include "ZDApp.h"
60 #include "nwk_util.h" // NLME_IsAddressBroadcast()
61 #include "ZGlobals.h"
62 #if defined MT_ZDO_CB_FUNC
63 #include "MT.h"
64 #endif
65
66 #if defined( LCD_SUPPORTED )
67 #include "OnBoard.h"
68 #endif
69
70 /* HAL */
71 #include "hal_lcd.h"
72
73 /*********************************************************************
74 * MACROS
75 */
76
77 /*********************************************************************
78 * CONSTANTS
79 */
80 // NLME Stub Implementations
81 #define ZDO_ProcessMgmtPermitJoinTimeout NLME_PermitJoiningTimeout
82
83 // Status fields used by ZDO_ProcessMgmtRtgReq
84 #define ZDO_MGMT_RTG_ENTRY_ACTIVE 0x00
85 #define ZDO_MGMT_RTG_ENTRY_DISCOVERY_UNDERWAY 0x01
86 #define ZDO_MGMT_RTG_ENTRY_DISCOVERY_FAILED 0x02
87 #define ZDO_MGMT_RTG_ENTRY_INACTIVE 0x03
88
89 /*********************************************************************
90 * TYPEDEFS
91 */
92 #if defined ( REFLECTOR )
93 typedef struct
94 {
95 byte SrcTransSeq;
96 zAddrType_t SrcAddr;
97 uint16 LocalCoordinator;
98 byte epIntf;
99 uint16 ProfileID;
100 byte numInClusters;
101 uint16 *inClusters;
102 byte numOutClusters;
103 uint16 *outClusters;
104 byte SecurityUse;
105 byte status;
106 } ZDO_EDBind_t;
107 #endif // defined ( REFLECTOR )
108
109 enum
110 {
111 ZDMATCH_INIT, // Initialized
112 ZDMATCH_WAIT_REQ, // Received first request, waiting for second
113 ZDMATCH_SENDING_BINDS // Received both requests, sending unbind/binds
114 };
115
116 enum
117 {
118 ZDMATCH_SENDING_NOT,
119 ZDMATCH_SENDING_UNBIND,
120 ZDMATCH_SENDING_BIND
121 };
122
123 /*********************************************************************
124 * GLOBAL VARIABLES
125 */
126
127 /*********************************************************************
128 * EXTERNAL VARIABLES
129 */
130
131 /*********************************************************************
132 * EXTERNAL FUNCTIONS
133 */
134
135 /*********************************************************************
136 * LOCAL VARIABLES
137 */
\ In segment XDATA_Z, align 1, keep-with-next
138 static uint16 ZDOBuildBuf[26]; // temp area to build data without allocation
\ ZDOBuildBuf:
\ 000000 DS 52
\ 000034 REQUIRE __INIT_XDATA_Z
139
140 #if defined ( REFLECTOR )
\ In segment XDATA_Z, align 1, keep-with-next
141 static ZDO_EDBind_t *ZDO_EDBind; // Null when not used
\ ZDO_EDBind:
\ 000000 DS 2
\ 000002 REQUIRE __INIT_XDATA_Z
142 #endif
143
144 #if defined ( MANAGED_SCAN )
145 uint32 managedScanNextChannel = 0;
146 uint32 managedScanChannelMask = 0;
147 uint8 managedScanTimesPerChannel = 0;
148 #endif
149
\ In segment XDATA_Z, align 1, keep-with-next
150 ZDMatchEndDeviceBind_t *matchED = (ZDMatchEndDeviceBind_t *)NULL;
\ matchED:
\ 000000 DS 2
\ 000002 REQUIRE __INIT_XDATA_Z
151
\ In segment XDATA_Z, align 1, keep-with-next
152 uint32 apsChannelMask = 0;
\ apsChannelMask:
\ 000000 DS 4
\ 000004 REQUIRE __INIT_XDATA_Z
153
154 /*********************************************************************
155 * LOCAL FUNCTIONS
156 */
157 static void ZDODeviceSetup( void );
158 #if defined ( MANAGED_SCAN )
159 static void ZDOManagedScan_Next( void );
160 #endif
161 #if defined ( REFLECTOR )
162 static void ZDO_RemoveEndDeviceBind( void );
163 static void ZDO_SendEDBindRsp( byte TransSeq, zAddrType_t *dstAddr, byte Status, byte secUse );
164 #endif
165 static byte ZDO_CompareClusterLists( byte numList1, uint16 *list1,
166 byte numList2, uint16 *list2, uint16 *pMatches );
167 static void ZDO_RemoveMatchMemory( void );
168 static uint8 ZDO_CopyMatchInfo( ZDEndDeviceBind_t *destReq, ZDEndDeviceBind_t *srcReq );
169 static void ZDO_EndDeviceBindMatchTimeoutCB( void );
170 uint8 *ZDO_ConvertOTAClusters( uint8 cnt, uint8 *inBuf, uint16 *outList );
171 static void zdoSendStateChangeMsg(uint8 state, uint8 taskId);
172
173 /*********************************************************************
174 * @fn ZDO_Init
175 *
176 * @brief ZDObject and ZDProfile initialization.
177 *
178 * @param none
179 *
180 * @return none
181 */
\ In segment BANKED_CODE, align 1, keep-with-next
182 void ZDO_Init( void )
\ ZDO_Init:
183 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
184 // Initialize ZD items
185 #if defined ( REFLECTOR )
186 ZDO_EDBind = NULL;
\ 000004 90.... MOV DPTR,#ZDO_EDBind
\ 000007 E4 CLR A
\ 000008 F0 MOVX @DPTR,A
\ 000009 A3 INC DPTR
\ 00000A F0 MOVX @DPTR,A
187 #endif
188
189 // Initialize default ZDO_UseExtendedPANID to the APS one.
190 osal_cpyExtAddr( ZDO_UseExtendedPANID, AIB_apsUseExtendedPANID );
\ 00000B ; Setup parameters for call to function sAddrExtCpy
\ 00000B 7C.. MOV R4,#AIB_apsUseExtendedPANID & 0xff
\ 00000D 7D.. MOV R5,#(AIB_apsUseExtendedPANID >> 8) & 0xff
\ 00000F 7A.. MOV R2,#ZDO_UseExtendedPANID & 0xff
\ 000011 7B.. MOV R3,#(ZDO_UseExtendedPANID >> 8) & 0xff
\ 000013 12.... LCALL `??sAddrExtCpy::?relay`; Banked call to: sAddrExtCpy
191
192 // Setup the device - type of device to create.
193 ZDODeviceSetup();
\ 000016 90.... MOV DPTR,#zgDeviceLogicalType
\ 000019 E0 MOVX A,@DPTR
\ 00001A 7004 JNZ ??ZDO_Init_0
\ 00001C 7900 MOV R1,#0x0
\ 00001E 8002 SJMP ??ZDO_Init_1
\ ??ZDO_Init_0:
\ 000020 7901 MOV R1,#0x1
\ ??ZDO_Init_1:
\ 000022 ; Setup parameters for call to function APS_ReflectorInit
\ 000022 12.... LCALL `??APS_ReflectorInit::?relay`; Banked call to: APS_ReflectorInit
\ 000025 ; Setup parameters for call to function NLME_DeviceJoiningInit
\ 000025 12.... LCALL `??NLME_DeviceJoiningInit::?relay`; Banked call to: NLME_DeviceJoiningInit
194 }
\ 000028 02.... LJMP ?Subroutine0 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine0:
\ 000000 D083 POP DPH
\ 000002 D082 POP DPL
\ 000004 02.... LJMP ?BRET
195
196 #if defined ( MANAGED_SCAN )
197 /*********************************************************************
198 * @fn ZDOManagedScan_Next()
199 *
200 * @brief Setup a managed scan.
201 *
202 * @param none
203 *
204 * @return none
205 */
206 static void ZDOManagedScan_Next( void )
207 {
208 // Is it the first time
209 if ( managedScanNextChannel == 0 && managedScanTimesPerChannel == 0 )
210 {
211 // Setup the defaults
212 managedScanNextChannel = 1;
213
214 while( managedScanNextChannel && (zgDefaultChannelList & managedScanNextChannel) == 0 )
215 managedScanNextChannel <<= 1;
216
217 managedScanChannelMask = managedScanNextChannel;
218 managedScanTimesPerChannel = MANAGEDSCAN_TIMES_PRE_CHANNEL;
219 }
220 else
221 {
222 // Do we need to go to the next channel
223 if ( managedScanTimesPerChannel == 0 )
224 {
225 // Find next active channel
226 managedScanChannelMask = managedScanNextChannel;
227 managedScanTimesPerChannel = MANAGEDSCAN_TIMES_PRE_CHANNEL;
228 }
229 else
230 {
231 managedScanTimesPerChannel--;
232
233 if ( managedScanTimesPerChannel == 0 )
234 {
235 managedScanNextChannel <<= 1;
236 while( managedScanNextChannel && (zgDefaultChannelList & managedScanNextChannel) == 0 )
237 managedScanNextChannel <<= 1;
238
239 if ( managedScanNextChannel == 0 )
240 zdoDiscCounter = NUM_DISC_ATTEMPTS + 1; // Stop
241 }
242 }
243 }
244 }
245 #endif // MANAGED_SCAN
246
247 /*********************************************************************
248 * @fn ZDODeviceSetup()
249 *
250 * @brief Call set functions depending on the type of device compiled.
251 *
252 * @param none
253 *
254 * @return none
255 */
256 static void ZDODeviceSetup( void )
257 {
258 if ( ZG_BUILD_COORDINATOR_TYPE )
259 {
260 NLME_CoordinatorInit();
261 }
262
263 #if defined ( REFLECTOR )
264 APS_ReflectorInit( (ZG_DEVICE_COORDINATOR_TYPE) ? APS_REFLECTOR_PUBLIC : APS_REFLECTOR_PRIVATE );
265 #endif
266
267 if ( ZG_BUILD_JOINING_TYPE )
268 {
269 NLME_DeviceJoiningInit();
270 }
271 }
272
273 /*********************************************************************
274 * @fn ZDO_StartDevice
275 *
276 * @brief This function starts a device in a network.
277 *
278 * @param logicalType - Device type to start
279 * startMode - indicates mode of device startup
280 * beaconOrder - indicates time betwen beacons
281 * superframeOrder - indicates length of active superframe
282 *
283 * @return none
284 */
\ In segment BANKED_CODE, align 1, keep-with-next
285 void ZDO_StartDevice( byte logicalType, devStartModes_t startMode, byte beaconOrder, byte superframeOrder )
\ ZDO_StartDevice:
286 {
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 11
\ 000005 74F5 MOV A,#-0xb
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A E9 MOV A,R1
\ 00000B FF MOV R7,A
\ 00000C EA MOV A,R2
\ 00000D FE MOV R6,A
287 ZStatus_t ret;
288 #if defined ( ZIGBEE_FREQ_AGILITY )
289 static uint8 discRetries = 0;
290 #endif
291 #if defined ( ZIGBEE_COMMISSIONING )
292 static uint8 scanCnt = 0;
293 #endif
294
295 ret = ZUnsupportedMode;
296
297 if ( ZG_BUILD_COORDINATOR_TYPE && logicalType == NODETYPE_COORDINATOR )
298 {
299 if ( startMode == MODE_HARD )
300 {
301 devState = DEV_COORD_STARTING;
302 ret = NLME_NetworkFormationRequest( zgConfigPANID, zgApsUseExtendedPANID, zgDefaultChannelList,
303 zgDefaultStartingScanDuration, beaconOrder,
304 superframeOrder, false );
305 }
306 else if ( startMode == MODE_RESUME )
307 {
308 // Just start the coordinator
309 devState = DEV_COORD_STARTING;
310 ret = NLME_StartRouterRequest( beaconOrder, beaconOrder, false );
311 }
312 else
313 {
314 #if defined( LCD_SUPPORTED )
315 HalLcdWriteScreen( "StartDevice ERR", "MODE unknown" );
316 #endif
317 }
318 }
319
320 if ( ZG_BUILD_JOINING_TYPE && (logicalType == NODETYPE_ROUTER || logicalType == NODETYPE_DEVICE) )
\ 00000E 7401 MOV A,#0x1
\ 000010 6F XRL A,R7
\ 000011 6008 JZ ??ZDO_StartDevice_0
\ 000013 7402 MOV A,#0x2
\ 000015 6F XRL A,R7
\ 000016 6003 JZ $+5
\ 000018 02.... LJMP ??ZDO_StartDevice_1 & 0xFFFF
321 {
322 if ( (startMode == MODE_JOIN) || (startMode == MODE_REJOIN) )
\ ??ZDO_StartDevice_0:
\ 00001B EA MOV A,R2
\ 00001C 6005 JZ ??ZDO_StartDevice_2
\ 00001E 7403 MOV A,#0x3
\ 000020 6E XRL A,R6
\ 000021 7041 JNZ ??ZDO_StartDevice_3
323 {
324 devState = DEV_NWK_DISC;
\ ??ZDO_StartDevice_2:
\ 000023 90.... MOV DPTR,#devState
\ 000026 7402 MOV A,#0x2
\ 000028 12.... LCALL ?Subroutine43 & 0xFFFF
325
326 #if defined( MANAGED_SCAN )
327 ZDOManagedScan_Next();
328 ret = NLME_NetworkDiscoveryRequest( managedScanChannelMask, BEACON_ORDER_15_MSEC );
329 #else
330 ret = NLME_NetworkDiscoveryRequest( zgDefaultChannelList, zgDefaultStartingScanDuration );
\ ??CrossCallReturnLabel_60:
\ 00002B 12.... LCALL ?XLOAD_R2345
\ 00002E 12.... LCALL `??NLME_NetworkDiscoveryRequest::?relay`; Banked call to: NLME_NetworkDiscoveryRequest
\ 000031 E9 MOV A,R1
\ 000032 F8 MOV R0,A
331 #if defined ( ZIGBEE_FREQ_AGILITY )
332 if ( !( ZDO_Config_Node_Descriptor.CapabilityFlags & CAPINFO_RCVR_ON_IDLE ) &&
333 ( ret == ZSuccess ) && ( ++discRetries == 4 ) )
\ 000033 90.... MOV DPTR,#ZDO_Config_Node_Descriptor + 2
\ 000036 E0 MOVX A,@DPTR
\ 000037 A2E3 MOV C,0xE0 /* A */.3
\ 000039 4010 JC ??CrossCallReturnLabel_21
\ 00003B E9 MOV A,R1
\ 00003C 700D JNZ ??CrossCallReturnLabel_21
\ 00003E 90.... MOV DPTR,#??discRetries
\ 000041 E0 MOVX A,@DPTR
\ 000042 04 INC A
\ 000043 F0 MOVX @DPTR,A
\ 000044 6404 XRL A,#0x4
\ 000046 7003 JNZ ??CrossCallReturnLabel_21
334 {
335 // For devices with RxOnWhenIdle equals to FALSE, any network channel
336 // change will not be recieved. On these devices or routers that have
337 // lost the network, an active scan shall be conducted on the Default
338 // Channel list using the extended PANID to find the network. If the
339 // extended PANID isn't found using the Default Channel list, an scan
340 // should be completed using all channels.
341 zgDefaultChannelList = MAX_CHANNELS_24GHZ;
\ 000048 12.... LCALL ?Subroutine25 & 0xFFFF
342 }
343 #endif // ZIGBEE_FREQ_AGILITY
344 #if defined ( ZIGBEE_COMMISSIONING )
345 if (startMode == MODE_REJOIN && scanCnt++ >= 5 )
\ ??CrossCallReturnLabel_21:
\ 00004B 7403 MOV A,#0x3
\ 00004D 6E XRL A,R6
\ 00004E 705C JNZ ??ZDO_StartDevice_4
\ 000050 90.... MOV DPTR,#??scanCnt
\ 000053 E0 MOVX A,@DPTR
\ 000054 F9 MOV R1,A
\ 000055 7401 MOV A,#0x1
\ 000057 29 ADD A,R1
\ 000058 F0 MOVX @DPTR,A
\ 000059 E9 MOV A,R1
\ 00005A C3 CLR C
\ 00005B 9405 SUBB A,#0x5
\ 00005D 404D JC ??ZDO_StartDevice_4
346 {
347 // When ApsUseExtendedPanID is commissioned to a non zero value via
348 // application specific means, the device shall conduct an active scan
349 // on the Default Channel list and join the PAN with the same
350 // ExtendedPanID. If the PAN is not found, an scan should be completed
351 // on all channels.
352 // When devices rejoin the network and the PAN is not found from
353 zgDefaultChannelList = MAX_CHANNELS_24GHZ;
\ 00005F 12.... LCALL ?Subroutine25 & 0xFFFF
354 }
355 #endif // ZIGBEE_COMMISSIONING
356 #endif
357 }
\ ??CrossCallReturnLabel_22:
\ 000062 8048 SJMP ??ZDO_StartDevice_4
358 else if ( startMode == MODE_RESUME )
\ ??ZDO_StartDevice_3:
\ 000064 7401 MOV A,#0x1
\ 000066 6E XRL A,R6
\ 000067 7048 JNZ ??ZDO_StartDevice_5
359 {
360 if ( logicalType == NODETYPE_ROUTER )
\ 000069 7401 MOV A,#0x1
\ 00006B 6F XRL A,R7
\ 00006C 90.... MOV DPTR,#devState
\ 00006F 702E JNZ ??ZDO_StartDevice_6
361 {
362 ZMacScanCnf_t scanCnf;
363 devState = DEV_NWK_ORPHAN;
\ 000071 740A MOV A,#0xa
\ 000073 F0 MOVX @DPTR,A
364
365 /* if router and nvram is available, fake successful orphan scan */
366 scanCnf.hdr.Status = ZSUCCESS;
\ 000074 7401 MOV A,#0x1
\ 000076 12.... LCALL ?XSTACK_DISP0_8
\ 000079 E4 CLR A
\ 00007A F0 MOVX @DPTR,A
367 scanCnf.ScanType = ZMAC_ORPHAN_SCAN;
\ 00007B 7402 MOV A,#0x2
\ 00007D 12.... LCALL ?XSTACK_DISP0_8
\ 000080 7403 MOV A,#0x3
\ 000082 F0 MOVX @DPTR,A
368 scanCnf.UnscannedChannels = 0;
\ 000083 04 INC A
\ 000084 12.... LCALL ?XSTACK_DISP0_8
\ 000087 E4 CLR A
\ 000088 F0 MOVX @DPTR,A
\ 000089 A3 INC DPTR
\ 00008A F0 MOVX @DPTR,A
\ 00008B A3 INC DPTR
\ 00008C F0 MOVX @DPTR,A
\ 00008D A3 INC DPTR
\ 00008E F0 MOVX @DPTR,A
369 scanCnf.ResultListSize = 0;
\ 00008F 7408 MOV A,#0x8
\ 000091 12.... LCALL ?XSTACK_DISP0_8
\ 000094 E4 CLR A
\ 000095 F0 MOVX @DPTR,A
370 nwk_ScanJoiningOrphan(&scanCnf);
\ 000096 ; Setup parameters for call to function nwk_ScanJoiningOrphan
\ 000096 AA.. MOV R2,?XSP + 0
\ 000098 AB.. MOV R3,?XSP + 1
\ 00009A 12.... LCALL `??nwk_ScanJoiningOrphan::?relay`; Banked call to: nwk_ScanJoiningOrphan
371
372 ret = ZSuccess;
\ 00009D 802D SJMP ??ZDO_StartDevice_7
373 }
374 else
375 {
376 devState = DEV_NWK_ORPHAN;
\ ??ZDO_StartDevice_6:
\ 00009F 740A MOV A,#0xa
\ 0000A1 12.... LCALL ?Subroutine43 & 0xFFFF
377 ret = NLME_OrphanJoinRequest( zgDefaultChannelList,
378 zgDefaultStartingScanDuration );
379 }
380 }
\ ??CrossCallReturnLabel_61:
\ 0000A4 12.... LCALL ?XLOAD_R2345
\ 0000A7 12.... LCALL `??NLME_OrphanJoinRequest::?relay`; Banked call to: NLME_OrphanJoinRequest
\ 0000AA E9 MOV A,R1
\ 0000AB F8 MOV R0,A
381 else
382 {
383 #if defined( LCD_SUPPORTED )
384 HalLcdWriteScreen( "StartDevice ERR", "MODE unknown" );
385 #endif
386 }
387 }
388
389 if ( ret != ZSuccess )
\ ??ZDO_StartDevice_4:
\ 0000AC E8 MOV A,R0
\ 0000AD 700D JNZ ??ZDO_StartDevice_1
\ 0000AF 801B SJMP ??ZDO_StartDevice_7
\ ??ZDO_StartDevice_5:
\ 0000B1 ; Setup parameters for call to function HalLcdWriteScreen
\ 0000B1 7C.. MOV R4,#`?<Constant "MODE unknown">` & 0xff
\ 0000B3 7D.. MOV R5,#(`?<Constant "MODE unknown">` >> 8) & 0xff
\ 0000B5 7A.. MOV R2,#`?<Constant "StartDevice ERR">` & 0xff
\ 0000B7 7B.. MOV R3,#(`?<Constant "StartDevice ERR">` >> 8) & 0xff
\ 0000B9 12.... LCALL `??HalLcdWriteScreen::?relay`; Banked call to: HalLcdWriteScreen
390 {
391 osal_start_timerEx(ZDAppTaskID, ZDO_NETWORK_INIT, NWK_RETRY_DELAY );
\ ??ZDO_StartDevice_1:
\ 0000BC ; Setup parameters for call to function osal_start_timerEx
\ 0000BC 7CE8 MOV R4,#-0x18
\ 0000BE 7D03 MOV R5,#0x3
\ 0000C0 7A01 MOV R2,#0x1
\ 0000C2 7B00 MOV R3,#0x0
\ 0000C4 90.... MOV DPTR,#ZDAppTaskID
\ 0000C7 E0 MOVX A,@DPTR
\ 0000C8 F9 MOV R1,A
\ 0000C9 12.... LCALL `??osal_start_timerEx::?relay`; Banked call to: osal_start_timerEx
392 }
393 }
\ ??ZDO_StartDevice_7:
\ 0000CC 740B MOV A,#0xb
\ 0000CE 12.... LCALL ?DEALLOC_XSTACK8
\ 0000D1 REQUIRE ?Subroutine1
\ 0000D1 ; // Fall through to label ?Subroutine1
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine1:
\ 000000 7F01 MOV R7,#0x1
\ 000002 02.... LJMP ?BANKED_LEAVE_XDATA
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine43:
\ 000000 F0 MOVX @DPTR,A
\ 000001 ; Setup parameters for call to function NLME_NetworkDiscoveryRequest
\ 000001 ; Setup parameters for call to function NLME_OrphanJoinRequest
\ 000001 90.... MOV DPTR,#zgDefaultStartingScanDuration
\ 000004 E0 MOVX A,@DPTR
\ 000005 F9 MOV R1,A
\ 000006 90.... MOV DPTR,#zgDefaultChannelList
\ 000009 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine25:
\ 000000 90.... MOV DPTR,#zgDefaultChannelList
\ 000003 E4 CLR A
\ 000004 F0 MOVX @DPTR,A
\ 000005 A3 INC DPTR
\ 000006 74F8 MOV A,#-0x8
\ 000008 F0 MOVX @DPTR,A
\ 000009 A3 INC DPTR
\ 00000A 74FF MOV A,#-0x1
\ 00000C F0 MOVX @DPTR,A
\ 00000D A3 INC DPTR
\ 00000E 7407 MOV A,#0x7
\ 000010 F0 MOVX @DPTR,A
\ 000011 22 RET
\ In segment XDATA_Z, align 1, keep-with-next
\ ??discRetries:
\ 000000 DS 1
\ 000001 REQUIRE __INIT_XDATA_Z
\ In segment XDATA_Z, align 1, keep-with-next
\ ??scanCnt:
\ 000000 DS 1
\ 000001 REQUIRE __INIT_XDATA_Z
394
395 /**************************************************************************************************
396 * @fn zdoSendStateChangeMsg
397 *
398 * @brief Helper function for ZDO_UpdateNwkStatus.
399 *
400 * input parameters
401 *
402 * @param taskId - The OSAL task identifier to which to send the ZDO_STATE_CHANGE_EVT.
403 * @param state - The current device state.
404 *
405 * output parameters
406 *
407 * None.
408 *
409 * @return None.
410 **************************************************************************************************
411 */
412 static void zdoSendStateChangeMsg(uint8 state, uint8 taskId)
413 {
414 osal_event_hdr_t *pMsg = (osal_event_hdr_t *)osal_msg_find(taskId, ZDO_STATE_CHANGE);
415
416 if (NULL == pMsg)
417 {
418 if (NULL == (pMsg = (osal_event_hdr_t *)osal_msg_allocate(sizeof(osal_event_hdr_t))))
419 {
420 // Upon failure to notify any EndPoint of the state change, re-set the ZDO event to
421 // try again later when more Heap may be available.
422 osal_set_event(ZDAppTaskID, ZDO_STATE_CHANGE_EVT);
423 }
424 else
425 {
426 pMsg->event = ZDO_STATE_CHANGE;
427 pMsg->status = state;
428
429 (void)osal_msg_send(taskId, (uint8 *)pMsg);
430 }
431 }
432 else
433 {
434 // Modify in place the status of an existing ZDO_STATE_CHANGE message to the EndPoint.
435 pMsg->status = state;
436 }
437 }
438
439 /**************************************************************************************************
440 * @fn ZDO_UpdateNwkStatus
441 *
442 * @brief This function sends a ZDO_STATE_CHANGE message to the task of every EndPoint
443 * registered with AF (except, of course, the ZDO_EP). Even if a single task has more
444 * than one registered EndPoint, it will only receive one notification per state
445 * change. Although the device may go through a sequence of state changes, the
446 * Application task may only receive notification of the final, steady-state state
447 * because it has the lowest priority and never even runs to receive the intermediate
448 * state change notifications.
449 *
450 * input parameters
451 *
452 * @param state - The current device state.
453 *
454 * output parameters
455 *
456 * None.
457 *
458 * @return None.
459 **************************************************************************************************
460 */
\ In segment BANKED_CODE, align 1, keep-with-next
461 void ZDO_UpdateNwkStatus(devStates_t state)
\ ZDO_UpdateNwkStatus:
462 {
\ 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 ?V1,R1
463 epList_t *pItem = epList;
\ 000007 90.... MOV DPTR,#epList
\ 00000A 8008 SJMP ??ZDO_UpdateNwkStatus_0
464
465 while (pItem != NULL)
466 {
467 if (pItem->epDesc->endPoint != ZDO_EP)
468 {
469 zdoSendStateChangeMsg(state, *(pItem->epDesc->task_id));
\ ??ZDO_UpdateNwkStatus_1:
\ 00000C A3 INC DPTR
\ 00000D E5.. MOV A,?V1
\ 00000F F0 MOVX @DPTR,A
470 }
471
472 pItem = pItem->nextDesc;
\ ??ZDO_UpdateNwkStatus_2:
\ 000010 8E82 MOV DPL,R6
\ 000012 8F83 MOV DPH,R7
\ ??ZDO_UpdateNwkStatus_0:
\ 000014 12.... LCALL ??Subroutine235_0 & 0xFFFF
\ ??CrossCallReturnLabel_387:
\ 000017 EE MOV A,R6
\ 000018 4F ORL A,R7
\ 000019 6052 JZ ??ZDO_UpdateNwkStatus_3
\ 00001B 8E82 MOV DPL,R6
\ 00001D 8F83 MOV DPH,R7
\ 00001F 12.... LCALL ??Subroutine236_0 & 0xFFFF
\ ??CrossCallReturnLabel_398:
\ 000022 60EC JZ ??ZDO_UpdateNwkStatus_2
\ 000024 8E82 MOV DPL,R6
\ 000026 8F83 MOV DPH,R7
\ 000028 A3 INC DPTR
\ 000029 A3 INC DPTR
\ 00002A 12.... LCALL ?Subroutine112 & 0xFFFF
473 }
\ ??CrossCallReturnLabel_183:
\ 00002D 12.... LCALL ??Subroutine237_0 & 0xFFFF
\ ??CrossCallReturnLabel_396:
\ 000030 F5.. MOV ?V0,A
\ 000032 ; Setup parameters for call to function osal_msg_find
\ 000032 7AD1 MOV R2,#-0x2f
\ 000034 F9 MOV R1,A
\ 000035 12.... LCALL `??osal_msg_find::?relay`; Banked call to: osal_msg_find
\ 000038 8A82 MOV DPL,R2
\ 00003A 8B83 MOV DPH,R3
\ 00003C E582 MOV A,DPL
\ 00003E 4583 ORL A,DPH
\ 000040 70CA JNZ ??ZDO_UpdateNwkStatus_1
\ 000042 ; Setup parameters for call to function osal_msg_allocate
\ 000042 7A02 MOV R2,#0x2
\ 000044 7B00 MOV R3,#0x0
\ 000046 12.... LCALL `??osal_msg_allocate::?relay`; Banked call to: osal_msg_allocate
\ 000049 EA MOV A,R2
\ 00004A 4B ORL A,R3
\ 00004B 700E JNZ ??ZDO_UpdateNwkStatus_4
\ 00004D ; Setup parameters for call to function osal_set_event
\ 00004D 7A10 MOV R2,#0x10
\ 00004F 7B00 MOV R3,#0x0
\ 000051 90.... MOV DPTR,#ZDAppTaskID
\ 000054 E0 MOVX A,@DPTR
\ 000055 F9 MOV R1,A
\ 000056 12.... LCALL `??osal_set_event::?relay`; Banked call to: osal_set_event
\ 000059 80B5 SJMP ??ZDO_UpdateNwkStatus_2
\ ??ZDO_UpdateNwkStatus_4:
\ 00005B 8A82 MOV DPL,R2
\ 00005D 8B83 MOV DPH,R3
\ 00005F 74D1 MOV A,#-0x2f
\ 000061 F0 MOVX @DPTR,A
\ 000062 A3 INC DPTR
\ 000063 E5.. MOV A,?V1
\ 000065 F0 MOVX @DPTR,A
\ 000066 ; Setup parameters for call to function osal_msg_send
\ 000066 A9.. MOV R1,?V0
\ 000068 12.... LCALL `??osal_msg_send::?relay`; Banked call to: osal_msg_send
\ 00006B 80A3 SJMP ??ZDO_UpdateNwkStatus_2
474 #if defined MT_ZDO_CB_FUNC
475 zdoSendStateChangeMsg(state, MT_TaskID);
476 #endif
477
478 ZDAppNwkAddr.addr.shortAddr = NLME_GetShortAddr();
\ ??ZDO_UpdateNwkStatus_3:
\ 00006D ; Setup parameters for call to function NLME_GetShortAddr
\ 00006D 12.... LCALL `??NLME_GetShortAddr::?relay`; Banked call to: NLME_GetShortAddr
\ 000070 90.... MOV DPTR,#ZDAppNwkAddr
\ 000073 12.... LCALL ??Subroutine242_0 & 0xFFFF
479 (void)NLME_GetExtAddr(); // Load the saveExtAddr pointer.
\ ??CrossCallReturnLabel_424:
\ 000076 ; Setup parameters for call to function NLME_GetExtAddr
\ 000076 12.... LCALL `??NLME_GetExtAddr::?relay`; Banked call to: NLME_GetExtAddr
480 }
\ 000079 80.. SJMP ??Subroutine222_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine222_0:
\ 000000 7F04 MOV R7,#0x4
\ 000002 02.... LJMP ?BANKED_LEAVE_XDATA
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine112:
\ 000000 12.... LCALL ?Subroutine192 & 0xFFFF
\ ??CrossCallReturnLabel_746:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine235_0:
\ 000000 12.... LCALL ??Subroutine293_0 & 0xFFFF
\ ??CrossCallReturnLabel_714:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine236_0:
\ 000000 A3 INC DPTR
\ 000001 REQUIRE ??Subroutine237_0
\ 000001 ; // Fall through to label ??Subroutine237_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine237_0:
\ 000000 A3 INC DPTR
\ 000001 REQUIRE ??Subroutine238_0
\ 000001 ; // Fall through to label ??Subroutine238_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine238_0:
\ 000000 E0 MOVX A,@DPTR
\ 000001 REQUIRE ??Subroutine239_0
\ 000001 ; // Fall through to label ??Subroutine239_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine239_0:
\ 000000 12.... LCALL ?Subroutine191 & 0xFFFF
\ ??CrossCallReturnLabel_403:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine191:
\ 000000 F8 MOV R0,A
\ 000001 A3 INC DPTR
\ 000002 E0 MOVX A,@DPTR
\ 000003 F583 MOV DPH,A
\ 000005 8882 MOV DPL,R0
\ 000007 E0 MOVX A,@DPTR
\ 000008 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine242_0:
\ 000000 EA MOV A,R2
\ 000001 REQUIRE ??Subroutine243_0
\ 000001 ; // Fall through to label ??Subroutine243_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine243_0:
\ 000000 F0 MOVX @DPTR,A
\ 000001 A3 INC DPTR
\ 000002 EB MOV A,R3
\ 000003 F0 MOVX @DPTR,A
\ 000004 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine293_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
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine192:
\ 000000 A3 INC DPTR
\ 000001 E0 MOVX A,@DPTR
\ 000002 F583 MOV DPH,A
\ 000004 8882 MOV DPL,R0
\ 000006 22 RET
481
482 #if defined ( REFLECTOR )
483 /*********************************************************************
484 * @fn ZDO_RemoveEndDeviceBind
485 *
486 * @brief Remove the end device bind
487 *
488 * @param none
489 *
490 * @return none
491 */
492 static void ZDO_RemoveEndDeviceBind( void )
493 {
494 if ( ZDO_EDBind != NULL )
495 {
496 // Free the RAM
497 if ( ZDO_EDBind->inClusters != NULL )
498 {
499 osal_mem_free( ZDO_EDBind->inClusters );
500 }
501 if ( ZDO_EDBind->outClusters != NULL )
502 {
503 osal_mem_free( ZDO_EDBind->outClusters );
504 }
505 osal_mem_free( ZDO_EDBind );
506 ZDO_EDBind = NULL;
507 }
508 }
509 #endif // REFLECTOR
510
511 #if defined ( REFLECTOR )
512 /*********************************************************************
513 * @fn ZDO_RemoveEndDeviceBind
514 *
515 * @brief Remove the end device bind
516 *
517 * @param none
518 *
519 * @return none
520 */
521 static void ZDO_SendEDBindRsp( byte TransSeq, zAddrType_t *dstAddr, byte Status, byte secUse )
522 {
523 ZDP_EndDeviceBindRsp( TransSeq, dstAddr, Status, secUse );
524
525 #if defined( LCD_SUPPORTED )
526 HalLcdWriteString( "End Device Bind", HAL_LCD_LINE_1 );
527 if ( Status == ZDP_SUCCESS )
528 {
529 HalLcdWriteString( "Success Sent", HAL_LCD_LINE_2 );
530 }
531 else
532 {
533 HalLcdWriteString( "Timeout", HAL_LCD_LINE_2 );
534 }
535 #endif
536
537 }
538 #endif // REFLECTOR
539
540 /*********************************************************************
541 * @fn ZDO_CompareClusterLists
542 *
543 * @brief Compare one list to another list
544 *
545 * @param numList1 - number of items in list 1
546 * @param list1 - first list of cluster IDs
547 * @param numList2 - number of items in list 2
548 * @param list2 - second list of cluster IDs
549 * @param pMatches - buffer to put matches
550 *
551 * @return number of matches
552 */
\ In segment BANKED_CODE, align 1, keep-with-next
553 static byte ZDO_CompareClusterLists( byte numList1, uint16 *list1,
\ ZDO_CompareClusterLists:
554 byte numList2, uint16 *list2, uint16 *pMatches )
555 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 REQUIRE ?V2
\ 000000 REQUIRE ?V3
\ 000000 REQUIRE ?V4
\ 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 ?V0,R1
\ 000007 8A.. MOV ?V6,R2
\ 000009 8B.. MOV ?V7,R3
\ 00000B 8C.. MOV ?V4,R4
556 byte x, y;
557 uint16 z;
558 byte numMatches = 0;
\ 00000D 7A00 MOV R2,#0x0
559
560 // Check the first in against the seconds out
561 for ( x = 0; x < numList1; x++ )
\ 00000F 7B00 MOV R3,#0x0
\ 000011 7410 MOV A,#0x10
\ 000013 12.... LCALL ?XSTACK_DISP0_8
\ 000016 12.... LCALL ?Subroutine189 & 0xFFFF
\ ??CrossCallReturnLabel_306:
\ 000019 7412 MOV A,#0x12
\ 00001B 12.... LCALL ?XSTACK_DISP0_8
\ 00001E 12.... LCALL ??Subroutine235_0 & 0xFFFF
\ ??CrossCallReturnLabel_388:
\ 000021 804B SJMP ??ZDO_CompareClusterLists_0
562 {
563 for ( y = 0; y < numList2; y++ )
564 {
565 z = list2[y];
\ ??ZDO_CompareClusterLists_1:
\ 000023 A8.. MOV R0,?V1
\ 000025 E8 MOV A,R0
\ 000026 28 ADD A,R0
\ 000027 F8 MOV R0,A
\ 000028 E4 CLR A
\ 000029 33 RLC A
\ 00002A F9 MOV R1,A
\ 00002B EC MOV A,R4
\ 00002C 28 ADD A,R0
\ 00002D F582 MOV DPL,A
\ 00002F ED MOV A,R5
\ 000030 39 ADDC A,R1
\ 000031 F583 MOV DPH,A
\ 000033 E0 MOVX A,@DPTR
\ 000034 F5.. MOV ?V2,A
\ 000036 A3 INC DPTR
\ 000037 E0 MOVX A,@DPTR
\ 000038 F5.. MOV ?V3,A
566 if ( list1[x] == z )
\ 00003A EB MOV A,R3
\ 00003B 12.... LCALL ?Subroutine134 & 0xFFFF
\ ??CrossCallReturnLabel_220:
\ 00003E F582 MOV DPL,A
\ 000040 E5.. MOV A,?V7
\ 000042 39 ADDC A,R1
\ 000043 F583 MOV DPH,A
\ 000045 E0 MOVX A,@DPTR
\ 000046 65.. XRL A,?V2
\ 000048 7004 JNZ ??ZDO_CompareClusterLists_2
\ 00004A A3 INC DPTR
\ 00004B E0 MOVX A,@DPTR
\ 00004C 65.. XRL A,?V3
\ ??ZDO_CompareClusterLists_2:
\ 00004E 7014 JNZ ??ZDO_CompareClusterLists_3
567 {
568 pMatches[numMatches++] = z;
\ 000050 EA MOV A,R2
\ 000051 12.... LCALL ?Subroutine199 & 0xFFFF
569 }
570 }
\ ??CrossCallReturnLabel_319:
\ 000054 EE MOV A,R6
\ 000055 28 ADD A,R0
\ 000056 F582 MOV DPL,A
\ 000058 EF MOV A,R7
\ 000059 39 ADDC A,R1
\ 00005A F583 MOV DPH,A
\ 00005C E5.. MOV A,?V2
\ 00005E F0 MOVX @DPTR,A
\ 00005F A3 INC DPTR
\ 000060 E5.. MOV A,?V3
\ 000062 F0 MOVX @DPTR,A
\ 000063 0A INC R2
\ ??ZDO_CompareClusterLists_3:
\ 000064 05.. INC ?V1
\ ??ZDO_CompareClusterLists_4:
\ 000066 E5.. MOV A,?V1
\ 000068 C3 CLR C
\ 000069 95.. SUBB A,?V4
\ 00006B 40B6 JC ??ZDO_CompareClusterLists_1
\ 00006D 0B INC R3
\ ??ZDO_CompareClusterLists_0:
\ 00006E EB MOV A,R3
\ 00006F C3 CLR C
\ 000070 95.. SUBB A,?V0
\ 000072 5005 JNC ??ZDO_CompareClusterLists_5
\ 000074 75..00 MOV ?V1,#0x0
\ 000077 80ED SJMP ??ZDO_CompareClusterLists_4
571 }
572
573 return ( numMatches );
\ ??ZDO_CompareClusterLists_5:
\ 000079 EA MOV A,R2
\ 00007A F9 MOV R1,A
\ 00007B 02.... LJMP ??Subroutine230_0 & 0xFFFF
574 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine199:
\ 000000 25E0 ADD A,0xE0 /* A */
\ 000002 F8 MOV R0,A
\ 000003 E4 CLR A
\ 000004 33 RLC A
\ 000005 F9 MOV R1,A
\ 000006 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine134:
\ 000000 12.... LCALL ?Subroutine199 & 0xFFFF
\ ??CrossCallReturnLabel_321:
\ 000003 E5.. MOV A,?V6
\ 000005 28 ADD A,R0
\ 000006 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine189:
\ 000000 E0 MOVX A,@DPTR
\ 000001 FC MOV R4,A
\ 000002 A3 INC DPTR
\ 000003 E0 MOVX A,@DPTR
\ 000004 FD MOV R5,A
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine230_0:
\ 000000 7F08 MOV R7,#0x8
\ 000002 02.... LJMP ?BANKED_LEAVE_XDATA
575
576 /*********************************************************************
577 * Utility functions
578 */
579
580 /*********************************************************************
581 * @fn ZDO_CompareByteLists
582 *
583 * @brief Compares two lists for matches.
584 *
585 * @param ACnt - number of entries in list A
586 * @param AList - List A
587 * @param BCnt - number of entries in list B
588 * @param BList - List B
589 *
590 * @return true if a match is found
591 */
\ In segment BANKED_CODE, align 1, keep-with-next
592 byte ZDO_AnyClusterMatches( byte ACnt, uint16 *AList, byte BCnt, uint16 *BList )
\ ZDO_AnyClusterMatches:
593 {
\ 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 E9 MOV A,R1
\ 000006 FE MOV R6,A
\ 000007 8C.. MOV ?V2,R4
594 byte x, y;
595
596 for ( x = 0; x < ACnt; x++ )
\ 000009 7F00 MOV R7,#0x0
\ 00000B 740C MOV A,#0xc
\ 00000D 12.... LCALL ?XSTACK_DISP0_8
\ 000010 12.... LCALL ??Subroutine253_0 & 0xFFFF
\ ??CrossCallReturnLabel_463:
\ 000013 8001 SJMP ??ZDO_AnyClusterMatches_0
\ ??ZDO_AnyClusterMatches_1:
\ 000015 0F INC R7
\ ??ZDO_AnyClusterMatches_0:
\ 000016 EF MOV A,R7
\ 000017 C3 CLR C
\ 000018 9E SUBB A,R6
\ 000019 503A JNC ??ZDO_AnyClusterMatches_2
597 {
598 for ( y = 0; y < BCnt; y++ )
\ 00001B 75..00 MOV ?V3,#0x0
\ 00001E 8002 SJMP ??ZDO_AnyClusterMatches_3
\ ??ZDO_AnyClusterMatches_4:
\ 000020 05.. INC ?V3
\ ??ZDO_AnyClusterMatches_3:
\ 000022 E5.. MOV A,?V3
\ 000024 C3 CLR C
\ 000025 95.. SUBB A,?V2
\ 000027 50EC JNC ??ZDO_AnyClusterMatches_1
599 {
600 if ( AList[x] == BList[y] )
\ 000029 EF MOV A,R7
\ 00002A 12.... LCALL ??Subroutine227_0 & 0xFFFF
\ ??CrossCallReturnLabel_364:
\ 00002D EA MOV A,R2
\ 00002E 2C ADD A,R4
\ 00002F F582 MOV DPL,A
\ 000031 EB MOV A,R3
\ 000032 3D ADDC A,R5
\ 000033 12.... LCALL ?Subroutine177 & 0xFFFF
\ ??CrossCallReturnLabel_359:
\ 000036 AC.. MOV R4,?V3
\ 000038 EC MOV A,R4
\ 000039 2C ADD A,R4
\ 00003A FC MOV R4,A
\ 00003B E4 CLR A
\ 00003C 33 RLC A
\ 00003D FD MOV R5,A
\ 00003E E8 MOV A,R0
\ 00003F 2C ADD A,R4
\ 000040 F582 MOV DPL,A
\ 000042 E9 MOV A,R1
\ 000043 3D ADDC A,R5
\ 000044 F583 MOV DPH,A
\ 000046 E0 MOVX A,@DPTR
\ 000047 65.. XRL A,?V0
\ 000049 7004 JNZ ??ZDO_AnyClusterMatches_5
\ 00004B A3 INC DPTR
\ 00004C E0 MOVX A,@DPTR
\ 00004D 65.. XRL A,?V1
\ ??ZDO_AnyClusterMatches_5:
\ 00004F 70CF JNZ ??ZDO_AnyClusterMatches_4
601 {
602 return true;
\ 000051 7901 MOV R1,#0x1
\ 000053 8002 SJMP ??ZDO_AnyClusterMatches_6
603 }
604 }
605 }
606
607 return false;
\ ??ZDO_AnyClusterMatches_2:
\ 000055 7900 MOV R1,#0x0
\ ??ZDO_AnyClusterMatches_6:
\ 000057 02.... LJMP ??Subroutine222_0 & 0xFFFF
608 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine177:
\ 000000 F583 MOV DPH,A
\ 000002 REQUIRE ??Subroutine223_0
\ 000002 ; // Fall through to label ??Subroutine223_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine223_0:
\ 000000 E0 MOVX A,@DPTR
\ 000001 F5.. MOV ?V0,A
\ 000003 A3 INC DPTR
\ 000004 E0 MOVX A,@DPTR
\ 000005 F5.. MOV ?V1,A
\ 000007 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine227_0:
\ 000000 25E0 ADD A,0xE0 /* A */
\ 000002 FC MOV R4,A
\ 000003 E4 CLR A
\ 000004 33 RLC A
\ 000005 FD MOV R5,A
\ 000006 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine253_0:
\ 000000 12.... LCALL ??Subroutine283_0 & 0xFFFF
\ ??CrossCallReturnLabel_649:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine220:
\ 000000 E0 MOVX A,@DPTR
\ 000001 F8 MOV R0,A
\ 000002 A3 INC DPTR
\ 000003 E0 MOVX A,@DPTR
\ 000004 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine283_0:
\ 000000 12.... LCALL ?Subroutine220 & 0xFFFF
\ ??CrossCallReturnLabel_657:
\ 000003 F9 MOV R1,A
\ 000004 22 RET
609
610 /*********************************************************************
611 * Callback functions from ZDProfile
612 */
613
614 /*********************************************************************
615 * @fn ZDO_ProcessNodeDescReq
616 *
617 * @brief This function processes and responds to the
618 * Node_Desc_req message.
619 *
620 * @param inMsg - incoming message
621 *
622 * @return none
623 */
\ In segment BANKED_CODE, align 1, keep-with-next
624 void ZDO_ProcessNodeDescReq( zdoIncomingMsg_t *inMsg )
\ ZDO_ProcessNodeDescReq:
625 {
\ 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 12.... LCALL ?Subroutine60 & 0xFFFF
626 uint16 aoi = BUILD_UINT16( inMsg->asdu[0], inMsg->asdu[1] );
627 NodeDescriptorFormat_t *desc = NULL;
628
629 if ( aoi == ZDAppNwkAddr.addr.shortAddr )
\ ??CrossCallReturnLabel_89:
\ 000008 7003 JNZ ??ZDO_ProcessNodeDescReq_0
\ 00000A A3 INC DPTR
\ 00000B E0 MOVX A,@DPTR
\ 00000C 6D XRL A,R5
\ ??ZDO_ProcessNodeDescReq_0:
\ 00000D 7017 JNZ ??ZDO_ProcessNodeDescReq_1
630 {
631 desc = &ZDO_Config_Node_Descriptor;
632 }
633
634 if ( desc != NULL )
635 {
636 ZDP_NodeDescMsg( inMsg, aoi, desc );
\ 00000F ; Setup parameters for call to function ZDP_NodeDescMsg
\ 00000F 75.... MOV ?V0,#ZDO_Config_Node_Descriptor & 0xff
\ 000012 75.... MOV ?V1,#(ZDO_Config_Node_Descriptor >> 8) & 0xff
\ 000015 78.. MOV R0,#?V0
\ 000017 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00001A EE MOV A,R6
\ 00001B FA MOV R2,A
\ 00001C 12.... LCALL `??ZDP_NodeDescMsg::?relay`; Banked call to: ZDP_NodeDescMsg
\ 00001F 7402 MOV A,#0x2
\ 000021 12.... LCALL ?DEALLOC_XSTACK8
\ 000024 801A SJMP ??ZDO_ProcessNodeDescReq_2
637 }
638 else
639 {
640 ZDP_GenericRsp( inMsg->TransSeq, &(inMsg->srcAddr),
641 ZDP_INVALID_REQTYPE, aoi, Node_Desc_rsp, inMsg->SecurityUse );
\ ??ZDO_ProcessNodeDescReq_1:
\ 000026 ; Setup parameters for call to function ZDP_GenericRsp
\ 000026 75..02 MOV ?V0,#0x2
\ 000029 75..80 MOV ?V1,#-0x80
\ 00002C 78.. MOV R0,#?V0
\ 00002E 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000031 8A.. MOV ?V0,R2
\ 000033 89.. MOV ?V1,R1
\ 000035 78.. MOV R0,#?V0
\ 000037 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00003A 12.... LCALL ?Subroutine61 & 0xFFFF
642 }
\ ??CrossCallReturnLabel_91:
\ 00003D 12.... LCALL ?DEALLOC_XSTACK8
643 }
\ ??ZDO_ProcessNodeDescReq_2:
\ 000040 80.. SJMP ??Subroutine225_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine61:
\ 000000 12.... LCALL ?Subroutine198 & 0xFFFF
\ ??CrossCallReturnLabel_317:
\ 000003 7C80 MOV R4,#-0x80
\ 000005 12.... LCALL ?Subroutine197 & 0xFFFF
\ ??CrossCallReturnLabel_315:
\ 000008 12.... LCALL `??ZDP_GenericRsp::?relay`; Banked call to: ZDP_GenericRsp
\ 00000B 7404 MOV A,#0x4
\ 00000D 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine60:
\ 000000 EA MOV A,R2
\ 000001 FE MOV R6,A
\ 000002 EB MOV A,R3
\ 000003 FF MOV R7,A
\ 000004 12.... LCALL ?Subroutine204 & 0xFFFF
\ ??CrossCallReturnLabel_456:
\ 000007 3F ADDC A,R7
\ 000008 12.... LCALL ?Subroutine176 & 0xFFFF
\ ??CrossCallReturnLabel_292:
\ 00000B FC MOV R4,A
\ 00000C E4 CLR A
\ 00000D 39 ADDC A,R1
\ 00000E FD MOV R5,A
\ 00000F 90.... MOV DPTR,#ZDAppNwkAddr
\ 000012 E0 MOVX A,@DPTR
\ 000013 6C XRL A,R4
\ 000014 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine225_0:
\ 000000 7F02 MOV R7,#0x2
\ 000002 02.... LJMP ?BANKED_LEAVE_XDATA
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine198:
\ 000000 EE MOV A,R6
\ 000001 240E ADD A,#0xe
\ 000003 F582 MOV DPL,A
\ 000005 E4 CLR A
\ 000006 3F ADDC A,R7
\ 000007 F583 MOV DPH,A
\ 000009 E0 MOVX A,@DPTR
\ 00000A FD MOV R5,A
\ 00000B 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine197:
\ 000000 EE MOV A,R6
\ 000001 2402 ADD A,#0x2
\ 000003 FA MOV R2,A
\ 000004 E4 CLR A
\ 000005 3F ADDC A,R7
\ 000006 FB MOV R3,A
\ 000007 EE MOV A,R6
\ 000008 240F ADD A,#0xf
\ 00000A F582 MOV DPL,A
\ 00000C E4 CLR A
\ 00000D 3F ADDC A,R7
\ 00000E F583 MOV DPH,A
\ 000010 E0 MOVX A,@DPTR
\ 000011 F9 MOV R1,A
\ 000012 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine176:
\ 000000 F583 MOV DPH,A
\ 000002 12.... LCALL ?Subroutine215 & 0xFFFF
\ ??CrossCallReturnLabel_345:
\ 000005 12.... LCALL ??Subroutine281_0 & 0xFFFF
\ ??CrossCallReturnLabel_694:
\ 000008 F8 MOV R0,A
\ 000009 E4 CLR A
\ 00000A C8 XCH A,R0
\ 00000B F9 MOV R1,A
\ 00000C EA MOV A,R2
\ 00000D 28 ADD A,R0
\ 00000E 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine215:
\ 000000 12.... LCALL ?Subroutine220 & 0xFFFF
\ ??CrossCallReturnLabel_654:
\ 000003 8882 MOV DPL,R0
\ 000005 F583 MOV DPH,A
\ 000007 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine204:
\ 000000 EA MOV A,R2
\ 000001 REQUIRE ??Subroutine247_0
\ 000001 ; // Fall through to label ??Subroutine247_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine247_0:
\ 000000 12.... LCALL ?Subroutine217 & 0xFFFF
\ ??CrossCallReturnLabel_712:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine217:
\ 000000 2413 ADD A,#0x13
\ 000002 F582 MOV DPL,A
\ 000004 E4 CLR A
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine281_0:
\ 000000 E0 MOVX A,@DPTR
\ 000001 FA MOV R2,A
\ 000002 A3 INC DPTR
\ 000003 E0 MOVX A,@DPTR
\ 000004 22 RET
644
645 /*********************************************************************
646 * @fn ZDO_ProcessPowerDescReq
647 *
648 * @brief This function processes and responds to the
649 * Node_Power_req message.
650 *
651 * @param inMsg - incoming request
652 *
653 * @return none
654 */
\ In segment BANKED_CODE, align 1, keep-with-next
655 void ZDO_ProcessPowerDescReq( zdoIncomingMsg_t *inMsg )
\ ZDO_ProcessPowerDescReq:
656 {
\ 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 12.... LCALL ?Subroutine60 & 0xFFFF
657 uint16 aoi = BUILD_UINT16( inMsg->asdu[0], inMsg->asdu[1] );
658 NodePowerDescriptorFormat_t *desc = NULL;
659
660 if ( aoi == ZDAppNwkAddr.addr.shortAddr )
\ ??CrossCallReturnLabel_90:
\ 000008 7003 JNZ ??ZDO_ProcessPowerDescReq_0
\ 00000A A3 INC DPTR
\ 00000B E0 MOVX A,@DPTR
\ 00000C 6D XRL A,R5
\ ??ZDO_ProcessPowerDescReq_0:
\ 00000D 7017 JNZ ??ZDO_ProcessPowerDescReq_1
661 {
662 desc = &ZDO_Config_Power_Descriptor;
663 }
664
665 if ( desc != NULL )
666 {
667 ZDP_PowerDescMsg( inMsg, aoi, desc );
\ 00000F ; Setup parameters for call to function ZDP_PowerDescMsg
\ 00000F 75.... MOV ?V0,#ZDO_Config_Power_Descriptor & 0xff
\ 000012 75.... MOV ?V1,#(ZDO_Config_Power_Descriptor >> 8) & 0xff
\ 000015 78.. MOV R0,#?V0
\ 000017 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00001A EE MOV A,R6
\ 00001B FA MOV R2,A
\ 00001C 12.... LCALL `??ZDP_PowerDescMsg::?relay`; Banked call to: ZDP_PowerDescMsg
\ 00001F 7402 MOV A,#0x2
\ 000021 12.... LCALL ?DEALLOC_XSTACK8
\ 000024 801A SJMP ??ZDO_ProcessPowerDescReq_2
668 }
669 else
670 {
671 ZDP_GenericRsp( inMsg->TransSeq, &(inMsg->srcAddr),
672 ZDP_INVALID_REQTYPE, aoi, Power_Desc_rsp, inMsg->SecurityUse );
\ ??ZDO_ProcessPowerDescReq_1:
\ 000026 ; Setup parameters for call to function ZDP_GenericRsp
\ 000026 75..03 MOV ?V0,#0x3
\ 000029 75..80 MOV ?V1,#-0x80
\ 00002C 78.. MOV R0,#?V0
\ 00002E 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000031 8A.. MOV ?V0,R2
\ 000033 89.. MOV ?V1,R1
\ 000035 78.. MOV R0,#?V0
\ 000037 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00003A 12.... LCALL ?Subroutine61 & 0xFFFF
673 }
\ ??CrossCallReturnLabel_92:
\ 00003D 12.... LCALL ?DEALLOC_XSTACK8
674 }
\ ??ZDO_ProcessPowerDescReq_2:
\ 000040 80.. SJMP ??Subroutine225_0
675
676 /*********************************************************************
677 * @fn ZDO_ProcessSimpleDescReq
678 *
679 * @brief This function processes and responds to the
680 * Simple_Desc_req message.
681 *
682 * @param inMsg - incoming message (request)
683 *
684 * @return none
685 */
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine4:
\ 000000 7402 MOV A,#0x2
\ 000002 REQUIRE ??Subroutine224_0
\ 000002 ; // Fall through to label ??Subroutine224_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine224_0:
\ 000000 12.... LCALL ?DEALLOC_XSTACK8
\ 000003 REQUIRE ??Subroutine225_0
\ 000003 ; // Fall through to label ??Subroutine225_0
\ In segment BANKED_CODE, align 1, keep-with-next
686 void ZDO_ProcessSimpleDescReq( zdoIncomingMsg_t *inMsg )
\ ZDO_ProcessSimpleDescReq:
687 {
\ 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
688 SimpleDescriptionFormat_t *sDesc = NULL;
\ 00000E 85..82 MOV DPL,?XSP + 0
\ 000011 85..83 MOV DPH,?XSP + 1
\ 000014 E4 CLR A
\ 000015 F0 MOVX @DPTR,A
\ 000016 A3 INC DPTR
\ 000017 F0 MOVX @DPTR,A
689 uint16 aoi = BUILD_UINT16( inMsg->asdu[0], inMsg->asdu[1] );
\ 000018 12.... LCALL ?Subroutine136 & 0xFFFF
\ ??CrossCallReturnLabel_362:
\ 00001B 12.... LCALL ?Subroutine85 & 0xFFFF
\ ??CrossCallReturnLabel_138:
\ 00001E FB MOV R3,A
\ 00001F EC MOV A,R4
\ 000020 FA MOV R2,A
690 byte endPoint = inMsg->asdu[2];
\ 000021 8882 MOV DPL,R0
\ 000023 8983 MOV DPH,R1
\ 000025 A3 INC DPTR
\ 000026 A3 INC DPTR
\ 000027 E0 MOVX A,@DPTR
\ 000028 F9 MOV R1,A
691 byte free = false;
\ 000029 75..00 MOV ?V1,#0x0
692 byte stat = ZDP_SUCCESS;
\ 00002C 75..00 MOV ?V0,#0x0
693
694 if ( (endPoint == ZDO_EP) || (endPoint > MAX_ENDPOINTS) )
\ 00002F 6005 JZ ??ZDO_ProcessSimpleDescReq_0
\ 000031 C3 CLR C
\ 000032 94F1 SUBB A,#-0xf
\ 000034 4005 JC ??ZDO_ProcessSimpleDescReq_1
695 {
696 stat = ZDP_INVALID_EP;
\ ??ZDO_ProcessSimpleDescReq_0:
\ 000036 75..82 MOV ?V0,#-0x7e
\ 000039 802A SJMP ??ZDO_ProcessSimpleDescReq_2
697 }
698 else if ( aoi == ZDAppNwkAddr.addr.shortAddr )
\ ??ZDO_ProcessSimpleDescReq_1:
\ 00003B 90.... MOV DPTR,#ZDAppNwkAddr
\ 00003E E0 MOVX A,@DPTR
\ 00003F 6A XRL A,R2
\ 000040 7003 JNZ ??ZDO_ProcessSimpleDescReq_3
\ 000042 A3 INC DPTR
\ 000043 E0 MOVX A,@DPTR
\ 000044 6B XRL A,R3
\ ??ZDO_ProcessSimpleDescReq_3:
\ 000045 701B JNZ ??ZDO_ProcessSimpleDescReq_4
699 {
700 free = afFindSimpleDesc( &sDesc, endPoint );
\ 000047 ; Setup parameters for call to function afFindSimpleDesc
\ 000047 AA.. MOV R2,?XSP + 0
\ 000049 AB.. MOV R3,?XSP + 1
\ 00004B 12.... LCALL `??afFindSimpleDesc::?relay`; Banked call to: afFindSimpleDesc
\ 00004E E9 MOV A,R1
\ 00004F FA MOV R2,A
701 if ( sDesc == NULL )
\ 000050 85..82 MOV DPL,?XSP + 0
\ 000053 85..83 MOV DPH,?XSP + 1
\ 000056 12.... LCALL ??Subroutine260_0 & 0xFFFF
\ ??CrossCallReturnLabel_500:
\ 000059 7003 JNZ ??ZDO_ProcessSimpleDescReq_5
702 {
703 stat = ZDP_NOT_ACTIVE;
\ 00005B 75..83 MOV ?V0,#-0x7d
\ ??ZDO_ProcessSimpleDescReq_5:
\ 00005E 8A.. MOV ?V1,R2
\ 000060 8003 SJMP ??ZDO_ProcessSimpleDescReq_2
704 }
705 }
706 else
707 {
708 if ( ZSTACK_ROUTER_BUILD )
709 {
710 stat = ZDP_DEVICE_NOT_FOUND;
\ ??ZDO_ProcessSimpleDescReq_4:
\ 000062 75..81 MOV ?V0,#-0x7f
711 }
712 else if ( ZSTACK_END_DEVICE_BUILD )
713 {
714 stat = ZDP_INVALID_REQTYPE;
715 }
716 }
717
718 ZDP_SimpleDescMsg( inMsg, stat, sDesc );
\ ??ZDO_ProcessSimpleDescReq_2:
\ 000065 ; Setup parameters for call to function ZDP_SimpleDescMsg
\ 000065 85..82 MOV DPL,?XSP + 0
\ 000068 85..83 MOV DPH,?XSP + 1
\ 00006B 12.... LCALL ?Subroutine189 & 0xFFFF
\ ??CrossCallReturnLabel_307:
\ 00006E A9.. MOV R1,?V0
\ 000070 EE MOV A,R6
\ 000071 FA MOV R2,A
\ 000072 EF MOV A,R7
\ 000073 FB MOV R3,A
\ 000074 12.... LCALL `??ZDP_SimpleDescMsg::?relay`; Banked call to: ZDP_SimpleDescMsg
719
720 if ( free && sDesc )
\ 000077 E5.. MOV A,?V1
\ 000079 6014 JZ ??CrossCallReturnLabel_413
\ 00007B 85..82 MOV DPL,?XSP + 0
\ 00007E 85..83 MOV DPH,?XSP + 1
\ 000081 12.... LCALL ??Subroutine260_0 & 0xFFFF
\ ??CrossCallReturnLabel_501:
\ 000084 6009 JZ ??CrossCallReturnLabel_413
721 {
722 osal_mem_free( sDesc );
\ 000086 ; Setup parameters for call to function osal_mem_free
\ 000086 85..82 MOV DPL,?XSP + 0
\ 000089 85..83 MOV DPH,?XSP + 1
\ 00008C 12.... LCALL ??Subroutine241_0 & 0xFFFF
723 }
724 }
\ ??CrossCallReturnLabel_413:
\ 00008F 02.... LJMP ?Subroutine4 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine136:
\ 000000 EA MOV A,R2
\ 000001 REQUIRE ??Subroutine226_0
\ 000001 ; // Fall through to label ??Subroutine226_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine226_0:
\ 000000 12.... LCALL ??Subroutine247_0 & 0xFFFF
\ ??CrossCallReturnLabel_455:
\ 000003 3F ADDC A,R7
\ 000004 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine241_0:
\ 000000 12.... LCALL ?Subroutine179 & 0xFFFF
\ ??CrossCallReturnLabel_554:
\ 000003 12.... LCALL `??osal_mem_free::?relay`; Banked call to: osal_mem_free
\ 000006 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine85:
\ 000000 12.... LCALL ?Subroutine186 & 0xFFFF
\ ??CrossCallReturnLabel_648:
\ 000003 8882 MOV DPL,R0
\ 000005 F583 MOV DPH,A
\ 000007 E0 MOVX A,@DPTR
\ 000008 FC MOV R4,A
\ 000009 A3 INC DPTR
\ 00000A E0 MOVX A,@DPTR
\ 00000B 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine179:
\ 000000 12.... LCALL ??Subroutine281_0 & 0xFFFF
\ ??CrossCallReturnLabel_697:
\ 000003 FB MOV R3,A
\ 000004 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine260_0:
\ 000000 12.... LCALL ??Subroutine283_0 & 0xFFFF
\ ??CrossCallReturnLabel_650:
\ 000003 E8 MOV A,R0
\ 000004 49 ORL A,R1
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine186:
\ 000000 F583 MOV DPH,A
\ 000002 REQUIRE ??Subroutine283_0
\ 000002 ; // Fall through to label ??Subroutine283_0
725
726 /*********************************************************************
727 * @fn ZDO_ProcessActiveEPReq
728 *
729 * @brief This function processes and responds to the
730 * Active_EP_req message.
731 *
732 * @param inMsg - incoming message (request)
733 *
734 * @return none
735 */
\ In segment BANKED_CODE, align 1, keep-with-next
736 void ZDO_ProcessActiveEPReq( zdoIncomingMsg_t *inMsg )
\ ZDO_ProcessActiveEPReq:
737 {
\ 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 ?V4,R2
\ 000007 8B.. MOV ?V5,R3
738 byte cnt = 0;
\ 000009 75..00 MOV ?V0,#0x0
739 uint16 aoi;
740 byte stat = ZDP_SUCCESS;
\ 00000C 75..00 MOV ?V1,#0x0
741
742 aoi = BUILD_UINT16( inMsg->asdu[0], inMsg->asdu[1] );
\ 00000F 12.... LCALL ??Subroutine246_0 & 0xFFFF
\ ??CrossCallReturnLabel_450:
\ 000012 35.. ADDC A,?V5
\ 000014 12.... LCALL ?Subroutine72 & 0xFFFF
\ ??CrossCallReturnLabel_114:
\ 000017 FE MOV R6,A
\ 000018 E4 CLR A
\ 000019 39 ADDC A,R1
\ 00001A FF MOV R7,A
743
744 if ( aoi == NLME_GetShortAddr() )
\ 00001B ; Setup parameters for call to function NLME_GetShortAddr
\ 00001B 12.... LCALL `??NLME_GetShortAddr::?relay`; Banked call to: NLME_GetShortAddr
\ 00001E EA MOV A,R2
\ 00001F 6E XRL A,R6
\ 000020 7002 JNZ ??ZDO_ProcessActiveEPReq_0
\ 000022 EB MOV A,R3
\ 000023 6F XRL A,R7
\ ??ZDO_ProcessActiveEPReq_0:
\ 000024 7012 JNZ ??ZDO_ProcessActiveEPReq_1
745 {
746 cnt = afNumEndPoints() - 1; // -1 for ZDO endpoint descriptor
\ 000026 ; Setup parameters for call to function afNumEndPoints
\ 000026 12.... LCALL `??afNumEndPoints::?relay`; Banked call to: afNumEndPoints
\ 000029 E9 MOV A,R1
\ 00002A 14 DEC A
\ 00002B F5.. MOV ?V0,A
747 afEndPoints( (uint8 *)ZDOBuildBuf, true );
\ 00002D ; Setup parameters for call to function afEndPoints
\ 00002D 7901 MOV R1,#0x1
\ 00002F 7A.. MOV R2,#ZDOBuildBuf & 0xff
\ 000031 7B.. MOV R3,#(ZDOBuildBuf >> 8) & 0xff
\ 000033 12.... LCALL `??afEndPoints::?relay`; Banked call to: afEndPoints
\ 000036 8003 SJMP ??ZDO_ProcessActiveEPReq_2
748 }
749 else
750 {
751 stat = ZDP_INVALID_REQTYPE;
\ ??ZDO_ProcessActiveEPReq_1:
\ 000038 75..80 MOV ?V1,#-0x80
752 }
753
754 ZDP_ActiveEPRsp( inMsg->TransSeq, &(inMsg->srcAddr), stat,
755 aoi, cnt, (uint8 *)ZDOBuildBuf, inMsg->SecurityUse );
\ ??ZDO_ProcessActiveEPReq_2:
\ 00003B ; Setup parameters for call to function ZDP_EPRsp
\ 00003B 12.... LCALL ?Subroutine148 & 0xFFFF
\ ??CrossCallReturnLabel_625:
\ 00003E 35.. ADDC A,?V5
\ 000040 12.... LCALL ??Subroutine231_0 & 0xFFFF
\ ??CrossCallReturnLabel_373:
\ 000043 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 000046 75.... MOV ?V2,#ZDOBuildBuf & 0xff
\ 000049 75.... MOV ?V3,#(ZDOBuildBuf >> 8) & 0xff
\ 00004C 78.. MOV R0,#?V2
\ 00004E 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000051 78.. MOV R0,#?V0
\ 000053 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 000056 8E.. MOV ?V2,R6
\ 000058 8F.. MOV ?V3,R7
\ 00005A 78.. MOV R0,#?V2
\ 00005C 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00005F E5.. MOV A,?V1
\ 000061 F5.. MOV ?V0,A
\ 000063 78.. MOV R0,#?V0
\ 000065 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 000068 12.... LCALL ?Subroutine145 & 0xFFFF
\ ??CrossCallReturnLabel_234:
\ 00006B 12.... LCALL ?Subroutine202 & 0xFFFF
\ ??CrossCallReturnLabel_326:
\ 00006E F9 MOV R1,A
\ 00006F 7A05 MOV R2,#0x5
\ 000071 7B80 MOV R3,#-0x80
\ 000073 12.... LCALL `??ZDP_EPRsp::?relay`; Banked call to: ZDP_EPRsp
\ 000076 7407 MOV A,#0x7
\ 000078 02.... LJMP ?Subroutine5 & 0xFFFF
756 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine231_0:
\ 000000 F583 MOV DPH,A
\ 000002 E0 MOVX A,@DPTR
\ 000003 F5.. MOV ?V2,A
\ 000005 78.. MOV R0,#?V2
\ 000007 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine72:
\ 000000 12.... LCALL ?Subroutine176 & 0xFFFF
\ ??CrossCallReturnLabel_293:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine145:
\ 000000 E5.. MOV A,?V4
\ 000002 2402 ADD A,#0x2
\ 000004 FC MOV R4,A
\ 000005 E4 CLR A
\ 000006 35.. ADDC A,?V5
\ 000008 FD MOV R5,A
\ 000009 E5.. MOV A,?V4
\ 00000B 240F ADD A,#0xf
\ 00000D 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine246_0:
\ 000000 12.... LCALL ?Subroutine204 & 0xFFFF
\ ??CrossCallReturnLabel_457:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine202:
\ 000000 F582 MOV DPL,A
\ 000002 E4 CLR A
\ 000003 35.. ADDC A,?V5
\ 000005 F583 MOV DPH,A
\ 000007 E0 MOVX A,@DPTR
\ 000008 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine148:
\ 000000 E5.. MOV A,?V4
\ 000002 REQUIRE ??Subroutine276_0
\ 000002 ; // Fall through to label ??Subroutine276_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine276_0:
\ 000000 240E ADD A,#0xe
\ 000002 F582 MOV DPL,A
\ 000004 E4 CLR A
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine5:
\ 000000 12.... LCALL ?DEALLOC_XSTACK8
\ 000003 REQUIRE ??Subroutine297_0
\ 000003 ; // Fall through to label ??Subroutine297_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine297_0:
\ 000000 7F06 MOV R7,#0x6
\ 000002 02.... LJMP ?BANKED_LEAVE_XDATA
757
758 /*********************************************************************
759 * @fn ZDO_ConvertOTAClusters
760 *
761 * @brief This function will convert the over-the-air cluster list
762 * format to an internal format.
763 *
764 * @param inMsg - incoming message (request)
765 *
766 * @return pointer to incremented inBuf
767 */
\ In segment BANKED_CODE, align 1, keep-with-next
768 uint8 *ZDO_ConvertOTAClusters( uint8 cnt, uint8 *inBuf, uint16 *outList )
\ ZDO_ConvertOTAClusters:
769 {
\ 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 FF MOV R7,A
770 uint8 x;
771
772 for ( x = 0; x < cnt; x++ )
\ 000007 7E00 MOV R6,#0x0
\ 000009 802F SJMP ??ZDO_ConvertOTAClusters_0
773 {
774 // convert ota format to internal
775 outList[x] = BUILD_UINT16( inBuf[0], inBuf[1] );
\ ??ZDO_ConvertOTAClusters_1:
\ 00000B 8A82 MOV DPL,R2
\ 00000D 8B83 MOV DPH,R3
\ 00000F E0 MOVX A,@DPTR
\ 000010 F5.. MOV ?V0,A
\ 000012 A3 INC DPTR
\ 000013 E0 MOVX A,@DPTR
\ 000014 F8 MOV R0,A
\ 000015 E4 CLR A
\ 000016 C8 XCH A,R0
\ 000017 F9 MOV R1,A
\ 000018 E5.. MOV A,?V0
\ 00001A 28 ADD A,R0
\ 00001B E4 CLR A
\ 00001C 39 ADDC A,R1
\ 00001D F5.. MOV ?V1,A
\ 00001F EE MOV A,R6
\ 000020 12.... LCALL ?Subroutine199 & 0xFFFF
\ ??CrossCallReturnLabel_320:
\ 000023 EC MOV A,R4
\ 000024 28 ADD A,R0
\ 000025 F582 MOV DPL,A
\ 000027 ED MOV A,R5
\ 000028 39 ADDC A,R1
\ 000029 F583 MOV DPH,A
\ 00002B E5.. MOV A,?V0
\ 00002D F0 MOVX @DPTR,A
\ 00002E A3 INC DPTR
\ 00002F E5.. MOV A,?V1
\ 000031 F0 MOVX @DPTR,A
776 inBuf += sizeof( uint16 );
\ 000032 EA MOV A,R2
\ 000033 2402 ADD A,#0x2
\ 000035 FA MOV R2,A
\ 000036 5001 JNC ??ZDO_ConvertOTAClusters_2
\ 000038 0B INC R3
777 }
\ ??ZDO_ConvertOTAClusters_2:
\ 000039 0E INC R6
\ ??ZDO_ConvertOTAClusters_0:
\ 00003A EE MOV A,R6
\ 00003B C3 CLR C
\ 00003C 9F SUBB A,R7
\ 00003D 40CC JC ??ZDO_ConvertOTAClusters_1
778 return ( inBuf );
\ 00003F 02.... LJMP ??Subroutine225_0 & 0xFFFF
779 }
780
781 /*********************************************************************
782 * @fn ZDO_ProcessMatchDescReq
783 *
784 * @brief This function processes and responds to the
785 * Match_Desc_req message.
786 *
787 * @param inMsg - incoming message (request)
788 *
789 * @return none
790 */
\ In segment BANKED_CODE, align 1, keep-with-next
791 void ZDO_ProcessMatchDescReq( zdoIncomingMsg_t *inMsg )
\ ZDO_ProcessMatchDescReq:
792 {
\ 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: 13
\ 000005 74F3 MOV A,#-0xd
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A 7402 MOV A,#0x2
\ 00000C 12.... LCALL ?XSTACK_DISP0_8
\ 00000F 12.... LCALL ??Subroutine242_0 & 0xFFFF
793 uint8 epCnt = 0;
\ ??CrossCallReturnLabel_425:
\ 000012 7408 MOV A,#0x8
\ 000014 12.... LCALL ?XSTACK_DISP0_8
\ 000017 E4 CLR A
\ 000018 F0 MOVX @DPTR,A
794 uint8 numInClusters;
795 uint16 *inClusters = NULL;
\ 000019 740B MOV A,#0xb
\ 00001B 12.... LCALL ?XSTACK_DISP0_8
\ 00001E E4 CLR A
\ 00001F F0 MOVX @DPTR,A
\ 000020 A3 INC DPTR
\ 000021 F0 MOVX @DPTR,A
796 uint8 numOutClusters;
797 uint16 *outClusters = NULL;
\ 000022 7409 MOV A,#0x9
\ 000024 12.... LCALL ?XSTACK_DISP0_8
\ 000027 E4 CLR A
\ 000028 F0 MOVX @DPTR,A
\ 000029 A3 INC DPTR
\ 00002A F0 MOVX @DPTR,A
798 epList_t *epDesc;
799 SimpleDescriptionFormat_t *sDesc = NULL;
800 uint8 allocated;
801 uint8 *msg;
802 uint16 aoi;
803 uint16 profileID;
804
805 // Parse the incoming message
806 msg = inMsg->asdu;
\ 00002B 7402 MOV A,#0x2
\ 00002D 12.... LCALL ?XSTACK_DISP0_8
\ 000030 12.... LCALL ?Subroutine87 & 0xFFFF
\ ??CrossCallReturnLabel_139:
\ 000033 12.... LCALL ??Subroutine223_0 & 0xFFFF
807 aoi = BUILD_UINT16( msg[0], msg[1] );
\ ??CrossCallReturnLabel_357:
\ 000036 85..82 MOV DPL,?V0
\ 000039 F583 MOV DPH,A
\ 00003B 12.... LCALL ?Subroutine116 & 0xFFFF
\ ??CrossCallReturnLabel_368:
\ 00003E 28 ADD A,R0
\ 00003F FE MOV R6,A
\ 000040 E4 CLR A
\ 000041 39 ADDC A,R1
\ 000042 FF MOV R7,A
808 profileID = BUILD_UINT16( msg[2], msg[3] );
\ 000043 85..82 MOV DPL,?V0
\ 000046 85..83 MOV DPH,?V1
\ 000049 A3 INC DPTR
\ 00004A A3 INC DPTR
\ 00004B E0 MOVX A,@DPTR
\ 00004C FA MOV R2,A
\ 00004D 85..82 MOV DPL,?V0
\ 000050 85..83 MOV DPH,?V1
\ 000053 A3 INC DPTR
\ 000054 A3 INC DPTR
\ 000055 A3 INC DPTR
\ 000056 E0 MOVX A,@DPTR
\ 000057 F9 MOV R1,A
\ 000058 EA MOV A,R2
\ 000059 F5.. MOV ?V4,A
\ 00005B E4 CLR A
\ 00005C 39 ADDC A,R1
\ 00005D F5.. MOV ?V5,A
809 msg += 4;
810
811 if ( ADDR_BCAST_NOT_ME == NLME_IsAddressBroadcast(aoi) )
\ 00005F ; Setup parameters for call to function NLME_IsAddressBroadcast
\ 00005F EE MOV A,R6
\ 000060 FA MOV R2,A
\ 000061 EF MOV A,R7
\ 000062 FB MOV R3,A
\ 000063 12.... LCALL `??NLME_IsAddressBroadcast::?relay`; Banked call to: NLME_IsAddressBroadcast
\ 000066 E9 MOV A,R1
\ 000067 6401 XRL A,#0x1
\ 000069 6016 JZ ??ZDO_ProcessMatchDescReq_0
812 {
813 ZDP_MatchDescRsp( inMsg->TransSeq, &(inMsg->srcAddr), ZDP_INVALID_REQTYPE,
814 ZDAppNwkAddr.addr.shortAddr, 0, NULL, inMsg->SecurityUse );
815 return;
816 }
817 else if ( (ADDR_NOT_BCAST == NLME_IsAddressBroadcast(aoi)) && (aoi != ZDAppNwkAddr.addr.shortAddr) )
\ 00006B ; Setup parameters for call to function NLME_IsAddressBroadcast
\ 00006B EE MOV A,R6
\ 00006C FA MOV R2,A
\ 00006D EF MOV A,R7
\ 00006E FB MOV R3,A
\ 00006F 12.... LCALL `??NLME_IsAddressBroadcast::?relay`; Banked call to: NLME_IsAddressBroadcast
\ 000072 E9 MOV A,R1
\ 000073 7048 JNZ ??ZDO_ProcessMatchDescReq_1
\ 000075 90.... MOV DPTR,#ZDAppNwkAddr
\ 000078 E0 MOVX A,@DPTR
\ 000079 6E XRL A,R6
\ 00007A 7003 JNZ ??ZDO_ProcessMatchDescReq_2
\ 00007C A3 INC DPTR
\ 00007D E0 MOVX A,@DPTR
\ 00007E 6F XRL A,R7
\ ??ZDO_ProcessMatchDescReq_2:
\ 00007F 603C JZ ??ZDO_ProcessMatchDescReq_1
818 {
819 ZDP_MatchDescRsp( inMsg->TransSeq, &(inMsg->srcAddr), ZDP_INVALID_REQTYPE,
820 ZDAppNwkAddr.addr.shortAddr, 0, NULL, inMsg->SecurityUse );
\ ??ZDO_ProcessMatchDescReq_0:
\ 000081 ; Setup parameters for call to function ZDP_EPRsp
\ 000081 7402 MOV A,#0x2
\ 000083 12.... LCALL ?XSTACK_DISP0_8
\ 000086 12.... LCALL ?Subroutine57 & 0xFFFF
\ ??CrossCallReturnLabel_80:
\ 000089 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 00008C E4 CLR A
\ 00008D F5.. MOV ?V0,A
\ 00008F F5.. MOV ?V1,A
\ 000091 78.. MOV R0,#?V0
\ 000093 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000096 78.. MOV R0,#?V0
\ 000098 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 00009B 90.... MOV DPTR,#ZDAppNwkAddr
\ 00009E 12.... LCALL ?PUSH_XSTACK8_X_TWO
\ 0000A1 75..80 MOV ?V0,#-0x80
\ 0000A4 78.. MOV R0,#?V0
\ 0000A6 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 0000A9 7409 MOV A,#0x9
\ 0000AB 12.... LCALL ?XSTACK_DISP0_8
\ 0000AE 12.... LCALL ?Subroutine71 & 0xFFFF
\ ??CrossCallReturnLabel_111:
\ 0000B1 12.... LCALL ?XSTACK_DISP0_8
\ 0000B4 12.... LCALL ?Subroutine55 & 0xFFFF
\ ??CrossCallReturnLabel_77:
\ 0000B7 12.... LCALL ?DEALLOC_XSTACK8
821 return;
\ 0000BA 02.... LJMP ??CrossCallReturnLabel_416 & 0xFFFF
822 }
823
824 if ((numInClusters = *msg++) &&
825 (inClusters = (uint16*)osal_mem_alloc( numInClusters * sizeof( uint16 ) )))
\ ??ZDO_ProcessMatchDescReq_1:
\ 0000BD 85..82 MOV DPL,?V0
\ 0000C0 85..83 MOV DPH,?V1
\ 0000C3 A3 INC DPTR
\ 0000C4 A3 INC DPTR
\ 0000C5 12.... LCALL ?Subroutine107 & 0xFFFF
\ ??CrossCallReturnLabel_371:
\ 0000C8 F0 MOVX @DPTR,A
\ 0000C9 E5.. MOV A,?V0
\ 0000CB 2405 ADD A,#0x5
\ 0000CD F5.. MOV ?V0,A
\ 0000CF 5002 JNC ??ZDO_ProcessMatchDescReq_3
\ 0000D1 05.. INC ?V1
\ ??ZDO_ProcessMatchDescReq_3:
\ 0000D3 E0 MOVX A,@DPTR
\ 0000D4 602C JZ ??ZDO_ProcessMatchDescReq_4
\ 0000D6 ; Setup parameters for call to function osal_mem_alloc
\ 0000D6 12.... LCALL ?Subroutine132 & 0xFFFF
\ ??CrossCallReturnLabel_217:
\ 0000D9 740B MOV A,#0xb
\ 0000DB 12.... LCALL ?XSTACK_DISP0_8
\ 0000DE 12.... LCALL ??Subroutine242_0 & 0xFFFF
\ ??CrossCallReturnLabel_426:
\ 0000E1 740B MOV A,#0xb
\ 0000E3 12.... LCALL ?XSTACK_DISP0_8
\ 0000E6 12.... LCALL ??Subroutine260_0 & 0xFFFF
\ ??CrossCallReturnLabel_502:
\ 0000E9 6017 JZ ??ZDO_ProcessMatchDescReq_4
826 {
827 msg = ZDO_ConvertOTAClusters( numInClusters, msg, inClusters );
\ 0000EB ; Setup parameters for call to function ZDO_ConvertOTAClusters
\ 0000EB 740B MOV A,#0xb
\ 0000ED 12.... LCALL ?XSTACK_DISP0_8
\ 0000F0 12.... LCALL ?Subroutine113 & 0xFFFF
828 }
\ ??CrossCallReturnLabel_187:
\ 0000F3 85..82 MOV DPL,?XSP + 0
\ 0000F6 85..83 MOV DPH,?XSP + 1
\ 0000F9 12.... LCALL ??Subroutine270_0 & 0xFFFF
\ ??CrossCallReturnLabel_571:
\ 0000FC 8A.. MOV ?V0,R2
\ 0000FE 8B.. MOV ?V1,R3
\ 000100 8008 SJMP ??ZDO_ProcessMatchDescReq_5
829 else
830 {
831 numInClusters = 0;
\ ??ZDO_ProcessMatchDescReq_4:
\ 000102 85..82 MOV DPL,?XSP + 0
\ 000105 85..83 MOV DPH,?XSP + 1
\ 000108 E4 CLR A
\ 000109 F0 MOVX @DPTR,A
832 }
833
834 if ((numOutClusters = *msg++) &&
835 (outClusters = (uint16 *)osal_mem_alloc( numOutClusters * sizeof( uint16 ) )))
\ ??ZDO_ProcessMatchDescReq_5:
\ 00010A 85..82 MOV DPL,?V0
\ 00010D 85..83 MOV DPH,?V1
\ 000110 E0 MOVX A,@DPTR
\ 000111 C0E0 PUSH A
\ 000113 7401 MOV A,#0x1
\ 000115 12.... LCALL ?XSTACK_DISP0_8
\ 000118 D0E0 POP A
\ 00011A 12.... LCALL ?Subroutine49 & 0xFFFF
\ ??CrossCallReturnLabel_72:
\ 00011D 8582.. MOV ?V0,DPL
\ 000120 8583.. MOV ?V1,DPH
\ 000123 7401 MOV A,#0x1
\ 000125 12.... LCALL ?XSTACK_DISP0_8
\ 000128 E0 MOVX A,@DPTR
\ 000129 6027 JZ ??ZDO_ProcessMatchDescReq_6
\ 00012B ; Setup parameters for call to function osal_mem_alloc
\ 00012B 12.... LCALL ?Subroutine132 & 0xFFFF
\ ??CrossCallReturnLabel_218:
\ 00012E 7409 MOV A,#0x9
\ 000130 12.... LCALL ?XSTACK_DISP0_8
\ 000133 12.... LCALL ??Subroutine242_0 & 0xFFFF
\ ??CrossCallReturnLabel_427:
\ 000136 7409 MOV A,#0x9
\ 000138 12.... LCALL ?XSTACK_DISP0_8
\ 00013B 12.... LCALL ??Subroutine260_0 & 0xFFFF
\ ??CrossCallReturnLabel_503:
\ 00013E 6012 JZ ??ZDO_ProcessMatchDescReq_6
836 {
837 msg = ZDO_ConvertOTAClusters( numOutClusters, msg, outClusters );
\ 000140 ; Setup parameters for call to function ZDO_ConvertOTAClusters
\ 000140 7409 MOV A,#0x9
\ 000142 12.... LCALL ?XSTACK_DISP0_8
\ 000145 12.... LCALL ?Subroutine113 & 0xFFFF
838 }
\ ??CrossCallReturnLabel_188:
\ 000148 7401 MOV A,#0x1
\ 00014A 12.... LCALL ?XSTACK_DISP0_8
\ 00014D 12.... LCALL ??Subroutine270_0 & 0xFFFF
\ ??CrossCallReturnLabel_572:
\ 000150 8007 SJMP ??ZDO_ProcessMatchDescReq_7
839 else
840 {
841 numOutClusters = 0;
\ ??ZDO_ProcessMatchDescReq_6:
\ 000152 7401 MOV A,#0x1
\ 000154 12.... LCALL ?XSTACK_DISP0_8
\ 000157 E4 CLR A
\ 000158 F0 MOVX @DPTR,A
842 }
843
844 // First count the number of endpoints that match.
845 epDesc = epList;
\ ??ZDO_ProcessMatchDescReq_7:
\ 000159 90.... MOV DPTR,#epList
\ 00015C 805F SJMP ??CrossCallReturnLabel_141
846 while ( epDesc )
847 {
848 // Don't search endpoint 0 and check if response is allowed
849 if ( epDesc->epDesc->endPoint != ZDO_EP && (epDesc->flags&eEP_AllowMatch) )
850 {
851 if ( epDesc->pfnDescCB )
852 {
853 sDesc = (SimpleDescriptionFormat_t *)epDesc->pfnDescCB( AF_DESCRIPTOR_SIMPLE, epDesc->epDesc->endPoint );
854 allocated = TRUE;
855 }
856 else
857 {
858 sDesc = epDesc->epDesc->simpleDesc;
859 allocated = FALSE;
860 }
861
862 if ( sDesc && sDesc->AppProfId == profileID )
863 {
864 uint8 *uint8Buf = (uint8 *)ZDOBuildBuf;
865
866 // Are there matching input clusters?
867 if ((ZDO_AnyClusterMatches( numInClusters, inClusters,
868 sDesc->AppNumInClusters, sDesc->pAppInClusterList )) ||
869 // Are there matching output clusters?
870 (ZDO_AnyClusterMatches( numOutClusters, outClusters,
871 sDesc->AppNumOutClusters, sDesc->pAppOutClusterList )))
872 {
873 // Notify the endpoint of the match.
874 uint8 bufLen = sizeof( ZDO_MatchDescRspSent_t ) + (numOutClusters + numInClusters) * sizeof(uint16);
875 ZDO_MatchDescRspSent_t *pRspSent = (ZDO_MatchDescRspSent_t *) osal_msg_allocate( bufLen );
876
877 if (pRspSent)
878 {
879 pRspSent->hdr.event = ZDO_MATCH_DESC_RSP_SENT;
880 pRspSent->nwkAddr = inMsg->srcAddr.addr.shortAddr;
881 pRspSent->numInClusters = numInClusters;
882 pRspSent->numOutClusters = numOutClusters;
883
884 if (numInClusters)
885 {
886 pRspSent->pInClusters = (uint16*) (pRspSent + 1);
887 osal_memcpy(pRspSent->pInClusters, inClusters, numInClusters * sizeof(uint16));
888 }
889 else
890 {
891 pRspSent->pInClusters = NULL;
892 }
893
894 if (numOutClusters)
895 {
896 pRspSent->pOutClusters = (uint16*)(pRspSent + 1) + numInClusters;
897 osal_memcpy(pRspSent->pOutClusters, outClusters, numOutClusters * sizeof(uint16));
898 }
899 else
900 {
901 pRspSent->pOutClusters = NULL;
\ ??ZDO_ProcessMatchDescReq_8:
\ 00015E 85..82 MOV DPL,?V6
\ 000161 85..83 MOV DPH,?V7
\ 000164 A3 INC DPTR
\ 000165 A3 INC DPTR
\ 000166 A3 INC DPTR
\ 000167 A3 INC DPTR
\ 000168 A3 INC DPTR
\ 000169 A3 INC DPTR
\ 00016A A3 INC DPTR
\ 00016B A3 INC DPTR
\ 00016C E4 CLR A
\ 00016D F0 MOVX @DPTR,A
\ 00016E A3 INC DPTR
\ 00016F F0 MOVX @DPTR,A
902 }
903
904 osal_msg_send( *epDesc->epDesc->task_id, (uint8 *)pRspSent );
\ ??ZDO_ProcessMatchDescReq_9:
\ 000170 ; Setup parameters for call to function osal_msg_send
\ 000170 AA.. MOV R2,?V6
\ 000172 AB.. MOV R3,?V7
\ 000174 7404 MOV A,#0x4
\ 000176 12.... LCALL ?XSTACK_DISP0_8
\ 000179 12.... LCALL ?Subroutine73 & 0xFFFF
\ ??CrossCallReturnLabel_116:
\ 00017C 12.... LCALL ??Subroutine237_0 & 0xFFFF
\ ??CrossCallReturnLabel_397:
\ 00017F F9 MOV R1,A
\ 000180 12.... LCALL `??osal_msg_send::?relay`; Banked call to: osal_msg_send
905 }
906
907 uint8Buf[epCnt++] = sDesc->EndPoint;
\ ??ZDO_ProcessMatchDescReq_10:
\ 000183 7406 MOV A,#0x6
\ 000185 12.... LCALL ?XSTACK_DISP0_8
\ 000188 12.... LCALL ??Subroutine238_0 & 0xFFFF
\ ??CrossCallReturnLabel_393:
\ 00018B C0E0 PUSH A
\ 00018D 7408 MOV A,#0x8
\ 00018F 12.... LCALL ?XSTACK_DISP0_8
\ 000192 E0 MOVX A,@DPTR
\ 000193 F8 MOV R0,A
\ 000194 74.. MOV A,#ZDOBuildBuf & 0xff
\ 000196 28 ADD A,R0
\ 000197 F582 MOV DPL,A
\ 000199 E4 CLR A
\ 00019A 34.. ADDC A,#(ZDOBuildBuf >> 8) & 0xff
\ 00019C F583 MOV DPH,A
\ 00019E D0E0 POP A
\ 0001A0 F0 MOVX @DPTR,A
\ 0001A1 7408 MOV A,#0x8
\ 0001A3 12.... LCALL ?XSTACK_DISP0_8
\ 0001A6 E0 MOVX A,@DPTR
\ 0001A7 04 INC A
\ 0001A8 F0 MOVX @DPTR,A
908 }
909 }
910
911 if ( allocated )
\ ??ZDO_ProcessMatchDescReq_11:
\ 0001A9 A2.. MOV C,?VB.0
\ 0001AB 5008 JNC ??CrossCallReturnLabel_414
912 {
913 osal_mem_free( sDesc );
\ 0001AD ; Setup parameters for call to function osal_mem_free
\ 0001AD 7406 MOV A,#0x6
\ 0001AF 12.... LCALL ?XSTACK_DISP0_8
\ 0001B2 12.... LCALL ??Subroutine241_0 & 0xFFFF
914 }
915 }
916 epDesc = epDesc->nextDesc;
\ ??CrossCallReturnLabel_414:
\ 0001B5 7404 MOV A,#0x4
\ 0001B7 12.... LCALL ?XSTACK_DISP0_8
\ 0001BA 12.... LCALL ?Subroutine88 & 0xFFFF
\ ??CrossCallReturnLabel_141:
\ 0001BD 12.... LCALL ??Subroutine253_0 & 0xFFFF
\ ??CrossCallReturnLabel_464:
\ 0001C0 7404 MOV A,#0x4
\ 0001C2 12.... LCALL ?XSTACK_DISP0_8
\ 0001C5 12.... LCALL ??Subroutine294_0 & 0xFFFF
\ ??CrossCallReturnLabel_728:
\ 0001C8 7404 MOV A,#0x4
\ 0001CA 12.... LCALL ?XSTACK_DISP0_8
\ 0001CD 12.... LCALL ??Subroutine260_0 & 0xFFFF
\ ??CrossCallReturnLabel_504:
\ 0001D0 7003 JNZ $+5
\ 0001D2 02.... LJMP ??ZDO_ProcessMatchDescReq_12 & 0xFFFF
\ 0001D5 7404 MOV A,#0x4
\ 0001D7 12.... LCALL ?XSTACK_DISP0_8
\ 0001DA 12.... LCALL ?Subroutine68 & 0xFFFF
\ ??CrossCallReturnLabel_399:
\ 0001DD 60D6 JZ ??CrossCallReturnLabel_414
\ 0001DF 7404 MOV A,#0x4
\ 0001E1 12.... LCALL ?XSTACK_DISP0_8
\ 0001E4 E0 MOVX A,@DPTR
\ 0001E5 F8 MOV R0,A
\ 0001E6 2408 ADD A,#0x8
\ 0001E8 F582 MOV DPL,A
\ 0001EA E4 CLR A
\ 0001EB 39 ADDC A,R1
\ 0001EC F583 MOV DPH,A
\ 0001EE E0 MOVX A,@DPTR
\ 0001EF A2E0 MOV C,0xE0 /* A */.0
\ 0001F1 50C2 JNC ??CrossCallReturnLabel_414
\ 0001F3 7404 MOV A,#0x4
\ 0001F5 12.... LCALL ?XSTACK_DISP0_8
\ 0001F8 12.... LCALL ??Subroutine298_0 & 0xFFFF
\ ??CrossCallReturnLabel_740:
\ 0001FB 12.... LCALL ??Subroutine260_0 & 0xFFFF
\ ??CrossCallReturnLabel_505:
\ 0001FE 6027 JZ ??ZDO_ProcessMatchDescReq_13
\ 000200 ; Setup parameters for indirect call
\ 000200 7404 MOV A,#0x4
\ 000202 12.... LCALL ?XSTACK_DISP0_8
\ 000205 E0 MOVX A,@DPTR
\ 000206 F8 MOV R0,A
\ 000207 12.... LCALL ?Subroutine68 & 0xFFFF
\ ??CrossCallReturnLabel_400:
\ 00020A FA MOV R2,A
\ 00020B 7901 MOV R1,#0x1
\ 00020D 7404 MOV A,#0x4
\ 00020F 12.... LCALL ?XSTACK_DISP0_8
\ 000212 12.... LCALL ?Subroutine81 & 0xFFFF
\ ??CrossCallReturnLabel_741:
\ 000215 12.... LCALL ?Subroutine88 & 0xFFFF
\ ??CrossCallReturnLabel_142:
\ 000218 12.... LCALL ?CALL_IND
\ 00021B 7406 MOV A,#0x6
\ 00021D 12.... LCALL ?XSTACK_DISP0_8
\ 000220 12.... LCALL ??Subroutine242_0 & 0xFFFF
\ ??CrossCallReturnLabel_428:
\ 000223 D2.. SETB ?VB.0
\ 000225 8015 SJMP ??ZDO_ProcessMatchDescReq_14
\ ??ZDO_ProcessMatchDescReq_13:
\ 000227 7404 MOV A,#0x4
\ 000229 12.... LCALL ?XSTACK_DISP0_8
\ 00022C 12.... LCALL ?Subroutine73 & 0xFFFF
\ ??CrossCallReturnLabel_117:
\ 00022F 12.... LCALL ??Subroutine250_0 & 0xFFFF
\ ??CrossCallReturnLabel_476:
\ 000232 7406 MOV A,#0x6
\ 000234 12.... LCALL ?XSTACK_DISP0_8
\ 000237 12.... LCALL ??Subroutine294_0 & 0xFFFF
\ ??CrossCallReturnLabel_729:
\ 00023A C2.. CLR ?VB.0
\ ??ZDO_ProcessMatchDescReq_14:
\ 00023C 7406 MOV A,#0x6
\ 00023E 12.... LCALL ?XSTACK_DISP0_8
\ 000241 12.... LCALL ??Subroutine260_0 & 0xFFFF
\ ??CrossCallReturnLabel_506:
\ 000244 7003 JNZ $+5
\ 000246 02.... LJMP ??ZDO_ProcessMatchDescReq_11 & 0xFFFF
\ 000249 7406 MOV A,#0x6
\ 00024B 12.... LCALL ?XSTACK_DISP0_8
\ 00024E 12.... LCALL ?Subroutine112 & 0xFFFF
\ ??CrossCallReturnLabel_184:
\ 000251 A3 INC DPTR
\ 000252 E0 MOVX A,@DPTR
\ 000253 65.. XRL A,?V4
\ 000255 7004 JNZ ??ZDO_ProcessMatchDescReq_15
\ 000257 A3 INC DPTR
\ 000258 E0 MOVX A,@DPTR
\ 000259 65.. XRL A,?V5
\ ??ZDO_ProcessMatchDescReq_15:
\ 00025B 6003 JZ $+5
\ 00025D 02.... LJMP ??ZDO_ProcessMatchDescReq_11 & 0xFFFF
\ 000260 ; Setup parameters for call to function ZDO_AnyClusterMatches
\ 000260 E8 MOV A,R0
\ 000261 2407 ADD A,#0x7
\ 000263 F582 MOV DPL,A
\ 000265 E4 CLR A
\ 000266 39 ADDC A,R1
\ 000267 F583 MOV DPH,A
\ 000269 12.... LCALL ?PUSH_XSTACK8_X_TWO
\ 00026C 7408 MOV A,#0x8
\ 00026E 12.... LCALL ?XSTACK_DISP0_8
\ 000271 12.... LCALL ??Subroutine275_0 & 0xFFFF
\ ??CrossCallReturnLabel_587:
\ 000274 2406 ADD A,#0x6
\ 000276 12.... LCALL ?Subroutine150 & 0xFFFF
\ ??CrossCallReturnLabel_242:
\ 000279 FC MOV R4,A
\ 00027A 740D MOV A,#0xd
\ 00027C 12.... LCALL ?XSTACK_DISP0_8
\ 00027F 12.... LCALL ??Subroutine256_0 & 0xFFFF
\ ??CrossCallReturnLabel_484:
\ 000282 7402 MOV A,#0x2
\ 000284 12.... LCALL ?XSTACK_DISP0_8
\ 000287 E0 MOVX A,@DPTR
\ 000288 F9 MOV R1,A
\ 000289 12.... LCALL `??ZDO_AnyClusterMatches::?relay`; Banked call to: ZDO_AnyClusterMatches
\ 00028C 7402 MOV A,#0x2
\ 00028E 12.... LCALL ?DEALLOC_XSTACK8
\ 000291 E9 MOV A,R1
\ 000292 703A JNZ ??ZDO_ProcessMatchDescReq_16
\ 000294 ; Setup parameters for call to function ZDO_AnyClusterMatches
\ 000294 7406 MOV A,#0x6
\ 000296 12.... LCALL ?XSTACK_DISP0_8
\ 000299 12.... LCALL ??Subroutine275_0 & 0xFFFF
\ ??CrossCallReturnLabel_588:
\ 00029C 240A ADD A,#0xa
\ 00029E F582 MOV DPL,A
\ 0002A0 E4 CLR A
\ 0002A1 38 ADDC A,R0
\ 0002A2 F583 MOV DPH,A
\ 0002A4 12.... LCALL ?PUSH_XSTACK8_X_TWO
\ 0002A7 7408 MOV A,#0x8
\ 0002A9 12.... LCALL ?XSTACK_DISP0_8
\ 0002AC 12.... LCALL ?Subroutine89 & 0xFFFF
\ ??CrossCallReturnLabel_144:
\ 0002AF E0 MOVX A,@DPTR
\ 0002B0 FC MOV R4,A
\ 0002B1 740B MOV A,#0xb
\ 0002B3 12.... LCALL ?XSTACK_DISP0_8
\ 0002B6 12.... LCALL ??Subroutine256_0 & 0xFFFF
\ ??CrossCallReturnLabel_485:
\ 0002B9 7403 MOV A,#0x3
\ 0002BB 12.... LCALL ?XSTACK_DISP0_8
\ 0002BE E0 MOVX A,@DPTR
\ 0002BF F9 MOV R1,A
\ 0002C0 12.... LCALL `??ZDO_AnyClusterMatches::?relay`; Banked call to: ZDO_AnyClusterMatches
\ 0002C3 7402 MOV A,#0x2
\ 0002C5 12.... LCALL ?DEALLOC_XSTACK8
\ 0002C8 E9 MOV A,R1
\ 0002C9 7003 JNZ $+5
\ 0002CB 02.... LJMP ??ZDO_ProcessMatchDescReq_11 & 0xFFFF
\ ??ZDO_ProcessMatchDescReq_16:
\ 0002CE ; Setup parameters for call to function osal_msg_allocate
\ 0002CE 85..82 MOV DPL,?XSP + 0
\ 0002D1 85..83 MOV DPH,?XSP + 1
\ 0002D4 E0 MOVX A,@DPTR
\ 0002D5 F8 MOV R0,A
\ 0002D6 7401 MOV A,#0x1
\ 0002D8 12.... LCALL ?XSTACK_DISP0_8
\ 0002DB E0 MOVX A,@DPTR
\ 0002DC 28 ADD A,R0
\ 0002DD C3 CLR C
\ 0002DE 33 RLC A
\ 0002DF 240A ADD A,#0xa
\ 0002E1 FA MOV R2,A
\ 0002E2 7B00 MOV R3,#0x0
\ 0002E4 12.... LCALL `??osal_msg_allocate::?relay`; Banked call to: osal_msg_allocate
\ 0002E7 8A.. MOV ?V6,R2
\ 0002E9 8B.. MOV ?V7,R3
\ 0002EB EA MOV A,R2
\ 0002EC 4B ORL A,R3
\ 0002ED 7003 JNZ $+5
\ 0002EF 02.... LJMP ??ZDO_ProcessMatchDescReq_10 & 0xFFFF
\ 0002F2 8A82 MOV DPL,R2
\ 0002F4 8B83 MOV DPH,R3
\ 0002F6 74D2 MOV A,#-0x2e
\ 0002F8 F0 MOVX @DPTR,A
\ 0002F9 7402 MOV A,#0x2
\ 0002FB 12.... LCALL ?XSTACK_DISP0_8
\ 0002FE 12.... LCALL ?Subroutine84 & 0xFFFF
\ ??CrossCallReturnLabel_135:
\ 000301 8A82 MOV DPL,R2
\ 000303 8B83 MOV DPH,R3
\ 000305 A3 INC DPTR
\ 000306 A3 INC DPTR
\ 000307 12.... LCALL ?Subroutine30 & 0xFFFF
\ ??CrossCallReturnLabel_30:
\ 00030A 8A82 MOV DPL,R2
\ 00030C 8B83 MOV DPH,R3
\ 00030E A3 INC DPTR
\ 00030F A3 INC DPTR
\ 000310 A3 INC DPTR
\ 000311 A3 INC DPTR
\ 000312 F0 MOVX @DPTR,A
\ 000313 7401 MOV A,#0x1
\ 000315 12.... LCALL ?XSTACK_DISP0_8
\ 000318 12.... LCALL ?Subroutine108 & 0xFFFF
\ ??CrossCallReturnLabel_177:
\ 00031B A3 INC DPTR
\ 00031C 12.... LCALL ?Subroutine31 & 0xFFFF
\ ??CrossCallReturnLabel_32:
\ 00031F 6036 JZ ??ZDO_ProcessMatchDescReq_17
\ 000321 EA MOV A,R2
\ 000322 240A ADD A,#0xa
\ 000324 F8 MOV R0,A
\ 000325 E4 CLR A
\ 000326 35.. ADDC A,?V7
\ 000328 F9 MOV R1,A
\ 000329 8A82 MOV DPL,R2
\ 00032B 8B83 MOV DPH,R3
\ 00032D A3 INC DPTR
\ 00032E A3 INC DPTR
\ 00032F A3 INC DPTR
\ 000330 A3 INC DPTR
\ 000331 A3 INC DPTR
\ 000332 12.... LCALL ?Subroutine41 & 0xFFFF
\ ??CrossCallReturnLabel_57:
\ 000335 12.... LCALL ?XSTACK_DISP0_8
\ 000338 12.... LCALL ?Subroutine66 & 0xFFFF
\ ??CrossCallReturnLabel_102:
\ 00033B 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 00033E 7403 MOV A,#0x3
\ 000340 12.... LCALL ?XSTACK_DISP0_8
\ 000343 12.... LCALL ?Subroutine135 & 0xFFFF
\ ??CrossCallReturnLabel_365:
\ 000346 8A82 MOV DPL,R2
\ 000348 8B83 MOV DPH,R3
\ 00034A A3 INC DPTR
\ 00034B A3 INC DPTR
\ 00034C A3 INC DPTR
\ 00034D A3 INC DPTR
\ 00034E A3 INC DPTR
\ 00034F 12.... LCALL ??Subroutine266_0 & 0xFFFF
\ ??CrossCallReturnLabel_548:
\ 000352 12.... LCALL ?DEALLOC_XSTACK8
\ 000355 800D SJMP ??ZDO_ProcessMatchDescReq_18
\ ??ZDO_ProcessMatchDescReq_17:
\ 000357 8A82 MOV DPL,R2
\ 000359 8B83 MOV DPH,R3
\ 00035B A3 INC DPTR
\ 00035C A3 INC DPTR
\ 00035D A3 INC DPTR
\ 00035E A3 INC DPTR
\ 00035F A3 INC DPTR
\ 000360 E4 CLR A
\ 000361 F0 MOVX @DPTR,A
\ 000362 A3 INC DPTR
\ 000363 F0 MOVX @DPTR,A
\ ??ZDO_ProcessMatchDescReq_18:
\ 000364 7401 MOV A,#0x1
\ 000366 12.... LCALL ?XSTACK_DISP0_8
\ 000369 E0 MOVX A,@DPTR
\ 00036A 7003 JNZ $+5
\ 00036C 02.... LJMP ??ZDO_ProcessMatchDescReq_8 & 0xFFFF
\ 00036F 85..82 MOV DPL,?XSP + 0
\ 000372 85..83 MOV DPH,?XSP + 1
\ 000375 E0 MOVX A,@DPTR
\ 000376 12.... LCALL ?Subroutine134 & 0xFFFF
\ ??CrossCallReturnLabel_221:
\ 000379 F8 MOV R0,A
\ 00037A E5.. MOV A,?V7
\ 00037C 39 ADDC A,R1
\ 00037D F9 MOV R1,A
\ 00037E E8 MOV A,R0
\ 00037F 240A ADD A,#0xa
\ 000381 5001 JNC ??ZDO_ProcessMatchDescReq_19
\ 000383 09 INC R1
\ ??ZDO_ProcessMatchDescReq_19:
\ 000384 85..82 MOV DPL,?V6
\ 000387 85..83 MOV DPH,?V7
\ 00038A A3 INC DPTR
\ 00038B A3 INC DPTR
\ 00038C A3 INC DPTR
\ 00038D A3 INC DPTR
\ 00038E A3 INC DPTR
\ 00038F A3 INC DPTR
\ 000390 A3 INC DPTR
\ 000391 A3 INC DPTR
\ 000392 12.... LCALL ??Subroutine295_0 & 0xFFFF
\ ??CrossCallReturnLabel_718:
\ 000395 ; Setup parameters for call to function osal_memcpy
\ 000395 7409 MOV A,#0x9
\ 000397 12.... LCALL ?XSTACK_DISP0_8
\ 00039A 12.... LCALL ?Subroutine66 & 0xFFFF
917 }
\ ??CrossCallReturnLabel_103:
\ 00039D 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 0003A0 7404 MOV A,#0x4
\ 0003A2 12.... LCALL ?XSTACK_DISP0_8
\ 0003A5 12.... LCALL ?Subroutine135 & 0xFFFF
\ ??CrossCallReturnLabel_366:
\ 0003A8 85..82 MOV DPL,?V6
\ 0003AB 85..83 MOV DPH,?V7
\ 0003AE A3 INC DPTR
\ 0003AF A3 INC DPTR
\ 0003B0 A3 INC DPTR
\ 0003B1 A3 INC DPTR
\ 0003B2 A3 INC DPTR
\ 0003B3 A3 INC DPTR
\ 0003B4 A3 INC DPTR
\ 0003B5 A3 INC DPTR
\ 0003B6 12.... LCALL ??Subroutine266_0 & 0xFFFF
\ ??CrossCallReturnLabel_549:
\ 0003B9 12.... LCALL ?DEALLOC_XSTACK8
\ 0003BC 02.... LJMP ??ZDO_ProcessMatchDescReq_9 & 0xFFFF
918
919 if ( epCnt )
\ ??ZDO_ProcessMatchDescReq_12:
\ 0003BF 7408 MOV A,#0x8
\ 0003C1 12.... LCALL ?XSTACK_DISP0_8
\ 0003C4 E0 MOVX A,@DPTR
\ 0003C5 6049 JZ ??ZDO_ProcessMatchDescReq_20
920 {
921 // Send the message if at least one match found.
922 if ( ZSuccess == ZDP_MatchDescRsp( inMsg->TransSeq, &(inMsg->srcAddr), ZDP_SUCCESS,
923 ZDAppNwkAddr.addr.shortAddr, epCnt, (uint8 *)ZDOBuildBuf, inMsg->SecurityUse ) )
\ 0003C7 ; Setup parameters for call to function ZDP_EPRsp
\ 0003C7 7402 MOV A,#0x2
\ 0003C9 12.... LCALL ?XSTACK_DISP0_8
\ 0003CC 12.... LCALL ?Subroutine57 & 0xFFFF
\ ??CrossCallReturnLabel_81:
\ 0003CF 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 0003D2 75.... MOV ?V0,#ZDOBuildBuf & 0xff
\ 0003D5 75.... MOV ?V1,#(ZDOBuildBuf >> 8) & 0xff
\ 0003D8 78.. MOV R0,#?V0
\ 0003DA 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 0003DD 740B MOV A,#0xb
\ 0003DF 12.... LCALL ?XSTACK_DISP0_8
\ 0003E2 12.... LCALL ??Subroutine249_0 & 0xFFFF
\ ??CrossCallReturnLabel_458:
\ 0003E5 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 0003E8 90.... MOV DPTR,#ZDAppNwkAddr
\ 0003EB 12.... LCALL ?PUSH_XSTACK8_X_TWO
\ 0003EE 75..00 MOV ?V0,#0x0
\ 0003F1 78.. MOV R0,#?V0
\ 0003F3 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 0003F6 7409 MOV A,#0x9
\ 0003F8 12.... LCALL ?XSTACK_DISP0_8
\ 0003FB 12.... LCALL ?Subroutine71 & 0xFFFF
\ ??CrossCallReturnLabel_112:
\ 0003FE 12.... LCALL ?XSTACK_DISP0_8
\ 000401 12.... LCALL ?Subroutine55 & 0xFFFF
\ ??CrossCallReturnLabel_78:
\ 000404 12.... LCALL ?DEALLOC_XSTACK8
\ 000407 E9 MOV A,R1
\ 000408 705B JNZ ??ZDO_ProcessMatchDescReq_21
924 {
925 #if defined( LCD_SUPPORTED )
926 HalLcdWriteScreen( "Match Desc Req", "Rsp Sent" );
\ 00040A ; Setup parameters for call to function HalLcdWriteScreen
\ 00040A 7C.. MOV R4,#`?<Constant "Rsp Sent">` & 0xff
\ 00040C 7D.. MOV R5,#(`?<Constant "Rsp Sent">` >> 8) & 0xff
\ 00040E 804E SJMP ??ZDO_ProcessMatchDescReq_22
927 #endif
928 }
929 }
930 else
931 {
932 // No match found
933 if (ADDR_NOT_BCAST == NLME_IsAddressBroadcast(aoi))
\ ??ZDO_ProcessMatchDescReq_20:
\ 000410 ; Setup parameters for call to function NLME_IsAddressBroadcast
\ 000410 EE MOV A,R6
\ 000411 FA MOV R2,A
\ 000412 EF MOV A,R7
\ 000413 FB MOV R3,A
\ 000414 12.... LCALL `??NLME_IsAddressBroadcast::?relay`; Banked call to: NLME_IsAddressBroadcast
\ 000417 E9 MOV A,R1
\ 000418 7040 JNZ ??ZDO_ProcessMatchDescReq_23
934 {
935 // send response message with match length = 0
936 ZDP_MatchDescRsp( inMsg->TransSeq, &(inMsg->srcAddr), ZDP_SUCCESS,
937 ZDAppNwkAddr.addr.shortAddr, 0, (uint8 *)ZDOBuildBuf, inMsg->SecurityUse );
\ 00041A ; Setup parameters for call to function ZDP_EPRsp
\ 00041A 7402 MOV A,#0x2
\ 00041C 12.... LCALL ?XSTACK_DISP0_8
\ 00041F 12.... LCALL ?Subroutine57 & 0xFFFF
\ ??CrossCallReturnLabel_82:
\ 000422 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 000425 75.... MOV ?V0,#ZDOBuildBuf & 0xff
\ 000428 75.... MOV ?V1,#(ZDOBuildBuf >> 8) & 0xff
\ 00042B 78.. MOV R0,#?V0
\ 00042D 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000430 75..00 MOV ?V0,#0x0
\ 000433 78.. MOV R0,#?V0
\ 000435 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 000438 90.... MOV DPTR,#ZDAppNwkAddr
\ 00043B 12.... LCALL ?PUSH_XSTACK8_X_TWO
\ 00043E 78.. MOV R0,#?V0
\ 000440 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 000443 7409 MOV A,#0x9
\ 000445 12.... LCALL ?XSTACK_DISP0_8
\ 000448 12.... LCALL ?Subroutine71 & 0xFFFF
\ ??CrossCallReturnLabel_113:
\ 00044B 12.... LCALL ?XSTACK_DISP0_8
\ 00044E 12.... LCALL ?Subroutine55 & 0xFFFF
\ ??CrossCallReturnLabel_79:
\ 000451 12.... LCALL ?DEALLOC_XSTACK8
938 #if defined( LCD_SUPPORTED )
939 HalLcdWriteScreen( "Match Desc Req", "Rsp Non Matched" );
\ 000454 ; Setup parameters for call to function HalLcdWriteScreen
\ 000454 7C.. MOV R4,#`?<Constant "Rsp Non Matched">` & 0xff
\ 000456 7D.. MOV R5,#(`?<Constant "Rsp Non Matched">` >> 8) & 0xff
\ 000458 8004 SJMP ??ZDO_ProcessMatchDescReq_22
940 #endif
941 }
942 else
943 {
944 // no response mesage for broadcast message
945 #if defined( LCD_SUPPORTED )
946 HalLcdWriteScreen( "Match Desc Req", "Non Matched" );
\ ??ZDO_ProcessMatchDescReq_23:
\ 00045A ; Setup parameters for call to function HalLcdWriteScreen
\ 00045A 7C.. MOV R4,#`?<Constant "Non Matched">` & 0xff
\ 00045C 7D.. MOV R5,#(`?<Constant "Non Matched">` >> 8) & 0xff
\ ??ZDO_ProcessMatchDescReq_22:
\ 00045E 7A.. MOV R2,#`?<Constant "Match Desc Req">` & 0xff
\ 000460 7B.. MOV R3,#(`?<Constant "Match Desc Req">` >> 8) & 0xff
\ 000462 12.... LCALL `??HalLcdWriteScreen::?relay`; Banked call to: HalLcdWriteScreen
947 #endif
948 }
949 }
950
951 if ( inClusters != NULL )
\ ??ZDO_ProcessMatchDescReq_21:
\ 000465 740B MOV A,#0xb
\ 000467 12.... LCALL ?XSTACK_DISP0_8
\ 00046A 12.... LCALL ??Subroutine260_0 & 0xFFFF
\ ??CrossCallReturnLabel_507:
\ 00046D 6008 JZ ??CrossCallReturnLabel_415
952 {
953 osal_mem_free( inClusters );
\ 00046F ; Setup parameters for call to function osal_mem_free
\ 00046F 740B MOV A,#0xb
\ 000471 12.... LCALL ?XSTACK_DISP0_8
\ 000474 12.... LCALL ??Subroutine241_0 & 0xFFFF
954 }
955
956 if ( outClusters != NULL )
\ ??CrossCallReturnLabel_415:
\ 000477 7409 MOV A,#0x9
\ 000479 12.... LCALL ?XSTACK_DISP0_8
\ 00047C 12.... LCALL ??Subroutine260_0 & 0xFFFF
\ ??CrossCallReturnLabel_508:
\ 00047F 6008 JZ ??CrossCallReturnLabel_416
957 {
958 osal_mem_free( outClusters );
\ 000481 ; Setup parameters for call to function osal_mem_free
\ 000481 7409 MOV A,#0x9
\ 000483 12.... LCALL ?XSTACK_DISP0_8
\ 000486 12.... LCALL ??Subroutine241_0 & 0xFFFF
959 }
960 }
\ ??CrossCallReturnLabel_416:
\ 000489 740D MOV A,#0xd
\ 00048B 02.... LJMP ?Subroutine7 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine135:
\ 000000 E0 MOVX A,@DPTR
\ 000001 REQUIRE ??Subroutine227_0
\ 000001 ; // Fall through to label ??Subroutine227_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine116:
\ 000000 E0 MOVX A,@DPTR
\ 000001 FA MOV R2,A
\ 000002 REQUIRE ??Subroutine228_0
\ 000002 ; // Fall through to label ??Subroutine228_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine228_0:
\ 000000 A3 INC DPTR
\ 000001 E0 MOVX A,@DPTR
\ 000002 F8 MOV R0,A
\ 000003 E4 CLR A
\ 000004 C8 XCH A,R0
\ 000005 F9 MOV R1,A
\ 000006 EA MOV A,R2
\ 000007 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine113:
\ 000000 12.... LCALL ?Subroutine189 & 0xFFFF
\ ??CrossCallReturnLabel_309:
\ 000003 AA.. MOV R2,?V0
\ 000005 AB.. MOV R3,?V1
\ 000007 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine107:
\ 000000 A3 INC DPTR
\ 000001 A3 INC DPTR
\ 000002 REQUIRE ??Subroutine229_0
\ 000002 ; // Fall through to label ??Subroutine229_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine229_0:
\ 000000 E0 MOVX A,@DPTR
\ 000001 85..82 MOV DPL,?XSP + 0
\ 000004 85..83 MOV DPH,?XSP + 1
\ 000007 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine73:
\ 000000 12.... LCALL ?Subroutine180 & 0xFFFF
\ ??CrossCallReturnLabel_296:
\ 000003 F583 MOV DPH,A
\ 000005 8882 MOV DPL,R0
\ 000007 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine71:
\ 000000 E0 MOVX A,@DPTR
\ 000001 2402 ADD A,#0x2
\ 000003 FC MOV R4,A
\ 000004 A3 INC DPTR
\ 000005 E0 MOVX A,@DPTR
\ 000006 3400 ADDC A,#0x0
\ 000008 FD MOV R5,A
\ 000009 7409 MOV A,#0x9
\ 00000B 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine57:
\ 000000 12.... LCALL ??Subroutine258_0 & 0xFFFF
\ ??CrossCallReturnLabel_604:
\ 000003 240E ADD A,#0xe
\ 000005 12.... LCALL ?Subroutine216 & 0xFFFF
\ ??CrossCallReturnLabel_346:
\ 000008 F5.. MOV ?V0,A
\ 00000A 78.. MOV R0,#?V0
\ 00000C 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine55:
\ 000000 12.... LCALL ?Subroutine178 & 0xFFFF
\ ??CrossCallReturnLabel_294:
\ 000003 7A06 MOV R2,#0x6
\ 000005 7B80 MOV R3,#-0x80
\ 000007 12.... LCALL `??ZDP_EPRsp::?relay`; Banked call to: ZDP_EPRsp
\ 00000A 7407 MOV A,#0x7
\ 00000C 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine87:
\ 000000 12.... LCALL ??Subroutine258_0 & 0xFFFF
\ ??CrossCallReturnLabel_605:
\ 000003 12.... LCALL ??Subroutine247_0 & 0xFFFF
\ ??CrossCallReturnLabel_454:
\ 000006 38 ADDC A,R0
\ 000007 F583 MOV DPH,A
\ 000009 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine68:
\ 000000 12.... LCALL ?Subroutine192 & 0xFFFF
\ ??CrossCallReturnLabel_744:
\ 000003 REQUIRE ??Subroutine236_0
\ 000003 ; // Fall through to label ??Subroutine236_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine49:
\ 000000 F0 MOVX @DPTR,A
\ 000001 85..82 MOV DPL,?V0
\ 000004 85..83 MOV DPH,?V1
\ 000007 A3 INC DPTR
\ 000008 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine7:
\ 000000 12.... LCALL ?DEALLOC_XSTACK8
\ 000003 02.... LJMP ??Subroutine230_0 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine178:
\ 000000 12.... LCALL ?Subroutine213 & 0xFFFF
\ ??CrossCallReturnLabel_616:
\ 000003 240F ADD A,#0xf
\ 000005 12.... LCALL ?Subroutine216 & 0xFFFF
\ ??CrossCallReturnLabel_349:
\ 000008 F9 MOV R1,A
\ 000009 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine249_0:
\ 000000 E0 MOVX A,@DPTR
\ 000001 F5.. MOV ?V0,A
\ 000003 78.. MOV R0,#?V0
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine250_0:
\ 000000 A3 INC DPTR
\ 000001 REQUIRE ??Subroutine251_0
\ 000001 ; // Fall through to label ??Subroutine251_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine251_0:
\ 000000 A3 INC DPTR
\ 000001 REQUIRE ??Subroutine252_0
\ 000001 ; // Fall through to label ??Subroutine252_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine252_0:
\ 000000 A3 INC DPTR
\ 000001 REQUIRE ??Subroutine253_0
\ 000001 ; // Fall through to label ??Subroutine253_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine41:
\ 000000 E8 MOV A,R0
\ 000001 F0 MOVX @DPTR,A
\ 000002 A3 INC DPTR
\ 000003 E9 MOV A,R1
\ 000004 F0 MOVX @DPTR,A
\ 000005 ; Setup parameters for call to function osal_memcpy
\ 000005 ; Setup parameters for call to function AddrMgrEntryLookupNwk
\ 000005 ; Setup parameters for call to function AddrMgrEntryUpdate
\ 000005 740B MOV A,#0xb
\ 000007 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine31:
\ 000000 12.... LCALL ??Subroutine299_0 & 0xFFFF
\ ??CrossCallReturnLabel_750:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine254_0:
\ 000000 E0 MOVX A,@DPTR
\ 000001 8A82 MOV DPL,R2
\ 000003 8B83 MOV DPH,R3
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine108:
\ 000000 12.... LCALL ??Subroutine254_0 & 0xFFFF
\ ??CrossCallReturnLabel_479:
\ 000003 A3 INC DPTR
\ 000004 A3 INC DPTR
\ 000005 A3 INC DPTR
\ 000006 A3 INC DPTR
\ 000007 A3 INC DPTR
\ 000008 A3 INC DPTR
\ 000009 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine256_0:
\ 000000 12.... LCALL ?Subroutine179 & 0xFFFF
\ ??CrossCallReturnLabel_555:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine258_0:
\ 000000 12.... LCALL ?Subroutine213 & 0xFFFF
\ ??CrossCallReturnLabel_620:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine213:
\ 000000 12.... LCALL ?Subroutine220 & 0xFFFF
\ ??CrossCallReturnLabel_656:
\ 000003 C8 XCH A,R0
\ 000004 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine266_0:
\ 000000 12.... LCALL ?Subroutine179 & 0xFFFF
\ ??CrossCallReturnLabel_556:
\ 000003 12.... LCALL `??osal_memcpy::?relay`; Banked call to: osal_memcpy
\ 000006 7403 MOV A,#0x3
\ 000008 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine150:
\ 000000 12.... LCALL ?Subroutine216 & 0xFFFF
\ ??CrossCallReturnLabel_348:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine84:
\ 000000 12.... LCALL ?Subroutine180 & 0xFFFF
\ ??CrossCallReturnLabel_297:
\ 000003 F9 MOV R1,A
\ 000004 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine180:
\ 000000 12.... LCALL ?Subroutine220 & 0xFFFF
\ ??CrossCallReturnLabel_652:
\ 000003 F583 MOV DPH,A
\ 000005 8882 MOV DPL,R0
\ 000007 A3 INC DPTR
\ 000008 A3 INC DPTR
\ 000009 12.... LCALL ?Subroutine220 & 0xFFFF
\ ??CrossCallReturnLabel_653:
\ 00000C 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine216:
\ 000000 F582 MOV DPL,A
\ 000002 E4 CLR A
\ 000003 38 ADDC A,R0
\ 000004 F583 MOV DPH,A
\ 000006 E0 MOVX A,@DPTR
\ 000007 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine270_0:
\ 000000 E0 MOVX A,@DPTR
\ 000001 F9 MOV R1,A
\ 000002 12.... LCALL `??ZDO_ConvertOTAClusters::?relay`; Banked call to: ZDO_ConvertOTAClusters
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine275_0:
\ 000000 12.... LCALL ??Subroutine258_0 & 0xFFFF
\ ??CrossCallReturnLabel_615:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine294_0:
\ 000000 E8 MOV A,R0
\ 000001 REQUIRE ??Subroutine295_0
\ 000001 ; // Fall through to label ??Subroutine295_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine295_0:
\ 000000 F0 MOVX @DPTR,A
\ 000001 A3 INC DPTR
\ 000002 E9 MOV A,R1
\ 000003 F0 MOVX @DPTR,A
\ 000004 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine132:
\ 000000 12.... LCALL ?Subroutine196 & 0xFFFF
\ ??CrossCallReturnLabel_568:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine196:
\ 000000 25E0 ADD A,0xE0 /* A */
\ 000002 FA MOV R2,A
\ 000003 E4 CLR A
\ 000004 33 RLC A
\ 000005 FB MOV R3,A
\ 000006 12.... LCALL `??osal_mem_alloc::?relay`; Banked call to: osal_mem_alloc
\ 000009 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine89:
\ 000000 12.... LCALL ??Subroutine258_0 & 0xFFFF
\ ??CrossCallReturnLabel_606:
\ 000003 2409 ADD A,#0x9
\ 000005 F582 MOV DPL,A
\ 000007 E4 CLR A
\ 000008 38 ADDC A,R0
\ 000009 F583 MOV DPH,A
\ 00000B 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine88:
\ 000000 E0 MOVX A,@DPTR
\ 000001 F8 MOV R0,A
\ 000002 12.... LCALL ?Subroutine192 & 0xFFFF
\ ??CrossCallReturnLabel_745:
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine81:
\ 000000 E0 MOVX A,@DPTR
\ 000001 F8 MOV R0,A
\ 000002 REQUIRE ??Subroutine298_0
\ 000002 ; // Fall through to label ??Subroutine298_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine298_0:
\ 000000 12.... LCALL ?Subroutine192 & 0xFFFF
\ ??CrossCallReturnLabel_747:
\ 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
\ ?Subroutine66:
\ 000000 12.... LCALL ??Subroutine223_0 & 0xFFFF
\ ??CrossCallReturnLabel_358:
\ 000003 75..00 MOV ?V2,#0x0
\ 000006 78.. MOV R0,#?V0
\ 000008 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine30:
\ 000000 12.... LCALL ?Subroutine164 & 0xFFFF
\ ??CrossCallReturnLabel_748:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine164:
\ 000000 E8 MOV A,R0
\ 000001 F0 MOVX @DPTR,A
\ 000002 A3 INC DPTR
\ 000003 E9 MOV A,R1
\ 000004 REQUIRE ??Subroutine299_0
\ 000004 ; // Fall through to label ??Subroutine299_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine299_0:
\ 000000 F0 MOVX @DPTR,A
\ 000001 85..82 MOV DPL,?XSP + 0
\ 000004 85..83 MOV DPH,?XSP + 1
\ 000007 E0 MOVX A,@DPTR
\ 000008 22 RET
961
962 /*********************************************************************
963 * @fn ZDO_ProcessBindUnbindReq()
964 *
965 * @brief Called to process a Bind or Unbind Request message.
966 *
967 * @param inMsg - incoming message (request)
968 * @param pReq - place to put parsed information
969 *
970 * @return none
971 */
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine2:
\ 000000 12.... LCALL ?DEALLOC_XSTACK8
\ 000003 REQUIRE ??Subroutine222_0
\ 000003 ; // Fall through to label ??Subroutine222_0
\ In segment BANKED_CODE, align 1, keep-with-next
972 void ZDO_ProcessBindUnbindReq( zdoIncomingMsg_t *inMsg, ZDO_BindUnbindReq_t *pReq )
\ ZDO_ProcessBindUnbindReq:
973 {
\ 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: 12
\ 000005 74F4 MOV A,#-0xc
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A 8A.. MOV ?V0,R2
\ 00000C 8B.. MOV ?V1,R3
\ 00000E EC MOV A,R4
\ 00000F FE MOV R6,A
\ 000010 ED MOV A,R5
\ 000011 FF MOV R7,A
974 zAddrType_t SourceAddr; // Binding Source addres
975 byte bindStat;
976
977 SourceAddr.addrMode = Addr64Bit;
\ 000012 740B MOV A,#0xb
\ 000014 12.... LCALL ?XSTACK_DISP0_8
\ 000017 7403 MOV A,#0x3
\ 000019 F0 MOVX @DPTR,A
978 osal_cpyExtAddr( SourceAddr.addr.extAddr, pReq->srcAddress );
\ 00001A ; Setup parameters for call to function sAddrExtCpy
\ 00001A 12.... LCALL ?XSTACK_DISP101_8
\ 00001D 12.... LCALL `??sAddrExtCpy::?relay`; Banked call to: sAddrExtCpy
979
980 // If the local device is not the primary binding cache
981 // check the src address of the bind request.
982 // If it is not the local device's extended address
983 // discard the request.
984 if ( !osal_ExtAddrEqual( SourceAddr.addr.extAddr, NLME_GetExtAddr()) ||
985 (pReq->dstAddress.addrMode != Addr64Bit &&
986 pReq->dstAddress.addrMode != AddrGroup) )
\ 000020 ; Setup parameters for call to function NLME_GetExtAddr
\ 000020 12.... LCALL ?Subroutine126 & 0xFFFF
\ ??CrossCallReturnLabel_208:
\ 000023 ; Setup parameters for call to function sAddrExtCmp
\ 000023 7403 MOV A,#0x3
\ 000025 12.... LCALL ?XSTACK_DISP101_8
\ 000028 12.... LCALL `??sAddrExtCmp::?relay`; Banked call to: sAddrExtCmp
\ 00002B E9 MOV A,R1
\ 00002C 600A JZ ??ZDO_ProcessBindUnbindReq_0
\ 00002E 12.... LCALL ?Subroutine129 & 0xFFFF
\ ??CrossCallReturnLabel_212:
\ 000031 6010 JZ ??ZDO_ProcessBindUnbindReq_1
\ 000033 E0 MOVX A,@DPTR
\ 000034 6401 XRL A,#0x1
\ 000036 600B JZ ??ZDO_ProcessBindUnbindReq_1
987 {
988 bindStat = ZDP_NOT_SUPPORTED;
\ ??ZDO_ProcessBindUnbindReq_0:
\ 000038 85..82 MOV DPL,?XSP + 0
\ 00003B 85..83 MOV DPH,?XSP + 1
\ 00003E 7484 MOV A,#-0x7c
\ 000040 02.... LJMP ??ZDO_ProcessBindUnbindReq_2 & 0xFFFF
989 }
990 else
991 {
992 // Check source & destination endpoints
993 if ( (pReq->srcEndpoint == 0 || pReq->srcEndpoint > MAX_ENDPOINTS)
994 || (( pReq->dstAddress.addrMode == Addr64Bit ) &&
995 (pReq->dstEndpoint == 0 || pReq->dstEndpoint > MAX_ENDPOINTS)) )
\ ??ZDO_ProcessBindUnbindReq_1:
\ 000043 8E82 MOV DPL,R6
\ 000045 8F83 MOV DPH,R7
\ 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 E0 MOVX A,@DPTR
\ 000050 6016 JZ ??ZDO_ProcessBindUnbindReq_3
\ 000052 C3 CLR C
\ 000053 94F1 SUBB A,#-0xf
\ 000055 5011 JNC ??ZDO_ProcessBindUnbindReq_3
\ 000057 12.... LCALL ?Subroutine129 & 0xFFFF
\ ??CrossCallReturnLabel_213:
\ 00005A 7017 JNZ ??ZDO_ProcessBindUnbindReq_4
\ 00005C EE MOV A,R6
\ 00005D 12.... LCALL ?Subroutine158 & 0xFFFF
\ ??CrossCallReturnLabel_265:
\ 000060 E0 MOVX A,@DPTR
\ 000061 6005 JZ ??ZDO_ProcessBindUnbindReq_3
\ 000063 C3 CLR C
\ 000064 94F1 SUBB A,#-0xf
\ 000066 400B JC ??ZDO_ProcessBindUnbindReq_4
996 {
997 bindStat = ZDP_INVALID_EP;
\ ??ZDO_ProcessBindUnbindReq_3:
\ 000068 85..82 MOV DPL,?XSP + 0
\ 00006B 85..83 MOV DPH,?XSP + 1
\ 00006E 7482 MOV A,#-0x7e
\ 000070 02.... LJMP ??ZDO_ProcessBindUnbindReq_2 & 0xFFFF
998 }
999 else
1000 {
1001 if ( inMsg->clusterID == Bind_req )
\ ??ZDO_ProcessBindUnbindReq_4:
\ 000073 12.... LCALL ?Subroutine157 & 0xFFFF
\ ??CrossCallReturnLabel_663:
\ 000076 E0 MOVX A,@DPTR
\ 000077 6421 XRL A,#0x21
\ 000079 7002 JNZ ??ZDO_ProcessBindUnbindReq_5
\ 00007B A3 INC DPTR
\ 00007C E0 MOVX A,@DPTR
\ ??ZDO_ProcessBindUnbindReq_5:
\ 00007D 7051 JNZ ??ZDO_ProcessBindUnbindReq_6
1002 {
1003 // Assume the table is full
1004 bindStat = ZDP_TABLE_FULL;
\ 00007F 85..82 MOV DPL,?XSP + 0
\ 000082 85..83 MOV DPH,?XSP + 1
\ 000085 748C MOV A,#-0x74
\ 000087 F0 MOVX @DPTR,A
1005
1006 #if defined( APP_TP ) || defined( APP_TP2 )
1007 // For ZigBee Conformance Testing
1008 if ( bindNumOfEntries() < gNWK_MAX_BINDING_ENTRIES )
1009 #endif
1010 {
1011 if ( APSME_BindRequest( pReq->srcEndpoint, pReq->clusterID,
1012 &(pReq->dstAddress), pReq->dstEndpoint ) == ZSuccess )
\ 000088 ; Setup parameters for call to function APSME_BindRequest
\ 000088 12.... LCALL ?Subroutine114 & 0xFFFF
\ ??CrossCallReturnLabel_375:
\ 00008B 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 00008E 12.... LCALL ?Subroutine69 & 0xFFFF
\ ??CrossCallReturnLabel_107:
\ 000091 12.... LCALL `??APSME_BindRequest::?relay`; Banked call to: APSME_BindRequest
\ 000094 7401 MOV A,#0x1
\ 000096 12.... LCALL ?DEALLOC_XSTACK8
\ 000099 E9 MOV A,R1
\ 00009A 7058 JNZ ??ZDO_ProcessBindUnbindReq_7
1013 {
1014 uint16 nwkAddr;
1015
1016 // valid entry
1017 bindStat = ZDP_SUCCESS;
\ 00009C 85..82 MOV DPL,?XSP + 0
\ 00009F 85..83 MOV DPH,?XSP + 1
\ 0000A2 E4 CLR A
\ 0000A3 F0 MOVX @DPTR,A
1018
1019 // Notify to save info into NV
1020 ZDApp_NVUpdate();
\ 0000A4 ; Setup parameters for call to function ZDApp_NVUpdate
\ 0000A4 12.... LCALL `??ZDApp_NVUpdate::?relay`; Banked call to: ZDApp_NVUpdate
1021
1022 // Check for the destination address
1023 if ( pReq->dstAddress.addrMode == Addr64Bit )
\ 0000A7 12.... LCALL ?Subroutine129 & 0xFFFF
\ ??CrossCallReturnLabel_214:
\ 0000AA 7048 JNZ ??ZDO_ProcessBindUnbindReq_7
1024 {
1025 if ( APSME_LookupNwkAddr( pReq->dstAddress.addr.extAddr, &nwkAddr ) == FALSE )
\ 0000AC ; Setup parameters for call to function APSME_LookupNwkAddr
\ 0000AC 7401 MOV A,#0x1
\ 0000AE 12.... LCALL ?XSTACK_DISP102_8
\ 0000B1 EE MOV A,R6
\ 0000B2 240B ADD A,#0xb
\ 0000B4 FA MOV R2,A
\ 0000B5 E4 CLR A
\ 0000B6 3F ADDC A,R7
\ 0000B7 FB MOV R3,A
\ 0000B8 12.... LCALL `??APSME_LookupNwkAddr::?relay`; Banked call to: APSME_LookupNwkAddr
\ 0000BB E9 MOV A,R1
\ 0000BC 7036 JNZ ??ZDO_ProcessBindUnbindReq_7
1026 {
1027 ZDP_NwkAddrReq( pReq->dstAddress.addr.extAddr, ZDP_ADDR_REQTYPE_SINGLE, 0, 0 );
\ 0000BE ; Setup parameters for call to function ZDP_NwkAddrReq
\ 0000BE 7D00 MOV R5,#0x0
\ 0000C0 7C00 MOV R4,#0x0
\ 0000C2 7900 MOV R1,#0x0
\ 0000C4 EE MOV A,R6
\ 0000C5 240B ADD A,#0xb
\ 0000C7 FA MOV R2,A
\ 0000C8 E4 CLR A
\ 0000C9 3F ADDC A,R7
\ 0000CA FB MOV R3,A
\ 0000CB 12.... LCALL `??ZDP_NwkAddrReq::?relay`; Banked call to: ZDP_NwkAddrReq
\ 0000CE 8024 SJMP ??ZDO_ProcessBindUnbindReq_7
1028 }
1029 }
1030 }
1031 }
1032 }
1033 else // Unbind_req
1034 {
1035 if ( APSME_UnBindRequest( pReq->srcEndpoint, pReq->clusterID,
1036 &(pReq->dstAddress), pReq->dstEndpoint ) == ZSuccess )
\ ??ZDO_ProcessBindUnbindReq_6:
\ 0000D0 ; Setup parameters for call to function APSME_UnBindRequest
\ 0000D0 12.... LCALL ?Subroutine114 & 0xFFFF
\ ??CrossCallReturnLabel_376:
\ 0000D3 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 0000D6 12.... LCALL ?Subroutine69 & 0xFFFF
\ ??CrossCallReturnLabel_108:
\ 0000D9 12.... LCALL `??APSME_UnBindRequest::?relay`; Banked call to: APSME_UnBindRequest
\ 0000DC 7401 MOV A,#0x1
\ 0000DE 12.... LCALL ?DEALLOC_XSTACK8
\ 0000E1 E9 MOV A,R1
\ 0000E2 85..82 MOV DPL,?XSP + 0
\ 0000E5 85..83 MOV DPH,?XSP + 1
\ 0000E8 7007 JNZ ??ZDO_ProcessBindUnbindReq_8
1037 {
1038 bindStat = ZDP_SUCCESS;
\ 0000EA E4 CLR A
\ 0000EB F0 MOVX @DPTR,A
1039
1040 // Notify to save info into NV
1041 ZDApp_NVUpdate();
\ 0000EC ; Setup parameters for call to function ZDApp_NVUpdate
\ 0000EC 12.... LCALL `??ZDApp_NVUpdate::?relay`; Banked call to: ZDApp_NVUpdate
\ 0000EF 8003 SJMP ??ZDO_ProcessBindUnbindReq_7
1042 }
1043 else
1044 bindStat = ZDP_NO_ENTRY;
\ ??ZDO_ProcessBindUnbindReq_8:
\ 0000F1 7488 MOV A,#-0x78
\ ??ZDO_ProcessBindUnbindReq_2:
\ 0000F3 F0 MOVX @DPTR,A
1045 }
1046 }
1047 }
1048
1049 // Send back a response message
1050 ZDP_SendData( &(inMsg->TransSeq), &(inMsg->srcAddr),
1051 (inMsg->clusterID | ZDO_RESPONSE_BIT), 1, &bindStat,
1052 inMsg->SecurityUse );
\ ??ZDO_ProcessBindUnbindReq_7:
\ 0000F4 ; Setup parameters for call to function ZDP_SendData
\ 0000F4 E5.. MOV A,?V0
\ 0000F6 12.... LCALL ??Subroutine276_0 & 0xFFFF
\ ??CrossCallReturnLabel_621:
\ 0000F9 35.. ADDC A,?V1
\ 0000FB 12.... LCALL ??Subroutine231_0 & 0xFFFF
\ ??CrossCallReturnLabel_374:
\ 0000FE 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 000101 7401 MOV A,#0x1
\ 000103 12.... LCALL ?XSTACK_DISP100_8
\ 000106 88.. MOV ?V2,R0
\ 000108 89.. MOV ?V3,R1
\ 00010A 78.. MOV R0,#?V2
\ 00010C 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00010F 12.... LCALL ?Subroutine157 & 0xFFFF
\ ??CrossCallReturnLabel_664:
\ 000112 E0 MOVX A,@DPTR
\ 000113 F5.. MOV ?V2,A
\ 000115 A3 INC DPTR
\ 000116 E0 MOVX A,@DPTR
\ 000117 4480 ORL A,#0x80
\ 000119 F5.. MOV ?V3,A
\ 00011B 78.. MOV R0,#?V2
\ 00011D 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000120 12.... LCALL ?Subroutine143 & 0xFFFF
\ ??CrossCallReturnLabel_229:
\ 000123 12.... LCALL ?DEALLOC_XSTACK8
1053 }
\ 000126 740C MOV A,#0xc
\ 000128 02.... LJMP ?Subroutine2 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine129:
\ 000000 EE MOV A,R6
\ 000001 12.... LCALL ?Subroutine203 & 0xFFFF
\ ??CrossCallReturnLabel_442:
\ 000004 E0 MOVX A,@DPTR
\ 000005 6403 XRL A,#0x3
\ 000007 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine114:
\ 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 REQUIRE ??Subroutine231_0
\ 000007 ; // Fall through to label ??Subroutine231_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine69:
\ 000000 EE MOV A,R6
\ 000001 240B ADD A,#0xb
\ 000003 FC MOV R4,A
\ 000004 E4 CLR A
\ 000005 3F ADDC A,R7
\ 000006 FD MOV R5,A
\ 000007 8E82 MOV DPL,R6
\ 000009 8F83 MOV DPH,R7
\ 00000B A3 INC DPTR
\ 00000C A3 INC DPTR
\ 00000D A3 INC DPTR
\ 00000E A3 INC DPTR
\ 00000F A3 INC DPTR
\ 000010 A3 INC DPTR
\ 000011 A3 INC DPTR
\ 000012 A3 INC DPTR
\ 000013 A3 INC DPTR
\ 000014 12.... LCALL ?Subroutine179 & 0xFFFF
\ ??CrossCallReturnLabel_550:
\ 000017 8E82 MOV DPL,R6
\ 000019 8F83 MOV DPH,R7
\ 00001B A3 INC DPTR
\ 00001C A3 INC DPTR
\ 00001D A3 INC DPTR
\ 00001E A3 INC DPTR
\ 00001F A3 INC DPTR
\ 000020 A3 INC DPTR
\ 000021 A3 INC DPTR
\ 000022 A3 INC DPTR
\ 000023 E0 MOVX A,@DPTR
\ 000024 F9 MOV R1,A
\ 000025 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine158:
\ 000000 2414 ADD A,#0x14
\ 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
\ ?Subroutine203:
\ 000000 12.... LCALL ?Subroutine217 & 0xFFFF
\ ??CrossCallReturnLabel_711:
\ 000003 3F ADDC A,R7
\ 000004 F583 MOV DPH,A
\ 000006 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine143:
\ 000000 7901 MOV R1,#0x1
\ 000002 E5.. MOV A,?V0
\ 000004 2402 ADD A,#0x2
\ 000006 FC MOV R4,A
\ 000007 E4 CLR A
\ 000008 35.. ADDC A,?V1
\ 00000A FD MOV R5,A
\ 00000B E5.. MOV A,?V0
\ 00000D 240F ADD A,#0xf
\ 00000F FA MOV R2,A
\ 000010 E4 CLR A
\ 000011 35.. ADDC A,?V1
\ 000013 12.... LCALL ?Subroutine207 & 0xFFFF
\ ??CrossCallReturnLabel_444:
\ 000016 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine126:
\ 000000 12.... LCALL `??NLME_GetExtAddr::?relay`; Banked call to: NLME_GetExtAddr
\ 000003 8A.. MOV ?V2,R2
\ 000005 8B.. MOV ?V3,R3
\ 000007 AC.. MOV R4,?V2
\ 000009 AD.. MOV R5,?V3
\ 00000B 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine207:
\ 000000 FB MOV R3,A
\ 000001 REQUIRE ??Subroutine245_0
\ 000001 ; // Fall through to label ??Subroutine245_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine245_0:
\ 000000 12.... LCALL `??ZDP_SendData::?relay`; Banked call to: ZDP_SendData
\ 000003 7405 MOV A,#0x5
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine157:
\ 000000 E5.. MOV A,?V0
\ 000002 240C ADD A,#0xc
\ 000004 REQUIRE ??Subroutine284_0
\ 000004 ; // Fall through to label ??Subroutine284_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine284_0:
\ 000000 12.... LCALL ?Subroutine205 & 0xFFFF
\ ??CrossCallReturnLabel_675:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine205:
\ 000000 F582 MOV DPL,A
\ 000002 E4 CLR A
\ 000003 REQUIRE ??Subroutine285_0
\ 000003 ; // Fall through to label ??Subroutine285_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine285_0:
\ 000000 35.. ADDC A,?V1
\ 000002 F583 MOV DPH,A
\ 000004 22 RET
1054
1055 /*********************************************************************
1056 * @fn ZDO_UpdateAddrManager
1057 *
1058 * @brief Update the Address Manager.
1059 *
1060 * @param nwkAddr - network address
1061 * @param extAddr - extended address
1062 *
1063 * @return none
1064 */
\ In segment BANKED_CODE, align 1, keep-with-next
1065 void ZDO_UpdateAddrManager( uint16 nwkAddr, uint8 *extAddr )
\ ZDO_UpdateAddrManager:
1066 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 13
\ 000004 74F3 MOV A,#-0xd
\ 000006 12.... LCALL ?ALLOC_XSTACK8
1067 AddrMgrEntry_t addrEntry;
1068
1069 // Update the address manager
1070 addrEntry.user = ADDRMGR_USER_DEFAULT;
\ 000009 85..82 MOV DPL,?XSP + 0
\ 00000C 85..83 MOV DPH,?XSP + 1
\ 00000F E4 CLR A
\ 000010 F0 MOVX @DPTR,A
1071 addrEntry.nwkAddr = nwkAddr;
\ 000011 04 INC A
\ 000012 12.... LCALL ?XSTACK_DISP0_8
\ 000015 12.... LCALL ??Subroutine242_0 & 0xFFFF
1072 AddrMgrExtAddrSet( addrEntry.extAddr, extAddr );
\ ??CrossCallReturnLabel_429:
\ 000018 ; Setup parameters for call to function AddrMgrExtAddrSet
\ 000018 7403 MOV A,#0x3
\ 00001A 12.... LCALL ?XSTACK_DISP0_8
\ 00001D AA82 MOV R2,DPL
\ 00001F AB83 MOV R3,DPH
\ 000021 12.... LCALL `??AddrMgrExtAddrSet::?relay`; Banked call to: AddrMgrExtAddrSet
1073 AddrMgrEntryUpdate( &addrEntry );
\ 000024 ; Setup parameters for call to function AddrMgrEntryUpdate
\ 000024 AA.. MOV R2,?XSP + 0
\ 000026 AB.. MOV R3,?XSP + 1
\ 000028 12.... LCALL `??AddrMgrEntryUpdate::?relay`; Banked call to: AddrMgrEntryUpdate
1074 }
\ 00002B 740D MOV A,#0xd
\ 00002D 12.... LCALL ?DEALLOC_XSTACK8
\ 000030 02.... LJMP ?Subroutine0 & 0xFFFF
1075
1076 /*********************************************************************
1077 * @fn ZDO_ProcessServerDiscReq
1078 *
1079 * @brief Process the Server_Discovery_req message.
1080 *
1081 * @param inMsg - incoming message (request)
1082 *
1083 * @return none
1084 */
\ In segment BANKED_CODE, align 1, keep-with-next
1085 void ZDO_ProcessServerDiscReq( zdoIncomingMsg_t *inMsg )
\ ZDO_ProcessServerDiscReq:
1086 {
\ 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 12.... LCALL ?Subroutine130 & 0xFFFF
1087 uint16 serverMask = BUILD_UINT16( inMsg->asdu[0], inMsg->asdu[1] );
1088 uint16 matchMask = serverMask & ZDO_Config_Node_Descriptor.ServerMask;
\ ??CrossCallReturnLabel_438:
\ 000008 12.... LCALL ?Subroutine215 & 0xFFFF
\ ??CrossCallReturnLabel_344:
\ 00000B 12.... LCALL ?Subroutine190 & 0xFFFF
\ ??CrossCallReturnLabel_310:
\ 00000E F8 MOV R0,A
\ 00000F 90.... MOV DPTR,#ZDO_Config_Node_Descriptor + 8
\ 000012 E0 MOVX A,@DPTR
\ 000013 58 ANL A,R0
\ 000014 F5.. MOV ?V0,A
\ 000016 A3 INC DPTR
\ 000017 E0 MOVX A,@DPTR
\ 000018 59 ANL A,R1
\ 000019 F5.. MOV ?V1,A
1089
1090 if ( matchMask )
\ 00001B E5.. MOV A,?V0
\ 00001D 45.. ORL A,?V1
\ 00001F 601B JZ ??ZDO_ProcessServerDiscReq_0
1091 {
1092 ZDP_ServerDiscRsp( inMsg->TransSeq, &(inMsg->srcAddr), ZSUCCESS,
1093 ZDAppNwkAddr.addr.shortAddr, matchMask, inMsg->SecurityUse );
\ 000021 ; Setup parameters for call to function ZDP_ServerDiscRsp
\ 000021 78.. MOV R0,#?V0
\ 000023 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000026 90.... MOV DPTR,#ZDAppNwkAddr
\ 000029 12.... LCALL ?PUSH_XSTACK8_X_TWO
\ 00002C 12.... LCALL ?Subroutine146 & 0xFFFF
1094 }
\ ??CrossCallReturnLabel_236:
\ 00002F 7C00 MOV R4,#0x0
\ 000031 12.... LCALL ?Subroutine138 & 0xFFFF
\ ??CrossCallReturnLabel_222:
\ 000034 12.... LCALL `??ZDP_ServerDiscRsp::?relay`; Banked call to: ZDP_ServerDiscRsp
\ 000037 7404 MOV A,#0x4
\ 000039 12.... LCALL ?DEALLOC_XSTACK8
1095 }
\ ??ZDO_ProcessServerDiscReq_0:
\ 00003C 02.... LJMP ??Subroutine225_0 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine130:
\ 000000 EA MOV A,R2
\ 000001 FE MOV R6,A
\ 000002 EB MOV A,R3
\ 000003 FF MOV R7,A
\ 000004 ; Setup parameters for call to function NLME_PermitJoiningRequest
\ 000004 REQUIRE ??Subroutine244_0
\ 000004 ; // Fall through to label ??Subroutine244_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine244_0:
\ 000000 EA MOV A,R2
\ 000001 12.... LCALL ?Subroutine203 & 0xFFFF
\ ??CrossCallReturnLabel_443:
\ 000004 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine146:
\ 000000 12.... LCALL ?Subroutine198 & 0xFFFF
\ ??CrossCallReturnLabel_318:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine138:
\ 000000 12.... LCALL ?Subroutine197 & 0xFFFF
\ ??CrossCallReturnLabel_316:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine190:
\ 000000 12.... LCALL ??Subroutine289_0 & 0xFFFF
\ ??CrossCallReturnLabel_689:
\ 000003 EA MOV A,R2
\ 000004 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine289_0:
\ 000000 12.... LCALL ??Subroutine281_0 & 0xFFFF
\ ??CrossCallReturnLabel_698:
\ 000003 F9 MOV R1,A
\ 000004 22 RET
1096
1097 /*********************************************************************
1098 * Call Back Functions from APS - API
1099 */
1100
1101 /*********************************************************************
1102 * @fn ZDO_EndDeviceTimeoutCB
1103 *
1104 * @brief This function handles the binding timer for the End
1105 * Device Bind command.
1106 *
1107 * @param none
1108 *
1109 * @return none
1110 */
\ In segment BANKED_CODE, align 1, keep-with-next
1111 void ZDO_EndDeviceTimeoutCB( void )
\ ZDO_EndDeviceTimeoutCB:
1112 {
\ 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
1113 #if defined ( REFLECTOR )
1114 byte stat;
1115 if ( ZDO_EDBind )
\ 00000A 90.... MOV DPTR,#ZDO_EDBind
\ 00000D 12.... LCALL ??Subroutine260_0 & 0xFFFF
\ ??CrossCallReturnLabel_509:
\ 000010 7003 JNZ $+5
\ 000012 02.... LJMP ??ZDO_EndDeviceTimeoutCB_0 & 0xFFFF
1116 {
1117 stat = ZDO_EDBind->status;
1118
1119 // Send the response message to the first sent
1120 ZDO_SendEDBindRsp( ZDO_EDBind->SrcTransSeq, &(ZDO_EDBind->SrcAddr),
1121 stat, ZDO_EDBind->SecurityUse );
\ 000015 E8 MOV A,R0
\ 000016 2416 ADD A,#0x16
\ 000018 F582 MOV DPL,A
\ 00001A E4 CLR A
\ 00001B 39 ADDC A,R1
\ 00001C F583 MOV DPH,A
\ 00001E 12.... LCALL ??Subroutine229_0 & 0xFFFF
\ ??CrossCallReturnLabel_370:
\ 000021 12.... LCALL ?Subroutine50 & 0xFFFF
\ ??CrossCallReturnLabel_74:
\ 000024 F583 MOV DPH,A
\ 000026 8882 MOV DPL,R0
\ 000028 E0 MOVX A,@DPTR
\ 000029 C0E0 PUSH A
\ 00002B 7401 MOV A,#0x1
\ 00002D 12.... LCALL ?XSTACK_DISP0_8
\ 000030 D0E0 POP A
\ 000032 12.... LCALL ?Subroutine50 & 0xFFFF
\ ??CrossCallReturnLabel_73:
\ 000035 C8 XCH A,R0
\ 000036 2415 ADD A,#0x15
\ 000038 12.... LCALL ?Subroutine99 & 0xFFFF
\ ??CrossCallReturnLabel_461:
\ 00003B 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 00003E 7401 MOV A,#0x1
\ 000040 12.... LCALL ?XSTACK_DISP100_8
\ 000043 88.. MOV ?V0,R0
\ 000045 89.. MOV ?V1,R1
\ 000047 78.. MOV R0,#?V0
\ 000049 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00004C 75..20 MOV ?V0,#0x20
\ 00004F 75..80 MOV ?V1,#-0x80
\ 000052 78.. MOV R0,#?V0
\ 000054 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000057 7901 MOV R1,#0x1
\ 000059 90.... MOV DPTR,#ZDO_EDBind
\ 00005C E0 MOVX A,@DPTR
\ 00005D 29 ADD A,R1
\ 00005E FC MOV R4,A
\ 00005F A3 INC DPTR
\ 000060 E0 MOVX A,@DPTR
\ 000061 3400 ADDC A,#0x0
\ 000063 FD MOV R5,A
\ 000064 7406 MOV A,#0x6
\ 000066 12.... LCALL ?XSTACK_DISP101_8
\ 000069 12.... LCALL ?Subroutine161 & 0xFFFF
\ ??CrossCallReturnLabel_267:
\ 00006C 12.... LCALL ?DEALLOC_XSTACK8
\ 00006F ; Setup parameters for call to function HalLcdWriteString
\ 00006F 7901 MOV R1,#0x1
\ 000071 7A.. MOV R2,#`?<Constant "End Device Bind">` & 0xff
\ 000073 7B.. MOV R3,#(`?<Constant "End Device Bind">` >> 8) & 0xff
\ 000075 12.... LCALL `??HalLcdWriteString::?relay`; Banked call to: HalLcdWriteString
\ 000078 85..82 MOV DPL,?XSP + 0
\ 00007B 85..83 MOV DPH,?XSP + 1
\ 00007E E0 MOVX A,@DPTR
\ 00007F 7902 MOV R1,#0x2
\ 000081 7006 JNZ ??ZDO_EndDeviceTimeoutCB_1
\ 000083 ; Setup parameters for call to function HalLcdWriteString
\ 000083 7A.. MOV R2,#`?<Constant "Success Sent">` & 0xff
\ 000085 7B.. MOV R3,#(`?<Constant "Success Sent">` >> 8) & 0xff
\ 000087 8004 SJMP ??ZDO_EndDeviceTimeoutCB_2
\ ??ZDO_EndDeviceTimeoutCB_1:
\ 000089 ; Setup parameters for call to function HalLcdWriteString
\ 000089 7A.. MOV R2,#`?<Constant "Timeout">` & 0xff
\ 00008B 7B.. MOV R3,#(`?<Constant "Timeout">` >> 8) & 0xff
\ ??ZDO_EndDeviceTimeoutCB_2:
\ 00008D 12.... LCALL `??HalLcdWriteString::?relay`; Banked call to: HalLcdWriteString
1122
1123 ZDO_RemoveEndDeviceBind();
\ 000090 90.... MOV DPTR,#ZDO_EDBind
\ 000093 12.... LCALL ??Subroutine260_0 & 0xFFFF
\ ??CrossCallReturnLabel_510:
\ 000096 603C JZ ??ZDO_EndDeviceTimeoutCB_0
\ 000098 E8 MOV A,R0
\ 000099 2410 ADD A,#0x10
\ 00009B F582 MOV DPL,A
\ 00009D E4 CLR A
\ 00009E 39 ADDC A,R1
\ 00009F 12.... LCALL ??Subroutine259_0 & 0xFFFF
\ ??CrossCallReturnLabel_518:
\ 0000A2 600B JZ ??CrossCallReturnLabel_420
\ 0000A4 ; Setup parameters for call to function osal_mem_free
\ 0000A4 90.... MOV DPTR,#ZDO_EDBind
\ 0000A7 12.... LCALL ??Subroutine275_0 & 0xFFFF
\ ??CrossCallReturnLabel_589:
\ 0000AA 2410 ADD A,#0x10
\ 0000AC 12.... LCALL ?Subroutine54 & 0xFFFF
\ ??CrossCallReturnLabel_420:
\ 0000AF 90.... MOV DPTR,#ZDO_EDBind
\ 0000B2 12.... LCALL ??Subroutine275_0 & 0xFFFF
\ ??CrossCallReturnLabel_590:
\ 0000B5 2413 ADD A,#0x13
\ 0000B7 12.... LCALL ?Subroutine53 & 0xFFFF
\ ??CrossCallReturnLabel_522:
\ 0000BA 600B JZ ??CrossCallReturnLabel_421
\ 0000BC ; Setup parameters for call to function osal_mem_free
\ 0000BC 90.... MOV DPTR,#ZDO_EDBind
\ 0000BF 12.... LCALL ??Subroutine275_0 & 0xFFFF
\ ??CrossCallReturnLabel_591:
\ 0000C2 2413 ADD A,#0x13
\ 0000C4 12.... LCALL ?Subroutine54 & 0xFFFF
\ ??CrossCallReturnLabel_421:
\ 0000C7 ; Setup parameters for call to function osal_mem_free
\ 0000C7 90.... MOV DPTR,#ZDO_EDBind
\ 0000CA 12.... LCALL ??Subroutine241_0 & 0xFFFF
\ ??CrossCallReturnLabel_419:
\ 0000CD 90.... MOV DPTR,#ZDO_EDBind
\ 0000D0 E4 CLR A
\ 0000D1 F0 MOVX @DPTR,A
\ 0000D2 A3 INC DPTR
\ 0000D3 F0 MOVX @DPTR,A
1124 }
1125 #endif // REFLECTOR
1126 }
\ ??ZDO_EndDeviceTimeoutCB_0:
\ 0000D4 02.... LJMP ?Subroutine4 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine50:
\ 000000 F0 MOVX @DPTR,A
\ 000001 ; Setup parameters for call to function ZDP_SendData
\ 000001 90.... MOV DPTR,#ZDO_EDBind
\ 000004 12.... LCALL ?Subroutine220 & 0xFFFF
\ ??CrossCallReturnLabel_651:
\ 000007 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine54:
\ 000000 F582 MOV DPL,A
\ 000002 E4 CLR A
\ 000003 38 ADDC A,R0
\ 000004 REQUIRE ??Subroutine240_0
\ 000004 ; // Fall through to label ??Subroutine240_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine240_0:
\ 000000 F583 MOV DPH,A
\ 000002 REQUIRE ??Subroutine241_0
\ 000002 ; // Fall through to label ??Subroutine241_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine53:
\ 000000 F582 MOV DPL,A
\ 000002 E4 CLR A
\ 000003 38 ADDC A,R0
\ 000004 REQUIRE ??Subroutine259_0
\ 000004 ; // Fall through to label ??Subroutine259_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine259_0:
\ 000000 F583 MOV DPH,A
\ 000002 REQUIRE ??Subroutine260_0
\ 000002 ; // Fall through to label ??Subroutine260_0
1127
1128 /*********************************************************************
1129 * Optional Management Messages
1130 */
1131
1132 /*********************************************************************
1133 * @fn ZDO_ProcessMgmtLqiReq
1134 *
1135 * @brief This function handles parsing the incoming Management
1136 * LQI request and generate the response.
1137 *
1138 * Note: This function will limit the number of items returned
1139 * to ZDO_MAX_LQI_ITEMS items.
1140 *
1141 * @param inMsg - incoming message (request)
1142 *
1143 * @return none
1144 */
\ In segment BANKED_CODE, align 1, keep-with-next
1145 void ZDO_ProcessMgmtLqiReq( zdoIncomingMsg_t *inMsg )
\ ZDO_ProcessMgmtLqiReq:
1146 {
\ 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: 42
\ 000005 74D6 MOV A,#-0x2a
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A 7404 MOV A,#0x4
\ 00000C 12.... LCALL ?XSTACK_DISP0_8
\ 00000F 12.... LCALL ??Subroutine242_0 & 0xFFFF
1147 byte x;
1148 byte index;
1149 byte numItems;
1150 byte maxItems;
1151 ZDP_MgmtLqiItem_t* table = NULL;
\ ??CrossCallReturnLabel_430:
\ 000012 7402 MOV A,#0x2
\ 000014 12.... LCALL ?XSTACK_DISP0_8
\ 000017 E4 CLR A
\ 000018 F0 MOVX @DPTR,A
\ 000019 A3 INC DPTR
\ 00001A F0 MOVX @DPTR,A
1152 ZDP_MgmtLqiItem_t* item;
1153 neighborEntry_t entry;
1154 byte aItems;
1155 associated_devices_t *aDevice;
1156 AddrMgrEntry_t nwkEntry;
1157 uint8 StartIndex = inMsg->asdu[0];
\ 00001B 7404 MOV A,#0x4
\ 00001D 12.... LCALL ?XSTACK_DISP0_8
\ 000020 12.... LCALL ?Subroutine87 & 0xFFFF
\ ??CrossCallReturnLabel_140:
\ 000023 12.... LCALL ??Subroutine238_0 & 0xFFFF
\ ??CrossCallReturnLabel_394:
\ 000026 F5.. MOV ?V7,A
1158
1159 // Get the number of neighbor items
1160 NLME_GetRequest( nwkNumNeighborTableEntries, 0, &maxItems );
\ 000028 ; Setup parameters for call to function NLME_GetRequest
\ 000028 AC.. MOV R4,?XSP + 0
\ 00002A AD.. MOV R5,?XSP + 1
\ 00002C 7A00 MOV R2,#0x0
\ 00002E 7B00 MOV R3,#0x0
\ 000030 799C MOV R1,#-0x64
\ 000032 12.... LCALL `??NLME_GetRequest::?relay`; Banked call to: NLME_GetRequest
1161
1162 // Get the number of associated items
1163 aItems = (uint8)AssocCount( PARENT, CHILD_FFD_RX_IDLE );
\ 000035 ; Setup parameters for call to function AssocCount
\ 000035 7A04 MOV R2,#0x4
\ 000037 7900 MOV R1,#0x0
\ 000039 12.... LCALL `??AssocCount::?relay`; Banked call to: AssocCount
\ 00003C 7401 MOV A,#0x1
\ 00003E 12.... LCALL ?XSTACK_DISP0_8
\ 000041 EA MOV A,R2
\ 000042 12.... LCALL ?Subroutine31 & 0xFFFF
1164
1165 // Total number of items
1166 maxItems += aItems;
\ ??CrossCallReturnLabel_33:
\ 000045 2A ADD A,R2
\ 000046 F0 MOVX @DPTR,A
1167
1168 // Start with the supplied index
1169 if ( maxItems > StartIndex )
\ 000047 F8 MOV R0,A
\ 000048 E5.. MOV A,?V7
\ 00004A C3 CLR C
\ 00004B 98 SUBB A,R0
\ 00004C 4003 JC $+5
\ 00004E 02.... LJMP ??ZDO_ProcessMgmtLqiReq_0 & 0xFFFF
1170 {
1171 numItems = maxItems - StartIndex;
\ 000051 E0 MOVX A,@DPTR
\ 000052 C3 CLR C
\ 000053 95.. SUBB A,?V7
\ 000055 F5.. MOV ?V1,A
1172
1173 // limit the size of the list
1174 if ( numItems > ZDO_MAX_LQI_ITEMS )
\ 000057 C3 CLR C
\ 000058 9404 SUBB A,#0x4
\ 00005A 4003 JC ??ZDO_ProcessMgmtLqiReq_1
1175 numItems = ZDO_MAX_LQI_ITEMS;
\ 00005C 75..03 MOV ?V1,#0x3
1176
1177 // Allocate the memory to build the table
1178 table = (ZDP_MgmtLqiItem_t*)osal_mem_alloc( (short)
1179 ( numItems * sizeof( ZDP_MgmtLqiItem_t ) ) );
\ ??ZDO_ProcessMgmtLqiReq_1:
\ 00005F ; Setup parameters for call to function osal_mem_alloc
\ 00005F E5.. MOV A,?V1
\ 000061 75F01A MOV B,#0x1a
\ 000064 A4 MUL AB
\ 000065 FA MOV R2,A
\ 000066 ABF0 MOV R3,B
\ 000068 12.... LCALL `??osal_mem_alloc::?relay`; Banked call to: osal_mem_alloc
\ 00006B 7402 MOV A,#0x2
\ 00006D 12.... LCALL ?XSTACK_DISP0_8
\ 000070 12.... LCALL ??Subroutine242_0 & 0xFFFF
1180
1181 if ( table != NULL )
\ ??CrossCallReturnLabel_431:
\ 000073 7402 MOV A,#0x2
\ 000075 12.... LCALL ?XSTACK_DISP0_8
\ 000078 12.... LCALL ??Subroutine260_0 & 0xFFFF
\ ??CrossCallReturnLabel_511:
\ 00007B 7003 JNZ $+5
\ 00007D 02.... LJMP ??ZDO_ProcessMgmtLqiReq_2 & 0xFFFF
1182 {
1183 x = 0;
\ 000080 75..00 MOV ?V6,#0x0
1184 item = table;
\ 000083 7402 MOV A,#0x2
\ 000085 12.... LCALL ?XSTACK_DISP0_8
\ 000088 12.... LCALL ??Subroutine235_0 & 0xFFFF
1185 index = StartIndex;
\ ??CrossCallReturnLabel_389:
\ 00008B 85.... MOV ?V0,?V7
\ 00008E 807B SJMP ??ZDO_ProcessMgmtLqiReq_3
1186
1187 // Loop through associated items and build list
1188 for ( ; x < numItems; x++ )
1189 {
1190 if ( index < aItems )
1191 {
1192 // get next associated device
1193 aDevice = AssocFindDevice( index++ );
1194
1195 // set basic fields
1196 item->panID = _NIB.nwkPanId;
1197 osal_cpyExtAddr( item->extPanID, _NIB.extendedPANID );
1198 item->nwkAddr = aDevice->shortAddr;
1199 item->permit = ZDP_MGMT_BOOL_UNKNOWN;
1200 item->depth = 0xFF;
1201 item->lqi = aDevice->linkInfo.rxLqi;
1202
1203 // set extented address
1204 nwkEntry.user = ADDRMGR_USER_DEFAULT;
1205 nwkEntry.nwkAddr = aDevice->shortAddr;
1206
1207 if ( AddrMgrEntryLookupNwk( &nwkEntry ) == TRUE )
1208 {
1209 osal_cpyExtAddr( item->extAddr, nwkEntry.extAddr );
1210 }
1211 else
1212 {
1213 osal_memset( item->extAddr, 0xFF, Z_EXTADDR_LEN );
\ ??ZDO_ProcessMgmtLqiReq_4:
\ 000090 ; Setup parameters for call to function osal_memset
\ 000090 12.... LCALL ?Subroutine154 & 0xFFFF
1214 }
1215
1216 // use association info to set other fields
1217 if ( aDevice->nodeRelation == PARENT )
\ ??CrossCallReturnLabel_253:
\ 000093 85..82 MOV DPL,?V4
\ 000096 85..83 MOV DPH,?V5
\ 000099 A3 INC DPTR
\ 00009A A3 INC DPTR
\ 00009B A3 INC DPTR
\ 00009C A3 INC DPTR
\ 00009D E0 MOVX A,@DPTR
\ 00009E 702D JNZ ??ZDO_ProcessMgmtLqiReq_5
1218 {
1219 if ( aDevice->shortAddr == 0 )
\ 0000A0 85..82 MOV DPL,?V4
\ 0000A3 85..83 MOV DPH,?V5
\ 0000A6 12.... LCALL ??Subroutine260_0 & 0xFFFF
\ ??CrossCallReturnLabel_512:
\ 0000A9 700C JNZ ??ZDO_ProcessMgmtLqiReq_6
1220 {
1221 item->devType = ZDP_MGMT_DT_COORD;
\ 0000AB 12.... LCALL ?Subroutine142 & 0xFFFF
\ ??CrossCallReturnLabel_542:
\ 0000AE F0 MOVX @DPTR,A
1222 item->depth = 0;
\ 0000AF EE MOV A,R6
\ 0000B0 2418 ADD A,#0x18
\ 0000B2 12.... LCALL ??Subroutine264_0 & 0xFFFF
1223 }
\ ??CrossCallReturnLabel_538:
\ 0000B5 8010 SJMP ??ZDO_ProcessMgmtLqiReq_7
1224 else
1225 {
1226 item->devType = ZDP_MGMT_DT_ROUTER;
\ ??ZDO_ProcessMgmtLqiReq_6:
\ 0000B7 12.... LCALL ?Subroutine140 & 0xFFFF
\ ??CrossCallReturnLabel_385:
\ 0000BA F0 MOVX @DPTR,A
1227 item->depth = _NIB.nodeDepth - 1;
\ 0000BB 90.... MOV DPTR,#_NIB + 52
\ 0000BE E0 MOVX A,@DPTR
\ 0000BF 14 DEC A
\ 0000C0 C0E0 PUSH A
\ 0000C2 12.... LCALL ?Subroutine162 & 0xFFFF
1228 }
1229
1230 item->rxOnIdle = ZDP_MGMT_BOOL_UNKNOWN;
1231 item->relation = ZDP_MGMT_REL_PARENT;
1232 }
\ ??CrossCallReturnLabel_271:
\ 0000C5 D0E0 POP A
\ ??ZDO_ProcessMgmtLqiReq_7:
\ 0000C7 12.... LCALL ?Subroutine13 & 0xFFFF
\ ??CrossCallReturnLabel_8:
\ 0000CA E4 CLR A
\ 0000CB 8034 SJMP ??CrossCallReturnLabel_383
1233 else
1234 {
1235 // If not parent, then it's a child
1236 item->depth = _NIB.nodeDepth + 1;
\ ??ZDO_ProcessMgmtLqiReq_5:
\ 0000CD 90.... MOV DPTR,#_NIB + 52
\ 0000D0 E0 MOVX A,@DPTR
\ 0000D1 04 INC A
\ 0000D2 C0E0 PUSH A
\ 0000D4 12.... LCALL ?Subroutine162 & 0xFFFF
\ ??CrossCallReturnLabel_272:
\ 0000D7 D0E0 POP A
\ 0000D9 12.... LCALL ?Subroutine15 & 0xFFFF
1237
1238 if ( aDevice->nodeRelation < CHILD_FFD )
\ ??CrossCallReturnLabel_12:
\ 0000DC C3 CLR C
\ 0000DD 9403 SUBB A,#0x3
\ 0000DF EE MOV A,R6
\ 0000E0 4003 JC $+5
\ 0000E2 02.... LJMP ??ZDO_ProcessMgmtLqiReq_8 & 0xFFFF
1239 {
1240 item->devType = ZDP_MGMT_DT_ENDDEV;
\ 0000E5 12.... LCALL ?Subroutine158 & 0xFFFF
1241
1242 if ( aDevice->nodeRelation == CHILD_RFD )
1243 {
1244 item->rxOnIdle = FALSE;
1245 }
1246 else
1247 {
1248 item->rxOnIdle = TRUE;
1249 }
1250 }
\ ??CrossCallReturnLabel_266:
\ 0000E8 7402 MOV A,#0x2
\ 0000EA 12.... LCALL ?Subroutine15 & 0xFFFF
\ ??CrossCallReturnLabel_13:
\ 0000ED 6401 XRL A,#0x1
\ 0000EF 7003 JNZ $+5
\ 0000F1 02.... LJMP ??ZDO_ProcessMgmtLqiReq_9 & 0xFFFF
1251 else
1252 {
1253 item->devType = ZDP_MGMT_DT_ROUTER;
1254
1255 if ( aDevice->nodeRelation == CHILD_FFD )
1256 {
1257 item->rxOnIdle = FALSE;
1258 }
1259 else
1260 {
1261 item->rxOnIdle = TRUE;
\ ??ZDO_ProcessMgmtLqiReq_10:
\ 0000F4 EE MOV A,R6
\ 0000F5 2415 ADD A,#0x15
\ 0000F7 12.... LCALL ??Subroutine234_0 & 0xFFFF
1262 }
\ ??CrossCallReturnLabel_382:
\ 0000FA F0 MOVX @DPTR,A
1263 }
1264
1265 item->relation = ZDP_MGMT_REL_CHILD;
\ 0000FB EE MOV A,R6
\ 0000FC 2416 ADD A,#0x16
\ 0000FE 12.... LCALL ??Subroutine234_0 & 0xFFFF
\ ??CrossCallReturnLabel_383:
\ 000101 F0 MOVX @DPTR,A
1266 }
1267
1268 item++;
\ 000102 EE MOV A,R6
\ 000103 241A ADD A,#0x1a
\ 000105 FE MOV R6,A
\ 000106 5001 JNC ??ZDO_ProcessMgmtLqiReq_11
\ 000108 0F INC R7
\ ??ZDO_ProcessMgmtLqiReq_11:
\ 000109 05.. INC ?V6
\ ??ZDO_ProcessMgmtLqiReq_3:
\ 00010B E5.. MOV A,?V6
\ 00010D C3 CLR C
\ 00010E 95.. SUBB A,?V1
\ 000110 4003 JC $+5
\ 000112 02.... LJMP ??ZDO_ProcessMgmtLqiReq_12 & 0xFFFF
\ 000115 7401 MOV A,#0x1
\ 000117 12.... LCALL ?XSTACK_DISP0_8
\ 00011A E0 MOVX A,@DPTR
\ 00011B F8 MOV R0,A
\ 00011C E5.. MOV A,?V0
\ 00011E C3 CLR C
\ 00011F 98 SUBB A,R0
\ 000120 4003 JC $+5
\ 000122 02.... LJMP ??ZDO_ProcessMgmtLqiReq_13 & 0xFFFF
\ 000125 ; Setup parameters for call to function AssocFindDevice
\ 000125 A9.. MOV R1,?V0
\ 000127 12.... LCALL `??AssocFindDevice::?relay`; Banked call to: AssocFindDevice
\ 00012A 8A.. MOV ?V4,R2
\ 00012C 8B.. MOV ?V5,R3
\ 00012E 05.. INC ?V0
\ 000130 90.... MOV DPTR,#_NIB + 33
\ 000133 12.... LCALL ?Subroutine16 & 0xFFFF
\ ??CrossCallReturnLabel_15:
\ 000136 85..82 MOV DPL,?V4
\ 000139 85..83 MOV DPH,?V5
\ 00013C 12.... LCALL ??Subroutine253_0 & 0xFFFF
\ ??CrossCallReturnLabel_465:
\ 00013F 12.... LCALL ?Subroutine159 & 0xFFFF
\ ??CrossCallReturnLabel_379:
\ 000142 F583 MOV DPH,A
\ 000144 E8 MOV A,R0
\ 000145 F0 MOVX @DPTR,A
\ 000146 A3 INC DPTR
\ 000147 E9 MOV A,R1
\ 000148 12.... LCALL ?Subroutine12 & 0xFFFF
\ ??CrossCallReturnLabel_6:
\ 00014B 85..82 MOV DPL,?V4
\ 00014E 85..83 MOV DPH,?V5
\ 000151 A3 INC DPTR
\ 000152 A3 INC DPTR
\ 000153 A3 INC DPTR
\ 000154 A3 INC DPTR
\ 000155 A3 INC DPTR
\ 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 C0E0 PUSH A
\ 00015E 12.... LCALL ?Subroutine163 & 0xFFFF
\ ??CrossCallReturnLabel_273:
\ 000161 D0E0 POP A
\ 000163 F0 MOVX @DPTR,A
\ 000164 7406 MOV A,#0x6
\ 000166 12.... LCALL ?XSTACK_DISP0_8
\ 000169 E4 CLR A
\ 00016A 12.... LCALL ?Subroutine166 & 0xFFFF
\ ??CrossCallReturnLabel_275:
\ 00016D 12.... LCALL ??Subroutine253_0 & 0xFFFF
\ ??CrossCallReturnLabel_466:
\ 000170 7407 MOV A,#0x7
\ 000172 12.... LCALL ?XSTACK_DISP0_8
\ 000175 12.... LCALL ??Subroutine294_0 & 0xFFFF
\ ??CrossCallReturnLabel_730:
\ 000178 ; Setup parameters for call to function AddrMgrEntryLookupNwk
\ 000178 7406 MOV A,#0x6
\ 00017A 12.... LCALL ?XSTACK_DISP101_8
\ 00017D 12.... LCALL `??AddrMgrEntryLookupNwk::?relay`; Banked call to: AddrMgrEntryLookupNwk
\ 000180 E9 MOV A,R1
\ 000181 6401 XRL A,#0x1
\ 000183 6003 JZ $+5
\ 000185 02.... LJMP ??ZDO_ProcessMgmtLqiReq_4 & 0xFFFF
\ 000188 ; Setup parameters for call to function sAddrExtCpy
\ 000188 7409 MOV A,#0x9
\ 00018A 12.... LCALL ?XSTACK_DISP0_8
\ 00018D AC82 MOV R4,DPL
\ 00018F AD83 MOV R5,DPH
\ 000191 EE MOV A,R6
\ 000192 240A ADD A,#0xa
\ 000194 FA MOV R2,A
\ 000195 E4 CLR A
\ 000196 3F ADDC A,R7
\ 000197 FB MOV R3,A
\ 000198 12.... LCALL `??sAddrExtCpy::?relay`; Banked call to: sAddrExtCpy
\ 00019B 02.... LJMP ??CrossCallReturnLabel_253 & 0xFFFF
\ ??ZDO_ProcessMgmtLqiReq_8:
\ 00019E 12.... LCALL ??Subroutine233_0 & 0xFFFF
\ ??CrossCallReturnLabel_384:
\ 0001A1 12.... LCALL ?Subroutine15 & 0xFFFF
\ ??CrossCallReturnLabel_14:
\ 0001A4 6403 XRL A,#0x3
\ 0001A6 6003 JZ $+5
\ 0001A8 02.... LJMP ??ZDO_ProcessMgmtLqiReq_10 & 0xFFFF
\ ??ZDO_ProcessMgmtLqiReq_9:
\ 0001AB EE MOV A,R6
\ 0001AC 2415 ADD A,#0x15
\ 0001AE 12.... LCALL ??Subroutine264_0 & 0xFFFF
1269 }
\ ??CrossCallReturnLabel_539:
\ 0001B1 02.... LJMP ??CrossCallReturnLabel_382 & 0xFFFF
1270 else
1271 {
1272 if ( StartIndex <= aItems )
\ ??ZDO_ProcessMgmtLqiReq_13:
\ 0001B4 E0 MOVX A,@DPTR
\ 0001B5 C3 CLR C
\ 0001B6 95.. SUBB A,?V7
\ 0001B8 4005 JC ??ZDO_ProcessMgmtLqiReq_14
1273 // Start with 1st neighbor
1274 index = 0;
\ 0001BA 75..00 MOV ?V0,#0x0
\ 0001BD 801C SJMP ??ZDO_ProcessMgmtLqiReq_15
1275 else
1276 // Start with >1st neighbor
1277 index = StartIndex - aItems;
\ ??ZDO_ProcessMgmtLqiReq_14:
\ 0001BF E5.. MOV A,?V7
\ 0001C1 C3 CLR C
\ 0001C2 98 SUBB A,R0
\ 0001C3 F5.. MOV ?V0,A
\ 0001C5 8014 SJMP ??ZDO_ProcessMgmtLqiReq_15
1278 break;
1279 }
1280 }
1281
1282 // Loop through neighbor items and finish list
1283 for ( ; x < numItems; x++ )
1284 {
1285 // Add next neighbor table item
1286 NLME_GetRequest( nwkNeighborTable, index++, &entry );
1287
1288 // set ZDP_MgmtLqiItem_t fields
1289 item->panID = entry.panId;
1290 osal_cpyExtAddr( item->extPanID, _NIB.extendedPANID );
1291 osal_memset( item->extAddr, 0xFF, Z_EXTADDR_LEN );
1292 item->nwkAddr = entry.neighborAddress;
1293 item->rxOnIdle = ZDP_MGMT_BOOL_UNKNOWN;
1294 item->relation = ZDP_MGMT_REL_UNKNOWN;
1295 item->permit = ZDP_MGMT_BOOL_UNKNOWN;
1296 item->depth = 0xFF;
1297 item->lqi = entry.linkInfo.rxLqi;
1298
1299 if ( item->nwkAddr == 0 )
1300 {
1301 item->devType = ZDP_MGMT_DT_COORD;
1302 }
1303 else
1304 {
1305 item->devType = ZDP_MGMT_DT_ROUTER;
\ ??ZDO_ProcessMgmtLqiReq_16:
\ 0001C7 12.... LCALL ?Subroutine140 & 0xFFFF
1306 }
\ ??CrossCallReturnLabel_386:
\ 0001CA F0 MOVX @DPTR,A
1307
1308 item++;
\ 0001CB EE MOV A,R6
\ 0001CC 241A ADD A,#0x1a
\ 0001CE FE MOV R6,A
\ 0001CF 5001 JNC ??ZDO_ProcessMgmtLqiReq_17
\ 0001D1 0F INC R7
\ ??ZDO_ProcessMgmtLqiReq_17:
\ 0001D2 05.. INC ?V6
\ ??ZDO_ProcessMgmtLqiReq_12:
\ 0001D4 E5.. MOV A,?V6
\ 0001D6 C3 CLR C
\ 0001D7 95.. SUBB A,?V1
\ 0001D9 5056 JNC ??ZDO_ProcessMgmtLqiReq_2
\ ??ZDO_ProcessMgmtLqiReq_15:
\ 0001DB ; Setup parameters for call to function NLME_GetRequest
\ 0001DB 7413 MOV A,#0x13
\ 0001DD 12.... LCALL ?XSTACK_DISP102_8
\ 0001E0 AA.. MOV R2,?V0
\ 0001E2 7B00 MOV R3,#0x0
\ 0001E4 7987 MOV R1,#-0x79
\ 0001E6 12.... LCALL `??NLME_GetRequest::?relay`; Banked call to: NLME_GetRequest
\ 0001E9 05.. INC ?V0
\ 0001EB 741D MOV A,#0x1d
\ 0001ED 12.... LCALL ?XSTACK_DISP0_8
\ 0001F0 12.... LCALL ?Subroutine16 & 0xFFFF
\ ??CrossCallReturnLabel_16:
\ 0001F3 ; Setup parameters for call to function osal_memset
\ 0001F3 12.... LCALL ?Subroutine154 & 0xFFFF
\ ??CrossCallReturnLabel_254:
\ 0001F6 EE MOV A,R6
\ 0001F7 2412 ADD A,#0x12
\ 0001F9 F8 MOV R0,A
\ 0001FA E4 CLR A
\ 0001FB 3F ADDC A,R7
\ 0001FC F9 MOV R1,A
\ 0001FD 7413 MOV A,#0x13
\ 0001FF 12.... LCALL ?XSTACK_DISP0_8
\ 000202 12.... LCALL ??Subroutine256_0 & 0xFFFF
\ ??CrossCallReturnLabel_486:
\ 000205 8882 MOV DPL,R0
\ 000207 8983 MOV DPH,R1
\ 000209 EA MOV A,R2
\ 00020A F0 MOVX @DPTR,A
\ 00020B A3 INC DPTR
\ 00020C EB MOV A,R3
\ 00020D 12.... LCALL ?Subroutine13 & 0xFFFF
\ ??CrossCallReturnLabel_9:
\ 000210 7403 MOV A,#0x3
\ 000212 12.... LCALL ?Subroutine12 & 0xFFFF
\ ??CrossCallReturnLabel_7:
\ 000215 7422 MOV A,#0x22
\ 000217 12.... LCALL ?XSTACK_DISP0_8
\ 00021A E0 MOVX A,@DPTR
\ 00021B C0E0 PUSH A
\ 00021D 12.... LCALL ?Subroutine163 & 0xFFFF
\ ??CrossCallReturnLabel_274:
\ 000220 D0E0 POP A
\ 000222 12.... LCALL ?Subroutine36 & 0xFFFF
\ ??CrossCallReturnLabel_46:
\ 000225 E8 MOV A,R0
\ 000226 49 ORL A,R1
\ 000227 709E JNZ ??ZDO_ProcessMgmtLqiReq_16
\ 000229 12.... LCALL ?Subroutine142 & 0xFFFF
1309 }
1310 }
1311 }
\ ??CrossCallReturnLabel_543:
\ 00022C 809C SJMP ??CrossCallReturnLabel_386
1312 else
1313 {
1314 numItems = 0;
\ ??ZDO_ProcessMgmtLqiReq_0:
\ 00022E 75..00 MOV ?V1,#0x0
1315 }
1316
1317 // Send response
1318 ZDP_MgmtLqiRsp( inMsg->TransSeq, &(inMsg->srcAddr), ZSuccess, maxItems,
1319 StartIndex, numItems, table, false );
\ ??ZDO_ProcessMgmtLqiReq_2:
\ 000231 ; Setup parameters for call to function ZDP_MgmtLqiRsp
\ 000231 75..00 MOV ?V2,#0x0
\ 000234 78.. MOV R0,#?V2
\ 000236 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 000239 7403 MOV A,#0x3
\ 00023B 12.... LCALL ?XSTACK_DISP0_8
\ 00023E 12.... LCALL ?PUSH_XSTACK8_X_TWO
\ 000241 78.. MOV R0,#?V1
\ 000243 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 000246 E5.. MOV A,?V7
\ 000248 F5.. MOV ?V1,A
\ 00024A 78.. MOV R0,#?V1
\ 00024C 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 00024F 7405 MOV A,#0x5
\ 000251 12.... LCALL ?XSTACK_DISP0_8
\ 000254 E0 MOVX A,@DPTR
\ 000255 FD MOV R5,A
\ 000256 7C00 MOV R4,#0x0
\ 000258 7409 MOV A,#0x9
\ 00025A 12.... LCALL ?XSTACK_DISP0_8
\ 00025D 12.... LCALL ?Subroutine120 & 0xFFFF
\ ??CrossCallReturnLabel_195:
\ 000260 7409 MOV A,#0x9
\ 000262 12.... LCALL ?XSTACK_DISP0_8
\ 000265 12.... LCALL ?Subroutine82 & 0xFFFF
\ ??CrossCallReturnLabel_131:
\ 000268 12.... LCALL `??ZDP_MgmtLqiRsp::?relay`; Banked call to: ZDP_MgmtLqiRsp
\ 00026B 7405 MOV A,#0x5
\ 00026D 12.... LCALL ?DEALLOC_XSTACK8
1320
1321 if ( table )
\ 000270 7402 MOV A,#0x2
\ 000272 12.... LCALL ?XSTACK_DISP0_8
\ 000275 12.... LCALL ??Subroutine260_0 & 0xFFFF
\ ??CrossCallReturnLabel_513:
\ 000278 6008 JZ ??CrossCallReturnLabel_417
1322 {
1323 osal_mem_free( table );
\ 00027A ; Setup parameters for call to function osal_mem_free
\ 00027A 7402 MOV A,#0x2
\ 00027C 12.... LCALL ?XSTACK_DISP0_8
\ 00027F 12.... LCALL ??Subroutine241_0 & 0xFFFF
1324 }
1325 }
\ ??CrossCallReturnLabel_417:
\ 000282 742A MOV A,#0x2a
\ 000284 02.... LJMP ?Subroutine7 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine163:
\ 000000 EE MOV A,R6
\ 000001 2419 ADD A,#0x19
\ 000003 F582 MOV DPL,A
\ 000005 E4 CLR A
\ 000006 3F ADDC A,R7
\ 000007 F583 MOV DPH,A
\ 000009 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine162:
\ 000000 12.... LCALL ?Subroutine206 & 0xFFFF
\ ??CrossCallReturnLabel_331:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine206:
\ 000000 EE MOV A,R6
\ 000001 2418 ADD A,#0x18
\ 000003 F582 MOV DPL,A
\ 000005 E4 CLR A
\ 000006 3F ADDC A,R7
\ 000007 F583 MOV DPH,A
\ 000009 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine159:
\ 000000 EE MOV A,R6
\ 000001 REQUIRE ??Subroutine232_0
\ 000001 ; // Fall through to label ??Subroutine232_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine232_0:
\ 000000 2412 ADD A,#0x12
\ 000002 F582 MOV DPL,A
\ 000004 E4 CLR A
\ 000005 3F ADDC A,R7
\ 000006 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine154:
\ 000000 7C08 MOV R4,#0x8
\ 000002 7D00 MOV R5,#0x0
\ 000004 79FF MOV R1,#-0x1
\ 000006 EE MOV A,R6
\ 000007 240A ADD A,#0xa
\ 000009 FA MOV R2,A
\ 00000A E4 CLR A
\ 00000B 3F ADDC A,R7
\ 00000C FB MOV R3,A
\ 00000D 12.... LCALL `??osal_memset::?relay`; Banked call to: osal_memset
\ 000010 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine140:
\ 000000 EE MOV A,R6
\ 000001 REQUIRE ??Subroutine233_0
\ 000001 ; // Fall through to label ??Subroutine233_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine233_0:
\ 000000 2414 ADD A,#0x14
\ 000002 REQUIRE ??Subroutine234_0
\ 000002 ; // Fall through to label ??Subroutine234_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine234_0:
\ 000000 F582 MOV DPL,A
\ 000002 E4 CLR A
\ 000003 3F ADDC A,R7
\ 000004 F583 MOV DPH,A
\ 000006 7401 MOV A,#0x1
\ 000008 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine16:
\ 000000 12.... LCALL ??Subroutine283_0 & 0xFFFF
\ ??CrossCallReturnLabel_645:
\ 000003 8E82 MOV DPL,R6
\ 000005 8F83 MOV DPH,R7
\ 000007 E8 MOV A,R0
\ 000008 F0 MOVX @DPTR,A
\ 000009 A3 INC DPTR
\ 00000A E9 MOV A,R1
\ 00000B F0 MOVX @DPTR,A
\ 00000C ; Setup parameters for call to function sAddrExtCpy
\ 00000C ; Setup parameters for call to function sAddrExtCpy
\ 00000C 7C.. MOV R4,#(_NIB + 53) & 0xff
\ 00000E 7D.. MOV R5,#((_NIB + 53) >> 8) & 0xff
\ 000010 EE MOV A,R6
\ 000011 2402 ADD A,#0x2
\ 000013 FA MOV R2,A
\ 000014 E4 CLR A
\ 000015 3F ADDC A,R7
\ 000016 FB MOV R3,A
\ 000017 12.... LCALL `??sAddrExtCpy::?relay`; Banked call to: sAddrExtCpy
\ 00001A 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine15:
\ 000000 12.... LCALL ?Subroutine166 & 0xFFFF
\ ??CrossCallReturnLabel_276:
\ 000003 A3 INC DPTR
\ 000004 A3 INC DPTR
\ 000005 A3 INC DPTR
\ 000006 A3 INC DPTR
\ 000007 E0 MOVX A,@DPTR
\ 000008 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine166:
\ 000000 F0 MOVX @DPTR,A
\ 000001 85..82 MOV DPL,?V4
\ 000004 85..83 MOV DPH,?V5
\ 000007 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine13:
\ 000000 F0 MOVX @DPTR,A
\ 000001 EE MOV A,R6
\ 000002 2415 ADD A,#0x15
\ 000004 F582 MOV DPL,A
\ 000006 E4 CLR A
\ 000007 3F ADDC A,R7
\ 000008 F583 MOV DPH,A
\ 00000A 7402 MOV A,#0x2
\ 00000C F0 MOVX @DPTR,A
\ 00000D EE MOV A,R6
\ 00000E 2416 ADD A,#0x16
\ 000010 F582 MOV DPL,A
\ 000012 E4 CLR A
\ 000013 3F ADDC A,R7
\ 000014 F583 MOV DPH,A
\ 000016 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine12:
\ 000000 F0 MOVX @DPTR,A
\ 000001 EE MOV A,R6
\ 000002 2417 ADD A,#0x17
\ 000004 F582 MOV DPL,A
\ 000006 E4 CLR A
\ 000007 3F ADDC A,R7
\ 000008 F583 MOV DPH,A
\ 00000A 7402 MOV A,#0x2
\ 00000C F0 MOVX @DPTR,A
\ 00000D 12.... LCALL ?Subroutine206 & 0xFFFF
\ ??CrossCallReturnLabel_330:
\ 000010 74FF MOV A,#-0x1
\ 000012 F0 MOVX @DPTR,A
\ 000013 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine120:
\ 000000 E0 MOVX A,@DPTR
\ 000001 2402 ADD A,#0x2
\ 000003 FA MOV R2,A
\ 000004 A3 INC DPTR
\ 000005 E0 MOVX A,@DPTR
\ 000006 3400 ADDC A,#0x0
\ 000008 FB MOV R3,A
\ 000009 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine82:
\ 000000 12.... LCALL ?Subroutine178 & 0xFFFF
\ ??CrossCallReturnLabel_295:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine142:
\ 000000 EE MOV A,R6
\ 000001 2414 ADD A,#0x14
\ 000003 REQUIRE ??Subroutine264_0
\ 000003 ; // Fall through to label ??Subroutine264_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine264_0:
\ 000000 F582 MOV DPL,A
\ 000002 E4 CLR A
\ 000003 3F ADDC A,R7
\ 000004 F583 MOV DPH,A
\ 000006 E4 CLR A
\ 000007 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine36:
\ 000000 12.... LCALL ?Subroutine211 & 0xFFFF
\ ??CrossCallReturnLabel_339:
\ 000003 12.... LCALL ??Subroutine283_0 & 0xFFFF
\ ??CrossCallReturnLabel_646:
\ 000006 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine211:
\ 000000 F0 MOVX @DPTR,A
\ 000001 8882 MOV DPL,R0
\ 000003 8983 MOV DPH,R1
\ 000005 22 RET
1326
1327 /*********************************************************************
1328 * @fn ZDO_ProcessMgmtNwkDiscReq
1329 *
1330 * @brief This function handles parsing the incoming Management
1331 * Network Discover request and starts the request.
1332 *
1333 * @param inMsg - incoming message (request)
1334 *
1335 * @return none
1336 */
\ In segment BANKED_CODE, align 1, keep-with-next
1337 void ZDO_ProcessMgmtNwkDiscReq( zdoIncomingMsg_t *inMsg )
\ ZDO_ProcessMgmtNwkDiscReq:
1338 {
\ 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: 7
\ 000005 74F9 MOV A,#-0x7
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A 12.... LCALL ?Subroutine137 & 0xFFFF
1339 NLME_ScanFields_t scan;
1340 uint8 index;
1341 uint8 *msg;
1342
1343 msg = inMsg->asdu;
\ ??CrossCallReturnLabel_448:
\ 00000D 35.. ADDC A,?V1
\ 00000F 12.... LCALL ?Subroutine65 & 0xFFFF
1344 scan.channels = osal_build_uint32( msg, 4 );
\ ??CrossCallReturnLabel_100:
\ 000012 85..82 MOV DPL,?XSP + 0
\ 000015 85..83 MOV DPH,?XSP + 1
\ 000018 12.... LCALL ?XSTORE_R0123
1345 msg += 4;
1346 scan.duration = *msg++;
\ 00001B 8E82 MOV DPL,R6
\ 00001D 8F83 MOV DPH,R7
\ 00001F A3 INC DPTR
\ 000020 A3 INC DPTR
\ 000021 A3 INC DPTR
\ 000022 A3 INC DPTR
\ 000023 E0 MOVX A,@DPTR
\ 000024 C0E0 PUSH A
\ 000026 7404 MOV A,#0x4
\ 000028 12.... LCALL ?XSTACK_DISP0_8
\ 00002B D0E0 POP A
\ 00002D 12.... LCALL ?Subroutine35 & 0xFFFF
1347 index = *msg;
\ ??CrossCallReturnLabel_44:
\ 000030 F8 MOV R0,A
1348 scan.scanType = ZMAC_ACTIVE_SCAN;
\ 000031 7405 MOV A,#0x5
\ 000033 12.... LCALL ?XSTACK_DISP0_8
\ 000036 7401 MOV A,#0x1
\ 000038 F0 MOVX @DPTR,A
1349 scan.scanApp = NLME_DISC_SCAN;
\ 000039 7406 MOV A,#0x6
\ 00003B 12.... LCALL ?XSTACK_DISP0_8
\ 00003E 7401 MOV A,#0x1
\ 000040 F0 MOVX @DPTR,A
1350
1351 // Save off the information to be used for the response
1352 zdappMgmtNwkDiscReqInProgress = true;
\ 000041 90.... MOV DPTR,#zdappMgmtNwkDiscReqInProgress
\ 000044 F0 MOVX @DPTR,A
1353 zdappMgmtNwkDiscRspAddr.addrMode = Addr16Bit;
\ 000045 90.... MOV DPTR,#zdappMgmtNwkDiscRspAddr + 8
\ 000048 04 INC A
\ 000049 12.... LCALL ?Subroutine49 & 0xFFFF
1354 zdappMgmtNwkDiscRspAddr.addr.shortAddr = inMsg->srcAddr.addr.shortAddr;
\ ??CrossCallReturnLabel_71:
\ 00004C A3 INC DPTR
\ 00004D 12.... LCALL ??Subroutine256_0 & 0xFFFF
\ ??CrossCallReturnLabel_487:
\ 000050 90.... MOV DPTR,#zdappMgmtNwkDiscRspAddr
\ 000053 12.... LCALL ??Subroutine242_0 & 0xFFFF
1355 zdappMgmtNwkDiscStartIndex = index;
\ ??CrossCallReturnLabel_432:
\ 000056 E8 MOV A,R0
\ 000057 90.... MOV DPTR,#zdappMgmtNwkDiscStartIndex
\ 00005A F0 MOVX @DPTR,A
1356 zdappMgmtNwkDiscRspTransSeq = inMsg->TransSeq;
\ 00005B 12.... LCALL ?Subroutine144 & 0xFFFF
\ ??CrossCallReturnLabel_231:
\ 00005E E0 MOVX A,@DPTR
\ 00005F 90.... MOV DPTR,#zdappMgmtNwkDiscRspTransSeq
\ 000062 F0 MOVX @DPTR,A
1357
1358 if ( NLME_NwkDiscReq2( &scan ) != ZSuccess )
\ 000063 ; Setup parameters for call to function NLME_NwkDiscReq2
\ 000063 AA.. MOV R2,?XSP + 0
\ 000065 AB.. MOV R3,?XSP + 1
\ 000067 12.... LCALL `??NLME_NwkDiscReq2::?relay`; Banked call to: NLME_NwkDiscReq2
\ 00006A E9 MOV A,R1
\ 00006B 6003 JZ ??ZDO_ProcessMgmtNwkDiscReq_0
1359 {
1360 NLME_NwkDiscTerm();
\ 00006D ; Setup parameters for call to function NLME_NwkDiscTerm
\ 00006D 12.... LCALL `??NLME_NwkDiscTerm::?relay`; Banked call to: NLME_NwkDiscTerm
1361
1362 // zdappMgmtNwkDiscReqInProgress will be reset in the confirm callback
1363 }
1364 }
\ ??ZDO_ProcessMgmtNwkDiscReq_0:
\ 000070 7407 MOV A,#0x7
\ 000072 02.... LJMP ??Subroutine224_0 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine137:
\ 000000 8A.. MOV ?V0,R2
\ 000002 8B.. MOV ?V1,R3
\ 000004 REQUIRE ??Subroutine246_0
\ 000004 ; // Fall through to label ??Subroutine246_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine144:
\ 000000 E5.. MOV A,?V0
\ 000002 12.... LCALL ?Subroutine201 & 0xFFFF
\ ??CrossCallReturnLabel_325:
\ 000005 12.... LCALL ??Subroutine285_0 & 0xFFFF
\ ??CrossCallReturnLabel_668:
\ 000008 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine201:
\ 000000 240F ADD A,#0xf
\ 000002 F582 MOV DPL,A
\ 000004 E4 CLR A
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine35:
\ 000000 12.... LCALL ?Subroutine169 & 0xFFFF
\ ??CrossCallReturnLabel_282:
\ 000003 E0 MOVX A,@DPTR
\ 000004 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine169:
\ 000000 12.... LCALL ?Subroutine212 & 0xFFFF
\ ??CrossCallReturnLabel_342:
\ 000003 A3 INC DPTR
\ 000004 A3 INC DPTR
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine219:
\ 000000 F0 MOVX @DPTR,A
\ 000001 ; Setup parameters for call to function osal_memcpy
\ 000001 8E82 MOV DPL,R6
\ 000003 8F83 MOV DPH,R7
\ 000005 A3 INC DPTR
\ 000006 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine193:
\ 000000 F583 MOV DPH,A
\ 000002 REQUIRE ??Subroutine293_0
\ 000002 ; // Fall through to label ??Subroutine293_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine212:
\ 000000 12.... LCALL ?Subroutine219 & 0xFFFF
\ ??CrossCallReturnLabel_355:
\ 000003 A3 INC DPTR
\ 000004 A3 INC DPTR
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine65:
\ 000000 12.... LCALL ?Subroutine193 & 0xFFFF
\ ??CrossCallReturnLabel_716:
\ 000003 ; Setup parameters for call to function osal_build_uint32
\ 000003 ; Setup parameters for call to function osal_build_uint32
\ 000003 7904 MOV R1,#0x4
\ 000005 EE MOV A,R6
\ 000006 FA MOV R2,A
\ 000007 EF MOV A,R7
\ 000008 FB MOV R3,A
\ 000009 12.... LCALL `??osal_build_uint32::?relay`; Banked call to: osal_build_uint32
\ 00000C EA MOV A,R2
\ 00000D F8 MOV R0,A
\ 00000E EB MOV A,R3
\ 00000F F9 MOV R1,A
\ 000010 EC MOV A,R4
\ 000011 FA MOV R2,A
\ 000012 ED MOV A,R5
\ 000013 FB MOV R3,A
\ 000014 22 RET
1365
1366 #if defined ( ZDO_MGMT_NWKDISC_RESPONSE )
1367 /*********************************************************************
1368 * @fn ZDO_FinishProcessingMgmtNwkDiscReq
1369 *
1370 * @brief This function finishes the processing of the Management
1371 * Network Discover Request and generates the response.
1372 *
1373 * Note: This function will limit the number of items returned
1374 * to ZDO_MAX_NWKDISC_ITEMS items.
1375 *
1376 * @param ResultCountSrcAddr - source of the request
1377 * @param msg - pointer to incoming message
1378 * @param SecurityUse -
1379 *
1380 * @return none
1381 */
1382 void ZDO_FinishProcessingMgmtNwkDiscReq( void )
1383 {
1384 byte count, i, ResultCount = 0;
1385 networkDesc_t *newDesc = NULL, *pList, *NetworkList;
1386
1387 NetworkList = nwk_getNwkDescList();
1388
1389 // Count the number of nwk descriptors in the list
1390 pList = nwk_getNwkDescList();
1391 while (pList)
1392 {
1393 ResultCount++;
1394 pList = pList->nextDesc;
1395 }
1396
1397 if ( ZSTACK_ROUTER_BUILD )
1398 {
1399 // Look for my PanID.
1400 pList = nwk_getNwkDescList();
1401 while ( pList )
1402 {
1403 if ( pList->panId == _NIB.nwkPanId )
1404 {
1405 break;
1406 }
1407
1408
1409 if ( !pList->nextDesc )
1410 {
1411 break;
1412 }
1413 pList = pList->nextDesc;
1414 }
1415
1416
1417 // If my Pan not present (query to a star network ZC or an isolated ZR?),
1418 // prepend it.
1419 if ( !pList || (pList->panId != _NIB.nwkPanId) )
1420 {
1421 newDesc = (networkDesc_t *)osal_mem_alloc( sizeof( networkDesc_t ) );
1422 if ( newDesc )
1423 {
1424 byte pJoin;
1425
1426 newDesc->panId = _NIB.nwkPanId;
1427 newDesc->logicalChannel = _NIB.nwkLogicalChannel;
1428 newDesc->version = NLME_GetProtocolVersion();
1429 newDesc->stackProfile = zgStackProfile;
1430
1431 //Extended PanID
1432 osal_cpyExtAddr( newDesc->extendedPANID, _NIB.extendedPANID);
1433
1434 ZMacGetReq( ZMacAssociationPermit, &pJoin );
1435 newDesc->chosenRouter = ((pJoin) ? ZDAppNwkAddr.addr.shortAddr :
1436 INVALID_NODE_ADDR);
1437
1438 newDesc->nextDesc = NetworkList;
1439 NetworkList = newDesc;
1440 ResultCount++;
1441 }
1442 }
1443 }
1444
1445 // Calc the count and apply a max count.
1446 if ( zdappMgmtNwkDiscStartIndex > ResultCount )
1447 {
1448 count = 0;
1449 }
1450 else
1451 {
1452 count = ResultCount - zdappMgmtNwkDiscStartIndex;
1453 if ( count > ZDO_MAX_NWKDISC_ITEMS )
1454 {
1455 count = ZDO_MAX_NWKDISC_ITEMS;
1456 }
1457
1458 // Move the list pointer up to the start index.
1459 for ( i = 0; i < zdappMgmtNwkDiscStartIndex; i++ )
1460 {
1461 NetworkList = NetworkList->nextDesc;
1462 }
1463 }
1464
1465 ZDP_MgmtNwkDiscRsp( zdappMgmtNwkDiscRspTransSeq,
1466 &zdappMgmtNwkDiscRspAddr, ZSuccess, ResultCount,
1467 zdappMgmtNwkDiscStartIndex,
1468 count,
1469 NetworkList,
1470 false );
1471
1472 if ( ZSTACK_ROUTER_BUILD )
1473 {
1474 if ( newDesc != NULL )
1475 {
1476 osal_mem_free( newDesc );
1477 }
1478 }
1479
1480 NLME_NwkDiscTerm();
1481 }
1482 #endif
1483
1484 /*********************************************************************
1485 * @fn ZDO_ProcessMgmtRtgReq
1486 *
1487 * @brief This function finishes the processing of the Management
1488 * Routing Request and generates the response.
1489 *
1490 * Note: This function will limit the number of items returned
1491 * to ZDO_MAX_RTG_ITEMS items.
1492 *
1493 * @param inMsg - incoming message (request)
1494 *
1495 * @return none
1496 */
\ In segment BANKED_CODE, align 1, keep-with-next
1497 void ZDO_ProcessMgmtRtgReq( zdoIncomingMsg_t *inMsg )
\ ZDO_ProcessMgmtRtgReq:
1498 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 REQUIRE ?V2
\ 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: 1
\ 000005 74FF MOV A,#-0x1
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A 8A.. MOV ?V6,R2
\ 00000C 8B.. MOV ?V7,R3
1499 byte x;
1500 byte maxNumItems;
1501 byte numItems = 0;
\ 00000E 7E00 MOV R6,#0x0
1502 uint8 *pBuf = NULL;
\ 000010 8E.. MOV ?V4,R6
\ 000012 8E.. MOV ?V5,R6
1503 rtgItem_t *pList;
1504 uint8 StartIndex = inMsg->asdu[0];
\ 000014 12.... LCALL ??Subroutine246_0 & 0xFFFF
\ ??CrossCallReturnLabel_451:
\ 000017 35.. ADDC A,?V7
\ 000019 12.... LCALL ?Subroutine67 & 0xFFFF
1505
1506 // Get the number of table items
1507 NLME_GetRequest( nwkNumRoutingTableEntries, 0, &maxNumItems );
\ ??CrossCallReturnLabel_105:
\ 00001C 799D MOV R1,#-0x63
\ 00001E 12.... LCALL `??NLME_GetRequest::?relay`; Banked call to: NLME_GetRequest
1508
1509 if ( maxNumItems > StartIndex )
\ 000021 85..82 MOV DPL,?XSP + 0
\ 000024 85..83 MOV DPH,?XSP + 1
\ 000027 E0 MOVX A,@DPTR
\ 000028 F8 MOV R0,A
\ 000029 E5.. MOV A,?V2
\ 00002B C3 CLR C
\ 00002C 98 SUBB A,R0
\ 00002D 4003 JC $+5
\ 00002F 02.... LJMP ??ZDO_ProcessMgmtRtgReq_0 & 0xFFFF
1510 {
1511 numItems = maxNumItems - StartIndex; // Start at the passed in index
\ 000032 E0 MOVX A,@DPTR
\ 000033 C3 CLR C
\ 000034 95.. SUBB A,?V2
\ 000036 FE MOV R6,A
1512
1513 // limit the size of the list
1514 if ( numItems > ZDO_MAX_RTG_ITEMS )
\ 000037 C3 CLR C
\ 000038 940B SUBB A,#0xb
\ 00003A 4002 JC ??ZDO_ProcessMgmtRtgReq_1
1515 {
1516 numItems = ZDO_MAX_RTG_ITEMS;
\ 00003C 7E0A MOV R6,#0xa
1517 }
1518
1519 // Allocate the memory to build the table
1520 pBuf = osal_mem_alloc( (short)(sizeof( rtgItem_t ) * numItems) );
\ ??ZDO_ProcessMgmtRtgReq_1:
\ 00003E ; Setup parameters for call to function osal_mem_alloc
\ 00003E EE MOV A,R6
\ 00003F 75F007 MOV B,#0x7
\ 000042 A4 MUL AB
\ 000043 FA MOV R2,A
\ 000044 ABF0 MOV R3,B
\ 000046 12.... LCALL `??osal_mem_alloc::?relay`; Banked call to: osal_mem_alloc
\ 000049 8A.. MOV ?V0,R2
\ 00004B 8B.. MOV ?V1,R3
\ 00004D 8A.. MOV ?V4,R2
\ 00004F 8B.. MOV ?V5,R3
1521
1522 if ( pBuf != NULL )
\ 000051 EA MOV A,R2
\ 000052 4B ORL A,R3
\ 000053 6077 JZ ??ZDO_ProcessMgmtRtgReq_2
1523 {
1524 // Convert buffer to list
1525 pList = (rtgItem_t *)pBuf;
1526
1527 // Loop through items and build list
1528 for ( x = 0; x < numItems; x++ )
\ 000055 7F00 MOV R7,#0x0
\ 000057 8019 SJMP ??ZDO_ProcessMgmtRtgReq_3
1529 {
1530 NLME_GetRequest( nwkRoutingTable, (uint16)(x + StartIndex), (void*)pList );
1531
1532 // Remap the status to the RoutingTableList Record Format defined in the ZigBee spec
1533 switch( pList->status )
1534 {
1535 case RT_ACTIVE:
1536 pList->status = ZDO_MGMT_RTG_ENTRY_ACTIVE;
1537 break;
1538
1539 case RT_DISC:
1540 pList->status = ZDO_MGMT_RTG_ENTRY_DISCOVERY_UNDERWAY;
1541 break;
1542
1543 case RT_LINK_FAIL:
1544 pList->status = ZDO_MGMT_RTG_ENTRY_DISCOVERY_FAILED;
1545 break;
1546
1547 case RT_INIT:
1548 case RT_REPAIR:
1549 default:
1550 pList->status = ZDO_MGMT_RTG_ENTRY_INACTIVE;
\ ??ZDO_ProcessMgmtRtgReq_4:
\ 000059 85..82 MOV DPL,?V0
\ 00005C 85..83 MOV DPH,?V1
\ 00005F A3 INC DPTR
\ 000060 A3 INC DPTR
\ 000061 A3 INC DPTR
\ 000062 A3 INC DPTR
\ 000063 A3 INC DPTR
\ 000064 7403 MOV A,#0x3
\ ??ZDO_ProcessMgmtRtgReq_5:
\ 000066 F0 MOVX @DPTR,A
1551 break;
1552 }
1553
1554 // Increment pointer to next record
1555 pList++;
\ 000067 E5.. MOV A,?V0
\ 000069 2407 ADD A,#0x7
\ 00006B F5.. MOV ?V0,A
\ 00006D 5002 JNC ??ZDO_ProcessMgmtRtgReq_6
\ 00006F 05.. INC ?V1
\ ??ZDO_ProcessMgmtRtgReq_6:
\ 000071 0F INC R7
\ ??ZDO_ProcessMgmtRtgReq_3:
\ 000072 EF MOV A,R7
\ 000073 C3 CLR C
\ 000074 9E SUBB A,R6
\ 000075 5057 JNC ??ZDO_ProcessMgmtRtgReq_0
\ 000077 ; Setup parameters for call to function NLME_GetRequest
\ 000077 AC.. MOV R4,?V0
\ 000079 AD.. MOV R5,?V1
\ 00007B EF MOV A,R7
\ 00007C A8.. MOV R0,?V2
\ 00007E 28 ADD A,R0
\ 00007F FA MOV R2,A
\ 000080 E4 CLR A
\ 000081 3400 ADDC A,#0x0
\ 000083 FB MOV R3,A
\ 000084 798B MOV R1,#-0x75
\ 000086 12.... LCALL `??NLME_GetRequest::?relay`; Banked call to: NLME_GetRequest
\ 000089 85..82 MOV DPL,?V0
\ 00008C 85..83 MOV DPH,?V1
\ 00008F A3 INC DPTR
\ 000090 A3 INC DPTR
\ 000091 A3 INC DPTR
\ 000092 A3 INC DPTR
\ 000093 A3 INC DPTR
\ 000094 E0 MOVX A,@DPTR
\ 000095 14 DEC A
\ 000096 6008 JZ ??ZDO_ProcessMgmtRtgReq_7
\ 000098 14 DEC A
\ 000099 6013 JZ ??ZDO_ProcessMgmtRtgReq_8
\ 00009B 14 DEC A
\ 00009C 601F JZ ??ZDO_ProcessMgmtRtgReq_9
\ 00009E 80B9 SJMP ??ZDO_ProcessMgmtRtgReq_4
\ ??ZDO_ProcessMgmtRtgReq_7:
\ 0000A0 85..82 MOV DPL,?V0
\ 0000A3 85..83 MOV DPH,?V1
\ 0000A6 A3 INC DPTR
\ 0000A7 A3 INC DPTR
\ 0000A8 A3 INC DPTR
\ 0000A9 A3 INC DPTR
\ 0000AA A3 INC DPTR
\ 0000AB E4 CLR A
\ 0000AC 80B8 SJMP ??ZDO_ProcessMgmtRtgReq_5
\ ??ZDO_ProcessMgmtRtgReq_8:
\ 0000AE 85..82 MOV DPL,?V0
\ 0000B1 85..83 MOV DPH,?V1
\ 0000B4 A3 INC DPTR
\ 0000B5 A3 INC DPTR
\ 0000B6 A3 INC DPTR
\ 0000B7 A3 INC DPTR
\ 0000B8 A3 INC DPTR
\ 0000B9 7401 MOV A,#0x1
\ 0000BB 80A9 SJMP ??ZDO_ProcessMgmtRtgReq_5
\ ??ZDO_ProcessMgmtRtgReq_9:
\ 0000BD 85..82 MOV DPL,?V0
\ 0000C0 85..83 MOV DPH,?V1
\ 0000C3 A3 INC DPTR
\ 0000C4 A3 INC DPTR
\ 0000C5 A3 INC DPTR
\ 0000C6 A3 INC DPTR
\ 0000C7 A3 INC DPTR
\ 0000C8 7402 MOV A,#0x2
\ 0000CA 809A SJMP ??ZDO_ProcessMgmtRtgReq_5
1556 }
1557 }
1558 else
1559 {
1560 numItems = 0;
\ ??ZDO_ProcessMgmtRtgReq_2:
\ 0000CC 7E00 MOV R6,#0x0
1561 }
1562 }
1563
1564 // Send response
1565 ZDP_MgmtRtgRsp( inMsg->TransSeq, &(inMsg->srcAddr), ZSuccess, maxNumItems, StartIndex, numItems,
1566 (rtgItem_t *)pBuf, false );
\ ??ZDO_ProcessMgmtRtgReq_0:
\ 0000CE ; Setup parameters for call to function ZDP_MgmtRtgRsp
\ 0000CE 75..00 MOV ?V0,#0x0
\ 0000D1 78.. MOV R0,#?V0
\ 0000D3 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 0000D6 78.. MOV R0,#?V4
\ 0000D8 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 0000DB EE MOV A,R6
\ 0000DC F5.. MOV ?V0,A
\ 0000DE 78.. MOV R0,#?V0
\ 0000E0 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 0000E3 E5.. MOV A,?V2
\ 0000E5 F5.. MOV ?V0,A
\ 0000E7 78.. MOV R0,#?V0
\ 0000E9 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 0000EC 7405 MOV A,#0x5
\ 0000EE 12.... LCALL ?XSTACK_DISP0_8
\ 0000F1 E0 MOVX A,@DPTR
\ 0000F2 FD MOV R5,A
\ 0000F3 7C00 MOV R4,#0x0
\ 0000F5 E5.. MOV A,?V6
\ 0000F7 2402 ADD A,#0x2
\ 0000F9 FA MOV R2,A
\ 0000FA E4 CLR A
\ 0000FB 35.. ADDC A,?V7
\ 0000FD FB MOV R3,A
\ 0000FE E5.. MOV A,?V6
\ 000100 12.... LCALL ?Subroutine201 & 0xFFFF
\ ??CrossCallReturnLabel_322:
\ 000103 35.. ADDC A,?V7
\ 000105 F583 MOV DPH,A
\ 000107 E0 MOVX A,@DPTR
\ 000108 F9 MOV R1,A
\ 000109 12.... LCALL `??ZDP_MgmtRtgRsp::?relay`; Banked call to: ZDP_MgmtRtgRsp
\ 00010C 7405 MOV A,#0x5
\ 00010E 12.... LCALL ?DEALLOC_XSTACK8
1567
1568 if ( pBuf != NULL )
\ 000111 E5.. MOV A,?V4
\ 000113 45.. ORL A,?V5
\ 000115 6007 JZ ??ZDO_ProcessMgmtRtgReq_10
1569 {
1570 osal_mem_free( pBuf );
\ 000117 ; Setup parameters for call to function osal_mem_free
\ 000117 AA.. MOV R2,?V4
\ 000119 AB.. MOV R3,?V5
\ 00011B 12.... LCALL `??osal_mem_free::?relay`; Banked call to: osal_mem_free
1571 }
1572 }
\ ??ZDO_ProcessMgmtRtgReq_10:
\ 00011E 7401 MOV A,#0x1
\ 000120 REQUIRE ?Subroutine7
\ 000120 ; // Fall through to label ?Subroutine7
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine67:
\ 000000 F583 MOV DPH,A
\ 000002 E0 MOVX A,@DPTR
\ 000003 12.... LCALL ?Subroutine191 & 0xFFFF
\ ??CrossCallReturnLabel_402:
\ 000006 F5.. MOV ?V2,A
\ 000008 ; Setup parameters for call to function NLME_GetRequest
\ 000008 ; Setup parameters for call to function APSME_GetRequest
\ 000008 AC.. MOV R4,?XSP + 0
\ 00000A AD.. MOV R5,?XSP + 1
\ 00000C 7A00 MOV R2,#0x0
\ 00000E 7B00 MOV R3,#0x0
\ 000010 22 RET
1573
1574 /*********************************************************************
1575 * @fn ZDO_ProcessMgmtBindReq
1576 *
1577 * @brief This function finishes the processing of the Management
1578 * Bind Request and generates the response.
1579 *
1580 * Note: This function will limit the number of items returned
1581 * to ZDO_MAX_BIND_ITEMS items.
1582 *
1583 * @param inMsg - incoming message (request)
1584 *
1585 * @return none
1586 */
\ In segment BANKED_CODE, align 1, keep-with-next
1587 void ZDO_ProcessMgmtBindReq( zdoIncomingMsg_t *inMsg )
\ ZDO_ProcessMgmtBindReq:
1588 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 REQUIRE ?V2
\ 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: 4
\ 000005 74FC MOV A,#-0x4
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A 7402 MOV A,#0x2
\ 00000C 12.... LCALL ?XSTACK_DISP0_8
\ 00000F 12.... LCALL ??Subroutine242_0 & 0xFFFF
1589 #if defined ( REFLECTOR )
1590 byte x;
1591 uint16 maxNumItems;
1592 uint16 numItems;
1593 uint8 *pBuf = NULL;
\ ??CrossCallReturnLabel_433:
\ 000012 75..00 MOV ?V4,#0x0
\ 000015 75..00 MOV ?V5,#0x0
1594 apsBindingItem_t *pList;
1595 uint8 StartIndex = inMsg->asdu[0];
\ 000018 7402 MOV A,#0x2
\ 00001A 12.... LCALL ?XSTACK_DISP0_8
\ 00001D E0 MOVX A,@DPTR
\ 00001E 12.... LCALL ??Subroutine273_0 & 0xFFFF
\ ??CrossCallReturnLabel_579:
\ 000021 12.... LCALL ?Subroutine67 & 0xFFFF
1596 uint8 status;
1597
1598 // Get the number of table items
1599 APSME_GetRequest( apsNumBindingTableEntries, 0, (byte*)(&maxNumItems) );
\ ??CrossCallReturnLabel_106:
\ 000024 79A3 MOV R1,#-0x5d
\ 000026 12.... LCALL `??APSME_GetRequest::?relay`; Banked call to: APSME_GetRequest
1600
1601 if ( maxNumItems > StartIndex )
\ 000029 85..82 MOV DPL,?XSP + 0
\ 00002C 85..83 MOV DPH,?XSP + 1
\ 00002F 12.... LCALL ??Subroutine253_0 & 0xFFFF
\ ??CrossCallReturnLabel_467:
\ 000032 C3 CLR C
\ 000033 E5.. MOV A,?V2
\ 000035 98 SUBB A,R0
\ 000036 E4 CLR A
\ 000037 99 SUBB A,R1
\ 000038 5079 JNC ??ZDO_ProcessMgmtBindReq_0
1602 {
1603 numItems = maxNumItems - StartIndex; // Start at the passed in index
\ 00003A 85..82 MOV DPL,?XSP + 0
\ 00003D 85..83 MOV DPH,?XSP + 1
\ 000040 A8.. MOV R0,?V2
\ 000042 E0 MOVX A,@DPTR
\ 000043 C3 CLR C
\ 000044 98 SUBB A,R0
\ 000045 FE MOV R6,A
\ 000046 A3 INC DPTR
\ 000047 E0 MOVX A,@DPTR
\ 000048 9400 SUBB A,#0x0
\ 00004A FF MOV R7,A
1604 }
1605 else
1606 {
1607 numItems = 0;
1608 }
1609
1610 // limit the size of the list
1611 if ( numItems > ZDO_MAX_BIND_ITEMS )
\ 00004B C3 CLR C
\ 00004C EE MOV A,R6
\ 00004D 9404 SUBB A,#0x4
\ 00004F EF MOV A,R7
\ 000050 9400 SUBB A,#0x0
\ 000052 4006 JC ??ZDO_ProcessMgmtBindReq_1
1612 {
1613 numItems = ZDO_MAX_BIND_ITEMS;
\ 000054 7E03 MOV R6,#0x3
\ 000056 7F00 MOV R7,#0x0
\ 000058 8004 SJMP ??ZDO_ProcessMgmtBindReq_2
1614 }
1615
1616 // Allocate the memory to build the table
1617 if ( numItems && (pBuf = osal_mem_alloc( sizeof( apsBindingItem_t ) * numItems )) )
\ ??ZDO_ProcessMgmtBindReq_1:
\ 00005A EE MOV A,R6
\ 00005B 4F ORL A,R7
\ 00005C 6055 JZ ??ZDO_ProcessMgmtBindReq_0
\ ??ZDO_ProcessMgmtBindReq_2:
\ 00005E ; Setup parameters for call to function osal_mem_alloc
\ 00005E EE MOV A,R6
\ 00005F FA MOV R2,A
\ 000060 EF MOV A,R7
\ 000061 FB MOV R3,A
\ 000062 EA MOV A,R2
\ 000063 75F015 MOV B,#0x15
\ 000066 A4 MUL AB
\ 000067 FA MOV R2,A
\ 000068 A8F0 MOV R0,B
\ 00006A 75F015 MOV B,#0x15
\ 00006D EB MOV A,R3
\ 00006E A4 MUL AB
\ 00006F 28 ADD A,R0
\ 000070 FB MOV R3,A
\ 000071 12.... LCALL `??osal_mem_alloc::?relay`; Banked call to: osal_mem_alloc
\ 000074 8A.. MOV ?V4,R2
\ 000076 8B.. MOV ?V5,R3
\ 000078 EA MOV A,R2
\ 000079 4B ORL A,R3
\ 00007A 6037 JZ ??ZDO_ProcessMgmtBindReq_0
1618 {
1619 status = ZSuccess;
\ 00007C 75..00 MOV ?V1,#0x0
1620
1621 // Convert buffer to list
1622 pList = (apsBindingItem_t *)pBuf;
\ 00007F 8A.. MOV ?V6,R2
\ 000081 8B.. MOV ?V7,R3
1623
1624 // Loop through items and build list
1625 for ( x = 0; x < numItems; x++ )
\ 000083 75..00 MOV ?V0,#0x0
\ 000086 801F SJMP ??ZDO_ProcessMgmtBindReq_3
1626 {
1627 APSME_GetRequest( apsBindingTable, (x + StartIndex), (void*)pList );
\ ??ZDO_ProcessMgmtBindReq_4:
\ 000088 ; Setup parameters for call to function APSME_GetRequest
\ 000088 AC.. MOV R4,?V6
\ 00008A AD.. MOV R5,?V7
\ 00008C A8.. MOV R0,?V2
\ 00008E E5.. MOV A,?V0
\ 000090 28 ADD A,R0
\ 000091 FA MOV R2,A
\ 000092 E4 CLR A
\ 000093 3400 ADDC A,#0x0
\ 000095 FB MOV R3,A
\ 000096 79A2 MOV R1,#-0x5e
\ 000098 12.... LCALL `??APSME_GetRequest::?relay`; Banked call to: APSME_GetRequest
1628 pList++;
\ 00009B E5.. MOV A,?V6
\ 00009D 2415 ADD A,#0x15
\ 00009F F5.. MOV ?V6,A
\ 0000A1 5002 JNC ??ZDO_ProcessMgmtBindReq_5
\ 0000A3 05.. INC ?V7
1629 }
\ ??ZDO_ProcessMgmtBindReq_5:
\ 0000A5 05.. INC ?V0
\ ??ZDO_ProcessMgmtBindReq_3:
\ 0000A7 C3 CLR C
\ 0000A8 E5.. MOV A,?V0
\ 0000AA 9E SUBB A,R6
\ 0000AB E4 CLR A
\ 0000AC 9F SUBB A,R7
\ 0000AD 40D9 JC ??ZDO_ProcessMgmtBindReq_4
\ 0000AF EE MOV A,R6
\ 0000B0 F9 MOV R1,A
\ 0000B1 8005 SJMP ??ZDO_ProcessMgmtBindReq_6
1630
1631 }
1632 else
1633 {
1634 status = ZDP_NOT_PERMITTED;
\ ??ZDO_ProcessMgmtBindReq_0:
\ 0000B3 75..8B MOV ?V1,#-0x75
1635 numItems = 0;
\ 0000B6 7900 MOV R1,#0x0
1636 }
1637
1638 // Send response
1639 ZDP_MgmtBindRsp( inMsg->TransSeq, &(inMsg->srcAddr), status, (byte)maxNumItems, StartIndex,
1640 (byte)numItems, (apsBindingItem_t *)pBuf, false );
\ ??ZDO_ProcessMgmtBindReq_6:
\ 0000B8 ; Setup parameters for call to function ZDP_MgmtBindRsp
\ 0000B8 75..00 MOV ?V0,#0x0
\ 0000BB 78.. MOV R0,#?V0
\ 0000BD 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 0000C0 78.. MOV R0,#?V4
\ 0000C2 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 0000C5 E9 MOV A,R1
\ 0000C6 F5.. MOV ?V0,A
\ 0000C8 78.. MOV R0,#?V0
\ 0000CA 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 0000CD E5.. MOV A,?V2
\ 0000CF F5.. MOV ?V0,A
\ 0000D1 78.. MOV R0,#?V0
\ 0000D3 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 0000D6 7405 MOV A,#0x5
\ 0000D8 12.... LCALL ?XSTACK_DISP0_8
\ 0000DB E0 MOVX A,@DPTR
\ 0000DC FD MOV R5,A
\ 0000DD AC.. MOV R4,?V1
\ 0000DF 7407 MOV A,#0x7
\ 0000E1 12.... LCALL ?XSTACK_DISP0_8
\ 0000E4 12.... LCALL ?Subroutine120 & 0xFFFF
\ ??CrossCallReturnLabel_196:
\ 0000E7 7407 MOV A,#0x7
\ 0000E9 12.... LCALL ?XSTACK_DISP0_8
\ 0000EC 12.... LCALL ?Subroutine82 & 0xFFFF
\ ??CrossCallReturnLabel_132:
\ 0000EF 12.... LCALL `??ZDP_MgmtBindRsp::?relay`; Banked call to: ZDP_MgmtBindRsp
\ 0000F2 7405 MOV A,#0x5
\ 0000F4 12.... LCALL ?DEALLOC_XSTACK8
1641
1642 if ( pBuf )
\ 0000F7 E5.. MOV A,?V4
\ 0000F9 45.. ORL A,?V5
\ 0000FB 6007 JZ ??ZDO_ProcessMgmtBindReq_7
1643 {
1644 osal_mem_free( pBuf );
\ 0000FD ; Setup parameters for call to function osal_mem_free
\ 0000FD AA.. MOV R2,?V4
\ 0000FF AB.. MOV R3,?V5
\ 000101 12.... LCALL `??osal_mem_free::?relay`; Banked call to: osal_mem_free
1645 }
1646 #else
1647 (void)inMsg;
1648 #endif
1649 }
\ ??ZDO_ProcessMgmtBindReq_7:
\ 000104 7404 MOV A,#0x4
\ 000106 02.... LJMP ?Subroutine7 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine273_0:
\ 000000 12.... LCALL ??Subroutine292_0 & 0xFFFF
\ ??CrossCallReturnLabel_709:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine292_0:
\ 000000 12.... LCALL ?Subroutine217 & 0xFFFF
\ ??CrossCallReturnLabel_713:
\ 000003 3B ADDC A,R3
\ 000004 22 RET
1650
1651 /*********************************************************************
1652 * @fn ZDO_ProcessMgmtDirectJoinReq
1653 *
1654 * @brief This function finishes the processing of the Management
1655 * Direct Join Request and generates the response.
1656 *
1657 * @param inMsg - incoming message (request)
1658 *
1659 * @return none
1660 */
\ In segment BANKED_CODE, align 1, keep-with-next
1661 void ZDO_ProcessMgmtDirectJoinReq( zdoIncomingMsg_t *inMsg )
\ ZDO_ProcessMgmtDirectJoinReq:
1662 {
\ 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
\ 00000A 12.... LCALL ?Subroutine130 & 0xFFFF
1663 uint8 *deviceAddr;
1664 uint8 capInfo;
1665 uint8 stat;
1666
1667 // Parse the message
1668 deviceAddr = inMsg->asdu;
1669 capInfo = inMsg->asdu[Z_EXTADDR_LEN];
1670
1671 stat = (byte) NLME_DirectJoinRequest( deviceAddr, capInfo );
\ ??CrossCallReturnLabel_439:
\ 00000D 12.... LCALL ??Subroutine256_0 & 0xFFFF
\ ??CrossCallReturnLabel_488:
\ 000010 ; Setup parameters for call to function NLME_DirectJoinRequest
\ 000010 8A82 MOV DPL,R2
\ 000012 F583 MOV DPH,A
\ 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 F9 MOV R1,A
\ 00001E 12.... LCALL `??NLME_DirectJoinRequest::?relay`; Banked call to: NLME_DirectJoinRequest
\ 000021 E9 MOV A,R1
\ 000022 85..82 MOV DPL,?XSP + 0
\ 000025 85..83 MOV DPH,?XSP + 1
\ 000028 F0 MOVX @DPTR,A
1672
1673 ZDP_MgmtDirectJoinRsp( inMsg->TransSeq, &(inMsg->srcAddr), stat, false );
\ 000029 ; Setup parameters for call to function ZDP_SendData
\ 000029 75..00 MOV ?V0,#0x0
\ 00002C 78.. MOV R0,#?V0
\ 00002E 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 000031 7401 MOV A,#0x1
\ 000033 12.... LCALL ?XSTACK_DISP100_8
\ 000036 88.. MOV ?V0,R0
\ 000038 89.. MOV ?V1,R1
\ 00003A 78.. MOV R0,#?V0
\ 00003C 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00003F 75..35 MOV ?V0,#0x35
\ 000042 75..80 MOV ?V1,#-0x80
\ 000045 78.. MOV R0,#?V0
\ 000047 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00004A 12.... LCALL ?Subroutine139 & 0xFFFF
\ ??CrossCallReturnLabel_225:
\ 00004D 12.... LCALL ?DEALLOC_XSTACK8
1674 }
\ 000050 REQUIRE ?Subroutine8
\ 000050 ; // Fall through to label ?Subroutine8
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine8:
\ 000000 7401 MOV A,#0x1
\ 000002 02.... LJMP ??Subroutine224_0 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine139:
\ 000000 7901 MOV R1,#0x1
\ 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 EE MOV A,R6
\ 00000A 240F ADD A,#0xf
\ 00000C FA MOV R2,A
\ 00000D E4 CLR A
\ 00000E 3F ADDC A,R7
\ 00000F 12.... LCALL ?Subroutine207 & 0xFFFF
\ ??CrossCallReturnLabel_445:
\ 000012 22 RET
1675
1676 /*********************************************************************
1677 * @fn ZDO_ProcessMgmtLeaveReq
1678 *
1679 * @brief This function processes a Management Leave Request
1680 * and generates the response.
1681 *
1682 * @param inMsg - incoming message (request)
1683 *
1684 * @return none
1685 */
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine97:
\ 000000 F583 MOV DPH,A
\ 000002 REQUIRE ??Subroutine235_0
\ 000002 ; // Fall through to label ??Subroutine235_0
\ In segment BANKED_CODE, align 1, keep-with-next
1686 void ZDO_ProcessMgmtLeaveReq( zdoIncomingMsg_t *inMsg )
\ ZDO_ProcessMgmtLeaveReq:
1687 {
\ 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: 6
\ 000005 74FA MOV A,#-0x6
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A 12.... LCALL ?Subroutine137 & 0xFFFF
1688 NLME_LeaveReq_t req;
1689 ZStatus_t status;
1690 uint8 option;
1691 uint8 *msg = inMsg->asdu;
\ ??CrossCallReturnLabel_449:
\ 00000D 35.. ADDC A,?V1
\ 00000F 12.... LCALL ?Subroutine97 & 0xFFFF
1692
1693 if ( ( AddrMgrExtAddrValid( msg ) == FALSE ) ||
1694 ( osal_ExtAddrEqual( msg, NLME_GetExtAddr() ) == TRUE ) )
\ ??CrossCallReturnLabel_390:
\ 000012 ; Setup parameters for call to function AddrMgrExtAddrValid
\ 000012 EE MOV A,R6
\ 000013 FA MOV R2,A
\ 000014 EF MOV A,R7
\ 000015 FB MOV R3,A
\ 000016 12.... LCALL `??AddrMgrExtAddrValid::?relay`; Banked call to: AddrMgrExtAddrValid
\ 000019 E9 MOV A,R1
\ 00001A 600F JZ ??ZDO_ProcessMgmtLeaveReq_0
\ 00001C ; Setup parameters for call to function NLME_GetExtAddr
\ 00001C 12.... LCALL ?Subroutine126 & 0xFFFF
\ ??CrossCallReturnLabel_209:
\ 00001F ; Setup parameters for call to function sAddrExtCmp
\ 00001F EE MOV A,R6
\ 000020 FA MOV R2,A
\ 000021 EF MOV A,R7
\ 000022 FB MOV R3,A
\ 000023 12.... LCALL `??sAddrExtCmp::?relay`; Banked call to: sAddrExtCmp
\ 000026 E9 MOV A,R1
\ 000027 6401 XRL A,#0x1
\ 000029 700A JNZ ??ZDO_ProcessMgmtLeaveReq_1
1695 {
1696 // Remove this device
1697 req.extAddr = NULL;
\ ??ZDO_ProcessMgmtLeaveReq_0:
\ 00002B 7401 MOV A,#0x1
\ 00002D 12.... LCALL ?XSTACK_DISP0_8
\ 000030 E4 CLR A
\ 000031 F0 MOVX @DPTR,A
\ 000032 A3 INC DPTR
\ 000033 8009 SJMP ??ZDO_ProcessMgmtLeaveReq_2
1698 }
1699 else
1700 {
1701 // Remove child device
1702 req.extAddr = msg;
\ ??ZDO_ProcessMgmtLeaveReq_1:
\ 000035 7401 MOV A,#0x1
\ 000037 12.... LCALL ?XSTACK_DISP0_8
\ 00003A EE MOV A,R6
\ 00003B F0 MOVX @DPTR,A
\ 00003C A3 INC DPTR
\ 00003D EF MOV A,R7
1703 }
\ ??ZDO_ProcessMgmtLeaveReq_2:
\ 00003E 12.... LCALL ?Subroutine24 & 0xFFFF
1704
1705 option = msg[Z_EXTADDR_LEN];
\ ??CrossCallReturnLabel_19:
\ 000041 F8 MOV R0,A
1706 if ( option & ZDP_MGMT_LEAVE_REQ_RC )
\ 000042 A2E6 MOV C,0xE0 /* A */.6
\ 000044 5008 JNC ??ZDO_ProcessMgmtLeaveReq_3
1707 {
1708 req.removeChildren = TRUE;
\ 000046 7403 MOV A,#0x3
\ 000048 12.... LCALL ?XSTACK_DISP0_8
\ 00004B 7401 MOV A,#0x1
\ 00004D F0 MOVX @DPTR,A
1709 }
1710
1711 if ( option & ZDP_MGMT_LEAVE_REQ_REJOIN )
\ ??ZDO_ProcessMgmtLeaveReq_3:
\ 00004E E8 MOV A,R0
\ 00004F A2E7 MOV C,0xE0 /* A */.7
\ 000051 5008 JNC ??ZDO_ProcessMgmtLeaveReq_4
1712 {
1713 req.rejoin = TRUE;
\ 000053 7404 MOV A,#0x4
\ 000055 12.... LCALL ?XSTACK_DISP0_8
\ 000058 7401 MOV A,#0x1
\ 00005A F0 MOVX @DPTR,A
1714 }
1715
1716 req.silent = FALSE;
\ ??ZDO_ProcessMgmtLeaveReq_4:
\ 00005B 7405 MOV A,#0x5
\ 00005D 12.... LCALL ?XSTACK_DISP0_8
\ 000060 E4 CLR A
\ 000061 F0 MOVX @DPTR,A
1717
1718 status = NLME_LeaveReq( &req );
\ 000062 ; Setup parameters for call to function NLME_LeaveReq
\ 000062 04 INC A
\ 000063 12.... LCALL ?XSTACK_DISP101_8
\ 000066 12.... LCALL `??NLME_LeaveReq::?relay`; Banked call to: NLME_LeaveReq
\ 000069 E9 MOV A,R1
\ 00006A 85..82 MOV DPL,?XSP + 0
\ 00006D 85..83 MOV DPH,?XSP + 1
\ 000070 F0 MOVX @DPTR,A
1719
1720 ZDP_MgmtLeaveRsp( inMsg->TransSeq, &(inMsg->srcAddr), status, FALSE );
\ 000071 ; Setup parameters for call to function ZDP_SendData
\ 000071 75..00 MOV ?V2,#0x0
\ 000074 78.. MOV R0,#?V2
\ 000076 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 000079 7401 MOV A,#0x1
\ 00007B 12.... LCALL ?XSTACK_DISP100_8
\ 00007E 88.. MOV ?V2,R0
\ 000080 89.. MOV ?V3,R1
\ 000082 78.. MOV R0,#?V2
\ 000084 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000087 75..34 MOV ?V2,#0x34
\ 00008A 75..80 MOV ?V3,#-0x80
\ 00008D 78.. MOV R0,#?V2
\ 00008F 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000092 12.... LCALL ?Subroutine143 & 0xFFFF
\ ??CrossCallReturnLabel_230:
\ 000095 12.... LCALL ?DEALLOC_XSTACK8
1721 }
\ 000098 7406 MOV A,#0x6
\ 00009A 02.... LJMP ?Subroutine2 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine24:
\ 000000 12.... LCALL ?Subroutine169 & 0xFFFF
\ ??CrossCallReturnLabel_283:
\ 000003 A3 INC DPTR
\ 000004 A3 INC DPTR
\ 000005 A3 INC DPTR
\ 000006 E0 MOVX A,@DPTR
\ 000007 22 RET
1722
1723
1724 /*********************************************************************
1725 * @fn ZDO_ProcessMgmtPermitJoinReq
1726 *
1727 * @brief This function processes a Management Permit Join Request
1728 * and generates the response.
1729 *
1730 * @param inMsg - incoming message (request)
1731 *
1732 * @return none
1733 */
\ In segment BANKED_CODE, align 1, keep-with-next
1734 void ZDO_ProcessMgmtPermitJoinReq( zdoIncomingMsg_t *inMsg )
\ ZDO_ProcessMgmtPermitJoinReq:
1735 {
\ 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
\ 00000A 12.... LCALL ?Subroutine130 & 0xFFFF
1736 uint8 stat;
1737 uint8 duration;
1738 uint8 tcsig;
1739
1740 duration = inMsg->asdu[ZDP_MGMT_PERMIT_JOIN_REQ_DURATION];
1741 tcsig = inMsg->asdu[ZDP_MGMT_PERMIT_JOIN_REQ_TC_SIG];
1742
1743 // Set the network layer permit join duration
1744 stat = (byte) NLME_PermitJoiningRequest( duration );
\ ??CrossCallReturnLabel_440:
\ 00000D 12.... LCALL ??Subroutine238_0 & 0xFFFF
\ ??CrossCallReturnLabel_395:
\ 000010 F9 MOV R1,A
\ 000011 12.... LCALL `??NLME_PermitJoiningRequest::?relay`; Banked call to: NLME_PermitJoiningRequest
\ 000014 E9 MOV A,R1
\ 000015 85..82 MOV DPL,?XSP + 0
\ 000018 85..83 MOV DPH,?XSP + 1
\ 00001B 12.... LCALL ?Subroutine33 & 0xFFFF
1745
1746 // Handle the Trust Center Significance
1747 if ( ZG_SECURE_ENABLED && ZG_BUILD_COORDINATOR_TYPE && ZG_DEVICE_COORDINATOR_TYPE )
1748 {
1749 if ( tcsig == TRUE )
1750 {
1751 ZDSecMgrPermitJoining( duration );
1752 }
1753 }
1754
1755 // Send a response if unicast
1756 if ( !inMsg->wasBroadcast )
\ ??CrossCallReturnLabel_40:
\ 00001E 7027 JNZ ??ZDO_ProcessMgmtPermitJoinReq_0
1757 {
1758 ZDP_MgmtPermitJoinRsp( inMsg->TransSeq, &(inMsg->srcAddr), stat, false );
\ 000020 ; Setup parameters for call to function ZDP_SendData
\ 000020 75..00 MOV ?V0,#0x0
\ 000023 78.. MOV R0,#?V0
\ 000025 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 000028 7401 MOV A,#0x1
\ 00002A 12.... LCALL ?XSTACK_DISP100_8
\ 00002D 88.. MOV ?V0,R0
\ 00002F 89.. MOV ?V1,R1
\ 000031 78.. MOV R0,#?V0
\ 000033 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000036 75..36 MOV ?V0,#0x36
\ 000039 75..80 MOV ?V1,#-0x80
\ 00003C 78.. MOV R0,#?V0
\ 00003E 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000041 12.... LCALL ?Subroutine139 & 0xFFFF
1759 }
\ ??CrossCallReturnLabel_226:
\ 000044 12.... LCALL ?DEALLOC_XSTACK8
1760 }
\ ??ZDO_ProcessMgmtPermitJoinReq_0:
\ 000047 02.... LJMP ?Subroutine8 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine33:
\ 000000 F0 MOVX @DPTR,A
\ 000001 EE MOV A,R6
\ 000002 240B ADD A,#0xb
\ 000004 F582 MOV DPL,A
\ 000006 E4 CLR A
\ 000007 3F ADDC A,R7
\ 000008 F583 MOV DPH,A
\ 00000A E0 MOVX A,@DPTR
\ 00000B 22 RET
1761
1762 /*
1763 * This function stub allows the next higher layer to be notified of
1764 * a permit joining timeout.
1765 */
1766 /*********************************************************************
1767 * @fn ZDO_ProcessMgmtPermitJoinTimeout
1768 *
1769 * @brief This function stub allows the next higher layer to be
1770 * notified of a permit joining timeout. Currently, this
1771 * directly bypasses the APS layer.
1772 *
1773 * @param none
1774 *
1775 * @return none
1776 */
\ In segment BANKED_CODE, align 1, keep-with-next
1777 void ZDO_ProcessMgmtPermitJoinTimeout( void )
\ NLME_PermitJoiningTimeout:
1778 {
\ 000000 ; Saved register size: 0
\ 000000 ; Auto size: 0
1779 #if defined( ZDO_MGMT_PERMIT_JOIN_RESPONSE )
1780 // Currently, only the ZDSecMgr needs to be notified
1781 if ( ZG_SECURE_ENABLED && ZG_BUILD_COORDINATOR_TYPE && ZG_DEVICE_COORDINATOR_TYPE )
1782 {
1783 ZDSecMgrPermitJoiningTimeout();
1784 }
1785 #endif
1786 }
\ 000000 02.... LJMP ?BRET
1787
1788 /*********************************************************************
1789 * @fn ZDO_ProcessUserDescReq
1790 *
1791 * @brief This function finishes the processing of the User
1792 * Descriptor Request and generates the response.
1793 *
1794 * @param inMsg - incoming message (request)
1795 *
1796 * @return none
1797 */
\ In segment BANKED_CODE, align 1, keep-with-next
1798 void ZDO_ProcessUserDescReq( zdoIncomingMsg_t *inMsg )
\ ZDO_ProcessUserDescReq:
1799 {
\ 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: 17
\ 000005 74EF MOV A,#-0x11
\ 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
1800 uint16 aoi = BUILD_UINT16( inMsg->asdu[0], inMsg->asdu[1] );
\ 00000E 12.... LCALL ?Subroutine136 & 0xFFFF
\ ??CrossCallReturnLabel_363:
\ 000011 12.... LCALL ?Subroutine72 & 0xFFFF
\ ??CrossCallReturnLabel_115:
\ 000014 F5.. MOV ?V0,A
\ 000016 E4 CLR A
\ 000017 39 ADDC A,R1
\ 000018 F5.. MOV ?V1,A
1801 UserDescriptorFormat_t userDesc;
1802
1803 if ( (aoi == ZDAppNwkAddr.addr.shortAddr) && (ZSUCCESS == osal_nv_read(
1804 ZCD_NV_USERDESC, 0, sizeof(UserDescriptorFormat_t), &userDesc )) )
\ 00001A 90.... MOV DPTR,#ZDAppNwkAddr
\ 00001D E0 MOVX A,@DPTR
\ 00001E 6A XRL A,R2
\ 00001F 7003 JNZ ??ZDO_ProcessUserDescReq_0
\ 000021 A3 INC DPTR
\ 000022 E0 MOVX A,@DPTR
\ 000023 69 XRL A,R1
\ ??ZDO_ProcessUserDescReq_0:
\ 000024 7052 JNZ ??ZDO_ProcessUserDescReq_1
\ 000026 ; Setup parameters for call to function osal_nv_read
\ 000026 A8.. MOV R0,?XSP + 0
\ 000028 A9.. MOV R1,?XSP + 1
\ 00002A 88.. MOV ?V2,R0
\ 00002C 89.. MOV ?V3,R1
\ 00002E 78.. MOV R0,#?V2
\ 000030 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000033 75..11 MOV ?V2,#0x11
\ 000036 75..00 MOV ?V3,#0x0
\ 000039 78.. MOV R0,#?V2
\ 00003B 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00003E 7C00 MOV R4,#0x0
\ 000040 7D00 MOV R5,#0x0
\ 000042 7A81 MOV R2,#-0x7f
\ 000044 7B00 MOV R3,#0x0
\ 000046 12.... LCALL `??osal_nv_read::?relay`; Banked call to: osal_nv_read
\ 000049 7404 MOV A,#0x4
\ 00004B 12.... LCALL ?DEALLOC_XSTACK8
\ 00004E E9 MOV A,R1
\ 00004F 7027 JNZ ??ZDO_ProcessUserDescReq_1
1805 {
1806 ZDP_UserDescRsp( inMsg->TransSeq, &(inMsg->srcAddr), aoi, &userDesc, false );
\ 000051 ; Setup parameters for call to function ZDP_UserDescRsp
\ 000051 75..00 MOV ?V2,#0x0
\ 000054 78.. MOV R0,#?V2
\ 000056 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 000059 7401 MOV A,#0x1
\ 00005B 12.... LCALL ?XSTACK_DISP100_8
\ 00005E 88.. MOV ?V2,R0
\ 000060 89.. MOV ?V3,R1
\ 000062 78.. MOV R0,#?V2
\ 000064 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000067 AC.. MOV R4,?V0
\ 000069 AD.. MOV R5,?V1
\ 00006B 12.... LCALL ?Subroutine138 & 0xFFFF
1807 }
\ ??CrossCallReturnLabel_223:
\ 00006E 12.... LCALL `??ZDP_UserDescRsp::?relay`; Banked call to: ZDP_UserDescRsp
\ 000071 7403 MOV A,#0x3
\ 000073 12.... LCALL ?DEALLOC_XSTACK8
\ 000076 8020 SJMP ??ZDO_ProcessUserDescReq_2
1808 else
1809 {
1810 ZDP_GenericRsp(inMsg->TransSeq, &(inMsg->srcAddr),
1811 ZDP_NOT_SUPPORTED, aoi, User_Desc_rsp, inMsg->SecurityUse );
\ ??ZDO_ProcessUserDescReq_1:
\ 000078 ; Setup parameters for call to function ZDP_GenericRsp
\ 000078 75..11 MOV ?V2,#0x11
\ 00007B 75..80 MOV ?V3,#-0x80
\ 00007E 78.. MOV R0,#?V2
\ 000080 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000083 78.. MOV R0,#?V0
\ 000085 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000088 12.... LCALL ?Subroutine146 & 0xFFFF
1812 }
\ ??CrossCallReturnLabel_237:
\ 00008B 7C84 MOV R4,#-0x7c
\ 00008D 12.... LCALL ?Subroutine138 & 0xFFFF
\ ??CrossCallReturnLabel_224:
\ 000090 12.... LCALL `??ZDP_GenericRsp::?relay`; Banked call to: ZDP_GenericRsp
\ 000093 7404 MOV A,#0x4
\ 000095 12.... LCALL ?DEALLOC_XSTACK8
1813 }
\ ??ZDO_ProcessUserDescReq_2:
\ 000098 7411 MOV A,#0x11
\ 00009A 02.... LJMP ?Subroutine2 & 0xFFFF
1814
1815 /*********************************************************************
1816 * @fn ZDO_ProcessUserDescSet
1817 *
1818 * @brief This function finishes the processing of the User
1819 * Descriptor Set and generates the response.
1820 *
1821 * @param inMsg - incoming message (request)
1822 *
1823 * @return none
1824 */
\ In segment BANKED_CODE, align 1, keep-with-next
1825 void ZDO_ProcessUserDescSet( zdoIncomingMsg_t *inMsg )
\ ZDO_ProcessUserDescSet:
1826 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 REQUIRE ?V2
\ 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: 21
\ 000005 74EB MOV A,#-0x15
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A 8A.. MOV ?V4,R2
\ 00000C 8B.. MOV ?V5,R3
1827 uint8 *msg;
1828 uint16 aoi;
1829 UserDescriptorFormat_t userDesc;
1830 uint8 outMsg[3];
1831 uint8 status;
1832
1833 msg = inMsg->asdu;
\ 00000E 12.... LCALL ??Subroutine246_0 & 0xFFFF
\ ??CrossCallReturnLabel_452:
\ 000011 35.. ADDC A,?V5
\ 000013 12.... LCALL ?Subroutine85 & 0xFFFF
1834 aoi = BUILD_UINT16( msg[0], msg[1] );
\ ??CrossCallReturnLabel_137:
\ 000016 FA MOV R2,A
\ 000017 E4 CLR A
\ 000018 CA XCH A,R2
\ 000019 FB MOV R3,A
\ 00001A EC MOV A,R4
\ 00001B 2A ADD A,R2
\ 00001C FE MOV R6,A
\ 00001D E4 CLR A
\ 00001E 3B ADDC A,R3
\ 00001F FF MOV R7,A
1835
1836 if ( aoi == ZDAppNwkAddr.addr.shortAddr )
\ 000020 90.... MOV DPTR,#ZDAppNwkAddr
\ 000023 E0 MOVX A,@DPTR
\ 000024 6E XRL A,R6
\ 000025 7003 JNZ ??ZDO_ProcessUserDescSet_0
\ 000027 A3 INC DPTR
\ 000028 E0 MOVX A,@DPTR
\ 000029 6F XRL A,R7
\ ??ZDO_ProcessUserDescSet_0:
\ 00002A 6003 JZ $+5
\ 00002C 02.... LJMP ??ZDO_ProcessUserDescSet_1 & 0xFFFF
1837 {
1838 userDesc.len = (msg[2] < AF_MAX_USER_DESCRIPTOR_LEN) ? msg[2] : AF_MAX_USER_DESCRIPTOR_LEN;
\ 00002F 8882 MOV DPL,R0
\ 000031 8983 MOV DPH,R1
\ 000033 A3 INC DPTR
\ 000034 A3 INC DPTR
\ 000035 E0 MOVX A,@DPTR
\ 000036 9410 SUBB A,#0x10
\ 000038 5009 JNC ??ZDO_ProcessUserDescSet_2
\ 00003A 8882 MOV DPL,R0
\ 00003C 8983 MOV DPH,R1
\ 00003E 12.... LCALL ?Subroutine107 & 0xFFFF
\ ??CrossCallReturnLabel_372:
\ 000041 8008 SJMP ??ZDO_ProcessUserDescSet_3
\ ??ZDO_ProcessUserDescSet_2:
\ 000043 85..82 MOV DPL,?XSP + 0
\ 000046 85..83 MOV DPH,?XSP + 1
\ 000049 7410 MOV A,#0x10
\ ??ZDO_ProcessUserDescSet_3:
\ 00004B F0 MOVX @DPTR,A
\ 00004C E0 MOVX A,@DPTR
\ 00004D C0E0 PUSH A
\ 00004F 7404 MOV A,#0x4
\ 000051 12.... LCALL ?XSTACK_DISP0_8
\ 000054 D0E0 POP A
\ 000056 12.... LCALL ?Subroutine38 & 0xFFFF
1839 msg ++; // increment one for the length field
1840
1841 osal_memcpy( userDesc.desc, &msg[2], userDesc.len );
\ ??CrossCallReturnLabel_50:
\ 000059 A982 MOV R1,DPL
\ 00005B AA83 MOV R2,DPH
\ 00005D 89.. MOV ?V0,R1
\ 00005F 8A.. MOV ?V1,R2
\ 000061 75..00 MOV ?V2,#0x0
\ 000064 78.. MOV R0,#?V0
\ 000066 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 000069 7407 MOV A,#0x7
\ 00006B 12.... LCALL ?XSTACK_DISP0_8
\ 00006E E0 MOVX A,@DPTR
\ 00006F FC MOV R4,A
\ 000070 7D00 MOV R5,#0x0
\ 000072 7408 MOV A,#0x8
\ 000074 12.... LCALL ?XSTACK_DISP0_8
\ 000077 AA82 MOV R2,DPL
\ 000079 AB83 MOV R3,DPH
\ 00007B 12.... LCALL ??Subroutine280_0 & 0xFFFF
\ ??CrossCallReturnLabel_637:
\ 00007E 12.... LCALL ?DEALLOC_XSTACK8
1842 osal_nv_write( ZCD_NV_USERDESC, 0, sizeof(UserDescriptorFormat_t), &userDesc );
\ 000081 ; Setup parameters for call to function osal_nv_write
\ 000081 7404 MOV A,#0x4
\ 000083 12.... LCALL ?XSTACK_DISP100_8
\ 000086 88.. MOV ?V0,R0
\ 000088 89.. MOV ?V1,R1
\ 00008A 78.. MOV R0,#?V0
\ 00008C 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00008F 75..11 MOV ?V0,#0x11
\ 000092 75..00 MOV ?V1,#0x0
\ 000095 78.. MOV R0,#?V0
\ 000097 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00009A 7C00 MOV R4,#0x0
\ 00009C 7D00 MOV R5,#0x0
\ 00009E 7A81 MOV R2,#-0x7f
\ 0000A0 7B00 MOV R3,#0x0
\ 0000A2 12.... LCALL `??osal_nv_write::?relay`; Banked call to: osal_nv_write
\ 0000A5 7404 MOV A,#0x4
\ 0000A7 12.... LCALL ?DEALLOC_XSTACK8
1843 if ( userDesc.len != 0 )
\ 0000AA 7404 MOV A,#0x4
\ 0000AC 12.... LCALL ?XSTACK_DISP0_8
\ 0000AF E0 MOVX A,@DPTR
\ 0000B0 90.... MOV DPTR,#ZDO_Config_Node_Descriptor
\ 0000B3 6005 JZ ??ZDO_ProcessUserDescSet_4
1844 {
1845 ZDO_Config_Node_Descriptor.UserDescAvail = TRUE;
\ 0000B5 E0 MOVX A,@DPTR
\ 0000B6 D2E4 SETB 0xE0 /* A */.4
\ 0000B8 8003 SJMP ??ZDO_ProcessUserDescSet_5
1846 }
1847 else
1848 {
1849 ZDO_Config_Node_Descriptor.UserDescAvail = FALSE;
\ ??ZDO_ProcessUserDescSet_4:
\ 0000BA E0 MOVX A,@DPTR
\ 0000BB C2E4 CLR 0xE0 /* A */.4
\ ??ZDO_ProcessUserDescSet_5:
\ 0000BD F0 MOVX @DPTR,A
1850 }
1851
1852 status = ZDP_SUCCESS;
\ 0000BE 85..82 MOV DPL,?XSP + 0
\ 0000C1 85..83 MOV DPH,?XSP + 1
\ 0000C4 E4 CLR A
\ 0000C5 8008 SJMP ??ZDO_ProcessUserDescSet_6
1853 }
1854 else
1855 {
1856 status = ZDP_NOT_SUPPORTED;
\ ??ZDO_ProcessUserDescSet_1:
\ 0000C7 85..82 MOV DPL,?XSP + 0
\ 0000CA 85..83 MOV DPH,?XSP + 1
\ 0000CD 7484 MOV A,#-0x7c
\ ??ZDO_ProcessUserDescSet_6:
\ 0000CF F0 MOVX @DPTR,A
1857 }
1858
1859 outMsg[0] = status;
\ 0000D0 E0 MOVX A,@DPTR
\ 0000D1 C0E0 PUSH A
\ 0000D3 7401 MOV A,#0x1
\ 0000D5 12.... LCALL ?XSTACK_DISP0_8
\ 0000D8 D0E0 POP A
\ 0000DA F0 MOVX @DPTR,A
1860 outMsg[1] = LO_UINT16( aoi );
\ 0000DB 7402 MOV A,#0x2
\ 0000DD 12.... LCALL ?XSTACK_DISP0_8
\ 0000E0 EE MOV A,R6
\ 0000E1 F0 MOVX @DPTR,A
1861 outMsg[2] = LO_UINT16( aoi );
\ 0000E2 7403 MOV A,#0x3
\ 0000E4 12.... LCALL ?XSTACK_DISP0_8
\ 0000E7 EE MOV A,R6
\ 0000E8 F0 MOVX @DPTR,A
1862
1863 ZDP_SendData( &(inMsg->TransSeq), &(inMsg->srcAddr), User_Desc_conf, 3, outMsg,
1864 inMsg->SecurityUse );
\ 0000E9 ; Setup parameters for call to function ZDP_SendData
\ 0000E9 12.... LCALL ?Subroutine148 & 0xFFFF
\ ??CrossCallReturnLabel_626:
\ 0000EC 35.. ADDC A,?V5
\ 0000EE 12.... LCALL ??Subroutine248_0 & 0xFFFF
\ ??CrossCallReturnLabel_460:
\ 0000F1 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 0000F4 7402 MOV A,#0x2
\ 0000F6 12.... LCALL ?XSTACK_DISP100_8
\ 0000F9 88.. MOV ?V0,R0
\ 0000FB 89.. MOV ?V1,R1
\ 0000FD 78.. MOV R0,#?V0
\ 0000FF 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000102 75..14 MOV ?V0,#0x14
\ 000105 75..80 MOV ?V1,#-0x80
\ 000108 78.. MOV R0,#?V0
\ 00010A 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00010D 7903 MOV R1,#0x3
\ 00010F 12.... LCALL ?Subroutine145 & 0xFFFF
\ ??CrossCallReturnLabel_235:
\ 000112 FA MOV R2,A
\ 000113 E4 CLR A
\ 000114 35.. ADDC A,?V5
\ 000116 FB MOV R3,A
\ 000117 12.... LCALL ?Subroutine161 & 0xFFFF
\ ??CrossCallReturnLabel_268:
\ 00011A 12.... LCALL ?DEALLOC_XSTACK8
1865 }
\ 00011D 7415 MOV A,#0x15
\ 00011F 02.... LJMP ?Subroutine5 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine248_0:
\ 000000 F583 MOV DPH,A
\ 000002 REQUIRE ??Subroutine249_0
\ 000002 ; // Fall through to label ??Subroutine249_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine161:
\ 000000 12.... LCALL ??Subroutine245_0 & 0xFFFF
\ ??CrossCallReturnLabel_446:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine38:
\ 000000 12.... LCALL ?Subroutine173 & 0xFFFF
\ ??CrossCallReturnLabel_288:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine173:
\ 000000 12.... LCALL ?Subroutine210 & 0xFFFF
\ ??CrossCallReturnLabel_336:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine210:
\ 000000 F0 MOVX @DPTR,A
\ 000001 ; Setup parameters for call to function osal_memcpy
\ 000001 8882 MOV DPL,R0
\ 000003 8983 MOV DPH,R1
\ 000005 A3 INC DPTR
\ 000006 A3 INC DPTR
\ 000007 A3 INC DPTR
\ 000008 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine280_0:
\ 000000 12.... LCALL `??osal_memcpy::?relay`; Banked call to: osal_memcpy
\ 000003 7403 MOV A,#0x3
\ 000005 22 RET
1866
1867 /*********************************************************************
1868 * @fn ZDO_ProcessDeviceAnnce
1869 *
1870 * @brief This function processes a device annouce message.
1871 *
1872 * @param inMsg - incoming message
1873 *
1874 * @return none
1875 */
\ In segment BANKED_CODE, align 1, keep-with-next
1876 void ZDO_ProcessDeviceAnnce( zdoIncomingMsg_t *inMsg )
\ ZDO_ProcessDeviceAnnce:
1877 {
\ 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: 32
\ 000005 74E0 MOV A,#-0x20
\ 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
1878 ZDO_DeviceAnnce_t Annce;
1879 AddrMgrEntry_t addrEntry;
1880 uint8 parentExt[Z_EXTADDR_LEN];
1881
1882 // Parse incoming message
1883 ZDO_ParseDeviceAnnce( inMsg, &Annce );
\ 00000E ; Setup parameters for call to function ZDO_ParseDeviceAnnce
\ 00000E AC.. MOV R4,?XSP + 0
\ 000010 AD.. MOV R5,?XSP + 1
\ 000012 12.... LCALL `??ZDO_ParseDeviceAnnce::?relay`; Banked call to: ZDO_ParseDeviceAnnce
1884
1885 if ( ZSTACK_END_DEVICE_BUILD )
1886 {
1887 // Make sure the message didn't come from myself - end device only
1888 if ( osal_ExtAddrEqual( NLME_GetExtAddr(), Annce.extAddr ) && Annce.nwkAddr == NLME_GetShortAddr() )
1889 {
1890 return;
1891 }
1892 }
1893
1894 #if defined ( ZIGBEE_STOCHASTIC_ADDRESSING )
1895 // Clean up the neighbor table
1896 nwkNeighborRemoveAllStranded();
\ 000015 ; Setup parameters for call to function nwkNeighborRemoveAllStranded
\ 000015 12.... LCALL `??nwkNeighborRemoveAllStranded::?relay`; Banked call to: nwkNeighborRemoveAllStranded
1897
1898 // If address conflict is detected, no need to update the address manager
1899 if ( NLME_CheckNewAddrSet( Annce.nwkAddr, Annce.extAddr )== ZFailure )
\ 000018 ; Setup parameters for call to function NLME_CheckNewAddrSet
\ 000018 7402 MOV A,#0x2
\ 00001A 12.... LCALL ?XSTACK_DISP0_8
\ 00001D 12.... LCALL ?Subroutine118 & 0xFFFF
\ ??CrossCallReturnLabel_494:
\ 000020 12.... LCALL `??NLME_CheckNewAddrSet::?relay`; Banked call to: NLME_CheckNewAddrSet
\ 000023 E9 MOV A,R1
\ 000024 6401 XRL A,#0x1
\ 000026 7003 JNZ $+5
\ 000028 02.... LJMP ??ZDO_ProcessDeviceAnnce_0 & 0xFFFF
1900 {
1901 return;
1902 }
1903 #endif
1904
1905 #if defined ( ZIGBEE_STOCHASTIC_ADDRESSING )
1906 // Check for parent's address
1907 NLME_GetCoordExtAddr( parentExt );
\ 00002B ; Setup parameters for call to function NLME_GetCoordExtAddr
\ 00002B 7418 MOV A,#0x18
\ 00002D 12.... LCALL ?XSTACK_DISP101_8
\ 000030 12.... LCALL `??NLME_GetCoordExtAddr::?relay`; Banked call to: NLME_GetCoordExtAddr
1908 if ( osal_ExtAddrEqual( parentExt, Annce.extAddr ) )
\ 000033 ; Setup parameters for call to function sAddrExtCmp
\ 000033 7402 MOV A,#0x2
\ 000035 12.... LCALL ?XSTACK_DISP0_8
\ 000038 AC82 MOV R4,DPL
\ 00003A AD83 MOV R5,DPH
\ 00003C 7418 MOV A,#0x18
\ 00003E 12.... LCALL ?XSTACK_DISP101_8
\ 000041 12.... LCALL `??sAddrExtCmp::?relay`; Banked call to: sAddrExtCmp
\ 000044 E9 MOV A,R1
\ 000045 6032 JZ ??ZDO_ProcessDeviceAnnce_1
1909 {
1910 if ( Annce.nwkAddr != NLME_GetCoordShortAddr() )
\ 000047 ; Setup parameters for call to function NLME_GetCoordShortAddr
\ 000047 12.... LCALL `??NLME_GetCoordShortAddr::?relay`; Banked call to: NLME_GetCoordShortAddr
\ 00004A 8A.. MOV ?V0,R2
\ 00004C 8B.. MOV ?V1,R3
\ 00004E A8.. MOV R0,?V0
\ 000050 A9.. MOV R1,?V1
\ 000052 85..82 MOV DPL,?XSP + 0
\ 000055 85..83 MOV DPH,?XSP + 1
\ 000058 E0 MOVX A,@DPTR
\ 000059 68 XRL A,R0
\ 00005A 7003 JNZ ??ZDO_ProcessDeviceAnnce_2
\ 00005C A3 INC DPTR
\ 00005D E0 MOVX A,@DPTR
\ 00005E 69 XRL A,R1
\ ??ZDO_ProcessDeviceAnnce_2:
\ 00005F 6018 JZ ??ZDO_ProcessDeviceAnnce_1
1911 {
1912 // Set the Parent's MAC's new short address
1913 _NIB.nwkCoordAddress = Annce.nwkAddr;
\ 000061 85..82 MOV DPL,?XSP + 0
\ 000064 85..83 MOV DPH,?XSP + 1
\ 000067 12.... LCALL ??Subroutine253_0 & 0xFFFF
\ ??CrossCallReturnLabel_468:
\ 00006A 90.... MOV DPTR,#_NIB + 23
\ 00006D 12.... LCALL ??Subroutine294_0 & 0xFFFF
1914 ZMacSetReq( ZMacCoordShortAddress, (byte*)&(_NIB.nwkCoordAddress) );
\ ??CrossCallReturnLabel_731:
\ 000070 ; Setup parameters for call to function ZMacSetReq
\ 000070 7A.. MOV R2,#(_NIB + 23) & 0xff
\ 000072 7B.. MOV R3,#((_NIB + 23) >> 8) & 0xff
\ 000074 794B MOV R1,#0x4b
\ 000076 12.... LCALL `??ZMacSetReq::?relay`; Banked call to: ZMacSetReq
1915 }
1916 }
1917
1918 if ( ZSTACK_ROUTER_BUILD )
1919 {
1920 // If the device annce comes from a end device child that has moved
1921 // to another parent, remove it from associated device list
1922
1923 // If the dev annce is coming from other device's children,
1924 // (The dev annce from its own children shall be unicast to itself,
1925 // So check the mac destination address)
1926 // Remove it from the associated device list. If it is not
1927 // a child, no action will be taken in AssocRemove() anyway.
1928 if ( inMsg->macDestAddr != NLME_GetShortAddr() )
\ ??ZDO_ProcessDeviceAnnce_1:
\ 000079 ; Setup parameters for call to function NLME_GetShortAddr
\ 000079 12.... LCALL ?Subroutine125 & 0xFFFF
\ ??CrossCallReturnLabel_206:
\ 00007C EE MOV A,R6
\ 00007D 2411 ADD A,#0x11
\ 00007F F582 MOV DPL,A
\ 000081 E4 CLR A
\ 000082 3F ADDC A,R7
\ 000083 F583 MOV DPH,A
\ 000085 E0 MOVX A,@DPTR
\ 000086 68 XRL A,R0
\ 000087 7003 JNZ ??ZDO_ProcessDeviceAnnce_3
\ 000089 A3 INC DPTR
\ 00008A E0 MOVX A,@DPTR
\ 00008B 69 XRL A,R1
\ ??ZDO_ProcessDeviceAnnce_3:
\ 00008C 603A JZ ??ZDO_ProcessDeviceAnnce_4
1929 {
1930 associated_devices_t *dev_ptr;
1931
1932 // If it's an end device child
1933 dev_ptr = AssocGetWithExt( Annce.extAddr );
\ 00008E ; Setup parameters for call to function AssocGetWithExt
\ 00008E 7402 MOV A,#0x2
\ 000090 12.... LCALL ?XSTACK_DISP0_8
\ 000093 AA82 MOV R2,DPL
\ 000095 AB83 MOV R3,DPH
\ 000097 12.... LCALL `??AssocGetWithExt::?relay`; Banked call to: AssocGetWithExt
\ 00009A 8B.. MOV ?V1,R3
\ 00009C A9.. MOV R1,?V1
1934 if ( dev_ptr )
\ 00009E EA MOV A,R2
\ 00009F 49 ORL A,R1
\ 0000A0 6026 JZ ??ZDO_ProcessDeviceAnnce_4
1935 {
1936 if ( dev_ptr->nodeRelation == CHILD_RFD ||
1937 dev_ptr->nodeRelation == CHILD_RFD_RX_IDLE )
\ 0000A2 8A82 MOV DPL,R2
\ 0000A4 8B83 MOV DPH,R3
\ 0000A6 A3 INC DPTR
\ 0000A7 A3 INC DPTR
\ 0000A8 A3 INC DPTR
\ 0000A9 A3 INC DPTR
\ 0000AA E0 MOVX A,@DPTR
\ 0000AB 6401 XRL A,#0x1
\ 0000AD 600D JZ ??ZDO_ProcessDeviceAnnce_5
\ 0000AF 8A82 MOV DPL,R2
\ 0000B1 8B83 MOV DPH,R3
\ 0000B3 A3 INC DPTR
\ 0000B4 A3 INC DPTR
\ 0000B5 A3 INC DPTR
\ 0000B6 A3 INC DPTR
\ 0000B7 E0 MOVX A,@DPTR
\ 0000B8 6402 XRL A,#0x2
\ 0000BA 700C JNZ ??ZDO_ProcessDeviceAnnce_4
1938 {
1939 AssocRemove( Annce.extAddr );
\ ??ZDO_ProcessDeviceAnnce_5:
\ 0000BC ; Setup parameters for call to function AssocRemove
\ 0000BC 7402 MOV A,#0x2
\ 0000BE 12.... LCALL ?XSTACK_DISP0_8
\ 0000C1 AA82 MOV R2,DPL
\ 0000C3 AB83 MOV R3,DPH
\ 0000C5 12.... LCALL `??AssocRemove::?relay`; Banked call to: AssocRemove
1940 }
1941 }
1942 }
1943
1944 if ( Annce.nwkAddr != NLME_GetShortAddr() )
\ ??ZDO_ProcessDeviceAnnce_4:
\ 0000C8 ; Setup parameters for call to function NLME_GetShortAddr
\ 0000C8 12.... LCALL ?Subroutine125 & 0xFFFF
\ ??CrossCallReturnLabel_207:
\ 0000CB 85..82 MOV DPL,?XSP + 0
\ 0000CE 85..83 MOV DPH,?XSP + 1
\ 0000D1 E0 MOVX A,@DPTR
\ 0000D2 68 XRL A,R0
\ 0000D3 7003 JNZ ??ZDO_ProcessDeviceAnnce_6
\ 0000D5 A3 INC DPTR
\ 0000D6 E0 MOVX A,@DPTR
\ 0000D7 69 XRL A,R1
\ ??ZDO_ProcessDeviceAnnce_6:
\ 0000D8 6011 JZ ??ZDO_ProcessDeviceAnnce_7
1945 {
1946 // If an associated device is found with matched extended Address,
1947 // update its short address
1948 if ( AssocChangeNwkAddr( Annce.nwkAddr, Annce.extAddr ) )
\ 0000DA ; Setup parameters for call to function AssocChangeNwkAddr
\ 0000DA 7402 MOV A,#0x2
\ 0000DC 12.... LCALL ?XSTACK_DISP0_8
\ 0000DF 12.... LCALL ?Subroutine118 & 0xFFFF
\ ??CrossCallReturnLabel_495:
\ 0000E2 12.... LCALL `??AssocChangeNwkAddr::?relay`; Banked call to: AssocChangeNwkAddr
\ 0000E5 E9 MOV A,R1
\ 0000E6 6003 JZ ??ZDO_ProcessDeviceAnnce_7
1949 {
1950 // Set event to save NV
1951 ZDApp_NVUpdate();
\ 0000E8 ; Setup parameters for call to function ZDApp_NVUpdate
\ 0000E8 12.... LCALL `??ZDApp_NVUpdate::?relay`; Banked call to: ZDApp_NVUpdate
1952 }
1953 }
1954 }
1955
1956 // Update the neighbor table
1957 nwkNeighborUpdateNwkAddr( Annce.nwkAddr, Annce.extAddr );
\ ??ZDO_ProcessDeviceAnnce_7:
\ 0000EB ; Setup parameters for call to function nwkNeighborUpdateNwkAddr
\ 0000EB 7402 MOV A,#0x2
\ 0000ED 12.... LCALL ?XSTACK_DISP0_8
\ 0000F0 12.... LCALL ?Subroutine118 & 0xFFFF
\ ??CrossCallReturnLabel_496:
\ 0000F3 12.... LCALL `??nwkNeighborUpdateNwkAddr::?relay`; Banked call to: nwkNeighborUpdateNwkAddr
1958
1959 // Assume that the device has moved, remove existing routing entries
1960 RTG_RemoveRtgEntry( Annce.nwkAddr, 0 );
\ 0000F6 ; Setup parameters for call to function RTG_RemoveRtgEntry
\ 0000F6 7900 MOV R1,#0x0
\ 0000F8 12.... LCALL ??Subroutine255_0 & 0xFFFF
\ ??CrossCallReturnLabel_492:
\ 0000FB 12.... LCALL `??RTG_RemoveRtgEntry::?relay`; Banked call to: RTG_RemoveRtgEntry
1961
1962 #endif // ZIGBEE_STOCHASTIC_ADDRESSING
1963
1964 // Fill in the extended address in address manager if we don't have it already.
1965 addrEntry.user = ADDRMGR_USER_DEFAULT;
\ 0000FE 740B MOV A,#0xb
\ 000100 12.... LCALL ?XSTACK_DISP0_8
\ 000103 E4 CLR A
\ 000104 12.... LCALL ?Subroutine31 & 0xFFFF
1966 addrEntry.nwkAddr = Annce.nwkAddr;
\ ??CrossCallReturnLabel_34:
\ 000107 F8 MOV R0,A
\ 000108 A3 INC DPTR
\ 000109 E0 MOVX A,@DPTR
\ 00010A F9 MOV R1,A
\ 00010B 740C MOV A,#0xc
\ 00010D 12.... LCALL ?XSTACK_DISP0_8
\ 000110 12.... LCALL ?Subroutine41 & 0xFFFF
1967 if ( AddrMgrEntryLookupNwk( &addrEntry ) )
\ ??CrossCallReturnLabel_58:
\ 000113 12.... LCALL ?XSTACK_DISP101_8
\ 000116 12.... LCALL `??AddrMgrEntryLookupNwk::?relay`; Banked call to: AddrMgrEntryLookupNwk
\ 000119 E9 MOV A,R1
\ 00011A 603F JZ ??ZDO_ProcessDeviceAnnce_8
1968 {
1969 osal_memset( parentExt, 0, Z_EXTADDR_LEN );
\ 00011C ; Setup parameters for call to function osal_memset
\ 00011C 7C08 MOV R4,#0x8
\ 00011E 7D00 MOV R5,#0x0
\ 000120 7900 MOV R1,#0x0
\ 000122 7418 MOV A,#0x18
\ 000124 12.... LCALL ?XSTACK_DISP101_8
\ 000127 12.... LCALL `??osal_memset::?relay`; Banked call to: osal_memset
1970 if ( osal_ExtAddrEqual( parentExt, addrEntry.extAddr ) )
\ 00012A ; Setup parameters for call to function sAddrExtCmp
\ 00012A 740E MOV A,#0xe
\ 00012C 12.... LCALL ?XSTACK_DISP0_8
\ 00012F AC82 MOV R4,DPL
\ 000131 AD83 MOV R5,DPH
\ 000133 7418 MOV A,#0x18
\ 000135 12.... LCALL ?XSTACK_DISP101_8
\ 000138 12.... LCALL `??sAddrExtCmp::?relay`; Banked call to: sAddrExtCmp
\ 00013B E9 MOV A,R1
\ 00013C 601D JZ ??ZDO_ProcessDeviceAnnce_8
1971 {
1972 AddrMgrExtAddrSet( addrEntry.extAddr, Annce.extAddr );
\ 00013E ; Setup parameters for call to function AddrMgrExtAddrSet
\ 00013E 7402 MOV A,#0x2
\ 000140 12.... LCALL ?XSTACK_DISP0_8
\ 000143 AC82 MOV R4,DPL
\ 000145 AD83 MOV R5,DPH
\ 000147 740E MOV A,#0xe
\ 000149 12.... LCALL ?XSTACK_DISP0_8
\ 00014C AA82 MOV R2,DPL
\ 00014E AB83 MOV R3,DPH
\ 000150 12.... LCALL `??AddrMgrExtAddrSet::?relay`; Banked call to: AddrMgrExtAddrSet
1973 AddrMgrEntryUpdate( &addrEntry );
\ 000153 ; Setup parameters for call to function AddrMgrEntryUpdate
\ 000153 740B MOV A,#0xb
\ 000155 12.... LCALL ?XSTACK_DISP101_8
\ 000158 12.... LCALL `??AddrMgrEntryUpdate::?relay`; Banked call to: AddrMgrEntryUpdate
1974 }
1975 }
1976
1977 // Update the short address in address manager if it's been changed
1978 AddrMgrExtAddrSet( addrEntry.extAddr, Annce.extAddr );
\ ??ZDO_ProcessDeviceAnnce_8:
\ 00015B ; Setup parameters for call to function AddrMgrExtAddrSet
\ 00015B 7402 MOV A,#0x2
\ 00015D 12.... LCALL ?XSTACK_DISP0_8
\ 000160 AC82 MOV R4,DPL
\ 000162 AD83 MOV R5,DPH
\ 000164 740E MOV A,#0xe
\ 000166 12.... LCALL ?XSTACK_DISP0_8
\ 000169 AA82 MOV R2,DPL
\ 00016B AB83 MOV R3,DPH
\ 00016D 12.... LCALL `??AddrMgrExtAddrSet::?relay`; Banked call to: AddrMgrExtAddrSet
1979 if ( AddrMgrEntryLookupExt( &addrEntry ) )
\ 000170 ; Setup parameters for call to function AddrMgrEntryLookupExt
\ 000170 740B MOV A,#0xb
\ 000172 12.... LCALL ?XSTACK_DISP101_8
\ 000175 12.... LCALL `??AddrMgrEntryLookupExt::?relay`; Banked call to: AddrMgrEntryLookupExt
\ 000178 E9 MOV A,R1
\ 000179 602E JZ ??ZDO_ProcessDeviceAnnce_0
1980 {
1981 if ( addrEntry.nwkAddr != Annce.nwkAddr )
\ 00017B 740C MOV A,#0xc
\ 00017D 12.... LCALL ?XSTACK_DISP0_8
\ 000180 12.... LCALL ??Subroutine253_0 & 0xFFFF
\ ??CrossCallReturnLabel_469:
\ 000183 85..82 MOV DPL,?XSP + 0
\ 000186 85..83 MOV DPH,?XSP + 1
\ 000189 E0 MOVX A,@DPTR
\ 00018A 68 XRL A,R0
\ 00018B 7003 JNZ ??ZDO_ProcessDeviceAnnce_9
\ 00018D A3 INC DPTR
\ 00018E E0 MOVX A,@DPTR
\ 00018F 69 XRL A,R1
\ ??ZDO_ProcessDeviceAnnce_9:
\ 000190 6017 JZ ??ZDO_ProcessDeviceAnnce_0
1982 {
1983 addrEntry.nwkAddr = Annce.nwkAddr;
\ 000192 85..82 MOV DPL,?XSP + 0
\ 000195 85..83 MOV DPH,?XSP + 1
\ 000198 12.... LCALL ??Subroutine253_0 & 0xFFFF
1984 AddrMgrEntryUpdate( &addrEntry );
1985 }
1986 }
\ ??CrossCallReturnLabel_470:
\ 00019B 740C MOV A,#0xc
\ 00019D 12.... LCALL ?XSTACK_DISP0_8
\ 0001A0 12.... LCALL ?Subroutine41 & 0xFFFF
\ ??CrossCallReturnLabel_59:
\ 0001A3 12.... LCALL ?XSTACK_DISP101_8
\ 0001A6 12.... LCALL `??AddrMgrEntryUpdate::?relay`; Banked call to: AddrMgrEntryUpdate
1987 }
\ ??ZDO_ProcessDeviceAnnce_0:
\ 0001A9 7420 MOV A,#0x20
\ 0001AB 02.... LJMP ??Subroutine224_0 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine125:
\ 000000 12.... LCALL `??NLME_GetShortAddr::?relay`; Banked call to: NLME_GetShortAddr
\ 000003 8A.. MOV ?V0,R2
\ 000005 8B.. MOV ?V1,R3
\ 000007 A8.. MOV R0,?V0
\ 000009 A9.. MOV R1,?V1
\ 00000B 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine118:
\ 000000 AC82 MOV R4,DPL
\ 000002 AD83 MOV R5,DPH
\ 000004 REQUIRE ??Subroutine255_0
\ 000004 ; // Fall through to label ??Subroutine255_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine255_0:
\ 000000 85..82 MOV DPL,?XSP + 0
\ 000003 85..83 MOV DPH,?XSP + 1
\ 000006 REQUIRE ??Subroutine256_0
\ 000006 ; // Fall through to label ??Subroutine256_0
1988
1989 /*********************************************************************
1990 * @fn ZDO_BuildSimpleDescBuf
1991 *
1992 * @brief Build a byte sequence representation of a Simple Descriptor.
1993 *
1994 * @param buf - pointer to a byte array big enough for data.
1995 * @param desc - SimpleDescriptionFormat_t *
1996 *
1997 * @return none
1998 */
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine86:
\ 000000 A3 INC DPTR
\ 000001 A3 INC DPTR
\ 000002 A3 INC DPTR
\ 000003 A3 INC DPTR
\ 000004 REQUIRE ??Subroutine250_0
\ 000004 ; // Fall through to label ??Subroutine250_0
\ In segment BANKED_CODE, align 1, keep-with-next
1999 void ZDO_BuildSimpleDescBuf( uint8 *buf, SimpleDescriptionFormat_t *desc )
\ ZDO_BuildSimpleDescBuf:
2000 {
\ 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 EC MOV A,R4
\ 000006 FE MOV R6,A
\ 000007 ED MOV A,R5
\ 000008 FF MOV R7,A
2001 byte cnt;
2002 uint16 *ptr;
2003
2004 *buf++ = desc->EndPoint;
\ 000009 8C82 MOV DPL,R4
\ 00000B F583 MOV DPH,A
\ 00000D 12.... LCALL ?Subroutine121 & 0xFFFF
2005 *buf++ = HI_UINT16( desc->AppProfId );
\ ??CrossCallReturnLabel_197:
\ 000010 8C82 MOV DPL,R4
\ 000012 8D83 MOV DPH,R5
\ 000014 A3 INC DPTR
\ 000015 A882 MOV R0,DPL
\ 000017 A983 MOV R1,DPH
\ 000019 12.... LCALL ?Subroutine187 & 0xFFFF
\ ??CrossCallReturnLabel_481:
\ 00001C 12.... LCALL ?Subroutine28 & 0xFFFF
2006 *buf++ = LO_UINT16( desc->AppProfId );
\ ??CrossCallReturnLabel_28:
\ 00001F F0 MOVX @DPTR,A
2007 *buf++ = HI_UINT16( desc->AppDeviceId );
\ 000020 EC MOV A,R4
\ 000021 2403 ADD A,#0x3
\ 000023 F8 MOV R0,A
\ 000024 E4 CLR A
\ 000025 3F ADDC A,R7
\ 000026 F9 MOV R1,A
\ 000027 8882 MOV DPL,R0
\ 000029 F583 MOV DPH,A
\ 00002B 12.... LCALL ?Subroutine187 & 0xFFFF
\ ??CrossCallReturnLabel_482:
\ 00002E A3 INC DPTR
\ 00002F A3 INC DPTR
\ 000030 12.... LCALL ?Subroutine28 & 0xFFFF
2008 *buf++ = LO_UINT16( desc->AppDeviceId );
\ ??CrossCallReturnLabel_29:
\ 000033 12.... LCALL ?Subroutine39 & 0xFFFF
2009
2010 *buf++ = (byte)(desc->AppDevVer << 4);
\ ??CrossCallReturnLabel_53:
\ 000036 E0 MOVX A,@DPTR
\ 000037 C4 SWAP A
\ 000038 54F0 ANL A,#0xf0
\ 00003A 8A82 MOV DPL,R2
\ 00003C 8B83 MOV DPH,R3
\ 00003E A3 INC DPTR
\ 00003F A3 INC DPTR
\ 000040 A3 INC DPTR
\ 000041 12.... LCALL ?Subroutine39 & 0xFFFF
2011
2012 *buf++ = desc->AppNumInClusters;
\ ??CrossCallReturnLabel_54:
\ 000044 A3 INC DPTR
\ 000045 12.... LCALL ?Subroutine108 & 0xFFFF
\ ??CrossCallReturnLabel_178:
\ 000048 F0 MOVX @DPTR,A
\ 000049 EA MOV A,R2
\ 00004A 2407 ADD A,#0x7
\ 00004C FA MOV R2,A
\ 00004D 5001 JNC ??ZDO_BuildSimpleDescBuf_0
\ 00004F 0B INC R3
2013 ptr = desc->pAppInClusterList;
\ ??ZDO_BuildSimpleDescBuf_0:
\ 000050 8C82 MOV DPL,R4
\ 000052 8D83 MOV DPH,R5
\ 000054 12.... LCALL ?Subroutine86 & 0xFFFF
2014 for ( cnt = 0; cnt < desc->AppNumInClusters; ptr++, cnt++ )
\ ??CrossCallReturnLabel_477:
\ 000057 7C00 MOV R4,#0x0
\ 000059 800E SJMP ??ZDO_BuildSimpleDescBuf_1
2015 {
2016 *buf++ = HI_UINT16( *ptr );
\ ??ZDO_BuildSimpleDescBuf_2:
\ 00005B 12.... LCALL ?Subroutine22 & 0xFFFF
2017 *buf++ = LO_UINT16( *ptr );
2018 }
\ ??CrossCallReturnLabel_17:
\ 00005E 5001 JNC ??ZDO_BuildSimpleDescBuf_3
\ 000060 0B INC R3
\ ??ZDO_BuildSimpleDescBuf_3:
\ 000061 E8 MOV A,R0
\ 000062 2402 ADD A,#0x2
\ 000064 F8 MOV R0,A
\ 000065 5001 JNC ??ZDO_BuildSimpleDescBuf_4
\ 000067 09 INC R1
\ ??ZDO_BuildSimpleDescBuf_4:
\ 000068 0C INC R4
\ ??ZDO_BuildSimpleDescBuf_1:
\ 000069 8E82 MOV DPL,R6
\ 00006B 8F83 MOV DPH,R7
\ 00006D A3 INC DPTR
\ 00006E A3 INC DPTR
\ 00006F A3 INC DPTR
\ 000070 A3 INC DPTR
\ 000071 A3 INC DPTR
\ 000072 A3 INC DPTR
\ 000073 E0 MOVX A,@DPTR
\ 000074 FD MOV R5,A
\ 000075 EC MOV A,R4
\ 000076 C3 CLR C
\ 000077 9D SUBB A,R5
\ 000078 40E1 JC ??ZDO_BuildSimpleDescBuf_2
2019
2020 *buf++ = desc->AppNumOutClusters;
\ 00007A 8E82 MOV DPL,R6
\ 00007C 8F83 MOV DPH,R7
\ 00007E A3 INC DPTR
\ 00007F A3 INC DPTR
\ 000080 A3 INC DPTR
\ 000081 A3 INC DPTR
\ 000082 A3 INC DPTR
\ 000083 A3 INC DPTR
\ 000084 A3 INC DPTR
\ 000085 A3 INC DPTR
\ 000086 A3 INC DPTR
\ 000087 12.... LCALL ?Subroutine121 & 0xFFFF
\ ??CrossCallReturnLabel_198:
\ 00008A A3 INC DPTR
\ 00008B AA82 MOV R2,DPL
\ 00008D AB83 MOV R3,DPH
2021 ptr = desc->pAppOutClusterList;
\ 00008F 8E82 MOV DPL,R6
\ 000091 8F83 MOV DPH,R7
\ 000093 A3 INC DPTR
\ 000094 A3 INC DPTR
\ 000095 A3 INC DPTR
\ 000096 12.... LCALL ?Subroutine86 & 0xFFFF
2022 for ( cnt = 0; cnt < desc->AppNumOutClusters; ptr++, cnt++ )
\ ??CrossCallReturnLabel_478:
\ 000099 7C00 MOV R4,#0x0
\ 00009B 800E SJMP ??ZDO_BuildSimpleDescBuf_5
2023 {
2024 *buf++ = HI_UINT16( *ptr );
\ ??ZDO_BuildSimpleDescBuf_6:
\ 00009D 12.... LCALL ?Subroutine22 & 0xFFFF
2025 *buf++ = LO_UINT16( *ptr );
2026 }
\ ??CrossCallReturnLabel_18:
\ 0000A0 5001 JNC ??ZDO_BuildSimpleDescBuf_7
\ 0000A2 0B INC R3
\ ??ZDO_BuildSimpleDescBuf_7:
\ 0000A3 E8 MOV A,R0
\ 0000A4 2402 ADD A,#0x2
\ 0000A6 F8 MOV R0,A
\ 0000A7 5001 JNC ??ZDO_BuildSimpleDescBuf_8
\ 0000A9 09 INC R1
\ ??ZDO_BuildSimpleDescBuf_8:
\ 0000AA 0C INC R4
\ ??ZDO_BuildSimpleDescBuf_5:
\ 0000AB 8E82 MOV DPL,R6
\ 0000AD 8F83 MOV DPH,R7
\ 0000AF A3 INC DPTR
\ 0000B0 A3 INC DPTR
\ 0000B1 A3 INC DPTR
\ 0000B2 A3 INC DPTR
\ 0000B3 A3 INC DPTR
\ 0000B4 A3 INC DPTR
\ 0000B5 A3 INC DPTR
\ 0000B6 A3 INC DPTR
\ 0000B7 A3 INC DPTR
\ 0000B8 E0 MOVX A,@DPTR
\ 0000B9 FD MOV R5,A
\ 0000BA EC MOV A,R4
\ 0000BB C3 CLR C
\ 0000BC 9D SUBB A,R5
\ 0000BD 40DE JC ??ZDO_BuildSimpleDescBuf_6
2027 }
\ 0000BF 02.... LJMP ??Subroutine225_0 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine187:
\ 000000 A3 INC DPTR
\ 000001 REQUIRE ??Subroutine254_0
\ 000001 ; // Fall through to label ??Subroutine254_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine39:
\ 000000 A3 INC DPTR
\ 000001 A3 INC DPTR
\ 000002 F0 MOVX @DPTR,A
\ 000003 8C82 MOV DPL,R4
\ 000005 8D83 MOV DPH,R5
\ 000007 A3 INC DPTR
\ 000008 A3 INC DPTR
\ 000009 A3 INC DPTR
\ 00000A A3 INC DPTR
\ 00000B A3 INC DPTR
\ 00000C 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine28:
\ 000000 A3 INC DPTR
\ 000001 12.... LCALL ?Subroutine167 & 0xFFFF
\ ??CrossCallReturnLabel_278:
\ 000004 A3 INC DPTR
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine22:
\ 000000 8882 MOV DPL,R0
\ 000002 8983 MOV DPH,R1
\ 000004 12.... LCALL ?Subroutine187 & 0xFFFF
\ ??CrossCallReturnLabel_483:
\ 000007 12.... LCALL ?Subroutine167 & 0xFFFF
\ ??CrossCallReturnLabel_279:
\ 00000A F0 MOVX @DPTR,A
\ 00000B EA MOV A,R2
\ 00000C 2402 ADD A,#0x2
\ 00000E FA MOV R2,A
\ 00000F 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine167:
\ 000000 12.... LCALL ?Subroutine211 & 0xFFFF
\ ??CrossCallReturnLabel_338:
\ 000003 E0 MOVX A,@DPTR
\ 000004 8A82 MOV DPL,R2
\ 000006 8B83 MOV DPH,R3
\ 000008 A3 INC DPTR
\ 000009 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine121:
\ 000000 12.... LCALL ??Subroutine254_0 & 0xFFFF
\ ??CrossCallReturnLabel_480:
\ 000003 F0 MOVX @DPTR,A
\ 000004 22 RET
2028
2029 /*********************************************************************
2030 * @fn ZDO_MatchEndDeviceBind()
2031 *
2032 * @brief
2033 *
2034 * Called to match end device binding requests
2035 *
2036 * @param bindReq - binding request information
2037 * @param SecurityUse - Security enable/disable
2038 *
2039 * @return none
2040 */
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine19:
\ 000000 F582 MOV DPL,A
\ 000002 E4 CLR A
\ 000003 3C ADDC A,R4
\ 000004 F583 MOV DPH,A
\ 000006 REQUIRE ??Subroutine242_0
\ 000006 ; // Fall through to label ??Subroutine242_0
\ In segment BANKED_CODE, align 1, keep-with-next
2041 void ZDO_MatchEndDeviceBind( ZDEndDeviceBind_t *bindReq )
\ ZDO_MatchEndDeviceBind:
2042 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 REQUIRE ?V2
\ 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: 10
\ 000005 74F6 MOV A,#-0xa
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A 8A.. MOV ?V4,R2
\ 00000C 8B.. MOV ?V5,R3
2043 zAddrType_t dstAddr;
2044 uint8 sendRsp = FALSE;
\ 00000E 7E00 MOV R6,#0x0
2045 uint8 status;
2046
2047 // Is this the first request?
2048 if ( matchED == NULL )
\ 000010 90.... MOV DPTR,#matchED
\ 000013 12.... LCALL ??Subroutine260_0 & 0xFFFF
\ ??CrossCallReturnLabel_514:
\ 000016 7045 JNZ ??ZDO_MatchEndDeviceBind_0
2049 {
2050 // Create match info structure
2051 matchED = (ZDMatchEndDeviceBind_t *)osal_mem_alloc( sizeof ( ZDMatchEndDeviceBind_t ) );
\ 000018 ; Setup parameters for call to function osal_mem_alloc
\ 000018 7A37 MOV R2,#0x37
\ 00001A 7B00 MOV R3,#0x0
\ 00001C 12.... LCALL `??osal_mem_alloc::?relay`; Banked call to: osal_mem_alloc
\ 00001F 90.... MOV DPTR,#matchED
\ 000022 12.... LCALL ??Subroutine242_0 & 0xFFFF
2052 if ( matchED )
\ ??CrossCallReturnLabel_434:
\ 000025 F9 MOV R1,A
\ 000026 EA MOV A,R2
\ 000027 49 ORL A,R1
\ 000028 6019 JZ ??ZDO_MatchEndDeviceBind_1
2053 {
2054 // Clear the structure
2055 osal_memset( (uint8 *)matchED, 0, sizeof ( ZDMatchEndDeviceBind_t ) );
\ 00002A ; Setup parameters for call to function osal_memset
\ 00002A 7C37 MOV R4,#0x37
\ 00002C 7D00 MOV R5,#0x0
\ 00002E 7900 MOV R1,#0x0
\ 000030 12.... LCALL `??osal_memset::?relay`; Banked call to: osal_memset
2056
2057 // Copy the first request's information
2058 if ( !ZDO_CopyMatchInfo( &(matchED->ed1), bindReq ) )
\ 000033 ; Setup parameters for call to function ZDO_CopyMatchInfo
\ 000033 AC.. MOV R4,?V4
\ 000035 AD.. MOV R5,?V5
\ 000037 90.... MOV DPTR,#matchED
\ 00003A 12.... LCALL ??Subroutine256_0 & 0xFFFF
2059 {
2060 status = ZDP_NO_ENTRY;
2061 sendRsp = TRUE;
2062 }
2063 }
\ ??CrossCallReturnLabel_489:
\ 00003D 12.... LCALL `??ZDO_CopyMatchInfo::?relay`; Banked call to: ZDO_CopyMatchInfo
\ 000040 E9 MOV A,R1
\ 000041 700B JNZ ??ZDO_MatchEndDeviceBind_2
2064 else
2065 {
2066 status = ZDP_NO_ENTRY;
\ ??ZDO_MatchEndDeviceBind_1:
\ 000043 85..82 MOV DPL,?XSP + 0
\ 000046 85..83 MOV DPH,?XSP + 1
\ 000049 7488 MOV A,#-0x78
\ 00004B 02.... LJMP ??ZDO_MatchEndDeviceBind_3 & 0xFFFF
2067 sendRsp = TRUE;
2068 }
2069
2070 if ( !sendRsp )
2071 {
2072 // Set into the correct state
2073 matchED->state = ZDMATCH_WAIT_REQ;
\ ??ZDO_MatchEndDeviceBind_2:
\ 00004E 12.... LCALL ?Subroutine106 & 0xFFFF
\ ??CrossCallReturnLabel_595:
\ 000051 12.... LCALL ?Subroutine208 & 0xFFFF
\ ??CrossCallReturnLabel_332:
\ 000054 7401 MOV A,#0x1
\ 000056 F0 MOVX @DPTR,A
2074
2075 // Setup the timeout
2076 APS_SetEndDeviceBindTimeout( AIB_MaxBindingTime, ZDO_EndDeviceBindMatchTimeoutCB );
\ 000057 ; Setup parameters for call to function APS_SetEndDeviceBindTimeout
\ 000057 12.... LCALL ?Subroutine117 & 0xFFFF
2077 }
2078 }
\ ??CrossCallReturnLabel_191:
\ 00005A 02.... LJMP ??ZDO_MatchEndDeviceBind_4 & 0xFFFF
2079 else
2080 {
2081 matchED->state = ZDMATCH_SENDING_BINDS;
\ ??ZDO_MatchEndDeviceBind_0:
\ 00005D E8 MOV A,R0
\ 00005E 242E ADD A,#0x2e
\ 000060 F582 MOV DPL,A
\ 000062 E4 CLR A
\ 000063 39 ADDC A,R1
\ 000064 F583 MOV DPH,A
\ 000066 7402 MOV A,#0x2
\ 000068 F0 MOVX @DPTR,A
2082
2083 // Copy the 2nd request's information
2084 if ( !ZDO_CopyMatchInfo( &(matchED->ed2), bindReq ) )
\ 000069 ; Setup parameters for call to function ZDO_CopyMatchInfo
\ 000069 AC.. MOV R4,?V4
\ 00006B AD.. MOV R5,?V5
\ 00006D 12.... LCALL ?Subroutine123 & 0xFFFF
\ ??CrossCallReturnLabel_202:
\ 000070 12.... LCALL `??ZDO_CopyMatchInfo::?relay`; Banked call to: ZDO_CopyMatchInfo
\ 000073 E9 MOV A,R1
\ 000074 700B JNZ ??ZDO_MatchEndDeviceBind_5
2085 {
2086 status = ZDP_NO_ENTRY;
\ 000076 85..82 MOV DPL,?XSP + 0
\ 000079 85..83 MOV DPH,?XSP + 1
\ 00007C 7488 MOV A,#-0x78
\ 00007E F0 MOVX @DPTR,A
2087 sendRsp = TRUE;
\ 00007F 7E01 MOV R6,#0x1
2088 }
2089
2090 // Make a source match for ed1
2091 matchED->ed1numMatched = ZDO_CompareClusterLists(
2092 matchED->ed1.numOutClusters, matchED->ed1.outClusters,
2093 matchED->ed2.numInClusters, matchED->ed2.inClusters, ZDOBuildBuf );
\ ??ZDO_MatchEndDeviceBind_5:
\ 000081 ; Setup parameters for call to function ZDO_CompareClusterLists
\ 000081 75.... MOV ?V0,#ZDOBuildBuf & 0xff
\ 000084 75.... MOV ?V1,#(ZDOBuildBuf >> 8) & 0xff
\ 000087 78.. MOV R0,#?V0
\ 000089 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00008C 12.... LCALL ?Subroutine100 & 0xFFFF
\ ??CrossCallReturnLabel_162:
\ 00008F F582 MOV DPL,A
\ 000091 E4 CLR A
\ 000092 38 ADDC A,R0
\ 000093 F583 MOV DPH,A
\ 000095 12.... LCALL ?PUSH_XSTACK8_X_TWO
\ 000098 12.... LCALL ?Subroutine106 & 0xFFFF
\ ??CrossCallReturnLabel_596:
\ 00009B 2428 ADD A,#0x28
\ 00009D 12.... LCALL ?Subroutine150 & 0xFFFF
\ ??CrossCallReturnLabel_243:
\ 0000A0 FC MOV R4,A
\ 0000A1 12.... LCALL ?Subroutine101 & 0xFFFF
\ ??CrossCallReturnLabel_165:
\ 0000A4 12.... LCALL ?Subroutine90 & 0xFFFF
\ ??CrossCallReturnLabel_146:
\ 0000A7 2414 ADD A,#0x14
\ 0000A9 12.... LCALL ?Subroutine149 & 0xFFFF
\ ??CrossCallReturnLabel_240:
\ 0000AC 12.... LCALL ?DEALLOC_XSTACK8
\ 0000AF 12.... LCALL ?Subroutine102 & 0xFFFF
\ ??CrossCallReturnLabel_498:
\ 0000B2 12.... LCALL ?Subroutine23 & 0xFFFF
2094 if ( matchED->ed1numMatched )
\ ??CrossCallReturnLabel_528:
\ 0000B5 2431 ADD A,#0x31
\ 0000B7 12.... LCALL ?Subroutine150 & 0xFFFF
\ ??CrossCallReturnLabel_244:
\ 0000BA 6034 JZ ??ZDO_MatchEndDeviceBind_6
\ 0000BC ; Setup parameters for call to function osal_mem_alloc
\ 0000BC 12.... LCALL ?Subroutine58 & 0xFFFF
\ ??CrossCallReturnLabel_83:
\ 0000BF 12.... LCALL ?Subroutine151 & 0xFFFF
\ ??CrossCallReturnLabel_251:
\ 0000C2 2432 ADD A,#0x32
\ 0000C4 12.... LCALL ?Subroutine19 & 0xFFFF
2095 {
2096 // Save the match list
2097 matchED->ed1Matched = osal_mem_alloc( (short)(matchED->ed1numMatched * sizeof ( uint16 )) );
2098 if ( matchED->ed1Matched )
\ ??CrossCallReturnLabel_436:
\ 0000C7 EA MOV A,R2
\ 0000C8 4B ORL A,R3
\ 0000C9 601A JZ ??ZDO_MatchEndDeviceBind_7
2099 {
2100 osal_memcpy( matchED->ed1Matched, ZDOBuildBuf, (matchED->ed1numMatched * sizeof ( uint16 )) );
\ 0000CB ; Setup parameters for call to function osal_memcpy
\ 0000CB 75..00 MOV ?V2,#0x0
\ 0000CE 78.. MOV R0,#?V0
\ 0000D0 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 0000D3 12.... LCALL ?Subroutine58 & 0xFFFF
2101 }
\ ??CrossCallReturnLabel_84:
\ 0000D6 FC MOV R4,A
\ 0000D7 E4 CLR A
\ 0000D8 33 RLC A
\ 0000D9 FD MOV R5,A
\ 0000DA 12.... LCALL ?Subroutine103 & 0xFFFF
\ ??CrossCallReturnLabel_168:
\ 0000DD 12.... LCALL ?Subroutine56 & 0xFFFF
\ ??CrossCallReturnLabel_544:
\ 0000E0 12.... LCALL ?DEALLOC_XSTACK8
\ 0000E3 800B SJMP ??ZDO_MatchEndDeviceBind_6
2102 else
2103 {
2104 // Allocation error, stop
2105 status = ZDP_NO_ENTRY;
\ ??ZDO_MatchEndDeviceBind_7:
\ 0000E5 85..82 MOV DPL,?XSP + 0
\ 0000E8 85..83 MOV DPH,?XSP + 1
\ 0000EB 7488 MOV A,#-0x78
\ 0000ED F0 MOVX @DPTR,A
2106 sendRsp = TRUE;
\ 0000EE 7E01 MOV R6,#0x1
2107 }
2108 }
2109
2110 // Make a source match for ed2
2111 matchED->ed2numMatched = ZDO_CompareClusterLists(
2112 matchED->ed2.numOutClusters, matchED->ed2.outClusters,
2113 matchED->ed1.numInClusters, matchED->ed1.inClusters, ZDOBuildBuf );
\ ??ZDO_MatchEndDeviceBind_6:
\ 0000F0 ; Setup parameters for call to function ZDO_CompareClusterLists
\ 0000F0 78.. MOV R0,#?V0
\ 0000F2 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 0000F5 12.... LCALL ?Subroutine104 & 0xFFFF
\ ??CrossCallReturnLabel_171:
\ 0000F8 F582 MOV DPL,A
\ 0000FA E4 CLR A
\ 0000FB 38 ADDC A,R0
\ 0000FC F583 MOV DPH,A
\ 0000FE 12.... LCALL ?PUSH_XSTACK8_X_TWO
\ 000101 12.... LCALL ?Subroutine106 & 0xFFFF
\ ??CrossCallReturnLabel_597:
\ 000104 2411 ADD A,#0x11
\ 000106 12.... LCALL ?Subroutine150 & 0xFFFF
\ ??CrossCallReturnLabel_245:
\ 000109 FC MOV R4,A
\ 00010A 12.... LCALL ?Subroutine105 & 0xFFFF
\ ??CrossCallReturnLabel_174:
\ 00010D 12.... LCALL ?Subroutine90 & 0xFFFF
\ ??CrossCallReturnLabel_147:
\ 000110 242B ADD A,#0x2b
\ 000112 12.... LCALL ?Subroutine149 & 0xFFFF
\ ??CrossCallReturnLabel_241:
\ 000115 12.... LCALL ?DEALLOC_XSTACK8
\ 000118 E9 MOV A,R1
\ 000119 F8 MOV R0,A
\ 00011A 12.... LCALL ?Subroutine106 & 0xFFFF
\ ??CrossCallReturnLabel_598:
\ 00011D 2434 ADD A,#0x34
\ 00011F 12.... LCALL ?Subroutine23 & 0xFFFF
2114 if ( matchED->ed2numMatched )
\ ??CrossCallReturnLabel_529:
\ 000122 2434 ADD A,#0x34
\ 000124 12.... LCALL ?Subroutine150 & 0xFFFF
\ ??CrossCallReturnLabel_246:
\ 000127 6029 JZ ??ZDO_MatchEndDeviceBind_8
\ 000129 ; Setup parameters for call to function osal_mem_alloc
\ 000129 12.... LCALL ?Subroutine59 & 0xFFFF
\ ??CrossCallReturnLabel_86:
\ 00012C 12.... LCALL ?Subroutine151 & 0xFFFF
\ ??CrossCallReturnLabel_252:
\ 00012F 2435 ADD A,#0x35
\ 000131 12.... LCALL ?Subroutine19 & 0xFFFF
2115 {
2116 // Save the match list
2117 matchED->ed2Matched = osal_mem_alloc( (short)(matchED->ed2numMatched * sizeof ( uint16 )) );
2118 if ( matchED->ed2Matched )
\ ??CrossCallReturnLabel_437:
\ 000134 EA MOV A,R2
\ 000135 4B ORL A,R3
\ 000136 603B JZ ??ZDO_MatchEndDeviceBind_9
2119 {
2120 osal_memcpy( matchED->ed2Matched, ZDOBuildBuf, (matchED->ed2numMatched * sizeof ( uint16 )) );
\ 000138 ; Setup parameters for call to function osal_memcpy
\ 000138 75..00 MOV ?V2,#0x0
\ 00013B 78.. MOV R0,#?V0
\ 00013D 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 000140 12.... LCALL ?Subroutine59 & 0xFFFF
2121 }
\ ??CrossCallReturnLabel_87:
\ 000143 FC MOV R4,A
\ 000144 E4 CLR A
\ 000145 33 RLC A
\ 000146 FD MOV R5,A
\ 000147 12.... LCALL ?Subroutine106 & 0xFFFF
\ ??CrossCallReturnLabel_599:
\ 00014A 2435 ADD A,#0x35
\ 00014C 12.... LCALL ?Subroutine56 & 0xFFFF
\ ??CrossCallReturnLabel_545:
\ 00014F 12.... LCALL ?DEALLOC_XSTACK8
2122 else
2123 {
2124 // Allocation error, stop
2125 status = ZDP_NO_ENTRY;
2126 sendRsp = TRUE;
2127 }
2128 }
2129
2130 if ( (sendRsp == FALSE) && (matchED->ed1numMatched || matchED->ed2numMatched) )
\ ??ZDO_MatchEndDeviceBind_8:
\ 000152 EE MOV A,R6
\ 000153 A2E0 MOV C,0xE0 /* A */.0
\ 000155 4025 JC ??ZDO_MatchEndDeviceBind_10
\ 000157 12.... LCALL ?Subroutine102 & 0xFFFF
\ ??CrossCallReturnLabel_499:
\ 00015A 12.... LCALL ?Subroutine150 & 0xFFFF
\ ??CrossCallReturnLabel_247:
\ 00015D 7008 JNZ ??ZDO_MatchEndDeviceBind_11
\ 00015F 90.... MOV DPTR,#matchED
\ 000162 12.... LCALL ?Subroutine64 & 0xFFFF
\ ??CrossCallReturnLabel_97:
\ 000165 6015 JZ ??ZDO_MatchEndDeviceBind_10
2131 {
2132 // Do the first unbind/bind state
2133 ZDMatchSendState( ZDMATCH_REASON_START, ZDP_SUCCESS, 0 );
\ ??ZDO_MatchEndDeviceBind_11:
\ 000167 ; Setup parameters for call to function ZDMatchSendState
\ 000167 7B00 MOV R3,#0x0
\ 000169 7A00 MOV R2,#0x0
\ 00016B 7900 MOV R1,#0x0
\ 00016D 12.... LCALL `??ZDMatchSendState::?relay`; Banked call to: ZDMatchSendState
2134 }
2135 else
2136 {
2137 status = ZDP_NO_MATCH;
2138 sendRsp = TRUE;
2139 }
2140 }
2141
2142 if ( sendRsp )
\ 000170 02.... LJMP ??ZDO_MatchEndDeviceBind_4 & 0xFFFF
\ ??ZDO_MatchEndDeviceBind_9:
\ 000173 85..82 MOV DPL,?XSP + 0
\ 000176 85..83 MOV DPH,?XSP + 1
\ 000179 7488 MOV A,#-0x78
\ 00017B F0 MOVX @DPTR,A
\ ??ZDO_MatchEndDeviceBind_10:
\ 00017C 85..82 MOV DPL,?XSP + 0
\ 00017F 85..83 MOV DPH,?XSP + 1
\ 000182 7486 MOV A,#-0x7a
\ ??ZDO_MatchEndDeviceBind_3:
\ 000184 F0 MOVX @DPTR,A
2143 {
2144 // send response to this requester
2145 dstAddr.addrMode = Addr16Bit;
\ 000185 7409 MOV A,#0x9
\ 000187 12.... LCALL ?XSTACK_DISP0_8
\ 00018A 7402 MOV A,#0x2
\ 00018C 12.... LCALL ?Subroutine166 & 0xFFFF
2146 dstAddr.addr.shortAddr = bindReq->srcAddr;
\ ??CrossCallReturnLabel_277:
\ 00018F 12.... LCALL ??Subroutine251_0 & 0xFFFF
\ ??CrossCallReturnLabel_473:
\ 000192 7401 MOV A,#0x1
\ 000194 12.... LCALL ?XSTACK_DISP0_8
\ 000197 12.... LCALL ??Subroutine294_0 & 0xFFFF
2147 ZDP_EndDeviceBindRsp( bindReq->TransSeq, &dstAddr, status, bindReq->SecurityUse );
\ ??CrossCallReturnLabel_732:
\ 00019A ; Setup parameters for call to function ZDP_SendData
\ 00019A 85..82 MOV DPL,?V4
\ 00019D 85..83 MOV DPH,?V5
\ 0001A0 A3 INC DPTR
\ 0001A1 12.... LCALL ??Subroutine249_0 & 0xFFFF
\ ??CrossCallReturnLabel_459:
\ 0001A4 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 0001A7 7401 MOV A,#0x1
\ 0001A9 12.... LCALL ?XSTACK_DISP100_8
\ 0001AC 88.. MOV ?V0,R0
\ 0001AE 89.. MOV ?V1,R1
\ 0001B0 78.. MOV R0,#?V0
\ 0001B2 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 0001B5 75..20 MOV ?V0,#0x20
\ 0001B8 75..80 MOV ?V1,#-0x80
\ 0001BB 78.. MOV R0,#?V0
\ 0001BD 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 0001C0 7901 MOV R1,#0x1
\ 0001C2 7406 MOV A,#0x6
\ 0001C4 12.... LCALL ?XSTACK_DISP102_8
\ 0001C7 AA.. MOV R2,?V4
\ 0001C9 AB.. MOV R3,?V5
\ 0001CB 12.... LCALL ?Subroutine161 & 0xFFFF
\ ??CrossCallReturnLabel_269:
\ 0001CE 12.... LCALL ?DEALLOC_XSTACK8
2148
2149 if ( matchED->state == ZDMATCH_SENDING_BINDS )
\ 0001D1 12.... LCALL ?Subroutine78 & 0xFFFF
\ ??CrossCallReturnLabel_124:
\ 0001D4 7042 JNZ ??ZDO_MatchEndDeviceBind_12
2150 {
2151 // send response to first requester
2152 dstAddr.addrMode = Addr16Bit;
\ 0001D6 7409 MOV A,#0x9
\ 0001D8 12.... LCALL ?XSTACK_DISP0_8
\ 0001DB 7402 MOV A,#0x2
\ 0001DD 12.... LCALL ?Subroutine51 & 0xFFFF
2153 dstAddr.addr.shortAddr = matchED->ed1.srcAddr;
2154 ZDP_EndDeviceBindRsp( matchED->ed1.TransSeq, &dstAddr, status, matchED->ed1.SecurityUse );
2155 }
\ ??CrossCallReturnLabel_75:
\ 0001E0 F583 MOV DPH,A
\ 0001E2 8882 MOV DPL,R0
\ 0001E4 12.... LCALL ??Subroutine251_0 & 0xFFFF
\ ??CrossCallReturnLabel_474:
\ 0001E7 7401 MOV A,#0x1
\ 0001E9 12.... LCALL ?XSTACK_DISP0_8
\ 0001EC 12.... LCALL ?Subroutine14 & 0xFFFF
\ ??CrossCallReturnLabel_10:
\ 0001EF 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 0001F2 7401 MOV A,#0x1
\ 0001F4 12.... LCALL ?XSTACK_DISP100_8
\ 0001F7 88.. MOV ?V0,R0
\ 0001F9 89.. MOV ?V1,R1
\ 0001FB 78.. MOV R0,#?V0
\ 0001FD 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000200 75..20 MOV ?V0,#0x20
\ 000203 75..80 MOV ?V1,#-0x80
\ 000206 78.. MOV R0,#?V0
\ 000208 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00020B 7901 MOV R1,#0x1
\ 00020D 7406 MOV A,#0x6
\ 00020F 12.... LCALL ?XSTACK_DISP102_8
\ 000212 12.... LCALL ?Subroutine111 & 0xFFFF
\ ??CrossCallReturnLabel_181:
\ 000215 12.... LCALL ?DEALLOC_XSTACK8
2156
2157 // Process ended - release memory used
2158 ZDO_RemoveMatchMemory();
\ ??ZDO_MatchEndDeviceBind_12:
\ 000218 ; Setup parameters for call to function ZDO_RemoveMatchMemory
\ 000218 12.... LCALL `??ZDO_RemoveMatchMemory::?relay`; Banked call to: ZDO_RemoveMatchMemory
2159 }
2160 }
\ ??ZDO_MatchEndDeviceBind_4:
\ 00021B 740A MOV A,#0xa
\ 00021D 02.... LJMP ?Subroutine5 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine151:
\ 000000 FA MOV R2,A
\ 000001 E4 CLR A
\ 000002 33 RLC A
\ 000003 FB MOV R3,A
\ 000004 12.... LCALL `??osal_mem_alloc::?relay`; Banked call to: osal_mem_alloc
\ 000007 90.... MOV DPTR,#matchED
\ 00000A E0 MOVX A,@DPTR
\ 00000B FC MOV R4,A
\ 00000C A3 INC DPTR
\ 00000D E0 MOVX A,@DPTR
\ 00000E CC XCH A,R4
\ 00000F 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine149:
\ 000000 12.... LCALL ?Subroutine216 & 0xFFFF
\ ??CrossCallReturnLabel_347:
\ 000003 F9 MOV R1,A
\ 000004 12.... LCALL `??ZDO_CompareClusterLists::?relay`; Banked call to: ZDO_CompareClusterLists
\ 000007 7404 MOV A,#0x4
\ 000009 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine102:
\ 000000 90.... MOV DPTR,#matchED
\ 000003 REQUIRE ??Subroutine257_0
\ 000003 ; // Fall through to label ??Subroutine257_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine257_0:
\ 000000 12.... LCALL ??Subroutine258_0 & 0xFFFF
\ ??CrossCallReturnLabel_614:
\ 000003 2431 ADD A,#0x31
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine90:
\ 000000 F582 MOV DPL,A
\ 000002 E4 CLR A
\ 000003 38 ADDC A,R0
\ 000004 F583 MOV DPH,A
\ 000006 12.... LCALL ?Subroutine179 & 0xFFFF
\ ??CrossCallReturnLabel_551:
\ 000009 12.... LCALL ?Subroutine184 & 0xFFFF
\ ??CrossCallReturnLabel_608:
\ 00000C 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine184:
\ 000000 90.... MOV DPTR,#matchED
\ 000003 REQUIRE ??Subroutine258_0
\ 000003 ; // Fall through to label ??Subroutine258_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine23:
\ 000000 F582 MOV DPL,A
\ 000002 E4 CLR A
\ 000003 38 ADDC A,R0
\ 000004 F583 MOV DPH,A
\ 000006 REQUIRE ??Subroutine261_0
\ 000006 ; // Fall through to label ??Subroutine261_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine261_0:
\ 000000 12.... LCALL ?Subroutine165 & 0xFFFF
\ ??CrossCallReturnLabel_531:
\ 000003 C8 XCH A,R0
\ 000004 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine165:
\ 000000 E9 MOV A,R1
\ 000001 REQUIRE ??Subroutine262_0
\ 000001 ; // Fall through to label ??Subroutine262_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine262_0:
\ 000000 F0 MOVX @DPTR,A
\ 000001 ; Setup parameters for call to function ZDP_SendData
\ 000001 ; Setup parameters for call to function ZDP_SendData
\ 000001 ; Setup parameters for call to function ZDP_SendData
\ 000001 90.... MOV DPTR,#matchED
\ 000004 12.... LCALL ?Subroutine220 & 0xFFFF
\ ??CrossCallReturnLabel_655:
\ 000007 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine105:
\ 000000 12.... LCALL ?Subroutine184 & 0xFFFF
\ ??CrossCallReturnLabel_613:
\ 000003 242C ADD A,#0x2c
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine104:
\ 000000 12.... LCALL ?Subroutine184 & 0xFFFF
\ ??CrossCallReturnLabel_612:
\ 000003 2412 ADD A,#0x12
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine103:
\ 000000 12.... LCALL ?Subroutine184 & 0xFFFF
\ ??CrossCallReturnLabel_611:
\ 000003 2432 ADD A,#0x32
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine101:
\ 000000 12.... LCALL ?Subroutine184 & 0xFFFF
\ ??CrossCallReturnLabel_610:
\ 000003 2415 ADD A,#0x15
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine100:
\ 000000 12.... LCALL ?Subroutine184 & 0xFFFF
\ ??CrossCallReturnLabel_609:
\ 000003 2429 ADD A,#0x29
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine56:
\ 000000 F582 MOV DPL,A
\ 000002 E4 CLR A
\ 000003 38 ADDC A,R0
\ 000004 REQUIRE ??Subroutine265_0
\ 000004 ; // Fall through to label ??Subroutine265_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine265_0:
\ 000000 F583 MOV DPH,A
\ 000002 REQUIRE ??Subroutine266_0
\ 000002 ; // Fall through to label ??Subroutine266_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine123:
\ 000000 90.... MOV DPTR,#matchED
\ 000003 E0 MOVX A,@DPTR
\ 000004 2417 ADD A,#0x17
\ 000006 FA MOV R2,A
\ 000007 A3 INC DPTR
\ 000008 E0 MOVX A,@DPTR
\ 000009 3400 ADDC A,#0x0
\ 00000B FB MOV R3,A
\ 00000C 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine117:
\ 000000 7C.. MOV R4,#`??ZDO_EndDeviceBindMatchTimeoutCB::?relay` & 0xff
\ 000002 7D.. MOV R5,#(`??ZDO_EndDeviceBindMatchTimeoutCB::?relay` >> 8) & 0xff
\ 000004 90.... MOV DPTR,#AIB_MaxBindingTime
\ 000007 12.... LCALL ?Subroutine179 & 0xFFFF
\ ??CrossCallReturnLabel_553:
\ 00000A 12.... LCALL `??APS_SetEndDeviceBindTimeout::?relay`; Banked call to: APS_SetEndDeviceBindTimeout
\ 00000D 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine111:
\ 000000 90.... MOV DPTR,#matchED
\ 000003 12.... LCALL ?Subroutine179 & 0xFFFF
\ ??CrossCallReturnLabel_552:
\ 000006 12.... LCALL ??Subroutine245_0 & 0xFFFF
\ ??CrossCallReturnLabel_447:
\ 000009 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine78:
\ 000000 12.... LCALL ?Subroutine184 & 0xFFFF
\ ??CrossCallReturnLabel_607:
\ 000003 12.... LCALL ?Subroutine208 & 0xFFFF
\ ??CrossCallReturnLabel_333:
\ 000006 E0 MOVX A,@DPTR
\ 000007 6402 XRL A,#0x2
\ 000009 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine208:
\ 000000 242E ADD A,#0x2e
\ 000002 F582 MOV DPL,A
\ 000004 E4 CLR A
\ 000005 38 ADDC A,R0
\ 000006 F583 MOV DPH,A
\ 000008 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine64:
\ 000000 12.... LCALL ?Subroutine182 & 0xFFFF
\ ??CrossCallReturnLabel_301:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine182:
\ 000000 12.... LCALL ?Subroutine213 & 0xFFFF
\ ??CrossCallReturnLabel_618:
\ 000003 2434 ADD A,#0x34
\ 000005 12.... LCALL ?Subroutine216 & 0xFFFF
\ ??CrossCallReturnLabel_351:
\ 000008 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine59:
\ 000000 90.... MOV DPTR,#matchED
\ 000003 12.... LCALL ?Subroutine182 & 0xFFFF
\ ??CrossCallReturnLabel_300:
\ 000006 25E0 ADD A,0xE0 /* A */
\ 000008 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine58:
\ 000000 12.... LCALL ?Subroutine181 & 0xFFFF
\ ??CrossCallReturnLabel_298:
\ 000003 25E0 ADD A,0xE0 /* A */
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine181:
\ 000000 90.... MOV DPTR,#matchED
\ 000003 12.... LCALL ?Subroutine213 & 0xFFFF
\ ??CrossCallReturnLabel_617:
\ 000006 2431 ADD A,#0x31
\ 000008 12.... LCALL ?Subroutine216 & 0xFFFF
\ ??CrossCallReturnLabel_350:
\ 00000B 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine51:
\ 000000 12.... LCALL ??Subroutine262_0 & 0xFFFF
\ ??CrossCallReturnLabel_533:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine14:
\ 000000 E8 MOV A,R0
\ 000001 F0 MOVX @DPTR,A
\ 000002 A3 INC DPTR
\ 000003 12.... LCALL ?Subroutine165 & 0xFFFF
\ ??CrossCallReturnLabel_532:
\ 000006 F583 MOV DPH,A
\ 000008 8882 MOV DPL,R0
\ 00000A A3 INC DPTR
\ 00000B E0 MOVX A,@DPTR
\ 00000C F5.. MOV ?V0,A
\ 00000E 78.. MOV R0,#?V0
\ 000010 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine106:
\ 000000 90.... MOV DPTR,#matchED
\ 000003 REQUIRE ??Subroutine275_0
\ 000003 ; // Fall through to label ??Subroutine275_0
2161
2162 /*********************************************************************
2163 * @fn ZDO_RemoveMatchMemory()
2164 *
2165 * @brief Called to clear the memory used for the end device bind.
2166 *
2167 * @param none
2168 *
2169 * @return none
2170 */
\ In segment BANKED_CODE, align 1, keep-with-next
2171 static void ZDO_RemoveMatchMemory( void )
\ ZDO_RemoveMatchMemory:
2172 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
2173 if ( matchED != NULL )
\ 000004 90.... MOV DPTR,#matchED
\ 000007 12.... LCALL ??Subroutine260_0 & 0xFFFF
\ ??CrossCallReturnLabel_515:
\ 00000A 6067 JZ ??ZDO_RemoveMatchMemory_0
2174 {
2175 if ( matchED->ed2Matched != NULL )
\ 00000C E8 MOV A,R0
\ 00000D 2435 ADD A,#0x35
\ 00000F F582 MOV DPL,A
\ 000011 E4 CLR A
\ 000012 39 ADDC A,R1
\ 000013 12.... LCALL ??Subroutine259_0 & 0xFFFF
\ ??CrossCallReturnLabel_519:
\ 000016 6008 JZ ??CrossCallReturnLabel_404
2176 {
2177 osal_mem_free( matchED->ed2Matched );
\ 000018 ; Setup parameters for call to function osal_mem_free
\ 000018 12.... LCALL ?Subroutine106 & 0xFFFF
2178 }
\ ??CrossCallReturnLabel_600:
\ 00001B 2435 ADD A,#0x35
\ 00001D 12.... LCALL ?Subroutine54 & 0xFFFF
2179 if ( matchED->ed1Matched != NULL )
\ ??CrossCallReturnLabel_404:
\ 000020 12.... LCALL ?Subroutine103 & 0xFFFF
\ ??CrossCallReturnLabel_169:
\ 000023 12.... LCALL ?Subroutine53 & 0xFFFF
\ ??CrossCallReturnLabel_523:
\ 000026 6006 JZ ??CrossCallReturnLabel_405
2180 {
2181 osal_mem_free( matchED->ed1Matched );
\ 000028 ; Setup parameters for call to function osal_mem_free
\ 000028 12.... LCALL ?Subroutine103 & 0xFFFF
2182 }
\ ??CrossCallReturnLabel_170:
\ 00002B 12.... LCALL ?Subroutine54 & 0xFFFF
2183 if ( matchED->ed1.inClusters != NULL )
\ ??CrossCallReturnLabel_405:
\ 00002E 12.... LCALL ?Subroutine104 & 0xFFFF
\ ??CrossCallReturnLabel_172:
\ 000031 12.... LCALL ?Subroutine53 & 0xFFFF
\ ??CrossCallReturnLabel_524:
\ 000034 6006 JZ ??CrossCallReturnLabel_406
2184 {
2185 osal_mem_free( matchED->ed1.inClusters );
\ 000036 ; Setup parameters for call to function osal_mem_free
\ 000036 12.... LCALL ?Subroutine104 & 0xFFFF
2186 }
\ ??CrossCallReturnLabel_173:
\ 000039 12.... LCALL ?Subroutine54 & 0xFFFF
2187 if ( matchED->ed1.outClusters != NULL )
\ ??CrossCallReturnLabel_406:
\ 00003C 12.... LCALL ?Subroutine101 & 0xFFFF
\ ??CrossCallReturnLabel_166:
\ 00003F 12.... LCALL ?Subroutine53 & 0xFFFF
\ ??CrossCallReturnLabel_525:
\ 000042 6006 JZ ??CrossCallReturnLabel_407
2188 {
2189 osal_mem_free( matchED->ed1.outClusters );
\ 000044 ; Setup parameters for call to function osal_mem_free
\ 000044 12.... LCALL ?Subroutine101 & 0xFFFF
2190 }
\ ??CrossCallReturnLabel_167:
\ 000047 12.... LCALL ?Subroutine54 & 0xFFFF
2191 if ( matchED->ed2.inClusters != NULL )
\ ??CrossCallReturnLabel_407:
\ 00004A 12.... LCALL ?Subroutine100 & 0xFFFF
\ ??CrossCallReturnLabel_163:
\ 00004D 12.... LCALL ?Subroutine53 & 0xFFFF
\ ??CrossCallReturnLabel_526:
\ 000050 6006 JZ ??CrossCallReturnLabel_408
2192 {
2193 osal_mem_free( matchED->ed2.inClusters );
\ 000052 ; Setup parameters for call to function osal_mem_free
\ 000052 12.... LCALL ?Subroutine100 & 0xFFFF
2194 }
\ ??CrossCallReturnLabel_164:
\ 000055 12.... LCALL ?Subroutine54 & 0xFFFF
2195 if ( matchED->ed2.outClusters != NULL )
\ ??CrossCallReturnLabel_408:
\ 000058 12.... LCALL ?Subroutine105 & 0xFFFF
\ ??CrossCallReturnLabel_175:
\ 00005B 12.... LCALL ?Subroutine53 & 0xFFFF
\ ??CrossCallReturnLabel_527:
\ 00005E 6006 JZ ??CrossCallReturnLabel_409
2196 {
2197 osal_mem_free( matchED->ed2.outClusters );
\ 000060 ; Setup parameters for call to function osal_mem_free
\ 000060 12.... LCALL ?Subroutine105 & 0xFFFF
2198 }
\ ??CrossCallReturnLabel_176:
\ 000063 12.... LCALL ?Subroutine54 & 0xFFFF
2199
2200 osal_mem_free( matchED );
\ ??CrossCallReturnLabel_409:
\ 000066 ; Setup parameters for call to function osal_mem_free
\ 000066 90.... MOV DPTR,#matchED
\ 000069 12.... LCALL ??Subroutine241_0 & 0xFFFF
2201 matchED = (ZDMatchEndDeviceBind_t *)NULL;
\ ??CrossCallReturnLabel_418:
\ 00006C 90.... MOV DPTR,#matchED
\ 00006F E4 CLR A
\ 000070 F0 MOVX @DPTR,A
\ 000071 A3 INC DPTR
\ 000072 F0 MOVX @DPTR,A
2202 }
2203 }
\ ??ZDO_RemoveMatchMemory_0:
\ 000073 REQUIRE ?Subroutine0
\ 000073 ; // Fall through to label ?Subroutine0
2204
2205 /*********************************************************************
2206 * @fn ZDO_CopyMatchInfo()
2207 *
2208 * @brief Called to copy memory used for the end device bind.
2209 *
2210 * @param srcReq - source information
2211 * @param dstReq - destination location
2212 *
2213 * @return TRUE if copy was successful.
2214 */
\ In segment BANKED_CODE, align 1, keep-with-next
2215 static uint8 ZDO_CopyMatchInfo( ZDEndDeviceBind_t *destReq, ZDEndDeviceBind_t *srcReq )
\ ZDO_CopyMatchInfo:
2216 {
\ 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 EA MOV A,R2
\ 000006 FE MOV R6,A
\ 000007 EB MOV A,R3
\ 000008 FF MOV R7,A
\ 000009 8C.. MOV ?V4,R4
\ 00000B 8D.. MOV ?V5,R5
2217 uint8 allOK = TRUE;
\ 00000D 75..01 MOV ?V3,#0x1
2218
2219 // Copy bind information into the match info structure
2220 osal_memcpy( (uint8 *)destReq, srcReq, sizeof ( ZDEndDeviceBind_t ) );
\ 000010 ; Setup parameters for call to function osal_memcpy
\ 000010 8C.. MOV ?V0,R4
\ 000012 8D.. MOV ?V1,R5
\ 000014 75..00 MOV ?V2,#0x0
\ 000017 78.. MOV R0,#?V0
\ 000019 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 00001C 7C17 MOV R4,#0x17
\ 00001E 7D00 MOV R5,#0x0
\ 000020 12.... LCALL ??Subroutine280_0 & 0xFFFF
\ ??CrossCallReturnLabel_638:
\ 000023 12.... LCALL ?DEALLOC_XSTACK8
2221
2222 // Initialize the destination cluster pointers
2223 destReq->inClusters = NULL;
\ 000026 EE MOV A,R6
\ 000027 2412 ADD A,#0x12
\ 000029 12.... LCALL ??Subroutine264_0 & 0xFFFF
\ ??CrossCallReturnLabel_540:
\ 00002C F0 MOVX @DPTR,A
\ 00002D A3 INC DPTR
\ 00002E F0 MOVX @DPTR,A
2224 destReq->outClusters = NULL;
\ 00002F EE MOV A,R6
\ 000030 2415 ADD A,#0x15
\ 000032 12.... LCALL ??Subroutine264_0 & 0xFFFF
\ ??CrossCallReturnLabel_541:
\ 000035 F0 MOVX @DPTR,A
\ 000036 A3 INC DPTR
\ 000037 F0 MOVX @DPTR,A
2225
2226 // Copy input cluster IDs
2227 if ( srcReq->numInClusters )
\ 000038 E5.. MOV A,?V4
\ 00003A 2411 ADD A,#0x11
\ 00003C 12.... LCALL ?Subroutine202 & 0xFFFF
\ ??CrossCallReturnLabel_327:
\ 00003F 602A JZ ??ZDO_CopyMatchInfo_0
\ 000041 ; Setup parameters for call to function osal_mem_alloc
\ 000041 12.... LCALL ?Subroutine131 & 0xFFFF
\ ??CrossCallReturnLabel_215:
\ 000044 12.... LCALL ??Subroutine232_0 & 0xFFFF
\ ??CrossCallReturnLabel_377:
\ 000047 12.... LCALL ??Subroutine267_0 & 0xFFFF
2228 {
2229 destReq->inClusters = osal_mem_alloc( (short)(srcReq->numInClusters * sizeof ( uint16 )) );
2230 if ( destReq->inClusters )
\ ??CrossCallReturnLabel_557:
\ 00004A 601C JZ ??ZDO_CopyMatchInfo_1
2231 {
2232 // Copy the clusters
2233 osal_memcpy( (uint8*)(destReq->inClusters), (uint8 *)(srcReq->inClusters),
2234 (srcReq->numInClusters * sizeof ( uint16 )) );
\ 00004C ; Setup parameters for call to function osal_memcpy
\ 00004C E5.. MOV A,?V4
\ 00004E 2412 ADD A,#0x12
\ 000050 12.... LCALL ?Subroutine115 & 0xFFFF
2235 }
\ ??CrossCallReturnLabel_189:
\ 000053 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 000056 E5.. MOV A,?V4
\ 000058 2411 ADD A,#0x11
\ 00005A 12.... LCALL ?Subroutine124 & 0xFFFF
\ ??CrossCallReturnLabel_204:
\ 00005D 12.... LCALL ??Subroutine232_0 & 0xFFFF
\ ??CrossCallReturnLabel_378:
\ 000060 12.... LCALL ??Subroutine265_0 & 0xFFFF
\ ??CrossCallReturnLabel_546:
\ 000063 12.... LCALL ?DEALLOC_XSTACK8
\ 000066 8003 SJMP ??ZDO_CopyMatchInfo_0
2236 else
2237 {
2238 allOK = FALSE;
\ ??ZDO_CopyMatchInfo_1:
\ 000068 75..00 MOV ?V3,#0x0
2239 }
2240 }
2241
2242 // Copy output cluster IDs
2243 if ( srcReq->numOutClusters )
\ ??ZDO_CopyMatchInfo_0:
\ 00006B E5.. MOV A,?V4
\ 00006D 2414 ADD A,#0x14
\ 00006F 12.... LCALL ?Subroutine202 & 0xFFFF
\ ??CrossCallReturnLabel_328:
\ 000072 6025 JZ ??ZDO_CopyMatchInfo_2
\ 000074 ; Setup parameters for call to function osal_mem_alloc
\ 000074 12.... LCALL ?Subroutine131 & 0xFFFF
\ ??CrossCallReturnLabel_216:
\ 000077 12.... LCALL ??Subroutine263_0 & 0xFFFF
\ ??CrossCallReturnLabel_534:
\ 00007A 12.... LCALL ??Subroutine267_0 & 0xFFFF
2244 {
2245 destReq->outClusters = osal_mem_alloc( (short)(srcReq->numOutClusters * sizeof ( uint16 )) );
2246 if ( destReq->outClusters )
\ ??CrossCallReturnLabel_558:
\ 00007D 6041 JZ ??ZDO_CopyMatchInfo_3
2247 {
2248 // Copy the clusters
2249 osal_memcpy( (uint8 *)(destReq->outClusters), (uint8 *)(srcReq->outClusters),
2250 (srcReq->numOutClusters * sizeof ( uint16 )) );
\ 00007F ; Setup parameters for call to function osal_memcpy
\ 00007F E5.. MOV A,?V4
\ 000081 2415 ADD A,#0x15
\ 000083 12.... LCALL ?Subroutine115 & 0xFFFF
2251 }
\ ??CrossCallReturnLabel_190:
\ 000086 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 000089 E5.. MOV A,?V4
\ 00008B 2414 ADD A,#0x14
\ 00008D 12.... LCALL ?Subroutine124 & 0xFFFF
\ ??CrossCallReturnLabel_205:
\ 000090 12.... LCALL ??Subroutine263_0 & 0xFFFF
\ ??CrossCallReturnLabel_535:
\ 000093 12.... LCALL ??Subroutine265_0 & 0xFFFF
\ ??CrossCallReturnLabel_547:
\ 000096 12.... LCALL ?DEALLOC_XSTACK8
2252 else
2253 {
2254 allOK = FALSE;
2255 }
2256 }
2257
2258 if ( allOK == FALSE )
\ ??ZDO_CopyMatchInfo_2:
\ 000099 E5.. MOV A,?V3
\ 00009B A2E0 MOV C,0xE0 /* A */.0
\ 00009D 401C JC ??CrossCallReturnLabel_411
2259 {
2260 if ( destReq->inClusters != NULL )
\ ??ZDO_CopyMatchInfo_4:
\ 00009F 12.... LCALL ?Subroutine159 & 0xFFFF
\ ??CrossCallReturnLabel_380:
\ 0000A2 12.... LCALL ??Subroutine259_0 & 0xFFFF
\ ??CrossCallReturnLabel_520:
\ 0000A5 6006 JZ ??CrossCallReturnLabel_410
2261 {
2262 osal_mem_free( destReq->inClusters );
\ 0000A7 ; Setup parameters for call to function osal_mem_free
\ 0000A7 12.... LCALL ?Subroutine159 & 0xFFFF
2263 }
\ ??CrossCallReturnLabel_381:
\ 0000AA 12.... LCALL ??Subroutine240_0 & 0xFFFF
2264 if ( destReq->outClusters != NULL )
\ ??CrossCallReturnLabel_410:
\ 0000AD 12.... LCALL ?Subroutine160 & 0xFFFF
\ ??CrossCallReturnLabel_536:
\ 0000B0 12.... LCALL ??Subroutine259_0 & 0xFFFF
\ ??CrossCallReturnLabel_521:
\ 0000B3 6006 JZ ??CrossCallReturnLabel_411
2265 {
2266 osal_mem_free( destReq->outClusters );
\ 0000B5 ; Setup parameters for call to function osal_mem_free
\ 0000B5 12.... LCALL ?Subroutine160 & 0xFFFF
2267 }
2268 }
\ ??CrossCallReturnLabel_537:
\ 0000B8 12.... LCALL ??Subroutine240_0 & 0xFFFF
2269
2270 return ( allOK );
\ ??CrossCallReturnLabel_411:
\ 0000BB A9.. MOV R1,?V3
\ 0000BD 02.... LJMP ??Subroutine297_0 & 0xFFFF
\ ??ZDO_CopyMatchInfo_3:
\ 0000C0 75..00 MOV ?V3,#0x0
\ 0000C3 80DA SJMP ??ZDO_CopyMatchInfo_4
2271 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine160:
\ 000000 EE MOV A,R6
\ 000001 REQUIRE ??Subroutine263_0
\ 000001 ; // Fall through to label ??Subroutine263_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine263_0:
\ 000000 2415 ADD A,#0x15
\ 000002 F582 MOV DPL,A
\ 000004 E4 CLR A
\ 000005 3F ADDC A,R7
\ 000006 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine131:
\ 000000 12.... LCALL ?Subroutine196 & 0xFFFF
\ ??CrossCallReturnLabel_566:
\ 000003 8B.. MOV ?V1,R3
\ 000005 A9.. MOV R1,?V1
\ 000007 EE MOV A,R6
\ 000008 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine124:
\ 000000 12.... LCALL ?Subroutine202 & 0xFFFF
\ ??CrossCallReturnLabel_329:
\ 000003 25E0 ADD A,0xE0 /* A */
\ 000005 FC MOV R4,A
\ 000006 E4 CLR A
\ 000007 33 RLC A
\ 000008 FD MOV R5,A
\ 000009 EE MOV A,R6
\ 00000A 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine115:
\ 000000 F582 MOV DPL,A
\ 000002 E4 CLR A
\ 000003 35.. ADDC A,?V5
\ 000005 12.... LCALL ?Subroutine177 & 0xFFFF
\ ??CrossCallReturnLabel_360:
\ 000008 78.. MOV R0,#?V0
\ 00000A 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine267_0:
\ 000000 F583 MOV DPH,A
\ 000002 REQUIRE ??Subroutine268_0
\ 000002 ; // Fall through to label ??Subroutine268_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine268_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 EA MOV A,R2
\ 000006 49 ORL A,R1
\ 000007 22 RET
2272
2273 /*********************************************************************
2274 * @fn ZDMatchSendState()
2275 *
2276 * @brief State machine for the End device match message algorithm.
2277 *
2278 * @param reason - state of algoritm
2279 * @param status - initial message status
2280 * @param TransSeq - next transaction sequence number
2281 *
2282 * @return FALSE if error and we are not currently matching, TRUE
2283 * if success.
2284 */
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine99:
\ 000000 F582 MOV DPL,A
\ 000002 E4 CLR A
\ 000003 38 ADDC A,R0
\ 000004 REQUIRE ??Subroutine248_0
\ 000004 ; // Fall through to label ??Subroutine248_0
\ In segment BANKED_CODE, align 1, keep-with-next
2285 uint8 ZDMatchSendState( uint8 reason, uint8 status, uint8 TransSeq )
\ ZDMatchSendState:
2286 {
\ 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: 21
\ 000005 74EB MOV A,#-0x15
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A 7401 MOV A,#0x1
\ 00000C 12.... LCALL ?XSTACK_DISP0_8
\ 00000F EA MOV A,R2
\ 000010 F0 MOVX @DPTR,A
\ 000011 7402 MOV A,#0x2
\ 000013 12.... LCALL ?XSTACK_DISP0_8
\ 000016 EB MOV A,R3
\ 000017 F0 MOVX @DPTR,A
\ 000018 89.. MOV ?V2,R1
2287 uint8 *dstIEEEAddr = NULL;
\ 00001A 75..00 MOV ?V4,#0x0
\ 00001D 75..00 MOV ?V5,#0x0
2288 uint8 dstEP = 0xFF;
\ 000020 75..FF MOV ?V3,#-0x1
2289 zAddrType_t dstAddr;
2290 zAddrType_t destinationAddr;
2291 uint16 msgType;
2292 uint16 clusterID = 0xFFFF;
\ 000023 7EFF MOV R6,#-0x1
\ 000025 7FFF MOV R7,#-0x1
2293 ZDEndDeviceBind_t *ed = NULL;
\ 000027 75..00 MOV ?V6,#0x0
\ 00002A 75..00 MOV ?V7,#0x0
2294 uint8 rspStatus = ZDP_SUCCESS;
\ 00002D 85..82 MOV DPL,?XSP + 0
\ 000030 85..83 MOV DPH,?XSP + 1
\ 000033 E4 CLR A
\ 000034 12.... LCALL ?Subroutine51 & 0xFFFF
2295
2296 if ( matchED == NULL )
\ ??CrossCallReturnLabel_76:
\ 000037 F9 MOV R1,A
\ 000038 E8 MOV A,R0
\ 000039 49 ORL A,R1
\ 00003A 6020 JZ ??ZDMatchSendState_0
2297 {
2298 return ( FALSE );
2299 }
2300
2301 // Check sequence number
2302 if ( reason == ZDMATCH_REASON_BIND_RSP || reason == ZDMATCH_REASON_UNBIND_RSP )
\ 00003C 7403 MOV A,#0x3
\ 00003E 65.. XRL A,?V2
\ 000040 6006 JZ ??ZDMatchSendState_1
\ 000042 7402 MOV A,#0x2
\ 000044 65.. XRL A,?V2
\ 000046 7019 JNZ ??ZDMatchSendState_2
2303 {
2304 if ( TransSeq != matchED->transSeq )
\ ??ZDMatchSendState_1:
\ 000048 7402 MOV A,#0x2
\ 00004A 12.... LCALL ?XSTACK_DISP0_8
\ 00004D E0 MOVX A,@DPTR
\ 00004E F9 MOV R1,A
\ 00004F 90.... MOV DPTR,#matchED + 1
\ 000052 E0 MOVX A,@DPTR
\ 000053 C8 XCH A,R0
\ 000054 2430 ADD A,#0x30
\ 000056 12.... LCALL ?Subroutine150 & 0xFFFF
\ ??CrossCallReturnLabel_248:
\ 000059 69 XRL A,R1
\ 00005A 6005 JZ ??ZDMatchSendState_2
2305 {
2306 return( FALSE ); // ignore the message
\ ??ZDMatchSendState_0:
\ 00005C 7900 MOV R1,#0x0
\ 00005E 02.... LJMP ??ZDMatchSendState_3 & 0xFFFF
2307 }
2308 }
2309
2310 // turn off timer
2311 APS_SetEndDeviceBindTimeout( 0, ZDO_EndDeviceBindMatchTimeoutCB );
\ ??ZDMatchSendState_2:
\ 000061 ; Setup parameters for call to function APS_SetEndDeviceBindTimeout
\ 000061 7C.. MOV R4,#`??ZDO_EndDeviceBindMatchTimeoutCB::?relay` & 0xff
\ 000063 7D.. MOV R5,#(`??ZDO_EndDeviceBindMatchTimeoutCB::?relay` >> 8) & 0xff
\ 000065 7A00 MOV R2,#0x0
\ 000067 7B00 MOV R3,#0x0
\ 000069 12.... LCALL `??APS_SetEndDeviceBindTimeout::?relay`; Banked call to: APS_SetEndDeviceBindTimeout
2312
2313 if ( reason == ZDMATCH_REASON_TIMEOUT )
\ 00006C 7401 MOV A,#0x1
\ 00006E 65.. XRL A,?V2
\ 000070 700A JNZ ??ZDMatchSendState_4
2314 {
2315 rspStatus = ZDP_TIMEOUT; // The process will stop
\ 000072 85..82 MOV DPL,?XSP + 0
\ 000075 85..83 MOV DPH,?XSP + 1
\ 000078 7485 MOV A,#-0x7b
\ 00007A 8045 SJMP ??ZDMatchSendState_5
2316 }
2317
2318 if ( reason == ZDMATCH_REASON_START || reason == ZDMATCH_REASON_BIND_RSP )
\ ??ZDMatchSendState_4:
\ 00007C E5.. MOV A,?V2
\ 00007E 6006 JZ ??ZDMatchSendState_6
\ 000080 7403 MOV A,#0x3
\ 000082 65.. XRL A,?V2
\ 000084 701D JNZ ??ZDMatchSendState_7
2319 {
2320 matchED->sending = ZDMATCH_SENDING_UNBIND;
\ ??ZDMatchSendState_6:
\ 000086 90.... MOV DPTR,#matchED
\ 000089 12.... LCALL ?Subroutine83 & 0xFFFF
\ ??CrossCallReturnLabel_133:
\ 00008C F0 MOVX @DPTR,A
2321
2322 if ( reason == ZDMATCH_REASON_BIND_RSP && status != ZDP_SUCCESS )
\ 00008D 7403 MOV A,#0x3
\ 00008F 65.. XRL A,?V2
\ 000091 7031 JNZ ??ZDMatchSendState_8
\ 000093 7401 MOV A,#0x1
\ 000095 12.... LCALL ?XSTACK_DISP0_8
\ 000098 E0 MOVX A,@DPTR
\ 000099 602D JZ ??ZDMatchSendState_9
2323 {
2324 rspStatus = status;
\ 00009B 85..82 MOV DPL,?XSP + 0
\ 00009E 85..83 MOV DPH,?XSP + 1
\ 0000A1 801E SJMP ??ZDMatchSendState_5
2325 }
2326 }
2327 else if ( reason == ZDMATCH_REASON_UNBIND_RSP )
\ ??ZDMatchSendState_7:
\ 0000A3 7402 MOV A,#0x2
\ 0000A5 65.. XRL A,?V2
\ 0000A7 701F JNZ ??ZDMatchSendState_9
2328 {
2329 if ( status == ZDP_SUCCESS )
\ 0000A9 7401 MOV A,#0x1
\ 0000AB 12.... LCALL ?XSTACK_DISP0_8
\ 0000AE E0 MOVX A,@DPTR
\ 0000AF 90.... MOV DPTR,#matchED
\ 0000B2 7005 JNZ ??ZDMatchSendState_10
2330 {
2331 matchED->sending = ZDMATCH_SENDING_UNBIND;
\ 0000B4 12.... LCALL ?Subroutine83 & 0xFFFF
2332 }
\ ??CrossCallReturnLabel_134:
\ 0000B7 8008 SJMP ??ZDMatchSendState_5
2333 else
2334 {
2335 matchED->sending = ZDMATCH_SENDING_BIND;
\ ??ZDMatchSendState_10:
\ 0000B9 12.... LCALL ??Subroutine275_0 & 0xFFFF
2336 }
2337 }
\ ??CrossCallReturnLabel_592:
\ 0000BC 12.... LCALL ?Subroutine218 & 0xFFFF
\ ??CrossCallReturnLabel_352:
\ 0000BF 7402 MOV A,#0x2
\ ??ZDMatchSendState_5:
\ 0000C1 F0 MOVX @DPTR,A
\ 0000C2 8004 SJMP ??ZDMatchSendState_9
2338
2339 if ( reason != ZDMATCH_REASON_START && matchED->sending == ZDMATCH_SENDING_UNBIND )
\ ??ZDMatchSendState_8:
\ 0000C4 E5.. MOV A,?V2
\ 0000C6 601E JZ ??ZDMatchSendState_11
\ ??ZDMatchSendState_9:
\ 0000C8 12.... LCALL ?Subroutine79 & 0xFFFF
\ ??CrossCallReturnLabel_126:
\ 0000CB 7019 JNZ ??ZDMatchSendState_11
2340 {
2341 // Move to the next cluster ID
2342 if ( matchED->ed1numMatched )
\ 0000CD 12.... LCALL ?Subroutine75 & 0xFFFF
\ ??CrossCallReturnLabel_118:
\ 0000D0 6005 JZ ??ZDMatchSendState_12
2343 {
2344 matchED->ed1numMatched--;
\ 0000D2 12.... LCALL ??Subroutine257_0 & 0xFFFF
2345 }
\ ??CrossCallReturnLabel_497:
\ 0000D5 800A SJMP ??ZDMatchSendState_13
2346 else if ( matchED->ed2numMatched )
\ ??ZDMatchSendState_12:
\ 0000D7 12.... LCALL ?Subroutine64 & 0xFFFF
\ ??CrossCallReturnLabel_98:
\ 0000DA 600A JZ ??ZDMatchSendState_11
2347 {
2348 matchED->ed2numMatched--;
\ 0000DC 12.... LCALL ?Subroutine106 & 0xFFFF
2349 }
2350 }
\ ??CrossCallReturnLabel_601:
\ 0000DF 2434 ADD A,#0x34
\ ??ZDMatchSendState_13:
\ 0000E1 12.... LCALL ?Subroutine150 & 0xFFFF
\ ??CrossCallReturnLabel_249:
\ 0000E4 2E ADD A,R6
\ 0000E5 F0 MOVX @DPTR,A
2351
2352 // What message do we send now
2353 if ( matchED->ed1numMatched )
\ ??ZDMatchSendState_11:
\ 0000E6 12.... LCALL ?Subroutine75 & 0xFFFF
\ ??CrossCallReturnLabel_119:
\ 0000E9 601C JZ ??ZDMatchSendState_14
2354 {
2355 ed = &(matchED->ed1);
\ 0000EB E0 MOVX A,@DPTR
\ 0000EC F5.. MOV ?V6,A
\ 0000EE A3 INC DPTR
\ 0000EF E0 MOVX A,@DPTR
\ 0000F0 F5.. MOV ?V7,A
2356 clusterID = matchED->ed1Matched[matchED->ed1numMatched-1];
\ 0000F2 12.... LCALL ?Subroutine58 & 0xFFFF
2357 dstIEEEAddr = matchED->ed2.ieeeAddr;
2358 dstEP = matchED->ed2.endpoint;
2359 }
\ ??CrossCallReturnLabel_85:
\ 0000F5 12.... LCALL ?Subroutine221 & 0xFFFF
\ ??CrossCallReturnLabel_695:
\ 0000F8 CA XCH A,R2
\ 0000F9 2432 ADD A,#0x32
\ 0000FB 12.... LCALL ?Subroutine63 & 0xFFFF
\ ??CrossCallReturnLabel_95:
\ 0000FE 241D ADD A,#0x1d
\ 000100 12.... LCALL ?Subroutine119 & 0xFFFF
\ ??CrossCallReturnLabel_193:
\ 000103 2425 ADD A,#0x25
\ 000105 8026 SJMP ??ZDMatchSendState_15
2360 else if ( matchED->ed2numMatched )
\ ??ZDMatchSendState_14:
\ 000107 12.... LCALL ?Subroutine64 & 0xFFFF
\ ??CrossCallReturnLabel_99:
\ 00010A 602A JZ ??ZDMatchSendState_16
2361 {
2362 ed = &(matchED->ed2);
\ 00010C 90.... MOV DPTR,#matchED
\ 00010F E0 MOVX A,@DPTR
\ 000110 2417 ADD A,#0x17
\ 000112 F5.. MOV ?V6,A
\ 000114 A3 INC DPTR
\ 000115 E0 MOVX A,@DPTR
\ 000116 3400 ADDC A,#0x0
\ 000118 F5.. MOV ?V7,A
2363 clusterID = matchED->ed2Matched[matchED->ed2numMatched-1];
\ 00011A 12.... LCALL ?Subroutine59 & 0xFFFF
2364 dstIEEEAddr = matchED->ed1.ieeeAddr;
2365 dstEP = matchED->ed1.endpoint;
2366 }
\ ??CrossCallReturnLabel_88:
\ 00011D 12.... LCALL ?Subroutine221 & 0xFFFF
\ ??CrossCallReturnLabel_696:
\ 000120 CA XCH A,R2
\ 000121 2435 ADD A,#0x35
\ 000123 12.... LCALL ?Subroutine63 & 0xFFFF
\ ??CrossCallReturnLabel_96:
\ 000126 2406 ADD A,#0x6
\ 000128 12.... LCALL ?Subroutine119 & 0xFFFF
\ ??CrossCallReturnLabel_194:
\ 00012B 240E ADD A,#0xe
\ ??ZDMatchSendState_15:
\ 00012D F582 MOV DPL,A
\ 00012F E4 CLR A
\ 000130 3A ADDC A,R2
\ 000131 F583 MOV DPH,A
\ 000133 E0 MOVX A,@DPTR
\ 000134 F5.. MOV ?V3,A
2367
2368 dstAddr.addrMode = Addr16Bit;
\ ??ZDMatchSendState_16:
\ 000136 740B MOV A,#0xb
\ 000138 12.... LCALL ?XSTACK_DISP0_8
\ 00013B 7402 MOV A,#0x2
\ 00013D 12.... LCALL ?Subroutine31 & 0xFFFF
2369
2370 // Send the next message
2371 if ( (rspStatus == ZDP_SUCCESS) && ed )
\ ??CrossCallReturnLabel_35:
\ 000140 6003 JZ $+5
\ 000142 02.... LJMP ??ZDMatchSendState_17 & 0xFFFF
\ 000145 E5.. MOV A,?V6
\ 000147 45.. ORL A,?V7
\ 000149 7003 JNZ $+5
\ 00014B 02.... LJMP ??ZDMatchSendState_17 & 0xFFFF
2372 {
2373 // Send unbind/bind message to source
2374 if ( matchED->sending == ZDMATCH_SENDING_UNBIND )
\ 00014E 12.... LCALL ?Subroutine79 & 0xFFFF
\ ??CrossCallReturnLabel_127:
\ 000151 7005 JNZ ??ZDMatchSendState_18
2375 {
2376 msgType = Unbind_req;
\ 000153 75..22 MOV ?V0,#0x22
\ 000156 8003 SJMP ??ZDMatchSendState_19
2377 }
2378 else
2379 {
2380 msgType = Bind_req;
\ ??ZDMatchSendState_18:
\ 000158 75..21 MOV ?V0,#0x21
\ ??ZDMatchSendState_19:
\ 00015B 75..00 MOV ?V1,#0x0
2381 }
2382
2383 dstAddr.addr.shortAddr = ed->srcAddr;
\ 00015E 85..82 MOV DPL,?V6
\ 000161 85..83 MOV DPH,?V7
\ 000164 12.... LCALL ??Subroutine251_0 & 0xFFFF
\ ??CrossCallReturnLabel_475:
\ 000167 7403 MOV A,#0x3
\ 000169 12.... LCALL ?XSTACK_DISP0_8
\ 00016C 12.... LCALL ??Subroutine294_0 & 0xFFFF
2384
2385 // Save off the transaction sequence number
2386 matchED->transSeq = ZDP_TransID;
\ ??CrossCallReturnLabel_733:
\ 00016F 90.... MOV DPTR,#ZDP_TransID
\ 000172 E0 MOVX A,@DPTR
\ 000173 C0E0 PUSH A
\ 000175 12.... LCALL ?Subroutine106 & 0xFFFF
\ ??CrossCallReturnLabel_602:
\ 000178 2430 ADD A,#0x30
\ 00017A F582 MOV DPL,A
\ 00017C E4 CLR A
\ 00017D 38 ADDC A,R0
\ 00017E F583 MOV DPH,A
\ 000180 D0E0 POP A
\ 000182 F0 MOVX @DPTR,A
2387
2388 destinationAddr.addrMode = Addr64Bit;
\ 000183 7414 MOV A,#0x14
\ 000185 12.... LCALL ?XSTACK_DISP0_8
\ 000188 7403 MOV A,#0x3
\ 00018A F0 MOVX @DPTR,A
2389 osal_cpyExtAddr( destinationAddr.addr.extAddr, dstIEEEAddr );
\ 00018B ; Setup parameters for call to function sAddrExtCpy
\ 00018B AC.. MOV R4,?V4
\ 00018D AD.. MOV R5,?V5
\ 00018F 740C MOV A,#0xc
\ 000191 12.... LCALL ?XSTACK_DISP101_8
\ 000194 12.... LCALL `??sAddrExtCpy::?relay`; Banked call to: sAddrExtCpy
2390
2391 ZDP_BindUnbindReq( msgType, &dstAddr, ed->ieeeAddr, ed->endpoint, clusterID,
2392 &destinationAddr, dstEP, ed->SecurityUse );
\ 000197 ; Setup parameters for call to function ZDP_BindUnbindReq
\ 000197 85..82 MOV DPL,?V6
\ 00019A 85..83 MOV DPH,?V7
\ 00019D A3 INC DPTR
\ 00019E E0 MOVX A,@DPTR
\ 00019F F5.. MOV ?V4,A
\ 0001A1 78.. MOV R0,#?V4
\ 0001A3 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 0001A6 78.. MOV R0,#?V3
\ 0001A8 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 0001AB 740E MOV A,#0xe
\ 0001AD 12.... LCALL ?XSTACK_DISP100_8
\ 0001B0 88.. MOV ?V4,R0
\ 0001B2 89.. MOV ?V5,R1
\ 0001B4 78.. MOV R0,#?V4
\ 0001B6 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 0001B9 8E.. MOV ?V4,R6
\ 0001BB 8F.. MOV ?V5,R7
\ 0001BD 78.. MOV R0,#?V4
\ 0001BF 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 0001C2 E5.. MOV A,?V6
\ 0001C4 2406 ADD A,#0x6
\ 0001C6 F5.. MOV ?V4,A
\ 0001C8 E4 CLR A
\ 0001C9 35.. ADDC A,?V7
\ 0001CB F5.. MOV ?V5,A
\ 0001CD 78.. MOV R0,#?V4
\ 0001CF 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 0001D2 E5.. MOV A,?V6
\ 0001D4 12.... LCALL ??Subroutine276_0 & 0xFFFF
\ ??CrossCallReturnLabel_622:
\ 0001D7 35.. ADDC A,?V7
\ 0001D9 F583 MOV DPH,A
\ 0001DB E0 MOVX A,@DPTR
\ 0001DC F9 MOV R1,A
\ 0001DD 740B MOV A,#0xb
\ 0001DF 12.... LCALL ?XSTACK_DISP102_8
\ 0001E2 AA.. MOV R2,?V0
\ 0001E4 AB.. MOV R3,?V1
\ 0001E6 12.... LCALL `??ZDP_BindUnbindReq::?relay`; Banked call to: ZDP_BindUnbindReq
\ 0001E9 7408 MOV A,#0x8
\ 0001EB 12.... LCALL ?DEALLOC_XSTACK8
2393
2394 // Set timeout for response
2395 APS_SetEndDeviceBindTimeout( AIB_MaxBindingTime, ZDO_EndDeviceBindMatchTimeoutCB );
\ 0001EE ; Setup parameters for call to function APS_SetEndDeviceBindTimeout
\ 0001EE 12.... LCALL ?Subroutine117 & 0xFFFF
2396 }
\ ??CrossCallReturnLabel_192:
\ 0001F1 02.... LJMP ??ZDMatchSendState_20 & 0xFFFF
2397 else
2398 {
2399 // Send the response messages to requesting devices
2400 // send response to first requester
2401 dstAddr.addr.shortAddr = matchED->ed1.srcAddr;
\ ??ZDMatchSendState_17:
\ 0001F4 90.... MOV DPTR,#matchED
\ 0001F7 12.... LCALL ?Subroutine84 & 0xFFFF
\ ??CrossCallReturnLabel_136:
\ 0001FA 7403 MOV A,#0x3
\ 0001FC 12.... LCALL ?XSTACK_DISP0_8
\ 0001FF 12.... LCALL ?Subroutine14 & 0xFFFF
2402 ZDP_EndDeviceBindRsp( matchED->ed1.TransSeq, &dstAddr, rspStatus, matchED->ed1.SecurityUse );
\ ??CrossCallReturnLabel_11:
\ 000202 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 000205 7401 MOV A,#0x1
\ 000207 12.... LCALL ?XSTACK_DISP100_8
\ 00020A 88.. MOV ?V0,R0
\ 00020C 89.. MOV ?V1,R1
\ 00020E 78.. MOV R0,#?V0
\ 000210 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000213 75..20 MOV ?V0,#0x20
\ 000216 75..80 MOV ?V1,#-0x80
\ 000219 78.. MOV R0,#?V0
\ 00021B 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00021E 7901 MOV R1,#0x1
\ 000220 7408 MOV A,#0x8
\ 000222 12.... LCALL ?XSTACK_DISP102_8
\ 000225 12.... LCALL ?Subroutine111 & 0xFFFF
\ ??CrossCallReturnLabel_182:
\ 000228 12.... LCALL ?DEALLOC_XSTACK8
2403
2404 // send response to second requester
2405 if ( matchED->state == ZDMATCH_SENDING_BINDS )
\ 00022B 12.... LCALL ?Subroutine78 & 0xFFFF
\ ??CrossCallReturnLabel_125:
\ 00022E 704A JNZ ??ZDMatchSendState_21
2406 {
2407 dstAddr.addr.shortAddr = matchED->ed2.srcAddr;
\ 000230 12.... LCALL ?Subroutine106 & 0xFFFF
2408 ZDP_EndDeviceBindRsp( matchED->ed2.TransSeq, &dstAddr, rspStatus, matchED->ed2.SecurityUse );
2409 }
\ ??CrossCallReturnLabel_603:
\ 000233 2419 ADD A,#0x19
\ 000235 F582 MOV DPL,A
\ 000237 E4 CLR A
\ 000238 38 ADDC A,R0
\ 000239 F583 MOV DPH,A
\ 00023B 12.... LCALL ??Subroutine253_0 & 0xFFFF
\ ??CrossCallReturnLabel_471:
\ 00023E 7403 MOV A,#0x3
\ 000240 12.... LCALL ?XSTACK_DISP0_8
\ 000243 E8 MOV A,R0
\ 000244 F0 MOVX @DPTR,A
\ 000245 A3 INC DPTR
\ 000246 12.... LCALL ??Subroutine261_0 & 0xFFFF
\ ??CrossCallReturnLabel_530:
\ 000249 2418 ADD A,#0x18
\ 00024B 12.... LCALL ?Subroutine99 & 0xFFFF
\ ??CrossCallReturnLabel_462:
\ 00024E 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 000251 7401 MOV A,#0x1
\ 000253 12.... LCALL ?XSTACK_DISP100_8
\ 000256 88.. MOV ?V0,R0
\ 000258 89.. MOV ?V1,R1
\ 00025A 78.. MOV R0,#?V0
\ 00025C 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00025F 75..20 MOV ?V0,#0x20
\ 000262 75..80 MOV ?V1,#-0x80
\ 000265 78.. MOV R0,#?V0
\ 000267 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00026A 7901 MOV R1,#0x1
\ 00026C 7408 MOV A,#0x8
\ 00026E 12.... LCALL ?XSTACK_DISP102_8
\ 000271 12.... LCALL ?Subroutine123 & 0xFFFF
\ ??CrossCallReturnLabel_203:
\ 000274 12.... LCALL ?Subroutine161 & 0xFFFF
\ ??CrossCallReturnLabel_270:
\ 000277 12.... LCALL ?DEALLOC_XSTACK8
2410
2411 // Process ended - release memory used
2412 ZDO_RemoveMatchMemory();
\ ??ZDMatchSendState_21:
\ 00027A ; Setup parameters for call to function ZDO_RemoveMatchMemory
\ 00027A 12.... LCALL `??ZDO_RemoveMatchMemory::?relay`; Banked call to: ZDO_RemoveMatchMemory
2413 }
2414
2415 return ( TRUE );
\ ??ZDMatchSendState_20:
\ 00027D 7901 MOV R1,#0x1
\ ??ZDMatchSendState_3:
\ 00027F 7415 MOV A,#0x15
\ 000281 02.... LJMP ?Subroutine7 & 0xFFFF
2416 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine119:
\ 000000 F5.. MOV ?V4,A
\ 000002 A3 INC DPTR
\ 000003 E0 MOVX A,@DPTR
\ 000004 3400 ADDC A,#0x0
\ 000006 F5.. MOV ?V5,A
\ 000008 90.... MOV DPTR,#matchED
\ 00000B E0 MOVX A,@DPTR
\ 00000C 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine83:
\ 000000 12.... LCALL ?Subroutine183 & 0xFFFF
\ ??CrossCallReturnLabel_303:
\ 000003 7401 MOV A,#0x1
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine79:
\ 000000 90.... MOV DPTR,#matchED
\ 000003 12.... LCALL ?Subroutine183 & 0xFFFF
\ ??CrossCallReturnLabel_302:
\ 000006 E0 MOVX A,@DPTR
\ 000007 6401 XRL A,#0x1
\ 000009 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine183:
\ 000000 12.... LCALL ?Subroutine213 & 0xFFFF
\ ??CrossCallReturnLabel_619:
\ 000003 12.... LCALL ?Subroutine218 & 0xFFFF
\ ??CrossCallReturnLabel_353:
\ 000006 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine218:
\ 000000 242F ADD A,#0x2f
\ 000002 F582 MOV DPL,A
\ 000004 E4 CLR A
\ 000005 38 ADDC A,R0
\ 000006 F583 MOV DPH,A
\ 000008 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine75:
\ 000000 12.... LCALL ?Subroutine181 & 0xFFFF
\ ??CrossCallReturnLabel_299:
\ 000003 90.... MOV DPTR,#matchED
\ 000006 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine63:
\ 000000 F582 MOV DPL,A
\ 000002 E4 CLR A
\ 000003 3A ADDC A,R2
\ 000004 F583 MOV DPH,A
\ 000006 E0 MOVX A,@DPTR
\ 000007 28 ADD A,R0
\ 000008 F8 MOV R0,A
\ 000009 A3 INC DPTR
\ 00000A E0 MOVX A,@DPTR
\ 00000B 39 ADDC A,R1
\ 00000C F9 MOV R1,A
\ 00000D E8 MOV A,R0
\ 00000E 24FE ADD A,#-0x2
\ 000010 F582 MOV DPL,A
\ 000012 E9 MOV A,R1
\ 000013 34FF ADDC A,#-0x1
\ 000015 12.... LCALL ?Subroutine193 & 0xFFFF
\ ??CrossCallReturnLabel_715:
\ 000018 90.... MOV DPTR,#matchED
\ 00001B E0 MOVX A,@DPTR
\ 00001C 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine221:
\ 000000 F8 MOV R0,A
\ 000001 E4 CLR A
\ 000002 33 RLC A
\ 000003 F9 MOV R1,A
\ 000004 90.... MOV DPTR,#matchED
\ 000007 REQUIRE ??Subroutine281_0
\ 000007 ; // Fall through to label ??Subroutine281_0
2417
2418 /*********************************************************************
2419 * @fn ZDO_EndDeviceBindMatchTimeoutCB()
2420 *
2421 * @brief End device bind timeout.
2422 *
2423 * @param none
2424 *
2425 * @return none
2426 */
\ In segment BANKED_CODE, align 1, keep-with-next
2427 static void ZDO_EndDeviceBindMatchTimeoutCB( void )
\ ZDO_EndDeviceBindMatchTimeoutCB:
2428 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
2429 ZDMatchSendState( ZDMATCH_REASON_TIMEOUT, ZDP_TIMEOUT, 0 );
\ 000004 ; Setup parameters for call to function ZDMatchSendState
\ 000004 7B00 MOV R3,#0x0
\ 000006 7A85 MOV R2,#-0x7b
\ 000008 7901 MOV R1,#0x1
\ 00000A 12.... LCALL `??ZDMatchSendState::?relay`; Banked call to: ZDMatchSendState
2430 }
\ 00000D 02.... LJMP ?Subroutine0 & 0xFFFF
2431
2432 /*********************************************************************
2433 * ZDO MESSAGE PARSING API FUNCTIONS
2434 */
2435
2436 /*********************************************************************
2437 * @fn ZDO_ParseEndDeviceBindReq
2438 *
2439 * @brief This function parses the End_Device_Bind_req message.
2440 *
2441 * NOTE: The clusters lists in bindReq are allocated in this
2442 * function and must be freed by that calling function.
2443 *
2444 * @param inMsg - incoming message (request)
2445 * @param bindReq - pointer to place to parse message to
2446 *
2447 * @return none
2448 */
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine18:
\ 000000 F582 MOV DPL,A
\ 000002 E4 CLR A
\ 000003 35.. ADDC A,?V1
\ 000005 REQUIRE ??Subroutine267_0
\ 000005 ; // Fall through to label ??Subroutine267_0
\ In segment BANKED_CODE, align 1, keep-with-next
2449 void ZDO_ParseEndDeviceBindReq( zdoIncomingMsg_t *inMsg, ZDEndDeviceBind_t *bindReq )
\ ZDO_ParseEndDeviceBindReq:
2450 {
\ 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 8C.. MOV ?V0,R4
\ 000007 8D.. MOV ?V1,R5
2451 uint8 *msg;
2452
2453 // Parse the message
2454 bindReq->TransSeq = inMsg->TransSeq;
\ 000009 EA MOV A,R2
\ 00000A 12.... LCALL ?Subroutine201 & 0xFFFF
\ ??CrossCallReturnLabel_323:
\ 00000D 3B ADDC A,R3
\ 00000E 12.... LCALL ??Subroutine277_0 & 0xFFFF
2455 bindReq->srcAddr = inMsg->srcAddr.addr.shortAddr;
\ ??CrossCallReturnLabel_627:
\ 000011 12.... LCALL ??Subroutine252_0 & 0xFFFF
\ ??CrossCallReturnLabel_472:
\ 000014 8C82 MOV DPL,R4
\ 000016 8D83 MOV DPH,R5
\ 000018 A3 INC DPTR
\ 000019 A3 INC DPTR
\ 00001A 12.... LCALL ??Subroutine294_0 & 0xFFFF
2456 bindReq->SecurityUse = inMsg->SecurityUse;
\ ??CrossCallReturnLabel_734:
\ 00001D EA MOV A,R2
\ 00001E 12.... LCALL ??Subroutine276_0 & 0xFFFF
\ ??CrossCallReturnLabel_623:
\ 000021 3B ADDC A,R3
\ 000022 F583 MOV DPH,A
\ 000024 12.... LCALL ?Subroutine94 & 0xFFFF
\ ??CrossCallReturnLabel_154:
\ 000027 12.... LCALL ?Subroutine32 & 0xFFFF
2457 msg = inMsg->asdu;
\ ??CrossCallReturnLabel_38:
\ 00002A FE MOV R6,A
\ 00002B A3 INC DPTR
\ 00002C E0 MOVX A,@DPTR
\ 00002D FF MOV R7,A
2458
2459 bindReq->localCoordinator = BUILD_UINT16( msg[0], msg[1] );
\ 00002E 8E82 MOV DPL,R6
\ 000030 F583 MOV DPH,A
\ 000032 12.... LCALL ?Subroutine91 & 0xFFFF
\ ??CrossCallReturnLabel_148:
\ 000035 12.... LCALL ?Subroutine20 & 0xFFFF
2460 msg += 2;
\ ??CrossCallReturnLabel_573:
\ 000038 5001 JNC ??ZDO_ParseEndDeviceBindReq_0
\ 00003A 0F INC R7
2461
2462 osal_cpyExtAddr( bindReq->ieeeAddr, msg );
\ ??ZDO_ParseEndDeviceBindReq_0:
\ 00003B ; Setup parameters for call to function sAddrExtCpy
\ 00003B FC MOV R4,A
\ 00003C EF MOV A,R7
\ 00003D FD MOV R5,A
\ 00003E E5.. MOV A,?V0
\ 000040 2406 ADD A,#0x6
\ 000042 12.... LCALL ??Subroutine274_0 & 0xFFFF
2463 msg += Z_EXTADDR_LEN;
2464
2465 bindReq->endpoint = *msg++;
\ ??CrossCallReturnLabel_583:
\ 000045 C0E0 PUSH A
\ 000047 12.... LCALL ?Subroutine147 & 0xFFFF
\ ??CrossCallReturnLabel_238:
\ 00004A D0E0 POP A
\ 00004C 12.... LCALL ??Subroutine290_0 & 0xFFFF
\ ??CrossCallReturnLabel_701:
\ 00004F 5001 JNC ??ZDO_ParseEndDeviceBindReq_1
\ 000051 0F INC R7
2466 bindReq->profileID = BUILD_UINT16( msg[0], msg[1] );
\ ??ZDO_ParseEndDeviceBindReq_1:
\ 000052 F582 MOV DPL,A
\ 000054 12.... LCALL ?Subroutine214 & 0xFFFF
\ ??CrossCallReturnLabel_690:
\ 000057 12.... LCALL ?Subroutine144 & 0xFFFF
\ ??CrossCallReturnLabel_232:
\ 00005A EA MOV A,R2
\ 00005B 12.... LCALL ??Subroutine295_0 & 0xFFFF
2467 msg += 2;
2468
2469 bindReq->inClusters = NULL;
\ ??CrossCallReturnLabel_719:
\ 00005E E5.. MOV A,?V0
\ 000060 2412 ADD A,#0x12
\ 000062 12.... LCALL ?Subroutine156 & 0xFFFF
\ ??CrossCallReturnLabel_260:
\ 000065 A3 INC DPTR
\ 000066 F0 MOVX @DPTR,A
2470 bindReq->outClusters = NULL;
\ 000067 E5.. MOV A,?V0
\ 000069 2415 ADD A,#0x15
\ 00006B 12.... LCALL ?Subroutine156 & 0xFFFF
\ ??CrossCallReturnLabel_261:
\ 00006E A3 INC DPTR
\ 00006F 12.... LCALL ?Subroutine27 & 0xFFFF
2471
2472 if ((bindReq->numInClusters = *msg++) &&
2473 (bindReq->inClusters = (uint16*)osal_mem_alloc( (bindReq->numInClusters * sizeof( uint16 )))))
\ ??CrossCallReturnLabel_25:
\ 000072 F8 MOV R0,A
\ 000073 E5.. MOV A,?V0
\ 000075 2411 ADD A,#0x11
\ 000077 12.... LCALL ??Subroutine284_0 & 0xFFFF
\ ??CrossCallReturnLabel_658:
\ 00007A E8 MOV A,R0
\ 00007B F0 MOVX @DPTR,A
\ 00007C EE MOV A,R6
\ 00007D 2403 ADD A,#0x3
\ 00007F FE MOV R6,A
\ 000080 5001 JNC ??ZDO_ParseEndDeviceBindReq_2
\ 000082 0F INC R7
\ ??ZDO_ParseEndDeviceBindReq_2:
\ 000083 E8 MOV A,R0
\ 000084 6020 JZ ??ZDO_ParseEndDeviceBindReq_3
\ 000086 12.... LCALL ?Subroutine128 & 0xFFFF
\ ??CrossCallReturnLabel_563:
\ 000089 2412 ADD A,#0x12
\ 00008B 12.... LCALL ?Subroutine18 & 0xFFFF
\ ??CrossCallReturnLabel_561:
\ 00008E 6016 JZ ??ZDO_ParseEndDeviceBindReq_3
2474 {
2475 msg = ZDO_ConvertOTAClusters( bindReq->numInClusters, msg, bindReq->inClusters );
\ 000090 ; Setup parameters for call to function ZDO_ConvertOTAClusters
\ 000090 E5.. MOV A,?V0
\ 000092 2412 ADD A,#0x12
\ 000094 12.... LCALL ?Subroutine98 & 0xFFFF
2476 }
\ ??CrossCallReturnLabel_160:
\ 000097 2411 ADD A,#0x11
\ 000099 12.... LCALL ?Subroutine109 & 0xFFFF
\ ??CrossCallReturnLabel_569:
\ 00009C 8A.. MOV ?V2,R2
\ 00009E 8B.. MOV ?V3,R3
\ 0000A0 AE.. MOV R6,?V2
\ 0000A2 AF.. MOV R7,?V3
\ 0000A4 8007 SJMP ??CrossCallReturnLabel_262
2477 else
2478 {
2479 bindReq->numInClusters = 0;
\ ??ZDO_ParseEndDeviceBindReq_3:
\ 0000A6 E5.. MOV A,?V0
\ 0000A8 2411 ADD A,#0x11
\ 0000AA 12.... LCALL ?Subroutine156 & 0xFFFF
2480 }
2481
2482 if ((bindReq->numOutClusters = *msg++) &&
2483 (bindReq->outClusters = (uint16*)osal_mem_alloc((bindReq->numOutClusters * sizeof(uint16)))))
\ ??CrossCallReturnLabel_262:
\ 0000AD 8E82 MOV DPL,R6
\ 0000AF 8F83 MOV DPH,R7
\ 0000B1 E0 MOVX A,@DPTR
\ 0000B2 F8 MOV R0,A
\ 0000B3 12.... LCALL ?Subroutine155 & 0xFFFF
\ ??CrossCallReturnLabel_255:
\ 0000B6 E8 MOV A,R0
\ 0000B7 12.... LCALL ?Subroutine40 & 0xFFFF
\ ??CrossCallReturnLabel_55:
\ 0000BA 601C JZ ??ZDO_ParseEndDeviceBindReq_4
\ 0000BC 12.... LCALL ?Subroutine155 & 0xFFFF
\ ??CrossCallReturnLabel_256:
\ 0000BF E0 MOVX A,@DPTR
\ 0000C0 12.... LCALL ?Subroutine128 & 0xFFFF
\ ??CrossCallReturnLabel_564:
\ 0000C3 2415 ADD A,#0x15
\ 0000C5 12.... LCALL ?Subroutine18 & 0xFFFF
\ ??CrossCallReturnLabel_562:
\ 0000C8 600E JZ ??ZDO_ParseEndDeviceBindReq_4
2484 {
2485 msg = ZDO_ConvertOTAClusters( bindReq->numOutClusters, msg, bindReq->outClusters );
\ 0000CA ; Setup parameters for call to function ZDO_ConvertOTAClusters
\ 0000CA E5.. MOV A,?V0
\ 0000CC 2415 ADD A,#0x15
\ 0000CE 12.... LCALL ?Subroutine98 & 0xFFFF
2486 }
\ ??CrossCallReturnLabel_161:
\ 0000D1 2414 ADD A,#0x14
\ 0000D3 12.... LCALL ?Subroutine109 & 0xFFFF
\ ??CrossCallReturnLabel_570:
\ 0000D6 8005 SJMP ??ZDO_ParseEndDeviceBindReq_5
2487 else
2488 {
2489 bindReq->numOutClusters = 0;
\ ??ZDO_ParseEndDeviceBindReq_4:
\ 0000D8 12.... LCALL ?Subroutine155 & 0xFFFF
2490 }
\ ??CrossCallReturnLabel_257:
\ 0000DB E4 CLR A
\ 0000DC F0 MOVX @DPTR,A
2491 }
\ ??ZDO_ParseEndDeviceBindReq_5:
\ 0000DD 02.... LJMP ??Subroutine222_0 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine128:
\ 000000 F8 MOV R0,A
\ 000001 ; Setup parameters for call to function osal_mem_alloc
\ 000001 ; Setup parameters for call to function osal_mem_alloc
\ 000001 REQUIRE ??Subroutine269_0
\ 000001 ; // Fall through to label ??Subroutine269_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine269_0:
\ 000000 12.... LCALL ?Subroutine196 & 0xFFFF
\ ??CrossCallReturnLabel_567:
\ 000003 8B.. MOV ?V3,R3
\ 000005 A9.. MOV R1,?V3
\ 000007 E5.. MOV A,?V0
\ 000009 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine109:
\ 000000 12.... LCALL ?Subroutine205 & 0xFFFF
\ ??CrossCallReturnLabel_671:
\ 000003 REQUIRE ??Subroutine270_0
\ 000003 ; // Fall through to label ??Subroutine270_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine98:
\ 000000 12.... LCALL ?Subroutine205 & 0xFFFF
\ ??CrossCallReturnLabel_670:
\ 000003 12.... LCALL ?Subroutine189 & 0xFFFF
\ ??CrossCallReturnLabel_308:
\ 000006 EE MOV A,R6
\ 000007 FA MOV R2,A
\ 000008 EF MOV A,R7
\ 000009 FB MOV R3,A
\ 00000A E5.. MOV A,?V0
\ 00000C 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine20:
\ 000000 A3 INC DPTR
\ 000001 REQUIRE ??Subroutine271_0
\ 000001 ; // Fall through to label ??Subroutine271_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine271_0:
\ 000000 F0 MOVX @DPTR,A
\ 000001 A3 INC DPTR
\ 000002 E9 MOV A,R1
\ 000003 F0 MOVX @DPTR,A
\ 000004 EE MOV A,R6
\ 000005 2402 ADD A,#0x2
\ 000007 FE MOV R6,A
\ 000008 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine155:
\ 000000 E5.. MOV A,?V0
\ 000002 2414 ADD A,#0x14
\ 000004 12.... LCALL ?Subroutine205 & 0xFFFF
\ ??CrossCallReturnLabel_673:
\ 000007 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine274_0:
\ 000000 FA MOV R2,A
\ 000001 E4 CLR A
\ 000002 35.. ADDC A,?V1
\ 000004 FB MOV R3,A
\ 000005 12.... LCALL ?Subroutine174 & 0xFFFF
\ ??CrossCallReturnLabel_585:
\ 000008 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine174:
\ 000000 12.... LCALL `??sAddrExtCpy::?relay`; Banked call to: sAddrExtCpy
\ 000003 8E82 MOV DPL,R6
\ 000005 8F83 MOV DPH,R7
\ 000007 A3 INC DPTR
\ 000008 A3 INC DPTR
\ 000009 A3 INC DPTR
\ 00000A A3 INC DPTR
\ 00000B A3 INC DPTR
\ 00000C A3 INC DPTR
\ 00000D A3 INC DPTR
\ 00000E A3 INC DPTR
\ 00000F E0 MOVX A,@DPTR
\ 000010 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine156:
\ 000000 12.... LCALL ?Subroutine205 & 0xFFFF
\ ??CrossCallReturnLabel_674:
\ 000003 E4 CLR A
\ 000004 F0 MOVX @DPTR,A
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine40:
\ 000000 12.... LCALL ?Subroutine219 & 0xFFFF
\ ??CrossCallReturnLabel_356:
\ 000003 AE82 MOV R6,DPL
\ 000005 AF83 MOV R7,DPH
\ 000007 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine94:
\ 000000 12.... LCALL ??Subroutine282_0 & 0xFFFF
\ ??CrossCallReturnLabel_642:
\ 000003 A3 INC DPTR
\ 000004 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine277_0:
\ 000000 12.... LCALL ?Subroutine185 & 0xFFFF
\ ??CrossCallReturnLabel_644:
\ 000003 REQUIRE ??Subroutine278_0
\ 000003 ; // Fall through to label ??Subroutine278_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine278_0:
\ 000000 12.... LCALL ?Subroutine170 & 0xFFFF
\ ??CrossCallReturnLabel_683:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine170:
\ 000000 F0 MOVX @DPTR,A
\ 000001 8A82 MOV DPL,R2
\ 000003 8B83 MOV DPH,R3
\ 000005 A3 INC DPTR
\ 000006 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine185:
\ 000000 F583 MOV DPH,A
\ 000002 REQUIRE ??Subroutine282_0
\ 000002 ; // Fall through to label ??Subroutine282_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine282_0:
\ 000000 E0 MOVX A,@DPTR
\ 000001 8C82 MOV DPL,R4
\ 000003 8D83 MOV DPH,R5
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine147:
\ 000000 E5.. MOV A,?V0
\ 000002 240E ADD A,#0xe
\ 000004 12.... LCALL ?Subroutine205 & 0xFFFF
\ ??CrossCallReturnLabel_672:
\ 000007 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine27:
\ 000000 12.... LCALL ?Subroutine172 & 0xFFFF
\ ??CrossCallReturnLabel_286:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine172:
\ 000000 12.... LCALL ?Subroutine219 & 0xFFFF
\ ??CrossCallReturnLabel_354:
\ 000003 A3 INC DPTR
\ 000004 E0 MOVX A,@DPTR
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine214:
\ 000000 8F83 MOV DPH,R7
\ 000002 REQUIRE ??Subroutine289_0
\ 000002 ; // Fall through to label ??Subroutine289_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine290_0:
\ 000000 F0 MOVX @DPTR,A
\ 000001 EE MOV A,R6
\ 000002 2409 ADD A,#0x9
\ 000004 FE MOV R6,A
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine200:
\ 000000 EA MOV A,R2
\ 000001 REQUIRE ??Subroutine292_0
\ 000001 ; // Fall through to label ??Subroutine292_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine91:
\ 000000 12.... LCALL ?Subroutine190 & 0xFFFF
\ ??CrossCallReturnLabel_311:
\ 000003 8C82 MOV DPL,R4
\ 000005 8D83 MOV DPH,R5
\ 000007 A3 INC DPTR
\ 000008 A3 INC DPTR
\ 000009 A3 INC DPTR
\ 00000A 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine32:
\ 000000 F0 MOVX @DPTR,A
\ 000001 12.... LCALL ?Subroutine200 & 0xFFFF
\ ??CrossCallReturnLabel_707:
\ 000004 F583 MOV DPH,A
\ 000006 E0 MOVX A,@DPTR
\ 000007 22 RET
2492
2493 /*********************************************************************
2494 * @fn ZDO_ParseBindUnbindReq
2495 *
2496 * @brief This function parses the Bind_req or Unbind_req message.
2497 *
2498 * @param inMsg - incoming message (request)
2499 * @param pReq - place to put parsed information
2500 *
2501 * @return none
2502 */
\ In segment BANKED_CODE, align 1, keep-with-next
2503 void ZDO_ParseBindUnbindReq( zdoIncomingMsg_t *inMsg, ZDO_BindUnbindReq_t *pReq )
\ ZDO_ParseBindUnbindReq:
2504 {
\ 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 12.... LCALL ?Subroutine133 & 0xFFFF
2505 uint8 *msg;
2506
2507 msg = inMsg->asdu;
\ ??CrossCallReturnLabel_577:
\ 000008 12.... LCALL ?Subroutine97 & 0xFFFF
2508 osal_cpyExtAddr( pReq->srcAddress, msg );
\ ??CrossCallReturnLabel_391:
\ 00000B ; Setup parameters for call to function sAddrExtCpy
\ 00000B 12.... LCALL ?Subroutine44 & 0xFFFF
2509 msg += Z_EXTADDR_LEN;
2510 pReq->srcEndpoint = *msg++;
\ ??CrossCallReturnLabel_699:
\ 00000E 5001 JNC ??ZDO_ParseBindUnbindReq_0
\ 000010 0F INC R7
2511 pReq->clusterID = BUILD_UINT16( msg[0], msg[1] );
\ ??ZDO_ParseBindUnbindReq_0:
\ 000011 12.... LCALL ?Subroutine11 & 0xFFFF
2512 msg += 2;
2513 pReq->dstAddress.addrMode = *msg++;
\ ??CrossCallReturnLabel_4:
\ 000014 5001 JNC ??ZDO_ParseBindUnbindReq_1
\ 000016 0F INC R7
2514 if ( pReq->dstAddress.addrMode == Addr64Bit )
\ ??ZDO_ParseBindUnbindReq_1:
\ 000017 7403 MOV A,#0x3
\ 000019 68 XRL A,R0
\ 00001A 700C JNZ ??ZDO_ParseBindUnbindReq_2
2515 {
2516 osal_cpyExtAddr( pReq->dstAddress.addr.extAddr, msg );
\ 00001C ; Setup parameters for call to function sAddrExtCpy
\ 00001C 12.... LCALL ?Subroutine52 & 0xFFFF
2517 msg += Z_EXTADDR_LEN;
2518 pReq->dstEndpoint = *msg;
2519 }
\ ??CrossCallReturnLabel_581:
\ 00001F C0E0 PUSH A
\ 000021 12.... LCALL ?Subroutine155 & 0xFFFF
\ ??CrossCallReturnLabel_258:
\ 000024 D0E0 POP A
\ 000026 8006 SJMP ??ZDO_ParseBindUnbindReq_3
2520 else
2521 {
2522 // copy group address
2523 pReq->dstAddress.addr.shortAddr = BUILD_UINT16( msg[0], msg[1] );
\ ??ZDO_ParseBindUnbindReq_2:
\ 000028 12.... LCALL ?Subroutine76 & 0xFFFF
2524 }
\ ??CrossCallReturnLabel_120:
\ 00002B F0 MOVX @DPTR,A
\ 00002C A3 INC DPTR
\ 00002D E9 MOV A,R1
\ ??ZDO_ParseBindUnbindReq_3:
\ 00002E F0 MOVX @DPTR,A
2525 }
\ 00002F 02.... LJMP ??Subroutine225_0 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine133:
\ 000000 8C.. MOV ?V0,R4
\ 000002 8D.. MOV ?V1,R5
\ 000004 REQUIRE ??Subroutine272_0
\ 000004 ; // Fall through to label ??Subroutine272_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine272_0:
\ 000000 EA MOV A,R2
\ 000001 REQUIRE ??Subroutine273_0
\ 000001 ; // Fall through to label ??Subroutine273_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine52:
\ 000000 EE MOV A,R6
\ 000001 FC MOV R4,A
\ 000002 EF MOV A,R7
\ 000003 FD MOV R5,A
\ 000004 E5.. MOV A,?V0
\ 000006 240B ADD A,#0xb
\ 000008 REQUIRE ??Subroutine274_0
\ 000008 ; // Fall through to label ??Subroutine274_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine76:
\ 000000 8E82 MOV DPL,R6
\ 000002 12.... LCALL ?Subroutine214 & 0xFFFF
\ ??CrossCallReturnLabel_691:
\ 000005 E5.. MOV A,?V0
\ 000007 240B ADD A,#0xb
\ 000009 12.... LCALL ?Subroutine205 & 0xFFFF
\ ??CrossCallReturnLabel_669:
\ 00000C EA MOV A,R2
\ 00000D 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine44:
\ 000000 EE MOV A,R6
\ 000001 FC MOV R4,A
\ 000002 EF MOV A,R7
\ 000003 FD MOV R5,A
\ 000004 AA.. MOV R2,?V0
\ 000006 AB.. MOV R3,?V1
\ 000008 12.... LCALL ?Subroutine174 & 0xFFFF
\ ??CrossCallReturnLabel_586:
\ 00000B 85..82 MOV DPL,?V0
\ 00000E 85..83 MOV DPH,?V1
\ 000011 A3 INC DPTR
\ 000012 A3 INC DPTR
\ 000013 A3 INC DPTR
\ 000014 A3 INC DPTR
\ 000015 A3 INC DPTR
\ 000016 A3 INC DPTR
\ 000017 A3 INC DPTR
\ 000018 A3 INC DPTR
\ 000019 REQUIRE ??Subroutine290_0
\ 000019 ; // Fall through to label ??Subroutine290_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine11:
\ 000000 F582 MOV DPL,A
\ 000002 12.... LCALL ?Subroutine175 & 0xFFFF
\ ??CrossCallReturnLabel_290:
\ 000005 A3 INC DPTR
\ 000006 A3 INC DPTR
\ 000007 F0 MOVX @DPTR,A
\ 000008 A3 INC DPTR
\ 000009 E9 MOV A,R1
\ 00000A 12.... LCALL ?Subroutine172 & 0xFFFF
\ ??CrossCallReturnLabel_287:
\ 00000D F8 MOV R0,A
\ 00000E E5.. MOV A,?V0
\ 000010 12.... LCALL ??Subroutine247_0 & 0xFFFF
\ ??CrossCallReturnLabel_453:
\ 000013 12.... LCALL ??Subroutine285_0 & 0xFFFF
\ ??CrossCallReturnLabel_667:
\ 000016 E8 MOV A,R0
\ 000017 F0 MOVX @DPTR,A
\ 000018 EE MOV A,R6
\ 000019 2403 ADD A,#0x3
\ 00001B FE MOV R6,A
\ 00001C 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine175:
\ 000000 12.... LCALL ?Subroutine214 & 0xFFFF
\ ??CrossCallReturnLabel_692:
\ 000003 EA MOV A,R2
\ 000004 85..82 MOV DPL,?V0
\ 000007 85..83 MOV DPH,?V1
\ 00000A A3 INC DPTR
\ 00000B A3 INC DPTR
\ 00000C A3 INC DPTR
\ 00000D A3 INC DPTR
\ 00000E A3 INC DPTR
\ 00000F A3 INC DPTR
\ 000010 A3 INC DPTR
\ 000011 22 RET
2526
2527 /*********************************************************************
2528 * @fn ZDO_ParseAddrRsp
2529 *
2530 * @brief Turns the inMsg (incoming message) into the out parsed
2531 * structure.
2532 *
2533 * @param inMsg - incoming message
2534 *
2535 * @return pointer to parsed structures. This structure was
2536 * allocated using osal_mem_alloc, so it must be freed
2537 * by the calling function [osal_mem_free()].
2538 */
\ In segment BANKED_CODE, align 1, keep-with-next
2539 ZDO_NwkIEEEAddrResp_t *ZDO_ParseAddrRsp( zdoIncomingMsg_t *inMsg )
\ ZDO_ParseAddrRsp:
2540 {
\ 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 EA MOV A,R2
\ 000006 FE MOV R6,A
\ 000007 EB MOV A,R3
\ 000008 FF MOV R7,A
2541 ZDO_NwkIEEEAddrResp_t *rsp;
2542 uint8 *msg;
2543 byte cnt = 0;
\ 000009 75..00 MOV ?V2,#0x0
2544
2545 // Calculate the number of items in the list
2546 if ( inMsg->asduLen > (1 + Z_EXTADDR_LEN + 2) )
\ 00000C EA MOV A,R2
\ 00000D 2410 ADD A,#0x10
\ 00000F F582 MOV DPL,A
\ 000011 E4 CLR A
\ 000012 3F ADDC A,R7
\ 000013 F583 MOV DPH,A
\ 000015 E0 MOVX A,@DPTR
\ 000016 C3 CLR C
\ 000017 940C SUBB A,#0xc
\ 000019 400D JC ??ZDO_ParseAddrRsp_0
2547 {
2548 cnt = inMsg->asdu[1 + Z_EXTADDR_LEN + 2];
\ 00001B 12.... LCALL ??Subroutine244_0 & 0xFFFF
2549 }
\ ??CrossCallReturnLabel_441:
\ 00001E 12.... LCALL ??Subroutine275_0 & 0xFFFF
\ ??CrossCallReturnLabel_593:
\ 000021 240B ADD A,#0xb
\ 000023 12.... LCALL ?Subroutine150 & 0xFFFF
\ ??CrossCallReturnLabel_250:
\ 000026 F5.. MOV ?V2,A
2550 else
2551 {
2552 cnt = 0;
2553 }
2554
2555 // Make buffer
2556 rsp = (ZDO_NwkIEEEAddrResp_t *)osal_mem_alloc( sizeof(ZDO_NwkIEEEAddrResp_t) + (cnt * sizeof ( uint16 )) );
\ ??ZDO_ParseAddrRsp_0:
\ 000028 ; Setup parameters for call to function osal_mem_alloc
\ 000028 A8.. MOV R0,?V2
\ 00002A E8 MOV A,R0
\ 00002B 28 ADD A,R0
\ 00002C F8 MOV R0,A
\ 00002D E4 CLR A
\ 00002E 33 RLC A
\ 00002F F9 MOV R1,A
\ 000030 E8 MOV A,R0
\ 000031 240D ADD A,#0xd
\ 000033 12.... LCALL ??Subroutine288_0 & 0xFFFF
\ ??CrossCallReturnLabel_688:
\ 000036 8A.. MOV ?V0,R2
\ 000038 8B.. MOV ?V1,R3
2557
2558 if ( rsp )
\ 00003A EA MOV A,R2
\ 00003B 4B ORL A,R3
\ 00003C 7003 JNZ $+5
\ 00003E 02.... LJMP ??ZDO_ParseAddrRsp_1 & 0xFFFF
2559 {
2560 msg = inMsg->asdu;
\ 000041 EE MOV A,R6
\ 000042 12.... LCALL ??Subroutine226_0 & 0xFFFF
\ ??CrossCallReturnLabel_361:
\ 000045 12.... LCALL ??Subroutine291_0 & 0xFFFF
2561
2562 rsp->status = *msg++;
\ ??CrossCallReturnLabel_705:
\ 000048 F8 MOV R0,A
\ 000049 8A82 MOV DPL,R2
\ 00004B 8B83 MOV DPH,R3
\ 00004D 12.... LCALL ?Subroutine40 & 0xFFFF
2563 if ( rsp->status == ZDO_SUCCESS )
\ ??CrossCallReturnLabel_56:
\ 000050 707C JNZ ??ZDO_ParseAddrRsp_1
2564 {
2565 osal_cpyExtAddr( rsp->extAddr, msg );
\ 000052 ; Setup parameters for call to function sAddrExtCpy
\ 000052 EE MOV A,R6
\ 000053 FC MOV R4,A
\ 000054 EF MOV A,R7
\ 000055 FD MOV R5,A
\ 000056 EA MOV A,R2
\ 000057 2403 ADD A,#0x3
\ 000059 FA MOV R2,A
\ 00005A E4 CLR A
\ 00005B 35.. ADDC A,?V1
\ 00005D FB MOV R3,A
\ 00005E 12.... LCALL `??sAddrExtCpy::?relay`; Banked call to: sAddrExtCpy
2566 msg += Z_EXTADDR_LEN;
\ 000061 EE MOV A,R6
\ 000062 2408 ADD A,#0x8
\ 000064 FE MOV R6,A
\ 000065 5001 JNC ??ZDO_ParseAddrRsp_2
\ 000067 0F INC R7
2567 rsp->nwkAddr = BUILD_UINT16( msg[0], msg[1] );
\ ??ZDO_ParseAddrRsp_2:
\ 000068 12.... LCALL ?Subroutine93 & 0xFFFF
\ ??CrossCallReturnLabel_152:
\ 00006B A3 INC DPTR
\ 00006C 12.... LCALL ??Subroutine295_0 & 0xFFFF
2568
2569 msg += 2;
2570 rsp->numAssocDevs = 0;
\ ??CrossCallReturnLabel_720:
\ 00006F E5.. MOV A,?V0
\ 000071 240B ADD A,#0xb
\ 000073 12.... LCALL ?Subroutine156 & 0xFFFF
2571
2572 // StartIndex field is only present if NumAssocDev field is non-zero.
2573 if ( cnt > 0 )
\ ??CrossCallReturnLabel_263:
\ 000076 E5.. MOV A,?V2
\ 000078 6054 JZ ??ZDO_ParseAddrRsp_1
2574 {
2575 uint16 *pList = &(rsp->devList[0]);
\ 00007A E5.. MOV A,?V0
\ 00007C 240D ADD A,#0xd
\ 00007E F8 MOV R0,A
\ 00007F E4 CLR A
\ 000080 35.. ADDC A,?V1
\ 000082 F9 MOV R1,A
2576 byte n = cnt;
2577
2578 rsp->numAssocDevs = *msg++;
\ 000083 8E82 MOV DPL,R6
\ 000085 8F83 MOV DPH,R7
\ 000087 A3 INC DPTR
\ 000088 A3 INC DPTR
\ 000089 E0 MOVX A,@DPTR
\ 00008A C0E0 PUSH A
\ 00008C E5.. MOV A,?V0
\ 00008E 240B ADD A,#0xb
\ 000090 12.... LCALL ??Subroutine284_0 & 0xFFFF
\ ??CrossCallReturnLabel_659:
\ 000093 D0E0 POP A
\ 000095 12.... LCALL ?Subroutine45 & 0xFFFF
2579 rsp->startIndex = *msg++;
\ ??CrossCallReturnLabel_62:
\ 000098 C0E0 PUSH A
\ 00009A 12.... LCALL ?Subroutine157 & 0xFFFF
\ ??CrossCallReturnLabel_665:
\ 00009D D0E0 POP A
\ 00009F F0 MOVX @DPTR,A
\ 0000A0 EE MOV A,R6
\ 0000A1 2404 ADD A,#0x4
\ 0000A3 FE MOV R6,A
\ 0000A4 5001 JNC ??ZDO_ParseAddrRsp_3
\ 0000A6 0F INC R7
\ ??ZDO_ParseAddrRsp_3:
\ 0000A7 AC.. MOV R4,?V2
2580
2581 while ( n != 0 )
2582 {
2583 *pList++ = BUILD_UINT16( msg[0], msg[1] );
\ ??ZDO_ParseAddrRsp_4:
\ 0000A9 8E82 MOV DPL,R6
\ 0000AB 8F83 MOV DPH,R7
\ 0000AD E0 MOVX A,@DPTR
\ 0000AE F5.. MOV ?V2,A
\ 0000B0 A3 INC DPTR
\ 0000B1 E0 MOVX A,@DPTR
\ 0000B2 FB MOV R3,A
\ 0000B3 E5.. MOV A,?V2
\ 0000B5 8882 MOV DPL,R0
\ 0000B7 8983 MOV DPH,R1
\ 0000B9 12.... LCALL ??Subroutine243_0 & 0xFFFF
\ ??CrossCallReturnLabel_422:
\ 0000BC E8 MOV A,R0
\ 0000BD 2402 ADD A,#0x2
\ 0000BF F8 MOV R0,A
\ 0000C0 5001 JNC ??ZDO_ParseAddrRsp_5
\ 0000C2 09 INC R1
2584 msg += sizeof( uint16 );
\ ??ZDO_ParseAddrRsp_5:
\ 0000C3 EE MOV A,R6
\ 0000C4 2402 ADD A,#0x2
\ 0000C6 FE MOV R6,A
\ 0000C7 5001 JNC ??ZDO_ParseAddrRsp_6
\ 0000C9 0F INC R7
2585 n--;
2586 }
\ ??ZDO_ParseAddrRsp_6:
\ 0000CA 1C DEC R4
\ 0000CB EC MOV A,R4
\ 0000CC 70DB JNZ ??ZDO_ParseAddrRsp_4
2587 }
2588 }
2589 }
2590
2591 return ( rsp );
\ ??ZDO_ParseAddrRsp_1:
\ 0000CE AA.. MOV R2,?V0
\ 0000D0 AB.. MOV R3,?V1
\ 0000D2 02.... LJMP ??Subroutine297_0 & 0xFFFF
2592 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine93:
\ 000000 F582 MOV DPL,A
\ 000002 8F83 MOV DPH,R7
\ 000004 12.... LCALL ?Subroutine190 & 0xFFFF
\ ??CrossCallReturnLabel_312:
\ 000007 85..82 MOV DPL,?V0
\ 00000A 85..83 MOV DPH,?V1
\ 00000D 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine288_0:
\ 000000 FA MOV R2,A
\ 000001 E4 CLR A
\ 000002 39 ADDC A,R1
\ 000003 FB MOV R3,A
\ 000004 12.... LCALL `??osal_mem_alloc::?relay`; Banked call to: osal_mem_alloc
\ 000007 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine291_0:
\ 000000 12.... LCALL ?Subroutine193 & 0xFFFF
\ ??CrossCallReturnLabel_717:
\ 000003 8E82 MOV DPL,R6
\ 000005 F583 MOV DPH,A
\ 000007 E0 MOVX A,@DPTR
\ 000008 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine45:
\ 000000 12.... LCALL ?Subroutine171 & 0xFFFF
\ ??CrossCallReturnLabel_285:
\ 000003 E0 MOVX A,@DPTR
\ 000004 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine171:
\ 000000 12.... LCALL ?Subroutine212 & 0xFFFF
\ ??CrossCallReturnLabel_343:
\ 000003 22 RET
2593
2594 /*********************************************************************
2595 * @fn ZDO_ParseNodeDescRsp
2596 *
2597 * @brief This function parses the Node_Desc_rsp message.
2598 *
2599 * @param inMsg - incoming message
2600 * @param pNDRsp - place to parse the message into
2601 *
2602 * @return none
2603 */
\ In segment BANKED_CODE, align 1, keep-with-next
2604 void ZDO_ParseNodeDescRsp( zdoIncomingMsg_t *inMsg, ZDO_NodeDescRsp_t *pNDRsp )
\ ZDO_ParseNodeDescRsp:
2605 {
\ 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
2606 uint8 *msg;
2607
2608 msg = inMsg->asdu;
\ 000005 12.... LCALL ?Subroutine10 & 0xFFFF
2609
2610 pNDRsp->status = *msg++;
2611 pNDRsp->nwkAddr = BUILD_UINT16( msg[0], msg[1] );
2612
2613 if ( pNDRsp->status == ZDP_SUCCESS )
\ ??CrossCallReturnLabel_2:
\ 000008 6003 JZ $+5
\ 00000A 02.... LJMP ??ZDO_ParseNodeDescRsp_0 & 0xFFFF
2614 {
2615 msg += 2;
2616 pNDRsp->nodeDesc.LogicalType = *msg & 0x07;
\ 00000D E8 MOV A,R0
\ 00000E 2402 ADD A,#0x2
\ 000010 FA MOV R2,A
\ 000011 E4 CLR A
\ 000012 39 ADDC A,R1
\ 000013 FB MOV R3,A
\ 000014 EC MOV A,R4
\ 000015 2403 ADD A,#0x3
\ 000017 FE MOV R6,A
\ 000018 E4 CLR A
\ 000019 3D ADDC A,R5
\ 00001A FF MOV R7,A
\ 00001B 8A82 MOV DPL,R2
\ 00001D 8B83 MOV DPH,R3
\ 00001F E0 MOVX A,@DPTR
\ 000020 5407 ANL A,#0x7
\ 000022 F5.. MOV ?V0,A
\ 000024 8E82 MOV DPL,R6
\ 000026 8F83 MOV DPH,R7
\ 000028 E0 MOVX A,@DPTR
\ 000029 54F8 ANL A,#0xf8
\ 00002B 45.. ORL A,?V0
\ 00002D F5.. MOV ?V1,A
\ 00002F 12.... LCALL ?Subroutine46 & 0xFFFF
2617
2618 pNDRsp->nodeDesc.ComplexDescAvail = ( *msg & 0x08 ) >> 3;
\ ??CrossCallReturnLabel_64:
\ 000032 A2E3 MOV C,0xE0 /* A */.3
\ 000034 E4 CLR A
\ 000035 33 RLC A
\ 000036 F5.. MOV ?V0,A
\ 000038 A2E0 MOV C,0xE0 /* A */.0
\ 00003A E4 CLR A
\ 00003B 33 RLC A
\ 00003C 33 RLC A
\ 00003D 33 RLC A
\ 00003E 33 RLC A
\ 00003F F5.. MOV ?V0,A
\ 000041 74F7 MOV A,#-0x9
\ 000043 55.. ANL A,?V1
\ 000045 45.. ORL A,?V0
\ 000047 8E82 MOV DPL,R6
\ 000049 8F83 MOV DPH,R7
\ 00004B 12.... LCALL ?Subroutine46 & 0xFFFF
2619 pNDRsp->nodeDesc.UserDescAvail = ( *msg & 0x10 ) >> 4;
\ ??CrossCallReturnLabel_65:
\ 00004E A2E4 MOV C,0xE0 /* A */.4
\ 000050 E4 CLR A
\ 000051 33 RLC A
\ 000052 FA MOV R2,A
\ 000053 A2E0 MOV C,0xE0 /* A */.0
\ 000055 E4 CLR A
\ 000056 33 RLC A
\ 000057 C4 SWAP A
\ 000058 FA MOV R2,A
\ 000059 8E82 MOV DPL,R6
\ 00005B 8F83 MOV DPH,R7
\ 00005D E0 MOVX A,@DPTR
\ 00005E 54EF ANL A,#0xef
\ 000060 4A ORL A,R2
\ 000061 F0 MOVX @DPTR,A
2620
2621 msg++; // Reserved bits.
2622 pNDRsp->nodeDesc.FrequencyBand = (*msg >> 3) & 0x1f;
\ 000062 E8 MOV A,R0
\ 000063 2403 ADD A,#0x3
\ 000065 FA MOV R2,A
\ 000066 E4 CLR A
\ 000067 39 ADDC A,R1
\ 000068 FB MOV R3,A
\ 000069 EC MOV A,R4
\ 00006A 2404 ADD A,#0x4
\ 00006C 0E INC R6
\ 00006D E4 CLR A
\ 00006E 3D ADDC A,R5
\ 00006F FF MOV R7,A
\ 000070 8A82 MOV DPL,R2
\ 000072 8B83 MOV DPH,R3
\ 000074 E0 MOVX A,@DPTR
\ 000075 54F8 ANL A,#0xf8
\ 000077 F5.. MOV ?V0,A
\ 000079 8E82 MOV DPL,R6
\ 00007B 8F83 MOV DPH,R7
\ 00007D E0 MOVX A,@DPTR
\ 00007E 5407 ANL A,#0x7
\ 000080 45.. ORL A,?V0
\ 000082 F5.. MOV ?V0,A
\ 000084 12.... LCALL ?Subroutine46 & 0xFFFF
2623 pNDRsp->nodeDesc.APSFlags = *msg++ & 0x07;
\ ??CrossCallReturnLabel_66:
\ 000087 5407 ANL A,#0x7
\ 000089 FA MOV R2,A
\ 00008A 74F8 MOV A,#-0x8
\ 00008C 55.. ANL A,?V0
\ 00008E 4A ORL A,R2
\ 00008F 8E82 MOV DPL,R6
\ 000091 8F83 MOV DPH,R7
\ 000093 12.... LCALL ?Subroutine37 & 0xFFFF
2624 pNDRsp->nodeDesc.CapabilityFlags = *msg++;
\ ??CrossCallReturnLabel_48:
\ 000096 8C82 MOV DPL,R4
\ 000098 8D83 MOV DPH,R5
\ 00009A A3 INC DPTR
\ 00009B A3 INC DPTR
\ 00009C A3 INC DPTR
\ 00009D A3 INC DPTR
\ 00009E A3 INC DPTR
\ 00009F 12.... LCALL ?Subroutine38 & 0xFFFF
2625 pNDRsp->nodeDesc.ManufacturerCode[0] = *msg++;
\ ??CrossCallReturnLabel_51:
\ 0000A2 A3 INC DPTR
\ 0000A3 A3 INC DPTR
\ 0000A4 12.... LCALL ??Subroutine282_0 & 0xFFFF
\ ??CrossCallReturnLabel_639:
\ 0000A7 12.... LCALL ?Subroutine34 & 0xFFFF
2626 pNDRsp->nodeDesc.ManufacturerCode[1] = *msg++;
\ ??CrossCallReturnLabel_42:
\ 0000AA 12.... LCALL ?Subroutine94 & 0xFFFF
\ ??CrossCallReturnLabel_155:
\ 0000AD 12.... LCALL ?Subroutine34 & 0xFFFF
2627 pNDRsp->nodeDesc.MaxBufferSize = *msg++;
\ ??CrossCallReturnLabel_43:
\ 0000B0 A3 INC DPTR
\ 0000B1 12.... LCALL ??Subroutine282_0 & 0xFFFF
\ ??CrossCallReturnLabel_640:
\ 0000B4 12.... LCALL ?Subroutine26 & 0xFFFF
2628 pNDRsp->nodeDesc.MaxInTransferSize[0] = *msg++;
\ ??CrossCallReturnLabel_23:
\ 0000B7 12.... LCALL ?Subroutine94 & 0xFFFF
\ ??CrossCallReturnLabel_156:
\ 0000BA 12.... LCALL ?Subroutine26 & 0xFFFF
2629 pNDRsp->nodeDesc.MaxInTransferSize[1] = *msg++;
\ ??CrossCallReturnLabel_24:
\ 0000BD A3 INC DPTR
\ 0000BE 12.... LCALL ?Subroutine94 & 0xFFFF
\ ??CrossCallReturnLabel_157:
\ 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 A3 INC DPTR
\ 0000C9 A3 INC DPTR
\ 0000CA F0 MOVX @DPTR,A
\ 0000CB E8 MOV A,R0
\ 0000CC 240A ADD A,#0xa
\ 0000CE F8 MOV R0,A
\ 0000CF 5001 JNC ??ZDO_ParseNodeDescRsp_1
\ 0000D1 09 INC R1
2630 pNDRsp->nodeDesc.ServerMask = BUILD_UINT16( msg[0], msg[1] );
\ ??ZDO_ParseNodeDescRsp_1:
\ 0000D2 F582 MOV DPL,A
\ 0000D4 8983 MOV DPH,R1
\ 0000D6 E0 MOVX A,@DPTR
\ 0000D7 FE MOV R6,A
\ 0000D8 A3 INC DPTR
\ 0000D9 E0 MOVX A,@DPTR
\ 0000DA FB MOV R3,A
\ 0000DB EC MOV A,R4
\ 0000DC 240B ADD A,#0xb
\ 0000DE F582 MOV DPL,A
\ 0000E0 E4 CLR A
\ 0000E1 3D ADDC A,R5
\ 0000E2 F583 MOV DPH,A
\ 0000E4 EE MOV A,R6
\ 0000E5 12.... LCALL ??Subroutine243_0 & 0xFFFF
2631 msg += 2;
2632 pNDRsp->nodeDesc.MaxOutTransferSize[0] = *msg++;
\ ??CrossCallReturnLabel_423:
\ 0000E8 8882 MOV DPL,R0
\ 0000EA 8983 MOV DPH,R1
\ 0000EC A3 INC DPTR
\ 0000ED A3 INC DPTR
\ 0000EE E0 MOVX A,@DPTR
\ 0000EF C0E0 PUSH A
\ 0000F1 EC MOV A,R4
\ 0000F2 240D ADD A,#0xd
\ 0000F4 F582 MOV DPL,A
\ 0000F6 E4 CLR A
\ 0000F7 3D ADDC A,R5
\ 0000F8 F583 MOV DPH,A
\ 0000FA D0E0 POP A
\ 0000FC 12.... LCALL ?Subroutine38 & 0xFFFF
2633 pNDRsp->nodeDesc.MaxOutTransferSize[1] = *msg++;
2634 pNDRsp->nodeDesc.DescriptorCapability = *msg;
2635 }
\ ??CrossCallReturnLabel_52:
\ 0000FF E0 MOVX A,@DPTR
\ 000100 C0E0 PUSH A
\ 000102 EC MOV A,R4
\ 000103 12.... LCALL ??Subroutine276_0 & 0xFFFF
\ ??CrossCallReturnLabel_624:
\ 000106 3D ADDC A,R5
\ 000107 F583 MOV DPH,A
\ 000109 D0E0 POP A
\ 00010B 12.... LCALL ?Subroutine37 & 0xFFFF
\ ??CrossCallReturnLabel_49:
\ 00010E C0E0 PUSH A
\ 000110 EC MOV A,R4
\ 000111 12.... LCALL ?Subroutine201 & 0xFFFF
\ ??CrossCallReturnLabel_324:
\ 000114 3D ADDC A,R5
\ 000115 F583 MOV DPH,A
\ 000117 D0E0 POP A
\ 000119 F0 MOVX @DPTR,A
2636 }
\ ??ZDO_ParseNodeDescRsp_0:
\ 00011A 02.... LJMP ??Subroutine225_0 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine46:
\ 000000 F0 MOVX @DPTR,A
\ 000001 8A82 MOV DPL,R2
\ 000003 8B83 MOV DPH,R3
\ 000005 E0 MOVX A,@DPTR
\ 000006 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine37:
\ 000000 12.... LCALL ?Subroutine173 & 0xFFFF
\ ??CrossCallReturnLabel_289:
\ 000003 A3 INC DPTR
\ 000004 E0 MOVX A,@DPTR
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine34:
\ 000000 12.... LCALL ?Subroutine168 & 0xFFFF
\ ??CrossCallReturnLabel_280:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine168:
\ 000000 A3 INC DPTR
\ 000001 A3 INC DPTR
\ 000002 A3 INC DPTR
\ 000003 A3 INC DPTR
\ 000004 A3 INC DPTR
\ 000005 A3 INC DPTR
\ 000006 12.... LCALL ?Subroutine210 & 0xFFFF
\ ??CrossCallReturnLabel_337:
\ 000009 A3 INC DPTR
\ 00000A A3 INC DPTR
\ 00000B A3 INC DPTR
\ 00000C 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine26:
\ 000000 A3 INC DPTR
\ 000001 A3 INC DPTR
\ 000002 12.... LCALL ?Subroutine168 & 0xFFFF
\ ??CrossCallReturnLabel_281:
\ 000005 A3 INC DPTR
\ 000006 A3 INC DPTR
\ 000007 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine10:
\ 000000 12.... LCALL ?Subroutine200 & 0xFFFF
\ ??CrossCallReturnLabel_706:
\ 000003 12.... LCALL ?Subroutine186 & 0xFFFF
\ ??CrossCallReturnLabel_647:
\ 000006 8882 MOV DPL,R0
\ 000008 12.... LCALL ?Subroutine185 & 0xFFFF
\ ??CrossCallReturnLabel_643:
\ 00000B 12.... LCALL ?Subroutine211 & 0xFFFF
\ ??CrossCallReturnLabel_341:
\ 00000E A3 INC DPTR
\ 00000F A882 MOV R0,DPL
\ 000011 A983 MOV R1,DPH
\ 000013 E0 MOVX A,@DPTR
\ 000014 FE MOV R6,A
\ 000015 A3 INC DPTR
\ 000016 E0 MOVX A,@DPTR
\ 000017 FB MOV R3,A
\ 000018 EE MOV A,R6
\ 000019 8C82 MOV DPL,R4
\ 00001B 8D83 MOV DPH,R5
\ 00001D A3 INC DPTR
\ 00001E F0 MOVX @DPTR,A
\ 00001F A3 INC DPTR
\ 000020 EB MOV A,R3
\ 000021 F0 MOVX @DPTR,A
\ 000022 8C82 MOV DPL,R4
\ 000024 8D83 MOV DPH,R5
\ 000026 E0 MOVX A,@DPTR
\ 000027 22 RET
2637
2638 /*********************************************************************
2639 * @fn ZDO_ParesPowerDescRsp
2640 *
2641 * @brief This function parses the Power_Desc_rsp message.
2642 *
2643 * @param inMsg - incoming message
2644 * @param pNPRsp - place to parse the message into
2645 *
2646 * @return none
2647 */
\ In segment BANKED_CODE, align 1, keep-with-next
2648 void ZDO_ParsePowerDescRsp( zdoIncomingMsg_t *inMsg, ZDO_PowerRsp_t *pNPRsp )
\ ZDO_ParsePowerDescRsp:
2649 {
\ 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
2650 uint8 *msg;
2651
2652 msg = inMsg->asdu;
\ 000005 12.... LCALL ??Subroutine272_0 & 0xFFFF
\ ??CrossCallReturnLabel_580:
\ 000008 F583 MOV DPH,A
\ 00000A 12.... LCALL ??Subroutine256_0 & 0xFFFF
2653 pNPRsp->status = *msg++;
\ ??CrossCallReturnLabel_490:
\ 00000D 12.... LCALL ?Subroutine29 & 0xFFFF
\ ??CrossCallReturnLabel_629:
\ 000010 AA82 MOV R2,DPL
\ 000012 AB83 MOV R3,DPH
2654 pNPRsp->nwkAddr = BUILD_UINT16( msg[0], msg[1] );
\ 000014 E0 MOVX A,@DPTR
\ 000015 FE MOV R6,A
\ 000016 A3 INC DPTR
\ 000017 E0 MOVX A,@DPTR
\ 000018 F9 MOV R1,A
\ 000019 EE MOV A,R6
\ 00001A 8C82 MOV DPL,R4
\ 00001C 8D83 MOV DPH,R5
\ 00001E A3 INC DPTR
\ 00001F 12.... LCALL ??Subroutine295_0 & 0xFFFF
2655
2656 if ( pNPRsp->status == ZDP_SUCCESS )
\ ??CrossCallReturnLabel_721:
\ 000022 8C82 MOV DPL,R4
\ 000024 8D83 MOV DPH,R5
\ 000026 E0 MOVX A,@DPTR
\ 000027 6003 JZ $+5
\ 000029 02.... LJMP ??ZDO_ParsePowerDescRsp_0 & 0xFFFF
2657 {
2658 msg += 2;
2659 pNPRsp->pwrDesc.AvailablePowerSources = *msg >> 4;
\ 00002C EA MOV A,R2
\ 00002D 2402 ADD A,#0x2
\ 00002F F8 MOV R0,A
\ 000030 E4 CLR A
\ 000031 3B ADDC A,R3
\ 000032 F9 MOV R1,A
\ 000033 E8 MOV A,R0
\ 000034 FE MOV R6,A
\ 000035 E9 MOV A,R1
\ 000036 FF MOV R7,A
\ 000037 EC MOV A,R4
\ 000038 2403 ADD A,#0x3
\ 00003A E4 CLR A
\ 00003B 3D ADDC A,R5
\ 00003C 0C INC R4
\ 00003D 0C INC R4
\ 00003E 0C INC R4
\ 00003F FD MOV R5,A
\ 000040 8C82 MOV DPL,R4
\ 000042 F583 MOV DPH,A
\ 000044 E0 MOVX A,@DPTR
\ 000045 540F ANL A,#0xf
\ 000047 F5.. MOV ?V2,A
\ 000049 A3 INC DPTR
\ 00004A E0 MOVX A,@DPTR
\ 00004B 12.... LCALL ?Subroutine122 & 0xFFFF
\ ??CrossCallReturnLabel_200:
\ 00004E 7404 MOV A,#0x4
\ 000050 78.. MOV R0,#?V0
\ 000052 12.... LCALL ?S_SHL
\ 000055 E5.. MOV A,?V2
\ 000057 45.. ORL A,?V0
\ 000059 F8 MOV R0,A
\ 00005A A9.. MOV R1,?V3
\ 00005C 8C82 MOV DPL,R4
\ 00005E 8D83 MOV DPH,R5
\ 000060 12.... LCALL ??Subroutine295_0 & 0xFFFF
2660 pNPRsp->pwrDesc.PowerMode = *msg++ & 0x0F;
\ ??CrossCallReturnLabel_722:
\ 000063 E8 MOV A,R0
\ 000064 54F0 ANL A,#0xf0
\ 000066 F8 MOV R0,A
\ 000067 8E82 MOV DPL,R6
\ 000069 8F83 MOV DPH,R7
\ 00006B E0 MOVX A,@DPTR
\ 00006C 540F ANL A,#0xf
\ 00006E FE MOV R6,A
\ 00006F E8 MOV A,R0
\ 000070 4E ORL A,R6
\ 000071 F5.. MOV ?V0,A
\ 000073 E9 MOV A,R1
\ 000074 F5.. MOV ?V1,A
\ 000076 8C82 MOV DPL,R4
\ 000078 8D83 MOV DPH,R5
\ 00007A E5.. MOV A,?V0
\ 00007C 12.... LCALL ??Subroutine295_0 & 0xFFFF
2661 pNPRsp->pwrDesc.CurrentPowerSourceLevel = *msg >> 4;
\ ??CrossCallReturnLabel_723:
\ 00007F EA MOV A,R2
\ 000080 2403 ADD A,#0x3
\ 000082 F8 MOV R0,A
\ 000083 E4 CLR A
\ 000084 3B ADDC A,R3
\ 000085 F9 MOV R1,A
\ 000086 E8 MOV A,R0
\ 000087 FE MOV R6,A
\ 000088 E9 MOV A,R1
\ 000089 FF MOV R7,A
\ 00008A E5.. MOV A,?V0
\ 00008C F5.. MOV ?V2,A
\ 00008E E5.. MOV A,?V1
\ 000090 540F ANL A,#0xf
\ 000092 12.... LCALL ?Subroutine122 & 0xFFFF
\ ??CrossCallReturnLabel_201:
\ 000095 740C MOV A,#0xc
\ 000097 78.. MOV R0,#?V0
\ 000099 12.... LCALL ?S_SHL
\ 00009C E5.. MOV A,?V3
\ 00009E 45.. ORL A,?V1
\ 0000A0 F9 MOV R1,A
\ 0000A1 8C82 MOV DPL,R4
\ 0000A3 8D83 MOV DPH,R5
\ 0000A5 E5.. MOV A,?V2
\ 0000A7 12.... LCALL ??Subroutine295_0 & 0xFFFF
2662 pNPRsp->pwrDesc.CurrentPowerSource = *msg++ & 0x0F;
\ ??CrossCallReturnLabel_724:
\ 0000AA 8E82 MOV DPL,R6
\ 0000AC 8F83 MOV DPH,R7
\ 0000AE E0 MOVX A,@DPTR
\ 0000AF 540F ANL A,#0xf
\ 0000B1 F8 MOV R0,A
\ 0000B2 EA MOV A,R2
\ 0000B3 2404 ADD A,#0x4
\ 0000B5 8C82 MOV DPL,R4
\ 0000B7 8D83 MOV DPH,R5
\ 0000B9 A3 INC DPTR
\ 0000BA E0 MOVX A,@DPTR
\ 0000BB 54F0 ANL A,#0xf0
\ 0000BD F0 MOVX @DPTR,A
\ 0000BE E8 MOV A,R0
\ 0000BF F9 MOV R1,A
\ 0000C0 8C82 MOV DPL,R4
\ 0000C2 8D83 MOV DPH,R5
\ 0000C4 A3 INC DPTR
\ 0000C5 E0 MOVX A,@DPTR
\ 0000C6 49 ORL A,R1
\ 0000C7 F0 MOVX @DPTR,A
2663 }
2664 }
\ ??ZDO_ParsePowerDescRsp_0:
\ 0000C8 02.... LJMP ??Subroutine222_0 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine122:
\ 000000 F5.. MOV ?V3,A
\ 000002 8882 MOV DPL,R0
\ 000004 8983 MOV DPH,R1
\ 000006 E0 MOVX A,@DPTR
\ 000007 C4 SWAP A
\ 000008 540F ANL A,#0xf
\ 00000A F5.. MOV ?V0,A
\ 00000C 75..00 MOV ?V1,#0x0
\ 00000F 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine29:
\ 000000 8A82 MOV DPL,R2
\ 000002 REQUIRE ??Subroutine277_0
\ 000002 ; // Fall through to label ??Subroutine277_0
2665
2666 /*********************************************************************
2667 * @fn ZDO_ParseSimpleDescRsp
2668 *
2669 * @brief This function parse the Simple_Desc_rsp message.
2670 *
2671 * NOTE: The pAppInClusterList and pAppOutClusterList fields
2672 * in the SimpleDescriptionFormat_t structure are allocated
2673 * and the calling function needs to free [osal_msg_free()]
2674 * these buffers.
2675 *
2676 * @param inMsg - incoming message
2677 * @param pSimpleDescRsp - place to parse the message into
2678 *
2679 * @return none
2680 */
\ In segment BANKED_CODE, align 1, keep-with-next
2681 void ZDO_ParseSimpleDescRsp( zdoIncomingMsg_t *inMsg, ZDO_SimpleDescRsp_t *pSimpleDescRsp )
\ ZDO_ParseSimpleDescRsp:
2682 {
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 0
2683 uint8 *msg;
2684
2685 msg = inMsg->asdu;
\ 000005 12.... LCALL ?Subroutine10 & 0xFFFF
2686 pSimpleDescRsp->status = *msg++;
2687 pSimpleDescRsp->nwkAddr = BUILD_UINT16( msg[0], msg[1] );
2688 msg += sizeof ( uint16 );
2689 msg++; // Skip past the length field.
2690
2691 if ( pSimpleDescRsp->status == ZDP_SUCCESS )
\ ??CrossCallReturnLabel_3:
\ 000008 7011 JNZ ??ZDO_ParseSimpleDescRsp_0
2692 {
2693 ZDO_ParseSimpleDescBuf( msg, &(pSimpleDescRsp->simpleDesc) );
\ 00000A ; Setup parameters for call to function ZDO_ParseSimpleDescBuf
\ 00000A EC MOV A,R4
\ 00000B 2403 ADD A,#0x3
\ 00000D FC MOV R4,A
\ 00000E 5001 JNC ??ZDO_ParseSimpleDescRsp_1
\ 000010 0D INC R5
\ ??ZDO_ParseSimpleDescRsp_1:
\ 000011 E8 MOV A,R0
\ 000012 2403 ADD A,#0x3
\ 000014 FA MOV R2,A
\ 000015 E4 CLR A
\ 000016 39 ADDC A,R1
\ 000017 FB MOV R3,A
\ 000018 12.... LCALL `??ZDO_ParseSimpleDescBuf::?relay`; Banked call to: ZDO_ParseSimpleDescBuf
2694 }
2695 }
\ ??ZDO_ParseSimpleDescRsp_0:
\ 00001B 02.... LJMP ?Subroutine1 & 0xFFFF
2696
2697 /*********************************************************************
2698 * @fn ZDO_ParseEPListRsp
2699 *
2700 * @brief This parse the Active_EP_rsp or Match_Desc_rsp message.
2701 *
2702 * @param inMsg - incoming message
2703 *
2704 * @return none
2705 */
\ In segment BANKED_CODE, align 1, keep-with-next
2706 ZDO_ActiveEndpointRsp_t *ZDO_ParseEPListRsp( zdoIncomingMsg_t *inMsg )
\ ZDO_ParseEPListRsp:
2707 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 REQUIRE ?V2
\ 000000 REQUIRE ?V3
\ 000000 REQUIRE ?V4
\ 000000 REQUIRE ?V5
\ 000000 REQUIRE ?V6
\ 000000 74F1 MOV A,#-0xf
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 15
\ 000005 ; Auto size: 0
2708 ZDO_ActiveEndpointRsp_t *pRsp;
2709 uint8 *msg;
2710 uint8 Status;
2711 uint8 cnt;
2712
2713 msg = inMsg->asdu;
\ 000005 12.... LCALL ?Subroutine80 & 0xFFFF
2714 Status = *msg++;
\ ??CrossCallReturnLabel_128:
\ 000008 F5.. MOV ?V3,A
\ 00000A A3 INC DPTR
\ 00000B AE82 MOV R6,DPL
\ 00000D AF83 MOV R7,DPH
2715 cnt = msg[2];
\ 00000F A3 INC DPTR
\ 000010 A3 INC DPTR
\ 000011 E0 MOVX A,@DPTR
\ 000012 F5.. MOV ?V2,A
2716
2717 pRsp = (ZDO_ActiveEndpointRsp_t *)osal_mem_alloc( sizeof( ZDO_ActiveEndpointRsp_t ) + cnt );
\ 000014 ; Setup parameters for call to function osal_mem_alloc
\ 000014 12.... LCALL ?Subroutine153 & 0xFFFF
\ ??CrossCallReturnLabel_631:
\ 000017 8A.. MOV ?V0,R2
\ 000019 8B.. MOV ?V1,R3
2718 if ( pRsp )
\ 00001B EA MOV A,R2
\ 00001C 4B ORL A,R3
\ 00001D 6045 JZ ??ZDO_ParseEPListRsp_0
2719 {
2720 pRsp->status = Status;
\ 00001F 8A82 MOV DPL,R2
\ 000021 8B83 MOV DPH,R3
\ 000023 E5.. MOV A,?V3
\ 000025 F0 MOVX @DPTR,A
2721 pRsp->nwkAddr = BUILD_UINT16( msg[0], msg[1] );
\ 000026 8E82 MOV DPL,R6
\ 000028 8F83 MOV DPH,R7
\ 00002A 12.... LCALL ?Subroutine116 & 0xFFFF
\ ??CrossCallReturnLabel_369:
\ 00002D 85..82 MOV DPL,?V0
\ 000030 8B83 MOV DPH,R3
\ 000032 A3 INC DPTR
\ 000033 12.... LCALL ??Subroutine295_0 & 0xFFFF
2722 msg += sizeof( uint16 );
2723 pRsp->cnt = cnt;
\ ??CrossCallReturnLabel_725:
\ 000036 85..82 MOV DPL,?V0
\ 000039 8B83 MOV DPH,R3
\ 00003B A3 INC DPTR
\ 00003C A3 INC DPTR
\ 00003D A3 INC DPTR
\ 00003E E5.. MOV A,?V2
\ 000040 12.... LCALL ?Subroutine171 & 0xFFFF
2724 msg++; // pass cnt
2725 osal_memcpy( pRsp->epList, msg, cnt );
2726 }
\ ??CrossCallReturnLabel_284:
\ 000043 A982 MOV R1,DPL
\ 000045 AA83 MOV R2,DPH
\ 000047 89.. MOV ?V4,R1
\ 000049 8A.. MOV ?V5,R2
\ 00004B 88.. MOV ?V6,R0
\ 00004D 78.. MOV R0,#?V4
\ 00004F 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 000052 AC.. MOV R4,?V2
\ 000054 7D00 MOV R5,#0x0
\ 000056 E5.. MOV A,?V0
\ 000058 2404 ADD A,#0x4
\ 00005A FA MOV R2,A
\ 00005B E4 CLR A
\ 00005C 35.. ADDC A,?V1
\ 00005E 12.... LCALL ?Subroutine152 & 0xFFFF
\ ??CrossCallReturnLabel_634:
\ 000061 12.... LCALL ?DEALLOC_XSTACK8
2727
2728 return ( pRsp );
\ ??ZDO_ParseEPListRsp_0:
\ 000064 AA.. MOV R2,?V0
\ 000066 AB.. MOV R3,?V1
\ 000068 REQUIRE ?Subroutine6
\ 000068 ; // Fall through to label ?Subroutine6
2729 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine6:
\ 000000 7F07 MOV R7,#0x7
\ 000002 02.... LJMP ?BANKED_LEAVE_XDATA
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine153:
\ 000000 2404 ADD A,#0x4
\ 000002 REQUIRE ??Subroutine279_0
\ 000002 ; // Fall through to label ??Subroutine279_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine279_0:
\ 000000 FA MOV R2,A
\ 000001 E4 CLR A
\ 000002 3400 ADDC A,#0x0
\ 000004 FB MOV R3,A
\ 000005 12.... LCALL `??osal_mem_alloc::?relay`; Banked call to: osal_mem_alloc
\ 000008 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine152:
\ 000000 FB MOV R3,A
\ 000001 REQUIRE ??Subroutine280_0
\ 000001 ; // Fall through to label ??Subroutine280_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine80:
\ 000000 12.... LCALL ?Subroutine194 & 0xFFFF
\ ??CrossCallReturnLabel_313:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine194:
\ 000000 EA MOV A,R2
\ 000001 12.... LCALL ?Subroutine217 & 0xFFFF
\ ??CrossCallReturnLabel_710:
\ 000004 3B ADDC A,R3
\ 000005 F583 MOV DPH,A
\ 000007 E0 MOVX A,@DPTR
\ 000008 FE MOV R6,A
\ 000009 A3 INC DPTR
\ 00000A E0 MOVX A,@DPTR
\ 00000B 8E82 MOV DPL,R6
\ 00000D F583 MOV DPH,A
\ 00000F E0 MOVX A,@DPTR
\ 000010 22 RET
2730
2731 /*********************************************************************
2732 * @fn ZDO_ParseServerDiscRsp
2733 *
2734 * @brief Parse the Server_Discovery_rsp message.
2735 *
2736 * @param inMsg - incoming message.
2737 * @param pRsp - place to put the parsed information.
2738 *
2739 * @return none
2740 */
\ In segment BANKED_CODE, align 1, keep-with-next
2741 void ZDO_ParseServerDiscRsp( zdoIncomingMsg_t *inMsg, ZDO_ServerDiscRsp_t *pRsp )
\ ZDO_ParseServerDiscRsp:
2742 {
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 0
2743 pRsp->status = inMsg->asdu[0];
\ 000005 EA MOV A,R2
\ 000006 2413 ADD A,#0x13
\ 000008 F8 MOV R0,A
\ 000009 E4 CLR A
\ 00000A 3B ADDC A,R3
\ 00000B F9 MOV R1,A
\ 00000C 8882 MOV DPL,R0
\ 00000E F583 MOV DPH,A
\ 000010 12.... LCALL ??Subroutine281_0 & 0xFFFF
\ ??CrossCallReturnLabel_693:
\ 000013 F583 MOV DPH,A
\ 000015 8A82 MOV DPL,R2
\ 000017 12.... LCALL ??Subroutine282_0 & 0xFFFF
\ ??CrossCallReturnLabel_641:
\ 00001A 12.... LCALL ?Subroutine36 & 0xFFFF
2744 pRsp->serverMask = BUILD_UINT16( inMsg->asdu[1], inMsg->asdu[2] );
\ ??CrossCallReturnLabel_47:
\ 00001D 8882 MOV DPL,R0
\ 00001F F583 MOV DPH,A
\ 000021 A3 INC DPTR
\ 000022 E0 MOVX A,@DPTR
\ 000023 FA MOV R2,A
\ 000024 8882 MOV DPL,R0
\ 000026 8983 MOV DPH,R1
\ 000028 A3 INC DPTR
\ 000029 12.... LCALL ??Subroutine296_0 & 0xFFFF
\ ??CrossCallReturnLabel_737:
\ 00002C A3 INC DPTR
\ 00002D 12.... LCALL ??Subroutine295_0 & 0xFFFF
2745 }
\ ??CrossCallReturnLabel_726:
\ 000030 02.... LJMP ?Subroutine1 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine296_0:
\ 000000 A3 INC DPTR
\ 000001 E0 MOVX A,@DPTR
\ 000002 F9 MOV R1,A
\ 000003 EA MOV A,R2
\ 000004 8C82 MOV DPL,R4
\ 000006 8D83 MOV DPH,R5
\ 000008 22 RET
2746
2747 /*********************************************************************
2748 * @fn ZDO_ParseMgmtLqiRsp
2749 *
2750 * @brief This function parses the incoming Management
2751 * LQI response
2752 *
2753 * @param inMsg - incoming message
2754 *
2755 * @return a pointer to parsed response structure (NULL if not allocated).
2756 * This structure was allocated using osal_mem_alloc, so it must be freed
2757 * by the calling function [osal_mem_free()].
2758 */
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine3:
\ 000000 AA.. MOV R2,?V2
\ 000002 AB.. MOV R3,?V3
\ 000004 REQUIRE ??Subroutine230_0
\ 000004 ; // Fall through to label ??Subroutine230_0
\ In segment BANKED_CODE, align 1, keep-with-next
2759 ZDO_MgmtLqiRsp_t *ZDO_ParseMgmtLqiRsp( zdoIncomingMsg_t *inMsg )
\ ZDO_ParseMgmtLqiRsp:
2760 {
\ 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
2761 ZDO_MgmtLqiRsp_t *pRsp;
2762 uint8 status;
2763 uint8 startIndex = 0;
\ 000005 75..00 MOV ?V6,#0x0
2764 uint8 neighborLqiCount = 0;
\ 000008 75..00 MOV ?V5,#0x0
2765 uint8 neighborLqiEntries = 0;
\ 00000B 75..00 MOV ?V4,#0x0
2766 uint8 *msg;
2767
2768 msg = inMsg->asdu;
\ 00000E 12.... LCALL ?Subroutine77 & 0xFFFF
2769
2770 status = *msg++;
2771 if ( status == ZSuccess )
\ ??CrossCallReturnLabel_122:
\ 000011 7017 JNZ ??ZDO_ParseMgmtLqiRsp_0
2772 {
2773 neighborLqiEntries = *msg++;
\ 000013 E0 MOVX A,@DPTR
\ 000014 F5.. MOV ?V4,A
2774 startIndex = *msg++;
\ 000016 A3 INC DPTR
\ 000017 E0 MOVX A,@DPTR
\ 000018 F5.. MOV ?V6,A
2775 neighborLqiCount = *msg++;
\ 00001A 8E82 MOV DPL,R6
\ 00001C 8F83 MOV DPH,R7
\ 00001E A3 INC DPTR
\ 00001F A3 INC DPTR
\ 000020 E0 MOVX A,@DPTR
\ 000021 F5.. MOV ?V5,A
\ 000023 EE MOV A,R6
\ 000024 2403 ADD A,#0x3
\ 000026 FE MOV R6,A
\ 000027 5001 JNC ??ZDO_ParseMgmtLqiRsp_0
\ 000029 0F INC R7
2776 }
2777
2778 // Allocate a buffer big enough to handle the list.
2779 pRsp = (ZDO_MgmtLqiRsp_t *)osal_mem_alloc(
2780 sizeof( ZDO_MgmtLqiRsp_t ) + (neighborLqiCount * sizeof( neighborLqiItem_t )) );
\ ??ZDO_ParseMgmtLqiRsp_0:
\ 00002A ; Setup parameters for call to function osal_mem_alloc
\ 00002A E5.. MOV A,?V5
\ 00002C 75F00E MOV B,#0xe
\ 00002F 12.... LCALL ?Subroutine127 & 0xFFFF
2781 if ( pRsp )
\ ??CrossCallReturnLabel_210:
\ 000032 605D JZ ??ZDO_ParseMgmtLqiRsp_1
2782 {
2783 uint8 x;
2784 neighborLqiItem_t *pList = pRsp->list;
\ 000034 12.... LCALL ?Subroutine17 & 0xFFFF
2785 pRsp->status = status;
2786 pRsp->neighborLqiEntries = neighborLqiEntries;
2787 pRsp->startIndex = startIndex;
\ ??CrossCallReturnLabel_676:
\ 000037 E5.. MOV A,?V6
\ 000039 12.... LCALL ??Subroutine287_0 & 0xFFFF
2788 pRsp->neighborLqiCount = neighborLqiCount;
\ ??CrossCallReturnLabel_681:
\ 00003C E5.. MOV A,?V5
\ 00003E F0 MOVX @DPTR,A
2789
2790 for ( x = 0; x < neighborLqiCount; x++ )
\ 00003F 75..00 MOV ?V4,#0x0
\ 000042 8046 SJMP ??ZDO_ParseMgmtLqiRsp_2
2791 {
2792 osal_cpyExtAddr(pList->extPANId, msg); //Copy extended PAN ID
\ ??ZDO_ParseMgmtLqiRsp_3:
\ 000044 ; Setup parameters for call to function sAddrExtCpy
\ 000044 EE MOV A,R6
\ 000045 FC MOV R4,A
\ 000046 EF MOV A,R7
\ 000047 FD MOV R5,A
\ 000048 E5.. MOV A,?V0
\ 00004A 2404 ADD A,#0x4
\ 00004C FA MOV R2,A
\ 00004D E4 CLR A
\ 00004E 35.. ADDC A,?V1
\ 000050 FB MOV R3,A
\ 000051 12.... LCALL `??sAddrExtCpy::?relay`; Banked call to: sAddrExtCpy
2793 msg += Z_EXTADDR_LEN;
2794
2795 msg += Z_EXTADDR_LEN; // Throwing away IEEE.
\ 000054 EE MOV A,R6
\ 000055 2410 ADD A,#0x10
\ 000057 FE MOV R6,A
\ 000058 5001 JNC ??ZDO_ParseMgmtLqiRsp_4
\ 00005A 0F INC R7
2796 pList->nwkAddr = BUILD_UINT16( msg[0], msg[1] );
\ ??ZDO_ParseMgmtLqiRsp_4:
\ 00005B 12.... LCALL ?Subroutine93 & 0xFFFF
\ ??CrossCallReturnLabel_153:
\ 00005E F0 MOVX @DPTR,A
\ 00005F A3 INC DPTR
\ 000060 E9 MOV A,R1
\ 000061 12.... LCALL ?Subroutine35 & 0xFFFF
2797 msg += 2 + 1 + 1 + 1; // Skip DeviceType, RxOnIdle, Rlationship, PermitJoining and Depth
2798 pList->rxLqi = *msg++;
\ ??CrossCallReturnLabel_45:
\ 000064 C0E0 PUSH A
\ 000066 E5.. MOV A,?V0
\ 000068 240D ADD A,#0xd
\ 00006A 12.... LCALL ??Subroutine284_0 & 0xFFFF
\ ??CrossCallReturnLabel_660:
\ 00006D D0E0 POP A
\ 00006F F0 MOVX @DPTR,A
\ 000070 EE MOV A,R6
\ 000071 2406 ADD A,#0x6
\ 000073 FE MOV R6,A
\ 000074 5001 JNC ??ZDO_ParseMgmtLqiRsp_5
\ 000076 0F INC R7
2799 pList->txQuality = 0; // This is not specified OTA by ZigBee 1.1.
\ ??ZDO_ParseMgmtLqiRsp_5:
\ 000077 E5.. MOV A,?V0
\ 000079 240C ADD A,#0xc
\ 00007B 12.... LCALL ?Subroutine156 & 0xFFFF
2800 pList++;
\ ??CrossCallReturnLabel_264:
\ 00007E E5.. MOV A,?V0
\ 000080 240E ADD A,#0xe
\ 000082 F5.. MOV ?V0,A
\ 000084 5002 JNC ??ZDO_ParseMgmtLqiRsp_6
\ 000086 05.. INC ?V1
2801 }
\ ??ZDO_ParseMgmtLqiRsp_6:
\ 000088 05.. INC ?V4
\ ??ZDO_ParseMgmtLqiRsp_2:
\ 00008A E5.. MOV A,?V4
\ 00008C C3 CLR C
\ 00008D 95.. SUBB A,?V5
\ 00008F 40B3 JC ??ZDO_ParseMgmtLqiRsp_3
2802 }
2803
2804 return ( pRsp );
\ ??ZDO_ParseMgmtLqiRsp_1:
\ 000091 02.... LJMP ?Subroutine3 & 0xFFFF
2805 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine17:
\ 000000 12.... LCALL ?Subroutine209 & 0xFFFF
\ ??CrossCallReturnLabel_335:
\ 000003 8A82 MOV DPL,R2
\ 000005 8B83 MOV DPH,R3
\ 000007 E5.. MOV A,?V7
\ 000009 REQUIRE ??Subroutine286_0
\ 000009 ; // Fall through to label ??Subroutine286_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine286_0:
\ 000000 F0 MOVX @DPTR,A
\ 000001 A3 INC DPTR
\ 000002 E5.. MOV A,?V4
\ 000004 12.... LCALL ?Subroutine170 & 0xFFFF
\ ??CrossCallReturnLabel_684:
\ 000007 A3 INC DPTR
\ 000008 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine209:
\ 000000 EA MOV A,R2
\ 000001 2404 ADD A,#0x4
\ 000003 F5.. MOV ?V0,A
\ 000005 E4 CLR A
\ 000006 35.. ADDC A,?V3
\ 000008 F5.. MOV ?V1,A
\ 00000A 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine287_0:
\ 000000 12.... LCALL ?Subroutine170 & 0xFFFF
\ ??CrossCallReturnLabel_685:
\ 000003 A3 INC DPTR
\ 000004 A3 INC DPTR
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine195:
\ 000000 A4 MUL AB
\ 000001 A9F0 MOV R1,B
\ 000003 2404 ADD A,#0x4
\ 000005 REQUIRE ??Subroutine288_0
\ 000005 ; // Fall through to label ??Subroutine288_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine127:
\ 000000 12.... LCALL ?Subroutine195 & 0xFFFF
\ ??CrossCallReturnLabel_687:
\ 000003 8A.. MOV ?V2,R2
\ 000005 8B.. MOV ?V3,R3
\ 000007 EA MOV A,R2
\ 000008 4B ORL A,R3
\ 000009 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine77:
\ 000000 12.... LCALL ?Subroutine194 & 0xFFFF
\ ??CrossCallReturnLabel_314:
\ 000003 F5.. MOV ?V7,A
\ 000005 A3 INC DPTR
\ 000006 AE82 MOV R6,DPL
\ 000008 AF83 MOV R7,DPH
\ 00000A 22 RET
2806
2807 /*********************************************************************
2808 * @fn ZDO_ParseMgmNwkDiscRsp
2809 *
2810 * @brief This function parses the incoming Management
2811 * Network Discover response.
2812 *
2813 * @param inMsg - incoming message
2814 *
2815 * @return pointer to parsed response. This structure was
2816 * allocated using osal_mem_alloc, so it must be freed
2817 * by the calling function [osal_mem_free()].
2818 */
\ In segment BANKED_CODE, align 1, keep-with-next
2819 ZDO_MgmNwkDiscRsp_t *ZDO_ParseMgmNwkDiscRsp( zdoIncomingMsg_t *inMsg )
\ ZDO_ParseMgmNwkDiscRsp:
2820 {
\ 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
2821 ZDO_MgmNwkDiscRsp_t *pRsp;
2822 uint8 status;
2823 uint8 networkCount = 0;
\ 000005 75..00 MOV ?V0,#0x0
2824 uint8 startIndex = 0;
\ 000008 75..00 MOV ?V1,#0x0
2825 uint8 networkListCount = 0;
\ 00000B 75..00 MOV ?V7,#0x0
2826 uint8 *msg;
2827
2828 msg = inMsg->asdu;
\ 00000E 12.... LCALL ?Subroutine80 & 0xFFFF
2829 status = *msg++;
\ ??CrossCallReturnLabel_129:
\ 000011 F5.. MOV ?V6,A
\ 000013 A3 INC DPTR
\ 000014 AE82 MOV R6,DPL
\ 000016 AF83 MOV R7,DPH
2830
2831 if ( status == ZSuccess )
\ 000018 700F JNZ ??ZDO_ParseMgmNwkDiscRsp_0
2832 {
2833 networkCount = *msg++;
\ 00001A E0 MOVX A,@DPTR
\ 00001B F5.. MOV ?V0,A
2834 startIndex = *msg++;
\ 00001D 12.... LCALL ?Subroutine110 & 0xFFFF
2835 networkListCount = *msg++;
2836 }
\ ??CrossCallReturnLabel_179:
\ 000020 F5.. MOV ?V7,A
\ 000022 EE MOV A,R6
\ 000023 2403 ADD A,#0x3
\ 000025 FE MOV R6,A
\ 000026 5001 JNC ??ZDO_ParseMgmNwkDiscRsp_0
\ 000028 0F INC R7
2837
2838 // Allocate a buffer big enough to handle the list.
2839 pRsp = (ZDO_MgmNwkDiscRsp_t *)osal_mem_alloc( sizeof( ZDO_MgmNwkDiscRsp_t )
2840 + (networkListCount * sizeof( mgmtNwkDiscItem_t )) );
\ ??ZDO_ParseMgmNwkDiscRsp_0:
\ 000029 ; Setup parameters for call to function osal_mem_alloc
\ 000029 E5.. MOV A,?V7
\ 00002B F5.. MOV ?V2,A
\ 00002D 75..00 MOV ?V3,#0x0
\ 000030 7404 MOV A,#0x4
\ 000032 78.. MOV R0,#?V2
\ 000034 12.... LCALL ?S_SHL
\ 000037 E5.. MOV A,?V2
\ 000039 2404 ADD A,#0x4
\ 00003B FA MOV R2,A
\ 00003C E4 CLR A
\ 00003D 35.. ADDC A,?V3
\ 00003F FB MOV R3,A
\ 000040 12.... LCALL `??osal_mem_alloc::?relay`; Banked call to: osal_mem_alloc
\ 000043 8A.. MOV ?V2,R2
\ 000045 8B.. MOV ?V3,R3
2841 if ( pRsp )
\ 000047 EA MOV A,R2
\ 000048 4B ORL A,R3
\ 000049 7003 JNZ $+5
\ 00004B 02.... LJMP ??ZDO_ParseMgmNwkDiscRsp_1 & 0xFFFF
2842 {
2843 uint8 x;
2844 mgmtNwkDiscItem_t *pList;
2845
2846 pRsp->status = status;
\ 00004E 8A82 MOV DPL,R2
\ 000050 8B83 MOV DPH,R3
\ 000052 E5.. MOV A,?V6
\ 000054 F0 MOVX @DPTR,A
2847 pRsp->networkCount = networkCount;
\ 000055 A3 INC DPTR
\ 000056 E5.. MOV A,?V0
\ 000058 12.... LCALL ??Subroutine278_0 & 0xFFFF
2848 pRsp->startIndex = startIndex;
\ ??CrossCallReturnLabel_628:
\ 00005B A3 INC DPTR
\ 00005C 12.... LCALL ?Subroutine21 & 0xFFFF
2849 pRsp->networkListCount = networkListCount;
\ ??CrossCallReturnLabel_679:
\ 00005F E5.. MOV A,?V7
\ 000061 F0 MOVX @DPTR,A
2850 pList = pRsp->list;
\ 000062 12.... LCALL ?Subroutine209 & 0xFFFF
2851
2852 for ( x = 0; x < networkListCount; x++ )
\ ??CrossCallReturnLabel_334:
\ 000065 75..00 MOV ?V4,#0x0
\ 000068 807D SJMP ??ZDO_ParseMgmNwkDiscRsp_2
2853 {
2854 osal_cpyExtAddr(pList->extendedPANID, msg); //Copy extended PAN ID
\ ??ZDO_ParseMgmNwkDiscRsp_3:
\ 00006A ; Setup parameters for call to function sAddrExtCpy
\ 00006A EE MOV A,R6
\ 00006B FC MOV R4,A
\ 00006C EF MOV A,R7
\ 00006D FD MOV R5,A
\ 00006E AA.. MOV R2,?V0
\ 000070 AB.. MOV R3,?V1
\ 000072 12.... LCALL `??sAddrExtCpy::?relay`; Banked call to: sAddrExtCpy
2855 pList->PANId = BUILD_UINT16( msg[0], msg[1] );
\ 000075 12.... LCALL ?Subroutine70 & 0xFFFF
\ ??CrossCallReturnLabel_109:
\ 000078 A3 INC DPTR
\ 000079 F0 MOVX @DPTR,A
\ 00007A A3 INC DPTR
\ 00007B E9 MOV A,R1
\ 00007C 12.... LCALL ?Subroutine24 & 0xFFFF
2856 msg += Z_EXTADDR_LEN;
2857
2858 pList->logicalChannel = *msg++;
\ ??CrossCallReturnLabel_20:
\ 00007F 85..82 MOV DPL,?V0
\ 000082 85..83 MOV DPH,?V1
\ 000085 A3 INC DPTR
\ 000086 A3 INC DPTR
\ 000087 A3 INC DPTR
\ 000088 A3 INC DPTR
\ 000089 A3 INC DPTR
\ 00008A A3 INC DPTR
\ 00008B A3 INC DPTR
\ 00008C A3 INC DPTR
\ 00008D A3 INC DPTR
\ 00008E A3 INC DPTR
\ 00008F F0 MOVX @DPTR,A
2859 pList->stackProfile = (*msg) & 0x0F;
\ 000090 EE MOV A,R6
\ 000091 2409 ADD A,#0x9
\ 000093 F8 MOV R0,A
\ 000094 12.... LCALL ?Subroutine141 & 0xFFFF
\ ??CrossCallReturnLabel_227:
\ 000097 C0E0 PUSH A
\ 000099 E5.. MOV A,?V0
\ 00009B 240B ADD A,#0xb
\ 00009D 12.... LCALL ??Subroutine284_0 & 0xFFFF
\ ??CrossCallReturnLabel_661:
\ 0000A0 D0E0 POP A
\ 0000A2 12.... LCALL ?Subroutine47 & 0xFFFF
2860 pList->version = (*msg++ >> 4) & 0x0F;
\ ??CrossCallReturnLabel_67:
\ 0000A5 C0E0 PUSH A
\ 0000A7 12.... LCALL ?Subroutine157 & 0xFFFF
\ ??CrossCallReturnLabel_666:
\ 0000AA D0E0 POP A
\ 0000AC F0 MOVX @DPTR,A
2861 pList->beaconOrder = (*msg) & 0x0F;
\ 0000AD EE MOV A,R6
\ 0000AE 240A ADD A,#0xa
\ 0000B0 08 INC R0
\ 0000B1 12.... LCALL ?Subroutine141 & 0xFFFF
\ ??CrossCallReturnLabel_228:
\ 0000B4 C0E0 PUSH A
\ 0000B6 E5.. MOV A,?V0
\ 0000B8 240D ADD A,#0xd
\ 0000BA 12.... LCALL ??Subroutine284_0 & 0xFFFF
\ ??CrossCallReturnLabel_662:
\ 0000BD D0E0 POP A
\ 0000BF 12.... LCALL ?Subroutine47 & 0xFFFF
2862 pList->superFrameOrder = (*msg++ >> 4) & 0x0F;
\ ??CrossCallReturnLabel_68:
\ 0000C2 C0E0 PUSH A
\ 0000C4 12.... LCALL ?Subroutine147 & 0xFFFF
\ ??CrossCallReturnLabel_239:
\ 0000C7 D0E0 POP A
\ 0000C9 12.... LCALL ?Subroutine33 & 0xFFFF
2863 pList->permitJoining = *msg++;
\ ??CrossCallReturnLabel_41:
\ 0000CC C0E0 PUSH A
\ 0000CE 12.... LCALL ?Subroutine144 & 0xFFFF
\ ??CrossCallReturnLabel_233:
\ 0000D1 D0E0 POP A
\ 0000D3 F0 MOVX @DPTR,A
\ 0000D4 EE MOV A,R6
\ 0000D5 240C ADD A,#0xc
\ 0000D7 FE MOV R6,A
\ 0000D8 5001 JNC ??ZDO_ParseMgmNwkDiscRsp_4
\ 0000DA 0F INC R7
2864 pList++;
\ ??ZDO_ParseMgmNwkDiscRsp_4:
\ 0000DB E5.. MOV A,?V0
\ 0000DD 2410 ADD A,#0x10
\ 0000DF F5.. MOV ?V0,A
\ 0000E1 5002 JNC ??ZDO_ParseMgmNwkDiscRsp_5
\ 0000E3 05.. INC ?V1
2865 }
\ ??ZDO_ParseMgmNwkDiscRsp_5:
\ 0000E5 05.. INC ?V4
\ ??ZDO_ParseMgmNwkDiscRsp_2:
\ 0000E7 E5.. MOV A,?V4
\ 0000E9 C3 CLR C
\ 0000EA 95.. SUBB A,?V7
\ 0000EC 5003 JNC $+5
\ 0000EE 02.... LJMP ??ZDO_ParseMgmNwkDiscRsp_3 & 0xFFFF
2866 }
2867
2868 return ( pRsp );
\ ??ZDO_ParseMgmNwkDiscRsp_1:
\ 0000F1 02.... LJMP ?Subroutine3 & 0xFFFF
2869 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine141:
\ 000000 E4 CLR A
\ 000001 3F ADDC A,R7
\ 000002 F9 MOV R1,A
\ 000003 8882 MOV DPL,R0
\ 000005 F583 MOV DPH,A
\ 000007 E0 MOVX A,@DPTR
\ 000008 540F ANL A,#0xf
\ 00000A 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine47:
\ 000000 12.... LCALL ?Subroutine211 & 0xFFFF
\ ??CrossCallReturnLabel_340:
\ 000003 E0 MOVX A,@DPTR
\ 000004 C4 SWAP A
\ 000005 540F ANL A,#0xf
\ 000007 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine21:
\ 000000 E5.. MOV A,?V1
\ 000002 REQUIRE ??Subroutine287_0
\ 000002 ; // Fall through to label ??Subroutine287_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine110:
\ 000000 A3 INC DPTR
\ 000001 E0 MOVX A,@DPTR
\ 000002 F5.. MOV ?V1,A
\ 000004 8E82 MOV DPL,R6
\ 000006 8F83 MOV DPH,R7
\ 000008 A3 INC DPTR
\ 000009 A3 INC DPTR
\ 00000A E0 MOVX A,@DPTR
\ 00000B 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine70:
\ 000000 8E82 MOV DPL,R6
\ 000002 12.... LCALL ?Subroutine175 & 0xFFFF
\ ??CrossCallReturnLabel_291:
\ 000005 22 RET
2870
2871 /*********************************************************************
2872 * @fn ZDO_ParseMgmtRtgRsp
2873 *
2874 * @brief This function parses the incoming Management
2875 * Routing response.
2876 *
2877 * @param inMsg - incoming message
2878 *
2879 * @return a pointer to parsed response structure (NULL if not allocated).
2880 * This structure was allocated using osal_mem_alloc, so it must be freed
2881 * by the calling function [osal_mem_free()].
2882 */
\ In segment BANKED_CODE, align 1, keep-with-next
2883 ZDO_MgmtRtgRsp_t *ZDO_ParseMgmtRtgRsp( zdoIncomingMsg_t *inMsg )
\ ZDO_ParseMgmtRtgRsp:
2884 {
\ 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
2885 ZDO_MgmtRtgRsp_t *pRsp;
2886 uint8 status;
2887 uint8 rtgCount = 0;
\ 000005 75..00 MOV ?V4,#0x0
2888 uint8 startIndex = 0;
\ 000008 75..00 MOV ?V1,#0x0
2889 uint8 rtgListCount = 0;
\ 00000B 75..00 MOV ?V0,#0x0
2890 uint8 *msg;
2891
2892 msg = inMsg->asdu;
\ 00000E 12.... LCALL ?Subroutine80 & 0xFFFF
2893
2894 status = *msg++;
\ ??CrossCallReturnLabel_130:
\ 000011 F5.. MOV ?V5,A
\ 000013 A3 INC DPTR
\ 000014 AE82 MOV R6,DPL
\ 000016 AF83 MOV R7,DPH
2895 if ( status == ZSuccess )
\ 000018 700F JNZ ??ZDO_ParseMgmtRtgRsp_0
2896 {
2897 rtgCount = *msg++;
\ 00001A E0 MOVX A,@DPTR
\ 00001B F5.. MOV ?V4,A
2898 startIndex = *msg++;
\ 00001D 12.... LCALL ?Subroutine110 & 0xFFFF
2899 rtgListCount = *msg++;
2900 }
\ ??CrossCallReturnLabel_180:
\ 000020 F5.. MOV ?V0,A
\ 000022 EE MOV A,R6
\ 000023 2403 ADD A,#0x3
\ 000025 FE MOV R6,A
\ 000026 5001 JNC ??ZDO_ParseMgmtRtgRsp_0
\ 000028 0F INC R7
2901
2902 // Allocate a buffer big enough to handle the list
2903 pRsp = (ZDO_MgmtRtgRsp_t *)osal_mem_alloc(
2904 sizeof( ZDO_MgmtRtgRsp_t ) + (rtgListCount * sizeof( rtgItem_t )) );
\ ??ZDO_ParseMgmtRtgRsp_0:
\ 000029 ; Setup parameters for call to function osal_mem_alloc
\ 000029 E5.. MOV A,?V0
\ 00002B 75F007 MOV B,#0x7
\ 00002E 12.... LCALL ?Subroutine195 & 0xFFFF
2905 if ( pRsp )
\ ??CrossCallReturnLabel_686:
\ 000031 EA MOV A,R2
\ 000032 4B ORL A,R3
\ 000033 6058 JZ ??ZDO_ParseMgmtRtgRsp_1
2906 {
2907 uint8 x;
2908 rtgItem_t *pList = pRsp->list;
\ 000035 EA MOV A,R2
\ 000036 2404 ADD A,#0x4
\ 000038 F8 MOV R0,A
\ 000039 E4 CLR A
\ 00003A 3B ADDC A,R3
\ 00003B F9 MOV R1,A
2909 pRsp->status = status;
\ 00003C 8A82 MOV DPL,R2
\ 00003E 8B83 MOV DPH,R3
\ 000040 E5.. MOV A,?V5
\ 000042 12.... LCALL ??Subroutine286_0 & 0xFFFF
2910 pRsp->rtgCount = rtgCount;
2911 pRsp->startIndex = startIndex;
\ ??CrossCallReturnLabel_678:
\ 000045 12.... LCALL ?Subroutine21 & 0xFFFF
2912 pRsp->rtgListCount = rtgListCount;
\ ??CrossCallReturnLabel_680:
\ 000048 E5.. MOV A,?V0
\ 00004A F0 MOVX @DPTR,A
2913
2914 for ( x = 0; x < rtgListCount; x++ )
\ 00004B 7C00 MOV R4,#0x0
\ 00004D 8038 SJMP ??ZDO_ParseMgmtRtgRsp_2
2915 {
2916 pList->dstAddress = BUILD_UINT16( msg[0], msg[1] );
\ ??ZDO_ParseMgmtRtgRsp_3:
\ 00004F 8E82 MOV DPL,R6
\ 000051 12.... LCALL ?Subroutine92 & 0xFFFF
\ ??CrossCallReturnLabel_150:
\ 000054 F0 MOVX @DPTR,A
\ 000055 A3 INC DPTR
\ 000056 E5.. MOV A,?V3
\ 000058 12.... LCALL ?Subroutine27 & 0xFFFF
2917 msg += 2;
2918 pList->status = *msg++;
\ ??CrossCallReturnLabel_26:
\ 00005B 8882 MOV DPL,R0
\ 00005D 8983 MOV DPH,R1
\ 00005F A3 INC DPTR
\ 000060 A3 INC DPTR
\ 000061 A3 INC DPTR
\ 000062 A3 INC DPTR
\ 000063 A3 INC DPTR
\ 000064 F0 MOVX @DPTR,A
\ 000065 EE MOV A,R6
\ 000066 2403 ADD A,#0x3
\ 000068 FE MOV R6,A
\ 000069 5001 JNC ??ZDO_ParseMgmtRtgRsp_4
\ 00006B 0F INC R7
2919 pList->nextHopAddress = BUILD_UINT16( msg[0], msg[1] );
\ ??ZDO_ParseMgmtRtgRsp_4:
\ 00006C F582 MOV DPL,A
\ 00006E 12.... LCALL ?Subroutine92 & 0xFFFF
\ ??CrossCallReturnLabel_151:
\ 000071 A3 INC DPTR
\ 000072 A3 INC DPTR
\ 000073 F0 MOVX @DPTR,A
\ 000074 A3 INC DPTR
\ 000075 E5.. MOV A,?V3
\ 000077 F0 MOVX @DPTR,A
2920 msg += 2;
\ 000078 EE MOV A,R6
\ 000079 2402 ADD A,#0x2
\ 00007B FE MOV R6,A
\ 00007C 5001 JNC ??ZDO_ParseMgmtRtgRsp_5
\ 00007E 0F INC R7
2921 pList++;
\ ??ZDO_ParseMgmtRtgRsp_5:
\ 00007F E8 MOV A,R0
\ 000080 2407 ADD A,#0x7
\ 000082 F8 MOV R0,A
\ 000083 5001 JNC ??ZDO_ParseMgmtRtgRsp_6
\ 000085 09 INC R1
2922 }
\ ??ZDO_ParseMgmtRtgRsp_6:
\ 000086 0C INC R4
\ ??ZDO_ParseMgmtRtgRsp_2:
\ 000087 EC MOV A,R4
\ 000088 C3 CLR C
\ 000089 95.. SUBB A,?V0
\ 00008B 40C2 JC ??ZDO_ParseMgmtRtgRsp_3
2923 }
2924
2925 return ( pRsp );
\ ??ZDO_ParseMgmtRtgRsp_1:
\ 00008D 02.... LJMP ??Subroutine297_0 & 0xFFFF
2926 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine92:
\ 000000 8F83 MOV DPH,R7
\ 000002 E0 MOVX A,@DPTR
\ 000003 F5.. MOV ?V4,A
\ 000005 A3 INC DPTR
\ 000006 E0 MOVX A,@DPTR
\ 000007 F5.. MOV ?V3,A
\ 000009 E5.. MOV A,?V4
\ 00000B 8882 MOV DPL,R0
\ 00000D 8983 MOV DPH,R1
\ 00000F 22 RET
2927
2928 /*********************************************************************
2929 * @fn ZDO_ParseMgmtBindRsp
2930 *
2931 * @brief This function parses the incoming Management
2932 * Binding response.
2933 *
2934 * @param inMsg - pointer to message to parse
2935 *
2936 * @return a pointer to parsed response structure (NULL if not allocated).
2937 * This structure was allocated using osal_mem_alloc, so it must be freed
2938 * by the calling function [osal_mem_free()].
2939 */
\ In segment BANKED_CODE, align 1, keep-with-next
2940 ZDO_MgmtBindRsp_t *ZDO_ParseMgmtBindRsp( zdoIncomingMsg_t *inMsg )
\ ZDO_ParseMgmtBindRsp:
2941 {
\ 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
2942 ZDO_MgmtBindRsp_t *pRsp;
2943 uint8 status;
2944 uint8 bindingCount = 0;
\ 000005 75..00 MOV ?V4,#0x0
2945 uint8 startIndex = 0;
\ 000008 75..00 MOV ?V5,#0x0
2946 uint8 bindingListCount = 0;
\ 00000B 75..00 MOV ?V6,#0x0
2947 uint8 *msg;
2948
2949 msg = inMsg->asdu;
\ 00000E 12.... LCALL ?Subroutine77 & 0xFFFF
2950
2951 status = *msg++;
2952 if ( status == ZSuccess )
\ ??CrossCallReturnLabel_123:
\ 000011 7017 JNZ ??ZDO_ParseMgmtBindRsp_0
2953 {
2954 bindingCount = *msg++;
\ 000013 E0 MOVX A,@DPTR
\ 000014 F5.. MOV ?V4,A
2955 startIndex = *msg++;
\ 000016 A3 INC DPTR
\ 000017 E0 MOVX A,@DPTR
\ 000018 F5.. MOV ?V5,A
2956 bindingListCount = *msg++;
\ 00001A 8E82 MOV DPL,R6
\ 00001C 8F83 MOV DPH,R7
\ 00001E A3 INC DPTR
\ 00001F A3 INC DPTR
\ 000020 E0 MOVX A,@DPTR
\ 000021 F5.. MOV ?V6,A
\ 000023 EE MOV A,R6
\ 000024 2403 ADD A,#0x3
\ 000026 FE MOV R6,A
\ 000027 5001 JNC ??ZDO_ParseMgmtBindRsp_0
\ 000029 0F INC R7
2957 }
2958
2959 // Allocate a buffer big enough to handle the list
2960 pRsp = (ZDO_MgmtBindRsp_t *)osal_mem_alloc(
2961 (sizeof ( ZDO_MgmtBindRsp_t ) + (bindingListCount * sizeof( apsBindingItem_t ))) );
\ ??ZDO_ParseMgmtBindRsp_0:
\ 00002A ; Setup parameters for call to function osal_mem_alloc
\ 00002A E5.. MOV A,?V6
\ 00002C 75F015 MOV B,#0x15
\ 00002F 12.... LCALL ?Subroutine127 & 0xFFFF
2962 if ( pRsp )
\ ??CrossCallReturnLabel_211:
\ 000032 604F JZ ??ZDO_ParseMgmtBindRsp_1
2963 {
2964 uint8 x;
2965 apsBindingItem_t *pList = pRsp->list;
\ 000034 12.... LCALL ?Subroutine17 & 0xFFFF
2966 pRsp->status = status;
2967 pRsp->bindingCount = bindingCount;
2968 pRsp->startIndex = startIndex;
\ ??CrossCallReturnLabel_677:
\ 000037 E5.. MOV A,?V5
\ 000039 12.... LCALL ??Subroutine287_0 & 0xFFFF
2969 pRsp->bindingListCount = bindingListCount;
\ ??CrossCallReturnLabel_682:
\ 00003C E5.. MOV A,?V6
\ 00003E F0 MOVX @DPTR,A
2970
2971 for ( x = 0; x < bindingListCount; x++ )
\ 00003F 75..00 MOV ?V4,#0x0
\ 000042 8015 SJMP ??ZDO_ParseMgmtBindRsp_2
2972 {
2973 osal_cpyExtAddr( pList->srcAddr, msg );
2974 msg += Z_EXTADDR_LEN;
2975 pList->srcEP = *msg++;
2976
2977 // Get the Cluster ID
2978
2979 pList->clusterID = BUILD_UINT16( msg[0], msg[1] );
2980 msg += 2;
2981 pList->dstAddr.addrMode = *msg++;
2982 if ( pList->dstAddr.addrMode == Addr64Bit )
2983 {
2984 osal_cpyExtAddr( pList->dstAddr.addr.extAddr, msg );
2985 msg += Z_EXTADDR_LEN;
2986 pList->dstEP = *msg++;
2987 }
2988 else
2989 {
2990 pList->dstAddr.addr.shortAddr = BUILD_UINT16( msg[0], msg[1] );
\ ??ZDO_ParseMgmtBindRsp_3:
\ 000044 12.... LCALL ?Subroutine76 & 0xFFFF
2991 msg += 2;
2992 }
\ ??CrossCallReturnLabel_121:
\ 000047 12.... LCALL ??Subroutine271_0 & 0xFFFF
\ ??CrossCallReturnLabel_575:
\ 00004A 5001 JNC ??ZDO_ParseMgmtBindRsp_4
\ 00004C 0F INC R7
2993
2994 pList++;
\ ??ZDO_ParseMgmtBindRsp_4:
\ 00004D E5.. MOV A,?V0
\ 00004F 2415 ADD A,#0x15
\ 000051 F5.. MOV ?V0,A
\ 000053 5002 JNC ??ZDO_ParseMgmtBindRsp_5
\ 000055 05.. INC ?V1
\ ??ZDO_ParseMgmtBindRsp_5:
\ 000057 05.. INC ?V4
\ ??ZDO_ParseMgmtBindRsp_2:
\ 000059 E5.. MOV A,?V4
\ 00005B C3 CLR C
\ 00005C 95.. SUBB A,?V6
\ 00005E 5023 JNC ??ZDO_ParseMgmtBindRsp_1
\ 000060 ; Setup parameters for call to function sAddrExtCpy
\ 000060 12.... LCALL ?Subroutine44 & 0xFFFF
\ ??CrossCallReturnLabel_700:
\ 000063 5001 JNC ??ZDO_ParseMgmtBindRsp_6
\ 000065 0F INC R7
\ ??ZDO_ParseMgmtBindRsp_6:
\ 000066 12.... LCALL ?Subroutine11 & 0xFFFF
\ ??CrossCallReturnLabel_5:
\ 000069 5001 JNC ??ZDO_ParseMgmtBindRsp_7
\ 00006B 0F INC R7
\ ??ZDO_ParseMgmtBindRsp_7:
\ 00006C 7403 MOV A,#0x3
\ 00006E 68 XRL A,R0
\ 00006F 70D3 JNZ ??ZDO_ParseMgmtBindRsp_3
\ 000071 ; Setup parameters for call to function sAddrExtCpy
\ 000071 12.... LCALL ?Subroutine52 & 0xFFFF
2995 }
2996 }
\ ??CrossCallReturnLabel_582:
\ 000074 C0E0 PUSH A
\ 000076 12.... LCALL ?Subroutine155 & 0xFFFF
\ ??CrossCallReturnLabel_259:
\ 000079 D0E0 POP A
\ 00007B 12.... LCALL ??Subroutine290_0 & 0xFFFF
\ ??CrossCallReturnLabel_702:
\ 00007E 50CD JNC ??ZDO_ParseMgmtBindRsp_4
\ 000080 0F INC R7
\ ??ZDO_ParseMgmtBindRsp_8:
\ 000081 80CA SJMP ??ZDO_ParseMgmtBindRsp_4
2997
2998 return ( pRsp );
\ ??ZDO_ParseMgmtBindRsp_1:
\ 000083 02.... LJMP ?Subroutine3 & 0xFFFF
2999 }
3000
3001 /*********************************************************************
3002 * @fn ZDO_ParseUserDescRsp
3003 *
3004 * @brief This function parses the incoming User
3005 * Descriptor Response.
3006 *
3007 * @param inMsg - incoming response message
3008 *
3009 * @return a pointer to parsed response structure (NULL if not allocated).
3010 * This structure was allocated using osal_mem_alloc, so it must be freed
3011 * by the calling function [osal_mem_free()].
3012 */
\ In segment BANKED_CODE, align 1, keep-with-next
3013 ZDO_UserDescRsp_t *ZDO_ParseUserDescRsp( zdoIncomingMsg_t *inMsg )
\ ZDO_ParseUserDescRsp:
3014 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V2
\ 000000 REQUIRE ?V3
\ 000000 REQUIRE ?V4
\ 000000 REQUIRE ?V5
\ 000000 REQUIRE ?V6
\ 000000 74F1 MOV A,#-0xf
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 15
\ 000005 ; Auto size: 0
3015 ZDO_UserDescRsp_t *pRsp;
3016 uint8 *msg;
3017 uint8 descLen = 0;
\ 000005 75..00 MOV ?V0,#0x0
3018
3019 msg = inMsg->asdu;
\ 000008 12.... LCALL ?Subroutine74 & 0xFFFF
3020
3021 if ( msg[0] == ZSuccess )
\ ??CrossCallReturnLabel_703:
\ 00000B 7006 JNZ ??ZDO_ParseUserDescRsp_0
3022 {
3023 descLen = msg[3];
\ 00000D A3 INC DPTR
\ 00000E A3 INC DPTR
\ 00000F A3 INC DPTR
\ 000010 E0 MOVX A,@DPTR
\ 000011 F5.. MOV ?V0,A
3024 }
3025
3026 pRsp = (ZDO_UserDescRsp_t *)osal_mem_alloc( sizeof ( ZDO_UserDescRsp_t ) + descLen );
\ ??ZDO_ParseUserDescRsp_0:
\ 000013 ; Setup parameters for call to function osal_mem_alloc
\ 000013 E5.. MOV A,?V0
\ 000015 12.... LCALL ?Subroutine153 & 0xFFFF
\ ??CrossCallReturnLabel_632:
\ 000018 8A.. MOV ?V2,R2
\ 00001A 8B.. MOV ?V3,R3
3027 if ( pRsp )
\ 00001C EA MOV A,R2
\ 00001D 4B ORL A,R3
\ 00001E 604E JZ ??ZDO_ParseUserDescRsp_1
3028 {
3029 pRsp->status = msg[0];
\ 000020 8E82 MOV DPL,R6
\ 000022 8F83 MOV DPH,R7
\ 000024 12.... LCALL ?Subroutine121 & 0xFFFF
3030 pRsp->nwkAddr = BUILD_UINT16( msg[1], msg[2] );
\ ??CrossCallReturnLabel_199:
\ 000027 8E82 MOV DPL,R6
\ 000029 8F83 MOV DPH,R7
\ 00002B A3 INC DPTR
\ 00002C E0 MOVX A,@DPTR
\ 00002D FA MOV R2,A
\ 00002E 8E82 MOV DPL,R6
\ 000030 8F83 MOV DPH,R7
\ 000032 A3 INC DPTR
\ 000033 12.... LCALL ??Subroutine228_0 & 0xFFFF
\ ??CrossCallReturnLabel_367:
\ 000036 85..82 MOV DPL,?V2
\ 000039 8B83 MOV DPH,R3
\ 00003B A3 INC DPTR
\ 00003C 12.... LCALL ??Subroutine295_0 & 0xFFFF
3031 pRsp->length = descLen;
\ ??CrossCallReturnLabel_727:
\ 00003F 85..82 MOV DPL,?V2
\ 000042 8B83 MOV DPH,R3
\ 000044 A3 INC DPTR
\ 000045 A3 INC DPTR
\ 000046 A3 INC DPTR
\ 000047 E5.. MOV A,?V0
\ 000049 F0 MOVX @DPTR,A
3032 if ( descLen )
\ 00004A 6022 JZ ??ZDO_ParseUserDescRsp_1
3033 {
3034 osal_memcpy( pRsp->desc, &msg[4], descLen );
\ 00004C ; Setup parameters for call to function osal_memcpy
\ 00004C EE MOV A,R6
\ 00004D 2404 ADD A,#0x4
\ 00004F F5.. MOV ?V4,A
\ 000051 E4 CLR A
\ 000052 3F ADDC A,R7
\ 000053 F5.. MOV ?V5,A
\ 000055 88.. MOV ?V6,R0
\ 000057 78.. MOV R0,#?V4
\ 000059 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 00005C AC.. MOV R4,?V0
\ 00005E 7D00 MOV R5,#0x0
\ 000060 E5.. MOV A,?V2
\ 000062 2404 ADD A,#0x4
\ 000064 FA MOV R2,A
\ 000065 E4 CLR A
\ 000066 35.. ADDC A,?V3
\ 000068 12.... LCALL ?Subroutine152 & 0xFFFF
3035 }
3036 }
\ ??CrossCallReturnLabel_635:
\ 00006B 12.... LCALL ?DEALLOC_XSTACK8
3037
3038 return ( pRsp );
\ ??ZDO_ParseUserDescRsp_1:
\ 00006E AA.. MOV R2,?V2
\ 000070 AB.. MOV R3,?V3
\ 000072 02.... LJMP ?Subroutine6 & 0xFFFF
3039 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine74:
\ 000000 12.... LCALL ?Subroutine200 & 0xFFFF
\ ??CrossCallReturnLabel_708:
\ 000003 REQUIRE ??Subroutine291_0
\ 000003 ; // Fall through to label ??Subroutine291_0
3040
3041 /*********************************************************************
3042 * @fn ZDO_ParseSimpleDescBuf
3043 *
3044 * @brief Parse a byte sequence representation of a Simple Descriptor.
3045 *
3046 * @param buf - pointer to a byte array representing a Simple Desc.
3047 * @param desc - SimpleDescriptionFormat_t *
3048 *
3049 * This routine allocates storage for the cluster IDs because
3050 * they are 16-bit and need to be aligned to be properly processed.
3051 * This routine returns non-zero if an allocation fails.
3052 *
3053 * NOTE: This means that the caller or user of the input structure
3054 * is responsible for freeing the memory
3055 *
3056 * @return 0: success
3057 * 1: failure due to malloc failure.
3058 */
\ In segment BANKED_CODE, align 1, keep-with-next
3059 uint8 ZDO_ParseSimpleDescBuf( uint8 *buf, SimpleDescriptionFormat_t *desc )
\ ZDO_ParseSimpleDescBuf:
3060 {
\ 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 EB MOV A,R3
\ 000006 8C.. MOV ?V0,R4
\ 000008 8D.. MOV ?V1,R5
3061 uint8 num, i;
3062
3063 desc->EndPoint = *buf++;
\ 00000A 12.... LCALL ?Subroutine29 & 0xFFFF
\ ??CrossCallReturnLabel_630:
\ 00000D AE82 MOV R6,DPL
\ 00000F AF83 MOV R7,DPH
3064 desc->AppProfId = BUILD_UINT16( buf[0], buf[1] );
\ 000011 E0 MOVX A,@DPTR
\ 000012 12.... LCALL ?Subroutine96 & 0xFFFF
\ ??CrossCallReturnLabel_738:
\ 000015 12.... LCALL ?Subroutine20 & 0xFFFF
3065 buf += 2;
\ ??CrossCallReturnLabel_574:
\ 000018 5001 JNC ??ZDO_ParseSimpleDescBuf_0
\ 00001A 0F INC R7
3066 desc->AppDeviceId = BUILD_UINT16( buf[0], buf[1] );
\ ??ZDO_ParseSimpleDescBuf_0:
\ 00001B F582 MOV DPL,A
\ 00001D 8F83 MOV DPH,R7
\ 00001F 12.... LCALL ?Subroutine91 & 0xFFFF
\ ??CrossCallReturnLabel_149:
\ 000022 F0 MOVX @DPTR,A
\ 000023 A3 INC DPTR
\ 000024 E9 MOV A,R1
\ 000025 12.... LCALL ?Subroutine27 & 0xFFFF
3067 buf += 2;
3068 desc->AppDevVer = *buf >> 4;
\ ??CrossCallReturnLabel_27:
\ 000028 C4 SWAP A
\ 000029 540F ANL A,#0xf
3069
3070 desc->Reserved = 0;
\ 00002B 8C82 MOV DPL,R4
\ 00002D 8D83 MOV DPH,R5
\ 00002F A3 INC DPTR
\ 000030 A3 INC DPTR
\ 000031 A3 INC DPTR
\ 000032 A3 INC DPTR
\ 000033 A3 INC DPTR
\ 000034 12.... LCALL ?Subroutine45 & 0xFFFF
3071 buf++;
3072
3073 // move in input cluster list (if any). allocate aligned memory.
3074 num = desc->AppNumInClusters = *buf++;
\ ??CrossCallReturnLabel_63:
\ 000037 F5.. MOV ?V4,A
\ 000039 EE MOV A,R6
\ 00003A 2404 ADD A,#0x4
\ 00003C FE MOV R6,A
\ 00003D 5001 JNC ??ZDO_ParseSimpleDescBuf_1
\ 00003F 0F INC R7
\ ??ZDO_ParseSimpleDescBuf_1:
\ 000040 8C82 MOV DPL,R4
\ 000042 8D83 MOV DPH,R5
\ 000044 A3 INC DPTR
\ 000045 A3 INC DPTR
\ 000046 A3 INC DPTR
\ 000047 A3 INC DPTR
\ 000048 A3 INC DPTR
\ 000049 A3 INC DPTR
\ 00004A E5.. MOV A,?V4
\ 00004C F0 MOVX @DPTR,A
3075 if ( num )
\ 00004D 6026 JZ ??ZDO_ParseSimpleDescBuf_2
3076 {
3077 if (!(desc->pAppInClusterList = (uint16 *)osal_mem_alloc(num*sizeof(uint16))))
\ 00004F ; Setup parameters for call to function osal_mem_alloc
\ 00004F 12.... LCALL ??Subroutine269_0 & 0xFFFF
\ ??CrossCallReturnLabel_565:
\ 000052 2407 ADD A,#0x7
\ 000054 F5.. MOV ?V2,A
\ 000056 E4 CLR A
\ 000057 35.. ADDC A,?V1
\ 000059 85..82 MOV DPL,?V2
\ 00005C 12.... LCALL ??Subroutine267_0 & 0xFFFF
\ ??CrossCallReturnLabel_560:
\ 00005F 607B JZ ??ZDO_ParseSimpleDescBuf_3
3078 {
3079 // malloc failed. we're done.
3080 return 1;
3081 }
3082 for (i=0; i<num; ++i)
\ 000061 7800 MOV R0,#0x0
\ 000063 800A SJMP ??ZDO_ParseSimpleDescBuf_4
3083 {
3084 desc->pAppInClusterList[i] = BUILD_UINT16( buf[0], buf[1] );
\ ??ZDO_ParseSimpleDescBuf_5:
\ 000065 12.... LCALL ?Subroutine62 & 0xFFFF
3085 buf += 2;
3086 }
\ ??CrossCallReturnLabel_93:
\ 000068 12.... LCALL ?Subroutine48 & 0xFFFF
\ ??CrossCallReturnLabel_69:
\ 00006B 5001 JNC ??ZDO_ParseSimpleDescBuf_6
\ 00006D 0F INC R7
\ ??ZDO_ParseSimpleDescBuf_6:
\ 00006E 08 INC R0
\ ??ZDO_ParseSimpleDescBuf_4:
\ 00006F E8 MOV A,R0
\ 000070 C3 CLR C
\ 000071 95.. SUBB A,?V4
\ 000073 40F0 JC ??ZDO_ParseSimpleDescBuf_5
3087 }
3088
3089 // move in output cluster list (if any). allocate aligned memory.
3090 num = desc->AppNumOutClusters = *buf++;
\ ??ZDO_ParseSimpleDescBuf_2:
\ 000075 8E82 MOV DPL,R6
\ 000077 8F83 MOV DPH,R7
\ 000079 E0 MOVX A,@DPTR
\ 00007A F5.. MOV ?V2,A
\ 00007C A3 INC DPTR
\ 00007D AE82 MOV R6,DPL
\ 00007F AF83 MOV R7,DPH
\ 000081 85..82 MOV DPL,?V0
\ 000084 85..83 MOV DPH,?V1
\ 000087 A3 INC DPTR
\ 000088 A3 INC DPTR
\ 000089 A3 INC DPTR
\ 00008A A3 INC DPTR
\ 00008B A3 INC DPTR
\ 00008C A3 INC DPTR
\ 00008D A3 INC DPTR
\ 00008E A3 INC DPTR
\ 00008F A3 INC DPTR
\ 000090 F0 MOVX @DPTR,A
3091 if (num)
\ 000091 6064 JZ ??ZDO_ParseSimpleDescBuf_7
3092 {
3093 if (!(desc->pAppOutClusterList = (uint16 *)osal_mem_alloc(num*sizeof(uint16))))
\ 000093 ; Setup parameters for call to function osal_mem_alloc
\ 000093 12.... LCALL ?Subroutine132 & 0xFFFF
\ ??CrossCallReturnLabel_219:
\ 000096 8B.. MOV ?V5,R3
\ 000098 A9.. MOV R1,?V5
\ 00009A 85..82 MOV DPL,?V0
\ 00009D 85..83 MOV DPH,?V1
\ 0000A0 A3 INC DPTR
\ 0000A1 A3 INC DPTR
\ 0000A2 A3 INC DPTR
\ 0000A3 A3 INC DPTR
\ 0000A4 A3 INC DPTR
\ 0000A5 A3 INC DPTR
\ 0000A6 A3 INC DPTR
\ 0000A7 A3 INC DPTR
\ 0000A8 A3 INC DPTR
\ 0000A9 A3 INC DPTR
\ 0000AA 12.... LCALL ??Subroutine268_0 & 0xFFFF
\ ??CrossCallReturnLabel_559:
\ 0000AD 7031 JNZ ??ZDO_ParseSimpleDescBuf_8
3094 {
3095 // malloc failed. free input cluster list memory if there is any
3096 if ( desc->pAppInClusterList != NULL )
\ 0000AF 85..82 MOV DPL,?V0
\ 0000B2 85..83 MOV DPH,?V1
\ 0000B5 A3 INC DPTR
\ 0000B6 A3 INC DPTR
\ 0000B7 A3 INC DPTR
\ 0000B8 A3 INC DPTR
\ 0000B9 A3 INC DPTR
\ 0000BA A3 INC DPTR
\ 0000BB A3 INC DPTR
\ 0000BC 12.... LCALL ??Subroutine260_0 & 0xFFFF
\ ??CrossCallReturnLabel_516:
\ 0000BF 601B JZ ??ZDO_ParseSimpleDescBuf_3
3097 {
3098 osal_mem_free(desc->pAppInClusterList);
\ 0000C1 E5.. MOV A,?V0
\ 0000C3 2407 ADD A,#0x7
\ 0000C5 F5.. MOV ?V2,A
\ 0000C7 E4 CLR A
\ 0000C8 35.. ADDC A,?V1
\ 0000CA F5.. MOV ?V3,A
\ 0000CC ; Setup parameters for call to function osal_mem_free
\ 0000CC 85..82 MOV DPL,?V2
\ 0000CF 12.... LCALL ??Subroutine240_0 & 0xFFFF
3099
3100 desc->pAppInClusterList = NULL;
\ ??CrossCallReturnLabel_412:
\ 0000D2 85..82 MOV DPL,?V2
\ 0000D5 85..83 MOV DPH,?V3
\ 0000D8 E4 CLR A
\ 0000D9 F0 MOVX @DPTR,A
\ 0000DA A3 INC DPTR
\ 0000DB F0 MOVX @DPTR,A
3101 }
3102 return 1;
\ ??ZDO_ParseSimpleDescBuf_3:
\ 0000DC 7901 MOV R1,#0x1
\ 0000DE 8019 SJMP ??ZDO_ParseSimpleDescBuf_9
3103 }
3104 for (i=0; i<num; ++i)
\ ??ZDO_ParseSimpleDescBuf_8:
\ 0000E0 7800 MOV R0,#0x0
\ 0000E2 800D SJMP ??ZDO_ParseSimpleDescBuf_10
3105 {
3106 desc->pAppOutClusterList[i] = BUILD_UINT16( buf[0], buf[1] );
\ ??ZDO_ParseSimpleDescBuf_11:
\ 0000E4 12.... LCALL ?Subroutine62 & 0xFFFF
3107 buf += 2;
3108 }
\ ??CrossCallReturnLabel_94:
\ 0000E7 A3 INC DPTR
\ 0000E8 A3 INC DPTR
\ 0000E9 A3 INC DPTR
\ 0000EA 12.... LCALL ?Subroutine48 & 0xFFFF
\ ??CrossCallReturnLabel_70:
\ 0000ED 5001 JNC ??ZDO_ParseSimpleDescBuf_12
\ 0000EF 0F INC R7
\ ??ZDO_ParseSimpleDescBuf_12:
\ 0000F0 08 INC R0
\ ??ZDO_ParseSimpleDescBuf_10:
\ 0000F1 E8 MOV A,R0
\ 0000F2 C3 CLR C
\ 0000F3 95.. SUBB A,?V2
\ 0000F5 40ED JC ??ZDO_ParseSimpleDescBuf_11
3109 }
3110 return 0;
\ ??ZDO_ParseSimpleDescBuf_7:
\ 0000F7 7900 MOV R1,#0x0
\ ??ZDO_ParseSimpleDescBuf_9:
\ 0000F9 02.... LJMP ??Subroutine297_0 & 0xFFFF
3111 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine96:
\ 000000 FA MOV R2,A
\ 000001 REQUIRE ??Subroutine296_0
\ 000001 ; // Fall through to label ??Subroutine296_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine62:
\ 000000 8E82 MOV DPL,R6
\ 000002 8F83 MOV DPH,R7
\ 000004 E0 MOVX A,@DPTR
\ 000005 FC MOV R4,A
\ 000006 A3 INC DPTR
\ 000007 E0 MOVX A,@DPTR
\ 000008 FA MOV R2,A
\ 000009 E4 CLR A
\ 00000A CA XCH A,R2
\ 00000B FB MOV R3,A
\ 00000C EC MOV A,R4
\ 00000D 2A ADD A,R2
\ 00000E E4 CLR A
\ 00000F 3B ADDC A,R3
\ 000010 FD MOV R5,A
\ 000011 E8 MOV A,R0
\ 000012 25E0 ADD A,0xE0 /* A */
\ 000014 FA MOV R2,A
\ 000015 E4 CLR A
\ 000016 33 RLC A
\ 000017 FB MOV R3,A
\ 000018 85..82 MOV DPL,?V0
\ 00001B 85..83 MOV DPH,?V1
\ 00001E 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine48:
\ 000000 A3 INC DPTR
\ 000001 A3 INC DPTR
\ 000002 A3 INC DPTR
\ 000003 A3 INC DPTR
\ 000004 A3 INC DPTR
\ 000005 A3 INC DPTR
\ 000006 A3 INC DPTR
\ 000007 E0 MOVX A,@DPTR
\ 000008 2A ADD A,R2
\ 000009 F9 MOV R1,A
\ 00000A A3 INC DPTR
\ 00000B E0 MOVX A,@DPTR
\ 00000C 3B ADDC A,R3
\ 00000D 8982 MOV DPL,R1
\ 00000F F583 MOV DPH,A
\ 000011 EC MOV A,R4
\ 000012 F0 MOVX @DPTR,A
\ 000013 A3 INC DPTR
\ 000014 ED MOV A,R5
\ 000015 F0 MOVX @DPTR,A
\ 000016 EE MOV A,R6
\ 000017 2402 ADD A,#0x2
\ 000019 FE MOV R6,A
\ 00001A 22 RET
3112
3113 /*********************************************************************
3114 * @fn ZDO_ParseDeviceAnnce
3115 *
3116 * @brief Parse a Device Announce message.
3117 *
3118 * @param inMsg - Incoming message
3119 * @param pAnnce - place to put the parsed information
3120 *
3121 * @return none
3122 */
\ In segment BANKED_CODE, align 1, keep-with-next
3123 void ZDO_ParseDeviceAnnce( zdoIncomingMsg_t *inMsg, ZDO_DeviceAnnce_t *pAnnce )
\ ZDO_ParseDeviceAnnce:
3124 {
\ 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 8C.. MOV ?V0,R4
\ 000007 8D.. MOV ?V1,R5
3125 uint8 *msg;
3126
3127 // Parse incoming message
3128 msg = inMsg->asdu;
\ 000009 12.... LCALL ?Subroutine74 & 0xFFFF
3129 pAnnce->nwkAddr = BUILD_UINT16( msg[0], msg[1] );
\ ??CrossCallReturnLabel_704:
\ 00000C 12.... LCALL ?Subroutine96 & 0xFFFF
\ ??CrossCallReturnLabel_739:
\ 00000F 12.... LCALL ??Subroutine271_0 & 0xFFFF
3130 msg += 2;
\ ??CrossCallReturnLabel_576:
\ 000012 5001 JNC ??ZDO_ParseDeviceAnnce_0
\ 000014 0F INC R7
3131 osal_cpyExtAddr( pAnnce->extAddr, msg );
\ ??ZDO_ParseDeviceAnnce_0:
\ 000015 ; Setup parameters for call to function sAddrExtCpy
\ 000015 FC MOV R4,A
\ 000016 EF MOV A,R7
\ 000017 FD MOV R5,A
\ 000018 E5.. MOV A,?V0
\ 00001A 2402 ADD A,#0x2
\ 00001C 12.... LCALL ??Subroutine274_0 & 0xFFFF
3132 msg += Z_EXTADDR_LEN;
3133 pAnnce->capabilities = *msg;
\ ??CrossCallReturnLabel_584:
\ 00001F 85..82 MOV DPL,?V0
\ 000022 85..83 MOV DPH,?V1
\ 000025 A3 INC DPTR
\ 000026 A3 INC DPTR
\ 000027 A3 INC DPTR
\ 000028 A3 INC DPTR
\ 000029 A3 INC DPTR
\ 00002A A3 INC DPTR
\ 00002B A3 INC DPTR
\ 00002C A3 INC DPTR
\ 00002D A3 INC DPTR
\ 00002E A3 INC DPTR
\ 00002F F0 MOVX @DPTR,A
3134 }
\ 000030 02.... LJMP ??Subroutine225_0 & 0xFFFF
3135
3136 /*********************************************************************
3137 * @fn ZDO_ParseMgmtNwkUpdateNotify
3138 *
3139 * @brief This function handles parsing of the incoming Management
3140 * Network Update notify.
3141 *
3142 * @param inMsg - incoming message (request)
3143 *
3144 * @return a pointer to parsed response structure (NULL if not allocated).
3145 * This structure was allocated using osal_mem_alloc, so it must be freed
3146 * by the calling function [osal_mem_free()].
3147 */
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine42:
\ 000000 12.... LCALL ?Subroutine188 & 0xFFFF
\ ??CrossCallReturnLabel_305:
\ 000003 REQUIRE ??Subroutine294_0
\ 000003 ; // Fall through to label ??Subroutine294_0
\ In segment BANKED_CODE, align 1, keep-with-next
3148 ZDO_MgmtNwkUpdateNotify_t *ZDO_ParseMgmtNwkUpdateNotify( zdoIncomingMsg_t *inMsg )
\ ZDO_ParseMgmtNwkUpdateNotify:
3149 {
\ 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: 6
\ 000005 74FA MOV A,#-0x6
\ 000007 12.... LCALL ?ALLOC_XSTACK8
3150 uint8 status;
3151 uint32 scannedChannels = 0;
\ 00000A 75..00 MOV ?V0,#0x0
\ 00000D 75..00 MOV ?V1,#0x0
\ 000010 75..00 MOV ?V2,#0x0
\ 000013 75..00 MOV ?V3,#0x0
3152 uint16 totalTransmissions = 0;
\ 000016 75..00 MOV ?V4,#0x0
\ 000019 75..00 MOV ?V5,#0x0
3153 uint16 transmissionFailures = 0;
\ 00001C 7E00 MOV R6,#0x0
\ 00001E 7F00 MOV R7,#0x0
3154 uint8 listCount = 0;
\ 000020 7402 MOV A,#0x2
\ 000022 12.... LCALL ?XSTACK_DISP0_8
\ 000025 E4 CLR A
\ 000026 12.... LCALL ?Subroutine32 & 0xFFFF
3155 uint8 *msg = inMsg->asdu;
\ ??CrossCallReturnLabel_39:
\ 000029 F8 MOV R0,A
\ 00002A A3 INC DPTR
\ 00002B E0 MOVX A,@DPTR
\ 00002C F9 MOV R1,A
\ 00002D 85..82 MOV DPL,?XSP + 0
\ 000030 85..83 MOV DPH,?XSP + 1
\ 000033 12.... LCALL ?Subroutine30 & 0xFFFF
3156 ZDO_MgmtNwkUpdateNotify_t *pRsp;
3157
3158 status = *msg++;
\ ??CrossCallReturnLabel_31:
\ 000036 12.... LCALL ??Subroutine239_0 & 0xFFFF
\ ??CrossCallReturnLabel_392:
\ 000039 C0E0 PUSH A
\ 00003B 7405 MOV A,#0x5
\ 00003D 12.... LCALL ?XSTACK_DISP0_8
\ 000040 D0E0 POP A
\ 000042 12.... LCALL ?Subroutine31 & 0xFFFF
\ ??CrossCallReturnLabel_36:
\ 000045 2401 ADD A,#0x1
\ 000047 12.... LCALL ?Subroutine42 & 0xFFFF
3159 if ( status == ZSuccess )
\ ??CrossCallReturnLabel_735:
\ 00004A 7405 MOV A,#0x5
\ 00004C 12.... LCALL ?XSTACK_DISP0_8
\ 00004F E0 MOVX A,@DPTR
\ 000050 704F JNZ ??CrossCallReturnLabel_736
3160 {
3161 scannedChannels = osal_build_uint32( msg, 4 );
\ 000052 ; Setup parameters for call to function osal_build_uint32
\ 000052 7904 MOV R1,#0x4
\ 000054 12.... LCALL ??Subroutine255_0 & 0xFFFF
\ ??CrossCallReturnLabel_493:
\ 000057 12.... LCALL `??osal_build_uint32::?relay`; Banked call to: osal_build_uint32
\ 00005A 8A.. MOV ?V0,R2
\ 00005C 8B.. MOV ?V1,R3
\ 00005E 8C.. MOV ?V2,R4
\ 000060 8D.. MOV ?V3,R5
3162 msg += 4;
\ 000062 85..82 MOV DPL,?XSP + 0
\ 000065 85..83 MOV DPH,?XSP + 1
\ 000068 E0 MOVX A,@DPTR
\ 000069 2404 ADD A,#0x4
\ 00006B 12.... LCALL ?Subroutine9 & 0xFFFF
3163 totalTransmissions = BUILD_UINT16( msg[0], msg[1] );
\ ??CrossCallReturnLabel_0:
\ 00006E F5.. MOV ?V4,A
\ 000070 E4 CLR A
\ 000071 39 ADDC A,R1
\ 000072 F5.. MOV ?V5,A
3164 msg += 2;
\ 000074 85..82 MOV DPL,?XSP + 0
\ 000077 85..83 MOV DPH,?XSP + 1
\ 00007A E0 MOVX A,@DPTR
\ 00007B 2402 ADD A,#0x2
\ 00007D 12.... LCALL ?Subroutine9 & 0xFFFF
3165 transmissionFailures = BUILD_UINT16( msg[0], msg[1] );
\ ??CrossCallReturnLabel_1:
\ 000080 FE MOV R6,A
\ 000081 E4 CLR A
\ 000082 39 ADDC A,R1
\ 000083 FF MOV R7,A
3166 msg += 2;
3167 listCount = *msg++;
\ 000084 85..82 MOV DPL,?XSP + 0
\ 000087 85..83 MOV DPH,?XSP + 1
\ 00008A 12.... LCALL ?Subroutine112 & 0xFFFF
3168 }
\ ??CrossCallReturnLabel_185:
\ 00008D A3 INC DPTR
\ 00008E A3 INC DPTR
\ 00008F E0 MOVX A,@DPTR
\ 000090 C0E0 PUSH A
\ 000092 7402 MOV A,#0x2
\ 000094 12.... LCALL ?XSTACK_DISP0_8
\ 000097 D0E0 POP A
\ 000099 12.... LCALL ?Subroutine31 & 0xFFFF
\ ??CrossCallReturnLabel_37:
\ 00009C 2403 ADD A,#0x3
\ 00009E 12.... LCALL ?Subroutine42 & 0xFFFF
3169
3170 pRsp = (ZDO_MgmtNwkUpdateNotify_t *)osal_mem_alloc( sizeof ( ZDO_MgmtNwkUpdateNotify_t ) + listCount );
\ ??CrossCallReturnLabel_736:
\ 0000A1 ; Setup parameters for call to function osal_mem_alloc
\ 0000A1 7402 MOV A,#0x2
\ 0000A3 12.... LCALL ?XSTACK_DISP0_8
\ 0000A6 E0 MOVX A,@DPTR
\ 0000A7 240A ADD A,#0xa
\ 0000A9 12.... LCALL ??Subroutine279_0 & 0xFFFF
\ ??CrossCallReturnLabel_633:
\ 0000AC 7403 MOV A,#0x3
\ 0000AE 12.... LCALL ?XSTACK_DISP0_8
\ 0000B1 12.... LCALL ??Subroutine242_0 & 0xFFFF
3171
3172 if ( pRsp )
\ ??CrossCallReturnLabel_435:
\ 0000B4 7403 MOV A,#0x3
\ 0000B6 12.... LCALL ?XSTACK_DISP0_8
\ 0000B9 12.... LCALL ??Subroutine260_0 & 0xFFFF
\ ??CrossCallReturnLabel_517:
\ 0000BC 7003 JNZ $+5
\ 0000BE 02.... LJMP ??ZDO_ParseMgmtNwkUpdateNotify_0 & 0xFFFF
3173 {
3174 pRsp->status = status;
\ 0000C1 7405 MOV A,#0x5
\ 0000C3 12.... LCALL ?XSTACK_DISP0_8
\ 0000C6 E0 MOVX A,@DPTR
\ 0000C7 C0E0 PUSH A
\ 0000C9 7403 MOV A,#0x3
\ 0000CB 12.... LCALL ?XSTACK_DISP0_8
\ 0000CE 12.... LCALL ?Subroutine112 & 0xFFFF
\ ??CrossCallReturnLabel_186:
\ 0000D1 D0E0 POP A
\ 0000D3 F0 MOVX @DPTR,A
3175 pRsp->scannedChannels = scannedChannels;
\ 0000D4 7403 MOV A,#0x3
\ 0000D6 12.... LCALL ?XSTACK_DISP0_8
\ 0000D9 12.... LCALL ?Subroutine88 & 0xFFFF
\ ??CrossCallReturnLabel_143:
\ 0000DC A3 INC DPTR
\ 0000DD 78.. MOV R0,#?V0
\ 0000DF 12.... LCALL ?L_MOV_TO_X
3176 pRsp->totalTransmissions = totalTransmissions;
\ 0000E2 7403 MOV A,#0x3
\ 0000E4 12.... LCALL ?XSTACK_DISP0_8
\ 0000E7 12.... LCALL ?Subroutine81 & 0xFFFF
\ ??CrossCallReturnLabel_742:
\ 0000EA A3 INC DPTR
\ 0000EB E5.. MOV A,?V4
\ 0000ED F0 MOVX @DPTR,A
\ 0000EE A3 INC DPTR
\ 0000EF E5.. MOV A,?V5
\ 0000F1 F0 MOVX @DPTR,A
3177 pRsp->transmissionFailures = transmissionFailures;
\ 0000F2 7403 MOV A,#0x3
\ 0000F4 12.... LCALL ?XSTACK_DISP0_8
\ 0000F7 12.... LCALL ??Subroutine275_0 & 0xFFFF
\ ??CrossCallReturnLabel_594:
\ 0000FA 2407 ADD A,#0x7
\ 0000FC F582 MOV DPL,A
\ 0000FE E4 CLR A
\ 0000FF 38 ADDC A,R0
\ 000100 F583 MOV DPH,A
\ 000102 EE MOV A,R6
\ 000103 F0 MOVX @DPTR,A
\ 000104 A3 INC DPTR
\ 000105 EF MOV A,R7
\ 000106 F0 MOVX @DPTR,A
3178 pRsp->listCount = listCount;
\ 000107 7402 MOV A,#0x2
\ 000109 12.... LCALL ?XSTACK_DISP0_8
\ 00010C E0 MOVX A,@DPTR
\ 00010D C0E0 PUSH A
\ 00010F 7403 MOV A,#0x3
\ 000111 12.... LCALL ?XSTACK_DISP0_8
\ 000114 12.... LCALL ?Subroutine89 & 0xFFFF
\ ??CrossCallReturnLabel_145:
\ 000117 D0E0 POP A
\ 000119 F0 MOVX @DPTR,A
3179
3180 // Allocate a buffer big enough to handle the list.
3181 if ( listCount > 0 )
\ 00011A 7402 MOV A,#0x2
\ 00011C 12.... LCALL ?XSTACK_DISP0_8
\ 00011F E0 MOVX A,@DPTR
\ 000120 6028 JZ ??ZDO_ParseMgmtNwkUpdateNotify_0
3182 {
3183 osal_memcpy( pRsp->energyValues, msg, listCount );
\ 000122 ; Setup parameters for call to function osal_memcpy
\ 000122 85..82 MOV DPL,?XSP + 0
\ 000125 85..83 MOV DPH,?XSP + 1
\ 000128 12.... LCALL ?Subroutine66 & 0xFFFF
3184 }
3185 }
\ ??CrossCallReturnLabel_104:
\ 00012B 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 00012E 7405 MOV A,#0x5
\ 000130 12.... LCALL ?XSTACK_DISP0_8
\ 000133 E0 MOVX A,@DPTR
\ 000134 FC MOV R4,A
\ 000135 7D00 MOV R5,#0x0
\ 000137 7406 MOV A,#0x6
\ 000139 12.... LCALL ?XSTACK_DISP0_8
\ 00013C E0 MOVX A,@DPTR
\ 00013D 240A ADD A,#0xa
\ 00013F FA MOV R2,A
\ 000140 A3 INC DPTR
\ 000141 E0 MOVX A,@DPTR
\ 000142 3400 ADDC A,#0x0
\ 000144 12.... LCALL ?Subroutine152 & 0xFFFF
\ ??CrossCallReturnLabel_636:
\ 000147 12.... LCALL ?DEALLOC_XSTACK8
3186
3187 return ( pRsp );
\ ??ZDO_ParseMgmtNwkUpdateNotify_0:
\ 00014A 7403 MOV A,#0x3
\ 00014C 12.... LCALL ?XSTACK_DISP0_8
\ 00014F 12.... LCALL ??Subroutine256_0 & 0xFFFF
\ ??CrossCallReturnLabel_491:
\ 000152 7406 MOV A,#0x6
\ 000154 REQUIRE ?Subroutine5
\ 000154 ; // Fall through to label ?Subroutine5
3188 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine9:
\ 000000 12.... LCALL ?Subroutine188 & 0xFFFF
\ ??CrossCallReturnLabel_304:
\ 000003 12.... LCALL ?Subroutine164 & 0xFFFF
\ ??CrossCallReturnLabel_749:
\ 000006 12.... LCALL ?Subroutine191 & 0xFFFF
\ ??CrossCallReturnLabel_401:
\ 000009 FA MOV R2,A
\ 00000A 85..82 MOV DPL,?XSP + 0
\ 00000D 85..83 MOV DPH,?XSP + 1
\ 000010 12.... LCALL ?Subroutine192 & 0xFFFF
\ ??CrossCallReturnLabel_743:
\ 000013 A3 INC DPTR
\ 000014 E0 MOVX A,@DPTR
\ 000015 F9 MOV R1,A
\ 000016 EA MOV A,R2
\ 000017 2E ADD A,R6
\ 000018 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine188:
\ 000000 F8 MOV R0,A
\ 000001 A3 INC DPTR
\ 000002 E0 MOVX A,@DPTR
\ 000003 3400 ADDC A,#0x0
\ 000005 F9 MOV R1,A
\ 000006 85..82 MOV DPL,?XSP + 0
\ 000009 85..83 MOV DPH,?XSP + 1
\ 00000C 22 RET
3189
3190 /*********************************************************************
3191 * @fn ZDO_ParseMgmtNwkUpdateReq
3192 *
3193 * @brief This function handles parsing the incoming Management
3194 * Network Update request and starts the request (if needed).
3195 *
3196 * @param inMsg - incoming message (request)
3197 * @param pReq - pointer to place to parse message to
3198 *
3199 * @return none
3200 */
\ In segment BANKED_CODE, align 1, keep-with-next
3201 void ZDO_ParseMgmtNwkUpdateReq( zdoIncomingMsg_t *inMsg, ZDO_MgmtNwkUpdateReq_t *pReq )
\ ZDO_ParseMgmtNwkUpdateReq:
3202 {
\ 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 12.... LCALL ?Subroutine133 & 0xFFFF
3203 uint8 *msg = inMsg->asdu;
\ ??CrossCallReturnLabel_578:
\ 000008 12.... LCALL ?Subroutine65 & 0xFFFF
3204
3205 pReq->channelMask = osal_build_uint32( msg, 4 );
\ ??CrossCallReturnLabel_101:
\ 00000B 85..82 MOV DPL,?V0
\ 00000E 85..83 MOV DPH,?V1
\ 000011 12.... LCALL ?XSTORE_R0123
3206 msg += 4;
3207 pReq->scanDuration = *msg++;
\ 000014 8E82 MOV DPL,R6
\ 000016 8F83 MOV DPH,R7
\ 000018 A3 INC DPTR
\ 000019 A3 INC DPTR
\ 00001A A3 INC DPTR
\ 00001B A3 INC DPTR
\ 00001C E0 MOVX A,@DPTR
\ 00001D F8 MOV R0,A
\ 00001E 85..82 MOV DPL,?V0
\ 000021 85..83 MOV DPH,?V1
\ 000024 A3 INC DPTR
\ 000025 A3 INC DPTR
\ 000026 A3 INC DPTR
\ 000027 A3 INC DPTR
\ 000028 F0 MOVX @DPTR,A
3208
3209 if ( pReq->scanDuration <= 0x05 )
\ 000029 C3 CLR C
\ 00002A 9406 SUBB A,#0x6
\ 00002C 5005 JNC ??ZDO_ParseMgmtNwkUpdateReq_0
3210 {
3211 // Request is to scan over channelMask
3212 pReq->scanCount = *msg;
\ 00002E 12.... LCALL ?Subroutine95 & 0xFFFF
3213 }
\ ??CrossCallReturnLabel_158:
\ 000031 803D SJMP ??ZDO_ParseMgmtNwkUpdateReq_1
3214 else if ( ( pReq->scanDuration == 0xFE ) || ( pReq->scanDuration == 0xFF ) )
\ ??ZDO_ParseMgmtNwkUpdateReq_0:
\ 000033 85..82 MOV DPL,?V0
\ 000036 85..83 MOV DPH,?V1
\ 000039 A3 INC DPTR
\ 00003A A3 INC DPTR
\ 00003B A3 INC DPTR
\ 00003C A3 INC DPTR
\ 00003D E0 MOVX A,@DPTR
\ 00003E 64FE XRL A,#0xfe
\ 000040 600E JZ ??ZDO_ParseMgmtNwkUpdateReq_2
\ 000042 85..82 MOV DPL,?V0
\ 000045 85..83 MOV DPH,?V1
\ 000048 A3 INC DPTR
\ 000049 A3 INC DPTR
\ 00004A A3 INC DPTR
\ 00004B A3 INC DPTR
\ 00004C E0 MOVX A,@DPTR
\ 00004D F4 CPL A
\ 00004E 7021 JNZ ??ZDO_ParseMgmtNwkUpdateReq_3
3215 {
3216 // Request is to change Channel (0xFE) or apsChannelMask and NwkManagerAddr (0xFF)
3217 pReq->nwkUpdateId = *msg++;
\ ??ZDO_ParseMgmtNwkUpdateReq_2:
\ 000050 12.... LCALL ?Subroutine95 & 0xFFFF
\ ??CrossCallReturnLabel_159:
\ 000053 A3 INC DPTR
\ 000054 F0 MOVX @DPTR,A
\ 000055 EE MOV A,R6
\ 000056 2406 ADD A,#0x6
\ 000058 FE MOV R6,A
\ 000059 5001 JNC ??ZDO_ParseMgmtNwkUpdateReq_4
\ 00005B 0F INC R7
3218
3219 if ( pReq->scanDuration == 0xFF )
\ ??ZDO_ParseMgmtNwkUpdateReq_4:
\ 00005C 85..82 MOV DPL,?V0
\ 00005F 85..83 MOV DPH,?V1
\ 000062 A3 INC DPTR
\ 000063 A3 INC DPTR
\ 000064 A3 INC DPTR
\ 000065 A3 INC DPTR
\ 000066 E0 MOVX A,@DPTR
\ 000067 F4 CPL A
\ 000068 7007 JNZ ??ZDO_ParseMgmtNwkUpdateReq_3
3220 {
3221 pReq->nwkManagerAddr = BUILD_UINT16( msg[0], msg[1] );
\ 00006A 12.... LCALL ?Subroutine70 & 0xFFFF
3222 }
3223 }
\ ??CrossCallReturnLabel_110:
\ 00006D F0 MOVX @DPTR,A
\ 00006E A3 INC DPTR
\ 00006F E9 MOV A,R1
\ ??ZDO_ParseMgmtNwkUpdateReq_1:
\ 000070 F0 MOVX @DPTR,A
3224 }
\ ??ZDO_ParseMgmtNwkUpdateReq_3:
\ 000071 02.... LJMP ??Subroutine225_0 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine95:
\ 000000 8E82 MOV DPL,R6
\ 000002 8F83 MOV DPH,R7
\ 000004 A3 INC DPTR
\ 000005 A3 INC DPTR
\ 000006 A3 INC DPTR
\ 000007 A3 INC DPTR
\ 000008 A3 INC DPTR
\ 000009 E0 MOVX A,@DPTR
\ 00000A 85..82 MOV DPL,?V0
\ 00000D 85..83 MOV DPH,?V1
\ 000010 A3 INC DPTR
\ 000011 A3 INC DPTR
\ 000012 A3 INC DPTR
\ 000013 A3 INC DPTR
\ 000014 A3 INC DPTR
\ 000015 22 RET
\ In segment XDATA_ROM_C, align 1
\ `?<Constant "StartDevice ERR">`:
\ 000000 53746172 DB "StartDevice ERR"
\ 74446576
\ 69636520
\ 45525200
\ In segment XDATA_ROM_C, align 1
\ `?<Constant "MODE unknown">`:
\ 000000 4D4F4445 DB "MODE unknown"
\ 20756E6B
\ 6E6F776E
\ 00
\ In segment XDATA_ROM_C, align 1
\ `?<Constant "End Device Bind">`:
\ 000000 456E6420 DB "End Device Bind"
\ 44657669
\ 63652042
\ 696E6400
\ In segment XDATA_ROM_C, align 1
\ `?<Constant "Success Sent">`:
\ 000000 53756363 DB "Success Sent"
\ 65737320
\ 53656E74
\ 00
\ In segment XDATA_ROM_C, align 1
\ `?<Constant "Timeout">`:
\ 000000 54696D65 DB "Timeout"
\ 6F757400
\ In segment XDATA_ROM_C, align 1
\ `?<Constant "Match Desc Req">`:
\ 000000 4D617463 DB "Match Desc Req"
\ 68204465
\ 73632052
\ 657100
\ In segment XDATA_ROM_C, align 1
\ `?<Constant "Rsp Sent">`:
\ 000000 52737020 DB "Rsp Sent"
\ 53656E74
\ 00
\ In segment XDATA_ROM_C, align 1
\ `?<Constant "Rsp Non Matched">`:
\ 000000 52737020 DB "Rsp Non Matched"
\ 4E6F6E20
\ 4D617463
\ 68656400
\ In segment XDATA_ROM_C, align 1
\ `?<Constant "Non Matched">`:
\ 000000 4E6F6E20 DB "Non Matched"
\ 4D617463
\ 68656400
3225
3226 /*********************************************************************
3227 *********************************************************************/
Maximum stack usage in bytes:
ISTACK XSTACK Function
------ ------ --------
0 0 NLME_PermitJoiningTimeout
1 69 ZDMatchSendState
0 37 -> APS_SetEndDeviceBindTimeout
0 37 -> ZDO_RemoveMatchMemory
0 45 -> ZDP_BindUnbindReq
0 42 -> ZDP_SendData
0 37 -> sAddrExtCpy
0 43 ZDO_AnyClusterMatches
1 10 ZDO_BuildSimpleDescBuf
0 44 ZDO_CompareClusterLists
0 39 ZDO_ConvertOTAClusters
0 41 ZDO_CopyMatchInfo
0 14 -> osal_mem_alloc
0 14 -> osal_mem_free
0 17 -> osal_memcpy
2 0 ZDO_EndDeviceBindMatchTimeoutCB
2 0 -> ZDMatchSendState
1 17 ZDO_EndDeviceTimeoutCB
0 12 -> HalLcdWriteString
0 17 -> ZDP_SendData
0 12 -> osal_mem_free
2 0 ZDO_Init
2 0 -> APS_ReflectorInit
2 0 -> NLME_DeviceJoiningInit
2 0 -> sAddrExtCpy
1 29 ZDO_MatchEndDeviceBind
0 24 -> APS_SetEndDeviceBindTimeout
0 24 -> ZDMatchSendState
0 28 -> ZDO_CompareClusterLists
0 24 -> ZDO_CopyMatchInfo
0 24 -> ZDO_RemoveMatchMemory
0 29 -> ZDP_SendData
0 24 -> osal_mem_alloc
0 27 -> osal_memcpy
0 24 -> osal_memset
1 14 ZDO_ParseAddrRsp
0 14 -> osal_mem_alloc
0 14 -> sAddrExtCpy
1 10 ZDO_ParseBindUnbindReq
0 10 -> sAddrExtCpy
1 52 ZDO_ParseDeviceAnnce
0 10 -> sAddrExtCpy
1 18 ZDO_ParseEPListRsp
0 15 -> osal_mem_alloc
0 18 -> osal_memcpy
1 12 ZDO_ParseEndDeviceBindReq
0 12 -> ZDO_ConvertOTAClusters
0 12 -> osal_mem_alloc
0 12 -> sAddrExtCpy
1 16 ZDO_ParseMgmNwkDiscRsp
0 16 -> osal_mem_alloc
0 16 -> sAddrExtCpy
1 16 ZDO_ParseMgmtBindRsp
0 16 -> osal_mem_alloc
0 16 -> sAddrExtCpy
1 16 ZDO_ParseMgmtLqiRsp
0 16 -> osal_mem_alloc
0 16 -> sAddrExtCpy
1 23 ZDO_ParseMgmtNwkUpdateNotify
0 20 -> osal_build_uint32
0 20 -> osal_mem_alloc
0 23 -> osal_memcpy
1 10 ZDO_ParseMgmtNwkUpdateReq
0 10 -> osal_build_uint32
1 14 ZDO_ParseMgmtRtgRsp
0 14 -> osal_mem_alloc
1 10 ZDO_ParseNodeDescRsp
1 12 ZDO_ParsePowerDescRsp
1 9 ZDO_ParseServerDiscRsp
1 23 ZDO_ParseSimpleDescBuf
0 14 -> osal_mem_alloc
0 14 -> osal_mem_free
1 9 ZDO_ParseSimpleDescRsp
0 9 -> ZDO_ParseSimpleDescBuf
1 18 ZDO_ParseUserDescRsp
0 15 -> osal_mem_alloc
0 18 -> osal_memcpy
0 21 ZDO_ProcessActiveEPReq
0 14 -> NLME_GetShortAddr
0 21 -> ZDP_EPRsp
0 14 -> afEndPoints
0 14 -> afNumEndPoints
0 29 ZDO_ProcessBindUnbindReq
0 25 -> APSME_BindRequest
0 24 -> APSME_LookupNwkAddr
0 25 -> APSME_UnBindRequest
0 24 -> NLME_GetExtAddr
0 24 -> ZDApp_NVUpdate
0 24 -> ZDP_NwkAddrReq
0 29 -> ZDP_SendData
0 24 -> sAddrExtCmp
0 24 -> sAddrExtCpy
0 42 ZDO_ProcessDeviceAnnce
0 42 -> AddrMgrEntryLookupExt
0 42 -> AddrMgrEntryLookupNwk
0 42 -> AddrMgrEntryUpdate
0 42 -> AddrMgrExtAddrSet
0 42 -> AssocChangeNwkAddr
0 42 -> AssocGetWithExt
0 42 -> AssocRemove
0 42 -> NLME_CheckNewAddrSet
0 42 -> NLME_GetCoordExtAddr
0 42 -> NLME_GetCoordShortAddr
0 42 -> NLME_GetShortAddr
0 42 -> RTG_RemoveRtgEntry
0 42 -> ZDApp_NVUpdate
0 42 -> ZDO_ParseDeviceAnnce
0 42 -> ZMacSetReq
0 42 -> nwkNeighborRemoveAllStranded
0 42 -> nwkNeighborUpdateNwkAddr
0 42 -> osal_memset
0 42 -> sAddrExtCmp
1 36 ZDO_ProcessMatchDescReq
0 29 -> HalLcdWriteScreen
0 29 -> NLME_IsAddressBroadcast
0 31 -> ZDO_AnyClusterMatches
0 29 -> ZDO_ConvertOTAClusters
0 36 -> ZDP_EPRsp
0 29 -> osal_mem_alloc
0 29 -> osal_mem_free
0 32 -> osal_memcpy
0 29 -> osal_msg_allocate
0 29 -> osal_msg_send
0 25 ZDO_ProcessMgmtBindReq
0 20 -> APSME_GetRequest
0 25 -> ZDP_MgmtBindRsp
0 20 -> osal_mem_alloc
0 20 -> osal_mem_free
1 16 ZDO_ProcessMgmtDirectJoinReq
0 11 -> NLME_DirectJoinRequest
0 16 -> ZDP_SendData
1 23 ZDO_ProcessMgmtLeaveReq
0 18 -> AddrMgrExtAddrValid
0 18 -> NLME_GetExtAddr
0 18 -> NLME_LeaveReq
0 23 -> ZDP_SendData
0 18 -> sAddrExtCmp
1 63 ZDO_ProcessMgmtLqiReq
0 58 -> AddrMgrEntryLookupNwk
0 58 -> AssocCount
0 58 -> AssocFindDevice
0 58 -> NLME_GetRequest
0 63 -> ZDP_MgmtLqiRsp
0 58 -> osal_mem_alloc
0 58 -> osal_mem_free
0 58 -> osal_memset
0 58 -> sAddrExtCpy
1 17 ZDO_ProcessMgmtNwkDiscReq
0 17 -> NLME_NwkDiscReq2
0 17 -> NLME_NwkDiscTerm
0 17 -> osal_build_uint32
1 16 ZDO_ProcessMgmtPermitJoinReq
0 11 -> NLME_PermitJoiningRequest
0 16 -> ZDP_SendData
0 22 ZDO_ProcessMgmtRtgReq
0 17 -> NLME_GetRequest
0 22 -> ZDP_MgmtRtgRsp
0 17 -> osal_mem_alloc
0 17 -> osal_mem_free
0 14 ZDO_ProcessNodeDescReq
0 14 -> ZDP_GenericRsp
0 12 -> ZDP_NodeDescMsg
0 14 ZDO_ProcessPowerDescReq
0 14 -> ZDP_GenericRsp
0 12 -> ZDP_PowerDescMsg
0 14 ZDO_ProcessServerDiscReq
0 14 -> ZDP_ServerDiscRsp
0 12 ZDO_ProcessSimpleDescReq
0 12 -> ZDP_SimpleDescMsg
0 12 -> afFindSimpleDesc
0 12 -> osal_mem_free
0 33 ZDO_ProcessUserDescReq
0 33 -> ZDP_GenericRsp
0 32 -> ZDP_UserDescRsp
0 33 -> osal_nv_read
1 40 ZDO_ProcessUserDescSet
0 40 -> ZDP_SendData
0 38 -> osal_memcpy
0 39 -> osal_nv_write
2 37 ZDO_RemoveMatchMemory
2 0 -> osal_mem_free
0 20 ZDO_StartDevice
0 20 -> HalLcdWriteScreen
0 20 -> NLME_NetworkDiscoveryRequest
0 20 -> NLME_OrphanJoinRequest
0 20 -> nwk_ScanJoiningOrphan
0 20 -> osal_start_timerEx
2 13 ZDO_UpdateAddrManager
2 13 -> AddrMgrEntryUpdate
2 13 -> AddrMgrExtAddrSet
1 12 ZDO_UpdateNwkStatus
0 12 -> NLME_GetExtAddr
0 12 -> NLME_GetShortAddr
0 12 -> osal_msg_allocate
0 12 -> osal_msg_find
0 12 -> osal_msg_send
0 12 -> osal_set_event
Segment part sizes:
Bytes Function/Label
----- --------------
16 ?<Constant "End Device Bind">
13 ?<Constant "MODE unknown">
15 ?<Constant "Match Desc Req">
12 ?<Constant "Non Matched">
16 ?<Constant "Rsp Non Matched">
9 ?<Constant "Rsp Sent">
16 ?<Constant "StartDevice ERR">
13 ?<Constant "Success Sent">
8 ?<Constant "Timeout">
5 ??Subroutine222_0
8 ??Subroutine223_0
3 ??Subroutine224_0
5 ??Subroutine225_0
5 ??Subroutine226_0
7 ??Subroutine227_0
8 ??Subroutine228_0
8 ??Subroutine229_0
5 ??Subroutine230_0
8 ??Subroutine231_0
7 ??Subroutine232_0
2 ??Subroutine233_0
9 ??Subroutine234_0
4 ??Subroutine235_0
1 ??Subroutine236_0
1 ??Subroutine237_0
1 ??Subroutine238_0
4 ??Subroutine239_0
2 ??Subroutine240_0
7 ??Subroutine241_0
1 ??Subroutine242_0
5 ??Subroutine243_0
5 ??Subroutine244_0
6 ??Subroutine245_0
4 ??Subroutine246_0
4 ??Subroutine247_0
2 ??Subroutine248_0
6 ??Subroutine249_0
1 ??Subroutine250_0
1 ??Subroutine251_0
1 ??Subroutine252_0
4 ??Subroutine253_0
6 ??Subroutine254_0
6 ??Subroutine255_0
4 ??Subroutine256_0
6 ??Subroutine257_0
4 ??Subroutine258_0
2 ??Subroutine259_0
6 ??Subroutine260_0
5 ??Subroutine261_0
8 ??Subroutine262_0
7 ??Subroutine263_0
8 ??Subroutine264_0
2 ??Subroutine265_0
9 ??Subroutine266_0
2 ??Subroutine267_0
8 ??Subroutine268_0
10 ??Subroutine269_0
6 ??Subroutine270_0
9 ??Subroutine271_0
1 ??Subroutine272_0
4 ??Subroutine273_0
9 ??Subroutine274_0
4 ??Subroutine275_0
6 ??Subroutine276_0
3 ??Subroutine277_0
4 ??Subroutine278_0
9 ??Subroutine279_0
6 ??Subroutine280_0
5 ??Subroutine281_0
6 ??Subroutine282_0
5 ??Subroutine283_0
4 ??Subroutine284_0
5 ??Subroutine285_0
9 ??Subroutine286_0
6 ??Subroutine287_0
8 ??Subroutine288_0
5 ??Subroutine289_0
6 ??Subroutine290_0
9 ??Subroutine291_0
5 ??Subroutine292_0
6 ??Subroutine293_0
1 ??Subroutine294_0
5 ??Subroutine295_0
9 ??Subroutine296_0
5 ??Subroutine297_0
8 ??Subroutine298_0
9 ??Subroutine299_0
7 ?Subroutine0
5 ?Subroutine1
40 ?Subroutine10
6 ?Subroutine100
6 ?Subroutine101
3 ?Subroutine102
6 ?Subroutine103
6 ?Subroutine104
6 ?Subroutine105
3 ?Subroutine106
2 ?Subroutine107
10 ?Subroutine108
3 ?Subroutine109
29 ?Subroutine11
12 ?Subroutine110
10 ?Subroutine111
4 ?Subroutine112
8 ?Subroutine113
7 ?Subroutine114
11 ?Subroutine115
2 ?Subroutine116
14 ?Subroutine117
4 ?Subroutine118
13 ?Subroutine119
20 ?Subroutine12
10 ?Subroutine120
5 ?Subroutine121
16 ?Subroutine122
13 ?Subroutine123
11 ?Subroutine124
12 ?Subroutine125
12 ?Subroutine126
10 ?Subroutine127
1 ?Subroutine128
8 ?Subroutine129
23 ?Subroutine13
4 ?Subroutine130
9 ?Subroutine131
4 ?Subroutine132
4 ?Subroutine133
7 ?Subroutine134
1 ?Subroutine135
1 ?Subroutine136
4 ?Subroutine137
4 ?Subroutine138
19 ?Subroutine139
17 ?Subroutine14
1 ?Subroutine140
11 ?Subroutine141
3 ?Subroutine142
23 ?Subroutine143
9 ?Subroutine144
14 ?Subroutine145
4 ?Subroutine146
8 ?Subroutine147
2 ?Subroutine148
10 ?Subroutine149
9 ?Subroutine15
4 ?Subroutine150
16 ?Subroutine151
1 ?Subroutine152
2 ?Subroutine153
17 ?Subroutine154
8 ?Subroutine155
6 ?Subroutine156
4 ?Subroutine157
9 ?Subroutine158
1 ?Subroutine159
27 ?Subroutine16
1 ?Subroutine160
4 ?Subroutine161
4 ?Subroutine162
10 ?Subroutine163
4 ?Subroutine164
1 ?Subroutine165
8 ?Subroutine166
10 ?Subroutine167
13 ?Subroutine168
6 ?Subroutine169
9 ?Subroutine17
7 ?Subroutine170
4 ?Subroutine171
6 ?Subroutine172
4 ?Subroutine173
17 ?Subroutine174
18 ?Subroutine175
15 ?Subroutine176
2 ?Subroutine177
10 ?Subroutine178
5 ?Subroutine179
5 ?Subroutine18
13 ?Subroutine180
12 ?Subroutine181
9 ?Subroutine182
7 ?Subroutine183
3 ?Subroutine184
2 ?Subroutine185
2 ?Subroutine186
1 ?Subroutine187
13 ?Subroutine188
6 ?Subroutine189
6 ?Subroutine19
5 ?Subroutine190
9 ?Subroutine191
7 ?Subroutine192
2 ?Subroutine193
17 ?Subroutine194
5 ?Subroutine195
10 ?Subroutine196
19 ?Subroutine197
12 ?Subroutine198
7 ?Subroutine199
3 ?Subroutine2
1 ?Subroutine20
1 ?Subroutine200
6 ?Subroutine201
9 ?Subroutine202
7 ?Subroutine203
1 ?Subroutine204
3 ?Subroutine205
10 ?Subroutine206
1 ?Subroutine207
9 ?Subroutine208
11 ?Subroutine209
2 ?Subroutine21
9 ?Subroutine210
6 ?Subroutine211
6 ?Subroutine212
5 ?Subroutine213
2 ?Subroutine214
8 ?Subroutine215
8 ?Subroutine216
6 ?Subroutine217
9 ?Subroutine218
7 ?Subroutine219
16 ?Subroutine22
5 ?Subroutine220
7 ?Subroutine221
6 ?Subroutine23
8 ?Subroutine24
18 ?Subroutine25
8 ?Subroutine26
4 ?Subroutine27
6 ?Subroutine28
2 ?Subroutine29
4 ?Subroutine3
4 ?Subroutine30
4 ?Subroutine31
8 ?Subroutine32
12 ?Subroutine33
4 ?Subroutine34
5 ?Subroutine35
7 ?Subroutine36
6 ?Subroutine37
4 ?Subroutine38
13 ?Subroutine39
2 ?Subroutine4
8 ?Subroutine40
8 ?Subroutine41
3 ?Subroutine42
10 ?Subroutine43
25 ?Subroutine44
5 ?Subroutine45
7 ?Subroutine46
8 ?Subroutine47
27 ?Subroutine48
9 ?Subroutine49
3 ?Subroutine5
8 ?Subroutine50
4 ?Subroutine51
8 ?Subroutine52
4 ?Subroutine53
4 ?Subroutine54
13 ?Subroutine55
4 ?Subroutine56
13 ?Subroutine57
6 ?Subroutine58
9 ?Subroutine59
5 ?Subroutine6
21 ?Subroutine60
14 ?Subroutine61
31 ?Subroutine62
29 ?Subroutine63
4 ?Subroutine64
21 ?Subroutine65
9 ?Subroutine66
17 ?Subroutine67
3 ?Subroutine68
38 ?Subroutine69
6 ?Subroutine7
6 ?Subroutine70
12 ?Subroutine71
4 ?Subroutine72
8 ?Subroutine73
3 ?Subroutine74
7 ?Subroutine75
14 ?Subroutine76
11 ?Subroutine77
10 ?Subroutine78
10 ?Subroutine79
5 ?Subroutine8
4 ?Subroutine80
2 ?Subroutine81
4 ?Subroutine82
6 ?Subroutine83
5 ?Subroutine84
12 ?Subroutine85
4 ?Subroutine86
10 ?Subroutine87
6 ?Subroutine88
12 ?Subroutine89
25 ?Subroutine9
13 ?Subroutine90
11 ?Subroutine91
16 ?Subroutine92
14 ?Subroutine93
5 ?Subroutine94
22 ?Subroutine95
1 ?Subroutine96
2 ?Subroutine97
13 ?Subroutine98
4 ?Subroutine99
3 NLME_PermitJoiningTimeout
644 ZDMatchSendState
52 ZDOBuildBuf
90 ZDO_AnyClusterMatches
194 ZDO_BuildSimpleDescBuf
126 ZDO_CompareClusterLists
66 ZDO_ConvertOTAClusters
197 ZDO_CopyMatchInfo
2 ZDO_EDBind
16 ZDO_EndDeviceBindMatchTimeoutCB
215 ZDO_EndDeviceTimeoutCB
43 ZDO_Init
544 ZDO_MatchEndDeviceBind
213 ZDO_ParseAddrRsp
50 ZDO_ParseBindUnbindReq
51 ZDO_ParseDeviceAnnce
104 ZDO_ParseEPListRsp
224 ZDO_ParseEndDeviceBindReq
244 ZDO_ParseMgmNwkDiscRsp
134 ZDO_ParseMgmtBindRsp
148 ZDO_ParseMgmtLqiRsp
340 ZDO_ParseMgmtNwkUpdateNotify
116 ZDO_ParseMgmtNwkUpdateReq
144 ZDO_ParseMgmtRtgRsp
285 ZDO_ParseNodeDescRsp
203 ZDO_ParsePowerDescRsp
51 ZDO_ParseServerDiscRsp
252 ZDO_ParseSimpleDescBuf
30 ZDO_ParseSimpleDescRsp
117 ZDO_ParseUserDescRsp
123 ZDO_ProcessActiveEPReq
299 ZDO_ProcessBindUnbindReq
430 ZDO_ProcessDeviceAnnce
1166 ZDO_ProcessMatchDescReq
265 ZDO_ProcessMgmtBindReq
80 ZDO_ProcessMgmtDirectJoinReq
157 ZDO_ProcessMgmtLeaveReq
647 ZDO_ProcessMgmtLqiReq
117 ZDO_ProcessMgmtNwkDiscReq
74 ZDO_ProcessMgmtPermitJoinReq
288 ZDO_ProcessMgmtRtgReq
66 ZDO_ProcessNodeDescReq
66 ZDO_ProcessPowerDescReq
63 ZDO_ProcessServerDiscReq
146 ZDO_ProcessSimpleDescReq
157 ZDO_ProcessUserDescReq
290 ZDO_ProcessUserDescSet
115 ZDO_RemoveMatchMemory
209 ZDO_StartDevice
51 ZDO_UpdateAddrManager
123 ZDO_UpdateNwkStatus
4 apsChannelMask
1 discRetries
2 matchED
1 scanCnt
294 -- Other
12 085 bytes in segment BANKED_CODE
294 bytes in segment BANK_RELAYS
118 bytes in segment XDATA_ROM_C
62 bytes in segment XDATA_Z
294 bytes of CODE memory
118 bytes of CONST memory
12 085 bytes of HUGECODE memory
62 bytes of XDATA memory
Errors: none
Warnings: none