📄 mac_indirect_queue.s51
字号:
ANL A,#0xc
XRL A,?V0 + 2
JNZ ??miqFindIndirectPacket_5
MOV A,R6
ADD A,#-0x74
MOV DPL,A
MOV A,R7
ADDC A,#0x0
MOV DPH,A
MOVX A,@DPTR
XRL A,#0x1
JZ ??miqFindIndirectPacket_5
MOV A,R6
ADD A,#0x8
MOV R4,A
MOV A,R7
ADDC A,#0x0
MOV R5,A
MOV A,#0x8
XRL A,?V0 + 2
JNZ ??miqFindIndirectPacket_3
MOV DPL,?V0 + 0
MOV DPH,?V0 + 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 ??miqFindIndirectPacket_7
INC DPTR
MOVX A,@DPTR
XRL A,R1
??miqFindIndirectPacket_7:
JNZ ??miqFindIndirectPacket_5
??miqFindIndirectPacket_4:
MOV A,R6
MOV R2,A
MOV A,R7
MOV R3,A
SJMP ??miqFindIndirectPacket_8
// 254 }
// 255
// 256 // Could not find any match
// 257 return NULL;
??miqFindIndirectPacket_6:
MOV R2,#0x0
MOV R3,#0x0
CFI EndBlock cfiBlock2
??miqFindIndirectPacket_8:
REQUIRE ?Subroutine1
; // Fall through to label ?Subroutine1
// 258
// 259 } // miqFindIndirectPacket
RSEG NEAR_CODE:CODE:NOROOT(0)
?Subroutine1:
CFI Block cfiBlock3 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 10)
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-9)))
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(-10)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V2 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,#0x3
LJMP ?FUNC_LEAVE_XDATA
CFI EndBlock cfiBlock3
// 260
// 261 //-------------------------------------------------------------------------------------------------------
// 262 // BOOL miqFindAndRequestIndirectPacket(ADDRESS *pDestAddr, BOOL isExtAddr)
// 263 //
// 264 // DESCRIPTION:
// 265 // Searches through the indirect packet queue for a match on the given address. If successful, the
// 266 // found packet will be requested, and transmitted ASAP.
// 267 //
// 268 // ARGUMENTS:
// 269 // ADDRESS *pDestAddr
// 270 // A pointer to the address to search for
// 271 // BOOL isExtAddr
// 272 // TRUE if pDestAddr points to an extended address
// 273 //
// 274 // RETURN VALUE:
// 275 // BOOL
// 276 // A packet was found and flagged for transmission
// 277 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 278 ROOT BOOL miqFindAndRequestIndirectPacket(ADDRESS *pDestAddr, BOOL isExtAddr) {
miqFindAndRequestIndirectPacket:
CFI Block cfiBlock4 Using cfiCommon0
CFI Function miqFindAndRequestIndirectPacket
FUNCALL miqFindAndRequestIndirectPacket, msupCompareExtendedAddress
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
FUNCALL miqFindAndRequestIndirectPacket, miqSetRequested
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
MOV A,#-0xa
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 V2 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 10)
; Saved register size: 10
; Auto size: 0
MOV ?V0 + 0,R2
MOV ?V0 + 1,R3
// 279 UINT8 temp;
// 280 BYTE destAddrMode;
// 281 MAC_TX_PACKET *pIndirectPacket;
// 282
// 283 destAddrMode = (BYTE)(isExtAddr ? DEST_ADDR_EXT : DEST_ADDR_SHORT);
MOV A,R1
JZ ??miqFindAndRequestIndirectPacket_0
MOV ?V0 + 2,#0xc
SJMP ??miqFindAndRequestIndirectPacket_1
??miqFindAndRequestIndirectPacket_0:
MOV ?V0 + 2,#0x8
// 284
// 285 // For each packet in the queue ...
// 286 temp = miqInfo.firstIndirectPacket;
??miqFindAndRequestIndirectPacket_1:
MOV DPTR,#miqInfo
SJMP ??miqFindAndRequestIndirectPacket_2
// 287 while (temp != NO_PACKET) {
// 288 pIndirectPacket = &pMtxPacketPool[temp];
// 289
// 290 // ... return the packet index if there's a match on the address mode ...
// 291 if (destAddrMode == (pIndirectPacket->pHeader[1] & DEST_ADDR_BM))
// 292 {
// 293
// 294 // ... and the address itself
// 295 if (destAddrMode == DEST_ADDR_SHORT) {
// 296 if (pDestAddr->Short == *((WORD *) &pIndirectPacket->pHeader[5])) {
// 297 miqSetRequested(pIndirectPacket, TRUE);
// 298 return TRUE;
// 299 }
// 300 } else {
// 301 if (msupCompareExtendedAddress(pDestAddr, (ADDRESS *) (pIndirectPacket->pHeader + 5))) {
??miqFindAndRequestIndirectPacket_3:
; Setup parameters for call to function msupCompareExtendedAddress
MOV R2,?V0 + 0
MOV R3,?V0 + 1
LCALL msupCompareExtendedAddress
MOV A,R1
JNZ ??miqFindAndRequestIndirectPacket_4
// 302 miqSetRequested(pIndirectPacket, TRUE);
// 303 return TRUE;
// 304 }
// 305 }
// 306 }
// 307
// 308
// 309 // Move to the next packet in the queue
// 310 temp = pIndirectPacket->nextPacket;
??miqFindAndRequestIndirectPacket_5:
MOV A,R6
ADD A,#-0x73
MOV DPL,A
MOV A,R7
ADDC A,#0x0
MOV DPH,A
??miqFindAndRequestIndirectPacket_2:
MOVX A,@DPTR
MOV R2,A
MOV A,#-0x1
XRL A,R2
JZ ??miqFindAndRequestIndirectPacket_6
MOV A,R2
MOV B,#-0x6d
MUL AB
ADD A,#(pMtxPacketPool & 0xff)
MOV R6,A
MOV A,B
ADDC A,#((pMtxPacketPool >> 8) & 0xff)
MOV R7,A
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
ANL A,#0xc
XRL A,?V0 + 2
JNZ ??miqFindAndRequestIndirectPacket_5
MOV A,R6
ADD A,#0x8
MOV R4,A
MOV A,R7
ADDC A,#0x0
MOV R5,A
MOV A,#0x8
XRL A,?V0 + 2
JNZ ??miqFindAndRequestIndirectPacket_3
MOV DPL,?V0 + 0
MOV DPH,?V0 + 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 ??miqFindAndRequestIndirectPacket_7
INC DPTR
MOVX A,@DPTR
XRL A,R1
??miqFindAndRequestIndirectPacket_7:
JNZ ??miqFindAndRequestIndirectPacket_5
??miqFindAndRequestIndirectPacket_4:
; Setup parameters for call to function miqSetRequested
MOV R1,#0x1
MOV A,R6
MOV R2,A
MOV A,R7
MOV R3,A
LCALL miqSetRequested
MOV R1,#0x1
SJMP ??miqFindAndRequestIndirectPacket_8
// 311 }
// 312
// 313 // Could not find any match (should reply to the data request with a zero-length data packet)
// 314 return FALSE;
??miqFindAndRequestIndirectPacket_6:
MOV R1,#0x0
??miqFindAndRequestIndirectPacket_8:
LJMP ?Subroutine1
CFI EndBlock cfiBlock4
// 315
// 316 } // miqFindAndRequestIndirectPacket
// 317
// 318 /*******************************************************************************************************
// 319 *******************************************************************************************************
// 320 ************************** INDIRECT PACKET TRANSMISSION **************************
// 321 *******************************************************************************************************
// 322 *******************************************************************************************************/
// 323
// 324
// 325
// 326
// 327 //-------------------------------------------------------------------------------------------------------
// 328 // void miqSetRequested(MAC_TX_PACKET *pPacket, BOOL requested)
// 329 //
// 330 // DESCRIPTION:
// 331 // Requests or unrequests indirect packets. This function is responsible for creating the task that
// 332 // initiates the indirect packet transmission.
// 333 //
// 334 // ARGUMENTS:
// 335 // MAC_TX_PACKET *pPacket
// 336 // A pointer to the packet to be requested or unrequested
// 337 // BOOL requested
// 338 // TRUE if the packet should be flagged for transmission, FALSE if the flag is to be cleared
// 339 // (note that this .
// 340 //
// 341 // RETURN VALUE:
// 342 // BOOL
// 343 // A packet was found and flagged for transmission
// 344 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 345 ROOT void miqSetRequested(MAC_TX_PACKET *pPacket, BOOL requested) {
miqSetRequested:
CFI Block cfiBlock5 Using cfiCommon0
CFI Function miqSetRequested
FUNCALL miqSetRequested, mschReserveTask
LOCFRAME ISTACK, 1, STACK
LOCFRAME XSTACK, 17, STACK
ARGFRAME ISTACK, 1, STACK
ARGFRAME XSTACK, 17, STACK
FUNCALL miqSetRequested, mschAddTask
LOCFRAME XSTACK, 17, STACK
ARGFRAME XSTACK, 17, STACK
MOV A,#-0xe
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 V6 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-14)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 14)
; Saved register size: 14
; Auto size: 0
// 346
// 347 // Unrequested -> requested
// 348 if (requested && !pPacket->requested) {
MOV A,R2
ADD A,#-0x75
MOV ?V0 + 0,A
MOV A,R3
ADDC A,#0x0
MOV ?V0 + 1,A
MOV A,R1
JZ ??miqSetRequested_0
MOV DPL,?V0 + 0
MOV DPH,?V0 + 1
MOVX A,@DPTR
JNZ ??miqSetRequested_0
// 349 if (pPacket->timeToLive > 0) {
MOV A,R2
ADD A,#-0x77
MOV DPL,A
MOV A,R3
ADDC A,#0x0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -