📄 mac_indirect_polling.s51
字号:
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
// 45 MAC_ENUM result;
// 46 BOOL securityEnable = FALSE; // TBD...
// 47
// 48 // Switch to automatic polling mode
// 49 if (!macSetState(MAC_STATE_TX_AUTO_DATA_REQUEST)) return;
; Setup parameters for call to function macSetState
MOV R1,#0x10
LCALL macSetState
MOV A,R1
JZ ??mipTransmitAutoDataRequest_0
// 50
// 51 // Try to transmit the data request
// 52 if (mpib.macCoordShortAddress < 0xFFFE) {
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 ??mipTransmitAutoDataRequest_1
// 53 result = 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 ??mipTransmitAutoDataRequest_2
CFI CFA_XSP16 add(XSP16, 8)
// 54 } else {
// 55 result = mipTransmitDataRequest(AM_EXTENDED_64, mpib.macPANId, (ADDRESS *) mpib.pMacCoordExtendedAddress, securityEnable);
??mipTransmitAutoDataRequest_1:
; 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
??mipTransmitAutoDataRequest_2:
LCALL mipTransmitDataRequest
MOV A,#0x1
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 8)
MOV A,R1
MOV R2,A
// 56 }
// 57
// 58 // Clean up if it failed
// 59 if (result != SUCCESS) macSetState(MAC_STATE_DEFAULT);
MOV A,R2
JZ ??mipTransmitAutoDataRequest_0
; Setup parameters for call to function macSetState
MOV R1,#0x0
LCALL macSetState
CFI EndBlock cfiBlock0
??mipTransmitAutoDataRequest_0:
REQUIRE ?Subroutine0
; // Fall through to label ?Subroutine0
// 60
// 61 } // mipTransmitAutoDataRequest
RSEG NEAR_CODE:CODE:NOROOT(0)
?Subroutine0:
CFI Block cfiBlock1 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 8)
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-7)))
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(-8)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-4)))
MOV R7,#0x1
LJMP ?FUNC_LEAVE_XDATA
CFI EndBlock cfiBlock1
// 62
// 63
// 64
// 65
// 66 //-------------------------------------------------------------------------------------------------------
// 67 // MAC_ENUM mipTransmitDataRequest(BYTE coordAddrMode, WORD coordPANId, ADDRESS *pCoordAddress, BOOL ...)
// 68 //
// 69 // DESCRIPTION:
// 70 // Transmits a data request packet.
// 71 //
// 72 // ARGUMENTS:
// 73 // BYTE coordAddrMode
// 74 // The address mode used by the coordinator
// 75 // WORD coordPANId
// 76 // The PAN ID used by the coordinator
// 77 // ADDRESS *pCoordAddress
// 78 // A pointer to the coordinator address (taken from the MAC PIB, short or extended)
// 79 // BOOL securityEnable
// 80 // TBD...
// 81 //
// 82 // RETURN VALUE:
// 83 // MAC_ENUM
// 84 // SUCCESS No error (the transmission was initiated)
// 85 // RESOURCE_SHORTAGE TX packet or task not available
// 86 // UNAVAILABLE_KEY No key
// 87 // FAILED_SECURITY_CHECK Failed security check
// 88 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 89 ROOT MAC_ENUM mipTransmitDataRequest(BYTE coordAddrMode, WORD coordPANId, ADDRESS *pCoordAddress, BOOL securityEnable) {
mipTransmitDataRequest:
CFI Block cfiBlock2 Using cfiCommon0
CFI Function mipTransmitDataRequest
FUNCALL mipTransmitDataRequest, mtxpReservePacket
LOCFRAME XSTACK, 15, STACK
ARGFRAME XSTACK, 15, STACK
FUNCALL mipTransmitDataRequest, mschReserveTask
LOCFRAME XSTACK, 15, STACK
ARGFRAME XSTACK, 15, STACK
FUNCALL mipTransmitDataRequest, mtxpReleasePacket
LOCFRAME XSTACK, 15, STACK
ARGFRAME XSTACK, 15, STACK
FUNCALL mipTransmitDataRequest, msupPrepareHeader
LOCFRAME XSTACK, 23, STACK
ARGFRAME XSTACK, 23, STACK
FUNCALL mipTransmitDataRequest, msupPrepareHeader
LOCFRAME XSTACK, 23, STACK
ARGFRAME XSTACK, 23, STACK
FUNCALL mipTransmitDataRequest, msupCalcPacketDuration
LOCFRAME XSTACK, 15, STACK
ARGFRAME XSTACK, 15, STACK
FUNCALL mipTransmitDataRequest, mschAddTask
LOCFRAME XSTACK, 18, STACK
ARGFRAME XSTACK, 18, 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: 0
MOV ?V0 + 3,R1
MOV A,R2
MOV R6,A
MOV A,R3
MOV R7,A
MOV ?V0 + 6,R4
MOV ?V0 + 7,R5
// 90 MAC_TX_PACKET *pPacket;
// 91 UINT8 taskNumber;
// 92 BYTE txOptions;
// 93 UINT8 temp;
// 94 BYTE *pPayload;
// 95
// 96 // Try to reserve a packet
// 97 pPacket = mtxpReservePacket();
; Setup parameters for call to function mtxpReservePacket
LCALL mtxpReservePacket
MOV ?V0 + 0,R2
MOV ?V0 + 1,R3
// 98 if (!pPacket) return RESOURCE_SHORTAGE;
MOV A,R2
JNZ ??mipTransmitDataRequest_0
MOV A,R3
??mipTransmitDataRequest_0:
JNZ ??mipTransmitDataRequest_1
??mipTransmitDataRequest_2:
MOV R1,#0x1
LJMP ??mipTransmitDataRequest_3
// 99
// 100 // Try to reserve a transmission task
// 101 taskNumber = mschReserveTask();
??mipTransmitDataRequest_1:
; Setup parameters for call to function mschReserveTask
LCALL mschReserveTask
MOV A,R1
MOV ?V0 + 2,A
// 102 if (taskNumber == NO_TASK) {
MOV A,#-0x1
XRL A,?V0 + 2
JNZ ??mipTransmitDataRequest_4
// 103 mtxpReleasePacket(pPacket);
; Setup parameters for call to function mtxpReleasePacket
MOV R2,?V0 + 0
MOV R3,?V0 + 1
LCALL mtxpReleasePacket
// 104 return RESOURCE_SHORTAGE;
SJMP ??mipTransmitDataRequest_2
// 105 }
// 106
// 107 // Set TX options
// 108 txOptions = TX_OPT_ACK_REQ;
// 109 #if MAC_OPT_SECURITY
// 110 if (securityEnable) {
// 111 txOptions |= TX_OPT_SECURITY_ENABLE;
// 112 }
// 113 #endif
// 114
// 115 // TX mode
// 116 pPacket->txMode = MTX_MODE_USE_CSMACA_BM;
??mipTransmitDataRequest_4:
MOV A,?V0 + 0
ADD A,#-0x7a
MOV DPL,A
MOV A,?V0 + 1
ADDC A,#0x0
MOV DPH,A
MOV A,#0x1
MOVX @DPTR,A
// 117 pPacket->retriesLeft = aMaxFrameRetries;
MOV A,?V0 + 0
ADD A,#-0x6f
MOV DPL,A
MOV A,?V0 + 1
ADDC A,#0x0
MOV DPH,A
MOV A,#0x3
MOVX @DPTR,A
// 118
// 119 // Generate the packet header (and find security material, if enabled)
// 120 if (mpib.macShortAddress >= 0xFFFE) {
MOV A,?V0 + 3
RLC A
RLC A
ANL A,#0xfc
MOV R2,A
MOV DPTR,#(mpib + 32)
CLR C
MOVX A,@DPTR
SUBB A,#-0x2
INC DPTR
MOVX A,@DPTR
SUBB A,#-0x1
MOV R0,#?V0 + 6
JC ??mipTransmitDataRequest_5
// 121 msupPrepareHeader(pPacket, FT_MAC_COMMAND, (coordAddrMode << 2) | SRC_ADDR_EXT, mpib.macPANId, (ADDRESS *) &aExtendedAddress, coordPANId, pCoordAddress, (BYTE)txOptions);
; Setup parameters for call to function msupPrepareHeader
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 17)
MOV ?V0 + 4,R6
MOV ?V0 + 5,R7
MOV R0,#?V0 + 4
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 19)
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, 21)
MOV DPTR,#(mpib + 28)
LCALL ?PUSH_XSTACK8_X_TWO
CFI CFA_XSP16 add(XSP16, 23)
MOV R5,#0x1
MOV A,#-0x40
SJMP ??mipTransmitDataRequest_6
CFI CFA_XSP16 add(XSP16, 15)
// 122 } else {
// 123 msupPrepareHeader(pPacket, FT_MAC_COMMAND, (coordAddrMode << 2) | SRC_ADDR_SHORT, mpib.macPANId, (ADDRESS *) &mpib.macShortAddress, coordPANId, pCoordAddress, txOptions);
??mipTransmitDataRequest_5:
; Setup parameters for call to function msupPrepareHeader
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 17)
MOV ?V0 + 4,R6
MOV ?V0 + 5,R7
MOV R0,#?V0 + 4
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 19)
MOV ?V0 + 4,#((mpib + 32) & 0xff)
MOV ?V0 + 5,#(((mpib + 32) >> 8) & 0xff)
MOV R0,#?V0 + 4
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 21)
MOV DPTR,#(mpib + 28)
LCALL ?PUSH_XSTACK8_X_TWO
CFI CFA_XSP16 add(XSP16, 23)
MOV R5,#0x1
MOV A,#-0x80
??mipTransmitDataRequest_6:
ORL A,R2
MOV R4,A
MOV R1,#0x3
MOV R2,?V0 + 0
MOV R3,?V0 + 1
LCALL msupPrepareHeader
MOV A,#0x8
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 15)
// 124 }
// 125
// 126 // Store the command type
// 127 pPacket->commandType = CMD_DATA_REQUEST;
MOV A,?V0 + 0
ADD A,#-0x7d
MOV DPL,A
MOV A,?V0 + 1
ADDC A,#0x0
MOV DPH,A
MOV A,#0x4
MOVX @DPTR,A
// 128
// 129 // Command frame identifier
// 130 pPayload = pPacket->pPayload;
// 131 *(pPayload++) = CMD_DATA_REQUEST;
MOV A,?V0 + 0
ADD A,#0x1a
MOV DPL,A
MOV A,?V0 + 1
ADDC A,#0x0
MOV DPH,A
MOV A,#0x4
MOVX @DPTR,A
// 132
// 133 #if MAC_OPT_SECURITY
// 134 // #bytes in frame counter + key sequence counter (0 or 5)
// 135 temp = msecProcessSecurityCounters(pPacket, pPayload);
// 136
// 137 // In case of frame counter overflow or missing key
// 138 // Generate error with FAILED_SECURITY_CHECK or UNAVAILABLE_KEY
// 139 if (pPacket->securitySuite >= 8) {
// 140 mtxpReleasePacket(pPacket);
// 141 mschReleaseTask(taskNumber);
// 142 return pPacket->securitySuite;
// 143 }
// 144
// 145 // Increment payload pointer when counters inserted
// 146 pPayload += temp;
// 147
// 148 // Include command payload length and optional MIC (integrity code) length
// 149 temp += CMD_DATA_REQUEST_PAYLOAD_LENGTH + pPacket->securitySetup.micLength;
// 150
// 151 #else
// 152 // No security material included, set MAC payload length
// 153 temp = CMD_DATA_REQUEST_PAYLOAD_LENGTH;
// 154 #endif
// 155
// 156 // Set the packet length
// 157 pPacket->length = pPacket->headerLength + temp + MAC_FCS_LENGTH;
MOV DPL,?V0 + 0
MOV DPH,?V0 + 1
INC DPTR
MOVX A,@DPTR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -