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

📄 mac_indirect_queue.s51

📁 zigbee location examples
💻 S51
📖 第 1 页 / 共 5 页
字号:
        ANL	A,#0xc
        XRL	A,?V0 + 2
        JNZ	??miqFindIndirectPacket_5
        MOV	A,R6
        ADD	A,#-0x74
        MOV	DPL,A
        MOV	A,R7
        ADDC	A,#0x0
        MOV	DPH,A
        MOVX	A,@DPTR
        XRL	A,#0x1
        JZ	??miqFindIndirectPacket_5
        MOV	A,R6
        ADD	A,#0x8
        MOV	R4,A
        MOV	A,R7
        ADDC	A,#0x0
        MOV	R5,A
        MOV	A,#0x8
        XRL	A,?V0 + 2
        JNZ	??miqFindIndirectPacket_3
        MOV	DPL,?V0 + 0
        MOV	DPH,?V0 + 1
        MOVX	A,@DPTR
        MOV	R0,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R1,A
        MOV	DPL,R4
        MOV	DPH,R5
        MOVX	A,@DPTR
        XRL	A,R0
        JNZ	??miqFindIndirectPacket_7
        INC	DPTR
        MOVX	A,@DPTR
        XRL	A,R1
??miqFindIndirectPacket_7:
        JNZ	??miqFindIndirectPacket_5
??miqFindIndirectPacket_4:
        MOV	A,R6
        MOV	R2,A
        MOV	A,R7
        MOV	R3,A
        SJMP	??miqFindIndirectPacket_8
//  254     }
//  255 
//  256     // Could not find any match
//  257     return NULL;
??miqFindIndirectPacket_6:
        MOV	R2,#0x0
        MOV	R3,#0x0
        CFI EndBlock cfiBlock2
??miqFindIndirectPacket_8:
        REQUIRE ?Subroutine1
        ; // Fall through to label ?Subroutine1
//  258 
//  259 } // miqFindIndirectPacket

        RSEG NEAR_CODE:CODE:NOROOT(0)
?Subroutine1:
        CFI Block cfiBlock3 Using cfiCommon0
        CFI NoFunction
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 10)
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
        CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-5)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-3)))
        CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-4)))
        MOV	R7,#0x3
        LJMP	?FUNC_LEAVE_XDATA
        CFI EndBlock cfiBlock3
//  260 
//  261 //-------------------------------------------------------------------------------------------------------
//  262 //  BOOL miqFindAndRequestIndirectPacket(ADDRESS *pDestAddr, BOOL isExtAddr)
//  263 //
//  264 //  DESCRIPTION:
//  265 //      Searches through the indirect packet queue for a match on the given address. If successful, the
//  266 //      found packet will be requested, and transmitted ASAP.
//  267 //
//  268 //  ARGUMENTS:
//  269 //      ADDRESS *pDestAddr
//  270 //          A pointer to the address to search for
//  271 //      BOOL isExtAddr
//  272 //          TRUE if pDestAddr points to an extended address
//  273 //
//  274 //  RETURN VALUE:
//  275 //      BOOL
//  276 //          A packet was found and flagged for transmission
//  277 //-------------------------------------------------------------------------------------------------------

        RSEG NEAR_CODE:CODE:NOROOT(0)
//  278 ROOT BOOL miqFindAndRequestIndirectPacket(ADDRESS *pDestAddr, BOOL isExtAddr) {
miqFindAndRequestIndirectPacket:
        CFI Block cfiBlock4 Using cfiCommon0
        CFI Function miqFindAndRequestIndirectPacket
        FUNCALL miqFindAndRequestIndirectPacket, msupCompareExtendedAddress
        LOCFRAME XSTACK, 10, STACK
        ARGFRAME XSTACK, 10, STACK
        FUNCALL miqFindAndRequestIndirectPacket, miqSetRequested
        LOCFRAME XSTACK, 10, STACK
        ARGFRAME XSTACK, 10, STACK
        MOV	A,#-0xa
        LCALL	?FUNC_ENTER_XDATA
        CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
        CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
        CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-3)))
        CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-4)))
        CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-5)))
        CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 10)
        ; Saved register size: 10
        ; Auto size: 0
        MOV	?V0 + 0,R2
        MOV	?V0 + 1,R3
//  279     UINT8           temp;
//  280     BYTE            destAddrMode;
//  281     MAC_TX_PACKET   *pIndirectPacket;
//  282 
//  283     destAddrMode = (BYTE)(isExtAddr ? DEST_ADDR_EXT : DEST_ADDR_SHORT);
        MOV	A,R1
        JZ	??miqFindAndRequestIndirectPacket_0
        MOV	?V0 + 2,#0xc
        SJMP	??miqFindAndRequestIndirectPacket_1
??miqFindAndRequestIndirectPacket_0:
        MOV	?V0 + 2,#0x8
//  284 
//  285     // For each packet in the queue ...
//  286     temp = miqInfo.firstIndirectPacket;
??miqFindAndRequestIndirectPacket_1:
        MOV	DPTR,#miqInfo
        SJMP	??miqFindAndRequestIndirectPacket_2
//  287     while (temp != NO_PACKET) {
//  288         pIndirectPacket = &pMtxPacketPool[temp];
//  289 
//  290         // ... return the packet index if there's a match on the address mode ...
//  291         if (destAddrMode == (pIndirectPacket->pHeader[1] & DEST_ADDR_BM))
//  292         {
//  293 
//  294             // ... and the address itself
//  295             if (destAddrMode == DEST_ADDR_SHORT) {
//  296                 if (pDestAddr->Short == *((WORD   *) &pIndirectPacket->pHeader[5])) {
//  297                     miqSetRequested(pIndirectPacket, TRUE);
//  298                     return TRUE;
//  299                 }
//  300             } else {
//  301                 if (msupCompareExtendedAddress(pDestAddr, (ADDRESS  *) (pIndirectPacket->pHeader + 5))) {
??miqFindAndRequestIndirectPacket_3:
        ; Setup parameters for call to function msupCompareExtendedAddress
        MOV	R2,?V0 + 0
        MOV	R3,?V0 + 1
        LCALL	msupCompareExtendedAddress
        MOV	A,R1
        JNZ	??miqFindAndRequestIndirectPacket_4
//  302                     miqSetRequested(pIndirectPacket, TRUE);
//  303                     return TRUE;
//  304                 }
//  305             }
//  306         }
//  307 
//  308 
//  309         // Move to the next packet in the queue
//  310         temp = pIndirectPacket->nextPacket;
??miqFindAndRequestIndirectPacket_5:
        MOV	A,R6
        ADD	A,#-0x73
        MOV	DPL,A
        MOV	A,R7
        ADDC	A,#0x0
        MOV	DPH,A
??miqFindAndRequestIndirectPacket_2:
        MOVX	A,@DPTR
        MOV	R2,A
        MOV	A,#-0x1
        XRL	A,R2
        JZ	??miqFindAndRequestIndirectPacket_6
        MOV	A,R2
        MOV	B,#-0x6d
        MUL	AB
        ADD	A,#(pMtxPacketPool & 0xff)
        MOV	R6,A
        MOV	A,B
        ADDC	A,#((pMtxPacketPool >> 8) & 0xff)
        MOV	R7,A
        MOV	DPL,R6
        MOV	DPH,R7
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        MOVX	A,@DPTR
        ANL	A,#0xc
        XRL	A,?V0 + 2
        JNZ	??miqFindAndRequestIndirectPacket_5
        MOV	A,R6
        ADD	A,#0x8
        MOV	R4,A
        MOV	A,R7
        ADDC	A,#0x0
        MOV	R5,A
        MOV	A,#0x8
        XRL	A,?V0 + 2
        JNZ	??miqFindAndRequestIndirectPacket_3
        MOV	DPL,?V0 + 0
        MOV	DPH,?V0 + 1
        MOVX	A,@DPTR
        MOV	R0,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R1,A
        MOV	DPL,R4
        MOV	DPH,R5
        MOVX	A,@DPTR
        XRL	A,R0
        JNZ	??miqFindAndRequestIndirectPacket_7
        INC	DPTR
        MOVX	A,@DPTR
        XRL	A,R1
??miqFindAndRequestIndirectPacket_7:
        JNZ	??miqFindAndRequestIndirectPacket_5
??miqFindAndRequestIndirectPacket_4:
        ; Setup parameters for call to function miqSetRequested
        MOV	R1,#0x1
        MOV	A,R6
        MOV	R2,A
        MOV	A,R7
        MOV	R3,A
        LCALL	miqSetRequested
        MOV	R1,#0x1
        SJMP	??miqFindAndRequestIndirectPacket_8
//  311     }
//  312 
//  313     // Could not find any match (should reply to the data request with a zero-length data packet)
//  314     return FALSE;
??miqFindAndRequestIndirectPacket_6:
        MOV	R1,#0x0
??miqFindAndRequestIndirectPacket_8:
        LJMP	?Subroutine1
        CFI EndBlock cfiBlock4
//  315 
//  316 } // miqFindAndRequestIndirectPacket
//  317 
//  318 /*******************************************************************************************************
//  319  *******************************************************************************************************
//  320  **************************           INDIRECT PACKET TRANSMISSION            **************************
//  321  *******************************************************************************************************
//  322  *******************************************************************************************************/
//  323 
//  324 
//  325 
//  326 
//  327 //-------------------------------------------------------------------------------------------------------
//  328 //  void miqSetRequested(MAC_TX_PACKET *pPacket, BOOL requested)
//  329 //
//  330 //  DESCRIPTION:
//  331 //      Requests or unrequests indirect packets. This function is responsible for creating the task that
//  332 //      initiates the indirect packet transmission.
//  333 //
//  334 //  ARGUMENTS:
//  335 //      MAC_TX_PACKET *pPacket
//  336 //          A pointer to the packet to be requested or unrequested
//  337 //      BOOL requested
//  338 //          TRUE if the packet should be flagged for transmission, FALSE if the flag is to be cleared
//  339 //          (note that this .
//  340 //
//  341 //  RETURN VALUE:
//  342 //      BOOL
//  343 //          A packet was found and flagged for transmission
//  344 //-------------------------------------------------------------------------------------------------------

        RSEG NEAR_CODE:CODE:NOROOT(0)
//  345 ROOT void miqSetRequested(MAC_TX_PACKET *pPacket, BOOL requested) {
miqSetRequested:
        CFI Block cfiBlock5 Using cfiCommon0
        CFI Function miqSetRequested
        FUNCALL miqSetRequested, mschReserveTask
        LOCFRAME ISTACK, 1, STACK
        LOCFRAME XSTACK, 17, STACK
        ARGFRAME ISTACK, 1, STACK
        ARGFRAME XSTACK, 17, STACK
        FUNCALL miqSetRequested, mschAddTask
        LOCFRAME XSTACK, 17, STACK
        ARGFRAME XSTACK, 17, STACK
        MOV	A,#-0xe
        LCALL	?FUNC_ENTER_XDATA
        CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
        CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
        CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-3)))
        CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-4)))
        CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-5)))
        CFI V6 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-11)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-12)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-13)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-14)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 14)
        ; Saved register size: 14
        ; Auto size: 0
//  346 
//  347     // Unrequested -> requested
//  348     if (requested && !pPacket->requested) {
        MOV	A,R2
        ADD	A,#-0x75
        MOV	?V0 + 0,A
        MOV	A,R3
        ADDC	A,#0x0
        MOV	?V0 + 1,A
        MOV	A,R1
        JZ	??miqSetRequested_0
        MOV	DPL,?V0 + 0
        MOV	DPH,?V0 + 1
        MOVX	A,@DPTR
        JNZ	??miqSetRequested_0
//  349         if (pPacket->timeToLive > 0) {
        MOV	A,R2
        ADD	A,#-0x77
        MOV	DPL,A
        MOV	A,R3
        ADDC	A,#0x0

⌨️ 快捷键说明

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