📄 mac_indirect_polling.s51
字号:
ADD A,#0x3
MOV R1,A
MOV DPL,?V0 + 0
MOV DPH,?V0 + 1
INC DPTR
INC DPTR
MOVX @DPTR,A
// 158
// 159 // No further packet payload
// 160
// 161 // Calculate the packet duration (including ack. and FCS)
// 162 pPacket->duration = msupCalcPacketDuration(pPacket->length, pPacket->txOptions & TX_OPT_ACK_REQ);
; Setup parameters for call to function msupCalcPacketDuration
MOV A,?V0 + 0
ADD A,#-0x7f
MOV DPL,A
MOV A,?V0 + 1
ADDC A,#0x0
MOV DPH,A
MOVX A,@DPTR
MOV C,0xE0 /* A */.0
CLR A
MOV 0xE0 /* A */.0,C
MOV R2,A
LCALL msupCalcPacketDuration
MOV A,?V0 + 0
ADD A,#-0x7b
MOV DPL,A
MOV A,?V0 + 1
ADDC A,#0x0
MOV DPH,A
MOV A,R1
MOVX @DPTR,A
// 163
// 164 // Initiate the transmission
// 165 mschAddTask(taskNumber, MAC_TASK_PRI_LOW, mtxScheduleTransmission, (WORD) pPacket);
; Setup parameters for call to function mschAddTask
MOV ?V0 + 4,#(mtxScheduleTransmission & 0xff)
MOV ?V0 + 5,#((mtxScheduleTransmission >> 8) & 0xff)
MOV ?V0 + 6,#((mtxScheduleTransmission >> 16) & 0xff)
MOV R0,#?V0 + 4
LCALL ?PUSH_XSTACK_I_THREE
CFI CFA_XSP16 add(XSP16, 18)
MOV R4,?V0 + 0
MOV R5,?V0 + 1
MOV R2,#0x0
MOV R1,?V0 + 2
LCALL mschAddTask
MOV A,#0x3
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 15)
// 166
// 167 return SUCCESS;
MOV R1,#0x0
??mipTransmitDataRequest_3:
MOV R7,#0x8
LJMP ?FUNC_LEAVE_XDATA
CFI EndBlock cfiBlock2
// 168
// 169 } // mipTransmitDataRequest
// 170
// 171
// 172
// 173
// 174 /*******************************************************************************************************
// 175 *******************************************************************************************************
// 176 ************************** DATA REQUEST TIMEOUT **************************
// 177 *******************************************************************************************************
// 178 *******************************************************************************************************/
// 179
// 180
// 181
// 182
// 183 //-------------------------------------------------------------------------------------------------------
// 184 // void mipDataRequestTimeoutTask(MAC_TASK_INFO *pTask)
// 185 //
// 186 // DESCRIPTION:
// 187 // This task is run when no valid response has been received after a data request. The task makes
// 188 // the callback to the higher layer.
// 189 //
// 190 // TASK DATA:
// 191 // 0
// 192 //-------------------------------------------------------------------------------------------------------
// 193 void mipDataRequestTimeoutTask(MAC_TASK_INFO *pTask) NEAR {
// 194 MAC_STATE_TYPE oldState;
// 195
// 196 // The data request has failed, so stop listening
// 197 mrxDecrOnCounter();
// 198 oldState = macInfo.state;
// 199 macSetState(MAC_STATE_DEFAULT);
// 200
// 201 // Remove the task
// 202 mschRemoveTask(pTask->priority, 0);
// 203
// 204 // Notify the higher layer...
// 205 switch (oldState) {
// 206 case MAC_STATE_MANUAL_DATA_REQUEST_SENT: mlmePollConfirm(NO_DATA); break;
// 207 case MAC_STATE_ASSOC_DATA_REQUEST_SENT: mlmeAssociateConfirm(0xFFFF, NO_DATA); break;
// 208 default: break;
// 209 }
// 210
// 211 } // mipDataRequestTimeoutTask
// 212
// 213
// 214
// 215
// 216 //-------------------------------------------------------------------------------------------------------
// 217 // void mipDataRequestTimeout(void)
// 218 //
// 219 // DESCRIPTION:
// 220 // This timeout will occur when no response has been received after a data request.
// 221 //-------------------------------------------------------------------------------------------------------
// 222 void mipDataRequestTimeout(void) NEAR {
// 223 if (!mschAddTask(mschReserveTask(), MAC_TASK_PRI_HIGH, mipDataRequestTimeoutTask, 0)) {
// 224 mtimSetCallback(mipDataRequestTimeout, 10);
// 225 }
// 226 } // mipDataRequestTimeout
// 227
// 228
// 229
// 230
// 231 //-------------------------------------------------------------------------------------------------------
// 232 // MAC_STATE_TYPE mipCancelDataRequestTimeout(void)
// 233 //
// 234 // DESCRIPTION:
// 235 // Cancels the data request timeout. This function should be used when a valid or invalid "indirect
// 236 // packet" has been received. The MAC state is set back to the default state.
// 237 //
// 238 // RETURN VALUE:
// 239 // MAC_STATE_TYPE
// 240 // The MAC state before resetting it to MAC_STATE_DEFAULT
// 241 //-------------------------------------------------------------------------------------------------------
// 242 MAC_STATE_TYPE mipCancelDataRequestTimeout(void) NEAR {
// 243 MAC_STATE_TYPE macState = MAC_STATE_DEFAULT;
// 244
// 245 if (mtimCancelCallback(mipDataRequestTimeout)) {
// 246 mrxDecrOnCounter();
// 247 DISABLE_GLOBAL_INT();
// 248 macState = macInfo.state;
// 249 macSetState(MAC_STATE_DEFAULT);
// 250 ENABLE_GLOBAL_INT();
// 251 }
// 252 return macState;
// 253 } // mipCancelDataRequestTimeout
// 254
// 255
// 256
// 257
// 258 /*******************************************************************************************************
// 259 *******************************************************************************************************
// 260 ************************** ASSOCIATION RESPONSE POLLING **************************
// 261 *******************************************************************************************************
// 262 *******************************************************************************************************/
// 263
// 264
// 265
// 266
// 267 //-------------------------------------------------------------------------------------------------------
// 268 // MAC_ENUM mipTransmitAssocDataRequest(void)
// 269 //
// 270 // DESCRIPTION:
// 271 // Tranmits an the data request packet that follows a successful association request packet. This
// 272 // packet is transmitted when the data is indicated in the beacon pending list, or the response
// 273 // time has passed.
// 274 //
// 275 // RETURN VALUE:
// 276 // BOOL
// 277 // The association request was transmitted
// 278 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 279 ROOT MAC_ENUM mipTransmitAssocDataRequest(void) {
mipTransmitAssocDataRequest:
CFI Block cfiBlock3 Using cfiCommon0
CFI Function mipTransmitAssocDataRequest
FUNCALL mipTransmitAssocDataRequest, macSetState
LOCFRAME XSTACK, 8, STACK
ARGFRAME XSTACK, 8, STACK
FUNCALL mipTransmitAssocDataRequest, mipTransmitDataRequest
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
FUNCALL mipTransmitAssocDataRequest, mipTransmitDataRequest
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
MOV A,#-0x8
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 V0 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 8)
; Saved register size: 8
; Auto size: 0
// 280 BOOL securityEnable;
// 281
// 282 #if MAC_OPT_SECURITY
// 283 securityEnable = GET_MF(MF_SECURE_ASSOC);
// 284 #else
// 285 securityEnable = FALSE;
// 286 #endif
// 287
// 288 // Set automatic polling mode
// 289 if (!macSetState(MAC_STATE_TX_ASSOC_DATA_REQUEST)) return SUCCESS;
; Setup parameters for call to function macSetState
MOV R1,#0x12
LCALL macSetState
MOV A,R1
JNZ ??mipTransmitAssocDataRequest_0
MOV R1,#0x0
SJMP ??mipTransmitAssocDataRequest_1
// 290
// 291 // Transmit the data request
// 292 if (mpib.macCoordShortAddress < 0xFFFE) {
??mipTransmitAssocDataRequest_0:
MOV DPTR,#(mpib + 28)
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R3,A
MOV DPTR,#(mpib + 22)
CLR C
MOVX A,@DPTR
SUBB A,#-0x2
INC DPTR
MOVX A,@DPTR
SUBB A,#-0x1
MOV ?V0 + 0,#0x0
MOV R0,#?V0 + 0
JNC ??mipTransmitAssocDataRequest_2
// 293 return mipTransmitDataRequest(AM_SHORT_16, mpib.macPANId, (ADDRESS *) &mpib.macCoordShortAddress, securityEnable);
; Setup parameters for call to function mipTransmitDataRequest
LCALL ?PUSH_XSTACK_I_ONE
CFI CFA_XSP16 add(XSP16, 9)
MOV R4,#((mpib + 22) & 0xff)
MOV R5,#(((mpib + 22) >> 8) & 0xff)
MOV R1,#0x2
SJMP ??mipTransmitAssocDataRequest_3
CFI CFA_XSP16 add(XSP16, 8)
// 294 } else {
// 295 return mipTransmitDataRequest(AM_EXTENDED_64, mpib.macPANId, (ADDRESS *) mpib.pMacCoordExtendedAddress, securityEnable);
??mipTransmitAssocDataRequest_2:
; Setup parameters for call to function mipTransmitDataRequest
LCALL ?PUSH_XSTACK_I_ONE
CFI CFA_XSP16 add(XSP16, 9)
MOV R4,#((mpib + 14) & 0xff)
MOV R5,#(((mpib + 14) >> 8) & 0xff)
MOV R1,#0x3
??mipTransmitAssocDataRequest_3:
LCALL mipTransmitDataRequest
MOV A,#0x1
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 8)
??mipTransmitAssocDataRequest_1:
LJMP ?Subroutine0
CFI EndBlock cfiBlock3
// 296 }
// 297
// 298 } // mipTransmitAssocDataRequest
RSEG NEAR_CODE:CODE:NOROOT(0)
mipDataRequestTimeoutTask:
CFI Block cfiBlock4 Using cfiCommon1
CFI Function mipDataRequestTimeoutTask
FUNCALL mipDataRequestTimeoutTask, mrxDecrOnCounter
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
FUNCALL mipDataRequestTimeoutTask, macSetState
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
FUNCALL mipDataRequestTimeoutTask, mschRemoveTask
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
FUNCALL mipDataRequestTimeoutTask, mlmePollConfirm
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
FUNCALL mipDataRequestTimeoutTask, mlmeAssociateConfirm
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
MOV A,#-0x9
LCALL ?BANKED_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 9)
; Saved register size: 9
; Auto size: 0
MOV A,R2
MOV R6,A
MOV A,R3
MOV R7,A
; Setup parameters for call to function mrxDecrOnCounter
MOV DPTR,#(mrxDecrOnCounter & 0xffff)
MOV A,#((mrxDecrOnCounter >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV DPTR,#macInfo
MOVX A,@DPTR
MOV ?V0 + 0,A
; Setup parameters for call to function macSetState
MOV R1,#0x0
LCALL macSetState & 0xFFFF
; Setup parameters for call to function mschRemoveTask
MOV R2,#0x0
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R1,A
LCALL mschRemoveTask & 0xFFFF
MOV A,?V0 + 0
LCALL ?UC_SWITCH_DENSE
`?<Jumptable for mipDataRequestTimeoutTask>_0`:
DB 33
DB 1
DW ??mipDataRequestTimeoutTask_0
DW ??mipDataRequestTimeoutTask_1
DW ??mipDataRequestTimeoutTask_2
??mipDataRequestTimeoutTask_1:
; Setup parameters for call to function mlmePollConfirm
MOV R1,#-0x15
LCALL mlmePollConfirm & 0xFFFF
SJMP ??mipDataRequestTimeoutTask_0
??mipDataRequestTimeoutTask_2:
; Setup parameters for call to function mlmeAssociateConfirm
MOV R1,#-0x15
MOV R2,#-0x1
MOV R3,#-0x1
LCALL mlmeAssociateConfirm & 0xFFFF
CFI EndBlock cfiBlock4
??mipDataRequestTimeoutTask_0:
REQUIRE ?Subroutine1
; // Fall through to label ?Subroutine1
RSEG NEAR_CODE:CODE:NOROOT(0)
?Subroutine1:
CFI Block cfiBlock5 Using cfiCommon1
CFI NoFunction
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 9)
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
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(-9)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
MOV R7,#0x1
LJMP ?BANKED_LEAVE_XDATA
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -