📄 mac_scan.s51
字号:
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: 0
MOV A,R2
MOV R6,A
MOV A,R3
MOV R7,A
// 222 UINT8 n;
// 223 PAN_DESCRIPTOR *pExistingPanDesc;
// 224 MAC_SCAN_RESULT *pScanResult = mscInfo.pScanResult;
MOV DPTR,#(mscInfo + 6)
MOVX A,@DPTR
MOV ?V0 + 2,A
INC DPTR
MOVX A,@DPTR
MOV ?V0 + 3,A
// 225
// 226 // Search for duplicates
// 227 for (n = 0; n < pScanResult->resultListSize; n++) {
MOV ?V0 + 0,#0x0
SJMP ??mscPanDescriptorExists_0
// 228 pExistingPanDesc = &pScanResult->list.pPANDescriptorList[n];
// 229 if ((pPanDescriptor->coordAddrMode == pExistingPanDesc->coordAddrMode ) &&
// 230 (pPanDescriptor->coordPanId == pExistingPanDesc->coordPanId ) &&
// 231 (pPanDescriptor->logicalChannel == pExistingPanDesc->logicalChannel)) {
// 232
// 233 if (pPanDescriptor->coordAddrMode == AM_EXTENDED_64) {
// 234 if (msupCompareExtendedAddress(&pPanDescriptor->coordAddress, &pExistingPanDesc->coordAddress)) return TRUE;
// 235 } else {
// 236 if (pPanDescriptor->coordAddress.Short == pExistingPanDesc->coordAddress.Short) return TRUE;
??mscPanDescriptorExists_1:
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPL,R4
MOV DPH,R5
MOVX A,@DPTR
XRL A,R0
JNZ ??mscPanDescriptorExists_2
INC DPTR
MOVX A,@DPTR
XRL A,R1
??mscPanDescriptorExists_2:
JNZ $+5
LJMP ??mscPanDescriptorExists_3
// 237 }
??mscPanDescriptorExists_4:
INC ?V0 + 0
??mscPanDescriptorExists_0:
MOV DPL,?V0 + 2
MOV DPH,?V0 + 3
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R2,A
MOV A,?V0 + 0
CLR C
SUBB A,R2
JC $+5
LJMP ??mscPanDescriptorExists_5
MOV A,?V0 + 0
MOV B,#0x17
MUL AB
MOV R0,A
MOV R1,B
MOV A,?V0 + 2
ADD A,R0
MOV R0,A
MOV A,?V0 + 3
ADDC A,R1
MOV R1,A
MOV A,#0x6
ADD A,R0
MOV R0,A
CLR A
ADDC A,R1
MOV R1,A
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV ?V0 + 1,A
MOV DPL,R0
MOV DPH,R1
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
XRL A,?V0 + 1
JNZ ??mscPanDescriptorExists_4
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R3,A
MOV DPL,R0
MOV DPH,R1
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
XRL A,R2
JNZ ??mscPanDescriptorExists_6
INC DPTR
MOVX A,@DPTR
XRL A,R3
??mscPanDescriptorExists_6:
JNZ ??mscPanDescriptorExists_4
MOV A,R6
ADD A,#0x16
MOV DPL,A
MOV A,R7
ADDC A,#0x0
MOV DPH,A
MOVX A,@DPTR
MOV R2,A
MOV A,R0
ADD A,#0x16
MOV DPL,A
MOV A,R1
ADDC A,#0x0
MOV DPH,A
MOVX A,@DPTR
XRL A,R2
JZ $+5
LJMP ??mscPanDescriptorExists_4
MOV A,R0
ADD A,#0x8
MOV R4,A
MOV A,R1
ADDC A,#0x0
MOV R5,A
MOV A,R6
ADD A,#0x8
MOV DPL,A
MOV A,R7
ADDC A,#0x0
MOV DPH,A
MOV A,#0x3
XRL A,?V0 + 1
JZ $+5
LJMP ??mscPanDescriptorExists_1
; Setup parameters for call to function msupCompareExtendedAddress
MOV R2,DPL
MOV R3,DPH
LCALL msupCompareExtendedAddress
MOV A,R1
JNZ $+5
LJMP ??mscPanDescriptorExists_4
??mscPanDescriptorExists_3:
MOV R1,#0x1
SJMP ??mscPanDescriptorExists_7
// 238 }
// 239 }
// 240
// 241 // No match
// 242 return FALSE;
??mscPanDescriptorExists_5:
MOV R1,#0x0
??mscPanDescriptorExists_7:
LJMP ??Subroutine0_0
CFI EndBlock cfiBlock4
// 243
// 244 } // mscPanDescriptorExists
// 245
// 246
// 247
// 248
// 249 //-------------------------------------------------------------------------------------------------------
// 250 // BOOL mscSetNextChannel(void)
// 251 //
// 252 // DESCRIPTION:
// 253 // Finds the next valid channel during scan (changes the mscInfo.currentChannel variable), and
// 254 // updates the unscanned channels mask.
// 255 //
// 256 // RETURN VALUE:
// 257 // BOOL
// 258 // FALSE when there are no more channels to scan.
// 259 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 260 ROOT BOOL mscSetNextChannel(void) {
mscSetNextChannel:
CFI Block cfiBlock5 Using cfiCommon0
CFI Function mscSetNextChannel
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
// 261 UINT8 n;
// 262 DWORD bitmask = 0x00000001;
MOV DPTR,#__Constant_1
MOV R0,#?V0 + 4
LCALL ?L_MOV_X
// 263
// 264 // Go through the channels
// 265 mscInfo.currentChannel++;
MOV DPTR,#(mscInfo + 8)
MOVX A,@DPTR
INC A
MOVX @DPTR,A
// 266 for (n = 0; n < 27; n++) {
MOV R2,#0x0
// 267 if (n >= mscInfo.currentChannel) {
??mscSetNextChannel_0:
MOV DPTR,#(mscInfo + 8)
MOVX A,@DPTR
MOV R3,A
MOV A,R2
CLR C
SUBB A,R3
JC ??mscSetNextChannel_1
// 268 if (bitmask & mscInfo.scanChannels) {
MOV ?V0 + 0,?V0 + 4
MOV ?V0 + 1,?V0 + 5
MOV ?V0 + 2,?V0 + 6
MOV ?V0 + 3,?V0 + 7
MOV DPTR,#(mscInfo + 1)
MOV R0,#?V0 + 0
LCALL ?L_AND_X
MOV DPTR,#__Constant_0
MOV R0,#?V0 + 0
LCALL ?L_EQ_X
JZ ??mscSetNextChannel_1
// 269 mscInfo.currentChannel = n;
MOV A,R2
MOV DPTR,#(mscInfo + 8)
MOVX @DPTR,A
// 270 mscInfo.pScanResult->unscannedChannels &= ~bitmask;
MOV R0,#?V0 + 4
LCALL ?L_NOT
MOV DPTR,#(mscInfo + 6)
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV DPH,A
MOV DPL,R0
INC DPTR
MOV R0,#?V0 + 4
LCALL ?L_AND_TO_X
// 271 return TRUE;
MOV R1,#0x1
SJMP ??mscSetNextChannel_2
// 272 }
// 273 }
// 274 bitmask = bitmask << 1;
??mscSetNextChannel_1:
MOV A,#0x1
MOV R0,#?V0 + 4
LCALL ?L_SHL
// 275 }
INC R2
MOV A,R2
CLR C
SUBB A,#0x1b
JC ??mscSetNextChannel_0
// 276 return FALSE;
MOV R1,#0x0
??mscSetNextChannel_2:
MOV R7,#0x8
LJMP ?FUNC_LEAVE_XDATA
CFI EndBlock cfiBlock5
// 277
// 278 } // mscSetNextChannel
// 279
// 280
// 281
// 282
// 283 //-------------------------------------------------------------------------------------------------------
// 284 // void mscChannelTimeout(void)
// 285 //
// 286 // DESCRIPTION:
// 287 // Callback used by the scanning mechanism to indicate that the current channel has been finished.
// 288 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 289 void mscChannelTimeout(void) NEAR {
mscChannelTimeout:
CFI Block cfiBlock6 Using cfiCommon1
CFI Function mscChannelTimeout
PUSH DPL
CFI DPL0 Frame(CFA_SP, 4)
CFI CFA_SP SP+-4
PUSH DPH
CFI DPH0 Frame(CFA_SP, 5)
CFI CFA_SP SP+-5
; Saved register size: 2
; Auto size: 0
// 290 mscInfo.channelComplete = TRUE;
MOV A,#0x1
MOV DPTR,#(mscInfo + 9)
MOVX @DPTR,A
// 291 } // mscChannelTimeout
POP DPH
CFI DPH0 SameValue
CFI CFA_SP SP+-4
POP DPL
CFI DPL0 SameValue
CFI CFA_SP SP+-3
LJMP ?BRET
CFI EndBlock cfiBlock6
// 292
// 293
// 294
// 295
// 296 //-------------------------------------------------------------------------------------------------------
// 297 // void mscChannelTimeout(void)
// 298 //
// 299 // DESCRIPTION:
// 300 // This task implements the scan state machine.
// 301 //
// 302 // TASK DATA:
// 303 // 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -