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

7531 lines
355 KiB
Plaintext
Raw Blame History

###############################################################################
#
# IAR C/C++ Compiler V10.30.1.6000 for 8051 23/Aug/2019 12:13:11
# 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\ZDProfile.c
# Command line =
# -f C:\Users\VULCAN\AppData\Local\Temp\EWE3EF.tmp
# (E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Components\stack\zdo\ZDProfile.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\ZDProfile.lst
# Object file =
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\RouterEB\Obj\ZDProfile.r51
#
###############################################################################
E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Components\stack\zdo\ZDProfile.c
1 /**************************************************************************************************
2 Filename: ZDProfile.c
3 Revised: $Date: 2010-10-13 10:54:13 -0700 (Wed, 13 Oct 2010) $
4 Revision: $Revision: 24112 $
5
6 Description: This is the Zigbee Device Profile.
7
8
9 Copyright 2004-2010 Texas Instruments Incorporated. All rights reserved.
10
11 IMPORTANT: Your use of this Software is limited to those specific rights
12 granted under the terms of a software license agreement between the user
13 who downloaded the software, his/her employer (which must be your employer)
14 and Texas Instruments Incorporated (the "License"). You may not use this
15 Software unless you agree to abide by the terms of the License. The License
16 limits your use, and you acknowledge, that the Software may not be modified,
17 copied or distributed unless embedded on a Texas Instruments microcontroller
18 or used solely and exclusively in conjunction with a Texas Instruments radio
19 frequency transceiver, which is integrated into your product. Other than for
20 the foregoing purpose, you may not use, reproduce, copy, prepare derivative
21 works of, modify, distribute, perform, display or sell this Software and/or
22 its documentation for any purpose.
23
24 YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
25 PROVIDED 揂S IS<49> WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
26 INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
27 NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
28 TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,
29 NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
30 LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
31 INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE
32 OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT
33 OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
34 (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
35
36 Should you have any questions regarding your right to use this Software,
37 contact Texas Instruments Incorporated at www.TI.com.
38 **************************************************************************************************/
39
40 /*********************************************************************
41 * INCLUDES
42 */
43 #include "ZComdef.h"
44 #include "OSAL.h"
45 #include "AF.h"
46 #include "NLMEDE.h"
47 #include "nwk_util.h"
48 #include "APS.h"
49
50 #include "AddrMgr.h"
51 #include "ZDConfig.h"
52 #include "ZDProfile.h"
53 #include "ZDObject.h"
54 #include "ZDNwkMgr.h"
55
56 #if defined( LCD_SUPPORTED )
57 #include "OnBoard.h"
58 #endif
59
60 #include "nwk_util.h"
61
62 #if defined( MT_ZDO_FUNC )
63 #include "MT_ZDO.h"
64 #endif
65
66 /*********************************************************************
67 * MACROS
68 */
69
70 #define ZADDR_TO_AFADDR( pZADDR, AFADDR ) { \
71 (AFADDR).endPoint = ZDP_AF_ENDPOINT; \
72 (AFADDR).addrMode = (afAddrMode_t)(pZADDR)->addrMode; \
73 (AFADDR).addr.shortAddr = (pZADDR)->addr.shortAddr; \
74 }
75
76 #define FillAndSendBuffer( TRANSSEQ, ADDR, ID, LEN, BUF ) { \
77 afStatus_t stat; \
78 ZDP_TmpBuf = (BUF)+1; \
79 stat = fillAndSend( (TRANSSEQ), (ADDR), (ID), (LEN) ); \
80 osal_mem_free( (BUF) ); \
81 ZDP_TmpBuf = ZDP_Buf+1; \
82 return stat; \
83 }
84
85 #define FillAndSendTxOptions( TRANSSEQ, ADDR, ID, LEN, TxO ) { \
86 afStatus_t stat; \
87 ZDP_TxOptions = (TxO); \
88 stat = fillAndSend( (TRANSSEQ), (ADDR), (ID), (LEN) ); \
89 ZDP_TxOptions = AF_TX_OPTIONS_NONE; \
90 return stat; \
91 }
92
93 #define FillAndSendBufferTxOptions( TRANSSEQ, ADDR, ID, LEN, BUF, TxO ) { \
94 afStatus_t stat; \
95 ZDP_TmpBuf = (BUF)+1; \
96 ZDP_TxOptions = (TxO); \
97 stat = fillAndSend( (TRANSSEQ), (ADDR), (ID), (LEN) ); \
98 osal_mem_free( (BUF) ); \
99 ZDP_TmpBuf = ZDP_Buf+1; \
100 ZDP_TxOptions = AF_TX_OPTIONS_NONE; \
101 return stat; \
102 }
103
104 /*********************************************************************
105 * CONSTANTS
106 */
107
108 #define ZDP_BUF_SZ 80
109
\ In segment CODE_C, align 1
110 CONST byte ZDP_AF_ENDPOINT = 0;
\ ZDP_AF_ENDPOINT:
\ 000000 00 DB 0
111
112 /*********************************************************************
113 * TYPEDEFS
114 */
115 typedef struct
116 {
117 void *next;
118 uint8 taskID;
119 uint16 clusterID;
120 } ZDO_MsgCB_t;
121
122
123 /*********************************************************************
124 * GLOBAL VARIABLES
125 */
126
\ In segment XDATA_Z, align 1, keep-with-next
127 byte ZDP_TransID = 0;
\ ZDP_TransID:
\ 000000 DS 1
\ 000001 REQUIRE __INIT_XDATA_Z
128
129 /*********************************************************************
130 * EXTERNAL VARIABLES
131 */
132
133 extern endPointDesc_t ZDApp_epDesc;
134
135 /*********************************************************************
136 * EXTERNAL FUNCTIONS
137 */
138
139 /*********************************************************************
140 * LOCAL FUNCTIONS
141 */
142
143 static afStatus_t fillAndSend( uint8 *transSeq, zAddrType_t *addr, cId_t clusterID, byte len );
144 uint8 ZDO_SendMsgCBs( zdoIncomingMsg_t *inMsg );
145 void zdpProcessAddrReq( zdoIncomingMsg_t *inMsg );
146
147 /*********************************************************************
148 * LOCAL VARIABLES
149 */
150
\ In segment XDATA_Z, align 1, keep-with-next
151 static uint8 ZDP_Buf[ ZDP_BUF_SZ ];
\ ZDP_Buf:
\ 000000 DS 80
\ 000050 REQUIRE __INIT_XDATA_Z
\ In segment XDATA_I, align 1, keep-with-next
152 static uint8 *ZDP_TmpBuf = ZDP_Buf+1;
\ ZDP_TmpBuf:
\ 000000 DS 2
\ 000002 REQUIRE `?<Initializer for ZDP_TmpBuf>`
\ 000002 REQUIRE __INIT_XDATA_I
153
\ In segment XDATA_Z, align 1, keep-with-next
154 byte ZDP_TxOptions = AF_TX_OPTIONS_NONE;
\ ZDP_TxOptions:
\ 000000 DS 1
\ 000001 REQUIRE __INIT_XDATA_Z
\ In segment XDATA_Z, align 1, keep-with-next
155 ZDO_MsgCB_t *zdoMsgCBs = (ZDO_MsgCB_t *)NULL;
\ zdoMsgCBs:
\ 000000 DS 2
\ 000002 REQUIRE __INIT_XDATA_Z
156
157 /*********************************************************************
158 * ZDO Message Processing table
159 */
160
161 typedef void (*pfnZDPMsgProcessor)( zdoIncomingMsg_t *inMsg );
162
163 typedef struct
164 {
165 uint16 clusterID;
166 pfnZDPMsgProcessor pFn;
167 } zdpMsgProcItem_t;
168
\ In segment CODE_C, align 1
169 CONST zdpMsgProcItem_t zdpMsgProcs[] =
\ zdpMsgProcs:
\ 000000 0000 DW 0
\ 000002 .... DW `??zdpProcessAddrReq::?relay`
\ 000004 1300 DW 19
\ 000006 .... DW `??ZDO_ProcessDeviceAnnce::?relay`
\ 000008 0100 DW 1
\ 00000A .... DW `??zdpProcessAddrReq::?relay`
\ 00000C 0200 DW 2
\ 00000E .... DW `??ZDO_ProcessNodeDescReq::?relay`
\ 000010 0300 DW 3
\ 000012 .... DW `??ZDO_ProcessPowerDescReq::?relay`
\ 000014 0400 DW 4
\ 000016 .... DW `??ZDO_ProcessSimpleDescReq::?relay`
\ 000018 0500 DW 5
\ 00001A .... DW `??ZDO_ProcessActiveEPReq::?relay`
\ 00001C 0600 DW 6
\ 00001E .... DW `??ZDO_ProcessMatchDescReq::?relay`
\ 000020 1100 DW 17
\ 000022 .... DW `??ZDO_ProcessUserDescReq::?relay`
\ 000024 1400 DW 20
\ 000026 .... DW `??ZDO_ProcessUserDescSet::?relay`
\ 000028 1500 DW 21
\ 00002A .... DW `??ZDO_ProcessServerDiscReq::?relay`
\ 00002C FFFF DW 65535
\ 00002E 0000 DW 0H
170 {
171 #if ( RFD_RCVC_ALWAYS_ON==TRUE ) || ( ZG_BUILD_RTR_TYPE )
172 // These aren't processed by sleeping end devices.
173 { NWK_addr_req, zdpProcessAddrReq },
174 { Device_annce, ZDO_ProcessDeviceAnnce },
175 #endif
176 { IEEE_addr_req, zdpProcessAddrReq },
177 { Node_Desc_req, ZDO_ProcessNodeDescReq },
178 { Power_Desc_req, ZDO_ProcessPowerDescReq },
179 { Simple_Desc_req, ZDO_ProcessSimpleDescReq },
180 { Active_EP_req, ZDO_ProcessActiveEPReq },
181 { Match_Desc_req, ZDO_ProcessMatchDescReq },
182 #if defined ( ZDO_MGMT_NWKDISC_RESPONSE )
183 { Mgmt_NWK_Disc_req, ZDO_ProcessMgmtNwkDiscReq },
184 #endif
185 #if defined ( ZDO_MGMT_LQI_RESPONSE ) && ( ZG_BUILD_RTR_TYPE )
186 { Mgmt_Lqi_req, ZDO_ProcessMgmtLqiReq },
187 #endif
188 #if defined ( ZDO_MGMT_RTG_RESPONSE ) && ( ZG_BUILD_RTR_TYPE )
189 { Mgmt_Rtg_req, ZDO_ProcessMgmtRtgReq },
190 #endif
191 #if defined ( ZDO_MGMT_BIND_RESPONSE ) && defined ( REFLECTOR )
192 { Mgmt_Bind_req, ZDO_ProcessMgmtBindReq },
193 #endif
194 #if defined ( ZDO_MGMT_JOINDIRECT_RESPONSE ) && ( ZG_BUILD_RTR_TYPE )
195 { Mgmt_Direct_Join_req, ZDO_ProcessMgmtDirectJoinReq },
196 #endif
197 #if defined ( ZDO_MGMT_LEAVE_RESPONSE )
198 { Mgmt_Leave_req, ZDO_ProcessMgmtLeaveReq },
199 #endif
200 #if defined ( ZDO_MGMT_PERMIT_JOIN_RESPONSE ) && ( ZG_BUILD_RTR_TYPE )
201 { Mgmt_Permit_Join_req, ZDO_ProcessMgmtPermitJoinReq },
202 #endif
203 #if defined ( ZDO_USERDESC_RESPONSE )
204 { User_Desc_req, ZDO_ProcessUserDescReq },
205 #endif
206 #if defined ( ZDO_USERDESCSET_RESPONSE )
207 { User_Desc_set, ZDO_ProcessUserDescSet },
208 #endif
209 #if defined ( ZDO_SERVERDISC_RESPONSE )
210 { Server_Discovery_req, ZDO_ProcessServerDiscReq },
211 #endif
212 {0xFFFF, NULL} // Last
213 };
214
215 /*********************************************************************
216 * @fn fillAndSend
217 *
218 * @brief Combined to reduce space
219 *
220 * @param
221 * @param
222 *
223 * @return afStatus_t
224 */
\ In segment BANKED_CODE, align 1, keep-with-next
225 static afStatus_t fillAndSend( uint8 *transSeq, zAddrType_t *addr, cId_t clusterID, byte len )
\ fillAndSend:
226 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 REQUIRE ?V2
\ 000000 REQUIRE ?V3
\ 000000 REQUIRE ?V4
\ 000000 74F3 MOV A,#-0xd
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 13
\ 000005 ; Auto size: 12
\ 000005 74F4 MOV A,#-0xc
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A 8A.. MOV ?V2,R2
\ 00000C 8B.. MOV ?V3,R3
\ 00000E 8C.. MOV ?V0,R4
\ 000010 8D.. MOV ?V1,R5
\ 000012 E9 MOV A,R1
\ 000013 FE MOV R6,A
227 afAddrType_t afAddr;
228
229 osal_memset( &afAddr, 0, sizeof(afAddrType_t) );
\ 000014 ; Setup parameters for call to function osal_memset
\ 000014 7C0C MOV R4,#0xc
\ 000016 7D00 MOV R5,#0x0
\ 000018 7900 MOV R1,#0x0
\ 00001A AA.. MOV R2,?XSP + 0
\ 00001C AB.. MOV R3,?XSP + 1
\ 00001E 12.... LCALL `??osal_memset::?relay`; Banked call to: osal_memset
230 ZADDR_TO_AFADDR( addr, afAddr );
\ 000021 7409 MOV A,#0x9
\ 000023 12.... LCALL ?XSTACK_DISP0_8
\ 000026 E4 CLR A
\ 000027 12.... LCALL ?Subroutine17 & 0xFFFF
\ ??CrossCallReturnLabel_20:
\ 00002A A3 INC DPTR
\ 00002B E0 MOVX A,@DPTR
\ 00002C C0E0 PUSH A
\ 00002E 7408 MOV A,#0x8
\ 000030 12.... LCALL ?XSTACK_DISP0_8
\ 000033 D0E0 POP A
\ 000035 F0 MOVX @DPTR,A
\ 000036 85..82 MOV DPL,?V0
\ 000039 85..83 MOV DPH,?V1
\ 00003C 12.... LCALL ?Subroutine44 & 0xFFFF
\ ??CrossCallReturnLabel_63:
\ 00003F 12.... LCALL ??Subroutine134_0 & 0xFFFF
231
232 *(ZDP_TmpBuf-1) = *transSeq;
\ ??CrossCallReturnLabel_249:
\ 000042 90.... MOV DPTR,#ZDP_TmpBuf
\ 000045 E0 MOVX A,@DPTR
\ 000046 24FF ADD A,#-0x1
\ 000048 F5.. MOV ?V0,A
\ 00004A A3 INC DPTR
\ 00004B E0 MOVX A,@DPTR
\ 00004C 34FF ADDC A,#-0x1
\ 00004E F5.. MOV ?V1,A
\ 000050 85..82 MOV DPL,?V2
\ 000053 85..83 MOV DPH,?V3
\ 000056 12.... LCALL ?Subroutine61 & 0xFFFF
233
234 return AF_DataRequest( &afAddr, &ZDApp_epDesc, clusterID,
235 (uint16)(len+1), (uint8*)(ZDP_TmpBuf-1),
236 transSeq, ZDP_TxOptions, AF_DEFAULT_RADIUS );
\ ??CrossCallReturnLabel_94:
\ 000059 ; Setup parameters for call to function AF_DataRequest
\ 000059 75..1E MOV ?V4,#0x1e
\ 00005C 78.. MOV R0,#?V4
\ 00005E 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 000061 78.. MOV R0,#?V2
\ 000063 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000066 78.. MOV R0,#?V0
\ 000068 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00006B EE MOV A,R6
\ 00006C 2401 ADD A,#0x1
\ 00006E F5.. MOV ?V0,A
\ 000070 E4 CLR A
\ 000071 3400 ADDC A,#0x0
\ 000073 F5.. MOV ?V1,A
\ 000075 78.. MOV R0,#?V0
\ 000077 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00007A 7420 MOV A,#0x20
\ 00007C 12.... LCALL ?XSTACK_DISP0_8
\ 00007F 12.... LCALL ?PUSH_XSTACK8_X_TWO
\ 000082 90.... MOV DPTR,#ZDP_TxOptions
\ 000085 E0 MOVX A,@DPTR
\ 000086 F9 MOV R1,A
\ 000087 7C.. MOV R4,#ZDApp_epDesc & 0xff
\ 000089 7D.. MOV R5,#(ZDApp_epDesc >> 8) & 0xff
\ 00008B 7409 MOV A,#0x9
\ 00008D 12.... LCALL ?XSTACK_DISP101_8
\ 000090 12.... LCALL `??AF_DataRequest::?relay`; Banked call to: AF_DataRequest
\ 000093 7409 MOV A,#0x9
\ 000095 12.... LCALL ?DEALLOC_XSTACK8
\ 000098 740C MOV A,#0xc
\ 00009A 12.... LCALL ?DEALLOC_XSTACK8
\ 00009D 7F05 MOV R7,#0x5
\ 00009F 02.... LJMP ?BANKED_LEAVE_XDATA
237
238 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine44:
\ 000000 12.... LCALL ?Subroutine81 & 0xFFFF
\ ??CrossCallReturnLabel_330:
\ 000003 85..82 MOV DPL,?XSP + 0
\ 000006 85..83 MOV DPH,?XSP + 1
\ 000009 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine61:
\ 000000 12.... LCALL ?Subroutine102 & 0xFFFF
\ ??CrossCallReturnLabel_164:
\ 000003 F0 MOVX @DPTR,A
\ 000004 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine102:
\ 000000 E0 MOVX A,@DPTR
\ 000001 85..82 MOV DPL,?V0
\ 000004 85..83 MOV DPH,?V1
\ 000007 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine134_0:
\ 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 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine17:
\ 000000 12.... LCALL ?Subroutine92 & 0xFFFF
\ ??CrossCallReturnLabel_146:
\ 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
\ ?Subroutine92:
\ 000000 12.... LCALL ?Subroutine107 & 0xFFFF
\ ??CrossCallReturnLabel_171:
\ 000003 A3 INC DPTR
\ 000004 A3 INC DPTR
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine107:
\ 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
\ ?Subroutine81:
\ 000000 12.... LCALL ??Subroutine145_0 & 0xFFFF
\ ??CrossCallReturnLabel_339:
\ 000003 F9 MOV R1,A
\ 000004 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine145_0:
\ 000000 E0 MOVX A,@DPTR
\ 000001 F8 MOV R0,A
\ 000002 A3 INC DPTR
\ 000003 E0 MOVX A,@DPTR
\ 000004 22 RET
239
240 /*********************************************************************
241 * @fn ZDP_SendData
242 *
243 * @brief This builds and send a request message that has
244 * NWKAddrOfInterest as its only parameter.
245 *
246 * @param dstAddr - destination address
247 * @param cmd - clusterID
248 * @param dataLen - number of bytes of data
249 * @param data - pointer to the data
250 * @param SecurityEnable - Security Options
251 *
252 * @return afStatus_t
253 */
\ In segment BANKED_CODE, align 1, keep-with-next
254 afStatus_t ZDP_SendData( uint8 *TransSeq, zAddrType_t *dstAddr, uint16 cmd,
\ ZDP_SendData:
255 byte len, uint8 *buf, byte SecurityEnable )
256 {
\ 000000 REQUIRE ?V0
\ 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 ?V0,R1
257 uint8 *pBuf = ZDP_TmpBuf;
\ 000007 90.... MOV DPTR,#ZDP_TmpBuf
\ 00000A E0 MOVX A,@DPTR
\ 00000B F5.. MOV ?V2,A
\ 00000D A3 INC DPTR
\ 00000E E0 MOVX A,@DPTR
\ 00000F F5.. MOV ?V3,A
258 byte cnt = len;
\ 000011 AE.. MOV R6,?V0
\ 000013 740E MOV A,#0xe
\ 000015 12.... LCALL ?XSTACK_DISP0_8
\ 000018 12.... LCALL ??Subroutine144_0 & 0xFFFF
\ ??CrossCallReturnLabel_321:
\ 00001B 801F SJMP ??ZDP_SendData_0
259
260 while ( cnt-- )
261 {
262 *pBuf++ = *buf++;
\ ??ZDP_SendData_1:
\ 00001D 8882 MOV DPL,R0
\ 00001F 8983 MOV DPH,R1
\ 000021 E0 MOVX A,@DPTR
\ 000022 85..82 MOV DPL,?V2
\ 000025 85..83 MOV DPH,?V3
\ 000028 12.... LCALL ??Subroutine115_0 & 0xFFFF
263 }
\ ??CrossCallReturnLabel_175:
\ 00002B A882 MOV R0,DPL
\ 00002D A983 MOV R1,DPH
\ 00002F 85..82 MOV DPL,?V2
\ 000032 85..83 MOV DPH,?V3
\ 000035 A3 INC DPTR
\ 000036 8582.. MOV ?V2,DPL
\ 000039 8583.. MOV ?V3,DPH
\ ??ZDP_SendData_0:
\ 00003C EE MOV A,R6
\ 00003D FF MOV R7,A
\ 00003E 74FF MOV A,#-0x1
\ 000040 2F ADD A,R7
\ 000041 FE MOV R6,A
\ 000042 04 INC A
\ 000043 70D8 JNZ ??ZDP_SendData_1
264
265 FillAndSendTxOptions( TransSeq, dstAddr, cmd, len, ((SecurityEnable) ? AF_EN_SECURITY : 0) );
\ 000045 7410 MOV A,#0x10
\ 000047 12.... LCALL ?XSTACK_DISP0_8
\ 00004A E0 MOVX A,@DPTR
\ 00004B 90.... MOV DPTR,#ZDP_TxOptions
\ 00004E 6004 JZ ??ZDP_SendData_2
\ 000050 7440 MOV A,#0x40
\ 000052 8001 SJMP ??ZDP_SendData_3
\ ??ZDP_SendData_2:
\ 000054 E4 CLR A
\ ??ZDP_SendData_3:
\ 000055 F0 MOVX @DPTR,A
\ 000056 ; Setup parameters for call to function fillAndSend
\ 000056 740C MOV A,#0xc
\ 000058 12.... LCALL ?XSTACK_DISP0_8
\ 00005B 12.... LCALL ?PUSH_XSTACK8_X_TWO
\ 00005E A9.. MOV R1,?V0
\ 000060 12.... LCALL ??Subroutine140_0 & 0xFFFF
\ ??CrossCallReturnLabel_295:
\ 000063 12.... LCALL ?DEALLOC_XSTACK8
\ 000066 E9 MOV A,R1
\ 000067 F9 MOV R1,A
\ 000068 90.... MOV DPTR,#ZDP_TxOptions
\ 00006B E4 CLR A
\ 00006C F0 MOVX @DPTR,A
\ 00006D 02.... LJMP ??Subroutine128_0 & 0xFFFF
266 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine115_0:
\ 000000 12.... LCALL ??Subroutine120_0 & 0xFFFF
\ ??CrossCallReturnLabel_190:
\ 000003 A3 INC DPTR
\ 000004 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine120_0:
\ 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 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine128_0:
\ 000000 7F04 MOV R7,#0x4
\ 000002 02.... LJMP ?BANKED_LEAVE_XDATA
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine140_0:
\ 000000 12.... LCALL `??fillAndSend::?relay`; Banked call to: fillAndSend
\ 000003 7402 MOV A,#0x2
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine144_0:
\ 000000 12.... LCALL ?Subroutine81 & 0xFFFF
\ ??CrossCallReturnLabel_333:
\ 000003 22 RET
267
268 /*********************************************************************
269 * @fn ZDP_NWKAddrOfInterestReq
270 *
271 * @brief This builds and send a request message that has
272 * NWKAddrOfInterest as its only parameter.
273 *
274 * @param dstAddr - destination address
275 * @param nwkAddr - 16 bit address
276 * @param SecurityEnable - Security Options
277 *
278 * @return afStatus_t
279 */
\ In segment BANKED_CODE, align 1, keep-with-next
280 afStatus_t ZDP_NWKAddrOfInterestReq( zAddrType_t *dstAddr, uint16 nwkAddr,
\ ZDP_NWKAddrOfInterestReq:
281 byte cmd, byte SecurityEnable )
282 {
\ 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
283 (void)SecurityEnable; // Intentionally unreferenced parameter
284
285 ZDP_TmpBuf[0] = LO_UINT16( nwkAddr );
\ 000005 12.... LCALL ?Subroutine18 & 0xFFFF
286 ZDP_TmpBuf[1] = HI_UINT16( nwkAddr );
\ ??CrossCallReturnLabel_22:
\ 000008 F0 MOVX @DPTR,A
287
288 return fillAndSend( &ZDP_TransID, dstAddr, cmd, 2 );
\ 000009 ; Setup parameters for call to function fillAndSend
\ 000009 E9 MOV A,R1
\ 00000A F5.. MOV ?V0,A
\ 00000C 02.... LJMP ?Subroutine1 & 0xFFFF
289 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine1:
\ 000000 75..00 MOV ?V1,#0x0
\ 000003 78.. MOV R0,#?V0
\ 000005 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000008 7902 MOV R1,#0x2
\ 00000A REQUIRE ??Subroutine110_0
\ 00000A ; // Fall through to label ??Subroutine110_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine110_0:
\ 000000 EA MOV A,R2
\ 000001 FC MOV R4,A
\ 000002 EB MOV A,R3
\ 000003 FD MOV R5,A
\ 000004 7A.. MOV R2,#ZDP_TransID & 0xff
\ 000006 7B.. MOV R3,#(ZDP_TransID >> 8) & 0xff
\ 000008 REQUIRE ??Subroutine111_0
\ 000008 ; // Fall through to label ??Subroutine111_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine111_0:
\ 000000 12.... LCALL ??Subroutine140_0 & 0xFFFF
\ ??CrossCallReturnLabel_296:
\ 000003 REQUIRE ??Subroutine112_0
\ 000003 ; // Fall through to label ??Subroutine112_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine112_0:
\ 000000 12.... LCALL ?DEALLOC_XSTACK8
\ 000003 7F02 MOV R7,#0x2
\ 000005 02.... LJMP ?BANKED_LEAVE_XDATA
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine18:
\ 000000 90.... MOV DPTR,#ZDP_TmpBuf
\ 000003 12.... LCALL ?Subroutine89 & 0xFFFF
\ ??CrossCallReturnLabel_218:
\ 000006 EC MOV A,R4
\ 000007 12.... LCALL ?Subroutine79 & 0xFFFF
\ ??CrossCallReturnLabel_238:
\ 00000A ED MOV A,R5
\ 00000B 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine89:
\ 000000 12.... LCALL ?Subroutine106 & 0xFFFF
\ ??CrossCallReturnLabel_242:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine106:
\ 000000 12.... LCALL ??Subroutine145_0 & 0xFFFF
\ ??CrossCallReturnLabel_338:
\ 000003 F583 MOV DPH,A
\ 000005 8882 MOV DPL,R0
\ 000007 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine79:
\ 000000 F0 MOVX @DPTR,A
\ 000001 90.... MOV DPTR,#ZDP_TmpBuf
\ 000004 REQUIRE ??Subroutine131_0
\ 000004 ; // Fall through to label ??Subroutine131_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine131_0:
\ 000000 12.... LCALL ?Subroutine106 & 0xFFFF
\ ??CrossCallReturnLabel_243:
\ 000003 A3 INC DPTR
\ 000004 22 RET
290
291 /*********************************************************************
292 * Address Requests
293 */
294
295 /*********************************************************************
296 * @fn ZDP_NwkAddrReq
297 *
298 * @brief This builds and send a NWK_addr_req message. This
299 * function sends a broadcast message looking for a 16
300 * bit address with a 64 bit address as bait.
301 *
302 * @param IEEEAddress - looking for this device
303 * @param SecurityEnable - Security Options
304 *
305 * @return afStatus_t
306 */
\ In segment BANKED_CODE, align 1, keep-with-next
307 afStatus_t ZDP_NwkAddrReq( uint8 *IEEEAddress, byte ReqType,
\ ZDP_NwkAddrReq:
308 byte StartIndex, byte SecurityEnable )
309 {
\ 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: 9
\ 000005 74F7 MOV A,#-0x9
\ 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
\ 00000E 89.. MOV ?V1,R1
\ 000010 8C.. MOV ?V0,R4
310 uint8 *pBuf = ZDP_TmpBuf;
\ 000012 90.... MOV DPTR,#ZDP_TmpBuf
\ 000015 E0 MOVX A,@DPTR
\ 000016 F5.. MOV ?V2,A
\ 000018 A3 INC DPTR
\ 000019 E0 MOVX A,@DPTR
\ 00001A F5.. MOV ?V3,A
311 byte len = Z_EXTADDR_LEN + 1 + 1; // IEEEAddress + ReqType + StartIndex.
312 zAddrType_t dstAddr;
313
314 (void)SecurityEnable; // Intentionally unreferenced parameter
315
316 if ( osal_ExtAddrEqual( saveExtAddr, IEEEAddress ) == FALSE )
\ 00001C ; Setup parameters for call to function sAddrExtCmp
\ 00001C EA MOV A,R2
\ 00001D FC MOV R4,A
\ 00001E EB MOV A,R3
\ 00001F FD MOV R5,A
\ 000020 7A.. MOV R2,#saveExtAddr & 0xff
\ 000022 7B.. MOV R3,#(saveExtAddr >> 8) & 0xff
\ 000024 12.... LCALL `??sAddrExtCmp::?relay`; Banked call to: sAddrExtCmp
\ 000027 E9 MOV A,R1
\ 000028 700A JNZ ??ZDP_NwkAddrReq_0
317 {
318 dstAddr.addrMode = AddrBroadcast;
\ 00002A 7408 MOV A,#0x8
\ 00002C 12.... LCALL ?XSTACK_DISP0_8
\ 00002F 12.... LCALL ?Subroutine91 & 0xFFFF
319 dstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR_DEVRXON;
320 }
\ ??CrossCallReturnLabel_144:
\ 000032 8012 SJMP ??ZDP_NwkAddrReq_1
321 else
322 {
323 dstAddr.addrMode = Addr16Bit;
\ ??ZDP_NwkAddrReq_0:
\ 000034 7408 MOV A,#0x8
\ 000036 12.... LCALL ?XSTACK_DISP0_8
\ 000039 7402 MOV A,#0x2
\ 00003B F0 MOVX @DPTR,A
324 dstAddr.addr.shortAddr = ZDAppNwkAddr.addr.shortAddr;
\ 00003C 90.... MOV DPTR,#ZDAppNwkAddr
\ 00003F 12.... LCALL ?Subroutine44 & 0xFFFF
325 }
\ ??CrossCallReturnLabel_64:
\ 000042 E8 MOV A,R0
\ 000043 F0 MOVX @DPTR,A
\ 000044 A3 INC DPTR
\ 000045 E9 MOV A,R1
\ ??ZDP_NwkAddrReq_1:
\ 000046 F0 MOVX @DPTR,A
326
327 pBuf = osal_cpyExtAddr( pBuf, IEEEAddress );
\ 000047 ; Setup parameters for call to function sAddrExtCpy
\ 000047 EE MOV A,R6
\ 000048 FC MOV R4,A
\ 000049 EF MOV A,R7
\ 00004A FD MOV R5,A
\ 00004B AA.. MOV R2,?V2
\ 00004D AB.. MOV R3,?V3
\ 00004F 12.... LCALL ?Subroutine67 & 0xFFFF
328
329 *pBuf++ = ReqType;
\ ??CrossCallReturnLabel_107:
\ 000052 E5.. MOV A,?V1
\ 000054 F0 MOVX @DPTR,A
330 *pBuf++ = StartIndex;
\ 000055 A3 INC DPTR
\ 000056 E5.. MOV A,?V0
\ 000058 F0 MOVX @DPTR,A
331
332 return fillAndSend( &ZDP_TransID, &dstAddr, NWK_addr_req, len );
\ 000059 ; Setup parameters for call to function fillAndSend
\ 000059 E4 CLR A
\ 00005A F5.. MOV ?V2,A
\ 00005C F5.. MOV ?V3,A
\ 00005E 78.. MOV R0,#?V2
\ 000060 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000063 790A MOV R1,#0xa
\ 000065 7402 MOV A,#0x2
\ 000067 12.... LCALL ?XSTACK_DISP102_8
\ 00006A 12.... LCALL ?Subroutine64 & 0xFFFF
\ ??CrossCallReturnLabel_287:
\ 00006D 12.... LCALL ?DEALLOC_XSTACK8
\ 000070 7409 MOV A,#0x9
\ 000072 02.... LJMP ??Subroutine127_0 & 0xFFFF
333 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine91:
\ 000000 740F MOV A,#0xf
\ 000002 F0 MOVX @DPTR,A
\ 000003 85..82 MOV DPL,?XSP + 0
\ 000006 85..83 MOV DPH,?XSP + 1
\ 000009 74FD MOV A,#-0x3
\ 00000B F0 MOVX @DPTR,A
\ 00000C A3 INC DPTR
\ 00000D 74FF MOV A,#-0x1
\ 00000F 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine67:
\ 000000 12.... LCALL `??sAddrExtCpy::?relay`; Banked call to: sAddrExtCpy
\ 000003 8A82 MOV DPL,R2
\ 000005 8B83 MOV DPH,R3
\ 000007 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine127_0:
\ 000000 12.... LCALL ?DEALLOC_XSTACK8
\ 000003 REQUIRE ??Subroutine128_0
\ 000003 ; // Fall through to label ??Subroutine128_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine64:
\ 000000 7A.. MOV R2,#ZDP_TransID & 0xff
\ 000002 7B.. MOV R3,#(ZDP_TransID >> 8) & 0xff
\ 000004 REQUIRE ??Subroutine140_0
\ 000004 ; // Fall through to label ??Subroutine140_0
334
335 /*********************************************************************
336 * @fn ZDP_IEEEAddrReq
337 *
338 * @brief This builds and send a IEEE_addr_req message. This
339 * function sends a unicast message looking for a 64
340 * bit IEEE address with a 16 bit address as bait.
341 *
342 * @param ReqType - ZDP_IEEEADDR_REQTYPE_SINGLE or
343 * ZDP_IEEEADDR_REQTYPE_EXTENDED
344 * @param SecurityEnable - Security Options
345 *
346 * @return afStatus_t
347 */
\ In segment BANKED_CODE, align 1, keep-with-next
348 afStatus_t ZDP_IEEEAddrReq( uint16 shortAddr, byte ReqType,
\ ZDP_IEEEAddrReq:
349 byte StartIndex, byte SecurityEnable )
350 {
\ 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: 9
\ 000005 74F7 MOV A,#-0x9
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A E9 MOV A,R1
\ 00000B FF MOV R7,A
351 uint8 *pBuf = ZDP_TmpBuf;
\ 00000C 12.... LCALL ??Subroutine143_0 & 0xFFFF
352 byte len = 2 + 1 + 1; // shortAddr + ReqType + StartIndex.
353 zAddrType_t dstAddr;
354
355 (void)SecurityEnable; // Intentionally unreferenced parameter
356
357 dstAddr.addrMode = (afAddrMode_t)Addr16Bit;
\ ??CrossCallReturnLabel_328:
\ 00000F 7408 MOV A,#0x8
\ 000011 12.... LCALL ?XSTACK_DISP0_8
\ 000014 7402 MOV A,#0x2
\ 000016 F0 MOVX @DPTR,A
358 dstAddr.addr.shortAddr = shortAddr;
\ 000017 12.... LCALL ?Subroutine31 & 0xFFFF
359
360 *pBuf++ = LO_UINT16( shortAddr );
\ ??CrossCallReturnLabel_317:
\ 00001A EA MOV A,R2
\ 00001B 8882 MOV DPL,R0
\ 00001D 8983 MOV DPH,R1
\ 00001F F0 MOVX @DPTR,A
361 *pBuf++ = HI_UINT16( shortAddr );
\ 000020 EB MOV A,R3
\ 000021 A3 INC DPTR
\ 000022 F0 MOVX @DPTR,A
362
363 *pBuf++ = ReqType;
\ 000023 EF MOV A,R7
\ 000024 8882 MOV DPL,R0
\ 000026 8983 MOV DPH,R1
\ 000028 A3 INC DPTR
\ 000029 A3 INC DPTR
\ 00002A F0 MOVX @DPTR,A
364 *pBuf++ = StartIndex;
\ 00002B EC MOV A,R4
\ 00002C 8882 MOV DPL,R0
\ 00002E 8983 MOV DPH,R1
\ 000030 A3 INC DPTR
\ 000031 A3 INC DPTR
\ 000032 A3 INC DPTR
\ 000033 F0 MOVX @DPTR,A
365
366 return fillAndSend( &ZDP_TransID, &dstAddr, IEEE_addr_req, len );
\ 000034 ; Setup parameters for call to function fillAndSend
\ 000034 75..01 MOV ?V0,#0x1
\ 000037 75..00 MOV ?V1,#0x0
\ 00003A 78.. MOV R0,#?V0
\ 00003C 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00003F 7904 MOV R1,#0x4
\ 000041 REQUIRE ?Subroutine6
\ 000041 ; // Fall through to label ?Subroutine6
367 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine6:
\ 000000 7402 MOV A,#0x2
\ 000002 12.... LCALL ?XSTACK_DISP102_8
\ 000005 12.... LCALL ?Subroutine64 & 0xFFFF
\ ??CrossCallReturnLabel_288:
\ 000008 12.... LCALL ?DEALLOC_XSTACK8
\ 00000B REQUIRE ??Subroutine109_0
\ 00000B ; // Fall through to label ??Subroutine109_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine109_0:
\ 000000 7409 MOV A,#0x9
\ 000002 80.. SJMP ??Subroutine112_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine31:
\ 000000 85..82 MOV DPL,?XSP + 0
\ 000003 85..83 MOV DPH,?XSP + 1
\ 000006 REQUIRE ??Subroutine142_0
\ 000006 ; // Fall through to label ??Subroutine142_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine142_0:
\ 000000 EA MOV A,R2
\ 000001 F0 MOVX @DPTR,A
\ 000002 A3 INC DPTR
\ 000003 EB MOV A,R3
\ 000004 F0 MOVX @DPTR,A
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine143_0:
\ 000000 90.... MOV DPTR,#ZDP_TmpBuf
\ 000003 REQUIRE ??Subroutine144_0
\ 000003 ; // Fall through to label ??Subroutine144_0
368
369 /*********************************************************************
370 * @fn ZDP_MatchDescReq
371 *
372 * @brief This builds and send a Match_Desc_req message. This
373 * function sends a broadcast or unicast message
374 * requesting the list of endpoint/interfaces that
375 * match profile ID and cluster IDs.
376 *
377 * @param dstAddr - destination address
378 * @param nwkAddr - network address of interest
379 * @param ProfileID - Profile ID
380 * @param NumInClusters - number of input clusters
381 * @param InClusterList - input cluster ID list
382 * @param NumOutClusters - number of output clusters
383 * @param OutClusterList - output cluster ID list
384 * @param SecurityEnable - Security Options
385 *
386 * @return afStatus_t
387 */
\ In segment BANKED_CODE, align 1, keep-with-next
388 afStatus_t ZDP_MatchDescReq( zAddrType_t *dstAddr, uint16 nwkAddr,
\ ZDP_MatchDescReq:
389 uint16 ProfileID,
390 byte NumInClusters, cId_t *InClusterList,
391 byte NumOutClusters, cId_t *OutClusterList,
392 byte SecurityEnable )
393 {
\ 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 8C.. MOV ?V0,R4
\ 000007 8D.. MOV ?V1,R5
\ 000009 12.... LCALL ?Subroutine47 & 0xFFFF
394 uint8 *pBuf = ZDP_TmpBuf;
\ ??CrossCallReturnLabel_319:
\ 00000C 7412 MOV A,#0x12
\ 00000E 12.... LCALL ?XSTACK_DISP0_8
\ 000011 E0 MOVX A,@DPTR
\ 000012 FD MOV R5,A
395 // nwkAddr+ProfileID+NumInClusters+NumOutClusters.
396 byte i, len = 2 + 2 + 1 + 1; // nwkAddr+ProfileID+NumInClusters+NumOutClusters.
397
398 (void)SecurityEnable; // Intentionally unreferenced parameter
399
400 len += (NumInClusters + NumOutClusters) * sizeof(uint16);
\ 000013 EE MOV A,R6
\ 000014 2D ADD A,R5
\ 000015 C3 CLR C
\ 000016 33 RLC A
\ 000017 2406 ADD A,#0x6
\ 000019 FF MOV R7,A
401
402 if ( len >= ZDP_BUF_SZ-1 )
\ 00001A C3 CLR C
\ 00001B 944F SUBB A,#0x4f
\ 00001D 4005 JC ??ZDP_MatchDescReq_0
403 {
404 return afStatus_MEM_FAIL;
\ 00001F 7910 MOV R1,#0x10
\ 000021 02.... LJMP ??ZDP_MatchDescReq_1 & 0xFFFF
405 }
406
407 // The spec changed in Zigbee 2007 (2.4.3.1.7.1) to not allow sending
408 // this command to 0xFFFF. So, here we will filter this and replace
409 // with 0xFFFD to only send to devices with RX ON. This includes the
410 // network address of interest.
411 if ( ((dstAddr->addrMode == AddrBroadcast) || (dstAddr->addrMode == Addr16Bit))
412 && (dstAddr->addr.shortAddr == NWK_BROADCAST_SHORTADDR_DEVALL) )
\ ??ZDP_MatchDescReq_0:
\ 000024 8A82 MOV DPL,R2
\ 000026 8B83 MOV DPH,R3
\ 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 A3 INC DPTR
\ 000030 E0 MOVX A,@DPTR
\ 000031 640F XRL A,#0xf
\ 000033 6011 JZ ??ZDP_MatchDescReq_2
\ 000035 8A82 MOV DPL,R2
\ 000037 8B83 MOV DPH,R3
\ 000039 A3 INC DPTR
\ 00003A A3 INC DPTR
\ 00003B A3 INC DPTR
\ 00003C A3 INC DPTR
\ 00003D A3 INC DPTR
\ 00003E A3 INC DPTR
\ 00003F A3 INC DPTR
\ 000040 A3 INC DPTR
\ 000041 E0 MOVX A,@DPTR
\ 000042 6402 XRL A,#0x2
\ 000044 7018 JNZ ??ZDP_MatchDescReq_3
\ ??ZDP_MatchDescReq_2:
\ 000046 8A82 MOV DPL,R2
\ 000048 8B83 MOV DPH,R3
\ 00004A E0 MOVX A,@DPTR
\ 00004B F4 CPL A
\ 00004C 7003 JNZ ??ZDP_MatchDescReq_4
\ 00004E A3 INC DPTR
\ 00004F E0 MOVX A,@DPTR
\ 000050 F4 CPL A
\ ??ZDP_MatchDescReq_4:
\ 000051 700B JNZ ??ZDP_MatchDescReq_3
413 {
414 dstAddr->addr.shortAddr = NWK_BROADCAST_SHORTADDR_DEVRXON;
\ 000053 8A82 MOV DPL,R2
\ 000055 8B83 MOV DPH,R3
\ 000057 74FD MOV A,#-0x3
\ 000059 F0 MOVX @DPTR,A
\ 00005A A3 INC DPTR
\ 00005B 74FF MOV A,#-0x1
\ 00005D F0 MOVX @DPTR,A
415 }
416 if ( nwkAddr == NWK_BROADCAST_SHORTADDR_DEVALL )
\ ??ZDP_MatchDescReq_3:
\ 00005E 74FF MOV A,#-0x1
\ 000060 6C XRL A,R4
\ 000061 7004 JNZ ??ZDP_MatchDescReq_5
\ 000063 74FF MOV A,#-0x1
\ 000065 65.. XRL A,?V1
\ ??ZDP_MatchDescReq_5:
\ 000067 7006 JNZ ??ZDP_MatchDescReq_6
417 {
418 nwkAddr = NWK_BROADCAST_SHORTADDR_DEVRXON;
\ 000069 75..FD MOV ?V0,#-0x3
\ 00006C 75..FF MOV ?V1,#-0x1
419 }
420
421 *pBuf++ = LO_UINT16( nwkAddr ); // NWKAddrOfInterest
\ ??ZDP_MatchDescReq_6:
\ 00006F 8882 MOV DPL,R0
\ 000071 8983 MOV DPH,R1
\ 000073 E5.. MOV A,?V0
\ 000075 F0 MOVX @DPTR,A
422 *pBuf++ = HI_UINT16( nwkAddr );
\ 000076 E5.. MOV A,?V1
\ 000078 A3 INC DPTR
\ 000079 F0 MOVX @DPTR,A
\ 00007A 740E MOV A,#0xe
\ 00007C 12.... LCALL ?XSTACK_DISP0_8
\ 00007F 12.... LCALL ??Subroutine125_0 & 0xFFFF
423
424 *pBuf++ = LO_UINT16( ProfileID ); // Profile ID
\ ??CrossCallReturnLabel_220:
\ 000082 8882 MOV DPL,R0
\ 000084 8983 MOV DPH,R1
\ 000086 A3 INC DPTR
\ 000087 A3 INC DPTR
\ 000088 E5.. MOV A,?V0
\ 00008A F0 MOVX @DPTR,A
425 *pBuf++ = HI_UINT16( ProfileID );
\ 00008B E5.. MOV A,?V1
\ 00008D 8882 MOV DPL,R0
\ 00008F 8983 MOV DPH,R1
\ 000091 A3 INC DPTR
\ 000092 A3 INC DPTR
\ 000093 A3 INC DPTR
\ 000094 F0 MOVX @DPTR,A
426
427 *pBuf++ = NumInClusters; // Input cluster list
\ 000095 EE MOV A,R6
\ 000096 8882 MOV DPL,R0
\ 000098 8983 MOV DPH,R1
\ 00009A A3 INC DPTR
\ 00009B A3 INC DPTR
\ 00009C A3 INC DPTR
\ 00009D A3 INC DPTR
\ 00009E F0 MOVX @DPTR,A
\ 00009F E8 MOV A,R0
\ 0000A0 2405 ADD A,#0x5
\ 0000A2 F8 MOV R0,A
\ 0000A3 5001 JNC ??ZDP_MatchDescReq_7
\ 0000A5 09 INC R1
428 if ( NumInClusters )
\ ??ZDP_MatchDescReq_7:
\ 0000A6 EE MOV A,R6
\ 0000A7 6016 JZ ??ZDP_MatchDescReq_8
429 {
430 for (i=0; i<NumInClusters; ++i) {
\ 0000A9 7C00 MOV R4,#0x0
\ 0000AB 7410 MOV A,#0x10
\ 0000AD 12.... LCALL ?XSTACK_DISP0_8
\ 0000B0 12.... LCALL ??Subroutine125_0 & 0xFFFF
431 *pBuf++ = LO_UINT16( InClusterList[i] );
\ ??CrossCallReturnLabel_221:
\ 0000B3 12.... LCALL ?Subroutine11 & 0xFFFF
432 *pBuf++ = HI_UINT16( InClusterList[i] );
433 }
\ ??CrossCallReturnLabel_4:
\ 0000B6 5001 JNC ??ZDP_MatchDescReq_9
\ 0000B8 09 INC R1
\ ??ZDP_MatchDescReq_9:
\ 0000B9 0C INC R4
\ 0000BA EC MOV A,R4
\ 0000BB C3 CLR C
\ 0000BC 9E SUBB A,R6
\ 0000BD 40F4 JC ??CrossCallReturnLabel_221
434 }
435
436 *pBuf++ = NumOutClusters; // Output cluster list
\ ??ZDP_MatchDescReq_8:
\ 0000BF ED MOV A,R5
\ 0000C0 8882 MOV DPL,R0
\ 0000C2 8983 MOV DPH,R1
\ 0000C4 F0 MOVX @DPTR,A
\ 0000C5 A3 INC DPTR
\ 0000C6 A882 MOV R0,DPL
\ 0000C8 A983 MOV R1,DPH
437 if ( NumOutClusters )
\ 0000CA 6016 JZ ??ZDP_MatchDescReq_10
438 {
439 for (i=0; i<NumOutClusters; ++i) {
\ 0000CC 7C00 MOV R4,#0x0
\ 0000CE 7413 MOV A,#0x13
\ 0000D0 12.... LCALL ?XSTACK_DISP0_8
\ 0000D3 12.... LCALL ??Subroutine125_0 & 0xFFFF
440 *pBuf++ = LO_UINT16( OutClusterList[i] );
\ ??CrossCallReturnLabel_222:
\ 0000D6 12.... LCALL ?Subroutine11 & 0xFFFF
441 *pBuf++ = HI_UINT16( OutClusterList[i] );
442 }
\ ??CrossCallReturnLabel_5:
\ 0000D9 5001 JNC ??ZDP_MatchDescReq_11
\ 0000DB 09 INC R1
\ ??ZDP_MatchDescReq_11:
\ 0000DC 0C INC R4
\ 0000DD EC MOV A,R4
\ 0000DE C3 CLR C
\ 0000DF 9D SUBB A,R5
\ 0000E0 40F4 JC ??CrossCallReturnLabel_222
443 }
444
445 return fillAndSend( &ZDP_TransID, dstAddr, Match_Desc_req, len );
\ ??ZDP_MatchDescReq_10:
\ 0000E2 ; Setup parameters for call to function fillAndSend
\ 0000E2 75..06 MOV ?V0,#0x6
\ 0000E5 75..00 MOV ?V1,#0x0
\ 0000E8 78.. MOV R0,#?V0
\ 0000EA 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 0000ED EF MOV A,R7
\ 0000EE F9 MOV R1,A
\ 0000EF EA MOV A,R2
\ 0000F0 FC MOV R4,A
\ 0000F1 EB MOV A,R3
\ 0000F2 FD MOV R5,A
\ 0000F3 12.... LCALL ?Subroutine64 & 0xFFFF
\ ??CrossCallReturnLabel_289:
\ 0000F6 12.... LCALL ?DEALLOC_XSTACK8
\ ??ZDP_MatchDescReq_1:
\ 0000F9 80.. SJMP ??Subroutine113_0
446 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine11:
\ 000000 EC MOV A,R4
\ 000001 25E0 ADD A,0xE0 /* A */
\ 000003 F5.. MOV ?V2,A
\ 000005 E4 CLR A
\ 000006 33 RLC A
\ 000007 F5.. MOV ?V3,A
\ 000009 E5.. MOV A,?V0
\ 00000B 25.. ADD A,?V2
\ 00000D F5.. MOV ?V4,A
\ 00000F E5.. MOV A,?V1
\ 000011 35.. ADDC A,?V3
\ 000013 F5.. MOV ?V5,A
\ 000015 85..82 MOV DPL,?V4
\ 000018 F583 MOV DPH,A
\ 00001A 12.... LCALL ?Subroutine103 & 0xFFFF
\ ??CrossCallReturnLabel_166:
\ 00001D 12.... LCALL ?Subroutine97 & 0xFFFF
\ ??CrossCallReturnLabel_155:
\ 000020 12.... LCALL ?Subroutine103 & 0xFFFF
\ ??CrossCallReturnLabel_167:
\ 000023 A3 INC DPTR
\ 000024 F0 MOVX @DPTR,A
\ 000025 E8 MOV A,R0
\ 000026 2402 ADD A,#0x2
\ 000028 F8 MOV R0,A
\ 000029 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine113_0:
\ 000000 7F06 MOV R7,#0x6
\ 000002 02.... LJMP ?BANKED_LEAVE_XDATA
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine125_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
\ ?Subroutine103:
\ 000000 E0 MOVX A,@DPTR
\ 000001 8882 MOV DPL,R0
\ 000003 8983 MOV DPH,R1
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine97:
\ 000000 F0 MOVX @DPTR,A
\ 000001 ; Setup parameters for call to function osal_memcpy
\ 000001 85..82 MOV DPL,?V4
\ 000004 85..83 MOV DPH,?V5
\ 000007 A3 INC DPTR
\ 000008 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine47:
\ 000000 E9 MOV A,R1
\ 000001 FE MOV R6,A
\ 000002 REQUIRE ??Subroutine143_0
\ 000002 ; // Fall through to label ??Subroutine143_0
447
448 /*********************************************************************
449 * @fn ZDP_SimpleDescReq
450 *
451 * @brief This builds and send a NWK_Simple_Desc_req
452 * message. This function sends unicast message to the
453 * destination device.
454 *
455 * @param dstAddr - destination address
456 * @param nwkAddr - 16 bit address
457 * @param epIntf - endpoint/interface
458 * @param SecurityEnable - Security Options
459 *
460 * @return afStatus_t
461 */
\ In segment BANKED_CODE, align 1, keep-with-next
462 afStatus_t ZDP_SimpleDescReq( zAddrType_t *dstAddr, uint16 nwkAddr,
\ ZDP_SimpleDescReq:
463 byte endPoint, byte SecurityEnable )
464
465 {
\ 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
466 (void)SecurityEnable; // Intentionally unreferenced parameter
467
468 ZDP_TmpBuf[0] = LO_UINT16( nwkAddr );
\ 000005 12.... LCALL ?Subroutine18 & 0xFFFF
469 ZDP_TmpBuf[1] = HI_UINT16( nwkAddr );
\ ??CrossCallReturnLabel_23:
\ 000008 12.... LCALL ?Subroutine13 & 0xFFFF
470 ZDP_TmpBuf[2] = endPoint;
471
472 return fillAndSend( &ZDP_TransID, dstAddr, Simple_Desc_req, 3 );
\ ??CrossCallReturnLabel_8:
\ 00000B ; Setup parameters for call to function fillAndSend
\ 00000B 75..04 MOV ?V0,#0x4
\ 00000E 75..00 MOV ?V1,#0x0
\ 000011 78.. MOV R0,#?V0
\ 000013 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000016 7903 MOV R1,#0x3
\ 000018 02.... LJMP ??Subroutine110_0 & 0xFFFF
473 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine13:
\ 000000 12.... LCALL ?Subroutine79 & 0xFFFF
\ ??CrossCallReturnLabel_239:
\ 000003 A3 INC DPTR
\ 000004 E9 MOV A,R1
\ 000005 F0 MOVX @DPTR,A
\ 000006 22 RET
474
475 /*********************************************************************
476 * @fn ZDP_UserDescSet
477 *
478 * @brief This builds and send a User_Desc_set message to set
479 * the user descriptor. This function sends unicast
480 * message to the destination device.
481 *
482 * @param dstAddr - destination address
483 * @param nwkAddr - 16 bit address
484 * @param UserDescriptor - user descriptor
485 * @param SecurityEnable - Security Options
486 *
487 * @return afStatus_t
488 */
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine2:
\ 000000 AC.. MOV R4,?V4
\ 000002 AD.. MOV R5,?V5
\ 000004 12.... LCALL ?Subroutine64 & 0xFFFF
\ ??CrossCallReturnLabel_290:
\ 000007 12.... LCALL ?DEALLOC_XSTACK8
\ 00000A REQUIRE ??Subroutine113_0
\ 00000A ; // Fall through to label ??Subroutine113_0
\ In segment BANKED_CODE, align 1, keep-with-next
489 afStatus_t ZDP_UserDescSet( zAddrType_t *dstAddr, uint16 nwkAddr,
\ ZDP_UserDescSet:
490 UserDescriptorFormat_t *UserDescriptor,
491 byte SecurityEnable )
492 {
\ 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: 0
\ 000005 8A.. MOV ?V4,R2
\ 000007 8B.. MOV ?V5,R3
493 uint8 *pBuf = ZDP_TmpBuf;
\ 000009 12.... LCALL ?Subroutine52 & 0xFFFF
\ ??CrossCallReturnLabel_195:
\ 00000C 740E MOV A,#0xe
\ 00000E 12.... LCALL ?XSTACK_DISP0_8
\ 000011 12.... LCALL ?Subroutine36 & 0xFFFF
494 byte len = (UserDescriptor->len < AF_MAX_USER_DESCRIPTOR_LEN) ?
495 UserDescriptor->len : AF_MAX_USER_DESCRIPTOR_LEN;
\ ??CrossCallReturnLabel_44:
\ 000014 C3 CLR C
\ 000015 9410 SUBB A,#0x10
\ 000017 5004 JNC ??ZDP_UserDescSet_0
\ 000019 E0 MOVX A,@DPTR
\ 00001A FF MOV R7,A
\ 00001B 8002 SJMP ??ZDP_UserDescSet_1
\ ??ZDP_UserDescSet_0:
\ 00001D 7F10 MOV R7,#0x10
496 byte addrLen = 2;
497
498 (void)SecurityEnable; // Intentionally unreferenced parameter
499
500 *pBuf++ = LO_UINT16( nwkAddr );
\ ??ZDP_UserDescSet_1:
\ 00001F EC MOV A,R4
\ 000020 8A82 MOV DPL,R2
\ 000022 8B83 MOV DPH,R3
\ 000024 F0 MOVX @DPTR,A
501 *pBuf++ = HI_UINT16( nwkAddr );
\ 000025 ED MOV A,R5
\ 000026 A3 INC DPTR
\ 000027 F0 MOVX @DPTR,A
502
503 *pBuf++ = len;
\ 000028 EF MOV A,R7
\ 000029 8A82 MOV DPL,R2
\ 00002B 8B83 MOV DPH,R3
\ 00002D 12.... LCALL ??Subroutine114_0 & 0xFFFF
504 addrLen = 3;
505
506 pBuf = osal_memcpy( pBuf, UserDescriptor->desc, len );
\ ??CrossCallReturnLabel_174:
\ 000030 AC82 MOV R4,DPL
\ 000032 AD83 MOV R5,DPH
\ 000034 8C.. MOV ?V0,R4
\ 000036 8D.. MOV ?V1,R5
\ 000038 75..00 MOV ?V2,#0x0
\ 00003B 78.. MOV R0,#?V0
\ 00003D 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 000040 EF MOV A,R7
\ 000041 FC MOV R4,A
\ 000042 7D00 MOV R5,#0x0
\ 000044 EA MOV A,R2
\ 000045 2403 ADD A,#0x3
\ 000047 FA MOV R2,A
\ 000048 5001 JNC ??ZDP_UserDescSet_2
\ 00004A 0B INC R3
\ ??ZDP_UserDescSet_2:
\ 00004B 12.... LCALL ??Subroutine123_0 & 0xFFFF
\ ??CrossCallReturnLabel_207:
\ 00004E 12.... LCALL ?DEALLOC_XSTACK8
507 osal_memset( pBuf, AF_USER_DESCRIPTOR_FILL, AF_MAX_USER_DESCRIPTOR_LEN-len );
\ 000051 ; Setup parameters for call to function osal_memset
\ 000051 EF MOV A,R7
\ 000052 F8 MOV R0,A
\ 000053 7410 MOV A,#0x10
\ 000055 C3 CLR C
\ 000056 98 SUBB A,R0
\ 000057 FC MOV R4,A
\ 000058 95E0 SUBB A,0xE0 /* A */
\ 00005A FD MOV R5,A
\ 00005B 7920 MOV R1,#0x20
\ 00005D 12.... LCALL `??osal_memset::?relay`; Banked call to: osal_memset
508
509 return fillAndSend( &ZDP_TransID, dstAddr, User_Desc_set, (AF_MAX_USER_DESCRIPTOR_LEN + addrLen) );
\ 000060 ; Setup parameters for call to function fillAndSend
\ 000060 75..14 MOV ?V0,#0x14
\ 000063 75..00 MOV ?V1,#0x0
\ 000066 78.. MOV R0,#?V0
\ 000068 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00006B 7913 MOV R1,#0x13
\ 00006D 02.... LJMP ?Subroutine2 & 0xFFFF
510 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine114_0:
\ 000000 A3 INC DPTR
\ 000001 A3 INC DPTR
\ 000002 REQUIRE ??Subroutine115_0
\ 000002 ; // Fall through to label ??Subroutine115_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine36:
\ 000000 12.... LCALL ?Subroutine81 & 0xFFFF
\ ??CrossCallReturnLabel_329:
\ 000003 8882 MOV DPL,R0
\ 000005 F583 MOV DPH,A
\ 000007 E0 MOVX A,@DPTR
\ 000008 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine52:
\ 000000 90.... MOV DPTR,#ZDP_TmpBuf
\ 000003 REQUIRE ??Subroutine121_0
\ 000003 ; // Fall through to label ??Subroutine121_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine121_0:
\ 000000 12.... LCALL ??Subroutine130_0 & 0xFFFF
\ ??CrossCallReturnLabel_237:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine123_0:
\ 000000 12.... LCALL `??osal_memcpy::?relay`; Banked call to: osal_memcpy
\ 000003 7403 MOV A,#0x3
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine130_0:
\ 000000 E0 MOVX A,@DPTR
\ 000001 FA MOV R2,A
\ 000002 A3 INC DPTR
\ 000003 E0 MOVX A,@DPTR
\ 000004 FB MOV R3,A
\ 000005 22 RET
511
512 /*********************************************************************
513 * @fn ZDP_ServerDiscReq
514 *
515 * @brief Build and send a Server_Discovery_req request message.
516 *
517 * @param serverMask - 16-bit bit-mask of server services being sought.
518 * @param SecurityEnable - Security Options
519 *
520 * @return afStatus_t
521 */
\ In segment BANKED_CODE, align 1, keep-with-next
522 afStatus_t ZDP_ServerDiscReq( uint16 serverMask, byte SecurityEnable )
\ ZDP_ServerDiscReq:
523 {
\ 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: 9
\ 000005 74F7 MOV A,#-0x9
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A 12.... LCALL ?Subroutine47 & 0xFFFF
524 uint8 *pBuf = ZDP_TmpBuf;
525 zAddrType_t dstAddr;
526
527 dstAddr.addrMode = AddrBroadcast;
\ ??CrossCallReturnLabel_320:
\ 00000D 7408 MOV A,#0x8
\ 00000F 12.... LCALL ?XSTACK_DISP0_8
\ 000012 12.... LCALL ?Subroutine19 & 0xFFFF
528 dstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR_DEVRXON;
529
530 *pBuf++ = LO_UINT16( serverMask );
\ ??CrossCallReturnLabel_24:
\ 000015 EA MOV A,R2
\ 000016 8882 MOV DPL,R0
\ 000018 8983 MOV DPH,R1
\ 00001A F0 MOVX @DPTR,A
531 *pBuf = HI_UINT16( serverMask );
\ 00001B EB MOV A,R3
\ 00001C A3 INC DPTR
\ 00001D F0 MOVX @DPTR,A
532
533 FillAndSendTxOptions( &ZDP_TransID, &dstAddr, Server_Discovery_req, 2,
534 ((SecurityEnable) ? AF_EN_SECURITY : AF_TX_OPTIONS_NONE) );
\ 00001E EE MOV A,R6
\ 00001F 90.... MOV DPTR,#ZDP_TxOptions
\ 000022 6004 JZ ??ZDP_ServerDiscReq_0
\ 000024 7440 MOV A,#0x40
\ 000026 8001 SJMP ??ZDP_ServerDiscReq_1
\ ??ZDP_ServerDiscReq_0:
\ 000028 E4 CLR A
\ ??ZDP_ServerDiscReq_1:
\ 000029 F0 MOVX @DPTR,A
\ 00002A ; Setup parameters for call to function fillAndSend
\ 00002A 75..15 MOV ?V0,#0x15
\ 00002D 75..00 MOV ?V1,#0x0
\ 000030 78.. MOV R0,#?V0
\ 000032 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000035 7902 MOV R1,#0x2
\ 000037 E9 MOV A,R1
\ 000038 12.... LCALL ?XSTACK_DISP102_8
\ 00003B 12.... LCALL ?Subroutine64 & 0xFFFF
\ ??CrossCallReturnLabel_291:
\ 00003E 12.... LCALL ?DEALLOC_XSTACK8
\ 000041 E9 MOV A,R1
\ 000042 F9 MOV R1,A
\ 000043 90.... MOV DPTR,#ZDP_TxOptions
\ 000046 E4 CLR A
\ 000047 F0 MOVX @DPTR,A
\ 000048 02.... LJMP ??Subroutine109_0 & 0xFFFF
535 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine19:
\ 000000 12.... LCALL ?Subroutine91 & 0xFFFF
\ ??CrossCallReturnLabel_145:
\ 000003 F0 MOVX @DPTR,A
\ 000004 22 RET
536
537 /*********************************************************************
538 * @fn ZDP_DeviceAnnce
539 *
540 * @brief This builds and send a Device_Annce message. This
541 * function sends a broadcast message.
542 *
543 * @param nwkAddr - 16 bit address of the device
544 * @param IEEEAddr - 64 bit address of the device
545 * @param capabilities - device capabilities. This field is only
546 * sent for v1.1 networks.
547 * @param SecurityEnable - Security Options
548 *
549 * @return afStatus_t
550 */
\ In segment BANKED_CODE, align 1, keep-with-next
551 afStatus_t ZDP_DeviceAnnce( uint16 nwkAddr, uint8 *IEEEAddr,
\ ZDP_DeviceAnnce:
552 byte capabilities, byte SecurityEnable )
553 {
\ 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: 9
\ 000005 74F7 MOV A,#-0x9
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A E9 MOV A,R1
\ 00000B FE MOV R6,A
554 zAddrType_t dstAddr;
555 uint8 len;
556
557 (void)SecurityEnable; // Intentionally unreferenced parameter
558
559 dstAddr.addrMode = (afAddrMode_t)AddrBroadcast;
\ 00000C 7408 MOV A,#0x8
\ 00000E 12.... LCALL ?XSTACK_DISP0_8
\ 000011 12.... LCALL ?Subroutine19 & 0xFFFF
560 dstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR_DEVRXON;
561
562 ZDP_TmpBuf[0] = LO_UINT16( nwkAddr );
\ ??CrossCallReturnLabel_25:
\ 000014 12.... LCALL ?Subroutine54 & 0xFFFF
\ ??CrossCallReturnLabel_214:
\ 000017 EA MOV A,R2
\ 000018 12.... LCALL ?Subroutine21 & 0xFFFF
563 ZDP_TmpBuf[1] = HI_UINT16( nwkAddr );
\ ??CrossCallReturnLabel_26:
\ 00001B EB MOV A,R3
\ 00001C F0 MOVX @DPTR,A
564 osal_cpyExtAddr( &ZDP_TmpBuf[2], IEEEAddr );
\ 00001D ; Setup parameters for call to function sAddrExtCpy
\ 00001D 90.... MOV DPTR,#ZDP_TmpBuf
\ 000020 E0 MOVX A,@DPTR
\ 000021 2402 ADD A,#0x2
\ 000023 FA MOV R2,A
\ 000024 A3 INC DPTR
\ 000025 E0 MOVX A,@DPTR
\ 000026 3400 ADDC A,#0x0
\ 000028 FB MOV R3,A
\ 000029 12.... LCALL `??sAddrExtCpy::?relay`; Banked call to: sAddrExtCpy
565 len = 2 + Z_EXTADDR_LEN;
566
567 ZDP_TmpBuf[10] = capabilities;
\ 00002C 12.... LCALL ?Subroutine108 & 0xFFFF
\ ??CrossCallReturnLabel_336:
\ 00002F C8 XCH A,R0
\ 000030 240A ADD A,#0xa
\ 000032 F582 MOV DPL,A
\ 000034 E4 CLR A
\ 000035 38 ADDC A,R0
\ 000036 F583 MOV DPH,A
\ 000038 EE MOV A,R6
\ 000039 F0 MOVX @DPTR,A
568 len++;
569
570 return fillAndSend( &ZDP_TransID, &dstAddr, Device_annce, len );
\ 00003A ; Setup parameters for call to function fillAndSend
\ 00003A 75..13 MOV ?V0,#0x13
\ 00003D 75..00 MOV ?V1,#0x0
\ 000040 78.. MOV R0,#?V0
\ 000042 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000045 790B MOV R1,#0xb
\ 000047 02.... LJMP ?Subroutine6 & 0xFFFF
571 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine54:
\ 000000 90.... MOV DPTR,#ZDP_TmpBuf
\ 000003 REQUIRE ??Subroutine124_0
\ 000003 ; // Fall through to label ??Subroutine124_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine124_0:
\ 000000 12.... LCALL ?Subroutine89 & 0xFFFF
\ ??CrossCallReturnLabel_219:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine21:
\ 000000 12.... LCALL ?Subroutine79 & 0xFFFF
\ ??CrossCallReturnLabel_240:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine108:
\ 000000 90.... MOV DPTR,#ZDP_TmpBuf
\ 000003 REQUIRE ??Subroutine145_0
\ 000003 ; // Fall through to label ??Subroutine145_0
572
573 /*********************************************************************
574 * Address Responses
575 */
576
577 /*********************************************************************
578 * @fn zdpProcessAddrReq
579 *
580 * @brief Process an incoming NWK_addr_req or IEEE_addr_req message and then
581 * build and send a corresponding NWK_addr_rsp or IEEE_addr_rsp msg.
582 *
583 * @param inMsg - incoming message
584 *
585 * @return none
586 */
\ In segment BANKED_CODE, align 1, keep-with-next
587 void zdpProcessAddrReq( zdoIncomingMsg_t *inMsg )
\ zdpProcessAddrReq:
588 {
\ 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: 16
\ 000005 74F0 MOV A,#-0x10
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A 8A.. MOV ?V2,R2
\ 00000C 8B.. MOV ?V3,R3
589 associated_devices_t *pAssoc;
590 uint8 reqType;
591 uint16 aoi = INVALID_NODE_ADDR;
\ 00000E 7EFE MOV R6,#-0x2
\ 000010 7FFF MOV R7,#-0x1
592 uint8 *ieee = NULL;
\ 000012 75..00 MOV ?V0,#0x0
\ 000015 75..00 MOV ?V1,#0x0
593
594 reqType = inMsg->asdu[(inMsg->clusterID == NWK_addr_req) ? Z_EXTADDR_LEN : sizeof( uint16 ) ];
\ 000018 EA MOV A,R2
\ 000019 12.... LCALL ?Subroutine45 & 0xFFFF
\ ??CrossCallReturnLabel_183:
\ 00001C 7004 JNZ ??zdpProcessAddrReq_0
\ 00001E 7808 MOV R0,#0x8
\ 000020 8002 SJMP ??zdpProcessAddrReq_1
\ ??zdpProcessAddrReq_0:
\ 000022 7802 MOV R0,#0x2
\ ??zdpProcessAddrReq_1:
\ 000024 EA MOV A,R2
\ 000025 12.... LCALL ??Subroutine116_0 & 0xFFFF
\ ??CrossCallReturnLabel_179:
\ 000028 28 ADD A,R0
\ 000029 FA MOV R2,A
\ 00002A A3 INC DPTR
\ 00002B E0 MOVX A,@DPTR
\ 00002C 3400 ADDC A,#0x0
\ 00002E 8A82 MOV DPL,R2
\ 000030 F583 MOV DPH,A
\ 000032 E0 MOVX A,@DPTR
\ 000033 F5.. MOV ?V6,A
595
596 if ( inMsg->clusterID == NWK_addr_req )
\ 000035 E5.. MOV A,?V2
\ 000037 240C ADD A,#0xc
\ 000039 12.... LCALL ??Subroutine117_0 & 0xFFFF
\ ??CrossCallReturnLabel_176:
\ 00003C 49 ORL A,R1
\ 00003D 704E JNZ ??zdpProcessAddrReq_2
597
598 {
599 ieee = inMsg->asdu;
\ 00003F E5.. MOV A,?V2
\ 000041 2413 ADD A,#0x13
\ 000043 F582 MOV DPL,A
\ 000045 E4 CLR A
\ 000046 35.. ADDC A,?V3
\ 000048 12.... LCALL ?Subroutine43 & 0xFFFF
600
601 if ( osal_ExtAddrEqual( saveExtAddr, ieee ) )
\ ??CrossCallReturnLabel_227:
\ 00004B ; Setup parameters for call to function sAddrExtCmp
\ 00004B AC.. MOV R4,?V0
\ 00004D FD MOV R5,A
\ 00004E 7A.. MOV R2,#saveExtAddr & 0xff
\ 000050 7B.. MOV R3,#(saveExtAddr >> 8) & 0xff
\ 000052 12.... LCALL `??sAddrExtCmp::?relay`; Banked call to: sAddrExtCmp
\ 000055 E9 MOV A,R1
\ 000056 6006 JZ ??zdpProcessAddrReq_3
602 {
603 aoi = ZDAppNwkAddr.addr.shortAddr;
\ 000058 12.... LCALL ?Subroutine37 & 0xFFFF
604 }
\ ??CrossCallReturnLabel_265:
\ 00005B 02.... LJMP ??zdpProcessAddrReq_4 & 0xFFFF
605 // Handle response for sleeping end devices
606 else if ( (ZSTACK_ROUTER_BUILD)
607 && (((pAssoc = AssocGetWithExt( ieee )) != NULL)
608 && (pAssoc->nodeRelation == CHILD_RFD)) )
\ ??zdpProcessAddrReq_3:
\ 00005E ; Setup parameters for call to function AssocGetWithExt
\ 00005E AA.. MOV R2,?V0
\ 000060 AB.. MOV R3,?V1
\ 000062 12.... LCALL `??AssocGetWithExt::?relay`; Banked call to: AssocGetWithExt
\ 000065 8B.. MOV ?V5,R3
\ 000067 A9.. MOV R1,?V5
\ 000069 EA MOV A,R2
\ 00006A 49 ORL A,R1
\ 00006B 7003 JNZ $+5
\ 00006D 02.... LJMP ??zdpProcessAddrReq_5 & 0xFFFF
\ 000070 8A82 MOV DPL,R2
\ 000072 8B83 MOV DPH,R3
\ 000074 A3 INC DPTR
\ 000075 A3 INC DPTR
\ 000076 A3 INC DPTR
\ 000077 A3 INC DPTR
\ 000078 E0 MOVX A,@DPTR
\ 000079 6401 XRL A,#0x1
\ 00007B 6003 JZ $+5
\ 00007D 02.... LJMP ??zdpProcessAddrReq_5 & 0xFFFF
609 {
610 aoi = pAssoc->shortAddr;
\ 000080 8A82 MOV DPL,R2
\ 000082 8B83 MOV DPH,R3
\ 000084 12.... LCALL ??Subroutine135_0 & 0xFFFF
611 if ( reqType != ZDP_ADDR_REQTYPE_SINGLE )
\ ??CrossCallReturnLabel_260:
\ 000087 E5.. MOV A,?V6
\ 000089 707A JNZ ??zdpProcessAddrReq_6
\ 00008B 807B SJMP ??zdpProcessAddrReq_4
612 reqType = 0xFF; // Force Invalid
613 }
614 }
\ ??zdpProcessAddrReq_2:
\ 00008D 12.... LCALL ?Subroutine68 & 0xFFFF
\ ??CrossCallReturnLabel_180:
\ 000090 F8 MOV R0,A
\ 000091 A3 INC DPTR
\ 000092 E0 MOVX A,@DPTR
\ 000093 8882 MOV DPL,R0
\ 000095 F583 MOV DPH,A
\ 000097 E0 MOVX A,@DPTR
\ 000098 FA MOV R2,A
\ 000099 A3 INC DPTR
\ 00009A E0 MOVX A,@DPTR
\ 00009B F8 MOV R0,A
\ 00009C E4 CLR A
\ 00009D C8 XCH A,R0
\ 00009E F9 MOV R1,A
\ 00009F EA MOV A,R2
\ 0000A0 28 ADD A,R0
\ 0000A1 FE MOV R6,A
\ 0000A2 E4 CLR A
\ 0000A3 39 ADDC A,R1
\ 0000A4 FF MOV R7,A
615 else // if ( inMsg->clusterID == IEEE_addr_req )
616 {
617 aoi = BUILD_UINT16( inMsg->asdu[0], inMsg->asdu[1] );
618
619 if ( aoi == ZDAppNwkAddr.addr.shortAddr )
\ 0000A5 90.... MOV DPTR,#ZDAppNwkAddr
\ 0000A8 E0 MOVX A,@DPTR
\ 0000A9 6E XRL A,R6
\ 0000AA 7003 JNZ ??zdpProcessAddrReq_7
\ 0000AC A3 INC DPTR
\ 0000AD E0 MOVX A,@DPTR
\ 0000AE 6F XRL A,R7
\ ??zdpProcessAddrReq_7:
\ 0000AF 7008 JNZ ??zdpProcessAddrReq_8
620 {
621 ieee = saveExtAddr;
\ 0000B1 75.... MOV ?V0,#saveExtAddr & 0xff
\ 0000B4 75.... MOV ?V1,#(saveExtAddr >> 8) & 0xff
\ 0000B7 804F SJMP ??zdpProcessAddrReq_4
622 }
623 else if ( (ZSTACK_ROUTER_BUILD)
624 && (((pAssoc = AssocGetWithShort( aoi )) != NULL)
625 && (pAssoc->nodeRelation == CHILD_RFD)) )
\ ??zdpProcessAddrReq_8:
\ 0000B9 ; Setup parameters for call to function AssocGetWithShort
\ 0000B9 E9 MOV A,R1
\ 0000BA FB MOV R3,A
\ 0000BB 12.... LCALL `??AssocGetWithShort::?relay`; Banked call to: AssocGetWithShort
\ 0000BE 8B.. MOV ?V5,R3
\ 0000C0 A9.. MOV R1,?V5
\ 0000C2 EA MOV A,R2
\ 0000C3 49 ORL A,R1
\ 0000C4 6052 JZ ??zdpProcessAddrReq_5
\ 0000C6 8A82 MOV DPL,R2
\ 0000C8 8B83 MOV DPH,R3
\ 0000CA A3 INC DPTR
\ 0000CB A3 INC DPTR
\ 0000CC A3 INC DPTR
\ 0000CD A3 INC DPTR
\ 0000CE E0 MOVX A,@DPTR
\ 0000CF 6401 XRL A,#0x1
\ 0000D1 7045 JNZ ??zdpProcessAddrReq_5
626 {
627 AddrMgrEntry_t addrEntry;
628 addrEntry.user = ADDRMGR_USER_DEFAULT;
\ 0000D3 7403 MOV A,#0x3
\ 0000D5 12.... LCALL ?XSTACK_DISP0_8
\ 0000D8 E4 CLR A
\ 0000D9 F0 MOVX @DPTR,A
629 addrEntry.index = pAssoc->addrIdx;
\ 0000DA 8A82 MOV DPL,R2
\ 0000DC 8B83 MOV DPH,R3
\ 0000DE A3 INC DPTR
\ 0000DF A3 INC DPTR
\ 0000E0 12.... LCALL ??Subroutine144_0 & 0xFFFF
\ ??CrossCallReturnLabel_322:
\ 0000E3 740E MOV A,#0xe
\ 0000E5 12.... LCALL ?XSTACK_DISP0_8
\ 0000E8 12.... LCALL ??Subroutine134_0 & 0xFFFF
630 if ( AddrMgrEntryGet( &addrEntry ) )
\ ??CrossCallReturnLabel_250:
\ 0000EB ; Setup parameters for call to function AddrMgrEntryGet
\ 0000EB 7403 MOV A,#0x3
\ 0000ED 12.... LCALL ?XSTACK_DISP101_8
\ 0000F0 12.... LCALL `??AddrMgrEntryGet::?relay`; Banked call to: AddrMgrEntryGet
\ 0000F3 E9 MOV A,R1
\ 0000F4 600B JZ ??zdpProcessAddrReq_9
631 {
632 ieee = addrEntry.extAddr;
\ 0000F6 7406 MOV A,#0x6
\ 0000F8 12.... LCALL ?XSTACK_DISP0_8
\ 0000FB 8582.. MOV ?V0,DPL
\ 0000FE 8583.. MOV ?V1,DPH
633 }
634
635 if ( reqType != ZDP_ADDR_REQTYPE_SINGLE )
\ ??zdpProcessAddrReq_9:
\ 000101 E5.. MOV A,?V6
\ 000103 6003 JZ ??zdpProcessAddrReq_4
636 reqType = 0xFF; // Force Invalid
\ ??zdpProcessAddrReq_6:
\ 000105 75..FF MOV ?V6,#-0x1
637 }
638 }
639
640 if ( ((aoi != INVALID_NODE_ADDR) && (ieee != NULL)) || (inMsg->wasBroadcast == FALSE) )
\ ??zdpProcessAddrReq_4:
\ 000108 74FE MOV A,#-0x2
\ 00010A 6E XRL A,R6
\ 00010B 7003 JNZ ??zdpProcessAddrReq_10
\ 00010D 74FF MOV A,#-0x1
\ 00010F 6F XRL A,R7
\ ??zdpProcessAddrReq_10:
\ 000110 6006 JZ ??zdpProcessAddrReq_5
\ 000112 E5.. MOV A,?V0
\ 000114 45.. ORL A,?V1
\ 000116 700C JNZ ??zdpProcessAddrReq_11
\ ??zdpProcessAddrReq_5:
\ 000118 E5.. MOV A,?V2
\ 00011A 240B ADD A,#0xb
\ 00011C 12.... LCALL ??Subroutine117_0 & 0xFFFF
\ ??CrossCallReturnLabel_177:
\ 00011F 6003 JZ $+5
\ 000121 02.... LJMP ??zdpProcessAddrReq_12 & 0xFFFF
641 {
642 uint8 stat;
643 uint8 *pBuf = ZDP_TmpBuf;
\ ??zdpProcessAddrReq_11:
\ 000124 12.... LCALL ?Subroutine52 & 0xFFFF
644 // Status + IEEE-Addr + Nwk-Addr.
645 uint8 len = 1 + Z_EXTADDR_LEN + 2;
\ ??CrossCallReturnLabel_196:
\ 000127 75..0B MOV ?V5,#0xb
646
647 // If aoi and iee are both setup, we found results
648 if ( (aoi != INVALID_NODE_ADDR) && (ieee != NULL) )
\ 00012A 74FE MOV A,#-0x2
\ 00012C 6E XRL A,R6
\ 00012D 7003 JNZ ??zdpProcessAddrReq_13
\ 00012F 74FF MOV A,#-0x1
\ 000131 6F XRL A,R7
\ ??zdpProcessAddrReq_13:
\ 000132 601A JZ ??zdpProcessAddrReq_14
\ 000134 E5.. MOV A,?V0
\ 000136 45.. ORL A,?V1
\ 000138 6014 JZ ??zdpProcessAddrReq_14
649 {
650 stat = ((reqType == ZDP_ADDR_REQTYPE_SINGLE) || (reqType == ZDP_ADDR_REQTYPE_EXTENDED))
651 ? ZDP_SUCCESS : ZDP_INVALID_REQTYPE;
\ 00013A E5.. MOV A,?V6
\ 00013C 6006 JZ ??zdpProcessAddrReq_15
\ 00013E 7401 MOV A,#0x1
\ 000140 65.. XRL A,?V6
\ 000142 7005 JNZ ??zdpProcessAddrReq_16
\ ??zdpProcessAddrReq_15:
\ 000144 75..00 MOV ?V4,#0x0
\ 000147 801A SJMP ??zdpProcessAddrReq_17
\ ??zdpProcessAddrReq_16:
\ 000149 75..80 MOV ?V4,#-0x80
\ 00014C 8015 SJMP ??zdpProcessAddrReq_17
652 }
653 else
654 {
655 // not found and the req was unicast to this device
656 stat = ZDP_DEVICE_NOT_FOUND;
\ ??zdpProcessAddrReq_14:
\ 00014E 75..81 MOV ?V4,#-0x7f
657
658 // Fill in the missing field with this device's address
659 if ( inMsg->clusterID == NWK_addr_req )
\ 000151 E5.. MOV A,?V2
\ 000153 12.... LCALL ?Subroutine45 & 0xFFFF
\ ??CrossCallReturnLabel_184:
\ 000156 7005 JNZ ??zdpProcessAddrReq_18
660 {
661 aoi = ZDAppNwkAddr.addr.shortAddr;
\ 000158 12.... LCALL ?Subroutine37 & 0xFFFF
662 }
\ ??CrossCallReturnLabel_266:
\ 00015B 8006 SJMP ??zdpProcessAddrReq_17
663 else
664 {
665 ieee = saveExtAddr;
\ ??zdpProcessAddrReq_18:
\ 00015D 75.... MOV ?V0,#saveExtAddr & 0xff
\ 000160 75.... MOV ?V1,#(saveExtAddr >> 8) & 0xff
666 }
667 }
668
669 *pBuf++ = stat;
\ ??zdpProcessAddrReq_17:
\ 000163 8A82 MOV DPL,R2
\ 000165 8B83 MOV DPH,R3
\ 000167 E5.. MOV A,?V4
\ 000169 12.... LCALL ??Subroutine122_0 & 0xFFFF
670
671 pBuf = osal_cpyExtAddr( pBuf, ieee );
\ ??CrossCallReturnLabel_201:
\ 00016C ; Setup parameters for call to function sAddrExtCpy
\ 00016C AC.. MOV R4,?V0
\ 00016E AD.. MOV R5,?V1
\ 000170 12.... LCALL `??sAddrExtCpy::?relay`; Banked call to: sAddrExtCpy
\ 000173 7401 MOV A,#0x1
\ 000175 12.... LCALL ?XSTACK_DISP0_8
\ 000178 12.... LCALL ??Subroutine142_0 & 0xFFFF
672
673 *pBuf++ = LO_UINT16( aoi );
\ ??CrossCallReturnLabel_313:
\ 00017B 7401 MOV A,#0x1
\ 00017D 12.... LCALL ?XSTACK_DISP0_8
\ 000180 12.... LCALL ??Subroutine124_0 & 0xFFFF
\ ??CrossCallReturnLabel_211:
\ 000183 EE MOV A,R6
\ 000184 F0 MOVX @DPTR,A
674 *pBuf++ = HI_UINT16( aoi );
\ 000185 7401 MOV A,#0x1
\ 000187 12.... LCALL ?XSTACK_DISP0_8
\ 00018A 12.... LCALL ??Subroutine124_0 & 0xFFFF
\ ??CrossCallReturnLabel_212:
\ 00018D A3 INC DPTR
\ 00018E EF MOV A,R7
\ 00018F F0 MOVX @DPTR,A
675
676 if ( ZSTACK_ROUTER_BUILD )
677 {
678 if ( (reqType == ZDP_ADDR_REQTYPE_EXTENDED) && (aoi == ZDAppNwkAddr.addr.shortAddr)
679 && (stat == ZDP_SUCCESS) )
\ 000190 7401 MOV A,#0x1
\ 000192 65.. XRL A,?V6
\ 000194 6003 JZ $+5
\ 000196 02.... LJMP ??zdpProcessAddrReq_19 & 0xFFFF
\ 000199 90.... MOV DPTR,#ZDAppNwkAddr
\ 00019C E0 MOVX A,@DPTR
\ 00019D 6E XRL A,R6
\ 00019E 7003 JNZ ??zdpProcessAddrReq_20
\ 0001A0 A3 INC DPTR
\ 0001A1 E0 MOVX A,@DPTR
\ 0001A2 6F XRL A,R7
\ ??zdpProcessAddrReq_20:
\ 0001A3 6003 JZ $+5
\ 0001A5 02.... LJMP ??zdpProcessAddrReq_19 & 0xFFFF
\ 0001A8 E5.. MOV A,?V4
\ 0001AA 6003 JZ $+5
\ 0001AC 02.... LJMP ??zdpProcessAddrReq_19 & 0xFFFF
680 {
681 uint8 cnt = 0;
\ 0001AF 85..82 MOV DPL,?XSP + 0
\ 0001B2 85..83 MOV DPH,?XSP + 1
\ 0001B5 E4 CLR A
\ 0001B6 F0 MOVX @DPTR,A
682 uint16 *list = AssocMakeList( &cnt );
\ 0001B7 ; Setup parameters for call to function AssocMakeList
\ 0001B7 AA.. MOV R2,?XSP + 0
\ 0001B9 AB.. MOV R3,?XSP + 1
\ 0001BB 12.... LCALL `??AssocMakeList::?relay`; Banked call to: AssocMakeList
\ 0001BE 8A.. MOV ?V0,R2
\ 0001C0 8B.. MOV ?V1,R3
\ 0001C2 A8.. MOV R0,?V0
\ 0001C4 A9.. MOV R1,?V1
683
684 if ( list != NULL )
\ 0001C6 EA MOV A,R2
\ 0001C7 49 ORL A,R1
\ 0001C8 7003 JNZ $+5
\ 0001CA 02.... LJMP ??zdpProcessAddrReq_21 & 0xFFFF
685 {
686 byte idx = inMsg->asdu[(((inMsg->clusterID == NWK_addr_req) ? Z_EXTADDR_LEN : sizeof( uint16 )) + 1)];
\ 0001CD E5.. MOV A,?V2
\ 0001CF 12.... LCALL ?Subroutine73 & 0xFFFF
\ ??CrossCallReturnLabel_117:
\ 0001D2 35.. ADDC A,?V3
\ 0001D4 F583 MOV DPH,A
\ 0001D6 12.... LCALL ?Subroutine48 & 0xFFFF
\ ??CrossCallReturnLabel_65:
\ 0001D9 7004 JNZ ??zdpProcessAddrReq_22
\ 0001DB 7A09 MOV R2,#0x9
\ 0001DD 8002 SJMP ??zdpProcessAddrReq_23
\ ??zdpProcessAddrReq_22:
\ 0001DF 7A03 MOV R2,#0x3
\ ??zdpProcessAddrReq_23:
\ 0001E1 12.... LCALL ?Subroutine68 & 0xFFFF
\ ??CrossCallReturnLabel_181:
\ 0001E4 2A ADD A,R2
\ 0001E5 FC MOV R4,A
\ 0001E6 A3 INC DPTR
\ 0001E7 E0 MOVX A,@DPTR
\ 0001E8 3400 ADDC A,#0x0
\ 0001EA 8C82 MOV DPL,R4
\ 0001EC F583 MOV DPH,A
\ 0001EE E0 MOVX A,@DPTR
\ 0001EF FE MOV R6,A
687 uint16 *pList = list + idx;
\ 0001F0 25E0 ADD A,0xE0 /* A */
\ 0001F2 FA MOV R2,A
\ 0001F3 E4 CLR A
\ 0001F4 33 RLC A
\ 0001F5 FB MOV R3,A
\ 0001F6 E8 MOV A,R0
\ 0001F7 2A ADD A,R2
\ 0001F8 FC MOV R4,A
\ 0001F9 E9 MOV A,R1
\ 0001FA 3B ADDC A,R3
\ 0001FB FD MOV R5,A
688
689 // NumAssocDev field is only present on success.
690 if ( cnt > idx )
\ 0001FC 85..82 MOV DPL,?XSP + 0
\ 0001FF 85..83 MOV DPH,?XSP + 1
\ 000202 E0 MOVX A,@DPTR
\ 000203 FA MOV R2,A
\ 000204 EE MOV A,R6
\ 000205 C3 CLR C
\ 000206 9A SUBB A,R2
\ 000207 500C JNC ??zdpProcessAddrReq_24
691 {
692 cnt -= idx;
\ 000209 E0 MOVX A,@DPTR
\ 00020A C3 CLR C
\ 00020B 9E SUBB A,R6
\ 00020C F0 MOVX @DPTR,A
693 len += (cnt * sizeof( uint16 ));
\ 00020D C3 CLR C
\ 00020E 33 RLC A
\ 00020F 240B ADD A,#0xb
\ 000211 F5.. MOV ?V5,A
\ 000213 8002 SJMP ??zdpProcessAddrReq_25
694 }
695 else
696 {
697 cnt = 0;
\ ??zdpProcessAddrReq_24:
\ 000215 E4 CLR A
\ 000216 F0 MOVX @DPTR,A
698 }
699 *pBuf++ = cnt;
\ ??zdpProcessAddrReq_25:
\ 000217 E0 MOVX A,@DPTR
\ 000218 C0E0 PUSH A
\ 00021A 7401 MOV A,#0x1
\ 00021C 12.... LCALL ?XSTACK_DISP0_8
\ 00021F 12.... LCALL ?Subroutine56 & 0xFFFF
\ ??CrossCallReturnLabel_82:
\ 000222 D0E0 POP A
\ 000224 F0 MOVX @DPTR,A
700 len++;
701
702 // StartIndex field is only present if NumAssocDev field is non-zero.
703 *pBuf++ = idx;
\ 000225 7401 MOV A,#0x1
\ 000227 12.... LCALL ?XSTACK_DISP0_8
\ 00022A 12.... LCALL ?Subroutine56 & 0xFFFF
\ ??CrossCallReturnLabel_83:
\ 00022D A3 INC DPTR
\ 00022E EE MOV A,R6
\ 00022F F0 MOVX @DPTR,A
\ 000230 7401 MOV A,#0x1
\ 000232 12.... LCALL ?XSTACK_DISP0_8
\ 000235 E0 MOVX A,@DPTR
\ 000236 2404 ADD A,#0x4
\ 000238 FA MOV R2,A
\ 000239 A3 INC DPTR
\ 00023A E0 MOVX A,@DPTR
\ 00023B 3400 ADDC A,#0x0
\ 00023D FB MOV R3,A
704 len++;
\ 00023E 05.. INC ?V5
\ 000240 05.. INC ?V5
\ 000242 801A SJMP ??zdpProcessAddrReq_26
705
706 while ( cnt != 0 )
707 {
708 *pBuf++ = LO_UINT16( *pList );
\ ??zdpProcessAddrReq_27:
\ 000244 8C82 MOV DPL,R4
\ 000246 8D83 MOV DPH,R5
\ 000248 12.... LCALL ??Subroutine137_0 & 0xFFFF
709 *pBuf++ = HI_UINT16( *pList );
\ ??CrossCallReturnLabel_274:
\ 00024B 5001 JNC ??zdpProcessAddrReq_28
\ 00024D 0B INC R3
710 pList++;
\ ??zdpProcessAddrReq_28:
\ 00024E EC MOV A,R4
\ 00024F 2402 ADD A,#0x2
\ 000251 FC MOV R4,A
\ 000252 5001 JNC ??zdpProcessAddrReq_29
\ 000254 0D INC R5
711 cnt--;
\ ??zdpProcessAddrReq_29:
\ 000255 85..82 MOV DPL,?XSP + 0
\ 000258 85..83 MOV DPH,?XSP + 1
\ 00025B E0 MOVX A,@DPTR
\ 00025C 14 DEC A
\ 00025D F0 MOVX @DPTR,A
712 }
\ ??zdpProcessAddrReq_26:
\ 00025E 85..82 MOV DPL,?XSP + 0
\ 000261 85..83 MOV DPH,?XSP + 1
\ 000264 E0 MOVX A,@DPTR
\ 000265 70DD JNZ ??zdpProcessAddrReq_27
713
714 osal_mem_free( (uint8 *)list );
\ 000267 ; Setup parameters for call to function osal_mem_free
\ 000267 E8 MOV A,R0
\ 000268 FA MOV R2,A
\ 000269 E9 MOV A,R1
\ 00026A FB MOV R3,A
\ 00026B 12.... LCALL `??osal_mem_free::?relay`; Banked call to: osal_mem_free
\ 00026E 800D SJMP ??zdpProcessAddrReq_19
715 }
716 else
717 {
718 // NumAssocDev field is only present on success.
719 *pBuf++ = 0;
\ ??zdpProcessAddrReq_21:
\ 000270 7401 MOV A,#0x1
\ 000272 12.... LCALL ?XSTACK_DISP0_8
\ 000275 12.... LCALL ?Subroutine53 & 0xFFFF
\ ??CrossCallReturnLabel_78:
\ 000278 E4 CLR A
\ 000279 F0 MOVX @DPTR,A
720 len++;
\ 00027A 75..0C MOV ?V5,#0xc
721 }
722 }
723 }
724
725 ZDP_TxOptions = AF_MSG_ACK_REQUEST;
\ ??zdpProcessAddrReq_19:
\ 00027D 90.... MOV DPTR,#ZDP_TxOptions
\ 000280 7410 MOV A,#0x10
\ 000282 F0 MOVX @DPTR,A
726 fillAndSend( &(inMsg->TransSeq), &(inMsg->srcAddr), (cId_t)(inMsg->clusterID | ZDO_RESPONSE_BIT), len );
\ 000283 ; Setup parameters for call to function fillAndSend
\ 000283 E5.. MOV A,?V2
\ 000285 240C ADD A,#0xc
\ 000287 12.... LCALL ??Subroutine117_0 & 0xFFFF
\ ??CrossCallReturnLabel_178:
\ 00028A F5.. MOV ?V0,A
\ 00028C A3 INC DPTR
\ 00028D E0 MOVX A,@DPTR
\ 00028E 4480 ORL A,#0x80
\ 000290 F5.. MOV ?V1,A
\ 000292 78.. MOV R0,#?V0
\ 000294 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000297 A9.. MOV R1,?V5
\ 000299 E5.. MOV A,?V2
\ 00029B 2402 ADD A,#0x2
\ 00029D FC MOV R4,A
\ 00029E E4 CLR A
\ 00029F 35.. ADDC A,?V3
\ 0002A1 FD MOV R5,A
\ 0002A2 E5.. MOV A,?V2
\ 0002A4 240F ADD A,#0xf
\ 0002A6 FA MOV R2,A
\ 0002A7 E4 CLR A
\ 0002A8 35.. ADDC A,?V3
\ 0002AA FB MOV R3,A
\ 0002AB 12.... LCALL ??Subroutine140_0 & 0xFFFF
\ ??CrossCallReturnLabel_297:
\ 0002AE 12.... LCALL ?DEALLOC_XSTACK8
727 ZDP_TxOptions = AF_TX_OPTIONS_NONE;
\ 0002B1 90.... MOV DPTR,#ZDP_TxOptions
\ 0002B4 E4 CLR A
\ 0002B5 F0 MOVX @DPTR,A
728 }
729 }
\ ??zdpProcessAddrReq_12:
\ 0002B6 7410 MOV A,#0x10
\ 0002B8 12.... LCALL ?DEALLOC_XSTACK8
\ 0002BB REQUIRE ?Subroutine3
\ 0002BB ; // Fall through to label ?Subroutine3
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine3:
\ 000000 7F07 MOV R7,#0x7
\ 000002 02.... LJMP ?BANKED_LEAVE_XDATA
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine68:
\ 000000 E5.. MOV A,?V2
\ 000002 REQUIRE ??Subroutine116_0
\ 000002 ; // Fall through to label ??Subroutine116_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine116_0:
\ 000000 2413 ADD A,#0x13
\ 000002 REQUIRE ??Subroutine117_0
\ 000002 ; // Fall through to label ??Subroutine117_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine117_0:
\ 000000 F582 MOV DPL,A
\ 000002 E4 CLR A
\ 000003 35.. ADDC A,?V3
\ 000005 F583 MOV DPH,A
\ 000007 E0 MOVX A,@DPTR
\ 000008 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine56:
\ 000000 E0 MOVX A,@DPTR
\ 000001 FA MOV R2,A
\ 000002 A3 INC DPTR
\ 000003 E0 MOVX A,@DPTR
\ 000004 F583 MOV DPH,A
\ 000006 8A82 MOV DPL,R2
\ 000008 A3 INC DPTR
\ 000009 A3 INC DPTR
\ 00000A 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine45:
\ 000000 240C ADD A,#0xc
\ 000002 F582 MOV DPL,A
\ 000004 E4 CLR A
\ 000005 35.. ADDC A,?V3
\ 000007 F583 MOV DPH,A
\ 000009 REQUIRE ??Subroutine118_0
\ 000009 ; // Fall through to label ??Subroutine118_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine118_0:
\ 000000 12.... LCALL ?Subroutine81 & 0xFFFF
\ ??CrossCallReturnLabel_331:
\ 000003 E8 MOV A,R0
\ 000004 49 ORL A,R1
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine73:
\ 000000 240C ADD A,#0xc
\ 000002 F582 MOV DPL,A
\ 000004 E4 CLR A
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine122_0:
\ 000000 F0 MOVX @DPTR,A
\ 000001 A3 INC DPTR
\ 000002 AA82 MOV R2,DPL
\ 000004 AB83 MOV R3,DPH
\ 000006 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine105:
\ 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
\ ?Subroutine53:
\ 000000 12.... LCALL ??Subroutine131_0 & 0xFFFF
\ ??CrossCallReturnLabel_241:
\ 000003 A3 INC DPTR
\ 000004 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine104:
\ 000000 E0 MOVX A,@DPTR
\ 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
\ ?Subroutine43:
\ 000000 F583 MOV DPH,A
\ 000002 REQUIRE ??Subroutine125_0
\ 000002 ; // Fall through to label ??Subroutine125_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine86:
\ 000000 12.... LCALL ?Subroutine105 & 0xFFFF
\ ??CrossCallReturnLabel_286:
\ 000003 F0 MOVX @DPTR,A
\ 000004 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine37:
\ 000000 90.... MOV DPTR,#ZDAppNwkAddr
\ 000003 REQUIRE ??Subroutine135_0
\ 000003 ; // Fall through to label ??Subroutine135_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine135_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
\ ??Subroutine137_0:
\ 000000 12.... LCALL ?Subroutine86 & 0xFFFF
\ ??CrossCallReturnLabel_279:
\ 000003 8C82 MOV DPL,R4
\ 000005 8D83 MOV DPH,R5
\ 000007 12.... LCALL ?Subroutine83 & 0xFFFF
\ ??CrossCallReturnLabel_275:
\ 00000A 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine83:
\ 000000 A3 INC DPTR
\ 000001 12.... LCALL ?Subroutine104 & 0xFFFF
\ ??CrossCallReturnLabel_282:
\ 000004 F0 MOVX @DPTR,A
\ 000005 EA MOV A,R2
\ 000006 2402 ADD A,#0x2
\ 000008 FA MOV R2,A
\ 000009 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine48:
\ 000000 12.... LCALL ??Subroutine130_0 & 0xFFFF
\ ??CrossCallReturnLabel_234:
\ 000003 EA MOV A,R2
\ 000004 4B ORL A,R3
\ 000005 22 RET
730
731 /*********************************************************************
732 * @fn ZDP_NodeDescMsg
733 *
734 * @brief Builds and sends a Node Descriptor message, unicast to the
735 * specified device.
736 *
737 * @param inMsg - incoming message
738 * @param nwkAddr - 16 bit network address for device
739 * @param pNodeDesc - pointer to the node descriptor
740 *
741 * @return afStatus_t
742 */
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine29:
\ 000000 A3 INC DPTR
\ 000001 REQUIRE ??Subroutine114_0
\ 000001 ; // Fall through to label ??Subroutine114_0
\ In segment BANKED_CODE, align 1, keep-with-next
743 afStatus_t ZDP_NodeDescMsg( zdoIncomingMsg_t *inMsg,
\ ZDP_NodeDescMsg:
744 uint16 nwkAddr, NodeDescriptorFormat_t *pNodeDesc )
745 {
\ 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
746 uint8 *pBuf = ZDP_TmpBuf;
\ 000005 90.... MOV DPTR,#ZDP_TmpBuf
\ 000008 12.... LCALL ??Subroutine135_0 & 0xFFFF
747 byte len;
748
749 len = 1 + 2 + 13; // Status + nwkAddr + Node descriptor
750
751 *pBuf++ = ZDP_SUCCESS;
\ ??CrossCallReturnLabel_261:
\ 00000B 8E82 MOV DPL,R6
\ 00000D F583 MOV DPH,A
\ 00000F E4 CLR A
\ 000010 F0 MOVX @DPTR,A
752
753 *pBuf++ = LO_UINT16( nwkAddr );
\ 000011 EC MOV A,R4
\ 000012 A3 INC DPTR
\ 000013 F0 MOVX @DPTR,A
754 *pBuf++ = HI_UINT16( nwkAddr );
\ 000014 ED MOV A,R5
\ 000015 8E82 MOV DPL,R6
\ 000017 8F83 MOV DPH,R7
\ 000019 A3 INC DPTR
\ 00001A A3 INC DPTR
\ 00001B F0 MOVX @DPTR,A
\ 00001C 740A MOV A,#0xa
\ 00001E 12.... LCALL ?XSTACK_DISP0_8
\ 000021 12.... LCALL ?Subroutine36 & 0xFFFF
755
756 *pBuf++ = (byte)((pNodeDesc->ComplexDescAvail << 3) |
757 (pNodeDesc->UserDescAvail << 4) |
758 (pNodeDesc->LogicalType & 0x07));
\ ??CrossCallReturnLabel_45:
\ 000024 541F ANL A,#0x1f
\ 000026 8E82 MOV DPL,R6
\ 000028 8F83 MOV DPH,R7
\ 00002A 12.... LCALL ?Subroutine29 & 0xFFFF
759
760 *pBuf++ = (byte)((pNodeDesc->FrequencyBand << 3) | (pNodeDesc->APSFlags & 0x07));
\ ??CrossCallReturnLabel_172:
\ 00002D 12.... LCALL ?Subroutine40 & 0xFFFF
\ ??CrossCallReturnLabel_54:
\ 000030 12.... LCALL ?Subroutine29 & 0xFFFF
761 *pBuf++ = pNodeDesc->CapabilityFlags;
\ ??CrossCallReturnLabel_173:
\ 000033 12.... LCALL ?Subroutine82 & 0xFFFF
\ ??CrossCallReturnLabel_247:
\ 000036 12.... LCALL ?Subroutine28 & 0xFFFF
762 *pBuf++ = pNodeDesc->ManufacturerCode[0];
\ ??CrossCallReturnLabel_185:
\ 000039 12.... LCALL ?Subroutine40 & 0xFFFF
\ ??CrossCallReturnLabel_55:
\ 00003C 12.... LCALL ?Subroutine28 & 0xFFFF
763 *pBuf++ = pNodeDesc->ManufacturerCode[1];
\ ??CrossCallReturnLabel_186:
\ 00003F 12.... LCALL ?Subroutine82 & 0xFFFF
\ ??CrossCallReturnLabel_248:
\ 000042 12.... LCALL ?Subroutine27 & 0xFFFF
764 *pBuf++ = pNodeDesc->MaxBufferSize;
\ ??CrossCallReturnLabel_34:
\ 000045 12.... LCALL ?Subroutine40 & 0xFFFF
\ ??CrossCallReturnLabel_56:
\ 000048 12.... LCALL ?Subroutine27 & 0xFFFF
765 *pBuf++ = pNodeDesc->MaxInTransferSize[0];
\ ??CrossCallReturnLabel_35:
\ 00004B A3 INC DPTR
\ 00004C 12.... LCALL ?Subroutine39 & 0xFFFF
\ ??CrossCallReturnLabel_52:
\ 00004F 12.... LCALL ?Subroutine22 & 0xFFFF
766 *pBuf++ = pNodeDesc->MaxInTransferSize[1];
\ ??CrossCallReturnLabel_28:
\ 000052 12.... LCALL ?Subroutine39 & 0xFFFF
\ ??CrossCallReturnLabel_53:
\ 000055 A3 INC DPTR
\ 000056 F0 MOVX @DPTR,A
767
768 *pBuf++ = LO_UINT16( pNodeDesc->ServerMask );
\ 000057 E8 MOV A,R0
\ 000058 2408 ADD A,#0x8
\ 00005A FC MOV R4,A
\ 00005B E4 CLR A
\ 00005C 39 ADDC A,R1
\ 00005D FD MOV R5,A
\ 00005E 8C82 MOV DPL,R4
\ 000060 F583 MOV DPH,A
\ 000062 E0 MOVX A,@DPTR
\ 000063 F5.. MOV ?V0,A
\ 000065 12.... LCALL ?Subroutine74 & 0xFFFF
\ ??CrossCallReturnLabel_121:
\ 000068 E5.. MOV A,?V0
\ 00006A 12.... LCALL ?Subroutine16 & 0xFFFF
769 *pBuf++ = HI_UINT16( pNodeDesc->ServerMask );
\ ??CrossCallReturnLabel_16:
\ 00006D C0E0 PUSH A
\ 00006F EE MOV A,R6
\ 000070 12.... LCALL ?Subroutine73 & 0xFFFF
\ ??CrossCallReturnLabel_118:
\ 000073 3F ADDC A,R7
\ 000074 F583 MOV DPH,A
\ 000076 D0E0 POP A
\ 000078 12.... LCALL ?Subroutine22 & 0xFFFF
770 *pBuf++ = pNodeDesc->MaxOutTransferSize[0];
\ ??CrossCallReturnLabel_29:
\ 00007B A3 INC DPTR
\ 00007C A3 INC DPTR
\ 00007D A3 INC DPTR
\ 00007E E0 MOVX A,@DPTR
\ 00007F C0E0 PUSH A
\ 000081 EE MOV A,R6
\ 000082 240D ADD A,#0xd
\ 000084 F582 MOV DPL,A
\ 000086 E4 CLR A
\ 000087 3F ADDC A,R7
\ 000088 F583 MOV DPH,A
\ 00008A D0E0 POP A
\ 00008C F0 MOVX @DPTR,A
771 *pBuf++ = pNodeDesc->MaxOutTransferSize[1];
\ 00008D E8 MOV A,R0
\ 00008E 240B ADD A,#0xb
\ 000090 F582 MOV DPL,A
\ 000092 E4 CLR A
\ 000093 39 ADDC A,R1
\ 000094 F583 MOV DPH,A
\ 000096 E0 MOVX A,@DPTR
\ 000097 C0E0 PUSH A
\ 000099 EE MOV A,R6
\ 00009A 240E ADD A,#0xe
\ 00009C F582 MOV DPL,A
\ 00009E E4 CLR A
\ 00009F 3F ADDC A,R7
\ 0000A0 F583 MOV DPH,A
\ 0000A2 D0E0 POP A
\ 0000A4 F0 MOVX @DPTR,A
772 *pBuf = pNodeDesc->DescriptorCapability;
\ 0000A5 E8 MOV A,R0
\ 0000A6 12.... LCALL ?Subroutine73 & 0xFFFF
\ ??CrossCallReturnLabel_119:
\ 0000A9 39 ADDC A,R1
\ 0000AA F583 MOV DPH,A
\ 0000AC E0 MOVX A,@DPTR
\ 0000AD C0E0 PUSH A
\ 0000AF EE MOV A,R6
\ 0000B0 240F ADD A,#0xf
\ 0000B2 F582 MOV DPL,A
\ 0000B4 E4 CLR A
\ 0000B5 3F ADDC A,R7
\ 0000B6 F583 MOV DPH,A
\ 0000B8 D0E0 POP A
\ 0000BA F0 MOVX @DPTR,A
773
774 return fillAndSend( &(inMsg->TransSeq), &(inMsg->srcAddr), Node_Desc_rsp, len );
\ 0000BB ; Setup parameters for call to function fillAndSend
\ 0000BB 75..02 MOV ?V0,#0x2
\ 0000BE 75..80 MOV ?V1,#-0x80
\ 0000C1 78.. MOV R0,#?V0
\ 0000C3 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 0000C6 7910 MOV R1,#0x10
\ 0000C8 12.... LCALL ?Subroutine72 & 0xFFFF
\ ??CrossCallReturnLabel_115:
\ 0000CB 5001 JNC ??ZDP_NodeDescMsg_0
\ 0000CD 0B INC R3
\ ??ZDP_NodeDescMsg_0:
\ 0000CE 02.... LJMP ??Subroutine111_0 & 0xFFFF
775 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine39:
\ 000000 12.... LCALL ??Subroutine132_0 & 0xFFFF
\ ??CrossCallReturnLabel_245:
\ 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 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 A3 INC DPTR
\ 000002 A3 INC DPTR
\ 000003 REQUIRE ??Subroutine119_0
\ 000003 ; // Fall through to label ??Subroutine119_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine119_0:
\ 000000 12.... LCALL ?Subroutine94 & 0xFFFF
\ ??CrossCallReturnLabel_188:
\ 000003 A3 INC DPTR
\ 000004 A3 INC DPTR
\ 000005 A3 INC DPTR
\ 000006 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine94:
\ 000000 A3 INC DPTR
\ 000001 A3 INC DPTR
\ 000002 REQUIRE ??Subroutine120_0
\ 000002 ; // Fall through to label ??Subroutine120_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine27:
\ 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 12.... LCALL ?Subroutine93 & 0xFFFF
\ ??CrossCallReturnLabel_148:
\ 00000A 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine93:
\ 000000 F0 MOVX @DPTR,A
\ 000001 8882 MOV DPL,R0
\ 000003 8983 MOV DPH,R1
\ 000005 A3 INC DPTR
\ 000006 A3 INC DPTR
\ 000007 A3 INC DPTR
\ 000008 A3 INC DPTR
\ 000009 A3 INC DPTR
\ 00000A 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine22:
\ 000000 12.... LCALL ?Subroutine93 & 0xFFFF
\ ??CrossCallReturnLabel_149:
\ 000003 A3 INC DPTR
\ 000004 A3 INC DPTR
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine72:
\ 000000 EA MOV A,R2
\ 000001 2402 ADD A,#0x2
\ 000003 FC MOV R4,A
\ 000004 E4 CLR A
\ 000005 3B ADDC A,R3
\ 000006 FD MOV R5,A
\ 000007 EA MOV A,R2
\ 000008 240F ADD A,#0xf
\ 00000A FA MOV R2,A
\ 00000B 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine74:
\ 000000 EE MOV A,R6
\ 000001 240B ADD A,#0xb
\ 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
\ ?Subroutine40:
\ 000000 12.... LCALL ??Subroutine132_0 & 0xFFFF
\ ??CrossCallReturnLabel_246:
\ 000003 A3 INC DPTR
\ 000004 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine82:
\ 000000 A3 INC DPTR
\ 000001 REQUIRE ??Subroutine132_0
\ 000001 ; // Fall through to label ??Subroutine132_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine132_0:
\ 000000 E0 MOVX A,@DPTR
\ 000001 8E82 MOV DPL,R6
\ 000003 8F83 MOV DPH,R7
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine95:
\ 000000 F0 MOVX @DPTR,A
\ 000001 8C82 MOV DPL,R4
\ 000003 8D83 MOV DPH,R5
\ 000005 A3 INC DPTR
\ 000006 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine16:
\ 000000 12.... LCALL ?Subroutine95 & 0xFFFF
\ ??CrossCallReturnLabel_152:
\ 000003 E0 MOVX A,@DPTR
\ 000004 22 RET
776
777 /*********************************************************************
778 * @fn ZDP_PowerDescMsg
779 *
780 * @brief Builds and sends a Power Descriptor message, unicast to the
781 * specified device.
782 *
783 * @param inMsg - incoming message (request)
784 * @param nwkAddr - 16 bit network address for device
785 * @param pPowerDesc - pointer to the node descriptor
786 *
787 * @return afStatus_t
788 */
\ In segment BANKED_CODE, align 1, keep-with-next
789 afStatus_t ZDP_PowerDescMsg( zdoIncomingMsg_t *inMsg,
\ ZDP_PowerDescMsg:
790 uint16 nwkAddr, NodePowerDescriptorFormat_t *pPowerDesc )
791 {
\ 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
792 uint8 *pBuf = ZDP_TmpBuf;
\ 000005 12.... LCALL ?Subroutine46 & 0xFFFF
\ ??CrossCallReturnLabel_311:
\ 000008 FE MOV R6,A
\ 000009 E9 MOV A,R1
\ 00000A FF MOV R7,A
793 byte len = 1 + 2 + 2; // Status + nwkAddr + Node Power descriptor.
794
795 *pBuf++ = ZDP_SUCCESS;
\ 00000B 8882 MOV DPL,R0
\ 00000D F583 MOV DPH,A
\ 00000F E4 CLR A
\ 000010 F0 MOVX @DPTR,A
796
797 *pBuf++ = LO_UINT16( nwkAddr );
\ 000011 EC MOV A,R4
\ 000012 A3 INC DPTR
\ 000013 F0 MOVX @DPTR,A
798 *pBuf++ = HI_UINT16( nwkAddr );
\ 000014 ED MOV A,R5
\ 000015 8882 MOV DPL,R0
\ 000017 8983 MOV DPH,R1
\ 000019 A3 INC DPTR
\ 00001A A3 INC DPTR
\ 00001B F0 MOVX @DPTR,A
\ 00001C 740A MOV A,#0xa
\ 00001E 12.... LCALL ?XSTACK_DISP0_8
\ 000021 12.... LCALL ?Subroutine36 & 0xFFFF
799
800 *pBuf++ = (byte)((pPowerDesc->AvailablePowerSources << 4)
801 | (pPowerDesc->PowerMode & 0x0F));
\ ??CrossCallReturnLabel_46:
\ 000024 8E82 MOV DPL,R6
\ 000026 8F83 MOV DPH,R7
\ 000028 A3 INC DPTR
\ 000029 12.... LCALL ?Subroutine94 & 0xFFFF
802 *pBuf++ = (byte)((pPowerDesc->CurrentPowerSourceLevel << 4)
803 | (pPowerDesc->CurrentPowerSource & 0x0F));
\ ??CrossCallReturnLabel_189:
\ 00002C 12.... LCALL ??Subroutine125_0 & 0xFFFF
\ ??CrossCallReturnLabel_223:
\ 00002F 540F ANL A,#0xf
\ 000031 F9 MOV R1,A
\ 000032 740C MOV A,#0xc
\ 000034 78.. MOV R0,#?V0
\ 000036 12.... LCALL ?US_SHR
\ 000039 E5.. MOV A,?V0
\ 00003B C4 SWAP A
\ 00003C 49 ORL A,R1
\ 00003D 8E82 MOV DPL,R6
\ 00003F 8F83 MOV DPH,R7
\ 000041 A3 INC DPTR
\ 000042 A3 INC DPTR
\ 000043 A3 INC DPTR
\ 000044 A3 INC DPTR
\ 000045 F0 MOVX @DPTR,A
804
805 return fillAndSend( &(inMsg->TransSeq), &(inMsg->srcAddr), Power_Desc_rsp, len );
\ 000046 ; Setup parameters for call to function fillAndSend
\ 000046 75..03 MOV ?V0,#0x3
\ 000049 75..80 MOV ?V1,#-0x80
\ 00004C 78.. MOV R0,#?V0
\ 00004E 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000051 7905 MOV R1,#0x5
\ 000053 12.... LCALL ?Subroutine72 & 0xFFFF
\ ??CrossCallReturnLabel_116:
\ 000056 5001 JNC ??ZDP_PowerDescMsg_0
\ 000058 0B INC R3
\ ??ZDP_PowerDescMsg_0:
\ 000059 02.... LJMP ??Subroutine111_0 & 0xFFFF
806 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine46:
\ 000000 90.... MOV DPTR,#ZDP_TmpBuf
\ 000003 REQUIRE ??Subroutine141_0
\ 000003 ; // Fall through to label ??Subroutine141_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine141_0:
\ 000000 12.... LCALL ?Subroutine81 & 0xFFFF
\ ??CrossCallReturnLabel_332:
\ 000003 E8 MOV A,R0
\ 000004 22 RET
807
808 /*********************************************************************
809 * @fn ZDP_SimpleDescMsg
810 *
811 * @brief Builds and sends a Simple Descriptor message, unicast to the
812 * specified device.
813 *
814 * @param inMsg - incoming message (request)
815 * @param Status - message status (ZDP_SUCCESS or other)
816 * @param pSimpleDesc - pointer to the node descriptor
817 *
818 * @return afStatus_t
819 */
\ In segment BANKED_CODE, align 1, keep-with-next
820 afStatus_t ZDP_SimpleDescMsg( zdoIncomingMsg_t *inMsg, byte Status,
\ ZDP_SimpleDescMsg:
821 SimpleDescriptionFormat_t *pSimpleDesc )
822 {
\ 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
\ 000005 EA MOV A,R2
\ 000006 FE MOV R6,A
\ 000007 EB MOV A,R3
\ 000008 FF MOV R7,A
\ 000009 89.. MOV ?V6,R1
823 uint8 *pBuf = ZDP_TmpBuf;
\ 00000B 12.... LCALL ?Subroutine52 & 0xFFFF
824 uint8 i, len;
825
826 if ( Status == ZDP_SUCCESS && pSimpleDesc )
\ ??CrossCallReturnLabel_197:
\ 00000E E9 MOV A,R1
\ 00000F 702E JNZ ??ZDP_SimpleDescMsg_0
\ 000011 EC MOV A,R4
\ 000012 4D ORL A,R5
\ 000013 602A JZ ??ZDP_SimpleDescMsg_0
827 {
828 // Status + NWKAddrOfInterest + desc length + empty simple descriptor.
829 len = 1 + 2 + 1 + 8;
830 len += (pSimpleDesc->AppNumInClusters + pSimpleDesc->AppNumOutClusters) * sizeof ( uint16 );
\ 000015 8C82 MOV DPL,R4
\ 000017 8D83 MOV DPH,R5
\ 000019 A3 INC DPTR
\ 00001A A3 INC DPTR
\ 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 E0 MOVX A,@DPTR
\ 000023 F8 MOV R0,A
\ 000024 8C82 MOV DPL,R4
\ 000026 8D83 MOV DPH,R5
\ 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 E0 MOVX A,@DPTR
\ 00002F 28 ADD A,R0
\ 000030 C3 CLR C
\ 000031 33 RLC A
\ 000032 240C ADD A,#0xc
\ 000034 F9 MOV R1,A
831 }
832 else
833 {
834 len = 1 + 2 + 1; // Status + desc length
835 }
836 if ( len >= ZDP_BUF_SZ-1 )
\ 000035 C3 CLR C
\ 000036 944F SUBB A,#0x4f
\ 000038 4007 JC ??ZDP_SimpleDescMsg_1
837 {
838 return afStatus_MEM_FAIL;
\ 00003A 7910 MOV R1,#0x10
\ 00003C 02.... LJMP ??ZDP_SimpleDescMsg_2 & 0xFFFF
839 }
\ ??ZDP_SimpleDescMsg_0:
\ 00003F 7904 MOV R1,#0x4
840
841 *pBuf++ = Status;
\ ??ZDP_SimpleDescMsg_1:
\ 000041 8A82 MOV DPL,R2
\ 000043 8B83 MOV DPH,R3
\ 000045 E5.. MOV A,?V6
\ 000047 F0 MOVX @DPTR,A
842
843 *pBuf++ = LO_UINT16( ZDAppNwkAddr.addr.shortAddr );
\ 000048 90.... MOV DPTR,#ZDAppNwkAddr
\ 00004B 12.... LCALL ?Subroutine60 & 0xFFFF
\ ??CrossCallReturnLabel_91:
\ 00004E F0 MOVX @DPTR,A
844 *pBuf++ = HI_UINT16( ZDAppNwkAddr.addr.shortAddr );
\ 00004F 90.... MOV DPTR,#ZDAppNwkAddr + 1
\ 000052 12.... LCALL ?Subroutine59 & 0xFFFF
\ ??CrossCallReturnLabel_88:
\ 000055 F0 MOVX @DPTR,A
845
846 if ( len > 4 )
\ 000056 E9 MOV A,R1
\ 000057 C3 CLR C
\ 000058 9405 SUBB A,#0x5
\ 00005A 5003 JNC $+5
\ 00005C 02.... LJMP ??ZDP_SimpleDescMsg_3 & 0xFFFF
847 {
848 *pBuf++ = len - 4; // Simple descriptor length
\ 00005F 74FC MOV A,#-0x4
\ 000061 29 ADD A,R1
\ 000062 8A82 MOV DPL,R2
\ 000064 8B83 MOV DPH,R3
\ 000066 A3 INC DPTR
\ 000067 A3 INC DPTR
\ 000068 A3 INC DPTR
\ 000069 F0 MOVX @DPTR,A
849
850 *pBuf++ = pSimpleDesc->EndPoint;
\ 00006A 8C82 MOV DPL,R4
\ 00006C 8D83 MOV DPH,R5
\ 00006E 12.... LCALL ?Subroutine58 & 0xFFFF
\ ??CrossCallReturnLabel_86:
\ 000071 12.... LCALL ?Subroutine95 & 0xFFFF
851 *pBuf++ = LO_UINT16( pSimpleDesc->AppProfId );
\ ??CrossCallReturnLabel_150:
\ 000074 8582.. MOV ?V0,DPL
\ 000077 8583.. MOV ?V1,DPH
\ 00007A 12.... LCALL ?Subroutine105 & 0xFFFF
\ ??CrossCallReturnLabel_283:
\ 00007D 12.... LCALL ?Subroutine10 & 0xFFFF
852 *pBuf++ = HI_UINT16( pSimpleDesc->AppProfId );
\ ??CrossCallReturnLabel_2:
\ 000080 F0 MOVX @DPTR,A
853 *pBuf++ = LO_UINT16( pSimpleDesc->AppDeviceId );
\ 000081 EC MOV A,R4
\ 000082 2403 ADD A,#0x3
\ 000084 12.... LCALL ?Subroutine77 & 0xFFFF
\ ??CrossCallReturnLabel_129:
\ 000087 12.... LCALL ?Subroutine59 & 0xFFFF
\ ??CrossCallReturnLabel_89:
\ 00008A 12.... LCALL ?Subroutine10 & 0xFFFF
854 *pBuf++ = HI_UINT16( pSimpleDesc->AppDeviceId );
\ ??CrossCallReturnLabel_3:
\ 00008D A3 INC DPTR
\ 00008E 12.... LCALL ?Subroutine25 & 0xFFFF
855
856 *pBuf++ = (byte)(pSimpleDesc->AppDevVer << 4);
\ ??CrossCallReturnLabel_30:
\ 000091 C4 SWAP A
\ 000092 54F0 ANL A,#0xf0
\ 000094 8A82 MOV DPL,R2
\ 000096 8B83 MOV DPH,R3
\ 000098 A3 INC DPTR
\ 000099 A3 INC DPTR
\ 00009A A3 INC DPTR
\ 00009B A3 INC DPTR
\ 00009C A3 INC DPTR
\ 00009D A3 INC DPTR
\ 00009E A3 INC DPTR
\ 00009F A3 INC DPTR
\ 0000A0 A3 INC DPTR
\ 0000A1 F0 MOVX @DPTR,A
857
858 *pBuf++ = pSimpleDesc->AppNumInClusters;
\ 0000A2 EC MOV A,R4
\ 0000A3 2406 ADD A,#0x6
\ 0000A5 12.... LCALL ?Subroutine77 & 0xFFFF
\ ??CrossCallReturnLabel_130:
\ 0000A8 12.... LCALL ?Subroutine58 & 0xFFFF
\ ??CrossCallReturnLabel_87:
\ 0000AB A3 INC DPTR
\ 0000AC A3 INC DPTR
\ 0000AD A3 INC DPTR
\ 0000AE A3 INC DPTR
\ 0000AF A3 INC DPTR
\ 0000B0 A3 INC DPTR
\ 0000B1 F0 MOVX @DPTR,A
\ 0000B2 EA MOV A,R2
\ 0000B3 240B ADD A,#0xb
\ 0000B5 FA MOV R2,A
\ 0000B6 5001 JNC ??ZDP_SimpleDescMsg_4
\ 0000B8 0B INC R3
859 if ( pSimpleDesc->AppNumInClusters )
\ ??ZDP_SimpleDescMsg_4:
\ 0000B9 85..82 MOV DPL,?V0
\ 0000BC 85..83 MOV DPH,?V1
\ 0000BF E0 MOVX A,@DPTR
\ 0000C0 6023 JZ ??ZDP_SimpleDescMsg_5
860 {
861 for (i=0; i<pSimpleDesc->AppNumInClusters; ++i)
\ 0000C2 7800 MOV R0,#0x0
\ 0000C4 800C SJMP ??ZDP_SimpleDescMsg_6
862 {
863 *pBuf++ = LO_UINT16( pSimpleDesc->pAppInClusterList[i] );
\ ??ZDP_SimpleDescMsg_7:
\ 0000C6 12.... LCALL ?Subroutine69 & 0xFFFF
864 *pBuf++ = HI_UINT16( pSimpleDesc->pAppInClusterList[i] );
865 }
\ ??CrossCallReturnLabel_111:
\ 0000C9 2407 ADD A,#0x7
\ 0000CB 12.... LCALL ?Subroutine8 & 0xFFFF
\ ??CrossCallReturnLabel_0:
\ 0000CE 5001 JNC ??ZDP_SimpleDescMsg_8
\ 0000D0 0B INC R3
\ ??ZDP_SimpleDescMsg_8:
\ 0000D1 08 INC R0
\ ??ZDP_SimpleDescMsg_6:
\ 0000D2 8C82 MOV DPL,R4
\ 0000D4 8D83 MOV DPH,R5
\ 0000D6 A3 INC DPTR
\ 0000D7 A3 INC DPTR
\ 0000D8 A3 INC DPTR
\ 0000D9 A3 INC DPTR
\ 0000DA A3 INC DPTR
\ 0000DB A3 INC DPTR
\ 0000DC E0 MOVX A,@DPTR
\ 0000DD F5.. MOV ?V0,A
\ 0000DF E8 MOV A,R0
\ 0000E0 C3 CLR C
\ 0000E1 95.. SUBB A,?V0
\ 0000E3 40E1 JC ??ZDP_SimpleDescMsg_7
866 }
867
868 *pBuf++ = pSimpleDesc->AppNumOutClusters;
\ ??ZDP_SimpleDescMsg_5:
\ 0000E5 EC MOV A,R4
\ 0000E6 2409 ADD A,#0x9
\ 0000E8 F5.. MOV ?V0,A
\ 0000EA E4 CLR A
\ 0000EB 3D ADDC A,R5
\ 0000EC F5.. MOV ?V1,A
\ 0000EE 85..82 MOV DPL,?V0
\ 0000F1 12.... LCALL ?Subroutine23 & 0xFFFF
869 if ( pSimpleDesc->AppNumOutClusters )
\ ??CrossCallReturnLabel_203:
\ 0000F4 85..82 MOV DPL,?V0
\ 0000F7 85..83 MOV DPH,?V1
\ 0000FA E0 MOVX A,@DPTR
\ 0000FB 602F JZ ??ZDP_SimpleDescMsg_9
870 {
871 for (i=0; i<pSimpleDesc->AppNumOutClusters; ++i)
\ 0000FD 7800 MOV R0,#0x0
\ ??ZDP_SimpleDescMsg_10:
\ 0000FF 8C82 MOV DPL,R4
\ 000101 8D83 MOV DPH,R5
\ 000103 A3 INC DPTR
\ 000104 A3 INC DPTR
\ 000105 A3 INC DPTR
\ 000106 A3 INC DPTR
\ 000107 A3 INC DPTR
\ 000108 A3 INC DPTR
\ 000109 A3 INC DPTR
\ 00010A A3 INC DPTR
\ 00010B A3 INC DPTR
\ 00010C E0 MOVX A,@DPTR
\ 00010D F5.. MOV ?V0,A
\ 00010F E8 MOV A,R0
\ 000110 C3 CLR C
\ 000111 95.. SUBB A,?V0
\ 000113 5017 JNC ??ZDP_SimpleDescMsg_9
872 {
873 *pBuf++ = LO_UINT16( pSimpleDesc->pAppOutClusterList[i] );
\ 000115 12.... LCALL ?Subroutine69 & 0xFFFF
874 *pBuf++ = HI_UINT16( pSimpleDesc->pAppOutClusterList[i] );
875 }
\ ??CrossCallReturnLabel_112:
\ 000118 240A ADD A,#0xa
\ 00011A 12.... LCALL ?Subroutine8 & 0xFFFF
\ ??CrossCallReturnLabel_1:
\ 00011D 5001 JNC ??ZDP_SimpleDescMsg_11
\ 00011F 0B INC R3
\ ??ZDP_SimpleDescMsg_11:
\ 000120 08 INC R0
\ 000121 80DC SJMP ??ZDP_SimpleDescMsg_10
876 }
877 }
878
879 else
880 {
881 *pBuf = 0; // Description Length = 0;
\ ??ZDP_SimpleDescMsg_3:
\ 000123 8A82 MOV DPL,R2
\ 000125 8B83 MOV DPH,R3
\ 000127 A3 INC DPTR
\ 000128 A3 INC DPTR
\ 000129 A3 INC DPTR
\ 00012A E4 CLR A
\ 00012B F0 MOVX @DPTR,A
882 }
883
884 return fillAndSend( &(inMsg->TransSeq), &(inMsg->srcAddr), Simple_Desc_rsp, len );
\ ??ZDP_SimpleDescMsg_9:
\ 00012C ; Setup parameters for call to function fillAndSend
\ 00012C 75..04 MOV ?V0,#0x4
\ 00012F 75..80 MOV ?V1,#-0x80
\ 000132 78.. MOV R0,#?V0
\ 000134 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000137 EE MOV A,R6
\ 000138 2402 ADD A,#0x2
\ 00013A FC MOV R4,A
\ 00013B E4 CLR A
\ 00013C 3F ADDC A,R7
\ 00013D FD MOV R5,A
\ 00013E EE MOV A,R6
\ 00013F 240F ADD A,#0xf
\ 000141 FA MOV R2,A
\ 000142 E4 CLR A
\ 000143 3F ADDC A,R7
\ 000144 FB MOV R3,A
\ 000145 12.... LCALL ??Subroutine140_0 & 0xFFFF
\ ??CrossCallReturnLabel_298:
\ 000148 12.... LCALL ?DEALLOC_XSTACK8
\ ??ZDP_SimpleDescMsg_2:
\ 00014B 02.... LJMP ?Subroutine3 & 0xFFFF
885 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine77:
\ 000000 F5.. MOV ?V0,A
\ 000002 E4 CLR A
\ 000003 3D ADDC A,R5
\ 000004 F5.. MOV ?V1,A
\ 000006 85..82 MOV DPL,?V0
\ 000009 F583 MOV DPH,A
\ 00000B 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine69:
\ 000000 E8 MOV A,R0
\ 000001 25E0 ADD A,0xE0 /* A */
\ 000003 F5.. MOV ?V0,A
\ 000005 E4 CLR A
\ 000006 33 RLC A
\ 000007 F5.. MOV ?V1,A
\ 000009 EC MOV A,R4
\ 00000A 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine58:
\ 000000 12.... LCALL ?Subroutine85 & 0xFFFF
\ ??CrossCallReturnLabel_136:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine85:
\ 000000 12.... LCALL ?Subroutine104 & 0xFFFF
\ ??CrossCallReturnLabel_280:
\ 000003 A3 INC DPTR
\ 000004 A3 INC DPTR
\ 000005 A3 INC DPTR
\ 000006 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine23:
\ 000000 F583 MOV DPH,A
\ 000002 12.... LCALL ?Subroutine105 & 0xFFFF
\ ??CrossCallReturnLabel_285:
\ 000005 REQUIRE ??Subroutine122_0
\ 000005 ; // Fall through to label ??Subroutine122_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine10:
\ 000000 A3 INC DPTR
\ 000001 A3 INC DPTR
\ 000002 A3 INC DPTR
\ 000003 A3 INC DPTR
\ 000004 A3 INC DPTR
\ 000005 12.... LCALL ?Subroutine107 & 0xFFFF
\ ??CrossCallReturnLabel_170:
\ 000008 12.... LCALL ?Subroutine85 & 0xFFFF
\ ??CrossCallReturnLabel_135:
\ 00000B A3 INC DPTR
\ 00000C A3 INC DPTR
\ 00000D 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine8:
\ 000000 12.... LCALL ?Subroutine101 & 0xFFFF
\ ??CrossCallReturnLabel_162:
\ 000003 12.... LCALL ?Subroutine78 & 0xFFFF
\ ??CrossCallReturnLabel_131:
\ 000006 12.... LCALL ?Subroutine86 & 0xFFFF
\ ??CrossCallReturnLabel_277:
\ 000009 85..82 MOV DPL,?V4
\ 00000C 85..83 MOV DPH,?V5
\ 00000F 12.... LCALL ?Subroutine78 & 0xFFFF
\ ??CrossCallReturnLabel_132:
\ 000012 12.... LCALL ?Subroutine83 & 0xFFFF
\ ??CrossCallReturnLabel_276:
\ 000015 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine78:
\ 000000 E0 MOVX A,@DPTR
\ 000001 25.. ADD A,?V0
\ 000003 F5.. MOV ?V2,A
\ 000005 A3 INC DPTR
\ 000006 E0 MOVX A,@DPTR
\ 000007 35.. ADDC A,?V1
\ 000009 85..82 MOV DPL,?V2
\ 00000C F583 MOV DPH,A
\ 00000E 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine60:
\ 000000 12.... LCALL ?Subroutine87 & 0xFFFF
\ ??CrossCallReturnLabel_139:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine87:
\ 000000 12.... LCALL ?Subroutine104 & 0xFFFF
\ ??CrossCallReturnLabel_281:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine101:
\ 000000 F5.. MOV ?V4,A
\ 000002 E4 CLR A
\ 000003 3D ADDC A,R5
\ 000004 F5.. MOV ?V5,A
\ 000006 85..82 MOV DPL,?V4
\ 000009 F583 MOV DPH,A
\ 00000B 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine25:
\ 000000 A3 INC DPTR
\ 000001 12.... LCALL ?Subroutine95 & 0xFFFF
\ ??CrossCallReturnLabel_151:
\ 000004 A3 INC DPTR
\ 000005 A3 INC DPTR
\ 000006 A3 INC DPTR
\ 000007 A3 INC DPTR
\ 000008 E0 MOVX A,@DPTR
\ 000009 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine59:
\ 000000 12.... LCALL ?Subroutine87 & 0xFFFF
\ ??CrossCallReturnLabel_138:
\ 000003 A3 INC DPTR
\ 000004 22 RET
886
887 /*********************************************************************
888 * @fn ZDP_EPRsp
889 *
890 * @brief This builds and send an endpoint list. Used in
891 * Active_EP_rsp and Match_Desc_Rsp
892 * message. This function sends unicast message to the
893 * requesting device.
894 *
895 * @param MsgType - either Active_EP_rsp or Match_Desc_Rsp
896 * @param dstAddr - destination address
897 * @param Status - message status (ZDP_SUCCESS or other)
898 * @param nwkAddr - Device's short address that this response describes
899 * @param Count - number of endpoint/interfaces in list
900 * @param pEPIntfList - Array of Endpoint/Interfaces
901 * @param SecurityEnable - Security Options
902 *
903 * @return afStatus_t
904 */
\ In segment BANKED_CODE, align 1, keep-with-next
905 afStatus_t ZDP_EPRsp( uint16 MsgType, byte TransSeq, zAddrType_t *dstAddr,
\ ZDP_EPRsp:
906 byte Status, uint16 nwkAddr, byte Count,
907 uint8 *pEPList,
908 byte SecurityEnable )
909 {
\ 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: 1
\ 000005 74FF MOV A,#-0x1
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A E9 MOV A,R1
\ 00000B 85..82 MOV DPL,?XSP + 0
\ 00000E 85..83 MOV DPH,?XSP + 1
\ 000011 F0 MOVX @DPTR,A
\ 000012 EA MOV A,R2
\ 000013 FE MOV R6,A
\ 000014 EB MOV A,R3
\ 000015 FF MOV R7,A
\ 000016 8C.. MOV ?V6,R4
\ 000018 8D.. MOV ?V7,R5
910 uint8 *pBuf = ZDP_TmpBuf;
\ 00001A 12.... LCALL ?Subroutine52 & 0xFFFF
911 byte len = 1 + 2 + 1; // Status + nwkAddr + endpoint/interface count.
\ ??CrossCallReturnLabel_198:
\ 00001D 75..04 MOV ?V4,#0x4
912 byte txOptions;
913
914 (void)SecurityEnable; // Intentionally unreferenced parameter
915
916 if ( MsgType == Match_Desc_rsp )
\ 000020 7406 MOV A,#0x6
\ 000022 6E XRL A,R6
\ 000023 7003 JNZ ??ZDP_EPRsp_0
\ 000025 7480 MOV A,#-0x80
\ 000027 6F XRL A,R7
\ ??ZDP_EPRsp_0:
\ 000028 7005 JNZ ??ZDP_EPRsp_1
917 txOptions = AF_MSG_ACK_REQUEST;
\ 00002A 75..10 MOV ?V3,#0x10
\ 00002D 8003 SJMP ??ZDP_EPRsp_2
918 else
919 txOptions = 0;
\ ??ZDP_EPRsp_1:
\ 00002F 75..00 MOV ?V3,#0x0
920
921 *pBuf++ = Status;
\ ??ZDP_EPRsp_2:
\ 000032 7411 MOV A,#0x11
\ 000034 12.... LCALL ?XSTACK_DISP0_8
\ 000037 12.... LCALL ?Subroutine38 & 0xFFFF
\ ??CrossCallReturnLabel_47:
\ 00003A 7412 MOV A,#0x12
\ 00003C 12.... LCALL ?XSTACK_DISP0_8
\ 00003F 12.... LCALL ?Subroutine14 & 0xFFFF
922 *pBuf++ = LO_UINT16( nwkAddr );
923 *pBuf++ = HI_UINT16( nwkAddr );
\ ??CrossCallReturnLabel_10:
\ 000042 7414 MOV A,#0x14
\ 000044 12.... LCALL ?XSTACK_DISP0_8
\ 000047 E0 MOVX A,@DPTR
\ 000048 F9 MOV R1,A
924
925 *pBuf++ = Count; // Endpoint/Interface count
\ 000049 8A82 MOV DPL,R2
\ 00004B 8B83 MOV DPH,R3
\ 00004D A3 INC DPTR
\ 00004E A3 INC DPTR
\ 00004F A3 INC DPTR
\ 000050 F0 MOVX @DPTR,A
926
927 if ( Count )
\ 000051 6021 JZ ??ZDP_EPRsp_3
928 {
929 len += Count;
\ 000053 7404 MOV A,#0x4
\ 000055 29 ADD A,R1
\ 000056 F5.. MOV ?V4,A
930 osal_memcpy( pBuf, pEPList, Count );
\ 000058 ; Setup parameters for call to function osal_memcpy
\ 000058 7415 MOV A,#0x15
\ 00005A 12.... LCALL ?XSTACK_DISP0_8
\ 00005D 12.... LCALL ?Subroutine42 & 0xFFFF
931 }
\ ??CrossCallReturnLabel_61:
\ 000060 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 000063 E9 MOV A,R1
\ 000064 FC MOV R4,A
\ 000065 7D00 MOV R5,#0x0
\ 000067 EA MOV A,R2
\ 000068 2404 ADD A,#0x4
\ 00006A FA MOV R2,A
\ 00006B 5001 JNC ??ZDP_EPRsp_4
\ 00006D 0B INC R3
\ ??ZDP_EPRsp_4:
\ 00006E 12.... LCALL ??Subroutine123_0 & 0xFFFF
\ ??CrossCallReturnLabel_208:
\ 000071 12.... LCALL ?DEALLOC_XSTACK8
932
933 FillAndSendTxOptions( &TransSeq, dstAddr, MsgType, len, txOptions );
\ ??ZDP_EPRsp_3:
\ 000074 E5.. MOV A,?V3
\ 000076 90.... MOV DPTR,#ZDP_TxOptions
\ 000079 F0 MOVX @DPTR,A
\ 00007A ; Setup parameters for call to function fillAndSend
\ 00007A 8E.. MOV ?V0,R6
\ 00007C 8F.. MOV ?V1,R7
\ 00007E 78.. MOV R0,#?V0
\ 000080 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000083 A9.. MOV R1,?V4
\ 000085 AC.. MOV R4,?V6
\ 000087 AD.. MOV R5,?V7
\ 000089 7402 MOV A,#0x2
\ 00008B 12.... LCALL ?XSTACK_DISP101_8
\ 00008E 12.... LCALL ??Subroutine140_0 & 0xFFFF
\ ??CrossCallReturnLabel_299:
\ 000091 12.... LCALL ?DEALLOC_XSTACK8
\ 000094 E9 MOV A,R1
\ 000095 F9 MOV R1,A
\ 000096 90.... MOV DPTR,#ZDP_TxOptions
\ 000099 E4 CLR A
\ 00009A F0 MOVX @DPTR,A
\ 00009B 04 INC A
\ 00009C 02.... LJMP ??Subroutine138_0 & 0xFFFF
934 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine14:
\ 000000 12.... LCALL ?Subroutine80 & 0xFFFF
\ ??CrossCallReturnLabel_133:
\ 000003 12.... LCALL ?Subroutine96 & 0xFFFF
\ ??CrossCallReturnLabel_153:
\ 000006 F0 MOVX @DPTR,A
\ 000007 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine38:
\ 000000 12.... LCALL ?Subroutine86 & 0xFFFF
\ ??CrossCallReturnLabel_278:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine138_0:
\ 000000 12.... LCALL ?DEALLOC_XSTACK8
\ 000003 REQUIRE ??Subroutine139_0
\ 000003 ; // Fall through to label ??Subroutine139_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine139_0:
\ 000000 7F08 MOV R7,#0x8
\ 000002 02.... LJMP ?BANKED_LEAVE_XDATA
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine42:
\ 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 75..00 MOV ?V2,#0x0
\ 00000A 78.. MOV R0,#?V0
\ 00000C 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine96:
\ 000000 F0 MOVX @DPTR,A
\ 000001 E9 MOV A,R1
\ 000002 8A82 MOV DPL,R2
\ 000004 8B83 MOV DPH,R3
\ 000006 A3 INC DPTR
\ 000007 A3 INC DPTR
\ 000008 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine80:
\ 000000 12.... LCALL ??Subroutine145_0 & 0xFFFF
\ ??CrossCallReturnLabel_335:
\ 000003 F9 MOV R1,A
\ 000004 E8 MOV A,R0
\ 000005 8A82 MOV DPL,R2
\ 000007 8B83 MOV DPH,R3
\ 000009 A3 INC DPTR
\ 00000A 22 RET
935
936 /*********************************************************************
937 * @fn ZDP_UserDescRsp
938 *
939 * @brief Build and send the User Decriptor Response.
940 *
941 *
942 * @param dstAddr - destination address
943 * @param nwkAddrOfInterest -
944 * @param userDesc -
945 * @param SecurityEnable - Security Options
946 *
947 * @return ZStatus_t
948 */
\ In segment BANKED_CODE, align 1, keep-with-next
949 ZStatus_t ZDP_UserDescRsp( byte TransSeq, zAddrType_t *dstAddr,
\ ZDP_UserDescRsp:
950 uint16 nwkAddrOfInterest, UserDescriptorFormat_t *userDesc,
951 byte SecurityEnable )
952 {
\ 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 E9 MOV A,R1
\ 00000B 85..82 MOV DPL,?XSP + 0
\ 00000E 85..83 MOV DPH,?XSP + 1
\ 000011 F0 MOVX @DPTR,A
\ 000012 8A.. MOV ?V6,R2
\ 000014 8B.. MOV ?V7,R3
953 uint8 *pBuf = ZDP_TmpBuf;
\ 000016 12.... LCALL ?Subroutine52 & 0xFFFF
\ ??CrossCallReturnLabel_199:
\ 000019 7411 MOV A,#0x11
\ 00001B 12.... LCALL ?XSTACK_DISP0_8
\ 00001E E0 MOVX A,@DPTR
\ 00001F F5.. MOV ?V4,A
\ 000021 A3 INC DPTR
\ 000022 E0 MOVX A,@DPTR
\ 000023 F5.. MOV ?V5,A
954 byte len = 1 + 2 + 1; // Status + nwkAddr + descriptor length.
955
956 (void)SecurityEnable; // Intentionally unreferenced parameter
957
958 len += userDesc->len;
\ 000025 85..82 MOV DPL,?V4
\ 000028 F583 MOV DPH,A
\ 00002A E0 MOVX A,@DPTR
\ 00002B 2404 ADD A,#0x4
\ 00002D FF MOV R7,A
959
960 *pBuf++ = ZSUCCESS;
\ 00002E 8A82 MOV DPL,R2
\ 000030 8B83 MOV DPH,R3
\ 000032 E4 CLR A
\ 000033 F0 MOVX @DPTR,A
961
962 *pBuf++ = LO_UINT16( nwkAddrOfInterest );
\ 000034 EC MOV A,R4
\ 000035 A3 INC DPTR
\ 000036 F0 MOVX @DPTR,A
963 *pBuf++ = HI_UINT16( nwkAddrOfInterest );
\ 000037 ED MOV A,R5
\ 000038 8A82 MOV DPL,R2
\ 00003A 8B83 MOV DPH,R3
\ 00003C A3 INC DPTR
\ 00003D A3 INC DPTR
\ 00003E F0 MOVX @DPTR,A
964
965 *pBuf++ = userDesc->len;
\ 00003F 85..82 MOV DPL,?V4
\ 000042 85..83 MOV DPH,?V5
\ 000045 12.... LCALL ?Subroutine105 & 0xFFFF
\ ??CrossCallReturnLabel_284:
\ 000048 12.... LCALL ?Subroutine33 & 0xFFFF
966 osal_memcpy( pBuf, userDesc->desc, userDesc->len );
\ ??CrossCallReturnLabel_40:
\ 00004B AC82 MOV R4,DPL
\ 00004D AD83 MOV R5,DPH
\ 00004F 8C.. MOV ?V0,R4
\ 000051 8D.. MOV ?V1,R5
\ 000053 75..00 MOV ?V2,#0x0
\ 000056 78.. MOV R0,#?V0
\ 000058 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 00005B 85..82 MOV DPL,?V4
\ 00005E 85..83 MOV DPH,?V5
\ 000061 E0 MOVX A,@DPTR
\ 000062 FC MOV R4,A
\ 000063 7D00 MOV R5,#0x0
\ 000065 EA MOV A,R2
\ 000066 2404 ADD A,#0x4
\ 000068 FA MOV R2,A
\ 000069 5001 JNC ??ZDP_UserDescRsp_0
\ 00006B 0B INC R3
\ ??ZDP_UserDescRsp_0:
\ 00006C 12.... LCALL ??Subroutine123_0 & 0xFFFF
\ ??CrossCallReturnLabel_209:
\ 00006F 12.... LCALL ?DEALLOC_XSTACK8
967
968 return (ZStatus_t)fillAndSend( &TransSeq, dstAddr, User_Desc_rsp, len );
\ 000072 ; Setup parameters for call to function fillAndSend
\ 000072 75..11 MOV ?V0,#0x11
\ 000075 75..80 MOV ?V1,#-0x80
\ 000078 78.. MOV R0,#?V0
\ 00007A 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00007D EF MOV A,R7
\ 00007E F9 MOV R1,A
\ 00007F AC.. MOV R4,?V6
\ 000081 AD.. MOV R5,?V7
\ 000083 7402 MOV A,#0x2
\ 000085 12.... LCALL ?XSTACK_DISP101_8
\ 000088 12.... LCALL ??Subroutine140_0 & 0xFFFF
\ ??CrossCallReturnLabel_300:
\ 00008B 12.... LCALL ?DEALLOC_XSTACK8
\ 00008E 02.... LJMP ?Subroutine4 & 0xFFFF
969 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine4:
\ 000000 7401 MOV A,#0x1
\ 000002 REQUIRE ??Subroutine138_0
\ 000002 ; // Fall through to label ??Subroutine138_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine33:
\ 000000 A3 INC DPTR
\ 000001 A3 INC DPTR
\ 000002 A3 INC DPTR
\ 000003 12.... LCALL ?Subroutine97 & 0xFFFF
\ ??CrossCallReturnLabel_156:
\ 000006 22 RET
970
971 /*********************************************************************
972 * @fn ZDP_ServerDiscRsp
973 *
974 * @brief Build and send the Server_Discovery_rsp response.
975 *
976 * @param transID - Transaction sequence number of request.
977 * @param dstAddr - Network Destination Address.
978 * @param status - Status of response to request.
979 * @param aoi - Network Address of Interest of request.
980 * @param serverMask - Bit map of service(s) being sought.
981 * @param SecurityEnable - Security Options
982 *
983 * @return ZStatus_t
984 */
\ In segment BANKED_CODE, align 1, keep-with-next
985 ZStatus_t ZDP_ServerDiscRsp( byte transID, zAddrType_t *dstAddr, byte status,
\ ZDP_ServerDiscRsp:
986 uint16 aoi, uint16 serverMask, byte SecurityEnable )
987 {
\ 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 E9 MOV A,R1
\ 00000B 85..82 MOV DPL,?XSP + 0
\ 00000E 85..83 MOV DPH,?XSP + 1
\ 000011 F0 MOVX @DPTR,A
\ 000012 EC MOV A,R4
\ 000013 FE MOV R6,A
988 const byte len = 1 + 2; // status + aoi + mask.
989 uint8 *pBuf = ZDP_TmpBuf;
\ 000014 12.... LCALL ?Subroutine46 & 0xFFFF
\ ??CrossCallReturnLabel_312:
\ 000017 FC MOV R4,A
\ 000018 E9 MOV A,R1
\ 000019 FD MOV R5,A
990 ZStatus_t stat;
991
992 // Intentionally unreferenced parameters
993 (void)aoi;
994 (void)SecurityEnable;
995
996 *pBuf++ = status;
\ 00001A EE MOV A,R6
\ 00001B 8882 MOV DPL,R0
\ 00001D 8983 MOV DPH,R1
\ 00001F F0 MOVX @DPTR,A
\ 000020 740D MOV A,#0xd
\ 000022 12.... LCALL ?XSTACK_DISP0_8
\ 000025 12.... LCALL ??Subroutine141_0 & 0xFFFF
997
998 *pBuf++ = LO_UINT16( serverMask );
\ ??CrossCallReturnLabel_309:
\ 000028 8C82 MOV DPL,R4
\ 00002A 8D83 MOV DPH,R5
\ 00002C A3 INC DPTR
\ 00002D F0 MOVX @DPTR,A
999 *pBuf++ = HI_UINT16( serverMask );
\ 00002E E9 MOV A,R1
\ 00002F 8C82 MOV DPL,R4
\ 000031 8D83 MOV DPH,R5
\ 000033 A3 INC DPTR
\ 000034 A3 INC DPTR
\ 000035 F0 MOVX @DPTR,A
1000
1001 ZDP_TxOptions = AF_MSG_ACK_REQUEST;
\ 000036 90.... MOV DPTR,#ZDP_TxOptions
\ 000039 7410 MOV A,#0x10
\ 00003B F0 MOVX @DPTR,A
1002 stat = fillAndSend( &transID, dstAddr, Server_Discovery_rsp, len );
\ 00003C ; Setup parameters for call to function fillAndSend
\ 00003C 75..15 MOV ?V0,#0x15
\ 00003F 75..80 MOV ?V1,#-0x80
\ 000042 78.. MOV R0,#?V0
\ 000044 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000047 7903 MOV R1,#0x3
\ 000049 EA MOV A,R2
\ 00004A FC MOV R4,A
\ 00004B EB MOV A,R3
\ 00004C FD MOV R5,A
\ 00004D 7402 MOV A,#0x2
\ 00004F 12.... LCALL ?XSTACK_DISP101_8
\ 000052 12.... LCALL ??Subroutine140_0 & 0xFFFF
\ ??CrossCallReturnLabel_301:
\ 000055 12.... LCALL ?DEALLOC_XSTACK8
\ 000058 E9 MOV A,R1
\ 000059 F9 MOV R1,A
1003 ZDP_TxOptions = AF_TX_OPTIONS_NONE;
\ 00005A 90.... MOV DPTR,#ZDP_TxOptions
\ 00005D E4 CLR A
\ 00005E F0 MOVX @DPTR,A
1004
1005 return ( stat );
\ 00005F 04 INC A
\ 000060 02.... LJMP ??Subroutine112_0 & 0xFFFF
1006 }
1007
1008 /*********************************************************************
1009 * @fn ZDP_GenericRsp
1010 *
1011 * @brief Sends a response message with only the parameter status
1012 * byte and the addr of interest for data.
1013 * This function sends unicast message to the
1014 * requesting device.
1015 *
1016 * @param dstAddr - destination address
1017 * @param status - generic status for response
1018 * @param aoi - address of interest
1019 * @param dstAddr - destination address
1020 * @param rspId - response cluster ID
1021 * @param SecurityEnable - Security Options
1022 *
1023 * @return afStatus_t
1024 */
\ In segment BANKED_CODE, align 1, keep-with-next
1025 afStatus_t ZDP_GenericRsp( byte TransSeq, zAddrType_t *dstAddr,
\ ZDP_GenericRsp:
1026 byte status, uint16 aoi, uint16 rspID, byte SecurityEnable )
1027 {
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 1
\ 000005 74FF MOV A,#-0x1
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A E9 MOV A,R1
\ 00000B 85..82 MOV DPL,?XSP + 0
\ 00000E 85..83 MOV DPH,?XSP + 1
\ 000011 F0 MOVX @DPTR,A
1028 uint8 len;
1029
1030 (void)SecurityEnable; // Intentionally unreferenced parameter
1031
1032 ZDP_TmpBuf[0] = status;
\ 000012 12.... LCALL ?Subroutine54 & 0xFFFF
\ ??CrossCallReturnLabel_215:
\ 000015 EC MOV A,R4
\ 000016 F0 MOVX @DPTR,A
\ 000017 740A MOV A,#0xa
\ 000019 12.... LCALL ?XSTACK_DISP0_8
\ 00001C 12.... LCALL ??Subroutine144_0 & 0xFFFF
1033 ZDP_TmpBuf[1] = LO_UINT16( aoi );
\ ??CrossCallReturnLabel_323:
\ 00001F 90.... MOV DPTR,#ZDP_TmpBuf
\ 000022 E0 MOVX A,@DPTR
\ 000023 FC MOV R4,A
\ 000024 A3 INC DPTR
\ 000025 E0 MOVX A,@DPTR
\ 000026 F583 MOV DPH,A
\ 000028 8C82 MOV DPL,R4
\ 00002A A3 INC DPTR
\ 00002B E8 MOV A,R0
\ 00002C 12.... LCALL ?Subroutine13 & 0xFFFF
1034 ZDP_TmpBuf[2] = HI_UINT16( aoi );
1035
1036 // Length byte
1037 ZDP_TmpBuf[3] = 0;
\ ??CrossCallReturnLabel_9:
\ 00002F 90.... MOV DPTR,#ZDP_TmpBuf
\ 000032 12.... LCALL ?Subroutine53 & 0xFFFF
\ ??CrossCallReturnLabel_79:
\ 000035 A3 INC DPTR
\ 000036 E4 CLR A
\ 000037 F0 MOVX @DPTR,A
1038 len = 4;
1039
1040 return fillAndSend( &TransSeq, dstAddr, rspID, len );
\ 000038 ; Setup parameters for call to function fillAndSend
\ 000038 740C MOV A,#0xc
\ 00003A 12.... LCALL ?XSTACK_DISP0_8
\ 00003D 12.... LCALL ?PUSH_XSTACK8_X_TWO
\ 000040 7904 MOV R1,#0x4
\ 000042 EA MOV A,R2
\ 000043 FC MOV R4,A
\ 000044 EB MOV A,R3
\ 000045 FD MOV R5,A
\ 000046 7402 MOV A,#0x2
\ 000048 12.... LCALL ?XSTACK_DISP101_8
\ 00004B 12.... LCALL ??Subroutine140_0 & 0xFFFF
\ ??CrossCallReturnLabel_302:
\ 00004E 12.... LCALL ?DEALLOC_XSTACK8
\ 000051 7401 MOV A,#0x1
\ 000053 12.... LCALL ?DEALLOC_XSTACK8
\ 000056 REQUIRE ?Subroutine5
\ 000056 ; // Fall through to label ?Subroutine5
1041 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine5:
\ 000000 7F01 MOV R7,#0x1
\ 000002 02.... LJMP ?BANKED_LEAVE_XDATA
1042
1043 /*********************************************************************
1044 * Binding
1045 */
1046 /*********************************************************************
1047 * @fn ZDP_EndDeviceBindReq
1048 *
1049 * @brief This builds and sends a End_Device_Bind_req message.
1050 * This function sends a unicast message.
1051 *
1052 * @param dstAddr - destination address
1053 * @param LocalCoordinator - short address of local coordinator
1054 * @param epIntf - Endpoint/Interface of Simple Desc
1055 * @param ProfileID - Profile ID
1056 *
1057 * The Input cluster list is the opposite of what you would think.
1058 * This is the output cluster list of this device
1059 * @param NumInClusters - number of input clusters
1060 * @param InClusterList - input cluster ID list
1061 *
1062 * The Output cluster list is the opposite of what you would think.
1063 * This is the input cluster list of this device
1064 * @param NumOutClusters - number of output clusters
1065 * @param OutClusterList - output cluster ID list
1066 *
1067 * @param SecurityEnable - Security Options
1068 *
1069 * @return afStatus_t
1070 */
\ In segment BANKED_CODE, align 1, keep-with-next
1071 afStatus_t ZDP_EndDeviceBindReq( zAddrType_t *dstAddr,
\ ZDP_EndDeviceBindReq:
1072 uint16 LocalCoordinator,
1073 byte endPoint,
1074 uint16 ProfileID,
1075 byte NumInClusters, cId_t *InClusterList,
1076 byte NumOutClusters, cId_t *OutClusterList,
1077 byte SecurityEnable )
1078 {
\ 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: 2
\ 000005 74FE MOV A,#-0x2
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A 12.... LCALL ?Subroutine31 & 0xFFFF
\ ??CrossCallReturnLabel_318:
\ 00000D EC MOV A,R4
\ 00000E FE MOV R6,A
\ 00000F ED MOV A,R5
\ 000010 FF MOV R7,A
\ 000011 89.. MOV ?V7,R1
1079 uint8 *pBuf = ZDP_TmpBuf;
\ 000013 90.... MOV DPTR,#ZDP_TmpBuf
\ 000016 12.... LCALL ??Subroutine125_0 & 0xFFFF
\ ??CrossCallReturnLabel_224:
\ 000019 7414 MOV A,#0x14
\ 00001B 12.... LCALL ?XSTACK_DISP0_8
\ 00001E E0 MOVX A,@DPTR
\ 00001F F5.. MOV ?V2,A
\ 000021 7417 MOV A,#0x17
\ 000023 12.... LCALL ?XSTACK_DISP0_8
\ 000026 E0 MOVX A,@DPTR
\ 000027 F5.. MOV ?V3,A
1080 uint8 i, len;
1081 uint8 *ieeeAddr;
1082
1083 (void)SecurityEnable; // Intentionally unreferenced parameter
1084
1085 // LocalCoordinator + SrcExtAddr + ep + ProfileID + NumInClusters + NumOutClusters.
1086 len = 2 + Z_EXTADDR_LEN + 1 + 2 + 1 + 1;
1087 len += (NumInClusters + NumOutClusters) * sizeof ( uint16 );
\ 000029 E5.. MOV A,?V2
\ 00002B 25.. ADD A,?V3
\ 00002D C3 CLR C
\ 00002E 33 RLC A
\ 00002F 240F ADD A,#0xf
\ 000031 F5.. MOV ?V6,A
1088
1089 if ( len >= ZDP_BUF_SZ-1 )
\ 000033 C3 CLR C
\ 000034 944F SUBB A,#0x4f
\ 000036 4005 JC ??ZDP_EndDeviceBindReq_0
1090 {
1091 return afStatus_MEM_FAIL;
\ 000038 7910 MOV R1,#0x10
\ 00003A 02.... LJMP ??ZDP_EndDeviceBindReq_1 & 0xFFFF
1092 }
1093
1094 if ( LocalCoordinator != NLME_GetShortAddr() )
\ ??ZDP_EndDeviceBindReq_0:
\ 00003D ; Setup parameters for call to function NLME_GetShortAddr
\ 00003D 12.... LCALL `??NLME_GetShortAddr::?relay`; Banked call to: NLME_GetShortAddr
\ 000040 EA MOV A,R2
\ 000041 6E XRL A,R6
\ 000042 7002 JNZ ??ZDP_EndDeviceBindReq_2
\ 000044 EB MOV A,R3
\ 000045 6F XRL A,R7
\ ??ZDP_EndDeviceBindReq_2:
\ 000046 6005 JZ ??ZDP_EndDeviceBindReq_3
1095 {
1096 return afStatus_INVALID_PARAMETER;
\ 000048 7902 MOV R1,#0x2
\ 00004A 02.... LJMP ??ZDP_EndDeviceBindReq_1 & 0xFFFF
1097 }
1098
1099 *pBuf++ = LO_UINT16( LocalCoordinator );
\ ??ZDP_EndDeviceBindReq_3:
\ 00004D EE MOV A,R6
\ 00004E 85..82 MOV DPL,?V0
\ 000051 85..83 MOV DPH,?V1
\ 000054 F0 MOVX @DPTR,A
1100 *pBuf++ = HI_UINT16( LocalCoordinator );
\ 000055 EF MOV A,R7
\ 000056 A3 INC DPTR
\ 000057 F0 MOVX @DPTR,A
1101
1102 ieeeAddr = NLME_GetExtAddr();
\ 000058 ; Setup parameters for call to function NLME_GetExtAddr
\ 000058 12.... LCALL `??NLME_GetExtAddr::?relay`; Banked call to: NLME_GetExtAddr
\ 00005B 8A.. MOV ?V4,R2
\ 00005D 8B.. MOV ?V5,R3
\ 00005F AC.. MOV R4,?V4
\ 000061 AD.. MOV R5,?V5
1103 pBuf = osal_cpyExtAddr( pBuf, ieeeAddr );
\ 000063 ; Setup parameters for call to function sAddrExtCpy
\ 000063 E5.. MOV A,?V0
\ 000065 2402 ADD A,#0x2
\ 000067 FA MOV R2,A
\ 000068 E4 CLR A
\ 000069 35.. ADDC A,?V1
\ 00006B FB MOV R3,A
\ 00006C 12.... LCALL ?Subroutine67 & 0xFFFF
1104
1105 *pBuf++ = endPoint;
\ ??CrossCallReturnLabel_108:
\ 00006F E5.. MOV A,?V7
\ 000071 F0 MOVX @DPTR,A
\ 000072 7412 MOV A,#0x12
\ 000074 12.... LCALL ?XSTACK_DISP0_8
\ 000077 12.... LCALL ?Subroutine14 & 0xFFFF
1106
1107 *pBuf++ = LO_UINT16( ProfileID ); // Profile ID
1108 *pBuf++ = HI_UINT16( ProfileID );
1109
1110 *pBuf++ = NumInClusters; // Input cluster list
\ ??CrossCallReturnLabel_11:
\ 00007A 8A82 MOV DPL,R2
\ 00007C 8B83 MOV DPH,R3
\ 00007E A3 INC DPTR
\ 00007F A3 INC DPTR
\ 000080 A3 INC DPTR
\ 000081 E5.. MOV A,?V2
\ 000083 F0 MOVX @DPTR,A
\ 000084 EA MOV A,R2
\ 000085 2404 ADD A,#0x4
\ 000087 F5.. MOV ?V0,A
\ 000089 E4 CLR A
\ 00008A 3B ADDC A,R3
\ 00008B F5.. MOV ?V1,A
1111 for ( i = 0; i < NumInClusters; ++i )
\ 00008D 7800 MOV R0,#0x0
\ 00008F 7415 MOV A,#0x15
\ 000091 12.... LCALL ?XSTACK_DISP0_8
\ 000094 12.... LCALL ??Subroutine121_0 & 0xFFFF
\ ??CrossCallReturnLabel_192:
\ 000097 8021 SJMP ??ZDP_EndDeviceBindReq_4
1112 {
1113 *pBuf++ = LO_UINT16(InClusterList[i]);
\ ??ZDP_EndDeviceBindReq_5:
\ 000099 12.... LCALL ?Subroutine70 & 0xFFFF
\ ??CrossCallReturnLabel_113:
\ 00009C FE MOV R6,A
\ 00009D EB MOV A,R3
\ 00009E 3D ADDC A,R5
\ 00009F FF MOV R7,A
\ 0000A0 8E82 MOV DPL,R6
\ 0000A2 F583 MOV DPH,A
\ 0000A4 12.... LCALL ?Subroutine61 & 0xFFFF
1114 *pBuf++ = HI_UINT16(InClusterList[i]);
\ ??CrossCallReturnLabel_95:
\ 0000A7 8E82 MOV DPL,R6
\ 0000A9 8F83 MOV DPH,R7
\ 0000AB A3 INC DPTR
\ 0000AC 12.... LCALL ?Subroutine57 & 0xFFFF
1115 }
\ ??CrossCallReturnLabel_84:
\ 0000AF E5.. MOV A,?V0
\ 0000B1 2402 ADD A,#0x2
\ 0000B3 F5.. MOV ?V0,A
\ 0000B5 5002 JNC ??ZDP_EndDeviceBindReq_6
\ 0000B7 05.. INC ?V1
\ ??ZDP_EndDeviceBindReq_6:
\ 0000B9 08 INC R0
\ ??ZDP_EndDeviceBindReq_4:
\ 0000BA E8 MOV A,R0
\ 0000BB C3 CLR C
\ 0000BC 95.. SUBB A,?V2
\ 0000BE 40D9 JC ??ZDP_EndDeviceBindReq_5
1116
1117 *pBuf++ = NumOutClusters; // Output cluster list
\ 0000C0 85..82 MOV DPL,?V0
\ 0000C3 85..83 MOV DPH,?V1
\ 0000C6 E5.. MOV A,?V3
\ 0000C8 F0 MOVX @DPTR,A
\ 0000C9 A3 INC DPTR
\ 0000CA 8582.. MOV ?V0,DPL
\ 0000CD 8583.. MOV ?V1,DPH
1118 for ( i = 0; i < NumOutClusters; ++i )
\ 0000D0 7800 MOV R0,#0x0
\ 0000D2 7418 MOV A,#0x18
\ 0000D4 12.... LCALL ?XSTACK_DISP0_8
\ 0000D7 12.... LCALL ??Subroutine121_0 & 0xFFFF
\ ??CrossCallReturnLabel_193:
\ 0000DA 8024 SJMP ??ZDP_EndDeviceBindReq_7
1119 {
1120 *pBuf++ = LO_UINT16(OutClusterList[i]);
\ ??ZDP_EndDeviceBindReq_8:
\ 0000DC 12.... LCALL ?Subroutine70 & 0xFFFF
1121 *pBuf++ = HI_UINT16(OutClusterList[i]);
1122 }
\ ??CrossCallReturnLabel_114:
\ 0000DF FC MOV R4,A
\ 0000E0 EB MOV A,R3
\ 0000E1 3D ADDC A,R5
\ 0000E2 FD MOV R5,A
\ 0000E3 8C82 MOV DPL,R4
\ 0000E5 F583 MOV DPH,A
\ 0000E7 12.... LCALL ?Subroutine102 & 0xFFFF
\ ??CrossCallReturnLabel_163:
\ 0000EA 12.... LCALL ?Subroutine16 & 0xFFFF
\ ??CrossCallReturnLabel_17:
\ 0000ED 85..82 MOV DPL,?V0
\ 0000F0 85..83 MOV DPH,?V1
\ 0000F3 A3 INC DPTR
\ 0000F4 F0 MOVX @DPTR,A
\ 0000F5 E5.. MOV A,?V0
\ 0000F7 2402 ADD A,#0x2
\ 0000F9 F5.. MOV ?V0,A
\ 0000FB 5002 JNC ??ZDP_EndDeviceBindReq_9
\ 0000FD 05.. INC ?V1
\ ??ZDP_EndDeviceBindReq_9:
\ 0000FF 08 INC R0
\ ??ZDP_EndDeviceBindReq_7:
\ 000100 E8 MOV A,R0
\ 000101 C3 CLR C
\ 000102 95.. SUBB A,?V3
\ 000104 40D6 JC ??ZDP_EndDeviceBindReq_8
1123
1124 return fillAndSend( &ZDP_TransID, dstAddr, End_Device_Bind_req, len );
\ 000106 ; Setup parameters for call to function fillAndSend
\ 000106 75..20 MOV ?V0,#0x20
\ 000109 75..00 MOV ?V1,#0x0
\ 00010C 78.. MOV R0,#?V0
\ 00010E 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000111 A9.. MOV R1,?V6
\ 000113 7402 MOV A,#0x2
\ 000115 12.... LCALL ?XSTACK_DISP0_8
\ 000118 12.... LCALL ?Subroutine50 & 0xFFFF
\ ??CrossCallReturnLabel_71:
\ 00011B 12.... LCALL ?Subroutine64 & 0xFFFF
\ ??CrossCallReturnLabel_292:
\ 00011E 12.... LCALL ?DEALLOC_XSTACK8
\ ??ZDP_EndDeviceBindReq_1:
\ 000121 7402 MOV A,#0x2
\ 000123 02.... LJMP ??Subroutine138_0 & 0xFFFF
1125 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine70:
\ 000000 E8 MOV A,R0
\ 000001 25E0 ADD A,0xE0 /* A */
\ 000003 FC MOV R4,A
\ 000004 E4 CLR A
\ 000005 33 RLC A
\ 000006 FD MOV R5,A
\ 000007 EA MOV A,R2
\ 000008 2C ADD A,R4
\ 000009 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine50:
\ 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
\ ?Subroutine57:
\ 000000 12.... LCALL ?Subroutine90 & 0xFFFF
\ ??CrossCallReturnLabel_143:
\ 000003 F0 MOVX @DPTR,A
\ 000004 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine90:
\ 000000 12.... LCALL ?Subroutine102 & 0xFFFF
\ ??CrossCallReturnLabel_165:
\ 000003 A3 INC DPTR
\ 000004 22 RET
1126
1127 /*********************************************************************
1128 * @fn ZDP_BindUnbindReq
1129 *
1130 * @brief This builds and send a Bind_req or Unbind_req message
1131 * Depending on the ClusterID. This function
1132 * sends a unicast message to the local coordinator.
1133 *
1134 * @param BindOrUnbind - either Bind_req or Unbind_req
1135 * @param dstAddr - destination address of the message
1136 * @param SourceAddr - source 64 bit address of the binding
1137 * @param SrcEPIntf - Source endpoint/interface
1138 * @param ClusterID - Binding cluster ID
1139 * @param DestinationAddr - destination 64 bit addr of binding
1140 * @param DstEPIntf - destination endpoint/interface
1141 * @param SecurityEnable - Security Options
1142 *
1143 * @return afStatus_t
1144 */
\ In segment BANKED_CODE, align 1, keep-with-next
1145 afStatus_t ZDP_BindUnbindReq( uint16 BindOrUnbind, zAddrType_t *dstAddr,
\ ZDP_BindUnbindReq:
1146 uint8 *SourceAddr, byte SrcEndPoint,
1147 cId_t ClusterID,
1148 zAddrType_t *destinationAddr, byte DstEndPoint,
1149 byte SecurityEnable )
1150 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 REQUIRE ?V2
\ 000000 REQUIRE ?V3
\ 000000 REQUIRE ?V4
\ 000000 REQUIRE ?V5
\ 000000 REQUIRE ?V6
\ 000000 REQUIRE ?V7
\ 000000 74F0 MOV A,#-0x10
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 16
\ 000005 ; Auto size: 0
\ 000005 EA MOV A,R2
\ 000006 FE MOV R6,A
\ 000007 EB MOV A,R3
\ 000008 FF MOV R7,A
\ 000009 8C.. MOV ?V6,R4
\ 00000B 8D.. MOV ?V7,R5
\ 00000D 89.. MOV ?V3,R1
1151 uint8 *pBuf = ZDP_TmpBuf;
\ 00000F 12.... LCALL ?Subroutine52 & 0xFFFF
1152 byte len;
1153
1154 (void)SecurityEnable; // Intentionally unreferenced parameter
1155
1156 // SourceAddr + SrcEPIntf + ClusterID + addrMode.
1157 len = Z_EXTADDR_LEN + 1 + sizeof( cId_t ) + sizeof( uint8 );
\ ??CrossCallReturnLabel_200:
\ 000012 75..0C MOV ?V2,#0xc
\ 000015 7414 MOV A,#0x14
\ 000017 12.... LCALL ?XSTACK_DISP0_8
\ 00001A 12.... LCALL ??Subroutine125_0 & 0xFFFF
1158 if ( destinationAddr->addrMode == Addr64Bit )
\ ??CrossCallReturnLabel_225:
\ 00001D 85..82 MOV DPL,?V0
\ 000020 F583 MOV DPH,A
\ 000022 A3 INC DPTR
\ 000023 A3 INC DPTR
\ 000024 A3 INC DPTR
\ 000025 A3 INC DPTR
\ 000026 A3 INC DPTR
\ 000027 A3 INC DPTR
\ 000028 A3 INC DPTR
\ 000029 A3 INC DPTR
\ 00002A E0 MOVX A,@DPTR
\ 00002B 6403 XRL A,#0x3
\ 00002D 7005 JNZ ??ZDP_BindUnbindReq_0
1159 len += Z_EXTADDR_LEN + 1; // +1 for DstEPIntf
\ 00002F 75..15 MOV ?V2,#0x15
\ 000032 8016 SJMP ??ZDP_BindUnbindReq_1
1160 else if ( destinationAddr->addrMode == AddrGroup )
\ ??ZDP_BindUnbindReq_0:
\ 000034 85..82 MOV DPL,?V0
\ 000037 85..83 MOV DPH,?V1
\ 00003A A3 INC DPTR
\ 00003B A3 INC DPTR
\ 00003C A3 INC DPTR
\ 00003D A3 INC DPTR
\ 00003E A3 INC DPTR
\ 00003F A3 INC DPTR
\ 000040 A3 INC DPTR
\ 000041 A3 INC DPTR
\ 000042 E0 MOVX A,@DPTR
\ 000043 6401 XRL A,#0x1
\ 000045 7003 JNZ ??ZDP_BindUnbindReq_1
1161 len += sizeof ( uint16 );
\ 000047 75..0E MOV ?V2,#0xe
1162
1163 pBuf = osal_cpyExtAddr( pBuf, SourceAddr );
\ ??ZDP_BindUnbindReq_1:
\ 00004A ; Setup parameters for call to function sAddrExtCpy
\ 00004A 7410 MOV A,#0x10
\ 00004C 12.... LCALL ?XSTACK_DISP0_8
\ 00004F 12.... LCALL ?Subroutine50 & 0xFFFF
\ ??CrossCallReturnLabel_72:
\ 000052 12.... LCALL ?Subroutine67 & 0xFFFF
1164 *pBuf++ = SrcEndPoint;
\ ??CrossCallReturnLabel_109:
\ 000055 E5.. MOV A,?V3
\ 000057 F0 MOVX @DPTR,A
\ 000058 7412 MOV A,#0x12
\ 00005A 12.... LCALL ?XSTACK_DISP0_8
\ 00005D 12.... LCALL ?Subroutine14 & 0xFFFF
1165
1166 *pBuf++ = LO_UINT16( ClusterID );
1167
1168 *pBuf++ = HI_UINT16( ClusterID );
1169 *pBuf++ = destinationAddr->addrMode;
\ ??CrossCallReturnLabel_12:
\ 000060 E5.. MOV A,?V0
\ 000062 2408 ADD A,#0x8
\ 000064 F8 MOV R0,A
\ 000065 E4 CLR A
\ 000066 35.. ADDC A,?V1
\ 000068 F9 MOV R1,A
\ 000069 8882 MOV DPL,R0
\ 00006B 12.... LCALL ?Subroutine41 & 0xFFFF
\ ??CrossCallReturnLabel_59:
\ 00006E 5001 JNC ??ZDP_BindUnbindReq_2
\ 000070 0B INC R3
1170 if ( destinationAddr->addrMode == Addr64Bit )
\ ??ZDP_BindUnbindReq_2:
\ 000071 8882 MOV DPL,R0
\ 000073 8983 MOV DPH,R1
\ 000075 E0 MOVX A,@DPTR
\ 000076 6403 XRL A,#0x3
\ 000078 7013 JNZ ??ZDP_BindUnbindReq_3
1171 {
1172 pBuf = osal_cpyExtAddr( pBuf, destinationAddr->addr.extAddr );
1173 *pBuf = DstEndPoint;
\ 00007A 7416 MOV A,#0x16
\ 00007C 12.... LCALL ?XSTACK_DISP0_8
\ 00007F E0 MOVX A,@DPTR
\ 000080 C0E0 PUSH A
\ 000082 ; Setup parameters for call to function sAddrExtCpy
\ 000082 AC.. MOV R4,?V0
\ 000084 AD.. MOV R5,?V1
\ 000086 12.... LCALL ?Subroutine67 & 0xFFFF
1174 }
\ ??CrossCallReturnLabel_110:
\ 000089 D0E0 POP A
\ 00008B 8026 SJMP ??CrossCallReturnLabel_92
1175 else if ( destinationAddr->addrMode == AddrGroup )
\ ??ZDP_BindUnbindReq_3:
\ 00008D 85..82 MOV DPL,?V0
\ 000090 85..83 MOV DPH,?V1
\ 000093 A3 INC DPTR
\ 000094 A3 INC DPTR
\ 000095 A3 INC DPTR
\ 000096 A3 INC DPTR
\ 000097 A3 INC DPTR
\ 000098 A3 INC DPTR
\ 000099 A3 INC DPTR
\ 00009A A3 INC DPTR
\ 00009B E0 MOVX A,@DPTR
\ 00009C 6401 XRL A,#0x1
\ 00009E 7014 JNZ ??ZDP_BindUnbindReq_4
1176 {
1177 *pBuf++ = LO_UINT16( destinationAddr->addr.shortAddr );
\ 0000A0 85..82 MOV DPL,?V0
\ 0000A3 85..83 MOV DPH,?V1
\ 0000A6 12.... LCALL ?Subroutine38 & 0xFFFF
1178 *pBuf++ = HI_UINT16( destinationAddr->addr.shortAddr );
\ ??CrossCallReturnLabel_48:
\ 0000A9 85..82 MOV DPL,?V0
\ 0000AC 85..83 MOV DPH,?V1
\ 0000AF A3 INC DPTR
\ 0000B0 12.... LCALL ?Subroutine60 & 0xFFFF
1179 }
\ ??CrossCallReturnLabel_92:
\ 0000B3 F0 MOVX @DPTR,A
1180
1181 FillAndSendTxOptions( &ZDP_TransID, dstAddr, BindOrUnbind, len, AF_MSG_ACK_REQUEST );
\ ??ZDP_BindUnbindReq_4:
\ 0000B4 90.... MOV DPTR,#ZDP_TxOptions
\ 0000B7 7410 MOV A,#0x10
\ 0000B9 F0 MOVX @DPTR,A
\ 0000BA ; Setup parameters for call to function fillAndSend
\ 0000BA 8E.. MOV ?V0,R6
\ 0000BC 8F.. MOV ?V1,R7
\ 0000BE 78.. MOV R0,#?V0
\ 0000C0 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 0000C3 A9.. MOV R1,?V2
\ 0000C5 AC.. MOV R4,?V6
\ 0000C7 AD.. MOV R5,?V7
\ 0000C9 12.... LCALL ?Subroutine64 & 0xFFFF
\ ??CrossCallReturnLabel_293:
\ 0000CC 12.... LCALL ?DEALLOC_XSTACK8
\ 0000CF E9 MOV A,R1
\ 0000D0 F9 MOV R1,A
\ 0000D1 90.... MOV DPTR,#ZDP_TxOptions
\ 0000D4 E4 CLR A
\ 0000D5 F0 MOVX @DPTR,A
\ 0000D6 02.... LJMP ??Subroutine139_0 & 0xFFFF
1182 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine41:
\ 000000 F583 MOV DPH,A
\ 000002 12.... LCALL ?Subroutine87 & 0xFFFF
\ ??CrossCallReturnLabel_137:
\ 000005 A3 INC DPTR
\ 000006 A3 INC DPTR
\ 000007 F0 MOVX @DPTR,A
\ 000008 EA MOV A,R2
\ 000009 2404 ADD A,#0x4
\ 00000B FA MOV R2,A
\ 00000C 22 RET
1183
1184 /*********************************************************************
1185 * Network Management
1186 */
1187
1188 /*********************************************************************
1189 * @fn ZDP_MgmtNwkDiscReq
1190 *
1191 * @brief This builds and send a Mgmt_NWK_Disc_req message. This
1192 * function sends a unicast message.
1193 *
1194 * @param dstAddr - destination address of the message
1195 * @param ScanChannels - 32 bit address bit map
1196 * @param StartIndex - Starting index within the reporting network
1197 * list
1198 * @param SecurityEnable - Security Options
1199 *
1200 * @return afStatus_t
1201 */
\ In segment BANKED_CODE, align 1, keep-with-next
1202 afStatus_t ZDP_MgmtNwkDiscReq( zAddrType_t *dstAddr,
\ ZDP_MgmtNwkDiscReq:
1203 uint32 ScanChannels,
1204 byte ScanDuration,
1205 byte StartIndex,
1206 byte SecurityEnable )
1207 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 REQUIRE ?V2
\ 000000 REQUIRE ?V3
\ 000000 74F4 MOV A,#-0xc
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 12
\ 000005 ; Auto size: 0
\ 000005 8A.. MOV ?V0,R2
\ 000007 8B.. MOV ?V1,R3
\ 000009 E9 MOV A,R1
\ 00000A FE MOV R6,A
\ 00000B EC MOV A,R4
\ 00000C FF MOV R7,A
1208 uint8 *pBuf = ZDP_TmpBuf;
1209 byte len = sizeof( uint32 )+1+1; // ScanChannels + ScanDuration + StartIndex.
1210
1211 (void)SecurityEnable; // Intentionally unreferenced parameter
1212
1213 pBuf = osal_buffer_uint32( pBuf, ScanChannels );
\ 00000D ; Setup parameters for call to function osal_buffer_uint32
\ 00000D 740C MOV A,#0xc
\ 00000F 12.... LCALL ?XSTACK_DISP0_8
\ 000012 12.... LCALL ?PUSH_XSTACK8_X_FOUR
\ 000015 12.... LCALL ?Subroutine51 & 0xFFFF
\ ??CrossCallReturnLabel_76:
\ 000018 12.... LCALL ?DEALLOC_XSTACK8
\ 00001B 8A82 MOV DPL,R2
\ 00001D 8B83 MOV DPH,R3
1214
1215 *pBuf++ = ScanDuration;
\ 00001F EE MOV A,R6
\ 000020 F0 MOVX @DPTR,A
1216 *pBuf = StartIndex;
\ 000021 EF MOV A,R7
\ 000022 A3 INC DPTR
\ 000023 F0 MOVX @DPTR,A
1217
1218 return fillAndSend( &ZDP_TransID, dstAddr, Mgmt_NWK_Disc_req, len );
\ 000024 ; Setup parameters for call to function fillAndSend
\ 000024 75..30 MOV ?V2,#0x30
\ 000027 75..00 MOV ?V3,#0x0
\ 00002A 78.. MOV R0,#?V2
\ 00002C 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00002F 7906 MOV R1,#0x6
\ 000031 AC.. MOV R4,?V0
\ 000033 AD.. MOV R5,?V1
\ 000035 80.. SJMP ??Subroutine126_0
1219 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine126_0:
\ 000000 12.... LCALL ?Subroutine64 & 0xFFFF
\ ??CrossCallReturnLabel_294:
\ 000003 REQUIRE ??Subroutine127_0
\ 000003 ; // Fall through to label ??Subroutine127_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine84:
\ 000000 90.... MOV DPTR,#ZDP_TmpBuf
\ 000003 REQUIRE ??Subroutine130_0
\ 000003 ; // Fall through to label ??Subroutine130_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine51:
\ 000000 12.... LCALL ?Subroutine84 & 0xFFFF
\ ??CrossCallReturnLabel_236:
\ 000003 12.... LCALL `??osal_buffer_uint32::?relay`; Banked call to: osal_buffer_uint32
\ 000006 7404 MOV A,#0x4
\ 000008 22 RET
1220
1221 /*********************************************************************
1222 * @fn ZDP_MgmtDirectJoinReq
1223 *
1224 * @brief This builds and send a Mgmt_Direct_Join_req message. This
1225 * function sends a unicast message.
1226 *
1227 * @param dstAddr - destination address of the message
1228 * @param deviceAddr - 64 bit IEEE Address
1229 * @param SecurityEnable - Security Options
1230 *
1231 * @return afStatus_t
1232 */
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine0:
\ 000000 75..00 MOV ?V3,#0x0
\ 000003 78.. MOV R0,#?V2
\ 000005 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000008 7909 MOV R1,#0x9
\ 00000A EE MOV A,R6
\ 00000B FC MOV R4,A
\ 00000C EF MOV A,R7
\ 00000D FD MOV R5,A
\ 00000E REQUIRE ??Subroutine126_0
\ 00000E ; // Fall through to label ??Subroutine126_0
\ In segment BANKED_CODE, align 1, keep-with-next
1233 afStatus_t ZDP_MgmtDirectJoinReq( zAddrType_t *dstAddr,
\ ZDP_MgmtDirectJoinReq:
1234 uint8 *deviceAddr,
1235 byte capInfo,
1236 byte SecurityEnable )
1237 {
\ 000000 REQUIRE ?V0
\ 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 12.... LCALL ?Subroutine35 & 0xFFFF
1238 (void)SecurityEnable; // Intentionally unreferenced parameter
1239
1240 osal_cpyExtAddr( ZDP_TmpBuf, deviceAddr );
1241 ZDP_TmpBuf[Z_EXTADDR_LEN] = capInfo;
\ ??CrossCallReturnLabel_230:
\ 000008 E5.. MOV A,?V0
\ 00000A F0 MOVX @DPTR,A
1242
1243 return fillAndSend( &ZDP_TransID, dstAddr, Mgmt_Direct_Join_req, (Z_EXTADDR_LEN + 1) );
\ 00000B ; Setup parameters for call to function fillAndSend
\ 00000B 75..35 MOV ?V2,#0x35
\ 00000E 80.. SJMP ?Subroutine0
1244 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine35:
\ 000000 EA MOV A,R2
\ 000001 FE MOV R6,A
\ 000002 EB MOV A,R3
\ 000003 FF MOV R7,A
\ 000004 89.. MOV ?V0,R1
\ 000006 ; Setup parameters for call to function sAddrExtCpy
\ 000006 ; Setup parameters for call to function sAddrExtCpy
\ 000006 12.... LCALL ?Subroutine84 & 0xFFFF
\ ??CrossCallReturnLabel_235:
\ 000009 12.... LCALL `??sAddrExtCpy::?relay`; Banked call to: sAddrExtCpy
\ 00000C REQUIRE ??Subroutine129_0
\ 00000C ; // Fall through to label ??Subroutine129_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine129_0:
\ 000000 12.... LCALL ?Subroutine108 & 0xFFFF
\ ??CrossCallReturnLabel_337:
\ 000003 C8 XCH A,R0
\ 000004 2408 ADD A,#0x8
\ 000006 F582 MOV DPL,A
\ 000008 E4 CLR A
\ 000009 38 ADDC A,R0
\ 00000A F583 MOV DPH,A
\ 00000C 22 RET
1245
1246 /*********************************************************************
1247 * @fn ZDP_MgmtPermitJoinReq
1248 *
1249 * @brief This builds and send a Mgmt_Permit_Join_req message.
1250 *
1251 * @param dstAddr - destination address of the message
1252 * @param duration - Permit duration
1253 * @param TcSignificance - Trust Center Significance
1254 *
1255 * @return afStatus_t
1256 */
\ In segment BANKED_CODE, align 1, keep-with-next
1257 afStatus_t ZDP_MgmtPermitJoinReq( zAddrType_t *dstAddr, byte duration,
\ ZDP_MgmtPermitJoinReq:
1258 byte TcSignificance, byte SecurityEnable )
1259 {
\ 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
1260 (void)SecurityEnable; // Intentionally unreferenced parameter
1261
1262 // Build buffer
1263 ZDP_TmpBuf[ZDP_MGMT_PERMIT_JOIN_REQ_DURATION] = duration;
\ 000005 12.... LCALL ?Subroutine54 & 0xFFFF
\ ??CrossCallReturnLabel_216:
\ 000008 E9 MOV A,R1
\ 000009 12.... LCALL ?Subroutine21 & 0xFFFF
1264 ZDP_TmpBuf[ZDP_MGMT_PERMIT_JOIN_REQ_TC_SIG] = TcSignificance;
\ ??CrossCallReturnLabel_27:
\ 00000C EC MOV A,R4
\ 00000D F0 MOVX @DPTR,A
1265
1266 // Send the message
1267 return fillAndSend( &ZDP_TransID, dstAddr, Mgmt_Permit_Join_req,
1268 ZDP_MGMT_PERMIT_JOIN_REQ_SIZE );
\ 00000E ; Setup parameters for call to function fillAndSend
\ 00000E 75..36 MOV ?V0,#0x36
\ 000011 02.... LJMP ?Subroutine1 & 0xFFFF
1269 }
1270
1271 /*********************************************************************
1272 * @fn ZDP_MgmtLeaveReq
1273 *
1274 * @brief This builds and send a Mgmt_Leave_req message.
1275 *
1276 * @param dstAddr - destination address of the message
1277 * IEEEAddr - IEEE adddress of device that is removed
1278 * RemoveChildren - set to 1 to remove the children of the
1279 * device as well. 0 otherwise.
1280 * Rejoin - set to 1 if the removed device should rejoin
1281 afterwards. 0 otherwise.
1282 *
1283 * @return afStatus_t
1284 */
\ In segment BANKED_CODE, align 1, keep-with-next
1285 afStatus_t ZDP_MgmtLeaveReq( zAddrType_t *dstAddr, uint8 *IEEEAddr, uint8 RemoveChildren,
\ ZDP_MgmtLeaveReq:
1286 uint8 Rejoin, uint8 SecurityEnable )
1287
1288 {
\ 000000 REQUIRE ?V0
\ 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 12.... LCALL ?Subroutine35 & 0xFFFF
1289 (void)SecurityEnable; // Intentionally unreferenced parameter
1290
1291 osal_cpyExtAddr( ZDP_TmpBuf, IEEEAddr );
1292 ZDP_TmpBuf[Z_EXTADDR_LEN] = 0;
\ ??CrossCallReturnLabel_231:
\ 000008 E4 CLR A
\ 000009 F0 MOVX @DPTR,A
1293
1294 if ( RemoveChildren == TRUE )
\ 00000A 04 INC A
\ 00000B 65.. XRL A,?V0
\ 00000D 7006 JNZ ??ZDP_MgmtLeaveReq_0
1295 {
1296 ZDP_TmpBuf[Z_EXTADDR_LEN] |= ZDP_MGMT_LEAVE_REQ_RC;
\ 00000F 12.... LCALL ??Subroutine129_0 & 0xFFFF
1297 }
\ ??CrossCallReturnLabel_232:
\ 000012 7440 MOV A,#0x40
\ 000014 F0 MOVX @DPTR,A
1298 if ( Rejoin == TRUE )
\ ??ZDP_MgmtLeaveReq_0:
\ 000015 740C MOV A,#0xc
\ 000017 12.... LCALL ?XSTACK_DISP0_8
\ 00001A E0 MOVX A,@DPTR
\ 00001B 6401 XRL A,#0x1
\ 00001D 7007 JNZ ??ZDP_MgmtLeaveReq_1
1299 {
1300 ZDP_TmpBuf[Z_EXTADDR_LEN] |= ZDP_MGMT_LEAVE_REQ_REJOIN;
\ 00001F 12.... LCALL ??Subroutine129_0 & 0xFFFF
1301 }
\ ??CrossCallReturnLabel_233:
\ 000022 E0 MOVX A,@DPTR
\ 000023 D2E7 SETB 0xE0 /* A */.7
\ 000025 F0 MOVX @DPTR,A
1302
1303 return fillAndSend( &ZDP_TransID, dstAddr, Mgmt_Leave_req, (Z_EXTADDR_LEN + 1) );
\ ??ZDP_MgmtLeaveReq_1:
\ 000026 ; Setup parameters for call to function fillAndSend
\ 000026 75..34 MOV ?V2,#0x34
\ 000029 02.... LJMP ?Subroutine0 & 0xFFFF
1304 }
1305
1306 /*********************************************************************
1307 * @fn ZDP_MgmtNwkUpdateReq
1308 *
1309 * @brief This builds and send a Mgmt_NWK_Update_req message. This
1310 * function sends a unicast or broadcast message.
1311 *
1312 * @param dstAddr - destination address of the message
1313 * @param ChannelMask - 32 bit address bit map
1314 * @param ScanDuration - length of time to spend scanning each channel
1315 * @param ScanCount - number of energy scans to be conducted
1316 * @param NwkUpdateId - NWk Update Id value
1317 * @param NwkManagerAddr - NWK address for device with Network Manager
1318 * bit set in its Node Descriptor
1319 *
1320 * @return afStatus_t
1321 */
\ In segment BANKED_CODE, align 1, keep-with-next
1322 afStatus_t ZDP_MgmtNwkUpdateReq( zAddrType_t *dstAddr,
\ ZDP_MgmtNwkUpdateReq:
1323 uint32 ChannelMask,
1324 uint8 ScanDuration,
1325 uint8 ScanCount,
1326 uint8 NwkUpdateId,
1327 uint16 NwkManagerAddr )
1328 {
\ 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
\ 000009 E9 MOV A,R1
\ 00000A FE MOV R6,A
\ 00000B 8C.. MOV ?V1,R4
\ 00000D ED MOV A,R5
\ 00000E FF MOV R7,A
1329 uint8 *pBuf = ZDP_TmpBuf;
1330 byte len = sizeof( uint32 ) + 1; // ChannelMask + ScanDuration
\ 00000F 75..05 MOV ?V0,#0x5
1331
1332 pBuf = osal_buffer_uint32( pBuf, ChannelMask );
\ 000012 ; Setup parameters for call to function osal_buffer_uint32
\ 000012 740E MOV A,#0xe
\ 000014 12.... LCALL ?XSTACK_DISP0_8
\ 000017 12.... LCALL ?PUSH_XSTACK8_X_FOUR
\ 00001A 12.... LCALL ?Subroutine51 & 0xFFFF
\ ??CrossCallReturnLabel_77:
\ 00001D 12.... LCALL ?DEALLOC_XSTACK8
1333
1334 *pBuf++ = ScanDuration;
\ 000020 EE MOV A,R6
\ 000021 8A82 MOV DPL,R2
\ 000023 8B83 MOV DPH,R3
\ 000025 F0 MOVX @DPTR,A
1335
1336 if ( ScanDuration <= 0x05 )
\ 000026 C3 CLR C
\ 000027 9406 SUBB A,#0x6
\ 000029 500E JNC ??ZDP_MgmtNwkUpdateReq_0
1337 {
1338 // Request is to scan over channelMask
1339 len += sizeof( uint8 );
\ 00002B 75..06 MOV ?V0,#0x6
1340
1341 *pBuf++ = ScanCount;
\ 00002E A3 INC DPTR
\ 00002F E5.. MOV A,?V1
\ 000031 F0 MOVX @DPTR,A
\ 000032 EA MOV A,R2
\ 000033 2402 ADD A,#0x2
\ 000035 5026 JNC ??ZDP_MgmtNwkUpdateReq_1
\ 000037 8024 SJMP ??ZDP_MgmtNwkUpdateReq_1
1342 }
1343 else if ( ( ScanDuration == 0xFE ) || ( ScanDuration == 0xFF ) )
\ ??ZDP_MgmtNwkUpdateReq_0:
\ 000039 74FE MOV A,#-0x2
\ 00003B 6E XRL A,R6
\ 00003C 6005 JZ ??ZDP_MgmtNwkUpdateReq_2
\ 00003E 74FF MOV A,#-0x1
\ 000040 6E XRL A,R6
\ 000041 701A JNZ ??ZDP_MgmtNwkUpdateReq_1
1344 {
1345 // Request is to change Channel (0xFE) or apsChannelMask and NwkManagerAddr (0xFF)
1346 len += sizeof( uint8 );
\ ??ZDP_MgmtNwkUpdateReq_2:
\ 000043 75..06 MOV ?V0,#0x6
1347
1348 *pBuf++ = NwkUpdateId;
\ 000046 EF MOV A,R7
\ 000047 A3 INC DPTR
\ 000048 F0 MOVX @DPTR,A
1349
1350 if ( ScanDuration == 0xFF )
\ 000049 74FF MOV A,#-0x1
\ 00004B 6E XRL A,R6
\ 00004C 700F JNZ ??ZDP_MgmtNwkUpdateReq_1
1351 {
1352 len += sizeof( uint16 );
\ 00004E 75..08 MOV ?V0,#0x8
\ 000051 7412 MOV A,#0x12
\ 000053 12.... LCALL ?XSTACK_DISP0_8
\ 000056 12.... LCALL ?Subroutine30 & 0xFFFF
1353
1354 *pBuf++ = LO_UINT16( NwkManagerAddr );
1355 *pBuf++ = HI_UINT16( NwkManagerAddr );
1356 }
1357 }
\ ??CrossCallReturnLabel_36:
\ 000059 F0 MOVX @DPTR,A
\ 00005A EA MOV A,R2
\ 00005B 2404 ADD A,#0x4
1358
1359 return fillAndSend( &ZDP_TransID, dstAddr, Mgmt_NWK_Update_req, len );
\ ??ZDP_MgmtNwkUpdateReq_1:
\ 00005D ; Setup parameters for call to function fillAndSend
\ 00005D 75..38 MOV ?V2,#0x38
\ 000060 75..00 MOV ?V3,#0x0
\ 000063 78.. MOV R0,#?V2
\ 000065 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000068 A9.. MOV R1,?V0
\ 00006A 02.... LJMP ?Subroutine2 & 0xFFFF
1360 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine30:
\ 000000 12.... LCALL ?Subroutine80 & 0xFFFF
\ ??CrossCallReturnLabel_134:
\ 000003 A3 INC DPTR
\ 000004 12.... LCALL ?Subroutine96 & 0xFFFF
\ ??CrossCallReturnLabel_154:
\ 000007 A3 INC DPTR
\ 000008 22 RET
1361
1362
1363 /*********************************************************************
1364 * Network Management Responses
1365 */
1366
1367 /*********************************************************************
1368 * @fn ZDP_MgmtNwkDiscRsp
1369 *
1370 * @brief This builds and send a Mgmt_NWK_Disc_rsp message. This
1371 * function sends a unicast message.
1372 *
1373 * @param dstAddr - destination address of the message
1374 * @param Status - message status (ZDP_SUCCESS or other)
1375 * @param NetworkCount - Total number of networks found
1376 * @param StartIndex - Starting index within the reporting network
1377 * list
1378 * @param NetworkListCount - number of network lists included
1379 * in this message
1380 * @param NetworkList - List of network descriptors
1381 * @param SecurityEnable - Security Options
1382 *
1383 * @return afStatus_t
1384 */
\ In segment BANKED_CODE, align 1, keep-with-next
1385 afStatus_t ZDP_MgmtNwkDiscRsp( byte TransSeq, zAddrType_t *dstAddr,
\ ZDP_MgmtNwkDiscRsp:
1386 byte Status,
1387 byte NetworkCount,
1388 byte StartIndex,
1389 byte NetworkListCount,
1390 networkDesc_t *NetworkList,
1391 byte SecurityEnable )
1392 {
\ 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: 4
\ 000005 74FC MOV A,#-0x4
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A 7401 MOV A,#0x1
\ 00000C 12.... LCALL ?XSTACK_DISP0_8
\ 00000F E9 MOV A,R1
\ 000010 F0 MOVX @DPTR,A
\ 000011 7402 MOV A,#0x2
\ 000013 12.... LCALL ?XSTACK_DISP0_8
\ 000016 12.... LCALL ?Subroutine12 & 0xFFFF
\ ??CrossCallReturnLabel_6:
\ 000019 12.... LCALL ?XSTACK_DISP0_8
\ 00001C E0 MOVX A,@DPTR
\ 00001D F5.. MOV ?V3,A
1393 uint8 *buf;
1394 uint8 *pBuf;
1395 byte len = 1+1+1+1; // Status + NetworkCount + StartIndex + NetworkCountList.
1396 byte idx;
1397
1398 (void)SecurityEnable; // Intentionally unreferenced parameter
1399
1400 len += (NetworkListCount * ( ZDP_NETWORK_EXTENDED_DISCRIPTOR_SIZE - 2 ));
\ 00001F 75F00C MOV B,#0xc
\ 000022 A4 MUL AB
\ 000023 2404 ADD A,#0x4
\ 000025 F5.. MOV ?V6,A
1401
1402 buf = osal_mem_alloc( len+1 );
\ 000027 ; Setup parameters for call to function osal_mem_alloc
\ 000027 12.... LCALL ?Subroutine66 & 0xFFFF
\ ??CrossCallReturnLabel_104:
\ 00002A 8A.. MOV ?V4,R2
\ 00002C 8B.. MOV ?V5,R3
1403 if ( buf == NULL )
\ 00002E EA MOV A,R2
\ 00002F 4B ORL A,R3
\ 000030 7005 JNZ ??ZDP_MgmtNwkDiscRsp_0
1404 {
1405 return afStatus_MEM_FAIL;
\ 000032 7910 MOV R1,#0x10
\ 000034 02.... LJMP ??CrossCallReturnLabel_269 & 0xFFFF
1406 }
1407
1408 pBuf = buf+1;
\ ??ZDP_MgmtNwkDiscRsp_0:
\ 000037 8A82 MOV DPL,R2
\ 000039 8B83 MOV DPH,R3
\ 00003B A3 INC DPTR
\ 00003C AE82 MOV R6,DPL
\ 00003E AF83 MOV R7,DPH
1409
1410 *pBuf++ = Status;
\ 000040 85..82 MOV DPL,?XSP + 0
\ 000043 85..83 MOV DPH,?XSP + 1
\ 000046 12.... LCALL ??Subroutine132_0 & 0xFFFF
\ ??CrossCallReturnLabel_244:
\ 000049 F0 MOVX @DPTR,A
1411 *pBuf++ = NetworkCount;
\ 00004A A3 INC DPTR
\ 00004B E5.. MOV A,?V7
\ 00004D F0 MOVX @DPTR,A
1412 *pBuf++ = StartIndex;
\ 00004E 7414 MOV A,#0x14
\ 000050 12.... LCALL ?XSTACK_DISP0_8
\ 000053 12.... LCALL ?Subroutine40 & 0xFFFF
\ ??CrossCallReturnLabel_57:
\ 000056 A3 INC DPTR
\ 000057 12.... LCALL ?Subroutine34 & 0xFFFF
1413 *pBuf++ = NetworkListCount;
\ ??CrossCallReturnLabel_42:
\ 00005A E5.. MOV A,?V3
\ 00005C F0 MOVX @DPTR,A
\ 00005D EE MOV A,R6
\ 00005E 2404 ADD A,#0x4
\ 000060 FE MOV R6,A
\ 000061 5001 JNC ??ZDP_MgmtNwkDiscRsp_1
\ 000063 0F INC R7
1414
1415 for ( idx = 0; idx < NetworkListCount; idx++ )
\ ??ZDP_MgmtNwkDiscRsp_1:
\ 000064 75..00 MOV ?V2,#0x0
\ 000067 7416 MOV A,#0x16
\ 000069 12.... LCALL ?XSTACK_DISP0_8
\ 00006C 12.... LCALL ??Subroutine125_0 & 0xFFFF
\ ??CrossCallReturnLabel_226:
\ 00006F 801A SJMP ??ZDP_MgmtNwkDiscRsp_2
1416 {
1417 osal_cpyExtAddr( pBuf, NetworkList->extendedPANID);
1418 pBuf += Z_EXTADDR_LEN;
1419
1420 *pBuf++ = NetworkList->logicalChannel; // LogicalChannel
1421 *pBuf = NetworkList->stackProfile; // Stack profile
1422 *pBuf++ |= (byte)(NetworkList->version << 4); // ZigBee Version
1423 *pBuf = BEACON_ORDER_NO_BEACONS; // Beacon Order
1424 *pBuf++ |= (uint8)(BEACON_ORDER_NO_BEACONS << 4); // Superframe Order
1425
1426 if ( NetworkList->chosenRouter != INVALID_NODE_ADDR )
1427 {
1428 *pBuf++ = TRUE; // Permit Joining
1429 }
1430 else
1431 {
1432 *pBuf++ = FALSE;
\ ??ZDP_MgmtNwkDiscRsp_3:
\ 000071 12.... LCALL ?Subroutine74 & 0xFFFF
1433 }
\ ??CrossCallReturnLabel_122:
\ 000074 E4 CLR A
\ 000075 F0 MOVX @DPTR,A
\ 000076 EE MOV A,R6
\ 000077 240C ADD A,#0xc
\ 000079 FE MOV R6,A
\ 00007A 5001 JNC ??ZDP_MgmtNwkDiscRsp_4
\ 00007C 0F INC R7
1434
1435 NetworkList = NetworkList->nextDesc; // Move to next list entry
\ ??ZDP_MgmtNwkDiscRsp_4:
\ 00007D E5.. MOV A,?V0
\ 00007F 2414 ADD A,#0x14
\ 000081 F582 MOV DPL,A
\ 000083 E4 CLR A
\ 000084 35.. ADDC A,?V1
\ 000086 12.... LCALL ?Subroutine43 & 0xFFFF
\ ??CrossCallReturnLabel_228:
\ 000089 05.. INC ?V2
\ ??ZDP_MgmtNwkDiscRsp_2:
\ 00008B E5.. MOV A,?V2
\ 00008D C3 CLR C
\ 00008E 95.. SUBB A,?V3
\ 000090 5075 JNC ??ZDP_MgmtNwkDiscRsp_5
\ 000092 ; Setup parameters for call to function sAddrExtCpy
\ 000092 E5.. MOV A,?V0
\ 000094 240B ADD A,#0xb
\ 000096 FC MOV R4,A
\ 000097 E4 CLR A
\ 000098 35.. ADDC A,?V1
\ 00009A FD MOV R5,A
\ 00009B EE MOV A,R6
\ 00009C FA MOV R2,A
\ 00009D EF MOV A,R7
\ 00009E FB MOV R3,A
\ 00009F 12.... LCALL `??sAddrExtCpy::?relay`; Banked call to: sAddrExtCpy
\ 0000A2 85..82 MOV DPL,?V0
\ 0000A5 85..83 MOV DPH,?V1
\ 0000A8 A3 INC DPTR
\ 0000A9 A3 INC DPTR
\ 0000AA 12.... LCALL ?Subroutine40 & 0xFFFF
\ ??CrossCallReturnLabel_58:
\ 0000AD A3 INC DPTR
\ 0000AE A3 INC DPTR
\ 0000AF A3 INC DPTR
\ 0000B0 A3 INC DPTR
\ 0000B1 A3 INC DPTR
\ 0000B2 A3 INC DPTR
\ 0000B3 A3 INC DPTR
\ 0000B4 F0 MOVX @DPTR,A
\ 0000B5 EE MOV A,R6
\ 0000B6 2409 ADD A,#0x9
\ 0000B8 F8 MOV R0,A
\ 0000B9 E4 CLR A
\ 0000BA 3F ADDC A,R7
\ 0000BB F9 MOV R1,A
\ 0000BC 85..82 MOV DPL,?V0
\ 0000BF 85..83 MOV DPH,?V1
\ 0000C2 A3 INC DPTR
\ 0000C3 A3 INC DPTR
\ 0000C4 A3 INC DPTR
\ 0000C5 A3 INC DPTR
\ 0000C6 A3 INC DPTR
\ 0000C7 A3 INC DPTR
\ 0000C8 12.... LCALL ?Subroutine63 & 0xFFFF
\ ??CrossCallReturnLabel_98:
\ 0000CB 12.... LCALL ?Subroutine26 & 0xFFFF
\ ??CrossCallReturnLabel_32:
\ 0000CE A3 INC DPTR
\ 0000CF A3 INC DPTR
\ 0000D0 E0 MOVX A,@DPTR
\ 0000D1 C4 SWAP A
\ 0000D2 54F0 ANL A,#0xf0
\ 0000D4 FA MOV R2,A
\ 0000D5 8882 MOV DPL,R0
\ 0000D7 8983 MOV DPH,R1
\ 0000D9 E0 MOVX A,@DPTR
\ 0000DA 4A ORL A,R2
\ 0000DB 12.... LCALL ?Subroutine34 & 0xFFFF
\ ??CrossCallReturnLabel_43:
\ 0000DE A3 INC DPTR
\ 0000DF A3 INC DPTR
\ 0000E0 A3 INC DPTR
\ 0000E1 A3 INC DPTR
\ 0000E2 A3 INC DPTR
\ 0000E3 A3 INC DPTR
\ 0000E4 A3 INC DPTR
\ 0000E5 74FF MOV A,#-0x1
\ 0000E7 12.... LCALL ?Subroutine17 & 0xFFFF
\ ??CrossCallReturnLabel_21:
\ 0000EA E0 MOVX A,@DPTR
\ 0000EB 64FE XRL A,#0xfe
\ 0000ED 7003 JNZ ??ZDP_MgmtNwkDiscRsp_6
\ 0000EF A3 INC DPTR
\ 0000F0 E0 MOVX A,@DPTR
\ 0000F1 F4 CPL A
\ ??ZDP_MgmtNwkDiscRsp_6:
\ 0000F2 7003 JNZ $+5
\ 0000F4 02.... LJMP ??ZDP_MgmtNwkDiscRsp_3 & 0xFFFF
\ 0000F7 12.... LCALL ?Subroutine74 & 0xFFFF
1436 }
\ ??CrossCallReturnLabel_123:
\ 0000FA 7401 MOV A,#0x1
\ 0000FC F0 MOVX @DPTR,A
\ 0000FD EE MOV A,R6
\ 0000FE 240C ADD A,#0xc
\ 000100 FE MOV R6,A
\ 000101 5001 JNC ??ZDP_MgmtNwkDiscRsp_7
\ 000103 0F INC R7
\ ??ZDP_MgmtNwkDiscRsp_7:
\ 000104 02.... LJMP ??ZDP_MgmtNwkDiscRsp_4 & 0xFFFF
1437
1438 FillAndSendBuffer( &TransSeq, dstAddr, Mgmt_NWK_Disc_rsp, len, buf );
\ ??ZDP_MgmtNwkDiscRsp_5:
\ 000107 85..82 MOV DPL,?V4
\ 00010A 85..83 MOV DPH,?V5
\ 00010D 12.... LCALL ??Subroutine133_0 & 0xFFFF
\ ??CrossCallReturnLabel_255:
\ 000110 ; Setup parameters for call to function fillAndSend
\ 000110 75..30 MOV ?V0,#0x30
\ 000113 75..80 MOV ?V1,#-0x80
\ 000116 78.. MOV R0,#?V0
\ 000118 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00011B A9.. MOV R1,?V6
\ 00011D 7404 MOV A,#0x4
\ 00011F 12.... LCALL ?XSTACK_DISP0_8
\ 000122 12.... LCALL ?Subroutine50 & 0xFFFF
\ ??CrossCallReturnLabel_73:
\ 000125 7403 MOV A,#0x3
\ 000127 12.... LCALL ?XSTACK_DISP101_8
\ 00012A 12.... LCALL ??Subroutine140_0 & 0xFFFF
\ ??CrossCallReturnLabel_303:
\ 00012D 12.... LCALL ?DEALLOC_XSTACK8
\ 000130 E9 MOV A,R1
\ 000131 FE MOV R6,A
\ 000132 ; Setup parameters for call to function osal_mem_free
\ 000132 AA.. MOV R2,?V4
\ 000134 AB.. MOV R3,?V5
\ 000136 12.... LCALL ??Subroutine136_0 & 0xFFFF
\ ??CrossCallReturnLabel_269:
\ 000139 REQUIRE ?Subroutine7
\ 000139 ; // Fall through to label ?Subroutine7
1439 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine7:
\ 000000 7404 MOV A,#0x4
\ 000002 02.... LJMP ??Subroutine138_0 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine34:
\ 000000 F0 MOVX @DPTR,A
\ 000001 8E82 MOV DPL,R6
\ 000003 8F83 MOV DPH,R7
\ 000005 A3 INC DPTR
\ 000006 A3 INC DPTR
\ 000007 A3 INC DPTR
\ 000008 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine133_0:
\ 000000 A3 INC DPTR
\ 000001 A882 MOV R0,DPL
\ 000003 A983 MOV R1,DPH
\ 000005 90.... MOV DPTR,#ZDP_TmpBuf
\ 000008 REQUIRE ??Subroutine134_0
\ 000008 ; // Fall through to label ??Subroutine134_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine26:
\ 000000 12.... LCALL ?Subroutine92 & 0xFFFF
\ ??CrossCallReturnLabel_147:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ??Subroutine136_0:
\ 000000 12.... LCALL ?Subroutine100 & 0xFFFF
\ ??CrossCallReturnLabel_270:
\ 000003 EE MOV A,R6
\ 000004 F9 MOV R1,A
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine66:
\ 000000 12.... LCALL ?Subroutine99 & 0xFFFF
\ ??CrossCallReturnLabel_159:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine99:
\ 000000 2401 ADD A,#0x1
\ 000002 FA MOV R2,A
\ 000003 E4 CLR A
\ 000004 3400 ADDC A,#0x0
\ 000006 FB MOV R3,A
\ 000007 12.... LCALL `??osal_mem_alloc::?relay`; Banked call to: osal_mem_alloc
\ 00000A 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine63:
\ 000000 12.... LCALL ?Subroutine103 & 0xFFFF
\ ??CrossCallReturnLabel_168:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine12:
\ 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 EC MOV A,R4
\ 000006 85..82 MOV DPL,?XSP + 0
\ 000009 85..83 MOV DPH,?XSP + 1
\ 00000C F0 MOVX @DPTR,A
\ 00000D 8D.. MOV ?V7,R5
\ 00000F 7415 MOV A,#0x15
\ 000011 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine100:
\ 000000 12.... LCALL `??osal_mem_free::?relay`; Banked call to: osal_mem_free
\ 000003 90.... MOV DPTR,#ZDP_TmpBuf
\ 000006 74.. MOV A,#(ZDP_Buf + 1) & 0xff
\ 000008 F0 MOVX @DPTR,A
\ 000009 A3 INC DPTR
\ 00000A 74.. MOV A,#((ZDP_Buf + 1) >> 8) & 0xff
\ 00000C F0 MOVX @DPTR,A
\ 00000D 22 RET
1440
1441 /*********************************************************************
1442 * @fn ZDP_MgmtLqiRsp
1443 *
1444 * @brief This builds and send a Mgmt_Lqi_rsp message. This
1445 * function sends a unicast message.
1446 *
1447 * @param dstAddr - destination address of the message
1448 * @param Status - message status (ZDP_SUCCESS or other)
1449 * @param NeighborLqiEntries - Total number of entries found
1450 * @param StartIndex - Starting index within the reporting list
1451 * @param NeighborLqiCount - number of lists included
1452 * in this message
1453 * @param NeighborLqiList - List of NeighborLqiItems. This list
1454 * is the list to be sent, not the entire list
1455 * @param SecurityEnable - true if secure
1456 *
1457 * @return ZStatus_t
1458 */
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine20:
\ 000000 85..82 MOV DPL,?V2
\ 000003 85..83 MOV DPH,?V3
\ 000006 REQUIRE ??Subroutine133_0
\ 000006 ; // Fall through to label ??Subroutine133_0
\ In segment BANKED_CODE, align 1, keep-with-next
1459 ZStatus_t ZDP_MgmtLqiRsp( byte TransSeq, zAddrType_t *dstAddr,
\ ZDP_MgmtLqiRsp:
1460 byte Status,
1461 byte NeighborLqiEntries,
1462 byte StartIndex,
1463 byte NeighborLqiCount,
1464 ZDP_MgmtLqiItem_t* NeighborList,
1465 byte SecurityEnable )
1466 {
\ 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: 4
\ 000005 74FC MOV A,#-0x4
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A E9 MOV A,R1
\ 00000B 85..82 MOV DPL,?XSP + 0
\ 00000E 85..83 MOV DPH,?XSP + 1
\ 000011 F0 MOVX @DPTR,A
\ 000012 7402 MOV A,#0x2
\ 000014 12.... LCALL ?XSTACK_DISP0_8
\ 000017 12.... LCALL ??Subroutine142_0 & 0xFFFF
\ ??CrossCallReturnLabel_314:
\ 00001A 7401 MOV A,#0x1
\ 00001C 12.... LCALL ?XSTACK_DISP0_8
\ 00001F ED MOV A,R5
\ 000020 F0 MOVX @DPTR,A
1467 ZDP_MgmtLqiItem_t* list = NeighborList;
\ 000021 7416 MOV A,#0x16
\ 000023 12.... LCALL ?XSTACK_DISP0_8
\ 000026 12.... LCALL ??Subroutine135_0 & 0xFFFF
1468 uint8 *buf, *pBuf;
1469 byte len, x;
1470
1471 (void)SecurityEnable; // Intentionally unreferenced parameter
1472
1473 if ( ZSuccess != Status )
\ ??CrossCallReturnLabel_262:
\ 000029 EC MOV A,R4
\ 00002A 6026 JZ ??ZDP_MgmtLqiRsp_0
1474 {
1475 ZDP_TmpBuf[0] = Status;
\ 00002C 12.... LCALL ?Subroutine54 & 0xFFFF
\ ??CrossCallReturnLabel_217:
\ 00002F EC MOV A,R4
\ 000030 F0 MOVX @DPTR,A
1476 return fillAndSend( &TransSeq, dstAddr, Mgmt_Lqi_rsp, 1 );
\ 000031 ; Setup parameters for call to function fillAndSend
\ 000031 75..31 MOV ?V0,#0x31
\ 000034 75..80 MOV ?V1,#-0x80
\ 000037 78.. MOV R0,#?V0
\ 000039 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00003C 7901 MOV R1,#0x1
\ 00003E 7404 MOV A,#0x4
\ 000040 12.... LCALL ?XSTACK_DISP0_8
\ 000043 12.... LCALL ?Subroutine49 & 0xFFFF
1477 }
\ ??CrossCallReturnLabel_68:
\ 000046 12.... LCALL ?XSTACK_DISP101_8
\ 000049 12.... LCALL ??Subroutine140_0 & 0xFFFF
\ ??CrossCallReturnLabel_304:
\ 00004C 12.... LCALL ?DEALLOC_XSTACK8
\ 00004F 02.... LJMP ??CrossCallReturnLabel_267 & 0xFFFF
\ ??ZDP_MgmtLqiRsp_0:
\ 000052 7415 MOV A,#0x15
\ 000054 12.... LCALL ?XSTACK_DISP0_8
\ 000057 E0 MOVX A,@DPTR
\ 000058 F5.. MOV ?V5,A
1478
1479 // (Status + NeighborLqiEntries + StartIndex + NeighborLqiCount) +
1480 // neighbor LQI data.
1481 len = (1 + 1 + 1 + 1) + (NeighborLqiCount * ZDP_MGMTLQI_EXTENDED_SIZE);
\ 00005A 75F016 MOV B,#0x16
\ 00005D A4 MUL AB
\ 00005E 2404 ADD A,#0x4
\ 000060 F5.. MOV ?V6,A
1482
1483 buf = osal_mem_alloc( len+1 );
\ 000062 ; Setup parameters for call to function osal_mem_alloc
\ 000062 12.... LCALL ?Subroutine65 & 0xFFFF
1484 if ( buf == NULL )
\ ??CrossCallReturnLabel_102:
\ 000065 7005 JNZ ??ZDP_MgmtLqiRsp_1
1485 {
1486 return afStatus_MEM_FAIL;
\ 000067 7910 MOV R1,#0x10
\ 000069 02.... LJMP ??CrossCallReturnLabel_267 & 0xFFFF
1487 }
1488
1489 pBuf = buf+1;
\ ??ZDP_MgmtLqiRsp_1:
\ 00006C 8A82 MOV DPL,R2
\ 00006E 8B83 MOV DPH,R3
\ 000070 A3 INC DPTR
\ 000071 8582.. MOV ?V0,DPL
\ 000074 8583.. MOV ?V1,DPH
1490
1491 *pBuf++ = Status;
\ 000077 E4 CLR A
\ 000078 F0 MOVX @DPTR,A
1492 *pBuf++ = NeighborLqiEntries;
\ 000079 04 INC A
\ 00007A 12.... LCALL ?XSTACK_DISP0_8
\ 00007D 12.... LCALL ?Subroutine57 & 0xFFFF
1493 *pBuf++ = StartIndex;
\ ??CrossCallReturnLabel_85:
\ 000080 7414 MOV A,#0x14
\ 000082 12.... LCALL ?XSTACK_DISP0_8
\ 000085 12.... LCALL ?Subroutine90 & 0xFFFF
\ ??CrossCallReturnLabel_142:
\ 000088 A3 INC DPTR
\ 000089 12.... LCALL ?Subroutine26 & 0xFFFF
1494 *pBuf++ = NeighborLqiCount;
\ ??CrossCallReturnLabel_33:
\ 00008C E5.. MOV A,?V5
\ 00008E F0 MOVX @DPTR,A
\ 00008F E5.. MOV A,?V0
\ 000091 2404 ADD A,#0x4
\ 000093 F5.. MOV ?V0,A
\ 000095 5002 JNC ??ZDP_MgmtLqiRsp_2
\ 000097 05.. INC ?V1
1495
1496 for ( x = 0; x < NeighborLqiCount; x++ )
\ ??ZDP_MgmtLqiRsp_2:
\ 000099 75..00 MOV ?V4,#0x0
\ 00009C 02.... LJMP ??ZDP_MgmtLqiRsp_3 & 0xFFFF
1497 {
1498 osal_cpyExtAddr( pBuf, list->extPanID); // Extended PanID
\ ??ZDP_MgmtLqiRsp_4:
\ 00009F ; Setup parameters for call to function sAddrExtCpy
\ 00009F EE MOV A,R6
\ 0000A0 2402 ADD A,#0x2
\ 0000A2 FC MOV R4,A
\ 0000A3 E4 CLR A
\ 0000A4 3F ADDC A,R7
\ 0000A5 FD MOV R5,A
\ 0000A6 AA.. MOV R2,?V0
\ 0000A8 AB.. MOV R3,?V1
\ 0000AA 12.... LCALL `??sAddrExtCpy::?relay`; Banked call to: sAddrExtCpy
1499 pBuf += Z_EXTADDR_LEN;
1500
1501 // EXTADDR
1502 pBuf = osal_cpyExtAddr( pBuf, list->extAddr );
\ 0000AD ; Setup parameters for call to function sAddrExtCpy
\ 0000AD EE MOV A,R6
\ 0000AE 240A ADD A,#0xa
\ 0000B0 FC MOV R4,A
\ 0000B1 E4 CLR A
\ 0000B2 3F ADDC A,R7
\ 0000B3 FD MOV R5,A
\ 0000B4 E5.. MOV A,?V0
\ 0000B6 2408 ADD A,#0x8
\ 0000B8 FA MOV R2,A
\ 0000B9 E4 CLR A
\ 0000BA 35.. ADDC A,?V1
\ 0000BC FB MOV R3,A
\ 0000BD 12.... LCALL `??sAddrExtCpy::?relay`; Banked call to: sAddrExtCpy
\ 0000C0 8A.. MOV ?V0,R2
\ 0000C2 8B.. MOV ?V1,R3
\ 0000C4 A8.. MOV R0,?V0
\ 0000C6 A9.. MOV R1,?V1
1503
1504 // NWKADDR
1505 *pBuf++ = LO_UINT16( list->nwkAddr );
\ 0000C8 EE MOV A,R6
\ 0000C9 2412 ADD A,#0x12
\ 0000CB 12.... LCALL ?Subroutine9 & 0xFFFF
1506 *pBuf++ = HI_UINT16( list->nwkAddr );
1507
1508 // DEVICETYPE
1509 *pBuf = list->devType;
\ ??CrossCallReturnLabel_272:
\ 0000CE E4 CLR A
\ 0000CF 39 ADDC A,R1
\ 0000D0 FB MOV R3,A
\ 0000D1 EE MOV A,R6
\ 0000D2 2414 ADD A,#0x14
\ 0000D4 F582 MOV DPL,A
\ 0000D6 E4 CLR A
\ 0000D7 3F ADDC A,R7
\ 0000D8 F583 MOV DPH,A
\ 0000DA 12.... LCALL ?Subroutine38 & 0xFFFF
1510
1511 // RXONIDLE
1512 *pBuf |= (uint8)(list->rxOnIdle << 2);
\ ??CrossCallReturnLabel_49:
\ 0000DD EE MOV A,R6
\ 0000DE 2415 ADD A,#0x15
\ 0000E0 F582 MOV DPL,A
\ 0000E2 E4 CLR A
\ 0000E3 3F ADDC A,R7
\ 0000E4 F583 MOV DPH,A
\ 0000E6 E0 MOVX A,@DPTR
\ 0000E7 33 RLC A
\ 0000E8 33 RLC A
\ 0000E9 54FC ANL A,#0xfc
\ 0000EB FC MOV R4,A
\ 0000EC 8A82 MOV DPL,R2
\ 0000EE 8B83 MOV DPH,R3
\ 0000F0 E0 MOVX A,@DPTR
\ 0000F1 4C ORL A,R4
\ 0000F2 F0 MOVX @DPTR,A
1513
1514 // RELATIONSHIP
1515 *pBuf++ |= (uint8)(list->relation << 4);
\ 0000F3 EE MOV A,R6
\ 0000F4 2416 ADD A,#0x16
\ 0000F6 F582 MOV DPL,A
\ 0000F8 E4 CLR A
\ 0000F9 3F ADDC A,R7
\ 0000FA F583 MOV DPH,A
\ 0000FC E0 MOVX A,@DPTR
\ 0000FD C4 SWAP A
\ 0000FE 54F0 ANL A,#0xf0
\ 000100 FC MOV R4,A
\ 000101 8A82 MOV DPL,R2
\ 000103 8B83 MOV DPH,R3
\ 000105 E0 MOVX A,@DPTR
\ 000106 4C ORL A,R4
\ 000107 F0 MOVX @DPTR,A
1516
1517 // PERMITJOINING
1518 *pBuf++ = (uint8)(list->permit);
\ 000108 EE MOV A,R6
\ 000109 2417 ADD A,#0x17
\ 00010B 12.... LCALL ?Subroutine62 & 0xFFFF
\ ??CrossCallReturnLabel_96:
\ 00010E F0 MOVX @DPTR,A
1519
1520 // DEPTH
1521 *pBuf++ = list->depth;
\ 00010F EE MOV A,R6
\ 000110 2418 ADD A,#0x18
\ 000112 F582 MOV DPL,A
\ 000114 E4 CLR A
\ 000115 3F ADDC A,R7
\ 000116 F583 MOV DPH,A
\ 000118 12.... LCALL ?Subroutine55 & 0xFFFF
1522
1523 // LQI
1524 *pBuf++ = list->lqi;
\ ??CrossCallReturnLabel_80:
\ 00011B EE MOV A,R6
\ 00011C 2419 ADD A,#0x19
\ 00011E 12.... LCALL ?Subroutine62 & 0xFFFF
\ ??CrossCallReturnLabel_97:
\ 000121 A3 INC DPTR
\ 000122 A3 INC DPTR
\ 000123 F0 MOVX @DPTR,A
\ 000124 E8 MOV A,R0
\ 000125 2406 ADD A,#0x6
\ 000127 F5.. MOV ?V0,A
\ 000129 E4 CLR A
\ 00012A 39 ADDC A,R1
\ 00012B F5.. MOV ?V1,A
1525
1526 list++; // next list entry
\ 00012D EE MOV A,R6
\ 00012E 241A ADD A,#0x1a
\ 000130 FE MOV R6,A
\ 000131 5001 JNC ??ZDP_MgmtLqiRsp_5
\ 000133 0F INC R7
1527 }
\ ??ZDP_MgmtLqiRsp_5:
\ 000134 05.. INC ?V4
\ ??ZDP_MgmtLqiRsp_3:
\ 000136 E5.. MOV A,?V4
\ 000138 C3 CLR C
\ 000139 95.. SUBB A,?V5
\ 00013B 5003 JNC $+5
\ 00013D 02.... LJMP ??ZDP_MgmtLqiRsp_4 & 0xFFFF
1528
1529 FillAndSendBuffer( &TransSeq, dstAddr, Mgmt_Lqi_rsp, len, buf );
\ 000140 12.... LCALL ?Subroutine20 & 0xFFFF
\ ??CrossCallReturnLabel_258:
\ 000143 ; Setup parameters for call to function fillAndSend
\ 000143 75..31 MOV ?V0,#0x31
\ 000146 75..80 MOV ?V1,#-0x80
\ 000149 78.. MOV R0,#?V0
\ 00014B 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00014E A9.. MOV R1,?V6
\ 000150 7404 MOV A,#0x4
\ 000152 12.... LCALL ?XSTACK_DISP0_8
\ 000155 12.... LCALL ?Subroutine49 & 0xFFFF
\ ??CrossCallReturnLabel_69:
\ 000158 12.... LCALL ?XSTACK_DISP101_8
\ 00015B 12.... LCALL ??Subroutine140_0 & 0xFFFF
\ ??CrossCallReturnLabel_305:
\ 00015E 12.... LCALL ?DEALLOC_XSTACK8
\ 000161 12.... LCALL ?Subroutine24 & 0xFFFF
\ ??CrossCallReturnLabel_267:
\ 000164 02.... LJMP ?Subroutine7 & 0xFFFF
1530 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine62:
\ 000000 F582 MOV DPL,A
\ 000002 E4 CLR A
\ 000003 3F ADDC A,R7
\ 000004 F583 MOV DPH,A
\ 000006 12.... LCALL ?Subroutine88 & 0xFFFF
\ ??CrossCallReturnLabel_141:
\ 000009 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine88:
\ 000000 12.... LCALL ?Subroutine103 & 0xFFFF
\ ??CrossCallReturnLabel_169:
\ 000003 A3 INC DPTR
\ 000004 A3 INC DPTR
\ 000005 A3 INC DPTR
\ 000006 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine24:
\ 000000 E9 MOV A,R1
\ 000001 FE MOV R6,A
\ 000002 ; Setup parameters for call to function osal_mem_free
\ 000002 ; Setup parameters for call to function osal_mem_free
\ 000002 AA.. MOV R2,?V2
\ 000004 AB.. MOV R3,?V3
\ 000006 REQUIRE ??Subroutine136_0
\ 000006 ; // Fall through to label ??Subroutine136_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine9:
\ 000000 FC MOV R4,A
\ 000001 E4 CLR A
\ 000002 3F ADDC A,R7
\ 000003 FD MOV R5,A
\ 000004 8C82 MOV DPL,R4
\ 000006 F583 MOV DPH,A
\ 000008 REQUIRE ??Subroutine137_0
\ 000008 ; // Fall through to label ??Subroutine137_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine55:
\ 000000 12.... LCALL ?Subroutine88 & 0xFFFF
\ ??CrossCallReturnLabel_140:
\ 000003 A3 INC DPTR
\ 000004 F0 MOVX @DPTR,A
\ 000005 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine49:
\ 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 7402 MOV A,#0x2
\ 000007 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine65:
\ 000000 12.... LCALL ?Subroutine99 & 0xFFFF
\ ??CrossCallReturnLabel_160:
\ 000003 8A.. MOV ?V2,R2
\ 000005 8B.. MOV ?V3,R3
\ 000007 EA MOV A,R2
\ 000008 4B ORL A,R3
\ 000009 22 RET
1531
1532 /*********************************************************************
1533 * @fn ZDP_MgmtRtgRsp
1534 *
1535 * @brief This builds and send a Mgmt_Rtg_rsp message. This
1536 * function sends a unicast message.
1537 *
1538 * @param dstAddr - destination address of the message
1539 * @param Status - message status (ZDP_SUCCESS or other)
1540 * @param RoutingTableEntries - Total number of entries
1541 * @param StartIndex - Starting index within the reporting list
1542 * @param RoutingTableListCount - number of entries included
1543 * in this message
1544 * @param RoutingTableList - List of Routing Table entries
1545 * @param SecurityEnable - true to enable security for this message
1546 *
1547 * @return ZStatus_t
1548 */
\ In segment BANKED_CODE, align 1, keep-with-next
1549 ZStatus_t ZDP_MgmtRtgRsp( byte TransSeq, zAddrType_t *dstAddr,
\ ZDP_MgmtRtgRsp:
1550 byte Status,
1551 byte RoutingTableEntries,
1552 byte StartIndex,
1553 byte RoutingListCount,
1554 rtgItem_t *RoutingTableList,
1555 byte SecurityEnable )
1556 {
\ 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: 3
\ 000005 74FD MOV A,#-0x3
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A E9 MOV A,R1
\ 00000B 85..82 MOV DPL,?XSP + 0
\ 00000E 85..83 MOV DPH,?XSP + 1
\ 000011 F0 MOVX @DPTR,A
\ 000012 7401 MOV A,#0x1
\ 000014 12.... LCALL ?XSTACK_DISP0_8
\ 000017 12.... LCALL ??Subroutine142_0 & 0xFFFF
\ ??CrossCallReturnLabel_315:
\ 00001A 8C.. MOV ?V7,R4
\ 00001C 8D.. MOV ?V6,R5
\ 00001E 7414 MOV A,#0x14
\ 000020 12.... LCALL ?XSTACK_DISP0_8
\ 000023 E0 MOVX A,@DPTR
\ 000024 F5.. MOV ?V0,A
1557 uint8 *buf;
1558 uint8 *pBuf;
1559 // Status + RoutingTableEntries + StartIndex + RoutingListCount.
1560 byte len = 1 + 1 + 1 + 1;
1561 byte x;
1562
1563 (void)SecurityEnable; // Intentionally unreferenced parameter
1564
1565 // Add an array for Routing List data
1566 len += (RoutingListCount * ZDP_ROUTINGENTRY_SIZE);
\ 000026 75F005 MOV B,#0x5
\ 000029 A4 MUL AB
\ 00002A 2404 ADD A,#0x4
\ 00002C F5.. MOV ?V1,A
1567
1568 buf = osal_mem_alloc( (short)(len+1) );
\ 00002E ; Setup parameters for call to function osal_mem_alloc
\ 00002E 12.... LCALL ?Subroutine66 & 0xFFFF
\ ??CrossCallReturnLabel_105:
\ 000031 8A.. MOV ?V2,R2
\ 000033 8B.. MOV ?V3,R3
\ 000035 AE.. MOV R6,?V2
\ 000037 AF.. MOV R7,?V3
1569 if ( buf == NULL )
\ 000039 EA MOV A,R2
\ 00003A 4F ORL A,R7
\ 00003B 7005 JNZ ??ZDP_MgmtRtgRsp_0
1570 {
1571 return afStatus_MEM_FAIL;
\ 00003D 7910 MOV R1,#0x10
\ 00003F 02.... LJMP ??ZDP_MgmtRtgRsp_1 & 0xFFFF
1572 }
1573
1574 pBuf = buf+1;
\ ??ZDP_MgmtRtgRsp_0:
\ 000042 8A82 MOV DPL,R2
\ 000044 8B83 MOV DPH,R3
\ 000046 A3 INC DPTR
\ 000047 A882 MOV R0,DPL
\ 000049 A983 MOV R1,DPH
1575
1576 *pBuf++ = Status;
\ 00004B E5.. MOV A,?V7
\ 00004D F0 MOVX @DPTR,A
1577 *pBuf++ = RoutingTableEntries;
\ 00004E A3 INC DPTR
\ 00004F E5.. MOV A,?V6
\ 000051 F0 MOVX @DPTR,A
1578 *pBuf++ = StartIndex;
\ 000052 7413 MOV A,#0x13
\ 000054 12.... LCALL ?XSTACK_DISP0_8
\ 000057 12.... LCALL ?Subroutine63 & 0xFFFF
\ ??CrossCallReturnLabel_99:
\ 00005A 12.... LCALL ??Subroutine119_0 & 0xFFFF
1579 *pBuf++ = RoutingListCount;
\ ??CrossCallReturnLabel_187:
\ 00005D E5.. MOV A,?V0
\ 00005F F0 MOVX @DPTR,A
\ 000060 E8 MOV A,R0
\ 000061 2404 ADD A,#0x4
\ 000063 F8 MOV R0,A
\ 000064 5001 JNC ??ZDP_MgmtRtgRsp_2
\ 000066 09 INC R1
1580
1581 for ( x = 0; x < RoutingListCount; x++ )
\ ??ZDP_MgmtRtgRsp_2:
\ 000067 7A00 MOV R2,#0x0
\ 000069 7415 MOV A,#0x15
\ 00006B 12.... LCALL ?XSTACK_DISP0_8
\ 00006E 12.... LCALL ?Subroutine50 & 0xFFFF
\ ??CrossCallReturnLabel_74:
\ 000071 8036 SJMP ??ZDP_MgmtRtgRsp_3
1582 {
1583 *pBuf++ = LO_UINT16( RoutingTableList->dstAddress ); // Destination Address
\ ??ZDP_MgmtRtgRsp_4:
\ 000073 8C82 MOV DPL,R4
\ 000075 8D83 MOV DPH,R5
\ 000077 12.... LCALL ?Subroutine63 & 0xFFFF
\ ??CrossCallReturnLabel_100:
\ 00007A 12.... LCALL ?Subroutine16 & 0xFFFF
1584 *pBuf++ = HI_UINT16( RoutingTableList->dstAddress );
\ ??CrossCallReturnLabel_18:
\ 00007D 8882 MOV DPL,R0
\ 00007F 8983 MOV DPH,R1
\ 000081 12.... LCALL ?Subroutine25 & 0xFFFF
1585 *pBuf++ = RoutingTableList->status;
\ ??CrossCallReturnLabel_31:
\ 000084 8882 MOV DPL,R0
\ 000086 8983 MOV DPH,R1
\ 000088 A3 INC DPTR
\ 000089 A3 INC DPTR
\ 00008A F0 MOVX @DPTR,A
1586 *pBuf++ = LO_UINT16( RoutingTableList->nextHopAddress ); // Next hop
\ 00008B EC MOV A,R4
\ 00008C 2402 ADD A,#0x2
\ 00008E 12.... LCALL ?Subroutine101 & 0xFFFF
\ ??CrossCallReturnLabel_161:
\ 000091 12.... LCALL ?Subroutine63 & 0xFFFF
\ ??CrossCallReturnLabel_101:
\ 000094 12.... LCALL ?Subroutine33 & 0xFFFF
1587 *pBuf++ = HI_UINT16( RoutingTableList->nextHopAddress );
\ ??CrossCallReturnLabel_41:
\ 000097 12.... LCALL ?Subroutine55 & 0xFFFF
\ ??CrossCallReturnLabel_81:
\ 00009A E8 MOV A,R0
\ 00009B 2405 ADD A,#0x5
\ 00009D F8 MOV R0,A
\ 00009E 5001 JNC ??ZDP_MgmtRtgRsp_5
\ 0000A0 09 INC R1
1588 RoutingTableList++; // Move to next list entry
\ ??ZDP_MgmtRtgRsp_5:
\ 0000A1 EC MOV A,R4
\ 0000A2 2407 ADD A,#0x7
\ 0000A4 FC MOV R4,A
\ 0000A5 5001 JNC ??ZDP_MgmtRtgRsp_6
\ 0000A7 0D INC R5
1589 }
\ ??ZDP_MgmtRtgRsp_6:
\ 0000A8 0A INC R2
\ ??ZDP_MgmtRtgRsp_3:
\ 0000A9 EA MOV A,R2
\ 0000AA C3 CLR C
\ 0000AB 95.. SUBB A,?V0
\ 0000AD 40C4 JC ??ZDP_MgmtRtgRsp_4
1590
1591 FillAndSendBuffer( &TransSeq, dstAddr, Mgmt_Rtg_rsp, len, buf );
\ 0000AF 8E82 MOV DPL,R6
\ 0000B1 8B83 MOV DPH,R3
\ 0000B3 12.... LCALL ??Subroutine133_0 & 0xFFFF
\ ??CrossCallReturnLabel_256:
\ 0000B6 ; Setup parameters for call to function fillAndSend
\ 0000B6 75..32 MOV ?V2,#0x32
\ 0000B9 75..80 MOV ?V3,#-0x80
\ 0000BC 78.. MOV R0,#?V2
\ 0000BE 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 0000C1 A9.. MOV R1,?V1
\ 0000C3 7403 MOV A,#0x3
\ 0000C5 12.... LCALL ?XSTACK_DISP0_8
\ 0000C8 12.... LCALL ?Subroutine49 & 0xFFFF
\ ??CrossCallReturnLabel_70:
\ 0000CB 12.... LCALL ?XSTACK_DISP101_8
\ 0000CE 12.... LCALL ??Subroutine140_0 & 0xFFFF
\ ??CrossCallReturnLabel_306:
\ 0000D1 12.... LCALL ?DEALLOC_XSTACK8
\ 0000D4 12.... LCALL ?Subroutine75 & 0xFFFF
\ ??CrossCallReturnLabel_124:
\ 0000D7 A9.. MOV R1,?V0
\ ??ZDP_MgmtRtgRsp_1:
\ 0000D9 7403 MOV A,#0x3
\ 0000DB 02.... LJMP ??Subroutine138_0 & 0xFFFF
1592 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine75:
\ 000000 E9 MOV A,R1
\ 000001 F5.. MOV ?V0,A
\ 000003 ; Setup parameters for call to function osal_mem_free
\ 000003 ; Setup parameters for call to function osal_mem_free
\ 000003 EE MOV A,R6
\ 000004 FA MOV R2,A
\ 000005 EF MOV A,R7
\ 000006 FB MOV R3,A
\ 000007 12.... LCALL ?Subroutine100 & 0xFFFF
\ ??CrossCallReturnLabel_271:
\ 00000A 22 RET
1593
1594 /*********************************************************************
1595 * @fn ZDP_MgmtBindRsp
1596 *
1597 * @brief This builds and send a Mgmt_Bind_rsp message. This
1598 * function sends a unicast message.
1599 *
1600 * @param dstAddr - destination address of the message
1601 * @param Status - message status (ZDP_SUCCESS or other)
1602 * @param BindingTableEntries - Total number of entries
1603 * @param StartIndex - Starting index within the reporting list
1604 * @param BindingTableListCount - number of entries included
1605 * in this message
1606 * @param BindingTableList - List of Binding Table entries
1607 * @param SecurityEnable - Security Options
1608 *
1609 * @return ZStatus_t
1610 */
\ In segment BANKED_CODE, align 1, keep-with-next
1611 ZStatus_t ZDP_MgmtBindRsp( byte TransSeq, zAddrType_t *dstAddr,
\ ZDP_MgmtBindRsp:
1612 byte Status,
1613 byte BindingTableEntries,
1614 byte StartIndex,
1615 byte BindingTableListCount,
1616 apsBindingItem_t *BindingTableList,
1617 byte SecurityEnable )
1618 {
\ 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: 4
\ 000005 74FC MOV A,#-0x4
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A 7401 MOV A,#0x1
\ 00000C 12.... LCALL ?XSTACK_DISP0_8
\ 00000F E9 MOV A,R1
\ 000010 F0 MOVX @DPTR,A
\ 000011 7402 MOV A,#0x2
\ 000013 12.... LCALL ?XSTACK_DISP0_8
\ 000016 12.... LCALL ?Subroutine12 & 0xFFFF
\ ??CrossCallReturnLabel_7:
\ 000019 12.... LCALL ?XSTACK_DISP0_8
\ 00001C E0 MOVX A,@DPTR
\ 00001D F5.. MOV ?V6,A
1619 uint8 *buf;
1620 uint8 *pBuf;
1621 uint8 maxLen; // maxLen is the maximum packet length to allocate enough memory space
1622 uint8 len; // Actual length varies due to different addrMode
1623 uint8 x;
1624 byte extZdpBindEntrySize = ZDP_BINDINGENTRY_SIZE + 1 + 1; // One more byte for cluserID and DstAddrMode
1625 byte shortZdpBindEntrySize = ZDP_BINDINGENTRY_SIZE + 1 + 1 + 2 - 8 - 1; // clusterID + DstAddrMode + shortAddr - ExtAddr - DstEndpoint
1626
1627 (void)SecurityEnable; // Intentionally unreferenced parameter
1628
1629 // Status + BindingTableEntries + StartIndex + BindingTableListCount.
1630 maxLen = 1 + 1 + 1 + 1;
1631 maxLen += (BindingTableListCount * extZdpBindEntrySize ); //max length
1632 buf = osal_mem_alloc( maxLen + 1 ); // +1 for transaction ID
\ 00001F ; Setup parameters for call to function osal_mem_alloc
\ 00001F 75F015 MOV B,#0x15
\ 000022 A4 MUL AB
\ 000023 2404 ADD A,#0x4
\ 000025 12.... LCALL ?Subroutine65 & 0xFFFF
1633
1634 if ( buf == NULL )
\ ??CrossCallReturnLabel_103:
\ 000028 7005 JNZ ??ZDP_MgmtBindRsp_0
1635 {
1636 return afStatus_MEM_FAIL;
\ 00002A 7910 MOV R1,#0x10
\ 00002C 02.... LJMP ??CrossCallReturnLabel_268 & 0xFFFF
1637 }
1638
1639 pBuf = buf+1;
\ ??ZDP_MgmtBindRsp_0:
\ 00002F 8A82 MOV DPL,R2
\ 000031 8B83 MOV DPH,R3
\ 000033 A3 INC DPTR
\ 000034 AA82 MOV R2,DPL
\ 000036 AB83 MOV R3,DPH
1640
1641 *pBuf++ = Status;
\ 000038 85..82 MOV DPL,?XSP + 0
\ 00003B 85..83 MOV DPH,?XSP + 1
\ 00003E 12.... LCALL ?Subroutine38 & 0xFFFF
1642 *pBuf++ = BindingTableEntries;
\ ??CrossCallReturnLabel_50:
\ 000041 A3 INC DPTR
\ 000042 E5.. MOV A,?V7
\ 000044 F0 MOVX @DPTR,A
1643 *pBuf++ = StartIndex;
\ 000045 7414 MOV A,#0x14
\ 000047 12.... LCALL ?XSTACK_DISP0_8
\ 00004A 12.... LCALL ?Subroutine59 & 0xFFFF
\ ??CrossCallReturnLabel_90:
\ 00004D 12.... LCALL ?Subroutine32 & 0xFFFF
1644 *pBuf++ = BindingTableListCount;
\ ??CrossCallReturnLabel_38:
\ 000050 E5.. MOV A,?V6
\ 000052 F0 MOVX @DPTR,A
\ 000053 EA MOV A,R2
\ 000054 2404 ADD A,#0x4
\ 000056 FA MOV R2,A
\ 000057 5001 JNC ??ZDP_MgmtBindRsp_1
\ 000059 0B INC R3
1645
1646 // Initial length = Status + BindingTableEntries + StartIndex + BindingTableListCount.
1647 // length += ZDP_BINDINGENTRY_SIZE -- Version 1.0
1648 // extZdpBindEntrySize -- Version 1.1 extended address mode
1649 // shortZdpBindEntrySize -- Version 1.1 group address mode
1650
1651 len = 1 + 1 + 1 + 1;
\ ??ZDP_MgmtBindRsp_1:
\ 00005A 75..04 MOV ?V0,#0x4
1652 for ( x = 0; x < BindingTableListCount; x++ )
\ 00005D 75..00 MOV ?V1,#0x0
\ 000060 7416 MOV A,#0x16
\ 000062 12.... LCALL ?XSTACK_DISP0_8
\ 000065 12.... LCALL ??Subroutine135_0 & 0xFFFF
\ ??CrossCallReturnLabel_263:
\ 000068 8018 SJMP ??ZDP_MgmtBindRsp_2
1653 {
1654 pBuf = osal_cpyExtAddr( pBuf, BindingTableList->srcAddr );
1655 *pBuf++ = BindingTableList->srcEP;
1656
1657 // Cluster ID
1658 *pBuf++ = LO_UINT16( BindingTableList->clusterID );
1659 *pBuf++ = HI_UINT16( BindingTableList->clusterID );
1660
1661 *pBuf++ = BindingTableList->dstAddr.addrMode;
1662 if ( BindingTableList->dstAddr.addrMode == Addr64Bit )
1663 {
1664 len += extZdpBindEntrySize;
1665 pBuf = osal_cpyExtAddr( pBuf, BindingTableList->dstAddr.addr.extAddr );
1666 *pBuf++ = BindingTableList->dstEP;
1667 }
1668 else
1669 {
1670 len += shortZdpBindEntrySize;
\ ??ZDP_MgmtBindRsp_3:
\ 00006A 740E MOV A,#0xe
\ 00006C 25.. ADD A,?V0
\ 00006E F5.. MOV ?V0,A
1671 *pBuf++ = LO_UINT16( BindingTableList->dstAddr.addr.shortAddr );
\ 000070 EE MOV A,R6
\ 000071 240B ADD A,#0xb
\ 000073 12.... LCALL ?Subroutine9 & 0xFFFF
1672 *pBuf++ = HI_UINT16( BindingTableList->dstAddr.addr.shortAddr );
1673 }
\ ??CrossCallReturnLabel_273:
\ 000076 5001 JNC ??ZDP_MgmtBindRsp_4
\ 000078 0B INC R3
1674 BindingTableList++; // Move to next list entry
\ ??ZDP_MgmtBindRsp_4:
\ 000079 EE MOV A,R6
\ 00007A 2415 ADD A,#0x15
\ 00007C FE MOV R6,A
\ 00007D 5001 JNC ??ZDP_MgmtBindRsp_5
\ 00007F 0F INC R7
\ ??ZDP_MgmtBindRsp_5:
\ 000080 05.. INC ?V1
\ ??ZDP_MgmtBindRsp_2:
\ 000082 E5.. MOV A,?V1
\ 000084 C3 CLR C
\ 000085 95.. SUBB A,?V6
\ 000087 5066 JNC ??ZDP_MgmtBindRsp_6
\ 000089 ; Setup parameters for call to function sAddrExtCpy
\ 000089 EE MOV A,R6
\ 00008A FC MOV R4,A
\ 00008B EF MOV A,R7
\ 00008C FD MOV R5,A
\ 00008D 12.... LCALL `??sAddrExtCpy::?relay`; Banked call to: sAddrExtCpy
\ 000090 8B.. MOV ?V5,R3
\ 000092 A9.. MOV R1,?V5
\ 000094 8E82 MOV DPL,R6
\ 000096 8F83 MOV DPH,R7
\ 000098 A3 INC DPTR
\ 000099 A3 INC DPTR
\ 00009A A3 INC DPTR
\ 00009B A3 INC DPTR
\ 00009C A3 INC DPTR
\ 00009D A3 INC DPTR
\ 00009E A3 INC DPTR
\ 00009F A3 INC DPTR
\ 0000A0 12.... LCALL ?Subroutine38 & 0xFFFF
\ ??CrossCallReturnLabel_51:
\ 0000A3 EE MOV A,R6
\ 0000A4 2409 ADD A,#0x9
\ 0000A6 FC MOV R4,A
\ 0000A7 E4 CLR A
\ 0000A8 3F ADDC A,R7
\ 0000A9 FD MOV R5,A
\ 0000AA 8C82 MOV DPL,R4
\ 0000AC F583 MOV DPH,A
\ 0000AE 12.... LCALL ?Subroutine60 & 0xFFFF
\ ??CrossCallReturnLabel_93:
\ 0000B1 12.... LCALL ?Subroutine16 & 0xFFFF
\ ??CrossCallReturnLabel_19:
\ 0000B4 8A82 MOV DPL,R2
\ 0000B6 8B83 MOV DPH,R3
\ 0000B8 A3 INC DPTR
\ 0000B9 A3 INC DPTR
\ 0000BA F0 MOVX @DPTR,A
\ 0000BB EE MOV A,R6
\ 0000BC 2413 ADD A,#0x13
\ 0000BE FC MOV R4,A
\ 0000BF E4 CLR A
\ 0000C0 3F ADDC A,R7
\ 0000C1 FD MOV R5,A
\ 0000C2 8C82 MOV DPL,R4
\ 0000C4 12.... LCALL ?Subroutine41 & 0xFFFF
\ ??CrossCallReturnLabel_60:
\ 0000C7 E4 CLR A
\ 0000C8 39 ADDC A,R1
\ 0000C9 FB MOV R3,A
\ 0000CA 8C82 MOV DPL,R4
\ 0000CC 8D83 MOV DPH,R5
\ 0000CE E0 MOVX A,@DPTR
\ 0000CF 6403 XRL A,#0x3
\ 0000D1 7097 JNZ ??ZDP_MgmtBindRsp_3
\ 0000D3 7415 MOV A,#0x15
\ 0000D5 25.. ADD A,?V0
\ 0000D7 F5.. MOV ?V0,A
\ 0000D9 ; Setup parameters for call to function sAddrExtCpy
\ 0000D9 EE MOV A,R6
\ 0000DA 240B ADD A,#0xb
\ 0000DC FC MOV R4,A
\ 0000DD E4 CLR A
\ 0000DE 3F ADDC A,R7
\ 0000DF FD MOV R5,A
\ 0000E0 12.... LCALL `??sAddrExtCpy::?relay`; Banked call to: sAddrExtCpy
\ 0000E3 EE MOV A,R6
\ 0000E4 2414 ADD A,#0x14
\ 0000E6 F582 MOV DPL,A
\ 0000E8 E4 CLR A
\ 0000E9 3F ADDC A,R7
\ 0000EA 12.... LCALL ?Subroutine23 & 0xFFFF
1675 }
\ ??CrossCallReturnLabel_204:
\ 0000ED 808A SJMP ??ZDP_MgmtBindRsp_4
1676
1677 FillAndSendBuffer( &TransSeq, dstAddr, Mgmt_Bind_rsp, len, buf );
\ ??ZDP_MgmtBindRsp_6:
\ 0000EF 12.... LCALL ?Subroutine20 & 0xFFFF
\ ??CrossCallReturnLabel_259:
\ 0000F2 ; Setup parameters for call to function fillAndSend
\ 0000F2 75..33 MOV ?V4,#0x33
\ 0000F5 75..80 MOV ?V5,#-0x80
\ 0000F8 78.. MOV R0,#?V4
\ 0000FA 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 0000FD A9.. MOV R1,?V0
\ 0000FF 7404 MOV A,#0x4
\ 000101 12.... LCALL ?XSTACK_DISP0_8
\ 000104 12.... LCALL ?Subroutine50 & 0xFFFF
\ ??CrossCallReturnLabel_75:
\ 000107 7403 MOV A,#0x3
\ 000109 12.... LCALL ?XSTACK_DISP101_8
\ 00010C 12.... LCALL ??Subroutine140_0 & 0xFFFF
\ ??CrossCallReturnLabel_307:
\ 00010F 12.... LCALL ?DEALLOC_XSTACK8
\ 000112 12.... LCALL ?Subroutine24 & 0xFFFF
\ ??CrossCallReturnLabel_268:
\ 000115 02.... LJMP ?Subroutine7 & 0xFFFF
1678 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine32:
\ 000000 12.... LCALL ?Subroutine98 & 0xFFFF
\ ??CrossCallReturnLabel_157:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine98:
\ 000000 F0 MOVX @DPTR,A
\ 000001 8A82 MOV DPL,R2
\ 000003 8B83 MOV DPH,R3
\ 000005 A3 INC DPTR
\ 000006 A3 INC DPTR
\ 000007 A3 INC DPTR
\ 000008 22 RET
1679
1680 /*********************************************************************
1681 * @fn ZDP_MgmtNwkUpdateNotify
1682 *
1683 * @brief This builds and send a Mgmt_NWK_Update_notify message. This
1684 * function sends a unicast message.
1685 *
1686 * @param dstAddr - destination address of the message
1687 * @param status - message status (ZDP_SUCCESS or other)
1688 * @param scannedChannels - List of channels scanned by the request
1689 * @param totalTransmissions - Total transmissions
1690 * @param transmissionFailures - Sum of transmission failures
1691 * @param listCount - Number of records contained in the energyValues list
1692 * @param energyValues - List of descriptors, one for each of ListCount,
1693 * of the enegry detect descriptors
1694 * @param txOptions - Transmit options
1695 * @param securityEnable - Security options
1696 *
1697 * @return afStatus_t
1698 */
\ In segment BANKED_CODE, align 1, keep-with-next
1699 afStatus_t ZDP_MgmtNwkUpdateNotify( uint8 TransSeq, zAddrType_t *dstAddr,
\ ZDP_MgmtNwkUpdateNotify:
1700 uint8 status, uint32 scannedChannels,
1701 uint16 totalTransmissions, uint16 transmissionFailures,
1702 uint8 listCount, uint8 *energyValues, uint8 txOptions,
1703 uint8 securityEnable )
1704 {
\ 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: 1
\ 000005 74FF MOV A,#-0x1
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A E9 MOV A,R1
\ 00000B 85..82 MOV DPL,?XSP + 0
\ 00000E 85..83 MOV DPH,?XSP + 1
\ 000011 F0 MOVX @DPTR,A
\ 000012 8A.. MOV ?V6,R2
\ 000014 8B.. MOV ?V7,R3
\ 000016 8C.. MOV ?V5,R4
\ 000018 8D.. MOV ?V3,R5
1705 uint8 *buf;
1706 uint8 *pBuf;
1707 uint8 len;
1708
1709 (void)securityEnable; // Intentionally unreferenced parameter
1710
1711 // Status + ScannedChannels + totalTransmissions + transmissionFailures + ListCount + energyValues
1712 len = 1 + 4 + 2 + 2 + 1 + listCount;
\ 00001A 740A MOV A,#0xa
\ 00001C 2D ADD A,R5
\ 00001D F5.. MOV ?V4,A
1713
1714 buf = osal_mem_alloc( len+1 ); // +1 for transaction ID
\ 00001F ; Setup parameters for call to function osal_mem_alloc
\ 00001F 12.... LCALL ?Subroutine66 & 0xFFFF
\ ??CrossCallReturnLabel_106:
\ 000022 8A.. MOV ?V0,R2
\ 000024 8B.. MOV ?V1,R3
\ 000026 AE.. MOV R6,?V0
\ 000028 AF.. MOV R7,?V1
1715 if ( buf == NULL )
\ 00002A EA MOV A,R2
\ 00002B 4F ORL A,R7
\ 00002C 7005 JNZ ??ZDP_MgmtNwkUpdateNotify_0
1716 {
1717 return afStatus_MEM_FAIL;
\ 00002E 7910 MOV R1,#0x10
\ 000030 02.... LJMP ??ZDP_MgmtNwkUpdateNotify_1 & 0xFFFF
1718 }
1719
1720 pBuf = buf+1;
\ ??ZDP_MgmtNwkUpdateNotify_0:
\ 000033 8A82 MOV DPL,R2
\ 000035 8B83 MOV DPH,R3
\ 000037 A3 INC DPTR
1721
1722 *pBuf++ = status;
\ 000038 E5.. MOV A,?V5
\ 00003A 12.... LCALL ??Subroutine122_0 & 0xFFFF
1723
1724 pBuf = osal_buffer_uint32( pBuf, scannedChannels );
\ ??CrossCallReturnLabel_202:
\ 00003D ; Setup parameters for call to function osal_buffer_uint32
\ 00003D 7411 MOV A,#0x11
\ 00003F 12.... LCALL ?XSTACK_DISP0_8
\ 000042 12.... LCALL ?PUSH_XSTACK8_X_FOUR
\ 000045 12.... LCALL `??osal_buffer_uint32::?relay`; Banked call to: osal_buffer_uint32
\ 000048 7404 MOV A,#0x4
\ 00004A 12.... LCALL ?DEALLOC_XSTACK8
\ 00004D 7415 MOV A,#0x15
\ 00004F 12.... LCALL ?XSTACK_DISP0_8
\ 000052 12.... LCALL ??Subroutine141_0 & 0xFFFF
1725
1726 *pBuf++ = LO_UINT16( totalTransmissions );
\ ??CrossCallReturnLabel_310:
\ 000055 8A82 MOV DPL,R2
\ 000057 8B83 MOV DPH,R3
\ 000059 F0 MOVX @DPTR,A
1727 *pBuf++ = HI_UINT16( totalTransmissions );
\ 00005A E9 MOV A,R1
\ 00005B A3 INC DPTR
\ 00005C F0 MOVX @DPTR,A
\ 00005D 7417 MOV A,#0x17
\ 00005F 12.... LCALL ?XSTACK_DISP0_8
\ 000062 12.... LCALL ?Subroutine30 & 0xFFFF
1728
1729 *pBuf++ = LO_UINT16( transmissionFailures );
1730 *pBuf++ = HI_UINT16( transmissionFailures );
\ ??CrossCallReturnLabel_37:
\ 000065 12.... LCALL ?Subroutine15 & 0xFFFF
1731
1732 *pBuf++ = listCount;
\ ??CrossCallReturnLabel_13:
\ 000068 E5.. MOV A,?V3
\ 00006A F0 MOVX @DPTR,A
1733
1734 if ( listCount > 0 )
\ 00006B 601C JZ ??ZDP_MgmtNwkUpdateNotify_2
1735 osal_memcpy( pBuf, energyValues, listCount );
\ 00006D ; Setup parameters for call to function osal_memcpy
\ 00006D 7419 MOV A,#0x19
\ 00006F 12.... LCALL ?XSTACK_DISP0_8
\ 000072 12.... LCALL ?Subroutine42 & 0xFFFF
\ ??CrossCallReturnLabel_62:
\ 000075 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 000078 AC.. MOV R4,?V3
\ 00007A 7D00 MOV R5,#0x0
\ 00007C EA MOV A,R2
\ 00007D 2405 ADD A,#0x5
\ 00007F FA MOV R2,A
\ 000080 5001 JNC ??ZDP_MgmtNwkUpdateNotify_3
\ 000082 0B INC R3
\ ??ZDP_MgmtNwkUpdateNotify_3:
\ 000083 12.... LCALL ??Subroutine123_0 & 0xFFFF
\ ??CrossCallReturnLabel_210:
\ 000086 12.... LCALL ?DEALLOC_XSTACK8
1736
1737 FillAndSendBufferTxOptions( &TransSeq, dstAddr, Mgmt_NWK_Update_notify, len, buf, txOptions );
\ ??ZDP_MgmtNwkUpdateNotify_2:
\ 000089 8E82 MOV DPL,R6
\ 00008B 8F83 MOV DPH,R7
\ 00008D 12.... LCALL ??Subroutine133_0 & 0xFFFF
\ ??CrossCallReturnLabel_257:
\ 000090 741B MOV A,#0x1b
\ 000092 12.... LCALL ?XSTACK_DISP0_8
\ 000095 E0 MOVX A,@DPTR
\ 000096 90.... MOV DPTR,#ZDP_TxOptions
\ 000099 F0 MOVX @DPTR,A
\ 00009A ; Setup parameters for call to function fillAndSend
\ 00009A 75..38 MOV ?V0,#0x38
\ 00009D 75..80 MOV ?V1,#-0x80
\ 0000A0 78.. MOV R0,#?V0
\ 0000A2 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 0000A5 A9.. MOV R1,?V4
\ 0000A7 AC.. MOV R4,?V6
\ 0000A9 AD.. MOV R5,?V7
\ 0000AB 7402 MOV A,#0x2
\ 0000AD 12.... LCALL ?XSTACK_DISP101_8
\ 0000B0 12.... LCALL ??Subroutine140_0 & 0xFFFF
\ ??CrossCallReturnLabel_308:
\ 0000B3 12.... LCALL ?DEALLOC_XSTACK8
\ 0000B6 12.... LCALL ?Subroutine75 & 0xFFFF
\ ??CrossCallReturnLabel_125:
\ 0000B9 90.... MOV DPTR,#ZDP_TxOptions
\ 0000BC E4 CLR A
\ 0000BD F0 MOVX @DPTR,A
\ 0000BE A9.. MOV R1,?V0
\ ??ZDP_MgmtNwkUpdateNotify_1:
\ 0000C0 02.... LJMP ?Subroutine4 & 0xFFFF
1738 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine15:
\ 000000 12.... LCALL ?Subroutine98 & 0xFFFF
\ ??CrossCallReturnLabel_158:
\ 000003 A3 INC DPTR
\ 000004 22 RET
1739
1740 /*********************************************************************
1741 * Functions to register for ZDO Over-the-air messages
1742 */
1743
1744 /*********************************************************************
1745 * @fn ZDO_RegisterForZDOMsg
1746 *
1747 * @brief Call this function to register of an incoming over
1748 * the air ZDO message - probably a response message
1749 * but requests can also be received.
1750 * Messages are delivered to the task with ZDO_CB_MSG
1751 * as the message ID.
1752 *
1753 * @param taskID - Where you would like the message delivered
1754 * @param clusterID - What message?
1755 *
1756 * @return ZSuccess - successful, ZMemError if not
1757 */
\ In segment BANKED_CODE, align 1, keep-with-next
1758 ZStatus_t ZDO_RegisterForZDOMsg( uint8 taskID, uint16 clusterID )
\ ZDO_RegisterForZDOMsg:
1759 {
\ 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: 0
\ 000005 89.. MOV ?V2,R1
\ 000007 8A.. MOV ?V0,R2
\ 000009 8B.. MOV ?V1,R3
1760 ZDO_MsgCB_t *pList;
1761 ZDO_MsgCB_t *pLast;
1762 ZDO_MsgCB_t *pNew;
1763
1764 // Look for duplicate
1765 pList = pLast = zdoMsgCBs;
\ 00000B 90.... MOV DPTR,#zdoMsgCBs
\ 00000E 12.... LCALL ??Subroutine135_0 & 0xFFFF
\ ??CrossCallReturnLabel_264:
\ 000011 EE MOV A,R6
\ 000012 F8 MOV R0,A
\ 000013 EF MOV A,R7
\ 000014 8026 SJMP ??CrossCallReturnLabel_334
1766 while ( pList )
1767 {
1768 if ( pList->taskID == taskID && pList->clusterID == clusterID )
\ ??ZDO_RegisterForZDOMsg_0:
\ 000016 8882 MOV DPL,R0
\ 000018 8983 MOV DPH,R1
\ 00001A A3 INC DPTR
\ 00001B A3 INC DPTR
\ 00001C E0 MOVX A,@DPTR
\ 00001D 65.. XRL A,?V2
\ 00001F 7010 JNZ ??ZDO_RegisterForZDOMsg_1
\ 000021 8882 MOV DPL,R0
\ 000023 8983 MOV DPH,R1
\ 000025 A3 INC DPTR
\ 000026 A3 INC DPTR
\ 000027 A3 INC DPTR
\ 000028 E0 MOVX A,@DPTR
\ 000029 6A XRL A,R2
\ 00002A 7003 JNZ ??ZDO_RegisterForZDOMsg_2
\ 00002C A3 INC DPTR
\ 00002D E0 MOVX A,@DPTR
\ 00002E 6B XRL A,R3
\ ??ZDO_RegisterForZDOMsg_2:
\ 00002F 6051 JZ ??CrossCallReturnLabel_251
1769 return ( ZSuccess );
1770 pLast = pList;
\ ??ZDO_RegisterForZDOMsg_1:
\ 000031 E8 MOV A,R0
\ 000032 FE MOV R6,A
\ 000033 E9 MOV A,R1
\ 000034 FF MOV R7,A
1771 pList = (ZDO_MsgCB_t *)pList->next;
\ 000035 8882 MOV DPL,R0
\ 000037 8983 MOV DPH,R1
\ 000039 12.... LCALL ??Subroutine145_0 & 0xFFFF
1772 }
\ ??CrossCallReturnLabel_334:
\ 00003C F9 MOV R1,A
\ 00003D E8 MOV A,R0
\ 00003E 49 ORL A,R1
\ 00003F 70D5 JNZ ??ZDO_RegisterForZDOMsg_0
1773
1774 // Add to the list
1775 pNew = (ZDO_MsgCB_t *)osal_mem_alloc( sizeof ( ZDO_MsgCB_t ) );
\ 000041 ; Setup parameters for call to function osal_mem_alloc
\ 000041 7A05 MOV R2,#0x5
\ 000043 7B00 MOV R3,#0x0
\ 000045 12.... LCALL `??osal_mem_alloc::?relay`; Banked call to: osal_mem_alloc
\ 000048 8A.. MOV ?V4,R2
\ 00004A 8B.. MOV ?V5,R3
\ 00004C A8.. MOV R0,?V4
\ 00004E A9.. MOV R1,?V5
1776 if ( pNew )
\ 000050 EA MOV A,R2
\ 000051 49 ORL A,R1
\ 000052 6032 JZ ??ZDO_RegisterForZDOMsg_3
1777 {
1778 pNew->taskID = taskID;
\ 000054 8A82 MOV DPL,R2
\ 000056 8B83 MOV DPH,R3
\ 000058 A3 INC DPTR
\ 000059 A3 INC DPTR
\ 00005A E5.. MOV A,?V2
\ 00005C 12.... LCALL ?Subroutine32 & 0xFFFF
1779 pNew->clusterID = clusterID;
\ ??CrossCallReturnLabel_39:
\ 00005F E5.. MOV A,?V0
\ 000061 F0 MOVX @DPTR,A
\ 000062 A3 INC DPTR
\ 000063 E5.. MOV A,?V1
\ 000065 F0 MOVX @DPTR,A
1780 pNew->next = NULL;
\ 000066 8A82 MOV DPL,R2
\ 000068 8B83 MOV DPH,R3
\ 00006A E4 CLR A
\ 00006B F0 MOVX @DPTR,A
\ 00006C A3 INC DPTR
\ 00006D F0 MOVX @DPTR,A
1781 if ( zdoMsgCBs )
\ 00006E 90.... MOV DPTR,#zdoMsgCBs
\ 000071 12.... LCALL ?Subroutine48 & 0xFFFF
\ ??CrossCallReturnLabel_66:
\ 000074 6006 JZ ??ZDO_RegisterForZDOMsg_4
1782 {
1783 pLast->next = pNew;
\ 000076 8E82 MOV DPL,R6
\ 000078 8F83 MOV DPH,R7
\ 00007A 8003 SJMP ??ZDO_RegisterForZDOMsg_5
1784 }
1785 else
1786 zdoMsgCBs = pNew;
\ ??ZDO_RegisterForZDOMsg_4:
\ 00007C 90.... MOV DPTR,#zdoMsgCBs
\ ??ZDO_RegisterForZDOMsg_5:
\ 00007F 12.... LCALL ??Subroutine134_0 & 0xFFFF
1787 return ( ZSuccess );
\ ??CrossCallReturnLabel_251:
\ 000082 7900 MOV R1,#0x0
\ 000084 8002 SJMP ??ZDO_RegisterForZDOMsg_6
1788 }
1789 else
1790 return ( ZMemError );
\ ??ZDO_RegisterForZDOMsg_3:
\ 000086 7910 MOV R1,#0x10
\ ??ZDO_RegisterForZDOMsg_6:
\ 000088 02.... LJMP ??Subroutine113_0 & 0xFFFF
1791 }
1792
1793 /*********************************************************************
1794 * @fn ZDO_RemoveRegisteredCB
1795 *
1796 * @brief Call this function if you don't want to receive the
1797 * incoming message.
1798 *
1799 * @param taskID - Where the messages are being delivered.
1800 * @param clusterID - What message?
1801 *
1802 * @return ZSuccess - successful, ZFailure if not found
1803 */
\ In segment BANKED_CODE, align 1, keep-with-next
1804 ZStatus_t ZDO_RemoveRegisteredCB( uint8 taskID, uint16 clusterID )
\ ZDO_RemoveRegisteredCB:
1805 {
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 0
\ 000005 E9 MOV A,R1
\ 000006 FE MOV R6,A
1806 ZDO_MsgCB_t *pList;
1807 ZDO_MsgCB_t *pLast = NULL;
\ 000007 7C00 MOV R4,#0x0
\ 000009 7D00 MOV R5,#0x0
1808
1809 pList = zdoMsgCBs;
\ 00000B 90.... MOV DPTR,#zdoMsgCBs
\ 00000E 8008 SJMP ??ZDO_RemoveRegisteredCB_0
1810 while ( pList )
1811 {
1812 if ( pList->taskID == taskID && pList->clusterID == clusterID )
1813 {
1814 if ( pLast )
1815 {
1816 // remove this one from the linked list
1817 pLast->next = pList->next;
1818 }
1819 else if ( pList->next )
1820 {
1821 // remove the first one from the linked list
1822 zdoMsgCBs = pList->next;
1823 }
1824 else
1825 {
1826 // remove the only item from the list
1827 zdoMsgCBs = (ZDO_MsgCB_t *)NULL;
1828 }
1829 osal_mem_free( pList );
1830 return ( ZSuccess );
1831 }
1832 pLast = pList;
\ ??ZDO_RemoveRegisteredCB_1:
\ 000010 E8 MOV A,R0
\ 000011 FC MOV R4,A
\ 000012 E9 MOV A,R1
\ 000013 FD MOV R5,A
1833 pList = pList->next;
\ 000014 8882 MOV DPL,R0
\ 000016 8983 MOV DPH,R1
\ ??ZDO_RemoveRegisteredCB_0:
\ 000018 12.... LCALL ??Subroutine118_0 & 0xFFFF
\ ??CrossCallReturnLabel_182:
\ 00001B 6048 JZ ??ZDO_RemoveRegisteredCB_2
\ 00001D 8882 MOV DPL,R0
\ 00001F 8983 MOV DPH,R1
\ 000021 A3 INC DPTR
\ 000022 A3 INC DPTR
\ 000023 E0 MOVX A,@DPTR
\ 000024 6E XRL A,R6
\ 000025 70E9 JNZ ??ZDO_RemoveRegisteredCB_1
\ 000027 8882 MOV DPL,R0
\ 000029 8983 MOV DPH,R1
\ 00002B A3 INC DPTR
\ 00002C A3 INC DPTR
\ 00002D A3 INC DPTR
\ 00002E E0 MOVX A,@DPTR
\ 00002F 6A XRL A,R2
\ 000030 7003 JNZ ??ZDO_RemoveRegisteredCB_3
\ 000032 A3 INC DPTR
\ 000033 E0 MOVX A,@DPTR
\ 000034 6B XRL A,R3
\ ??ZDO_RemoveRegisteredCB_3:
\ 000035 70D9 JNZ ??ZDO_RemoveRegisteredCB_1
\ 000037 EC MOV A,R4
\ 000038 4D ORL A,R5
\ 000039 8882 MOV DPL,R0
\ 00003B 8983 MOV DPH,R1
\ 00003D 6009 JZ ??ZDO_RemoveRegisteredCB_4
\ 00003F 12.... LCALL ??Subroutine121_0 & 0xFFFF
\ ??CrossCallReturnLabel_194:
\ 000042 8C82 MOV DPL,R4
\ 000044 8D83 MOV DPH,R5
\ 000046 8008 SJMP ??ZDO_RemoveRegisteredCB_5
\ ??ZDO_RemoveRegisteredCB_4:
\ 000048 12.... LCALL ?Subroutine48 & 0xFFFF
\ ??CrossCallReturnLabel_67:
\ 00004B 90.... MOV DPTR,#zdoMsgCBs
\ 00004E 6006 JZ ??ZDO_RemoveRegisteredCB_6
\ ??ZDO_RemoveRegisteredCB_5:
\ 000050 EA MOV A,R2
\ 000051 F0 MOVX @DPTR,A
\ 000052 A3 INC DPTR
\ 000053 EB MOV A,R3
\ 000054 8003 SJMP ??ZDO_RemoveRegisteredCB_7
\ ??ZDO_RemoveRegisteredCB_6:
\ 000056 E4 CLR A
\ 000057 F0 MOVX @DPTR,A
\ 000058 A3 INC DPTR
\ ??ZDO_RemoveRegisteredCB_7:
\ 000059 F0 MOVX @DPTR,A
\ 00005A ; Setup parameters for call to function osal_mem_free
\ 00005A E8 MOV A,R0
\ 00005B FA MOV R2,A
\ 00005C E9 MOV A,R1
\ 00005D FB MOV R3,A
\ 00005E 12.... LCALL `??osal_mem_free::?relay`; Banked call to: osal_mem_free
\ 000061 7900 MOV R1,#0x0
\ 000063 8002 SJMP ??ZDO_RemoveRegisteredCB_8
1834 }
1835
1836 return ( ZFailure );
\ ??ZDO_RemoveRegisteredCB_2:
\ 000065 7901 MOV R1,#0x1
\ ??ZDO_RemoveRegisteredCB_8:
\ 000067 02.... LJMP ?Subroutine5 & 0xFFFF
1837 }
1838
1839 /*********************************************************************
1840 * @fn ZDO_SendMsgCBs
1841 *
1842 * @brief This function sends messages to registered tasks.
1843 * Local to ZDO and shouldn't be called outside of ZDO.
1844 *
1845 * @param inMsg - incoming message
1846 *
1847 * @return TRUE if sent to at least 1 task, FALSE if not
1848 */
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine71:
\ 000000 7D00 MOV R5,#0x0
\ 000002 REQUIRE ??Subroutine123_0
\ 000002 ; // Fall through to label ??Subroutine123_0
\ In segment BANKED_CODE, align 1, keep-with-next
1849 uint8 ZDO_SendMsgCBs( zdoIncomingMsg_t *inMsg )
\ ZDO_SendMsgCBs:
1850 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 REQUIRE ?V2
\ 000000 REQUIRE ?V3
\ 000000 REQUIRE ?V4
\ 000000 REQUIRE ?V5
\ 000000 REQUIRE ?V6
\ 000000 REQUIRE ?V7
\ 000000 74F0 MOV A,#-0x10
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 16
\ 000005 ; Auto size: 0
\ 000005 8A.. MOV ?V6,R2
\ 000007 8B.. MOV ?V7,R3
1851 uint8 ret = FALSE;
\ 000009 75..00 MOV ?V0,#0x0
1852 ZDO_MsgCB_t *pList = zdoMsgCBs;
\ 00000C 90.... MOV DPTR,#zdoMsgCBs
\ 00000F 02.... LJMP ??ZDO_SendMsgCBs_0 & 0xFFFF
1853 while ( pList )
1854 {
1855 if ( pList->clusterID == inMsg->clusterID )
\ ??ZDO_SendMsgCBs_1:
\ 000012 85..82 MOV DPL,?V4
\ 000015 85..83 MOV DPH,?V5
\ 000018 A3 INC DPTR
\ 000019 A3 INC DPTR
\ 00001A A3 INC DPTR
\ 00001B 12.... LCALL ??Subroutine144_0 & 0xFFFF
\ ??CrossCallReturnLabel_324:
\ 00001E E5.. MOV A,?V6
\ 000020 12.... LCALL ?Subroutine73 & 0xFFFF
\ ??CrossCallReturnLabel_120:
\ 000023 35.. ADDC A,?V7
\ 000025 F583 MOV DPH,A
\ 000027 E0 MOVX A,@DPTR
\ 000028 68 XRL A,R0
\ 000029 7003 JNZ ??ZDO_SendMsgCBs_2
\ 00002B A3 INC DPTR
\ 00002C E0 MOVX A,@DPTR
\ 00002D 69 XRL A,R1
\ ??ZDO_SendMsgCBs_2:
\ 00002E 707D JNZ ??ZDO_SendMsgCBs_3
1856 {
1857 zdoIncomingMsg_t *msgPtr;
1858
1859 // Send the address to the task
1860 msgPtr = (zdoIncomingMsg_t *)osal_msg_allocate( sizeof( zdoIncomingMsg_t ) + inMsg->asduLen );
\ 000030 ; Setup parameters for call to function osal_msg_allocate
\ 000030 12.... LCALL ?Subroutine76 & 0xFFFF
\ ??CrossCallReturnLabel_126:
\ 000033 2415 ADD A,#0x15
\ 000035 FA MOV R2,A
\ 000036 E4 CLR A
\ 000037 3400 ADDC A,#0x0
\ 000039 FB MOV R3,A
\ 00003A 12.... LCALL `??osal_msg_allocate::?relay`; Banked call to: osal_msg_allocate
\ 00003D 8A.. MOV ?V2,R2
\ 00003F 8B.. MOV ?V3,R3
\ 000041 AE.. MOV R6,?V2
\ 000043 AF.. MOV R7,?V3
1861 if ( msgPtr )
\ 000045 EA MOV A,R2
\ 000046 4F ORL A,R7
\ 000047 6064 JZ ??ZDO_SendMsgCBs_3
1862 {
1863 // copy struct
1864 osal_memcpy( msgPtr, inMsg, sizeof( zdoIncomingMsg_t ));
\ 000049 ; Setup parameters for call to function osal_memcpy
\ 000049 85.... MOV ?V0,?V6
\ 00004C 85.... MOV ?V1,?V7
\ 00004F 75..00 MOV ?V2,#0x0
\ 000052 78.. MOV R0,#?V0
\ 000054 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 000057 7C15 MOV R4,#0x15
\ 000059 12.... LCALL ?Subroutine71 & 0xFFFF
\ ??CrossCallReturnLabel_205:
\ 00005C 12.... LCALL ?DEALLOC_XSTACK8
1865
1866 if ( inMsg->asduLen )
\ 00005F 12.... LCALL ?Subroutine76 & 0xFFFF
\ ??CrossCallReturnLabel_127:
\ 000062 602E JZ ??ZDO_SendMsgCBs_4
1867 {
1868 msgPtr->asdu = (byte*)(((byte*)msgPtr) + sizeof( zdoIncomingMsg_t ));
\ 000064 EE MOV A,R6
\ 000065 2415 ADD A,#0x15
\ 000067 FA MOV R2,A
\ 000068 E4 CLR A
\ 000069 3F ADDC A,R7
\ 00006A FB MOV R3,A
\ 00006B EE MOV A,R6
\ 00006C 2413 ADD A,#0x13
\ 00006E F582 MOV DPL,A
\ 000070 E4 CLR A
\ 000071 3F ADDC A,R7
\ 000072 F583 MOV DPH,A
\ 000074 12.... LCALL ??Subroutine142_0 & 0xFFFF
1869 osal_memcpy( msgPtr->asdu, inMsg->asdu, inMsg->asduLen );
\ ??CrossCallReturnLabel_316:
\ 000077 ; Setup parameters for call to function osal_memcpy
\ 000077 E5.. MOV A,?V6
\ 000079 2413 ADD A,#0x13
\ 00007B F582 MOV DPL,A
\ 00007D E4 CLR A
\ 00007E 35.. ADDC A,?V7
\ 000080 12.... LCALL ?Subroutine43 & 0xFFFF
1870 }
\ ??CrossCallReturnLabel_229:
\ 000083 78.. MOV R0,#?V0
\ 000085 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 000088 12.... LCALL ?Subroutine76 & 0xFFFF
\ ??CrossCallReturnLabel_128:
\ 00008B FC MOV R4,A
\ 00008C 12.... LCALL ?Subroutine71 & 0xFFFF
\ ??CrossCallReturnLabel_206:
\ 00008F 12.... LCALL ?DEALLOC_XSTACK8
1871
1872 msgPtr->hdr.event = ZDO_CB_MSG;
\ ??ZDO_SendMsgCBs_4:
\ 000092 8E82 MOV DPL,R6
\ 000094 8F83 MOV DPH,R7
\ 000096 74D3 MOV A,#-0x2d
\ 000098 F0 MOVX @DPTR,A
1873 osal_msg_send( pList->taskID, (uint8 *)msgPtr );
\ 000099 ; Setup parameters for call to function osal_msg_send
\ 000099 EE MOV A,R6
\ 00009A FA MOV R2,A
\ 00009B EF MOV A,R7
\ 00009C FB MOV R3,A
\ 00009D 85..82 MOV DPL,?V4
\ 0000A0 85..83 MOV DPH,?V5
\ 0000A3 A3 INC DPTR
\ 0000A4 A3 INC DPTR
\ 0000A5 E0 MOVX A,@DPTR
\ 0000A6 F9 MOV R1,A
\ 0000A7 12.... LCALL `??osal_msg_send::?relay`; Banked call to: osal_msg_send
1874 ret = TRUE;
\ 0000AA 75..01 MOV ?V0,#0x1
1875 }
1876 }
1877 pList = (ZDO_MsgCB_t *)pList->next;
\ ??ZDO_SendMsgCBs_3:
\ 0000AD 85..82 MOV DPL,?V4
\ 0000B0 85..83 MOV DPH,?V5
\ ??ZDO_SendMsgCBs_0:
\ 0000B3 E0 MOVX A,@DPTR
\ 0000B4 F5.. MOV ?V4,A
\ 0000B6 A3 INC DPTR
\ 0000B7 E0 MOVX A,@DPTR
\ 0000B8 F5.. MOV ?V5,A
1878 }
\ 0000BA E5.. MOV A,?V4
\ 0000BC 45.. ORL A,?V5
\ 0000BE 6003 JZ $+5
\ 0000C0 02.... LJMP ??ZDO_SendMsgCBs_1 & 0xFFFF
1879 return ( ret );
\ 0000C3 A9.. MOV R1,?V0
\ 0000C5 02.... LJMP ??Subroutine139_0 & 0xFFFF
1880 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine76:
\ 000000 E5.. MOV A,?V6
\ 000002 2410 ADD A,#0x10
\ 000004 F582 MOV DPL,A
\ 000006 E4 CLR A
\ 000007 35.. ADDC A,?V7
\ 000009 F583 MOV DPH,A
\ 00000B E0 MOVX A,@DPTR
\ 00000C 22 RET
1881
1882 /*********************************************************************
1883 * Incoming message processor
1884 */
1885
1886 /*********************************************************************
1887 * @fn ZDP_IncomingData
1888 *
1889 * @brief This function indicates the transfer of a data PDU (ASDU)
1890 * from the APS sub-layer to the ZDO.
1891 *
1892 * @param pData - Incoming Message
1893 *
1894 * @return none
1895 */
\ In segment BANKED_CODE, align 1, keep-with-next
1896 void ZDP_IncomingData( afIncomingMSGPacket_t *pData )
\ ZDP_IncomingData:
1897 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 74F6 MOV A,#-0xa
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 10
\ 000005 ; Auto size: 21
\ 000005 74EB MOV A,#-0x15
\ 000007 12.... LCALL ?ALLOC_XSTACK8
1898 uint8 x = 0;
\ 00000A 7E00 MOV R6,#0x0
1899 uint8 handled;
1900 zdoIncomingMsg_t inMsg;
1901
1902 inMsg.srcAddr.addrMode = Addr16Bit;
\ 00000C 740A MOV A,#0xa
\ 00000E 12.... LCALL ?XSTACK_DISP0_8
\ 000011 7402 MOV A,#0x2
\ 000013 12.... LCALL ?Subroutine15 & 0xFFFF
1903 inMsg.srcAddr.addr.shortAddr = pData->srcAddr.addr.shortAddr;
\ ??CrossCallReturnLabel_14:
\ 000016 A3 INC DPTR
\ 000017 A3 INC DPTR
\ 000018 12.... LCALL ??Subroutine144_0 & 0xFFFF
\ ??CrossCallReturnLabel_325:
\ 00001B 7402 MOV A,#0x2
\ 00001D 12.... LCALL ?XSTACK_DISP0_8
\ 000020 12.... LCALL ??Subroutine134_0 & 0xFFFF
1904 inMsg.wasBroadcast = pData->wasBroadcast;
\ ??CrossCallReturnLabel_252:
\ 000023 EA MOV A,R2
\ 000024 2415 ADD A,#0x15
\ 000026 F582 MOV DPL,A
\ 000028 E4 CLR A
\ 000029 3B ADDC A,R3
\ 00002A F583 MOV DPH,A
\ 00002C E0 MOVX A,@DPTR
\ 00002D C0E0 PUSH A
\ 00002F 740B MOV A,#0xb
\ 000031 12.... LCALL ?XSTACK_DISP0_8
\ 000034 D0E0 POP A
\ 000036 12.... LCALL ?Subroutine15 & 0xFFFF
1905 inMsg.clusterID = pData->clusterId;
\ ??CrossCallReturnLabel_15:
\ 000039 12.... LCALL ??Subroutine144_0 & 0xFFFF
\ ??CrossCallReturnLabel_326:
\ 00003C 740C MOV A,#0xc
\ 00003E 12.... LCALL ?XSTACK_DISP0_8
\ 000041 12.... LCALL ??Subroutine134_0 & 0xFFFF
1906 inMsg.SecurityUse = pData->SecurityUse;
\ ??CrossCallReturnLabel_253:
\ 000044 EA MOV A,R2
\ 000045 2419 ADD A,#0x19
\ 000047 F582 MOV DPL,A
\ 000049 E4 CLR A
\ 00004A 3B ADDC A,R3
\ 00004B F583 MOV DPH,A
\ 00004D E0 MOVX A,@DPTR
\ 00004E C0E0 PUSH A
\ 000050 740E MOV A,#0xe
\ 000052 12.... LCALL ?XSTACK_DISP0_8
\ 000055 D0E0 POP A
\ 000057 F0 MOVX @DPTR,A
1907
1908 inMsg.asduLen = pData->cmd.DataLength-1;
\ 000058 EA MOV A,R2
\ 000059 2420 ADD A,#0x20
\ 00005B F582 MOV DPL,A
\ 00005D E4 CLR A
\ 00005E 3B ADDC A,R3
\ 00005F F583 MOV DPH,A
\ 000061 E0 MOVX A,@DPTR
\ 000062 14 DEC A
\ 000063 C0E0 PUSH A
\ 000065 7410 MOV A,#0x10
\ 000067 12.... LCALL ?XSTACK_DISP0_8
\ 00006A D0E0 POP A
\ 00006C F0 MOVX @DPTR,A
1909 inMsg.asdu = pData->cmd.Data+1;
\ 00006D EA MOV A,R2
\ 00006E 2422 ADD A,#0x22
\ 000070 F8 MOV R0,A
\ 000071 E4 CLR A
\ 000072 3B ADDC A,R3
\ 000073 F9 MOV R1,A
\ 000074 8882 MOV DPL,R0
\ 000076 F583 MOV DPH,A
\ 000078 E0 MOVX A,@DPTR
\ 000079 2401 ADD A,#0x1
\ 00007B FC MOV R4,A
\ 00007C A3 INC DPTR
\ 00007D E0 MOVX A,@DPTR
\ 00007E 3400 ADDC A,#0x0
\ 000080 FD MOV R5,A
\ 000081 7413 MOV A,#0x13
\ 000083 12.... LCALL ?XSTACK_DISP0_8
\ 000086 EC MOV A,R4
\ 000087 F0 MOVX @DPTR,A
\ 000088 A3 INC DPTR
\ 000089 ED MOV A,R5
\ 00008A 12.... LCALL ??Subroutine120_0 & 0xFFFF
1910 inMsg.TransSeq = pData->cmd.Data[0];
\ ??CrossCallReturnLabel_191:
\ 00008D 12.... LCALL ??Subroutine124_0 & 0xFFFF
\ ??CrossCallReturnLabel_213:
\ 000090 E0 MOVX A,@DPTR
\ 000091 C0E0 PUSH A
\ 000093 740F MOV A,#0xf
\ 000095 12.... LCALL ?XSTACK_DISP0_8
\ 000098 D0E0 POP A
\ 00009A F0 MOVX @DPTR,A
1911 inMsg.macDestAddr = pData->macDestAddr;
\ 00009B EA MOV A,R2
\ 00009C 2412 ADD A,#0x12
\ 00009E F582 MOV DPL,A
\ 0000A0 E4 CLR A
\ 0000A1 3B ADDC A,R3
\ 0000A2 F583 MOV DPH,A
\ 0000A4 12.... LCALL ??Subroutine144_0 & 0xFFFF
\ ??CrossCallReturnLabel_327:
\ 0000A7 7411 MOV A,#0x11
\ 0000A9 12.... LCALL ?XSTACK_DISP0_8
\ 0000AC 12.... LCALL ??Subroutine134_0 & 0xFFFF
1912
1913 handled = ZDO_SendMsgCBs( &inMsg );
\ ??CrossCallReturnLabel_254:
\ 0000AF ; Setup parameters for call to function ZDO_SendMsgCBs
\ 0000AF AA.. MOV R2,?XSP + 0
\ 0000B1 AB.. MOV R3,?XSP + 1
\ 0000B3 12.... LCALL `??ZDO_SendMsgCBs::?relay`; Banked call to: ZDO_SendMsgCBs
\ 0000B6 E9 MOV A,R1
\ 0000B7 FA MOV R2,A
\ 0000B8 8001 SJMP ??ZDP_IncomingData_0
1914
1915 #if (defined MT_ZDO_CB_FUNC)
1916 #if !defined MT_TASK
1917 if (zgZdoDirectCB)
1918 #endif
1919 {
1920 MT_ZdoDirectCB( pData, &inMsg );
1921 }
1922 #endif
1923
1924 while ( zdpMsgProcs[x].clusterID != 0xFFFF )
1925 {
1926 if ( zdpMsgProcs[x].clusterID == inMsg.clusterID )
1927 {
1928 zdpMsgProcs[x].pFn( &inMsg );
1929 return;
1930 }
1931 x++;
\ ??ZDP_IncomingData_1:
\ 0000BA 0E INC R6
\ ??ZDP_IncomingData_0:
\ 0000BB EE MOV A,R6
\ 0000BC F5.. MOV ?V0,A
\ 0000BE 75..00 MOV ?V1,#0x0
\ 0000C1 7402 MOV A,#0x2
\ 0000C3 78.. MOV R0,#?V0
\ 0000C5 12.... LCALL ?S_SHL
\ 0000C8 74.. MOV A,#zdpMsgProcs & 0xff
\ 0000CA 25.. ADD A,?V0
\ 0000CC F582 MOV DPL,A
\ 0000CE 74.. MOV A,#(zdpMsgProcs >> 8) & 0xff
\ 0000D0 35.. ADDC A,?V1
\ 0000D2 F583 MOV DPH,A
\ 0000D4 E4 CLR A
\ 0000D5 93 MOVC A,@A+DPTR
\ 0000D6 F8 MOV R0,A
\ 0000D7 7401 MOV A,#0x1
\ 0000D9 93 MOVC A,@A+DPTR
\ 0000DA F9 MOV R1,A
\ 0000DB 74FF MOV A,#-0x1
\ 0000DD 68 XRL A,R0
\ 0000DE 7003 JNZ ??ZDP_IncomingData_2
\ 0000E0 74FF MOV A,#-0x1
\ 0000E2 69 XRL A,R1
\ ??ZDP_IncomingData_2:
\ 0000E3 6042 JZ ??ZDP_IncomingData_3
\ 0000E5 E4 CLR A
\ 0000E6 93 MOVC A,@A+DPTR
\ 0000E7 F8 MOV R0,A
\ 0000E8 7401 MOV A,#0x1
\ 0000EA 93 MOVC A,@A+DPTR
\ 0000EB F9 MOV R1,A
\ 0000EC 740C MOV A,#0xc
\ 0000EE 12.... LCALL ?XSTACK_DISP0_8
\ 0000F1 E0 MOVX A,@DPTR
\ 0000F2 68 XRL A,R0
\ 0000F3 7003 JNZ ??ZDP_IncomingData_4
\ 0000F5 A3 INC DPTR
\ 0000F6 E0 MOVX A,@DPTR
\ 0000F7 69 XRL A,R1
\ ??ZDP_IncomingData_4:
\ 0000F8 70C0 JNZ ??ZDP_IncomingData_1
\ 0000FA ; Setup parameters for indirect call
\ 0000FA AA.. MOV R2,?XSP + 0
\ 0000FC AB.. MOV R3,?XSP + 1
\ 0000FE EE MOV A,R6
\ 0000FF F5.. MOV ?V0,A
\ 000101 75..00 MOV ?V1,#0x0
\ 000104 7402 MOV A,#0x2
\ 000106 78.. MOV R0,#?V0
\ 000108 12.... LCALL ?S_SHL
\ 00010B 74.. MOV A,#(zdpMsgProcs + 2) & 0xff
\ 00010D 25.. ADD A,?V0
\ 00010F F582 MOV DPL,A
\ 000111 74.. MOV A,#((zdpMsgProcs + 2) >> 8) & 0xff
\ 000113 35.. ADDC A,?V1
\ 000115 F583 MOV DPH,A
\ 000117 E4 CLR A
\ 000118 93 MOVC A,@A+DPTR
\ 000119 C0E0 PUSH A
\ 00011B 7401 MOV A,#0x1
\ 00011D 93 MOVC A,@A+DPTR
\ 00011E F583 MOV DPH,A
\ 000120 D082 POP DPL
\ 000122 12.... LCALL ?CALL_IND
\ 000125 800A SJMP ??ZDP_IncomingData_5
1932 }
1933
1934 // Handle unhandled messages
1935 if ( !handled )
\ ??ZDP_IncomingData_3:
\ 000127 EA MOV A,R2
\ 000128 7007 JNZ ??ZDP_IncomingData_5
1936 ZDApp_InMsgCB( &inMsg );
\ 00012A ; Setup parameters for call to function ZDApp_InMsgCB
\ 00012A AA.. MOV R2,?XSP + 0
\ 00012C AB.. MOV R3,?XSP + 1
\ 00012E 12.... LCALL `??ZDApp_InMsgCB::?relay`; Banked call to: ZDApp_InMsgCB
1937 }
\ ??ZDP_IncomingData_5:
\ 000131 7415 MOV A,#0x15
\ 000133 02.... LJMP ??Subroutine112_0 & 0xFFFF
\ In segment XDATA_ID, align 1, keep-with-next
\ `?<Initializer for ZDP_TmpBuf>`:
\ 000000 .... DW ZDP_Buf + 1H
1938
1939 /*********************************************************************
1940 *********************************************************************/
1941
Maximum stack usage in bytes:
ISTACK XSTACK Function
------ ------ --------
1 14 ZDO_RegisterForZDOMsg
0 14 -> osal_mem_alloc
0 9 ZDO_RemoveRegisteredCB
0 9 -> osal_mem_free
0 50 ZDO_SendMsgCBs
0 19 -> osal_memcpy
0 16 -> osal_msg_allocate
0 16 -> osal_msg_send
1 26 ZDP_BindUnbindReq
0 18 -> fillAndSend
0 16 -> sAddrExtCpy
1 16 -> sAddrExtCpy
1 22 ZDP_DeviceAnnce
0 21 -> fillAndSend
0 19 -> sAddrExtCpy
1 27 ZDP_EPRsp
0 19 -> fillAndSend
0 20 -> osal_memcpy
1 29 ZDP_EndDeviceBindReq
0 18 -> NLME_GetExtAddr
0 18 -> NLME_GetShortAddr
0 20 -> fillAndSend
0 18 -> sAddrExtCpy
1 16 ZDP_GenericRsp
0 12 -> fillAndSend
1 21 ZDP_IEEEAddrReq
0 21 -> fillAndSend
1 31 ZDP_IncomingData
0 31 -> ZDApp_InMsgCB
0 31 -> ZDO_SendMsgCBs
1 24 ZDP_MatchDescReq
0 16 -> fillAndSend
1 27 ZDP_MgmtBindRsp
0 22 -> fillAndSend
0 20 -> osal_mem_alloc
0 20 -> osal_mem_free
0 20 -> sAddrExtCpy
1 15 ZDP_MgmtDirectJoinReq
0 14 -> fillAndSend
0 12 -> sAddrExtCpy
0 16 ZDP_MgmtLeaveReq
0 14 -> fillAndSend
0 12 -> sAddrExtCpy
1 27 ZDP_MgmtLqiRsp
0 22 -> fillAndSend
0 20 -> osal_mem_alloc
0 20 -> osal_mem_free
0 20 -> sAddrExtCpy
1 20 ZDP_MgmtNwkDiscReq
0 14 -> fillAndSend
0 16 -> osal_buffer_uint32
1 27 ZDP_MgmtNwkDiscRsp
0 22 -> fillAndSend
0 20 -> osal_mem_alloc
0 20 -> osal_mem_free
0 20 -> sAddrExtCpy
1 33 ZDP_MgmtNwkUpdateNotify
0 19 -> fillAndSend
0 21 -> osal_buffer_uint32
0 17 -> osal_mem_alloc
0 17 -> osal_mem_free
0 20 -> osal_memcpy
1 24 ZDP_MgmtNwkUpdateReq
0 16 -> fillAndSend
0 18 -> osal_buffer_uint32
1 12 ZDP_MgmtPermitJoinReq
0 12 -> fillAndSend
1 26 ZDP_MgmtRtgRsp
0 21 -> fillAndSend
0 19 -> osal_mem_alloc
0 19 -> osal_mem_free
1 13 ZDP_NWKAddrOfInterestReq
0 12 -> fillAndSend
1 14 ZDP_NodeDescMsg
0 12 -> fillAndSend
1 23 ZDP_NwkAddrReq
0 23 -> fillAndSend
0 21 -> sAddrExtCmp
0 21 -> sAddrExtCpy
1 14 ZDP_PowerDescMsg
0 12 -> fillAndSend
1 19 ZDP_SendData
0 14 -> fillAndSend
1 21 ZDP_ServerDiscReq
0 21 -> fillAndSend
1 17 ZDP_ServerDiscRsp
0 13 -> fillAndSend
1 17 ZDP_SimpleDescMsg
0 17 -> fillAndSend
1 13 ZDP_SimpleDescReq
0 12 -> fillAndSend
1 23 ZDP_UserDescRsp
0 19 -> fillAndSend
0 20 -> osal_memcpy
1 19 ZDP_UserDescSet
0 16 -> fillAndSend
0 17 -> osal_memcpy
0 14 -> osal_memset
1 67 fillAndSend
0 34 -> AF_DataRequest
0 25 -> osal_memset
1 33 zdpProcessAddrReq
0 31 -> AddrMgrEntryGet
0 31 -> AssocGetWithExt
0 31 -> AssocGetWithShort
0 31 -> AssocMakeList
0 33 -> fillAndSend
0 31 -> osal_mem_free
0 31 -> sAddrExtCmp
0 31 -> sAddrExtCpy
Segment part sizes:
Bytes Function/Label
----- --------------
2 ?<Initializer for ZDP_TmpBuf>
4 ??Subroutine109_0
8 ??Subroutine110_0
3 ??Subroutine111_0
8 ??Subroutine112_0
5 ??Subroutine113_0
2 ??Subroutine114_0
5 ??Subroutine115_0
2 ??Subroutine116_0
9 ??Subroutine117_0
6 ??Subroutine118_0
7 ??Subroutine119_0
6 ??Subroutine120_0
4 ??Subroutine121_0
7 ??Subroutine122_0
6 ??Subroutine123_0
4 ??Subroutine124_0
8 ??Subroutine125_0
3 ??Subroutine126_0
3 ??Subroutine127_0
5 ??Subroutine128_0
13 ??Subroutine129_0
6 ??Subroutine130_0
5 ??Subroutine131_0
6 ??Subroutine132_0
8 ??Subroutine133_0
6 ??Subroutine134_0
6 ??Subroutine135_0
6 ??Subroutine136_0
11 ??Subroutine137_0
3 ??Subroutine138_0
5 ??Subroutine139_0
6 ??Subroutine140_0
5 ??Subroutine141_0
6 ??Subroutine142_0
3 ??Subroutine143_0
4 ??Subroutine144_0
5 ??Subroutine145_0
14 ?Subroutine0
10 ?Subroutine1
14 ?Subroutine10
14 ?Subroutine100
12 ?Subroutine101
8 ?Subroutine102
6 ?Subroutine103
7 ?Subroutine104
6 ?Subroutine105
8 ?Subroutine106
9 ?Subroutine107
3 ?Subroutine108
42 ?Subroutine11
18 ?Subroutine12
7 ?Subroutine13
8 ?Subroutine14
5 ?Subroutine15
5 ?Subroutine16
8 ?Subroutine17
12 ?Subroutine18
5 ?Subroutine19
10 ?Subroutine2
6 ?Subroutine20
4 ?Subroutine21
6 ?Subroutine22
5 ?Subroutine23
6 ?Subroutine24
10 ?Subroutine25
4 ?Subroutine26
11 ?Subroutine27
3 ?Subroutine28
1 ?Subroutine29
5 ?Subroutine3
9 ?Subroutine30
6 ?Subroutine31
4 ?Subroutine32
7 ?Subroutine33
9 ?Subroutine34
12 ?Subroutine35
9 ?Subroutine36
3 ?Subroutine37
4 ?Subroutine38
13 ?Subroutine39
2 ?Subroutine4
5 ?Subroutine40
13 ?Subroutine41
13 ?Subroutine42
2 ?Subroutine43
10 ?Subroutine44
9 ?Subroutine45
3 ?Subroutine46
2 ?Subroutine47
6 ?Subroutine48
8 ?Subroutine49
5 ?Subroutine5
6 ?Subroutine50
9 ?Subroutine51
3 ?Subroutine52
5 ?Subroutine53
3 ?Subroutine54
6 ?Subroutine55
11 ?Subroutine56
5 ?Subroutine57
4 ?Subroutine58
5 ?Subroutine59
11 ?Subroutine6
4 ?Subroutine60
5 ?Subroutine61
10 ?Subroutine62
4 ?Subroutine63
4 ?Subroutine64
10 ?Subroutine65
4 ?Subroutine66
8 ?Subroutine67
2 ?Subroutine68
11 ?Subroutine69
5 ?Subroutine7
10 ?Subroutine70
2 ?Subroutine71
12 ?Subroutine72
6 ?Subroutine73
10 ?Subroutine74
11 ?Subroutine75
13 ?Subroutine76
12 ?Subroutine77
15 ?Subroutine78
4 ?Subroutine79
22 ?Subroutine8
11 ?Subroutine80
5 ?Subroutine81
1 ?Subroutine82
10 ?Subroutine83
3 ?Subroutine84
7 ?Subroutine85
5 ?Subroutine86
4 ?Subroutine87
7 ?Subroutine88
4 ?Subroutine89
8 ?Subroutine9
5 ?Subroutine90
16 ?Subroutine91
6 ?Subroutine92
11 ?Subroutine93
2 ?Subroutine94
7 ?Subroutine95
9 ?Subroutine96
9 ?Subroutine97
9 ?Subroutine98
11 ?Subroutine99
139 ZDO_RegisterForZDOMsg
106 ZDO_RemoveRegisteredCB
200 ZDO_SendMsgCBs
1 ZDP_AF_ENDPOINT
217 ZDP_BindUnbindReq
80 ZDP_Buf
74 ZDP_DeviceAnnce
159 ZDP_EPRsp
294 ZDP_EndDeviceBindReq
86 ZDP_GenericRsp
65 ZDP_IEEEAddrReq
310 ZDP_IncomingData
251 ZDP_MatchDescReq
280 ZDP_MgmtBindRsp
16 ZDP_MgmtDirectJoinReq
44 ZDP_MgmtLeaveReq
359 ZDP_MgmtLqiRsp
55 ZDP_MgmtNwkDiscReq
313 ZDP_MgmtNwkDiscRsp
195 ZDP_MgmtNwkUpdateNotify
109 ZDP_MgmtNwkUpdateReq
20 ZDP_MgmtPermitJoinReq
222 ZDP_MgmtRtgRsp
15 ZDP_NWKAddrOfInterestReq
209 ZDP_NodeDescMsg
117 ZDP_NwkAddrReq
92 ZDP_PowerDescMsg
112 ZDP_SendData
75 ZDP_ServerDiscReq
99 ZDP_ServerDiscRsp
334 ZDP_SimpleDescMsg
27 ZDP_SimpleDescReq
2 ZDP_TmpBuf
1 ZDP_TransID
1 ZDP_TxOptions
145 ZDP_UserDescRsp
112 ZDP_UserDescSet
162 fillAndSend
2 zdoMsgCBs
48 zdpMsgProcs
699 zdpProcessAddrReq
204 -- Other
6 769 bytes in segment BANKED_CODE
204 bytes in segment BANK_RELAYS
49 bytes in segment CODE_C
2 bytes in segment XDATA_I
2 bytes in segment XDATA_ID
84 bytes in segment XDATA_Z
255 bytes of CODE memory
6 769 bytes of HUGECODE memory
86 bytes of XDATA memory
Errors: none
Warnings: none