⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zdobject.s51

📁 用IAR开发的ZIGBEE网络路由例子
💻 S51
📖 第 1 页 / 共 5 页
字号:
//  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  */

        RSEG BANKED_CODE:CODE:NOROOT(0)
//  186 void ZDO_Init( void )
ZDO_Init:
        CFI Block cfiBlock0 Using cfiCommon0
        CFI Function ZDO_Init
//  187 {
        FUNCALL ZDO_Init, NLME_CoordinatorInit
        LOCFRAME ISTACK, 2, STACK
        ARGFRAME ISTACK, 2, STACK
        FUNCALL ZDO_Init, ZDSecMgrInit
        LOCFRAME ISTACK, 2, STACK
        ARGFRAME ISTACK, 2, STACK
        PUSH	DPL
        CFI DPL0 Frame(CFA_SP, 4)
        CFI CFA_SP SP+-4
        PUSH	DPH
        CFI DPH0 Frame(CFA_SP, 5)
        CFI CFA_SP SP+-5
        ; Saved register size: 2
        ; 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();
        ; Setup parameters for call to function NLME_CoordinatorInit
        MOV	DPTR,#(NLME_CoordinatorInit & 0xffff)
        MOV	A,#((NLME_CoordinatorInit >> 16) & 0xff)
        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)
        CFI EndBlock cfiBlock0
        REQUIRE ?Subroutine67
        ; // Fall through to label ?Subroutine67
//  198 }

        RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine67:
        CFI Block cfiBlock1 Using cfiCommon0
        CFI NoFunction
        CFI CFA_SP SP+-5
        CFI DPL0 Frame(CFA_SP, 4)
        CFI DPH0 Frame(CFA_SP, 5)
        LCALL	?BCALL               ; Banked call to: DPTR()
??Subroutine67_0:
        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_NetworkFormationRequest
        LOCFRAME XSTACK, 14, STACK
        ARGFRAME XSTACK, 14, STACK
        FUNCALL ZDO_StartDevice, NLME_StartRouterRequest
        LOCFRAME XSTACK, 9, STACK
        ARGFRAME XSTACK, 9, STACK
        FUNCALL ZDO_StartDevice, ZDSecMgrConfig
        LOCFRAME XSTACK, 9, STACK
        ARGFRAME XSTACK, 9, STACK
        FUNCALL ZDO_StartDevice, osal_start_timer
        LOCFRAME XSTACK, 9, STACK
        ARGFRAME XSTACK, 9, STACK
        MOV	A,#-0x9
        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 V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 9)
        ; Saved register size: 9
        ; Auto size: 0
        MOV	A,R1
        MOV	R5,A
        MOV	A,R3
        MOV	R1,A
//  293   ZStatus_t ret;
//  294 
//  295   ret = ZUnsupportedMode;
        MOV	R6,#0x12
//  296 
//  297 #if defined(ZDO_COORDINATOR)
//  298   if ( logicalType == NODETYPE_COORDINATOR )
        MOV	A,R5
        JNZ	??ZDO_StartDevice_0
//  299   {
//  300     if ( startMode == MODE_HARD )
        MOV	A,#0x2
        XRL	A,R2
        JNZ	??ZDO_StartDevice_1
//  301     {
//  302       devState = DEV_COORD_STARTING;
        MOV	A,#0x8
        MOV	DPTR,#devState
        MOVX	@DPTR,A
//  303       ret = NLME_NetworkFormationRequest( zgConfigPANID, zgDefaultChannelList,
//  304                                           zgDefaultStartingScanDuration, beaconOrder,
//  305                                           superframeOrder, false );
        ; Setup parameters for call to function NLME_NetworkFormationRequest
        MOV	?V0 + 0,#0x0
        MOV	R0,#?V0 + 0
        LCALL	?PUSH_XSTACK_I_ONE
        CFI CFA_XSP16 add(XSP16, 10)
        MOV	DPTR,#zgDefaultChannelList
        LCALL	?PUSH_XSTACK8_X_FOUR
        CFI CFA_XSP16 add(XSP16, 14)
        MOV	A,R4
        MOV	R5,A
        MOV	A,R1
        MOV	R4,A
        MOV	DPTR,#zgDefaultStartingScanDuration
        MOVX	A,@DPTR
        MOV	R1,A
        MOV	DPTR,#zgConfigPANID
        LCALL	?Subroutine41 & 0xFFFF
??CrossCallReturnLabel_119:
        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 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -