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

📄 mac_scan.s51

📁 zigbee location examples
💻 S51
📖 第 1 页 / 共 5 页
字号:
//   30 //-------------------------------------------------------------------------------------------------------
//   31 
//   32 
//   33 
//   34 
//   35 /*******************************************************************************************************
//   36  *******************************************************************************************************
//   37  **************************         SCAN-RELATED PACKET TRANSMISSIONS         **************************
//   38  *******************************************************************************************************
//   39  *******************************************************************************************************/
//   40 
//   41 
//   42 
//   43 
//   44 //-------------------------------------------------------------------------------------------------------
//   45 //  BOOL mscTransmitBeacon(void)
//   46 //
//   47 //  DESCRIPTION:
//   48 //      Used by a coordinator in a non-beacon network to transmit a single beacon upon a beacon request.
//   49 //      Unlike the beacon transmission in mac_beacon_handler.c, this beacon is transmitted as a regular
//   50 //      packet, and does not involve timing adjustments, etc.
//   51 //
//   52 //  RETURN VALUE:
//   53 //      BOOL
//   54 //          The transmission was initiated
//   55 //-------------------------------------------------------------------------------------------------------
//   56 #if MAC_OPT_FFD

        RSEG NEAR_CODE:CODE:NOROOT(0)
//   57 ROOT BOOL mscTransmitBeacon(void) {
mscTransmitBeacon:
        CFI Block cfiBlock0 Using cfiCommon0
        CFI Function mscTransmitBeacon
        FUNCALL mscTransmitBeacon, mtxpReservePacket
        LOCFRAME XSTACK, 11, STACK
        ARGFRAME XSTACK, 11, STACK
        FUNCALL mscTransmitBeacon, mschReserveTask
        LOCFRAME XSTACK, 11, STACK
        ARGFRAME XSTACK, 11, STACK
        FUNCALL mscTransmitBeacon, mtxpReleasePacket
        LOCFRAME XSTACK, 11, STACK
        ARGFRAME XSTACK, 11, STACK
        FUNCALL mscTransmitBeacon, mbcnPrepareBeacon
        LOCFRAME XSTACK, 11, STACK
        ARGFRAME XSTACK, 11, STACK
        FUNCALL mscTransmitBeacon, mschAddTask
        LOCFRAME XSTACK, 14, STACK
        ARGFRAME XSTACK, 14, 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: 0
//   58     MAC_TX_PACKET   *pPacket;
//   59     UINT8 taskNumber;
//   60 
//   61     // Try to reserve a packet
//   62     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
//   63     if (!pPacket) return FALSE;
        MOV	A,R6
        JNZ	??mscTransmitBeacon_0
        MOV	A,R7
??mscTransmitBeacon_0:
        JNZ	??mscTransmitBeacon_1
??mscTransmitBeacon_2:
        MOV	R1,#0x0
        SJMP	??mscTransmitBeacon_3
//   64 
//   65     // Try to reserve a transmission task
//   66     taskNumber = mschReserveTask();
??mscTransmitBeacon_1:
        ; Setup parameters for call to function mschReserveTask
        LCALL	mschReserveTask
        MOV	A,R1
        MOV	?V0 + 3,A
//   67     if (taskNumber == NO_TASK) {
        MOV	A,#-0x1
        XRL	A,?V0 + 3
        JNZ	??mscTransmitBeacon_4
//   68         mtxpReleasePacket(pPacket);
        ; Setup parameters for call to function mtxpReleasePacket
        MOV	A,R6
        MOV	R2,A
        MOV	A,R7
        MOV	R3,A
        LCALL	mtxpReleasePacket
//   69         return FALSE;
        SJMP	??mscTransmitBeacon_2
//   70     }
//   71 
//   72     // Prepare the packet structure
//   73     mbcnPrepareBeacon(pPacket);
??mscTransmitBeacon_4:
        ; Setup parameters for call to function mbcnPrepareBeacon
        MOV	A,R6
        MOV	R2,A
        MOV	A,R7
        MOV	R3,A
        MOV	DPTR,#(mbcnPrepareBeacon & 0xffff)
        MOV	A,#((mbcnPrepareBeacon >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//   74     pPacket->txMode = MTX_MODE_FORCE_UNSLOTTED_BM | MTX_MODE_USE_CSMACA_BM;
        MOV	A,R6
        ADD	A,#-0x7a
        MOV	DPL,A
        MOV	A,R7
        ADDC	A,#0x0
        MOV	DPH,A
        MOV	A,#0x3
        MOVX	@DPTR,A
//   75 
//   76     // Initiate the transmission
//   77     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, 14)
        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, 11)
//   78     return TRUE;
        MOV	R1,#0x1
??mscTransmitBeacon_3:
        SJMP	??Subroutine0_0
        CFI EndBlock cfiBlock0
//   79 
//   80 } // mscTransmitBeacon

        RSEG NEAR_CODE:CODE:NOROOT(0)
?Subroutine0:
        CFI Block cfiBlock1 Using cfiCommon0
        CFI NoFunction
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 13)
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-10)))
        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(-11)))
        CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-5)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI V3 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	A,#0x2
        LCALL	?DEALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 11)
??Subroutine0_0:
        MOV	R7,#0x4
        LJMP	?FUNC_LEAVE_XDATA
        CFI EndBlock cfiBlock1
//   81 #endif
//   82 
//   83 
//   84 
//   85 
//   86 //-------------------------------------------------------------------------------------------------------
//   87 //  BOOL mscTransmitBeaconRequest(void)
//   88 //
//   89 //  DESCRIPTION:
//   90 //      Transmits a beacon request during active scan.
//   91 //
//   92 //  RETURN VALUE:
//   93 //      BOOL
//   94 //          The transmission was initiated
//   95 //-------------------------------------------------------------------------------------------------------

        RSEG NEAR_CODE:CODE:NOROOT(0)
//   96 ROOT BOOL mscTransmitBeaconRequest(void) {
mscTransmitBeaconRequest:
        CFI Block cfiBlock2 Using cfiCommon0
        CFI Function mscTransmitBeaconRequest
        FUNCALL mscTransmitBeaconRequest, mtxpReservePacket
        LOCFRAME XSTACK, 13, STACK
        ARGFRAME XSTACK, 13, STACK
        FUNCALL mscTransmitBeaconRequest, mschReserveTask
        LOCFRAME XSTACK, 13, STACK
        ARGFRAME XSTACK, 13, STACK
        FUNCALL mscTransmitBeaconRequest, mtxpReleasePacket
        LOCFRAME XSTACK, 13, STACK
        ARGFRAME XSTACK, 13, STACK
        FUNCALL mscTransmitBeaconRequest, msupPrepareHeader
        LOCFRAME XSTACK, 21, STACK
        ARGFRAME XSTACK, 21, STACK
        FUNCALL mscTransmitBeaconRequest, msupCalcPacketDuration
        LOCFRAME XSTACK, 13, STACK
        ARGFRAME XSTACK, 13, STACK
        FUNCALL mscTransmitBeaconRequest, 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)
//   97     MAC_TX_PACKET   *pPacket;
//   98     UINT8 taskNumber;
//   99     WORD broadcast = 0xFFFF;
        MOV	DPL,?XSP + 0
        MOV	DPH,?XSP + 1
        MOV	A,#-0x1
        MOVX	@DPTR,A
        INC	DPTR
        MOVX	@DPTR,A
//  100 
//  101     // Try to reserve a packet
//  102     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
//  103     if (!pPacket) return FALSE;
        MOV	A,R6
        JNZ	??mscTransmitBeaconRequest_0
        MOV	A,R7
??mscTransmitBeaconRequest_0:
        JNZ	??mscTransmitBeaconRequest_1
??mscTransmitBeaconRequest_2:
        MOV	R1,#0x0
        LJMP	??mscTransmitBeaconRequest_3
//  104 
//  105     // Try to reserve a transmission task
//  106     taskNumber = mschReserveTask();
??mscTransmitBeaconRequest_1:
        ; Setup parameters for call to function mschReserveTask
        LCALL	mschReserveTask
        MOV	A,R1
        MOV	?V0 + 3,A
//  107     if (taskNumber == NO_TASK) {
        MOV	A,#-0x1
        XRL	A,?V0 + 3
        JNZ	??mscTransmitBeaconRequest_4
//  108         mtxpReleasePacket(pPacket);
        ; Setup parameters for call to function mtxpReleasePacket
        MOV	A,R6
        MOV	R2,A
        MOV	A,R7
        MOV	R3,A
        LCALL	mtxpReleasePacket
//  109         return FALSE;
        SJMP	??mscTransmitBeaconRequest_2
//  110     }
//  111 
//  112     // TX mode
//  113     pPacket->txMode = MTX_MODE_USE_CSMACA_BM | MTX_MODE_SCAN_RELATED_BM;
??mscTransmitBeaconRequest_4:
        MOV	A,R6
        ADD	A,#-0x7a
        MOV	DPL,A
        MOV	A,R7
        ADDC	A,#0x0
        MOV	DPH,A
        MOV	A,#0x9
        MOVX	@DPTR,A
//  114     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
//  115 
//  116     // Generate the packet header
//  117     msupPrepareHeader(pPacket, FT_MAC_COMMAND, DEST_ADDR_SHORT, broadcast, (ADDRESS   *) &broadcast, 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	A,#0x4
        LCALL	?XSTACK_DISP0_8
        MOV	?V0 + 0,DPL
        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,#0x8
        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)
//  118 
//  119     // Generate the packet payload
//  120     pPacket->pPayload[0] = CMD_BEACON_REQUEST;
        MOV	A,R6
        ADD	A,#0x1a
        MOV	DPL,A
        MOV	A,R7
        ADDC	A,#0x0
        MOV	DPH,A
        MOV	A,#0x7
        MOVX	@DPTR,A

⌨️ 快捷键说明

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