📄 mac_tx_engine.s51
字号:
CFI CFA_XSP16 add(XSP16, 15)
MOV A,R6
MOV R1,A
MOV DPL,R2
MOV DPH,R3
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R3,A
LCALL mlmeCommStatusIndication
MOV A,#0x4
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 11)
// 98
// 99 } // mtxCommStatusIndication
MOV R7,#0x4
LJMP ?FUNC_LEAVE_XDATA
CFI EndBlock cfiBlock0
// 100
// 101 //-------------------------------------------------------------------------------------------------------
// 102 // void mtxFinishTransmission(MAC_ENUM status, MAC_TX_PACKET *pPacket, MAC_TASK_INFO *pTask)
// 103 //
// 104 // DESCRIPTION:
// 105 // This function is used to avoid code duplication when finishing a packet transmission (using the
// 106 // TX engine. This function is called by mtxScheduleTransmission(...) as the last step of the
// 107 // transmission procedure.
// 108 //
// 109 // This function handles failures for all transmission types, and success for all data, and some
// 110 // MAC commands. The other MAC commands are handled by the RX engine.
// 111 //
// 112 // PARAMETERS:
// 113 // MAC_ENUM status
// 114 // The result of the transmission (SUCCESS, CHANNEL_ACCESS_FAILURE, etc.)
// 115 // MAC_TX_PACKET *pPacket
// 116 // A pointer to the packet that was transmitted
// 117 // MAC_TASK_INFO *pTask
// 118 // A pointer to the task running mtxScheduleTransmission(...)
// 119 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 120 ROOT void mtxFinishTransmission(MAC_ENUM status, MAC_TX_PACKET *pPacket, MAC_TASK_INFO *pTask) {
mtxFinishTransmission:
CFI Block cfiBlock1 Using cfiCommon0
CFI Function mtxFinishTransmission
FUNCALL mtxFinishTransmission, mcpsDataConfirm
LOCFRAME XSTACK, 17, STACK
ARGFRAME XSTACK, 17, STACK
FUNCALL mtxFinishTransmission, macSetState
LOCFRAME XSTACK, 17, STACK
ARGFRAME XSTACK, 17, STACK
FUNCALL mtxFinishTransmission, mlmeAssociateConfirm
LOCFRAME XSTACK, 17, STACK
ARGFRAME XSTACK, 17, STACK
FUNCALL mtxFinishTransmission, mlmeDisassociateConfirm
LOCFRAME XSTACK, 17, STACK
ARGFRAME XSTACK, 17, STACK
FUNCALL mtxFinishTransmission, macSetState
LOCFRAME XSTACK, 17, STACK
ARGFRAME XSTACK, 17, STACK
FUNCALL mtxFinishTransmission, mlmePollConfirm
LOCFRAME XSTACK, 17, STACK
ARGFRAME XSTACK, 17, STACK
FUNCALL mtxFinishTransmission, mlmeAssociateConfirm
LOCFRAME XSTACK, 17, STACK
ARGFRAME XSTACK, 17, STACK
FUNCALL mtxFinishTransmission, mtimSetCallback
LOCFRAME XSTACK, 21, STACK
ARGFRAME XSTACK, 21, STACK
FUNCALL mtxFinishTransmission, mtimSetCallback
LOCFRAME XSTACK, 21, STACK
ARGFRAME XSTACK, 21, STACK
FUNCALL mtxFinishTransmission, mtxCommStatusIndication
LOCFRAME XSTACK, 17, STACK
ARGFRAME XSTACK, 17, STACK
FUNCALL mtxFinishTransmission, miqSetRequested
LOCFRAME XSTACK, 17, STACK
ARGFRAME XSTACK, 17, STACK
FUNCALL mtxFinishTransmission, mschRemoveTask
LOCFRAME XSTACK, 17, STACK
ARGFRAME XSTACK, 17, STACK
FUNCALL mtxFinishTransmission, mschAddTask
LOCFRAME XSTACK, 20, STACK
ARGFRAME XSTACK, 20, STACK
FUNCALL mtxFinishTransmission, mschRemoveTask
LOCFRAME XSTACK, 17, STACK
ARGFRAME XSTACK, 17, STACK
FUNCALL mtxFinishTransmission, mtxpReleasePacket
LOCFRAME XSTACK, 17, STACK
ARGFRAME XSTACK, 17, STACK
MOV A,#-0xf
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 V7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V6 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-14)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-15)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 15)
; Saved register size: 15
; Auto size: 2
MOV A,#-0x2
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 17)
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV A,R4
MOVX @DPTR,A
INC DPTR
MOV A,R5
MOVX @DPTR,A
MOV ?V0 + 0,R1
MOV A,R2
MOV R6,A
MOV A,R3
MOV R7,A
// 121 BOOL isMacInternal;
// 122 BOOL handleCmdSuccess;
// 123 MAC_STATE_TYPE macState;
// 124
// 125 // Copy some variables from the packet structure, since we'll release the packet before we make the call to
// 126 // the higher layer
// 127 isMacInternal = pPacket->txMode & MTX_MODE_MAC_INTERNAL_BM;
MOV A,R6
ADD A,#-0x7a
MOV DPL,A
MOV A,R7
ADDC A,#0x0
MOV DPH,A
MOVX A,@DPTR
ANL A,#0x4
MOV R2,A
// 128 handleCmdSuccess = (pPacket->txMode & MTX_MODE_SCAN_RELATED_BM) ||
// 129 (pPacket->commandType == CMD_ASSOCIATION_RESPONSE) ||
// 130 (pPacket->commandType == CMD_DISASSOCIATION_NOTIFICATION) ||
// 131 (pPacket->commandType == CMD_COORDINATOR_REALIGNMENT);
MOV A,R6
ADD A,#-0x7d
MOV R0,A
MOV A,R7
ADDC A,#0x0
MOV R1,A
MOVX A,@DPTR
MOV C,0xE0 /* A */.3
JC ??mtxFinishTransmission_0
MOV DPL,R0
MOV DPH,R1
MOVX A,@DPTR
MOV R3,A
MOV A,#0x2
XRL A,R3
JZ ??mtxFinishTransmission_0
MOV A,#0x3
XRL A,R3
JZ ??mtxFinishTransmission_0
MOV A,#0x8
XRL A,R3
JNZ ??mtxFinishTransmission_1
??mtxFinishTransmission_0:
MOV R3,#0x1
SJMP ??mtxFinishTransmission_2
??mtxFinishTransmission_1:
MOV R3,#0x0
// 132
// 133 mtxInfo.status = MTX_STATUS_FINISHED;
??mtxFinishTransmission_2:
MOV A,#0x7
MOV DPTR,#(mtxInfo + 4)
MOVX @DPTR,A
// 134
// 135 // Make the call to the higher layer
// 136 switch (pPacket->type) {
MOV A,R6
ADD A,#-0x80
MOV DPL,A
MOV A,R7
ADDC A,#0x0
MOV DPH,A
MOVX A,@DPTR
LCALL ?UC_SWITCH_DENSE
`?<Jumptable for mtxFinishTransmission>_0`:
DB 1
DB 2
DW ??mtxFinishTransmission_3
DW ??mtxFinishTransmission_4
DW ??mtxFinishTransmission_3
DW ??mtxFinishTransmission_5
// 137 case FT_DATA:
// 138 if (!isMacInternal) mcpsDataConfirm(status, pPacket->msduHandle);
??mtxFinishTransmission_4:
MOV A,R2
JZ $+5
LJMP ??mtxFinishTransmission_3
; Setup parameters for call to function mcpsDataConfirm
MOV A,R6
ADD A,#-0x7e
MOV DPL,A
MOV A,R7
ADDC A,#0x0
MOV DPH,A
MOVX A,@DPTR
MOV R2,A
MOV R1,?V0 + 0
LCALL mcpsDataConfirm
LJMP ??mtxFinishTransmission_3
// 139 break;
// 140 case FT_MAC_COMMAND:
// 141
// 142 // SUCCESS is usually handled by the RX engine or not at all
// 143 if ((status == SUCCESS) && !handleCmdSuccess) break;
??mtxFinishTransmission_5:
MOV A,?V0 + 0
JNZ ??mtxFinishTransmission_6
MOV A,R3
JNZ $+5
LJMP ??mtxFinishTransmission_3
// 144
// 145 switch (pPacket->commandType) {
??mtxFinishTransmission_6:
MOV DPL,R0
MOV DPH,R1
MOVX A,@DPTR
LCALL ?UC_SWITCH_DENSE
`?<Jumptable for mtxFinishTransmission>_1`:
DB 1
DB 7
DW ??mtxFinishTransmission_3
DW ??mtxFinishTransmission_7
DW ??mtxFinishTransmission_8
DW ??mtxFinishTransmission_9
DW ??mtxFinishTransmission_10
DW ??mtxFinishTransmission_3
DW ??mtxFinishTransmission_11
DW ??mtxFinishTransmission_12
DW ??mtxFinishTransmission_8
// 146 case CMD_ASSOCIATION_REQUEST:
// 147 macSetState(MAC_STATE_DEFAULT);
??mtxFinishTransmission_7:
; Setup parameters for call to function macSetState
MOV R1,#0x0
LCALL macSetState
// 148 mlmeAssociateConfirm(0xFFFF, status);
; Setup parameters for call to function mlmeAssociateConfirm
??mtxFinishTransmission_13:
MOV R1,?V0 + 0
MOV R2,#-0x1
MOV R3,#-0x1
LCALL mlmeAssociateConfirm
SJMP ??mtxFinishTransmission_3
// 149 break;
// 150 case CMD_DISASSOCIATION_NOTIFICATION:
// 151 mlmeDisassociateConfirm(status);
??mtxFinishTransmission_9:
; Setup parameters for call to function mlmeDisassociateConfirm
MOV R1,?V0 + 0
LCALL mlmeDisassociateConfirm
SJMP ??mtxFinishTransmission_3
// 152 break;
// 153 case CMD_DATA_REQUEST:
// 154 macState = macInfo.state;
??mtxFinishTransmission_10:
MOV DPTR,#macInfo
MOVX A,@DPTR
MOV ?V0 + 1,A
// 155 macSetState(MAC_STATE_DEFAULT);
; Setup parameters for call to function macSetState
MOV R1,#0x0
LCALL macSetState
// 156 switch (macState) {
MOV A,?V0 + 1
LCALL ?UC_SWITCH_DENSE
`?<Jumptable for mtxFinishTransmission>_2`:
DB 17
DB 1
DW ??mtxFinishTransmission_3
DW ??mtxFinishTransmission_14
DW ??mtxFinishTransmission_13
// 157 case MAC_STATE_TX_MANUAL_DATA_REQUEST: mlmePollConfirm(status); break;
??mtxFinishTransmission_14:
; Setup parameters for call to function mlmePollConfirm
MOV R1,?V0 + 0
LCALL mlmePollConfirm
SJMP ??mtxFinishTransmission_3
// 158 case MAC_STATE_TX_ASSOC_DATA_REQUEST: mlmeAssociateConfirm(0xFFFF, status); break;
// 159 default: break;
// 160 }
// 161 break;
// 162 case CMD_BEACON_REQUEST:
// 163 mtimSetCallback(mscChannelTimeout, ((UINT32) aBaseSuperframeDuration / (UINT32) aUnitBackoffPeriod) * (((UINT32) 1 << mscInfo.scanDuration) + 1));
??mtxFinishTransmission_12:
; Setup parameters for call to function mtimSetCallback
MOV ?V0 + 4,#0x1
MOV ?V0 + 5,#0x0
MOV ?V0 + 6,#0x0
MOV ?V0 + 7,#0x0
MOV DPTR,#(mscInfo + 5)
MOVX A,@DPTR
MOV R0,#?V0 + 4
LCALL ?L_SHL
MOV DPTR,#__Constant_1
MOV R0,#?V0 + 4
LCALL ?L_ADD_X
MOV DPTR,#__Constant_30
MOV R0,#?V0 + 0
LCALL ?L_MOV_X
MOV R0,#?V0 + 4
MOV R1,#?V0 + 0
LCALL ?L_MUL
MOV R0,#?V0 + 4
LCALL ?PUSH_XSTACK_I_FOUR
CFI CFA_XSP16 add(XSP16, 21)
??mtxFinishTransmission_15:
MOV R1,#(mscChannelTimeout & 0xff)
MOV R2,#((mscChannelTimeout >> 8) & 0xff)
MOV R3,#((mscChannelTimeout >> 16) & 0xff)
LCALL mtimSetCallback
MOV A,#0x4
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 17)
SJMP ??mtxFinishTransmission_3
// 164 break;
// 165 case CMD_PAN_ID_CONFLICT_NOTIFICATION:
// 166 break;
// 167 case CMD_ORPHAN_NOTIFICATION:
// 168 mtimSetCallback(mscChannelTimeout, (UINT32) aResponseWaitTime / (UINT32) aUnitBackoffPeriod);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -