############################################################################### # # 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 “AS IS” 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,#`?` & 0xff \ 0000B3 7D.. MOV R5,#(`?` >> 8) & 0xff \ 0000B5 7A.. MOV R2,#`?` & 0xff \ 0000B7 7B.. MOV R3,#(`?` >> 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,#`?` & 0xff \ 00040C 7D.. MOV R5,#(`?` >> 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,#`?` & 0xff \ 000456 7D.. MOV R5,#(`?` >> 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,#`?` & 0xff \ 00045C 7D.. MOV R5,#(`?` >> 8) & 0xff \ ??ZDO_ProcessMatchDescReq_22: \ 00045E 7A.. MOV R2,#`?` & 0xff \ 000460 7B.. MOV R3,#(`?` >> 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,#`?` & 0xff \ 000073 7B.. MOV R3,#(`?` >> 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,#`?` & 0xff \ 000085 7B.. MOV R3,#(`?` >> 8) & 0xff \ 000087 8004 SJMP ??ZDO_EndDeviceTimeoutCB_2 \ ??ZDO_EndDeviceTimeoutCB_1: \ 000089 ; Setup parameters for call to function HalLcdWriteString \ 000089 7A.. MOV R2,#`?` & 0xff \ 00008B 7B.. MOV R3,#(`?` >> 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; ipAppInClusterList[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; ipAppOutClusterList[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 \ `?`: \ 000000 53746172 DB "StartDevice ERR" \ 74446576 \ 69636520 \ 45525200 \ In segment XDATA_ROM_C, align 1 \ `?`: \ 000000 4D4F4445 DB "MODE unknown" \ 20756E6B \ 6E6F776E \ 00 \ In segment XDATA_ROM_C, align 1 \ `?`: \ 000000 456E6420 DB "End Device Bind" \ 44657669 \ 63652042 \ 696E6400 \ In segment XDATA_ROM_C, align 1 \ `?`: \ 000000 53756363 DB "Success Sent" \ 65737320 \ 53656E74 \ 00 \ In segment XDATA_ROM_C, align 1 \ `?`: \ 000000 54696D65 DB "Timeout" \ 6F757400 \ In segment XDATA_ROM_C, align 1 \ `?`: \ 000000 4D617463 DB "Match Desc Req" \ 68204465 \ 73632052 \ 657100 \ In segment XDATA_ROM_C, align 1 \ `?`: \ 000000 52737020 DB "Rsp Sent" \ 53656E74 \ 00 \ In segment XDATA_ROM_C, align 1 \ `?`: \ 000000 52737020 DB "Rsp Non Matched" \ 4E6F6E20 \ 4D617463 \ 68656400 \ In segment XDATA_ROM_C, align 1 \ `?`: \ 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 ? 13 ? 15 ? 12 ? 16 ? 9 ? 16 ? 13 ? 8 ? 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