📄 mac_scan.s51
字号:
// 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 + -