📄 mac_scan.s51
字号:
// 121
// 122 // Store the command type
// 123 pPacket->commandType = CMD_BEACON_REQUEST;
MOV A,R6
ADD A,#-0x7d
MOV DPL,A
MOV A,R7
ADDC A,#0x0
MOV DPH,A
MOV A,#0x7
MOVX @DPTR,A
// 124
// 125 // Calculate and set the total packet length
// 126 pPacket->length = pPacket->headerLength + CMD_BEACON_REQUEST_PAYLOAD_LENGTH + MAC_FCS_LENGTH;
MOV DPL,R6
MOV DPH,R7
INC DPTR
MOVX A,@DPTR
ADD A,#0x3
MOV R1,A
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
MOVX @DPTR,A
// 127
// 128 // Calculate the packet duration (including ack. and IFS)
// 129 pPacket->duration = msupCalcPacketDuration(pPacket->length, FALSE);
; Setup parameters for call to function msupCalcPacketDuration
MOV R2,#0x0
LCALL msupCalcPacketDuration
MOV A,R6
ADD A,#-0x7b
MOV DPL,A
MOV A,R7
ADDC A,#0x0
MOV DPH,A
MOV A,R1
MOVX @DPTR,A
// 130
// 131 // Initiate the transmission
// 132 mschAddTask(taskNumber, MAC_TASK_PRI_LOW, mtxScheduleTransmission, (WORD) pPacket);
; Setup parameters for call to function mschAddTask
MOV ?V0 + 0,#(mtxScheduleTransmission & 0xff)
MOV ?V0 + 1,#((mtxScheduleTransmission >> 8) & 0xff)
MOV ?V0 + 2,#((mtxScheduleTransmission >> 16) & 0xff)
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_THREE
CFI CFA_XSP16 add(XSP16, 16)
MOV A,R6
MOV R4,A
MOV A,R7
MOV R5,A
MOV R2,#0x0
MOV R1,?V0 + 3
LCALL mschAddTask
MOV A,#0x3
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 13)
// 133
// 134 return TRUE;
MOV R1,#0x1
??mscTransmitBeaconRequest_3:
LJMP ?Subroutine0
CFI EndBlock cfiBlock2
// 135
// 136 } // mipTransmitDataRequest
// 137
// 138
// 139
// 140
// 141 //-------------------------------------------------------------------------------------------------------
// 142 // BOOL mscTransmitOrphanNotification(void)
// 143 //
// 144 // DESCRIPTION:
// 145 // Transmits an orphan notification during orphan scan.
// 146 //
// 147 // RETURN VALUE:
// 148 // BOOL
// 149 // The transmission was initiated
// 150 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 151 ROOT BOOL mscTransmitOrphanNotification(void) {
mscTransmitOrphanNotification:
CFI Block cfiBlock3 Using cfiCommon0
CFI Function mscTransmitOrphanNotification
FUNCALL mscTransmitOrphanNotification, mtxpReservePacket
LOCFRAME XSTACK, 13, STACK
ARGFRAME XSTACK, 13, STACK
FUNCALL mscTransmitOrphanNotification, mschReserveTask
LOCFRAME XSTACK, 13, STACK
ARGFRAME XSTACK, 13, STACK
FUNCALL mscTransmitOrphanNotification, mtxpReleasePacket
LOCFRAME XSTACK, 13, STACK
ARGFRAME XSTACK, 13, STACK
FUNCALL mscTransmitOrphanNotification, msupPrepareHeader
LOCFRAME XSTACK, 21, STACK
ARGFRAME XSTACK, 21, STACK
FUNCALL mscTransmitOrphanNotification, msupCalcPacketDuration
LOCFRAME XSTACK, 13, STACK
ARGFRAME XSTACK, 13, STACK
FUNCALL mscTransmitOrphanNotification, mschAddTask
LOCFRAME XSTACK, 16, STACK
ARGFRAME XSTACK, 16, STACK
MOV A,#-0xb
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 V3 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 11)
; Saved register size: 11
; Auto size: 2
MOV A,#-0x2
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 13)
// 152 MAC_TX_PACKET *pPacket;
// 153 UINT8 taskNumber;
// 154 WORD broadcast = 0xFFFF;
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV A,#-0x1
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
// 155
// 156 // Try to reserve a packet
// 157 pPacket = mtxpReservePacket();
; Setup parameters for call to function mtxpReservePacket
LCALL mtxpReservePacket
MOV ?V0 + 0,R2
MOV ?V0 + 1,R3
MOV R6,?V0 + 0
MOV R7,?V0 + 1
// 158 if (!pPacket) return FALSE;
MOV A,R6
JNZ ??mscTransmitOrphanNotification_0
MOV A,R7
??mscTransmitOrphanNotification_0:
JNZ ??mscTransmitOrphanNotification_1
??mscTransmitOrphanNotification_2:
MOV R1,#0x0
LJMP ??mscTransmitOrphanNotification_3
// 159
// 160 // Try to reserve a transmission task
// 161 taskNumber = mschReserveTask();
??mscTransmitOrphanNotification_1:
; Setup parameters for call to function mschReserveTask
LCALL mschReserveTask
MOV A,R1
MOV ?V0 + 3,A
// 162 if (taskNumber == NO_TASK) {
MOV A,#-0x1
XRL A,?V0 + 3
JNZ ??mscTransmitOrphanNotification_4
// 163 mtxpReleasePacket(pPacket);
; Setup parameters for call to function mtxpReleasePacket
MOV A,R6
MOV R2,A
MOV A,R7
MOV R3,A
LCALL mtxpReleasePacket
// 164 return FALSE;
SJMP ??mscTransmitOrphanNotification_2
// 165 }
// 166
// 167 // TX mode
// 168 pPacket->txMode = MTX_MODE_USE_CSMACA_BM | MTX_MODE_FORCE_UNSLOTTED_BM | MTX_MODE_SCAN_RELATED_BM;
??mscTransmitOrphanNotification_4:
MOV A,R6
ADD A,#-0x7a
MOV DPL,A
MOV A,R7
ADDC A,#0x0
MOV DPH,A
MOV A,#0xb
MOVX @DPTR,A
// 169 pPacket->retriesLeft = aMaxFrameRetries;
MOV A,R6
ADD A,#-0x6f
MOV DPL,A
MOV A,R7
ADDC A,#0x0
MOV DPH,A
MOV A,#0x3
MOVX @DPTR,A
// 170
// 171 // Generate the packet header
// 172 msupPrepareHeader(pPacket, FT_MAC_COMMAND, DEST_ADDR_SHORT | SRC_ADDR_EXT, broadcast, (ADDRESS *) &aExtendedAddress, broadcast, (ADDRESS *) &broadcast, TX_OPT_NONE);
; Setup parameters for call to function msupPrepareHeader
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV ?V0 + 0,DPL
MOV ?V0 + 1,DPH
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 15)
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
LCALL ?PUSH_XSTACK8_X_TWO
CFI CFA_XSP16 add(XSP16, 17)
MOV ?V0 + 0,#(aExtendedAddress & 0xff)
MOV ?V0 + 1,#((aExtendedAddress >> 8) & 0xff)
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 19)
MOV A,#0x6
LCALL ?XSTACK_DISP0_8
LCALL ?PUSH_XSTACK8_X_TWO
CFI CFA_XSP16 add(XSP16, 21)
MOV R5,#0x0
MOV R4,#-0x38
MOV R1,#0x3
MOV A,R6
MOV R2,A
MOV A,R7
MOV R3,A
LCALL msupPrepareHeader
MOV A,#0x8
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 13)
// 173
// 174 // Generate the packet payload
// 175 pPacket->pPayload[0] = CMD_ORPHAN_NOTIFICATION;
MOV A,R6
ADD A,#0x1a
MOV DPL,A
MOV A,R7
ADDC A,#0x0
MOV DPH,A
MOV A,#0x6
MOVX @DPTR,A
// 176
// 177 // Store the command type
// 178 pPacket->commandType = CMD_ORPHAN_NOTIFICATION;
MOV A,R6
ADD A,#-0x7d
MOV DPL,A
MOV A,R7
ADDC A,#0x0
MOV DPH,A
MOV A,#0x6
MOVX @DPTR,A
// 179
// 180 // Calculate and set the total packet length
// 181 pPacket->length = pPacket->headerLength + CMD_ORPHAN_NOTIFICATION_PAYLOAD_LENGTH + MAC_FCS_LENGTH;
MOV DPL,R6
MOV DPH,R7
INC DPTR
MOVX A,@DPTR
ADD A,#0x3
MOV R1,A
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
MOVX @DPTR,A
// 182
// 183 // Calculate the packet duration (including ack. and IFS)
// 184 pPacket->duration = msupCalcPacketDuration(pPacket->length, FALSE);
; Setup parameters for call to function msupCalcPacketDuration
MOV R2,#0x0
LCALL msupCalcPacketDuration
MOV A,R6
ADD A,#-0x7b
MOV DPL,A
MOV A,R7
ADDC A,#0x0
MOV DPH,A
MOV A,R1
MOVX @DPTR,A
// 185
// 186 // Initiate the transmission
// 187 mschAddTask(taskNumber, MAC_TASK_PRI_LOW, mtxScheduleTransmission, (WORD) pPacket);
; Setup parameters for call to function mschAddTask
MOV ?V0 + 0,#(mtxScheduleTransmission & 0xff)
MOV ?V0 + 1,#((mtxScheduleTransmission >> 8) & 0xff)
MOV ?V0 + 2,#((mtxScheduleTransmission >> 16) & 0xff)
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_THREE
CFI CFA_XSP16 add(XSP16, 16)
MOV A,R6
MOV R4,A
MOV A,R7
MOV R5,A
MOV R2,#0x0
MOV R1,?V0 + 3
LCALL mschAddTask
MOV A,#0x3
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 13)
// 188
// 189 return TRUE;
MOV R1,#0x1
??mscTransmitOrphanNotification_3:
LJMP ?Subroutine0
CFI EndBlock cfiBlock3
// 190
// 191 } // mscTransmitOrphanNotification
// 192
// 193
// 194
// 195
// 196 /*******************************************************************************************************
// 197 *******************************************************************************************************
// 198 ************************** CHANNEL SCANNING + SUPPORT FUNCTIONS **************************
// 199 *******************************************************************************************************
// 200 *******************************************************************************************************/
// 201
// 202
// 203
// 204
// 205 //-------------------------------------------------------------------------------------------------------
// 206 // BOOL mscPanDescriptorExists(PAN_DESCRIPTOR *pPanDescriptor)
// 207 //
// 208 // DESCRIPTION:
// 209 // Used by a scanning device (active or passive scan) to determine whether or not the PAN descriptor
// 210 // from a received beacon already exists in the scan result list. The function returns TRUE if
// 211 // there's a match on coordinator PAN ID + address, and the logical channel.
// 212 //
// 213 // ARGUMENTS:
// 214 // PAN_DESCRIPTOR *pPanDescriptor
// 215 // A pointer to the new PAN descriptor
// 216 //
// 217 // RETURN VALUE:
// 218 // BOOL
// 219 // The PAN descriptor pointed to by pPanDescriptor already exists in the result list.
// 220 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 221 ROOT BOOL mscPanDescriptorExists(PAN_DESCRIPTOR *pPanDescriptor) {
mscPanDescriptorExists:
CFI Block cfiBlock4 Using cfiCommon0
CFI Function mscPanDescriptorExists
FUNCALL mscPanDescriptorExists, msupCompareExtendedAddress
LOCFRAME XSTACK, 11, STACK
ARGFRAME XSTACK, 11, STACK
MOV A,#-0xb
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 V3 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-8)))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -