📄 zdobject.s51
字号:
LCALL ?BCALL ; Banked call to: DPTR()
// 195
// 196 // Initialize ZigBee Device Security Manager
// 197 ZDSecMgrInit();
; Setup parameters for call to function ZDSecMgrInit
MOV DPTR,#(ZDSecMgrInit & 0xffff)
MOV A,#((ZDSecMgrInit >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
CFI EndBlock cfiBlock0
// 198 }
REQUIRE ?Subroutine21
; // Fall through to label ?Subroutine21
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine21:
CFI Block cfiBlock1 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+-5
CFI DPL0 Frame(CFA_SP, 4)
CFI DPH0 Frame(CFA_SP, 5)
POP DPH
CFI CFA_SP SP+-4
CFI DPH0 SameValue
POP DPL
CFI CFA_SP SP+-3
CFI DPL0 SameValue
LJMP ?BRET
CFI EndBlock cfiBlock1
// 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 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 291 void ZDO_StartDevice( byte logicalType, devStartModes_t startMode, byte beaconOrder, byte superframeOrder )
ZDO_StartDevice:
CFI Block cfiBlock2 Using cfiCommon0
CFI Function ZDO_StartDevice
// 292 {
FUNCALL ZDO_StartDevice, NLME_NetworkDiscoveryRequest
LOCFRAME XSTACK, 23, STACK
ARGFRAME XSTACK, 23, STACK
FUNCALL ZDO_StartDevice, nwk_ScanJoiningOrphan
LOCFRAME XSTACK, 23, STACK
ARGFRAME XSTACK, 23, STACK
FUNCALL ZDO_StartDevice, NLME_OrphanJoinRequest
LOCFRAME XSTACK, 23, STACK
ARGFRAME XSTACK, 23, STACK
FUNCALL ZDO_StartDevice, ZDSecMgrConfig
LOCFRAME XSTACK, 23, STACK
ARGFRAME XSTACK, 23, STACK
FUNCALL ZDO_StartDevice, osal_start_timer
LOCFRAME XSTACK, 23, STACK
ARGFRAME XSTACK, 23, STACK
MOV A,#-0xc
LCALL ?BANKED_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 12)
; Saved register size: 12
; Auto size: 11
MOV A,#-0xb
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 23)
// 293 ZStatus_t ret;
// 294
// 295 ret = ZUnsupportedMode;
MOV R6,#0x12
// 296
// 297 #if defined(ZDO_COORDINATOR)
// 298 if ( logicalType == NODETYPE_COORDINATOR )
// 299 {
// 300 if ( startMode == MODE_HARD )
// 301 {
// 302 devState = DEV_COORD_STARTING;
// 303 ret = NLME_NetworkFormationRequest( zgConfigPANID, zgDefaultChannelList,
// 304 zgDefaultStartingScanDuration, beaconOrder,
// 305 superframeOrder, false );
// 306 }
// 307 else if ( startMode == MODE_RESUME )
// 308 {
// 309 // Just start the coordinator
// 310 devState = DEV_COORD_STARTING;
// 311 ret = NLME_StartRouterRequest( beaconOrder, beaconOrder, false );
// 312 }
// 313 else
// 314 {
// 315 #if defined( LCD_SUPPORTED )
// 316 HalLcdWriteScreen( "StartDevice ERR", "MODE unknown" );
// 317 #endif
// 318 }
// 319 }
// 320 #endif // !ZDO_COORDINATOR
// 321
// 322 #if !defined ( ZDO_COORDINATOR ) || defined( SOFT_START )
// 323 if ( logicalType == NODETYPE_ROUTER || logicalType == NODETYPE_DEVICE )
MOV A,#0x1
XRL A,R1
JZ ??ZDO_StartDevice_0
MOV A,#0x2
XRL A,R1
JZ $+5
LJMP ??ZDO_StartDevice_1 & 0xFFFF
// 324 {
// 325 if ( (startMode == MODE_JOIN) || (startMode == MODE_REJOIN) )
??ZDO_StartDevice_0:
MOV A,R2
JZ ??ZDO_StartDevice_2
MOV A,#0x3
XRL A,R2
JNZ ??ZDO_StartDevice_3
// 326 {
// 327 devState = DEV_NWK_DISC;
??ZDO_StartDevice_2:
MOV A,#0x2
LCALL ?Subroutine1 & 0xFFFF
// 328
// 329 #if defined( MANAGED_SCAN )
// 330 ZDOManagedScan_Next();
// 331 ret = NLME_NetworkDiscoveryRequest( managedScanChannelMask, BEACON_ORDER_15_MSEC );
// 332 #else
// 333 ret = NLME_NetworkDiscoveryRequest( zgDefaultChannelList, zgDefaultStartingScanDuration );
??CrossCallReturnLabel_2:
LCALL ?L_MOV_X
MOV R2,?V0 + 0
MOV R3,?V0 + 1
MOV R4,?V0 + 2
MOV R5,?V0 + 3
MOV DPTR,#(NLME_NetworkDiscoveryRequest & 0xffff)
MOV A,#((NLME_NetworkDiscoveryRequest >> 16) & 0xff)
SJMP ??ZDO_StartDevice_4
// 334 #endif
// 335 }
// 336 else if ( startMode == MODE_RESUME )
??ZDO_StartDevice_3:
MOV A,#0x1
XRL A,R2
JNZ ??ZDO_StartDevice_1
// 337 {
// 338 if ( logicalType == NODETYPE_ROUTER )
MOV A,#0x1
XRL A,R1
JNZ ??ZDO_StartDevice_5
// 339 {
// 340 ZMacScanCnf_t scanCnf;
// 341 devState = DEV_NWK_ORPHAN;
MOV A,#0xa
MOV DPTR,#devState
MOVX @DPTR,A
// 342
// 343 /* if router and nvram is available, fake successful orphan scan */
// 344 scanCnf.hdr.Status = ZSUCCESS;
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
CLR A
MOVX @DPTR,A
// 345 scanCnf.ScanType = ZMAC_ORPHAN_SCAN;
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
MOV A,#0x3
MOVX @DPTR,A
// 346 scanCnf.UnscannedChannels = 0;
MOV DPTR,#__Constant_0
MOV R0,#?V0 + 0
LCALL ?L_MOV_X
MOV A,#0x4
LCALL ?XSTACK_DISP0_8
MOV R0,#?V0 + 0
LCALL ?L_MOV_TO_X
// 347 scanCnf.ResultListSize = 0;
MOV A,#0x8
LCALL ?XSTACK_DISP0_8
CLR A
MOVX @DPTR,A
// 348 nwk_ScanJoiningOrphan(&scanCnf);
; Setup parameters for call to function nwk_ScanJoiningOrphan
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV R2,DPL
MOV R3,DPH
MOV DPTR,#(nwk_ScanJoiningOrphan & 0xffff)
MOV A,#((nwk_ScanJoiningOrphan >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 349
// 350 ret = ZSuccess;
MOV R6,#0x0
SJMP ??ZDO_StartDevice_1
// 351 }
// 352 else
// 353 {
// 354 devState = DEV_NWK_ORPHAN;
??ZDO_StartDevice_5:
MOV A,#0xa
LCALL ?Subroutine1 & 0xFFFF
// 355 ret = NLME_OrphanJoinRequest( zgDefaultChannelList,
// 356 zgDefaultStartingScanDuration );
??CrossCallReturnLabel_3:
LCALL ?L_MOV_X
MOV R2,?V0 + 0
MOV R3,?V0 + 1
MOV R4,?V0 + 2
MOV R5,?V0 + 3
MOV DPTR,#(NLME_OrphanJoinRequest & 0xffff)
MOV A,#((NLME_OrphanJoinRequest >> 16) & 0xff)
??ZDO_StartDevice_4:
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,R1
MOV R6,A
// 357 }
// 358 }
// 359 else
// 360 {
// 361 #if defined( LCD_SUPPORTED )
// 362 HalLcdWriteScreen( "StartDevice ERR", "MODE unknown" );
// 363 #endif
// 364 }
// 365 }
// 366 #endif //!ZDO COORDINATOR || SOFT_START
// 367
// 368 // configure the Security Manager for type of device
// 369 ZDSecMgrConfig();
??ZDO_StartDevice_1:
; Setup parameters for call to function ZDSecMgrConfig
MOV DPTR,#(ZDSecMgrConfig & 0xffff)
MOV A,#((ZDSecMgrConfig >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 370
// 371 if ( ret != ZSuccess )
MOV A,R6
JZ ??ZDO_StartDevice_6
// 372 osal_start_timer( ZDO_NETWORK_INIT, NWK_RETRY_DELAY );
; Setup parameters for call to function osal_start_timer
MOV R4,#-0x18
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -