zdobject.lst

来自「用IAR开发的ZIGBEE网络路由例子」· LST 代码 · 共 1,291 行 · 第 1/5 页

LST
1,291
字号
    644                  }
    645                  else
    646                  {
    647                    // Force no clusters
    648                    ZDO_EDBind->numInClusters = 0;
    649                  }
    650                }
    651                else
    652                  ZDO_EDBind->inClusters = NULL;
    653          
    654                ZDO_EDBind->numOutClusters = bindReq->numOutClusters;
    655                if ( bindReq->numOutClusters )
    656                {
    657                  ZDO_EDBind->outClusters = osal_mem_alloc( (short)(bindReq->numOutClusters*sizeof(uint16)) );
    658                  if ( ZDO_EDBind->outClusters )
    659                  {
    660                    osal_memcpy( ZDO_EDBind->outClusters, bindReq->outClusters, (bindReq->numOutClusters * sizeof( uint16 )) );
    661                  }
    662                  else
    663                  {
    664                    ZDO_EDBind->numOutClusters = 0;
    665                  }
    666                }
    667                else
    668                  ZDO_EDBind->outClusters = NULL;
    669          
    670                ZDO_EDBind->SecurityUse = bindReq->SecurityUse;
    671                ZDO_EDBind->status = ZDP_TIMEOUT;
    672          
    673                // Setup the timer
    674                APS_SetEndDeviceBindTimeout( AIB_MaxBindingTime, ZDO_EndDeviceTimeoutCB );
    675              }
    676            }
    677          }
    678          #endif // REFLECTOR
    679          
    680          /*********************************************************************
    681           * Utility functions
    682           */
    683          
    684          /*********************************************************************
    685           * @fn          ZDO_CreateAlignedUINT16List
    686           *
    687           * @brief       Creates a list of cluster IDs that is guaranteed to be aligned.
    688           *              according to the needs of the target. If thre device is running
    689           *              Protocol version 1.0 the incoming buffer will have only a single
    690           *              byte for the cluster ID.
    691           *
    692           *              Depends on the malloc taking care of alignment.
    693           *
    694           *              When cluster ID went to 16 bits alignment for cluster IDs became
    695           *              an issue.
    696           *
    697           * @param       num  - number of entries in list
    698           * @param       buf  - pointer to list
    699           *
    700           * @return      pointer to aligned list. Null if can't allocate memory.
    701           *              Caller's responsibility to free memory.
    702           */

   \                                 In segment BANKED_CODE, align 1, keep-with-next
    703          static uint16 *ZDO_CreateAlignedUINT16List(uint8 num, uint8 *buf)
   \                     ??ZDO_CreateAlignedUINT16List:
    704          {
   \   000000   74F2         MOV     A,#-0xe
   \   000002   12....       LCALL   ?BANKED_ENTER_XDATA
   \   000005                ; Saved register size: 14
   \   000005                ; Auto size: 0
   \   000005   89..         MOV     ?V0 + 2,R1
   \   000007   EA           MOV     A,R2
   \   000008   FE           MOV     R6,A
   \   000009   EB           MOV     A,R3
   \   00000A   FF           MOV     R7,A
    705            uint16 *ptr;
    706          
    707            if ((ptr=osal_mem_alloc((short)(num*sizeof(uint16)))))  {
   \   00000B                ; Setup parameters for call to function osal_mem_alloc
   \   00000B   E9           MOV     A,R1
   \   00000C   C3           CLR     C
   \   00000D   33           RLC     A
   \   00000E   FA           MOV     R2,A
   \   00000F   E4           CLR     A
   \   000010   33           RLC     A
   \   000011   FB           MOV     R3,A
   \   000012   90....       MOV     DPTR,#(osal_mem_alloc & 0xffff)
   \   000015   74..         MOV     A,#((osal_mem_alloc >> 16) & 0xff)
   \   000017   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
   \   00001A   8A..         MOV     ?V0 + 0,R2
   \   00001C   8B..         MOV     ?V0 + 1,R3
   \   00001E   EA           MOV     A,R2
   \   00001F   7001         JNZ     ??ZDO_CreateAlignedUINT16List_1
   \   000021   EB           MOV     A,R3
   \                     ??ZDO_CreateAlignedUINT16List_1:
   \   000022   605D         JZ      ??ZDO_CreateAlignedUINT16List_2
    708              uint8 i, ubyte, inc;
    709          
    710              inc = (ZB_PROT_V1_1 == NLME_GetProtocolVersion()) ? 2 : 1;
   \   000024                ; Setup parameters for call to function NLME_GetProtocolVersion
   \   000024   90....       MOV     DPTR,#(NLME_GetProtocolVersion & 0xffff)
   \   000027   74..         MOV     A,#((NLME_GetProtocolVersion >> 16) & 0xff)
   \   000029   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
   \   00002C   E9           MOV     A,R1
   \   00002D   6402         XRL     A,#0x2
   \   00002F   7004         JNZ     ??ZDO_CreateAlignedUINT16List_3
   \   000031   7B02         MOV     R3,#0x2
   \   000033   8002         SJMP    ??ZDO_CreateAlignedUINT16List_4
   \                     ??ZDO_CreateAlignedUINT16List_3:
   \   000035   7B01         MOV     R3,#0x1
    711          
    712              for (i=0; i<num; ++i)  {
   \                     ??ZDO_CreateAlignedUINT16List_4:
   \   000037   7A00         MOV     R2,#0x0
   \   000039   8031         SJMP    ??ZDO_CreateAlignedUINT16List_5
    713                // set upper byte to 0 if we're talking Version 1.0. otherwise
    714                // the buffer contains 16 bit cluster IDs.
    715                ubyte  = (2 == inc) ? buf[1] : 0;
   \                     ??ZDO_CreateAlignedUINT16List_6:
   \   00003B   75..00       MOV     ?V0 + 3,#0x0
    716                ptr[i] = BUILD_UINT16(buf[0], ubyte);
   \                     ??ZDO_CreateAlignedUINT16List_7:
   \   00003E   8E82         MOV     DPL,R6
   \   000040   8F83         MOV     DPH,R7
   \   000042   E0           MOVX    A,@DPTR
   \   000043   FC           MOV     R4,A
   \   000044   E4           CLR     A
   \   000045   2C           ADD     A,R4
   \   000046   E5..         MOV     A,?V0 + 3
   \   000048   3400         ADDC    A,#0x0
   \   00004A   FD           MOV     R5,A
   \   00004B   EA           MOV     A,R2
   \   00004C   C3           CLR     C
   \   00004D   33           RLC     A
   \   00004E   F8           MOV     R0,A
   \   00004F   E4           CLR     A
   \   000050   33           RLC     A
   \   000051   F9           MOV     R1,A
   \   000052   E5..         MOV     A,?V0 + 0
   \   000054   28           ADD     A,R0
   \   000055   F582         MOV     DPL,A
   \   000057   E5..         MOV     A,?V0 + 1
   \   000059   39           ADDC    A,R1
   \   00005A   F583         MOV     DPH,A
   \   00005C   EC           MOV     A,R4
   \   00005D   F0           MOVX    @DPTR,A
   \   00005E   A3           INC     DPTR
   \   00005F   ED           MOV     A,R5
   \   000060   F0           MOVX    @DPTR,A
    717                buf    += inc;
   \   000061   8B..         MOV     ?V0 + 4,R3
   \   000063   EE           MOV     A,R6
   \   000064   25..         ADD     A,?V0 + 4
   \   000066   FE           MOV     R6,A
   \   000067   EF           MOV     A,R7
   \   000068   3400         ADDC    A,#0x0
   \   00006A   FF           MOV     R7,A
   \   00006B   0A           INC     R2
   \                     ??ZDO_CreateAlignedUINT16List_5:
   \   00006C   EA           MOV     A,R2
   \   00006D   C3           CLR     C
   \   00006E   95..         SUBB    A,?V0 + 2
   \   000070   500F         JNC     ??ZDO_CreateAlignedUINT16List_2
   \   000072   7402         MOV     A,#0x2
   \   000074   6B           XRL     A,R3
   \   000075   70C4         JNZ     ??ZDO_CreateAlignedUINT16List_6
   \   000077   8E82         MOV     DPL,R6
   \   000079   8F83         MOV     DPH,R7
   \   00007B   A3           INC     DPTR
   \   00007C   E0           MOVX    A,@DPTR
   \   00007D   F5..         MOV     ?V0 + 3,A
   \   00007F   80BD         SJMP    ??ZDO_CreateAlignedUINT16List_7
    718              }
    719            }
    720          
    721            return ptr;
   \                     ??ZDO_CreateAlignedUINT16List_2:
   \   000081   AA..         MOV     R2,?V0 + 0
   \   000083   AB..         MOV     R3,?V0 + 1
   \   000085                REQUIRE ?Subroutine27
   \   000085                ; // Fall through to label ?Subroutine27
    722          }

   \                                 In segment BANKED_CODE, align 1, keep-with-next
   \                     ?Subroutine27:
   \   000000   7F06         MOV     R7,#0x6
   \   000002   02....       LJMP    ?BANKED_LEAVE_XDATA
    723          
    724          /*********************************************************************
    725           * @fn          ZDO_CompareByteLists
    726           *
    727           * @brief       Compares two lists for matches.
    728           *
    729           * @param       ACnt  - number of entries in list A
    730           * @param       AList  - List A
    731           * @param       BCnt  - number of entries in list B
    732           * @param       BList  - List B
    733           *
    734           * @return      true if a match is found
    735           */

   \                                 In segment BANKED_CODE, align 1, keep-with-next
    736          byte ZDO_AnyClusterMatches( byte ACnt, uint16 *AList, byte BCnt, uint16 *BList )
   \                     ZDO_AnyClusterMatches:
    737          {
   \   000000   74F4         MOV     A,#-0xc
   \   000002   12....       LCALL   ?BANKED_ENTER_XDATA
   \   000005                ; Saved register size: 12
   \   000005                ; Auto size: 0
   \   000005   89..         MOV     ?V0 + 0,R1
   \   000007   8C..         MOV     ?V0 + 1,R4
   \   000009   740C         MOV     A,#0xc
   \   00000B   12....       LCALL   ?XSTACK_DISP0_8
   \   00000E   12....       LCALL   ?Subroutine14 & 0xFFFF
    738            byte x, y;
    739          
    740            for ( x = 0; x < ACnt; x++ )
   \                     ??CrossCallReturnLabel_38:
   \   000011   75..00       MOV     ?V0 + 3,#0x0
   \   000014   8002         SJMP    ??ZDO_AnyClusterMatches_0
   \                     ??ZDO_AnyClusterMatches_1:
   \   000016   05..         INC     ?V0 + 3
   \                     ??ZDO_AnyClusterMatches_0:
   \   000018   E5..         MOV     A,?V0 + 3
   \   00001A   C3           CLR     C
   \   00001B   95..         SUBB    A,?V0 + 0
   \   00001D   5040         JNC     ??ZDO_AnyClusterMatches_2
    741            {
    742              for ( y = 0; y < BCnt; y++ )
   \   00001F   75..00       MOV     ?V0 + 2,#0x0
   \   000022   8002         SJMP    ??ZDO_AnyClusterMatches_3
   \                     ??ZDO_AnyClusterMatches_4:
   \   000024   05..         INC     ?V0 + 2
   \                     ??ZDO_AnyClusterMatches_3:
   \   000026   E5..         MOV     A,?V0 + 2
   \   000028   C3           CLR     C
   \   000029   95..         SUBB    A,?V0 + 1
   \   00002B   50E9         JNC     ??ZDO_AnyClusterMatches_1
    743              {
    744                if ( AList[x] == BList[y] )
   \   00002D   E5..         MOV     A,?V0 + 3
   \   00002F   C3           CLR     C
   \   000030   33           RLC     A
   \   000031   FC           MOV     R4,A
   \   000032   E4           CLR     A
   \   000033   33           RLC     A
   \   000034   FD           MOV     R5,A
   \   000035   EA           MOV     A,R2
   \   000036   2C           ADD     A,R4
   \   000037   F582         MOV     DPL,A
   \   000039   EB           MOV     A,R3
   \   00003A   3D           ADDC    A,R5
   \   00003B   F583         MOV     DPH,A
   \   00003D   E0           MOVX    A,@DPTR
   \   00003E   FE           MOV     R6,A
   \   00003F   A3           INC     DPTR
   \   000040   E0           MOVX  

⌨️ 快捷键说明

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