📄 mac_rx_engine.lst
字号:
306 // MLME_BEACON_NOTIFY_INDICATION* mrxMakeBeaconNotifyIndication(MAC_RX_PACKET *pPacket)
307 //
308 // DESCRIPTION:
309 // Modifies a MAC_RX_PACKET structure to become a beacon notify indication.
310 //
311 // ARGUMENTS:
312 // MAC_RX_PACKET *pPacket
313 // The packet that contains the beacon. This structure will be modified to contain the
314 // notification.
315 //
316 // RETURN VALUE:
317 // MLME_BEACON_NOTIFY_INDICATION*
318 // A pointer to the notification to be passed to the higher layer
319 //-------------------------------------------------------------------------------------------------------
\ In segment NEAR_CODE, align 1, keep-with-next
320 ROOT MLME_BEACON_NOTIFY_INDICATION * mrxMakeBeaconNotifyIndication(MAC_RX_PACKET *pPacket) {
\ mrxMakeBeaconNotifyIndication:
\ 000000 74F1 MOV A,#-0xf
\ 000002 12.... LCALL ?FUNC_ENTER_XDATA
\ 000005 ; Saved register size: 15
\ 000005 ; Auto size: 3
\ 000005 74FD MOV A,#-0x3
\ 000007 12.... LCALL ?ALLOC_XSTACK8
321 MLME_BEACON_NOTIFY_INDICATION *pMBNI = (MLME_BEACON_NOTIFY_INDICATION *) (((BYTE *) pPacket) + 1);
\ 00000A 8A82 MOV DPL,R2
\ 00000C 8B83 MOV DPH,R3
\ 00000E A3 INC DPTR
\ 00000F A882 MOV R0,DPL
\ 000011 A983 MOV R1,DPH
\ 000013 85..82 MOV DPL,?XSP + 0
\ 000016 85..83 MOV DPH,?XSP + 1
\ 000019 E8 MOV A,R0
\ 00001A F0 MOVX @DPTR,A
\ 00001B A3 INC DPTR
\ 00001C E9 MOV A,R1
\ 00001D F0 MOVX @DPTR,A
322 MCPS_DATA_INDICATION *pMDI = &pPacket->mdi;
\ 00001E EA MOV A,R2
\ 00001F 2407 ADD A,#0x7
\ 000021 F5.. MOV ?V0 + 0,A
\ 000023 EB MOV A,R3
\ 000024 3400 ADDC A,#0x0
\ 000026 F5.. MOV ?V0 + 1,A
323 PAN_DESCRIPTOR *pPanDescriptor = &pMBNI->panDescriptor;
\ 000028 85..82 MOV DPL,?XSP + 0
\ 00002B 85..83 MOV DPH,?XSP + 1
\ 00002E E0 MOVX A,@DPTR
\ 00002F 2401 ADD A,#0x1
\ 000031 F5.. MOV ?V0 + 6,A
\ 000033 A3 INC DPTR
\ 000034 E0 MOVX A,@DPTR
\ 000035 3400 ADDC A,#0x0
\ 000037 F5.. MOV ?V0 + 7,A
\ 000039 E5.. MOV A,?V0 + 0
\ 00003B 241C ADD A,#0x1c
\ 00003D F582 MOV DPL,A
\ 00003F E5.. MOV A,?V0 + 1
\ 000041 3400 ADDC A,#0x0
\ 000043 F583 MOV DPH,A
\ 000045 E0 MOVX A,@DPTR
\ 000046 5407 ANL A,#0x7
324 UINT8 n;
325 UINT8 payloadOffset;
326 UINT8 pendAddrOffset;
327 UINT8 pendAddrSpec;
328 UINT8 pendingIndex;
329
330 // Do not change the order of these operations!!!
331
332 // Calculate the pSDU offset
333 n = pMDI->pMsdu[2] & 0x07;
334 if (n) {
\ 000048 6009 JZ ??mrxMakeBeaconNotifyIndication_0
335 n = 3 + 1 + 3 * n;
\ 00004A 75F003 MOV B,#0x3
\ 00004D A4 MUL AB
\ 00004E 2404 ADD A,#0x4
\ 000050 FF MOV R7,A
\ 000051 8002 SJMP ??mrxMakeBeaconNotifyIndication_1
336 } else {
337 n = 3;
\ ??mrxMakeBeaconNotifyIndication_0:
\ 000053 7F03 MOV R7,#0x3
338 }
339 pendAddrSpec = pMDI->pMsdu[n];
\ ??mrxMakeBeaconNotifyIndication_1:
\ 000055 8F.. MOV ?V0 + 2,R7
\ 000057 E5.. MOV A,?V0 + 0
\ 000059 25.. ADD A,?V0 + 2
\ 00005B F8 MOV R0,A
\ 00005C E5.. MOV A,?V0 + 1
\ 00005E 3400 ADDC A,#0x0
\ 000060 F9 MOV R1,A
\ 000061 741A MOV A,#0x1a
\ 000063 28 ADD A,R0
\ 000064 F582 MOV DPL,A
\ 000066 E4 CLR A
\ 000067 39 ADDC A,R1
\ 000068 F583 MOV DPH,A
\ 00006A E0 MOVX A,@DPTR
\ 00006B F5.. MOV ?V0 + 5,A
340 payloadOffset = (n + 1 + (sizeof(WORD) * (pendAddrSpec & 0x07)) + (sizeof(ADDRESS) * ((pendAddrSpec & 0x70) >> 4)));
\ 00006D 7470 MOV A,#0x70
\ 00006F 55.. ANL A,?V0 + 5
\ 000071 C4 SWAP A
\ 000072 30E302 JNB 0xE0 /* A */.3,??mrxMakeBeaconNotifyIndication_2
\ 000075 44F0 ORL A,#0xf0
\ ??mrxMakeBeaconNotifyIndication_2:
\ 000077 C0E0 PUSH A
\ 000079 7402 MOV A,#0x2
\ 00007B 12.... LCALL ?XSTACK_DISP0_8
\ 00007E D0E0 POP A
\ 000080 F0 MOVX @DPTR,A
\ 000081 7402 MOV A,#0x2
\ 000083 12.... LCALL ?XSTACK_DISP0_8
\ 000086 E0 MOVX A,@DPTR
\ 000087 33 RLC A
\ 000088 33 RLC A
\ 000089 33 RLC A
\ 00008A 54F8 ANL A,#0xf8
\ 00008C C0E0 PUSH A
\ 00008E 7407 MOV A,#0x7
\ 000090 55.. ANL A,?V0 + 5
\ 000092 C3 CLR C
\ 000093 33 RLC A
\ 000094 2F ADD A,R7
\ 000095 FA MOV R2,A
\ 000096 D0E0 POP A
\ 000098 2A ADD A,R2
\ 000099 04 INC A
\ 00009A FE MOV R6,A
341
342 // Start by copying the payload in reverse order to avoid overwriting
343 msupReverseCopy(pMBNI->pSdu, pMDI->pMsdu + payloadOffset, aMaxBeaconPayloadLength);
\ 00009B ; Setup parameters for call to function msupReverseCopy
\ 00009B 7934 MOV R1,#0x34
\ 00009D 8E.. MOV ?V0 + 2,R6
\ 00009F E5.. MOV A,?V0 + 0
\ 0000A1 25.. ADD A,?V0 + 2
\ 0000A3 FA MOV R2,A
\ 0000A4 E5.. MOV A,?V0 + 1
\ 0000A6 3400 ADDC A,#0x0
\ 0000A8 FB MOV R3,A
\ 0000A9 741A MOV A,#0x1a
\ 0000AB 2A ADD A,R2
\ 0000AC FC MOV R4,A
\ 0000AD E4 CLR A
\ 0000AE 3B ADDC A,R3
\ 0000AF FD MOV R5,A
\ 0000B0 85..82 MOV DPL,?XSP + 0
\ 0000B3 85..83 MOV DPH,?XSP + 1
\ 0000B6 E0 MOVX A,@DPTR
\ 0000B7 2452 ADD A,#0x52
\ 0000B9 FA MOV R2,A
\ 0000BA A3 INC DPTR
\ 0000BB E0 MOVX A,@DPTR
\ 0000BC 3400 ADDC A,#0x0
\ 0000BE FB MOV R3,A
\ 0000BF 12.... LCALL msupReverseCopy
344
345 // Copy lots of parameters (no fields are overwritten!)
346 pMBNI->sduLength = pMDI->msduLength - payloadOffset;
\ 0000C2 E5.. MOV A,?V0 + 0
\ 0000C4 2419 ADD A,#0x19
\ 0000C6 F582 MOV DPL,A
\ 0000C8 E5.. MOV A,?V0 + 1
\ 0000CA 3400 ADDC A,#0x0
\ 0000CC F583 MOV DPH,A
\ 0000CE E0 MOVX A,@DPTR
\ 0000CF C3 CLR C
\ 0000D0 9E SUBB A,R6
\ 0000D1 C0E0 PUSH A
\ 0000D3 85..82 MOV DPL,?XSP + 0
\ 0000D6 85..83 MOV DPH,?XSP + 1
\ 0000D9 E0 MOVX A,@DPTR
\ 0000DA 2419 ADD A,#0x19
\ 0000DC F8 MOV R0,A
\ 0000DD A3 INC DPTR
\ 0000DE E0 MOVX A,@DPTR
\ 0000DF 3400 ADDC A,#0x0
\ 0000E1 F9 MOV R1,A
\ 0000E2 8882 MOV DPL,R0
\ 0000E4 8983 MOV DPH,R1
\ 0000E6 D0E0 POP A
\ 0000E8 F0 MOVX @DPTR,A
347 pPanDescriptor->logicalChannel = ppib.phyCurrentChannel;
\ 0000E9 90.... MOV DPTR,#ppib
\ 0000EC E0 MOVX A,@DPTR
\ 0000ED C0E0 PUSH A
\ 0000EF E5.. MOV A,?V0 + 6
\ 0000F1 2416 ADD A,#0x16
\ 0000F3 F582 MOV DPL,A
\ 0000F5 E5.. MOV A,?V0 + 7
\ 0000F7 3400 ADDC A,#0x0
\ 0000F9 F583 MOV DPH,A
\ 0000FB D0E0 POP A
\ 0000FD F0 MOVX @DPTR,A
348 pPanDescriptor->linkQuality = pMDI->mpduLinkQuality;
\ 0000FE E5.. MOV A,?V0 + 0
\ 000100 2416 ADD A,#0x16
\ 000102 F582 MOV DPL,A
\ 000104 E5.. MOV A,?V0 + 1
\ 000106 3400 ADDC A,#0x0
\ 000108 F583 MOV DPH,A
\ 00010A E0 MOVX A,@DPTR
\ 00010B C0E0 PUSH A
\ 00010D E5.. MOV A,?V0 + 6
\ 00010F 2414 ADD A,#0x14
\ 000111 F582 MOV DPL,A
\ 000113 E5.. MOV A,?V0 + 7
\ 000115 3400 ADDC A,#0x0
\ 000117 F583 MOV DPH,A
\ 000119 D0E0 POP A
\ 00011B F0 MOVX @DPTR,A
349 pPanDescriptor->superframeSpec = *((WORD *) pMDI->pMsdu);
\ 00011C E5.. MOV A,?V0 + 0
\ 00011E 241A ADD A,#0x1a
\ 000120 F582 MOV DPL,A
\ 000122 E5.. MOV A,?V0 + 1
\ 000124 3400 ADDC A,#0x0
\ 000126 F583 MOV DPH,A
\ 000128 E0 MOVX A,@DPTR
\ 000129 F8 MOV R0,A
\ 00012A A3 INC DPTR
\ 00012B E0 MOVX A,@DPTR
\ 00012C F9 MOV R1,A
\ 00012D E5.. MOV A,?V0 + 6
\ 00012F 2411 ADD A,#0x11
\ 000131 F582 MOV DPL,A
\ 000133 E5.. MOV A,?V0 + 7
\ 000135 3400 ADDC A,#0x0
\ 000137 F583 MOV DPH,A
\ 000139 E8 MOV A,R0
\ 00013A F0 MOVX @DPTR,A
\ 00013B A3 INC DPTR
\ 00013C E9 MOV A,R1
\ 00013D F0 MOVX @DPTR,A
350 pPanDescriptor->gtsPermit = !!(pMDI->pMsdu[2] & 0x80);
\ 00013E E5.. MOV A,?V0 + 0
\ 000140 241C ADD A,#0x1c
\ 000142 F582 MOV DPL,A
\ 000144 E5.. MOV A,?V0 + 1
\ 000146 3400 ADDC A,#0x0
\ 000148 F583 MOV DPH,A
\ 00014A E0 MOVX A,@DPTR
\ 00014B A2E7 MOV C,0xE0 /* A */.7
\ 00014D 5004 JNC ??mrxMakeBeaconNotifyIndication_3
\ 00014F D2F0 SETB B.0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -