📄 zdobject.lst
字号:
148 #endif
149
150 #if defined ( ZDO_COORDINATOR )
\ In segment XDATA_Z, align 1, keep-with-next
\ 000000 REQUIRE __INIT_XDATA_Z
151 ZDMatchEndDeviceBind_t *matchED = (ZDMatchEndDeviceBind_t *)NULL;
\ matchED:
\ 000000 DS 2
152 #endif
153
154 /*********************************************************************
155 * LOCAL FUNCTIONS
156 */
157 static void ZDODeviceSetup( void );
158 static uint16 *ZDO_CreateAlignedUINT16List(uint8 num, uint8 *buf);
159 #if defined ( MANAGED_SCAN )
160 static void ZDOManagedScan_Next( void );
161 #endif
162 #if defined ( REFLECTOR )
163 static void ZDO_RemoveEndDeviceBind( void );
164 static void ZDO_SendEDBindRsp( byte TransSeq, zAddrType_t *dstAddr, byte Status, byte secUse );
165 #endif
166 #if defined ( REFLECTOR ) || defined( ZDO_COORDINATOR )
167 static byte ZDO_CompareClusterLists( byte numList1, uint16 *list1,
168 byte numList2, uint16 *list2, uint16 *pMatches );
169 #endif
170 #if defined ( ZDO_COORDINATOR )
171 static void ZDO_RemoveMatchMemory( void );
172 static uint8 ZDO_CopyMatchInfo( ZDEndDeviceBind_t *destReq, ZDEndDeviceBind_t *srcReq );
173 static uint8 ZDMatchSendState( uint8 reason, uint8 status, uint8 TransSeq );
174 static void ZDO_EndDeviceBindMatchTimeoutCB( void );
175 #endif
176
177 /*********************************************************************
178 * @fn ZDO_Init
179 *
180 * @brief ZDObject and ZDProfile initialization.
181 *
182 * @param none
183 *
184 * @return none
185 */
\ In segment BANKED_CODE, align 1, keep-with-next
186 void ZDO_Init( void )
\ ZDO_Init:
187 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
188 // Initialize ZD items
189 #if defined ( REFLECTOR )
190 ZDO_EDBind = NULL;
191 #endif
192
193 // Setup the device - type of device to create.
194 ZDODeviceSetup();
\ 000004 ; Setup parameters for call to function NLME_CoordinatorInit
\ 000004 90.... MOV DPTR,#(NLME_CoordinatorInit & 0xffff)
\ 000007 74.. MOV A,#((NLME_CoordinatorInit >> 16) & 0xff)
\ 000009 12.... LCALL ?BCALL ; Banked call to: DPTR()
195
196 // Initialize ZigBee Device Security Manager
197 ZDSecMgrInit();
\ 00000C ; Setup parameters for call to function ZDSecMgrInit
\ 00000C 90.... MOV DPTR,#(ZDSecMgrInit & 0xffff)
\ 00000F 74.. MOV A,#((ZDSecMgrInit >> 16) & 0xff)
\ 000011 REQUIRE ?Subroutine67
\ 000011 ; // Fall through to label ?Subroutine67
198 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine67:
\ 000000 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ ??Subroutine67_0:
\ 000003 D083 POP DPH
\ 000005 D082 POP DPL
\ 000007 02.... LJMP ?BRET
199
200 #if defined ( MANAGED_SCAN )
201 /*********************************************************************
202 * @fn ZDOManagedScan_Next()
203 *
204 * @brief Setup a managed scan.
205 *
206 * @param none
207 *
208 * @return none
209 */
210 static void ZDOManagedScan_Next( void )
211 {
212 // Is it the first time
213 if ( managedScanNextChannel == 0 && managedScanTimesPerChannel == 0 )
214 {
215 // Setup the defaults
216 managedScanNextChannel = 1;
217
218 while( managedScanNextChannel && (zgDefaultChannelList & managedScanNextChannel) == 0 )
219 managedScanNextChannel <<= 1;
220
221 managedScanChannelMask = managedScanNextChannel;
222 managedScanTimesPerChannel = MANAGEDSCAN_TIMES_PRE_CHANNEL;
223 }
224 else
225 {
226 // Do we need to go to the next channel
227 if ( managedScanTimesPerChannel == 0 )
228 {
229 // Find next active channel
230 managedScanChannelMask = managedScanNextChannel;
231 managedScanTimesPerChannel = MANAGEDSCAN_TIMES_PRE_CHANNEL;
232 }
233 else
234 {
235 managedScanTimesPerChannel--;
236
237 if ( managedScanTimesPerChannel == 0 )
238 {
239 managedScanNextChannel <<= 1;
240 while( managedScanNextChannel && (zgDefaultChannelList & managedScanNextChannel) == 0 )
241 managedScanNextChannel <<= 1;
242
243 if ( managedScanNextChannel == 0 )
244 zdoDiscCounter = NUM_DISC_ATTEMPTS + 1; // Stop
245 }
246 }
247 }
248 }
249 #endif // MANAGED_SCAN
250
251 /*********************************************************************
252 * @fn ZDODeviceSetup()
253 *
254 * @brief Call set functions depending on the type of device compiled.
255 *
256 * @param none
257 *
258 * @return none
259 */
260 static void ZDODeviceSetup( void )
261 {
262 #if defined( ZDO_COORDINATOR )
263 NLME_CoordinatorInit();
264 #endif
265
266 #if defined ( REFLECTOR )
267 #if defined ( ZDO_COORDINATOR )
268 APS_ReflectorInit( APS_REFLECTOR_PUBLIC );
269 #else
270 APS_ReflectorInit( APS_REFLECTOR_PRIVATE );
271 #endif
272 #endif
273
274 #if !defined( ZDO_COORDINATOR ) || defined( SOFT_START )
275 NLME_DeviceJoiningInit();
276 #endif
277 }
278
279 /*********************************************************************
280 * @fn ZDO_StartDevice
281 *
282 * @brief This function starts a device in a network.
283 *
284 * @param logicalType - Device type to start
285 * startMode - indicates mode of device startup
286 * beaconOrder - indicates time betwen beacons
287 * superframeOrder - indicates length of active superframe
288 *
289 * @return none
290 */
\ In segment BANKED_CODE, align 1, keep-with-next
291 void ZDO_StartDevice( byte logicalType, devStartModes_t startMode, byte beaconOrder, byte superframeOrder )
\ ZDO_StartDevice:
292 {
\ 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 FD MOV R5,A
\ 000007 EB MOV A,R3
\ 000008 F9 MOV R1,A
293 ZStatus_t ret;
294
295 ret = ZUnsupportedMode;
\ 000009 7E12 MOV R6,#0x12
296
297 #if defined(ZDO_COORDINATOR)
298 if ( logicalType == NODETYPE_COORDINATOR )
\ 00000B ED MOV A,R5
\ 00000C 7050 JNZ ??ZDO_StartDevice_0
299 {
300 if ( startMode == MODE_HARD )
\ 00000E 7402 MOV A,#0x2
\ 000010 6A XRL A,R2
\ 000011 7032 JNZ ??ZDO_StartDevice_1
301 {
302 devState = DEV_COORD_STARTING;
\ 000013 7408 MOV A,#0x8
\ 000015 90.... MOV DPTR,#devState
\ 000018 F0 MOVX @DPTR,A
303 ret = NLME_NetworkFormationRequest( zgConfigPANID, zgDefaultChannelList,
304 zgDefaultStartingScanDuration, beaconOrder,
305 superframeOrder, false );
\ 000019 ; Setup parameters for call to function NLME_NetworkFormationRequest
\ 000019 75..00 MOV ?V0 + 0,#0x0
\ 00001C 78.. MOV R0,#?V0 + 0
\ 00001E 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 000021 90.... MOV DPTR,#zgDefaultChannelList
\ 000024 12.... LCALL ?PUSH_XSTACK8_X_FOUR
\ 000027 EC MOV A,R4
\ 000028 FD MOV R5,A
\ 000029 E9 MOV A,R1
\ 00002A FC MOV R4,A
\ 00002B 90.... MOV DPTR,#zgDefaultStartingScanDuration
\ 00002E E0 MOVX A,@DPTR
\ 00002F F9 MOV R1,A
\ 000030 90.... MOV DPTR,#zgConfigPANID
\ 000033 12.... LCALL ?Subroutine41 & 0xFFFF
\ ??CrossCallReturnLabel_119:
\ 000036 90.... MOV DPTR,#(NLME_NetworkFormationRequest & 0xffff)
\ 000039 74.. MOV A,#((NLME_NetworkFormationRequest >> 16) & 0xff)
\ 00003B 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 00003E 7405 MOV A,#0x5
\ 000040 12.... LCALL ?DEALLOC_XSTACK8
\ 000043 8017 SJMP ??ZDO_StartDevice_2
306 }
307 else if ( startMode == MODE_RESUME )
\ ??ZDO_StartDevice_1:
\ 000045 7401 MOV A,#0x1
\ 000047 6A XRL A,R2
\ 000048 7014 JNZ ??ZDO_StartDevice_0
308 {
309 // Just start the coordinator
310 devState = DEV_COORD_STARTING;
\ 00004A 7408 MOV A,#0x8
\ 00004C 90.... MOV DPTR,#devState
\ 00004F F0 MOVX @DPTR,A
311 ret = NLME_StartRouterRequest( beaconOrder, beaconOrder, false );
\ 000050 ; Setup parameters for call to function NLME_StartRouterRequest
\ 000050 7B00 MOV R3,#0x0
\ 000052 E9 MOV A,R1
\ 000053 FA MOV R2,A
\ 000054 90.... MOV DPTR,#(NLME_StartRouterRequest & 0xffff)
\ 000057 74.. MOV A,#((NLME_StartRouterRequest >> 16) & 0xff)
\ 000059 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ ??ZDO_StartDevice_2:
\ 00005C E9 MOV A,R1
\ 00005D FE MOV R6,A
312 }
313 else
314 {
315 #if defined( LCD_SUPPORTED )
316 HalLcdWriteScreen( "StartDevice ERR", "MODE unknown" );
317 #endif
318 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -