📄 mac_beacon_handler.lst
字号:
\ 000295 12.... LCALL mtimSetCallback & 0xFFFF
\ 000298 7404 MOV A,#0x4
\ 00029A 12.... LCALL ?DEALLOC_XSTACK8
249
250 // Don't transmit the beacon
251 mschRemoveTask(pTask->priority, MSCH_KEEP_TASK_RESERVED_BM | MSCH_KEEP_TASK_IN_PROGRESS_BM);
\ 00029D ; Setup parameters for call to function mschRemoveTask
\ ??mbcnTxPeriodicalBeaconTask_4:
\ 00029D 7A03 MOV R2,#0x3
\ 00029F 8E82 MOV DPL,R6
\ 0002A1 8F83 MOV DPH,R7
\ 0002A3 E0 MOVX A,@DPTR
\ 0002A4 F9 MOV R1,A
\ 0002A5 12.... LCALL mschRemoveTask & 0xFFFF
252 }
253 break;
254 }
255
256 } // mbcnTxPeriodicalBeaconTask
\ ??mbcnTxPeriodicalBeaconTask_0:
\ 0002A8 7406 MOV A,#0x6
\ 0002AA 02.... LJMP ?Subroutine1
\ In segment XDATA_Z, align 1, keep-with-next
\ 000000 REQUIRE __INIT_XDATA_Z
\ ??oldBeaconInterval:
\ 000000 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 //-------------------------------------------------------------------------------------------------------
\ In segment NEAR_CODE, align 1, keep-with-next
285 void mbcnPrepareCoordinatorRealignment(MAC_TX_PACKET *pPacket, ADDRESS *pDestAddr, WORD shortAddr, BOOL securityEnable, WORD newPanId, UINT8 logicalChannel) NEAR {
\ mbcnPrepareCoordinatorRealignment:
\ 000000 74F0 MOV A,#-0x10
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 16
\ 000005 ; Auto size: 2
\ 000005 74FE MOV A,#-0x2
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A 8A.. MOV ?V0 + 2,R2
\ 00000C 8B.. MOV ?V0 + 3,R3
\ 00000E 8C.. MOV ?V0 + 4,R4
\ 000010 8D.. MOV ?V0 + 5,R5
\ 000012 7412 MOV A,#0x12
\ 000014 12.... LCALL ?XSTACK_DISP0_8
\ 000017 E0 MOVX A,@DPTR
\ 000018 FE MOV R6,A
\ 000019 A3 INC DPTR
\ 00001A E0 MOVX A,@DPTR
\ 00001B FF MOV R7,A
\ 00001C 7414 MOV A,#0x14
\ 00001E 12.... LCALL ?XSTACK_DISP0_8
\ 000021 E0 MOVX A,@DPTR
\ 000022 F5.. MOV ?V0 + 0,A
\ 000024 A3 INC DPTR
\ 000025 E0 MOVX A,@DPTR
\ 000026 F5.. MOV ?V0 + 1,A
\ 000028 7416 MOV A,#0x16
\ 00002A 12.... LCALL ?XSTACK_DISP0_8
\ 00002D E0 MOVX A,@DPTR
\ 00002E F5.. MOV ?V0 + 7,A
286 WORD broadcast = 0xFFFF;
\ 000030 85..82 MOV DPL,?XSP + 0
\ 000033 85..83 MOV DPH,?XSP + 1
\ 000036 74FF MOV A,#-0x1
\ 000038 F0 MOVX @DPTR,A
\ 000039 A3 INC DPTR
\ 00003A F0 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;
\ 00003B EA MOV A,R2
\ 00003C 2486 ADD A,#-0x7a
\ 00003E F582 MOV DPL,A
\ 000040 EB MOV A,R3
\ 000041 3400 ADDC A,#0x0
\ 000043 F583 MOV DPH,A
\ 000045 7401 MOV A,#0x1
\ 000047 F0 MOVX @DPTR,A
296
297 // Set the TX options
298 txOptions = TX_OPT_NONE;
\ 000048 75..00 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) {
\ 00004B EC MOV A,R4
\ 00004C 7001 JNZ ??mbcnPrepareCoordinatorRealignment_0
\ 00004E ED MOV A,R5
\ ??mbcnPrepareCoordinatorRealignment_0:
\ 00004F 6034 JZ ??mbcnPrepareCoordinatorRealignment_1
306 pPacket->retriesLeft = aMaxFrameRetries;
\ 000051 EA MOV A,R2
\ 000052 2491 ADD A,#-0x6f
\ 000054 F582 MOV DPL,A
\ 000056 EB MOV A,R3
\ 000057 3400 ADDC A,#0x0
\ 000059 F583 MOV DPH,A
\ 00005B 7403 MOV A,#0x3
\ 00005D F0 MOVX @DPTR,A
307 txOptions |= TX_OPT_ACK_REQ;
\ 00005E 75..01 MOV ?V0 + 6,#0x1
308 msupPrepareHeader(pPacket, FT_MAC_COMMAND, SRC_ADDR_EXT | DEST_ADDR_EXT, mpib.macPANId, (ADDRESS *) &aExtendedAddress, broadcast, pDestAddr, txOptions);
\ 000061 ; Setup parameters for call to function msupPrepareHeader
\ 000061 78.. MOV R0,#?V0 + 4
\ 000063 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000066 7402 MOV A,#0x2
\ 000068 12.... LCALL ?XSTACK_DISP0_8
\ 00006B 12.... LCALL ?PUSH_XSTACK8_X_TWO
\ 00006E 75.... MOV ?V0 + 4,#(aExtendedAddress & 0xff)
\ 000071 75.... MOV ?V0 + 5,#((aExtendedAddress >> 8) & 0xff)
\ 000074 78.. MOV R0,#?V0 + 4
\ 000076 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000079 90.... MOV DPTR,#(mpib + 28)
\ 00007C 12.... LCALL ?PUSH_XSTACK8_X_TWO
\ 00007F 7D01 MOV R5,#0x1
\ 000081 7CCC MOV R4,#-0x34
\ 000083 803C SJMP ??mbcnPrepareCoordinatorRealignment_2
309 } else {
310 // pPacket->retriesLeft will be ignored (no ack)
311 pPacket->txMode |= MTX_MODE_MAC_INTERNAL_BM;
\ ??mbcnPrepareCoordinatorRealignment_1:
\ 000085 7405 MOV A,#0x5
\ 000087 F0 MOVX @DPTR,A
312 shortAddr = broadcast;
\ 000088 85..82 MOV DPL,?XSP + 0
\ 00008B 85..83 MOV DPH,?XSP + 1
\ 00008E E0 MOVX A,@DPTR
\ 00008F FE MOV R6,A
\ 000090 A3 INC DPTR
\ 000091 E0 MOVX A,@DPTR
\ 000092 FF MOV R7,A
313 msupPrepareHeader(pPacket, FT_MAC_COMMAND, SRC_ADDR_EXT | DEST_ADDR_SHORT, mpib.macPANId,(ADDRESS *) &aExtendedAddress, broadcast, (ADDRESS *) &broadcast, txOptions);
\ 000093 ; Setup parameters for call to function msupPrepareHeader
\ 000093 85..82 MOV DPL,?XSP + 0
\ 000096 85..83 MOV DPH,?XSP + 1
\ 000099 8582.. MOV ?V0 + 4,DPL
\ 00009C 8583.. MOV ?V0 + 5,DPH
\ 00009F 78.. MOV R0,#?V0 + 4
\ 0000A1 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 0000A4 7402 MOV A,#0x2
\ 0000A6 12.... LCALL ?XSTACK_DISP0_8
\ 0000A9 12.... LCALL ?PUSH_XSTACK8_X_TWO
\ 0000AC 75.... MOV ?V0 + 4,#(aExtendedAddress & 0xff)
\ 0000AF 75.... MOV ?V0 + 5,#((aExtendedAddress >> 8) & 0xff)
\ 0000B2 78.. MOV R0,#?V0 + 4
\ 0000B4 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 0000B7 90.... MOV DPTR,#(mpib + 28)
\ 0000BA 12.... LCALL ?PUSH_XSTACK8_X_TWO
\ 0000BD 7D00 MOV R5,#0x0
\ 0000BF 7CC8 MOV R4,#-0x38
\ ??mbcnPrepareCoordinatorRealignment_2:
\ 0000C1 7903 MOV R1,#0x3
\ 0000C3 12.... LCALL msupPrepareHeader & 0xFFFF
\ 0000C6 7408 MOV A,#0x8
\ 0000C8 12.... LCALL ?DEALLOC_XSTACK8
314 }
315
316 // Store the command type
317 pPacket->commandType = CMD_COORDINATOR_REALIGNMENT;
\ 0000CB E5.. MOV A,?V0 + 2
\ 0000CD 2483 ADD A,#-0x7d
\ 0000CF F582 MOV DPL,A
\ 0000D1 E5.. MOV A,?V0 + 3
\ 0000D3 3400 ADDC A,#0x0
\ 0000D5 F583 MOV DPH,A
\ 0000D7 7408 MOV A,#0x8
\ 0000D9 F0 MOVX @DPTR,A
318
319 // Command frame identifier
320 pPayload = pPacket->pPayload;
\ 0000DA E5.. MOV A,?V0 + 2
\ 0000DC 241A ADD A,#0x1a
\ 0000DE F8 MOV R0,A
\ 0000DF E5.. MOV A,?V0 + 3
\ 0000E1 3400 ADDC A,#0x0
\ 0000E3 F9 MOV R1,A
321 *(pPayload++) = CMD_COORDINATOR_REALIGNMENT;
\ 0000E4 7408 MOV A,#0x8
\ 0000E6 8882 MOV DPL,R0
\ 0000E8 8983 MOV DPH,R1
\ 0000EA F0 MOVX @DPTR,A
\ 0000EB A3 INC DPTR
\ 0000EC A882 MOV R0,DPL
\ 0000EE A983 MOV R1,DPH
322
323 #if MAC_OPT_SECURITY
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -