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 + -
显示快捷键?