📄 mac_indirect_queue.lst
字号:
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 //-------------------------------------------------------------------------------------------------------
\ In segment NEAR_CODE, align 1, keep-with-next
278 ROOT BOOL miqFindAndRequestIndirectPacket(ADDRESS *pDestAddr, BOOL isExtAddr) {
\ miqFindAndRequestIndirectPacket:
\ 000000 74F6 MOV A,#-0xa
\ 000002 12.... LCALL ?FUNC_ENTER_XDATA
\ 000005 ; Saved register size: 10
\ 000005 ; Auto size: 0
\ 000005 8A.. MOV ?V0 + 0,R2
\ 000007 8B.. 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);
\ 000009 E9 MOV A,R1
\ 00000A 6005 JZ ??miqFindAndRequestIndirectPacket_0
\ 00000C 75..0C MOV ?V0 + 2,#0xc
\ 00000F 8003 SJMP ??miqFindAndRequestIndirectPacket_1
\ ??miqFindAndRequestIndirectPacket_0:
\ 000011 75..08 MOV ?V0 + 2,#0x8
284
285 // For each packet in the queue ...
286 temp = miqInfo.firstIndirectPacket;
\ ??miqFindAndRequestIndirectPacket_1:
\ 000014 90.... MOV DPTR,#miqInfo
\ 000017 8014 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:
\ 000019 ; Setup parameters for call to function msupCompareExtendedAddress
\ 000019 AA.. MOV R2,?V0 + 0
\ 00001B AB.. MOV R3,?V0 + 1
\ 00001D 12.... LCALL msupCompareExtendedAddress
\ 000020 E9 MOV A,R1
\ 000021 7053 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:
\ 000023 EE MOV A,R6
\ 000024 248D ADD A,#-0x73
\ 000026 F582 MOV DPL,A
\ 000028 EF MOV A,R7
\ 000029 3400 ADDC A,#0x0
\ 00002B F583 MOV DPH,A
\ ??miqFindAndRequestIndirectPacket_2:
\ 00002D E0 MOVX A,@DPTR
\ 00002E FA MOV R2,A
\ 00002F 74FF MOV A,#-0x1
\ 000031 6A XRL A,R2
\ 000032 604F JZ ??miqFindAndRequestIndirectPacket_6
\ 000034 EA MOV A,R2
\ 000035 75F093 MOV B,#-0x6d
\ 000038 A4 MUL AB
\ 000039 24.. ADD A,#(pMtxPacketPool & 0xff)
\ 00003B FE MOV R6,A
\ 00003C E5F0 MOV A,B
\ 00003E 34.. ADDC A,#((pMtxPacketPool >> 8) & 0xff)
\ 000040 FF MOV R7,A
\ 000041 8E82 MOV DPL,R6
\ 000043 8F83 MOV DPH,R7
\ 000045 A3 INC DPTR
\ 000046 A3 INC DPTR
\ 000047 A3 INC DPTR
\ 000048 A3 INC DPTR
\ 000049 E0 MOVX A,@DPTR
\ 00004A 540C ANL A,#0xc
\ 00004C 65.. XRL A,?V0 + 2
\ 00004E 70D3 JNZ ??miqFindAndRequestIndirectPacket_5
\ 000050 EE MOV A,R6
\ 000051 2408 ADD A,#0x8
\ 000053 FC MOV R4,A
\ 000054 EF MOV A,R7
\ 000055 3400 ADDC A,#0x0
\ 000057 FD MOV R5,A
\ 000058 7408 MOV A,#0x8
\ 00005A 65.. XRL A,?V0 + 2
\ 00005C 70BB JNZ ??miqFindAndRequestIndirectPacket_3
\ 00005E 85..82 MOV DPL,?V0 + 0
\ 000061 85..83 MOV DPH,?V0 + 1
\ 000064 E0 MOVX A,@DPTR
\ 000065 F8 MOV R0,A
\ 000066 A3 INC DPTR
\ 000067 E0 MOVX A,@DPTR
\ 000068 F9 MOV R1,A
\ 000069 8C82 MOV DPL,R4
\ 00006B 8D83 MOV DPH,R5
\ 00006D E0 MOVX A,@DPTR
\ 00006E 68 XRL A,R0
\ 00006F 7003 JNZ ??miqFindAndRequestIndirectPacket_7
\ 000071 A3 INC DPTR
\ 000072 E0 MOVX A,@DPTR
\ 000073 69 XRL A,R1
\ ??miqFindAndRequestIndirectPacket_7:
\ 000074 70AD JNZ ??miqFindAndRequestIndirectPacket_5
\ ??miqFindAndRequestIndirectPacket_4:
\ 000076 ; Setup parameters for call to function miqSetRequested
\ 000076 7901 MOV R1,#0x1
\ 000078 EE MOV A,R6
\ 000079 FA MOV R2,A
\ 00007A EF MOV A,R7
\ 00007B FB MOV R3,A
\ 00007C 12.... LCALL miqSetRequested
\ 00007F 7901 MOV R1,#0x1
\ 000081 8002 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:
\ 000083 7900 MOV R1,#0x0
\ ??miqFindAndRequestIndirectPacket_8:
\ 000085 02.... LJMP ?Subroutine1
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 //-------------------------------------------------------------------------------------------------------
\ In segment NEAR_CODE, align 1, keep-with-next
345 ROOT void miqSetRequested(MAC_TX_PACKET *pPacket, BOOL requested) {
\ miqSetRequested:
\ 000000 74F2 MOV A,#-0xe
\ 000002 12.... LCALL ?FUNC_ENTER_XDATA
\ 000005 ; Saved register size: 14
\ 000005 ; Auto size: 0
346
347 // Unrequested -> requested
348 if (requested && !pPacket->requested) {
\ 000005 EA MOV A,R2
\ 000006 248B ADD A,#-0x75
\ 000008 F5.. MOV ?V0 + 0,A
\ 00000A EB MOV A,R3
\ 00000B 3400 ADDC A,#0x0
\ 00000D F5.. MOV ?V0 + 1,A
\ 00000F E9 MOV A,R1
\ 000010 6058 JZ ??miqSetRequested_0
\ 000012 85..82 MOV DPL,?V0 + 0
\ 000015 85..83 MOV DPH,?V0 + 1
\ 000018 E0 MOVX A,@DPTR
\ 000019 704F JNZ ??miqSetRequested_0
349 if (pPacket->timeToLive > 0) {
\ 00001B EA MOV A,R2
\ 00001C 2489 ADD A,#-0x77
\ 00001E F582 MOV DPL,A
\ 000020 EB MOV A,R3
\ 000021 3400 ADDC A,#0x0
\ 000023 F583 MOV DPH,A
\ 000025 E0 MOVX A,@DPTR
\ 000026 7002 JNZ ??miqSetRequested_1
\ 000028 A3 INC DPTR
\ 000029 E0 MOVX A,@DPTR
\ ??miqSetRequested_1:
\ 00002A 605C JZ ??miqSetRequested_2
350
351 // Create the transmission whn the first packet is requested
352 if (miqInfo.requestedCounter == 0) {
\ 00002C 90.... MOV DPTR,#(miqInfo + 2)
\ 00002F E0 MOVX A,@DPTR
\ 000030 7027 JNZ ??miqSetRequested_3
353 if (mschAddTask(mschReserveTask(), MAC_TASK_PRI_LOW, miqTransmitRequestedPackets, NULL)) {
\ 000032 ; Setup parameters for call to function mschAddTask
\ 000032 75.... MOV ?V0 + 4,#(miqTransmitRequestedPackets & 0xff)
\ 000035 75.... MOV ?V0 + 5,#((miqTransmitRequestedPackets >> 8) & 0xff)
\ 000038 75.... MOV ?V0 + 6,#((miqTransmitRequestedPackets >> 16) & 0xff)
\ 00003B 78.. MOV R0,#?V0 + 4
\ 00003D 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 000040 7A00 MOV R2,#0x0
\ 000042 EA MOV A,R2
\ 000043 C0E0 PUSH A
\ 000045 ; Setup parameters for call to function mschReserveTask
\ 000045 12.... LCALL mschReserveTask
\ 000048 E4 CLR A
\ 000049 FC MOV R4,A
\ 00004A FD MOV R5,A
\ 00004B D0E0 POP A
\ 00004D FA MOV R2,A
\ 00
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -