📄 zdapp.lst
字号:
525 // Check leave control reset settings
526 ZDApp_LeaveCtrlStartup( &devState, &startDelay );
\ 000023 ; Setup parameters for call to function ZDApp_LeaveCtrlStartup
\ 000023 85..82 MOV DPL,?XSP + 0
\ 000026 85..83 MOV DPH,?XSP + 1
\ 000029 AC82 MOV R4,DPL
\ 00002B AD83 MOV R5,DPH
\ 00002D 7A.. MOV R2,#(devState & 0xff)
\ 00002F 7B.. MOV R3,#((devState >> 8) & 0xff)
\ 000031 90.... MOV DPTR,#(ZDApp_LeaveCtrlStartup & 0xffff)
\ 000034 74.. MOV A,#((ZDApp_LeaveCtrlStartup >> 16) & 0xff)
\ 000036 12.... LCALL ?BCALL ; Banked call to: DPTR()
527
528 // Leave may make the hold state come back
529 if ( devState == DEV_HOLD )
\ 000039 90.... MOV DPTR,#devState
\ 00003C E0 MOVX A,@DPTR
\ 00003D 7004 JNZ ??ZDOInitDevice_0
530 return ( ZDO_INITDEV_LEAVE_NOT_STARTED ); // Don't join - (one time).
\ 00003F 7902 MOV R1,#0x2
\ 000041 802F SJMP ??ZDOInitDevice_1
531
532 #if defined ( NV_RESTORE )
533 // Get Keypad directly to see if a reset nv is needed.
534 // Hold down the SW_BYPASS_NV key (defined in OnBoard.h)
535 // while booting to skip past NV Restore.
536 if ( HalKeyRead() == SW_BYPASS_NV )
537 networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE;
538 else
539 {
540 // Determine if NV should be restored
541 networkStateNV = ZDApp_ReadNetworkRestoreState();
542 }
543
544 if ( networkStateNV == ZDO_INITDEV_RESTORED_NETWORK_STATE )
545 {
546 networkStateNV = ZDApp_RestoreNetworkState();
547 }
548 else
549 {
550 // Wipe out the network state in NV
551 NLME_InitNV();
552 NLME_SetDefaultNV();
553 ZDAppSetupProtoVersion();
554 }
555 #endif
556
557 if ( networkStateNV == ZDO_INITDEV_NEW_NETWORK_STATE )
558 {
559 ZDAppDetermineDeviceType();
560
561 // Only delay if joining network - not restoring network state
562 extendedDelay = (uint16)((NWK_START_DELAY + startDelay)
563 + (osal_rand() & EXTENDED_JOINING_RANDOM_MASK));
\ ??ZDOInitDevice_0:
\ 000043 ; Setup parameters for call to function osal_rand
\ 000043 90.... MOV DPTR,#(osal_rand & 0xffff)
\ 000046 74.. MOV A,#((osal_rand >> 16) & 0xff)
\ 000048 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 00004B 8A.. MOV ?V0 + 0,R2
\ 00004D A8.. MOV R0,?V0 + 0
\ 00004F 85..82 MOV DPL,?XSP + 0
\ 000052 85..83 MOV DPH,?XSP + 1
\ 000055 747F MOV A,#0x7f
\ 000057 58 ANL A,R0
\ 000058 F8 MOV R0,A
\ 000059 E0 MOVX A,@DPTR
\ 00005A 28 ADD A,R0
\ 00005B F8 MOV R0,A
\ 00005C A3 INC DPTR
\ 00005D E0 MOVX A,@DPTR
\ 00005E 3400 ADDC A,#0x0
\ 000060 F9 MOV R1,A
\ 000061 7464 MOV A,#0x64
\ 000063 28 ADD A,R0
\ 000064 FA MOV R2,A
\ 000065 E4 CLR A
\ 000066 39 ADDC A,R1
\ 000067 FB MOV R3,A
564 }
565
566 // Trigger the network start
567 ZDApp_NetworkInit( extendedDelay );
\ 000068 ; Setup parameters for call to function ZDApp_NetworkInit
\ 000068 90.... MOV DPTR,#(ZDApp_NetworkInit & 0xffff)
\ 00006B 74.. MOV A,#((ZDApp_NetworkInit >> 16) & 0xff)
\ 00006D 12.... LCALL ?BCALL ; Banked call to: DPTR()
568
569 return ( networkStateNV );
\ 000070 7901 MOV R1,#0x1
\ ??ZDOInitDevice_1:
\ 000072 02.... LJMP ?Subroutine28 & 0xFFFF
570 }
571
572 /*********************************************************************
573 * @fn ZDApp_ReadNetworkRestoreState
574 *
575 * @brief Read the ZCD_NV_STARTUP_OPTION NV Item to state whether
576 * or not to restore the network state.
577 * If the read value has the ZCD_STARTOPT_DEFAULT_NETWORK_STATE
578 * bit set return the ZDO_INITDEV_NEW_NETWORK_STATE.
579 *
580 * @param none
581 *
582 * @return ZDO_INITDEV_NEW_NETWORK_STATE
583 * or ZDO_INITDEV_RESTORED_NETWORK_STATE based on whether or
584 * not ZCD_STARTOPT_DEFAULT_NETWORK_STATE bit is set in
585 * ZCD_NV_STARTUP_OPTION
586 */
\ In segment BANKED_CODE, align 1, keep-with-next
587 uint8 ZDApp_ReadNetworkRestoreState( void )
\ ZDApp_ReadNetworkRestoreState:
588 {
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 0
589 uint8 networkStateNV = ZDO_INITDEV_RESTORED_NETWORK_STATE;
\ 000005 7E00 MOV R6,#0x0
590
591 // Look for the New Network State option.
592 if ( zgReadStartupOptions() & ZCD_STARTOPT_DEFAULT_NETWORK_STATE )
\ 000007 ; Setup parameters for call to function zgReadStartupOptions
\ 000007 90.... MOV DPTR,#(zgReadStartupOptions & 0xffff)
\ 00000A 74.. MOV A,#((zgReadStartupOptions >> 16) & 0xff)
\ 00000C 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 00000F E9 MOV A,R1
\ 000010 A2E1 MOV C,0xE0 /* A */.1
\ 000012 5001 JNC ??ZDApp_ReadNetworkRestoreState_0
593 {
594 networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE;
\ 000014 0E INC R6
595 }
596
597 return ( networkStateNV );
\ ??ZDApp_ReadNetworkRestoreState_0:
\ 000015 EE MOV A,R6
\ 000016 F9 MOV R1,A
\ 000017 80.. SJMP ??Subroutine29_0
598 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine29:
\ 000000 12.... LCALL ?DEALLOC_XSTACK8
\ ??Subroutine29_0:
\ 000003 7F01 MOV R7,#0x1
\ 000005 02.... LJMP ?BANKED_LEAVE_XDATA
599
600 /*********************************************************************
601 * @fn ZDAppDetermineDeviceType()
602 *
603 * @brief Determines the type of device to start. Right now
604 * this only works with the SOFT_START feature. So it doesn't
605 * support the end device type.
606 *
607 * Looks at zgDeviceLogicalType and determines what type of
608 * device to start. The types are:
609 * ZG_DEVICETYPE_COORDINATOR
610 * ZG_DEVICETYPE_ROUTER
611 * ZG_DEVICETYPE_ENDDEVICE - not supported yet.
612 * ZG_DEVICETYPE_SOFT - looks for coordinator, if one doesn't
613 * exist, becomes one. This option is should only be used
614 * if the system is manually configured and you are insured
615 * that the first device is started before all the other
616 * devices are started.
617 *
618 * @param none
619 *
620 * @return none
621 */
\ In segment BANKED_CODE, align 1, keep-with-next
622 void ZDAppDetermineDeviceType( void )
\ ZDAppDetermineDeviceType:
623 {
\ 000000 ; Saved register size: 0
\ 000000 ; Auto size: 0
624 if ( zgDeviceLogicalType == ZG_DEVICETYPE_ENDDEVICE )
\ 000000 02.... LJMP ?BRET
625 return;
626
627 #if defined ( SOFT_START )
628 if ( zgDeviceLogicalType == ZG_DEVICETYPE_COORDINATOR )
629 {
630 devStartMode = MODE_HARD; // Start as a coordinator
631 ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_COORDINATOR;
632 }
633 else
634 {
635 if ( zgDeviceLogicalType == ZG_DEVICETYPE_ROUTER )
636 {
637 softStartAllowCoord = FALSE; // Don't allow coord to start
638 continueJoining = TRUE;
639 }
640 devStartMode = MODE_JOIN; // Assume joining
641 }
642 #endif // SOFT_START
643 }
644
645 /*********************************************************************
646 * @fn ZDApp_NetworkStartEvt()
647 *
648 * @brief Process the Network Start Event
649 *
650 * @param none
651 *
652 * @return none
653 */
\ In segment BANKED_CODE, align 1, keep-with-next
654 void ZDApp_NetworkStartEvt( void )
\ ZDApp_NetworkStartEvt:
655 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
656 if ( nwkStatus == ZSuccess )
\ 000004 90.... MOV DPTR,#nwkStatus
\ 000007 E0 MOVX A,@DPTR
\ 000008 7017 JNZ ??ZDApp_NetworkStartEvt_0
657 {
658 // Successfully started a ZigBee network
659 if ( devState == DEV_COORD_STARTING )
\ 00000A 90.... MOV DPTR,#devState
\ 00000D E0 MOVX A,@DPTR
\ 00000E 6408 XRL A,#0x8
\ 000010 7003 JNZ ??ZDApp_NetworkStartEvt_1
660 {
661 devState = DEV_ZB_COORD;
\ 000012 7409 MOV A,#0x9
\ 000014 F0 MOVX @DPTR,A
662
663 #if ( SECURE != 0 )
664 // Initialize keys
665 SSP_UpdateNwkKey( (byte*)zgPreConfigKey, 0 );
666 SSP_SwitchNwkKey( 0 );
667 #endif
668 }
669
670 osal_pwrmgr_device( PWRMGR_ALWAYS_ON );
\ ??ZDApp_NetworkStartEvt_1:
\ 000015 ; Setup parameters for call to function osal_pwrmgr_device
\ 000015 7900 MOV R1,#0x0
\ 000017 90.... MOV DPTR,#(osal_pwrmgr_device & 0xffff)
\ 00001A 74.. MOV A,#((osal_pwrmgr_device >> 16) & 0xff)
\ 00001C 12.... LCALL ?BCALL ; Banked call to: DPTR()
671 osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );
\ 00001F ; Setup parameters for call to function osal_set_event
\ 00001F 8039 SJMP ??ZDApp_NetworkStartEvt_2
672 }
673 e
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -