zdobject.s51
来自「TI的基于ZIGBEE2006的协议栈」· S51 代码 · 共 1,570 行 · 第 1/5 页
S51
1,570 行
MOV R1,A
MOV DPTR,#zgConfigPANID
LCALL ?Subroutine40 & 0xFFFF
??CrossCallReturnLabel_113:
MOV DPTR,#(NLME_NetworkFormationRequest & 0xffff)
MOV A,#((NLME_NetworkFormationRequest >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,#0x5
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 9)
SJMP ??ZDO_StartDevice_2
// 306 }
// 307 else if ( startMode == MODE_RESUME )
??ZDO_StartDevice_1:
MOV A,#0x1
XRL A,R2
JNZ ??ZDO_StartDevice_0
// 308 {
// 309 // Just start the coordinator
// 310 devState = DEV_COORD_STARTING;
MOV A,#0x8
MOV DPTR,#devState
MOVX @DPTR,A
// 311 ret = NLME_StartRouterRequest( beaconOrder, beaconOrder, false );
; Setup parameters for call to function NLME_StartRouterRequest
MOV R3,#0x0
MOV A,R1
MOV R2,A
MOV DPTR,#(NLME_StartRouterRequest & 0xffff)
MOV A,#((NLME_StartRouterRequest >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
??ZDO_StartDevice_2:
MOV A,R1
MOV R6,A
// 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 )
// 324 {
// 325 if ( (startMode == MODE_JOIN) || (startMode == MODE_REJOIN) )
// 326 {
// 327 devState = DEV_NWK_DISC;
// 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 );
// 334 #endif
// 335 }
// 336 else if ( startMode == MODE_RESUME )
// 337 {
// 338 if ( logicalType == NODETYPE_ROUTER )
// 339 {
// 340 ZMacScanCnf_t scanCnf;
// 341 devState = DEV_NWK_ORPHAN;
// 342
// 343 /* if router and nvram is available, fake successful orphan scan */
// 344 scanCnf.hdr.Status = ZSUCCESS;
// 345 scanCnf.ScanType = ZMAC_ORPHAN_SCAN;
// 346 scanCnf.UnscannedChannels = 0;
// 347 scanCnf.ResultListSize = 0;
// 348 nwk_ScanJoiningOrphan(&scanCnf);
// 349
// 350 ret = ZSuccess;
// 351 }
// 352 else
// 353 {
// 354 devState = DEV_NWK_ORPHAN;
// 355 ret = NLME_OrphanJoinRequest( zgDefaultChannelList,
// 356 zgDefaultStartingScanDuration );
// 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_0:
; 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_3
// 372 osal_start_timer( ZDO_NETWORK_INIT, NWK_RETRY_DELAY );
; Setup parameters for call to function osal_start_timer
MOV R4,#-0x18
MOV R5,#0x3
MOV R2,#0x1
MOV R3,#0x0
MOV DPTR,#(osal_start_timer & 0xffff)
MOV A,#((osal_start_timer >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 373 }
??ZDO_StartDevice_3:
MOV R7,#0x1
LJMP ?BANKED_LEAVE_XDATA
CFI EndBlock cfiBlock2
// 374
// 375 /*********************************************************************
// 376 * @fn ZDO_UpdateNwkStatus()
// 377 *
// 378 * @brief
// 379 *
// 380 * This function will send an update message to each registered
// 381 * application endpoint/interface about a network status change.
// 382 *
// 383 * @param none
// 384 *
// 385 * @return none
// 386 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 387 void ZDO_UpdateNwkStatus( devStates_t state )
ZDO_UpdateNwkStatus:
CFI Block cfiBlock3 Using cfiCommon0
CFI Function ZDO_UpdateNwkStatus
// 388 {
FUNCALL ZDO_UpdateNwkStatus, NLME_GetShortAddr
LOCFRAME XSTACK, 12, STACK
ARGFRAME XSTACK, 12, STACK
FUNCALL ZDO_UpdateNwkStatus, NLME_GetExtAddr
LOCFRAME XSTACK, 12, STACK
ARGFRAME XSTACK, 12, STACK
FUNCALL ZDO_UpdateNwkStatus, osal_msg_allocate
LOCFRAME XSTACK, 12, STACK
ARGFRAME XSTACK, 12, STACK
FUNCALL ZDO_UpdateNwkStatus, osal_msg_send
LOCFRAME XSTACK, 12, STACK
ARGFRAME XSTACK, 12, 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: 0
MOV ?V0 + 0,R1
// 389 // Endpoint/Interface descriptor list.
// 390 epList_t *epDesc = epList;
MOV DPTR,#epList
LCALL ?Subroutine41 & 0xFFFF
// 391 byte bufLen = sizeof(osal_event_hdr_t);
// 392 osal_event_hdr_t *msgPtr;
// 393
// 394 ZDAppNwkAddr.addr.shortAddr = NLME_GetShortAddr();
??CrossCallReturnLabel_118:
; Setup parameters for call to function NLME_GetShortAddr
MOV DPTR,#(NLME_GetShortAddr & 0xffff)
MOV A,#((NLME_GetShortAddr >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV DPTR,#ZDAppNwkAddr
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R3
MOVX @DPTR,A
// 395 (void)NLME_GetExtAddr(); // Load the saveExtAddr pointer.
; Setup parameters for call to function NLME_GetExtAddr
MOV DPTR,#(NLME_GetExtAddr & 0xffff)
MOV A,#((NLME_GetExtAddr >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
SJMP ??CrossCallReturnLabel_119
// 396
// 397 while ( epDesc )
// 398 {
// 399 if ( epDesc->epDesc->endPoint != ZDO_EP )
??ZDO_UpdateNwkStatus_0:
MOV DPL,R6
MOV DPH,R7
LCALL ?Subroutine26 & 0xFFFF
??CrossCallReturnLabel_69:
JZ ??ZDO_UpdateNwkStatus_1
// 400 {
// 401 msgPtr = (osal_event_hdr_t *)osal_msg_allocate( bufLen );
; Setup parameters for call to function osal_msg_allocate
MOV R2,#0x2
MOV R3,#0x0
MOV DPTR,#(osal_msg_allocate & 0xffff)
MOV A,#((osal_msg_allocate >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 402 if ( msgPtr )
MOV A,R2
JNZ ??ZDO_UpdateNwkStatus_2
MOV A,R3
??ZDO_UpdateNwkStatus_2:
JZ ??ZDO_UpdateNwkStatus_1
// 403 {
// 404 msgPtr->event = ZDO_STATE_CHANGE; // Command ID
MOV A,#-0x2f
MOV DPL,R2
MOV DPH,R3
MOVX @DPTR,A
// 405 msgPtr->status = (byte)state;
INC DPTR
MOV A,?V0 + 0
MOVX @DPTR,A
// 406
// 407 osal_msg_send( *(epDesc->epDesc->task_id), (byte *)msgPtr );
; Setup parameters for call to function osal_msg_send
MOV DPL,R6
MOV DPH,R7
LCALL ?Subroutine16 & 0xFFFF
??CrossCallReturnLabel_53:
LCALL ?BCALL ; Banked call to: DPTR()
// 408 }
// 409 }
// 410 epDesc = epDesc->nextDesc;
??ZDO_UpdateNwkStatus_1:
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
LCALL ?Subroutine41 & 0xFFFF
// 411 }
??CrossCallReturnLabel_119:
MOV A,R6
JNZ ??ZDO_UpdateNwkStatus_3
MOV A,R7
??ZDO_UpdateNwkStatus_3:
JNZ ??ZDO_UpdateNwkStatus_0
// 412 }
LJMP ?Subroutine63 & 0xFFFF
CFI EndBlock cfiBlock3
// 413
// 414 #if defined ( REFLECTOR )
// 415 /*********************************************************************
// 416 * @fn ZDO_RemoveEndDeviceBind
// 417 *
// 418 * @brief Remove the end device bind
// 419 *
// 420 * @param none
// 421 *
// 422 * @return none
// 423 */
// 424 static void ZDO_RemoveEndDeviceBind( void )
// 425 {
// 426 if ( ZDO_EDBind )
// 427 {
// 428 // Free the RAM
// 429 if ( ZDO_EDBind->inClusters )
// 430 osal_mem_free( ZDO_EDBind->inClusters );
// 431 if ( ZDO_EDBind->outClusters )
// 432 osal_mem_free( ZDO_EDBind->outClusters );
// 433 osal_mem_free( ZDO_EDBind );
// 434 ZDO_EDBind = NULL;
// 435 }
// 436 }
// 437 #endif // REFLECTOR
// 438
// 439 #if defined ( REFLECTOR )
// 440 /*********************************************************************
// 441 * @fn ZDO_RemoveEndDeviceBind
// 442 *
// 443 * @brief Remove the end device bind
// 444 *
// 445 * @param none
// 446 *
// 447 * @return none
// 448 */
// 449 static void ZDO_SendEDBindRsp( byte TransSeq, zAddrType_t *dstAddr, byte Status, byte secUse )
// 450 {
// 451 ZDP_EndDeviceBindRsp( TransSeq, dstAddr, Status, secUse );
// 452
// 453 #if defined( LCD_SUPPORTED )
// 454 HalLcdWriteString( "End Device Bind", HAL_LCD_LINE_1 );
// 455 if ( Status == ZDP_SUCCESS )
// 456 HalLcdWriteString( "Success Sent", HAL_LCD_LINE_2 );
// 457 else
// 458 HalLcdWriteString( "Timeout", HAL_LCD_LINE_2 );
// 459 #endif
// 460
// 461 }
// 462 #endif // REFLECTOR
// 463
// 464 #if defined ( REFLECTOR ) || defined ( ZDO_COORDINATOR )
// 465 /*********************************************************************
// 466 * @fn ZDO_CompareClusterLists
// 467 *
// 468 * @brief Compare one list to another list
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?