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

📄 mac_scan.s51

📁 zigbee location examples
💻 S51
📖 第 1 页 / 共 5 页
字号:
//  122     // Store the command type
//  123     pPacket->commandType = CMD_BEACON_REQUEST;
        MOV	A,R6
        ADD	A,#-0x7d
        MOV	DPL,A
        MOV	A,R7
        ADDC	A,#0x0
        MOV	DPH,A
        MOV	A,#0x7
        MOVX	@DPTR,A
//  124 
//  125     // Calculate and set the total packet length
//  126     pPacket->length = pPacket->headerLength + CMD_BEACON_REQUEST_PAYLOAD_LENGTH + MAC_FCS_LENGTH;
        MOV	DPL,R6
        MOV	DPH,R7
        INC	DPTR
        MOVX	A,@DPTR
        ADD	A,#0x3
        MOV	R1,A
        MOV	DPL,R6
        MOV	DPH,R7
        INC	DPTR
        INC	DPTR
        MOVX	@DPTR,A
//  127 
//  128     // Calculate the packet duration (including ack. and IFS)
//  129     pPacket->duration = msupCalcPacketDuration(pPacket->length, FALSE);
        ; Setup parameters for call to function msupCalcPacketDuration
        MOV	R2,#0x0
        LCALL	msupCalcPacketDuration
        MOV	A,R6
        ADD	A,#-0x7b
        MOV	DPL,A
        MOV	A,R7
        ADDC	A,#0x0
        MOV	DPH,A
        MOV	A,R1
        MOVX	@DPTR,A
//  130 
//  131     // Initiate the transmission
//  132     mschAddTask(taskNumber, MAC_TASK_PRI_LOW, mtxScheduleTransmission, (WORD) pPacket);
        ; Setup parameters for call to function mschAddTask
        MOV	?V0 + 0,#(mtxScheduleTransmission & 0xff)
        MOV	?V0 + 1,#((mtxScheduleTransmission >> 8) & 0xff)
        MOV	?V0 + 2,#((mtxScheduleTransmission >> 16) & 0xff)
        MOV	R0,#?V0 + 0
        LCALL	?PUSH_XSTACK_I_THREE
        CFI CFA_XSP16 add(XSP16, 16)
        MOV	A,R6
        MOV	R4,A
        MOV	A,R7
        MOV	R5,A
        MOV	R2,#0x0
        MOV	R1,?V0 + 3
        LCALL	mschAddTask
        MOV	A,#0x3
        LCALL	?DEALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 13)
//  133 
//  134     return TRUE;
        MOV	R1,#0x1
??mscTransmitBeaconRequest_3:
        LJMP	?Subroutine0
        CFI EndBlock cfiBlock2
//  135 
//  136 } // mipTransmitDataRequest
//  137 
//  138 
//  139 
//  140 
//  141 //-------------------------------------------------------------------------------------------------------
//  142 //  BOOL mscTransmitOrphanNotification(void)
//  143 //
//  144 //  DESCRIPTION:
//  145 //      Transmits an orphan notification during orphan scan.
//  146 //
//  147 //  RETURN VALUE:
//  148 //      BOOL
//  149 //          The transmission was initiated
//  150 //-------------------------------------------------------------------------------------------------------

        RSEG NEAR_CODE:CODE:NOROOT(0)
//  151 ROOT BOOL mscTransmitOrphanNotification(void) {
mscTransmitOrphanNotification:
        CFI Block cfiBlock3 Using cfiCommon0
        CFI Function mscTransmitOrphanNotification
        FUNCALL mscTransmitOrphanNotification, mtxpReservePacket
        LOCFRAME XSTACK, 13, STACK
        ARGFRAME XSTACK, 13, STACK
        FUNCALL mscTransmitOrphanNotification, mschReserveTask
        LOCFRAME XSTACK, 13, STACK
        ARGFRAME XSTACK, 13, STACK
        FUNCALL mscTransmitOrphanNotification, mtxpReleasePacket
        LOCFRAME XSTACK, 13, STACK
        ARGFRAME XSTACK, 13, STACK
        FUNCALL mscTransmitOrphanNotification, msupPrepareHeader
        LOCFRAME XSTACK, 21, STACK
        ARGFRAME XSTACK, 21, STACK
        FUNCALL mscTransmitOrphanNotification, msupCalcPacketDuration
        LOCFRAME XSTACK, 13, STACK
        ARGFRAME XSTACK, 13, STACK
        FUNCALL mscTransmitOrphanNotification, mschAddTask
        LOCFRAME XSTACK, 16, STACK
        ARGFRAME XSTACK, 16, STACK
        MOV	A,#-0xb
        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 V3 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-11)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 11)
        ; Saved register size: 11
        ; Auto size: 2
        MOV	A,#-0x2
        LCALL	?ALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 13)
//  152     MAC_TX_PACKET   *pPacket;
//  153     UINT8 taskNumber;
//  154     WORD broadcast = 0xFFFF;
        MOV	DPL,?XSP + 0
        MOV	DPH,?XSP + 1
        MOV	A,#-0x1
        MOVX	@DPTR,A
        INC	DPTR
        MOVX	@DPTR,A
//  155 
//  156     // Try to reserve a packet
//  157     pPacket = mtxpReservePacket();
        ; Setup parameters for call to function mtxpReservePacket
        LCALL	mtxpReservePacket
        MOV	?V0 + 0,R2
        MOV	?V0 + 1,R3
        MOV	R6,?V0 + 0
        MOV	R7,?V0 + 1
//  158     if (!pPacket) return FALSE;
        MOV	A,R6
        JNZ	??mscTransmitOrphanNotification_0
        MOV	A,R7
??mscTransmitOrphanNotification_0:
        JNZ	??mscTransmitOrphanNotification_1
??mscTransmitOrphanNotification_2:
        MOV	R1,#0x0
        LJMP	??mscTransmitOrphanNotification_3
//  159 
//  160     // Try to reserve a transmission task
//  161     taskNumber = mschReserveTask();
??mscTransmitOrphanNotification_1:
        ; Setup parameters for call to function mschReserveTask
        LCALL	mschReserveTask
        MOV	A,R1
        MOV	?V0 + 3,A
//  162     if (taskNumber == NO_TASK) {
        MOV	A,#-0x1
        XRL	A,?V0 + 3
        JNZ	??mscTransmitOrphanNotification_4
//  163         mtxpReleasePacket(pPacket);
        ; Setup parameters for call to function mtxpReleasePacket
        MOV	A,R6
        MOV	R2,A
        MOV	A,R7
        MOV	R3,A
        LCALL	mtxpReleasePacket
//  164         return FALSE;
        SJMP	??mscTransmitOrphanNotification_2
//  165     }
//  166 
//  167     // TX mode
//  168     pPacket->txMode = MTX_MODE_USE_CSMACA_BM | MTX_MODE_FORCE_UNSLOTTED_BM | MTX_MODE_SCAN_RELATED_BM;
??mscTransmitOrphanNotification_4:
        MOV	A,R6
        ADD	A,#-0x7a
        MOV	DPL,A
        MOV	A,R7
        ADDC	A,#0x0
        MOV	DPH,A
        MOV	A,#0xb
        MOVX	@DPTR,A
//  169     pPacket->retriesLeft = aMaxFrameRetries;
        MOV	A,R6
        ADD	A,#-0x6f
        MOV	DPL,A
        MOV	A,R7
        ADDC	A,#0x0
        MOV	DPH,A
        MOV	A,#0x3
        MOVX	@DPTR,A
//  170 
//  171     // Generate the packet header
//  172     msupPrepareHeader(pPacket, FT_MAC_COMMAND, DEST_ADDR_SHORT | SRC_ADDR_EXT, broadcast, (ADDRESS   *) &aExtendedAddress, broadcast, (ADDRESS   *) &broadcast, TX_OPT_NONE);
        ; Setup parameters for call to function msupPrepareHeader
        MOV	DPL,?XSP + 0
        MOV	DPH,?XSP + 1
        MOV	?V0 + 0,DPL
        MOV	?V0 + 1,DPH
        MOV	R0,#?V0 + 0
        LCALL	?PUSH_XSTACK_I_TWO
        CFI CFA_XSP16 add(XSP16, 15)
        MOV	A,#0x2
        LCALL	?XSTACK_DISP0_8
        LCALL	?PUSH_XSTACK8_X_TWO
        CFI CFA_XSP16 add(XSP16, 17)
        MOV	?V0 + 0,#(aExtendedAddress & 0xff)
        MOV	?V0 + 1,#((aExtendedAddress >> 8) & 0xff)
        MOV	R0,#?V0 + 0
        LCALL	?PUSH_XSTACK_I_TWO
        CFI CFA_XSP16 add(XSP16, 19)
        MOV	A,#0x6
        LCALL	?XSTACK_DISP0_8
        LCALL	?PUSH_XSTACK8_X_TWO
        CFI CFA_XSP16 add(XSP16, 21)
        MOV	R5,#0x0
        MOV	R4,#-0x38
        MOV	R1,#0x3
        MOV	A,R6
        MOV	R2,A
        MOV	A,R7
        MOV	R3,A
        LCALL	msupPrepareHeader
        MOV	A,#0x8
        LCALL	?DEALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 13)
//  173 
//  174     // Generate the packet payload
//  175     pPacket->pPayload[0] = CMD_ORPHAN_NOTIFICATION;
        MOV	A,R6
        ADD	A,#0x1a
        MOV	DPL,A
        MOV	A,R7
        ADDC	A,#0x0
        MOV	DPH,A
        MOV	A,#0x6
        MOVX	@DPTR,A
//  176 
//  177     // Store the command type
//  178     pPacket->commandType = CMD_ORPHAN_NOTIFICATION;
        MOV	A,R6
        ADD	A,#-0x7d
        MOV	DPL,A
        MOV	A,R7
        ADDC	A,#0x0
        MOV	DPH,A
        MOV	A,#0x6
        MOVX	@DPTR,A
//  179 
//  180     // Calculate and set the total packet length
//  181     pPacket->length = pPacket->headerLength + CMD_ORPHAN_NOTIFICATION_PAYLOAD_LENGTH + MAC_FCS_LENGTH;
        MOV	DPL,R6
        MOV	DPH,R7
        INC	DPTR
        MOVX	A,@DPTR
        ADD	A,#0x3
        MOV	R1,A
        MOV	DPL,R6
        MOV	DPH,R7
        INC	DPTR
        INC	DPTR
        MOVX	@DPTR,A
//  182 
//  183     // Calculate the packet duration (including ack. and IFS)
//  184     pPacket->duration = msupCalcPacketDuration(pPacket->length, FALSE);
        ; Setup parameters for call to function msupCalcPacketDuration
        MOV	R2,#0x0
        LCALL	msupCalcPacketDuration
        MOV	A,R6
        ADD	A,#-0x7b
        MOV	DPL,A
        MOV	A,R7
        ADDC	A,#0x0
        MOV	DPH,A
        MOV	A,R1
        MOVX	@DPTR,A
//  185 
//  186     // Initiate the transmission
//  187     mschAddTask(taskNumber, MAC_TASK_PRI_LOW, mtxScheduleTransmission, (WORD) pPacket);
        ; Setup parameters for call to function mschAddTask
        MOV	?V0 + 0,#(mtxScheduleTransmission & 0xff)
        MOV	?V0 + 1,#((mtxScheduleTransmission >> 8) & 0xff)
        MOV	?V0 + 2,#((mtxScheduleTransmission >> 16) & 0xff)
        MOV	R0,#?V0 + 0
        LCALL	?PUSH_XSTACK_I_THREE
        CFI CFA_XSP16 add(XSP16, 16)
        MOV	A,R6
        MOV	R4,A
        MOV	A,R7
        MOV	R5,A
        MOV	R2,#0x0
        MOV	R1,?V0 + 3
        LCALL	mschAddTask
        MOV	A,#0x3
        LCALL	?DEALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 13)
//  188 
//  189     return TRUE;
        MOV	R1,#0x1
??mscTransmitOrphanNotification_3:
        LJMP	?Subroutine0
        CFI EndBlock cfiBlock3
//  190 
//  191 } // mscTransmitOrphanNotification
//  192 
//  193 
//  194 
//  195 
//  196 /*******************************************************************************************************
//  197  *******************************************************************************************************
//  198  **************************        CHANNEL SCANNING + SUPPORT FUNCTIONS       **************************
//  199  *******************************************************************************************************
//  200  *******************************************************************************************************/
//  201 
//  202 
//  203 
//  204 
//  205 //-------------------------------------------------------------------------------------------------------
//  206 //  BOOL mscPanDescriptorExists(PAN_DESCRIPTOR *pPanDescriptor)
//  207 //
//  208 //  DESCRIPTION:
//  209 //      Used by a scanning device (active or passive scan) to determine whether or not the PAN descriptor
//  210 //      from a received beacon already exists in the scan result list. The function returns TRUE if
//  211 //      there's a match on coordinator PAN ID + address, and the logical channel.
//  212 //
//  213 //  ARGUMENTS:
//  214 //      PAN_DESCRIPTOR *pPanDescriptor
//  215 //          A pointer to the new PAN descriptor
//  216 //
//  217 //  RETURN VALUE:
//  218 //      BOOL
//  219 //          The PAN descriptor pointed to by pPanDescriptor already exists in the result list.
//  220 //-------------------------------------------------------------------------------------------------------

        RSEG NEAR_CODE:CODE:NOROOT(0)
//  221 ROOT BOOL mscPanDescriptorExists(PAN_DESCRIPTOR   *pPanDescriptor) {
mscPanDescriptorExists:
        CFI Block cfiBlock4 Using cfiCommon0
        CFI Function mscPanDescriptorExists
        FUNCALL mscPanDescriptorExists, msupCompareExtendedAddress
        LOCFRAME XSTACK, 11, STACK
        ARGFRAME XSTACK, 11, STACK
        MOV	A,#-0xb
        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 V3 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-9)))

⌨️ 快捷键说明

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