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

📄 mac_indirect_queue.lst

📁 zigbee location examples
💻 LST
📖 第 1 页 / 共 5 页
字号:
    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          //-------------------------------------------------------------------------------------------------------

   \                                 In segment NEAR_CODE, align 1, keep-with-next
    278          ROOT BOOL miqFindAndRequestIndirectPacket(ADDRESS *pDestAddr, BOOL isExtAddr) {
   \                     miqFindAndRequestIndirectPacket:
   \   000000   74F6         MOV     A,#-0xa
   \   000002   12....       LCALL   ?FUNC_ENTER_XDATA
   \   000005                ; Saved register size: 10
   \   000005                ; Auto size: 0
   \   000005   8A..         MOV     ?V0 + 0,R2
   \   000007   8B..         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);
   \   000009   E9           MOV     A,R1
   \   00000A   6005         JZ      ??miqFindAndRequestIndirectPacket_0
   \   00000C   75..0C       MOV     ?V0 + 2,#0xc
   \   00000F   8003         SJMP    ??miqFindAndRequestIndirectPacket_1
   \                     ??miqFindAndRequestIndirectPacket_0:
   \   000011   75..08       MOV     ?V0 + 2,#0x8
    284          
    285              // For each packet in the queue ...
    286              temp = miqInfo.firstIndirectPacket;
   \                     ??miqFindAndRequestIndirectPacket_1:
   \   000014   90....       MOV     DPTR,#miqInfo
   \   000017   8014         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:
   \   000019                ; Setup parameters for call to function msupCompareExtendedAddress
   \   000019   AA..         MOV     R2,?V0 + 0
   \   00001B   AB..         MOV     R3,?V0 + 1
   \   00001D   12....       LCALL   msupCompareExtendedAddress
   \   000020   E9           MOV     A,R1
   \   000021   7053         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:
   \   000023   EE           MOV     A,R6
   \   000024   248D         ADD     A,#-0x73
   \   000026   F582         MOV     DPL,A
   \   000028   EF           MOV     A,R7
   \   000029   3400         ADDC    A,#0x0
   \   00002B   F583         MOV     DPH,A
   \                     ??miqFindAndRequestIndirectPacket_2:
   \   00002D   E0           MOVX    A,@DPTR
   \   00002E   FA           MOV     R2,A
   \   00002F   74FF         MOV     A,#-0x1
   \   000031   6A           XRL     A,R2
   \   000032   604F         JZ      ??miqFindAndRequestIndirectPacket_6
   \   000034   EA           MOV     A,R2
   \   000035   75F093       MOV     B,#-0x6d
   \   000038   A4           MUL     AB
   \   000039   24..         ADD     A,#(pMtxPacketPool & 0xff)
   \   00003B   FE           MOV     R6,A
   \   00003C   E5F0         MOV     A,B
   \   00003E   34..         ADDC    A,#((pMtxPacketPool >> 8) & 0xff)
   \   000040   FF           MOV     R7,A
   \   000041   8E82         MOV     DPL,R6
   \   000043   8F83         MOV     DPH,R7
   \   000045   A3           INC     DPTR
   \   000046   A3           INC     DPTR
   \   000047   A3           INC     DPTR
   \   000048   A3           INC     DPTR
   \   000049   E0           MOVX    A,@DPTR
   \   00004A   540C         ANL     A,#0xc
   \   00004C   65..         XRL     A,?V0 + 2
   \   00004E   70D3         JNZ     ??miqFindAndRequestIndirectPacket_5
   \   000050   EE           MOV     A,R6
   \   000051   2408         ADD     A,#0x8
   \   000053   FC           MOV     R4,A
   \   000054   EF           MOV     A,R7
   \   000055   3400         ADDC    A,#0x0
   \   000057   FD           MOV     R5,A
   \   000058   7408         MOV     A,#0x8
   \   00005A   65..         XRL     A,?V0 + 2
   \   00005C   70BB         JNZ     ??miqFindAndRequestIndirectPacket_3
   \   00005E   85..82       MOV     DPL,?V0 + 0
   \   000061   85..83       MOV     DPH,?V0 + 1
   \   000064   E0           MOVX    A,@DPTR
   \   000065   F8           MOV     R0,A
   \   000066   A3           INC     DPTR
   \   000067   E0           MOVX    A,@DPTR
   \   000068   F9           MOV     R1,A
   \   000069   8C82         MOV     DPL,R4
   \   00006B   8D83         MOV     DPH,R5
   \   00006D   E0           MOVX    A,@DPTR
   \   00006E   68           XRL     A,R0
   \   00006F   7003         JNZ     ??miqFindAndRequestIndirectPacket_7
   \   000071   A3           INC     DPTR
   \   000072   E0           MOVX    A,@DPTR
   \   000073   69           XRL     A,R1
   \                     ??miqFindAndRequestIndirectPacket_7:
   \   000074   70AD         JNZ     ??miqFindAndRequestIndirectPacket_5
   \                     ??miqFindAndRequestIndirectPacket_4:
   \   000076                ; Setup parameters for call to function miqSetRequested
   \   000076   7901         MOV     R1,#0x1
   \   000078   EE           MOV     A,R6
   \   000079   FA           MOV     R2,A
   \   00007A   EF           MOV     A,R7
   \   00007B   FB           MOV     R3,A
   \   00007C   12....       LCALL   miqSetRequested
   \   00007F   7901         MOV     R1,#0x1
   \   000081   8002         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:
   \   000083   7900         MOV     R1,#0x0
   \                     ??miqFindAndRequestIndirectPacket_8:
   \   000085   02....       LJMP    ?Subroutine1
    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          //-------------------------------------------------------------------------------------------------------

   \                                 In segment NEAR_CODE, align 1, keep-with-next
    345          ROOT void miqSetRequested(MAC_TX_PACKET *pPacket, BOOL requested) {
   \                     miqSetRequested:
   \   000000   74F2         MOV     A,#-0xe
   \   000002   12....       LCALL   ?FUNC_ENTER_XDATA
   \   000005                ; Saved register size: 14
   \   000005                ; Auto size: 0
    346          
    347              // Unrequested -> requested
    348              if (requested && !pPacket->requested) {
   \   000005   EA           MOV     A,R2
   \   000006   248B         ADD     A,#-0x75
   \   000008   F5..         MOV     ?V0 + 0,A
   \   00000A   EB           MOV     A,R3
   \   00000B   3400         ADDC    A,#0x0
   \   00000D   F5..         MOV     ?V0 + 1,A
   \   00000F   E9           MOV     A,R1
   \   000010   6058         JZ      ??miqSetRequested_0
   \   000012   85..82       MOV     DPL,?V0 + 0
   \   000015   85..83       MOV     DPH,?V0 + 1
   \   000018   E0           MOVX    A,@DPTR
   \   000019   704F         JNZ     ??miqSetRequested_0
    349                  if (pPacket->timeToLive > 0) {
   \   00001B   EA           MOV     A,R2
   \   00001C   2489         ADD     A,#-0x77
   \   00001E   F582         MOV     DPL,A
   \   000020   EB           MOV     A,R3
   \   000021   3400         ADDC    A,#0x0
   \   000023   F583         MOV     DPH,A
   \   000025   E0           MOVX    A,@DPTR
   \   000026   7002         JNZ     ??miqSetRequested_1
   \   000028   A3           INC     DPTR
   \   000029   E0           MOVX    A,@DPTR
   \                     ??miqSetRequested_1:
   \   00002A   605C         JZ      ??miqSetRequested_2
    350          
    351                      // Create the transmission whn the first packet is requested
    352                      if (miqInfo.requestedCounter == 0) {
   \   00002C   90....       MOV     DPTR,#(miqInfo + 2)
   \   00002F   E0           MOVX    A,@DPTR
   \   000030   7027         JNZ     ??miqSetRequested_3
    353                          if (mschAddTask(mschReserveTask(), MAC_TASK_PRI_LOW, miqTransmitRequestedPackets, NULL)) {
   \   000032                ; Setup parameters for call to function mschAddTask
   \   000032   75....       MOV     ?V0 + 4,#(miqTransmitRequestedPackets & 0xff)
   \   000035   75....       MOV     ?V0 + 5,#((miqTransmitRequestedPackets >> 8) & 0xff)
   \   000038   75....       MOV     ?V0 + 6,#((miqTransmitRequestedPackets >> 16) & 0xff)
   \   00003B   78..         MOV     R0,#?V0 + 4
   \   00003D   12....       LCALL   ?PUSH_XSTACK_I_THREE
   \   000040   7A00         MOV     R2,#0x0
   \   000042   EA           MOV     A,R2
   \   000043   C0E0         PUSH    A
   \   000045                ; Setup parameters for call to function mschReserveTask
   \   000045   12....       LCALL   mschReserveTask
   \   000048   E4           CLR     A
   \   000049   FC           MOV     R4,A
   \   00004A   FD           MOV     R5,A
   \   00004B   D0E0         POP     A
   \   00004D   FA           MOV     R2,A
   \   00

⌨️ 快捷键说明

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