📄 mac_beacon_handler.s51
字号:
JNZ ??mbcnTxPeriodicalBeaconTask_11
MOV R1,#(mrxDecrOnCounter & 0xff)
MOV R2,#((mrxDecrOnCounter >> 8) & 0xff)
MOV R3,#((mrxDecrOnCounter >> 16) & 0xff)
SJMP ??mbcnTxPeriodicalBeaconTask_12
??mbcnTxPeriodicalBeaconTask_11:
MOV R1,#(mrxForceRxOff & 0xff)
MOV R2,#((mrxForceRxOff >> 8) & 0xff)
MOV R3,#((mrxForceRxOff >> 16) & 0xff)
??mbcnTxPeriodicalBeaconTask_12:
; Setup parameters for call to function mtimSetCallback
MOV DPTR,#__Constant_4
MOV R0,#?V0 + 0
LCALL ?L_ADD_X
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_FOUR
CFI CFA_XSP16 add(XSP16, 26)
??mbcnTxPeriodicalBeaconTask_10:
LCALL mtimSetCallback & 0xFFFF
MOV A,#0x4
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 22)
// 232 }
// 233 }
// 234 }
// 235
// 236 // Transform this task into an mtxStartTransmission()
// 237 pTask->state = MTX_STATE_PREPARE_PACKET;
??mbcnTxPeriodicalBeaconTask_8:
MOV A,#0x4
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV DPH,A
MOV DPL,R0
CLR A
MOVX @DPTR,A
// 238 pTask->taskData = (WORD) pPacket;
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV DPH,A
MOV DPL,R2
INC DPTR
INC DPTR
INC DPTR
MOV A,R0
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
// 239 pTask->pTaskFunc = mtxStartTransmission;
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV DPH,A
MOV DPL,R0
MOV A,#(mtxStartTransmission & 0xff)
MOVX @DPTR,A
INC DPTR
MOV A,#((mtxStartTransmission >> 8) & 0xff)
MOVX @DPTR,A
INC DPTR
MOV A,#((mtxStartTransmission >> 16) & 0xff)
MOVX @DPTR,A
// 240 mtxInfo.beaconTransmissionInProgress = TRUE;
MOV A,#0x1
MOV DPTR,#(mtxInfo + 11)
MOVX @DPTR,A
// 241 mtxInfo.cspTimeout = CSP_TIMEOUT_RUN_FOREVER;
MOV A,#-0x1
MOV DPTR,#(mtxInfo + 10)
LJMP ??mbcnTxPeriodicalBeaconTask_5
// 242
// 243 // Disaster :(
// 244 // The prepare time was too short!!! (DEBUG: Add a breakpoint here if beacons are missing)
// 245 } else if (T2_GET_OVERFLOW_COUNTER() > oldBeaconInterval) {
??mbcnTxPeriodicalBeaconTask_6:
; Setup parameters for call to function T2_GET_OVERFLOW_COUNTER
MOV DPTR,#(T2_GET_OVERFLOW_COUNTER & 0xffff)
MOV A,#((T2_GET_OVERFLOW_COUNTER >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV ?V0 + 0,R2
MOV ?V0 + 1,R3
MOV ?V0 + 2,R4
MOV ?V0 + 3,R5
MOV DPTR,#??oldBeaconInterval
MOV R0,#?V0 + 0
LCALL ?UL_GT_X
JNC ??mbcnTxPeriodicalBeaconTask_0
// 246
// 247 // Schedule backoff slot counter reset (which in turn schedules the next mbcnTxPeriodicalBeacon)
// 248 mtimSetCallback(mtxResetBosCounter, MBCN_TX_STARTUP_OVERHEAD);
; Setup parameters for call to function mtimSetCallback
MOV DPTR,#__Constant_4
LCALL ?PUSH_XSTACK8_X_FOUR
CFI CFA_XSP16 add(XSP16, 26)
MOV R1,#(mtxResetBosCounter & 0xff)
MOV R2,#((mtxResetBosCounter >> 8) & 0xff)
MOV R3,#((mtxResetBosCounter >> 16) & 0xff)
LCALL mtimSetCallback & 0xFFFF
MOV A,#0x4
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 22)
// 249
// 250 // Don't transmit the beacon
// 251 mschRemoveTask(pTask->priority, MSCH_KEEP_TASK_RESERVED_BM | MSCH_KEEP_TASK_IN_PROGRESS_BM);
; Setup parameters for call to function mschRemoveTask
??mbcnTxPeriodicalBeaconTask_4:
MOV R2,#0x3
MOV DPL,R6
MOV DPH,R7
MOVX A,@DPTR
MOV R1,A
LCALL mschRemoveTask & 0xFFFF
// 252 }
// 253 break;
// 254 }
// 255
// 256 } // mbcnTxPeriodicalBeaconTask
??mbcnTxPeriodicalBeaconTask_0:
MOV A,#0x6
LJMP ?Subroutine1
CFI EndBlock cfiBlock6
RSEG XDATA_Z:XDATA:NOROOT(0)
REQUIRE __INIT_XDATA_Z
??oldBeaconInterval:
DS 4
// 257
// 258
// 259
// 260
// 261 //-------------------------------------------------------------------------------------------------------
// 262 // void mbcnPrepareCoordinatorRealignment(MAC_TX_PACKET *pPacket, ADDRESS *pDestAddr, WORD ...)
// 263 //
// 264 // DESCRIPTION:
// 265 // This function prepares a coordinator realignment frame. If the pDestAddr argument points to an
// 266 // extended address, the packet will be transmitted to a single device (doing orphan scanning). If
// 267 // NULL, the packet will be broadcasted to all devices.
// 268 //
// 269 // ARGUMENTS:
// 270 // MAC_TX_PACKET *pPacket
// 271 // A pointer to the packet to be transmitted
// 272 // ADDRESS *pDestAddr
// 273 // A pointer to the extended address of a specific device (mlmeOrphanResponse), or NULL if the
// 274 // coordinator realignment is to be broadcasted (mlmeStartRequest)
// 275 // WORD shortAddr
// 276 // The short address of the orphaned device, or 0xFFFF when the coordinator realignment is
// 277 // broadcasted
// 278 // BOOL securityEnable
// 279 // TBD
// 280 // WORD newPanId
// 281 // The PAN ID to be used in the future
// 282 // UINT8 logicalChannel
// 283 // The logical channel (11-26) to be used in the future
// 284 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 285 void mbcnPrepareCoordinatorRealignment(MAC_TX_PACKET *pPacket, ADDRESS *pDestAddr, WORD shortAddr, BOOL securityEnable, WORD newPanId, UINT8 logicalChannel) NEAR {
mbcnPrepareCoordinatorRealignment:
CFI Block cfiBlock7 Using cfiCommon0
CFI Function mbcnPrepareCoordinatorRealignment
FUNCALL mbcnPrepareCoordinatorRealignment, msupPrepareHeader
LOCFRAME XSTACK, 26, STACK
ARGFRAME XSTACK, 26, STACK
FUNCALL mbcnPrepareCoordinatorRealignment, msupPrepareHeader
LOCFRAME XSTACK, 26, STACK
ARGFRAME XSTACK, 26, STACK
FUNCALL mbcnPrepareCoordinatorRealignment, msupCalcPacketDuration
LOCFRAME XSTACK, 18, STACK
ARGFRAME XSTACK, 18, STACK
MOV A,#-0x10
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 V7 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-14)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-15)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-16)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 16)
; Saved register size: 16
; Auto size: 2
MOV A,#-0x2
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 18)
MOV ?V0 + 2,R2
MOV ?V0 + 3,R3
MOV ?V0 + 4,R4
MOV ?V0 + 5,R5
MOV A,#0x12
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
MOV A,#0x14
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
MOV ?V0 + 0,A
INC DPTR
MOVX A,@DPTR
MOV ?V0 + 1,A
MOV A,#0x16
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
MOV ?V0 + 7,A
// 286 WORD broadcast = 0xFFFF;
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV A,#-0x1
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
// 287 BYTE txOptions;
// 288 UINT8 temp;
// 289 BYTE *pPayload;
// 290
// 291 if (securityEnable == TRUE)
// 292 securityEnable = FALSE;
// 293
// 294 // TX mode
// 295 pPacket->txMode = MTX_MODE_USE_CSMACA_BM;
MOV A,R2
ADD A,#-0x7a
MOV DPL,A
MOV A,R3
ADDC A,#0x0
MOV DPH,A
MOV A,#0x1
MOVX @DPTR,A
// 296
// 297 // Set the TX options
// 298 txOptions = TX_OPT_NONE;
MOV ?V0 + 6,#0x0
// 299
// 300 #if MAC_OPT_SECURITY
// 301 if (securityEnable) txOptions |= TX_OPT_SECURITY_ENABLE;
// 302 #endif
// 303
// 304 // Generate the packet header
// 305 if (pDestAddr) {
MOV A,R4
JNZ ??mbcnPrepareCoordinatorRealignment_0
MOV A,R5
??mbcnPrepareCoordinatorRealignment_0:
JZ ??mbcnPrepareCoordinatorRealignment_1
// 306 pPacket->retriesLeft = aMaxFrameRetries;
MOV A,R2
ADD A,#-0x6f
MOV DPL,A
MOV A,R3
ADDC A,#0x0
MOV DPH,A
MOV A,#0x3
MOVX @DPTR,A
// 307 txOptions |= TX_OPT_ACK_REQ;
MOV ?V0 + 6,#0x1
// 308 msupPrepareHeader(pPacket, FT_MAC_COMMAND, SRC_ADDR_EXT | DEST_ADDR_EXT, mpib.macPANId, (ADDRESS *) &aExtendedAddress, broadcast, pDestAddr, txOptions);
; Setup parameters for call to function msupPrepareHeader
MOV R0,#?V0 + 4
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 20)
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
LCALL ?PUSH_XSTACK8_X_TWO
CFI CFA_XSP16 add(XSP16, 22)
MOV ?V0 + 4,#(aExtendedAddress & 0xff)
MOV ?V0 + 5,#((aExtendedAddress >> 8) & 0xff)
MOV R0,#?V0 + 4
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 24)
MOV DPTR,#(mpib + 28)
LCALL ?PUSH_XSTACK8_X_TWO
CFI CFA_XSP16 add(XSP16, 26)
MOV R5,#0x1
MOV R4,#-0x34
SJMP ??mbcnPrepareCoordinatorRealignment_2
CFI CFA_XSP16 add(XSP16, 18)
// 309 } else {
// 310 // pPacket->retriesLeft will be ignored (no ack)
// 311 pPacket->txMode |= MTX_MODE_MAC_INTERNAL_BM;
??mbcnPrepareCoordinatorRealignment_1:
MOV A,#0x5
MOVX @DPTR,A
// 312 shortAddr = broadcast;
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
// 313 msupPrepareHeader(pPack
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -