WARP Project Forums - Wireless Open-Access Research Platform

You are not logged in.

#1 2010-Mar-01 11:40:33

Alessia
Member
Registered: 2009-Nov-30
Posts: 4

warpphy_pollRxStatus...

Hi everybody,

I have implemented RTS/CTS handshake on top of 12.1 reference model. In my design, I use warpphy_pollRxStatus() function for packet reception purpose inside another function "void phyRx_goodHeader_callback" in csmaMac.c file. Below, you find part of phyRx_goodHeader_callback function, which still uses warpphy_pollRxStatus based on our methodology.

    if(packet->header.pktType == RTS) {
        while(rxStatus == INCOMPLETE) {
            rxStatus = warpphy_pollRxStatus();
        }
        if(rxStatus == GOOD) {
            sendCTS(packet);
        }
                .....
        }

Note that in 12.1 reference design, the function warpphy_pollRxStatus is not used for performing packet reception at the MAC layer (as far as I observed by verifying the codes... Hopefully I am not mistaken). On the other hand, I know that this function is only used by reference design 11.2. Now my main question is whether it is correct to simply import the function definition for warpphy_pollRxStatus() to reference design 12.1 and use this function to perform packet reception, rather than the approach used by 12.1 reference design which uses the so-called fast reply methodology. I came up with the decision to use warpphy_pollRxStatus() for packet reception since it was not really clear to me which function in 12.1 was the responsible for handling the packet reception after detection of packet header.

Looking forward to hearing from you guys and thanks for your great job and the excellent community over here.

Regards,
Alessia

Last edited by Alessia (2010-Mar-01 11:41:07)

Offline

 

#2 2010-Mar-01 12:13:00

murphpo
Administrator
From: Mango Communications
Registered: 2006-Jul-03
Posts: 5159

Re: warpphy_pollRxStatus...

v12.1 (and later) designs use warpmac_finishPhyRecv(), like:

Code:

state = warpmac_finishPhyRecv();

where state is 0x1 or 0x2 for good and bad payloads. This function is defined in warpmac.c as:

Code:

inline char warpmac_finishPhyRecv(){
	
	unsigned char state = PHYRXSTATUS_INCOMPLETE;
	while(state == PHYRXSTATUS_INCOMPLETE) {
		//Blocks until the PHY reports the received packet as either good or bad
		state = mimo_ofdmRx_getPayloadStatus();
	}
	return state;
}

Notice this function loops until the status changes to 0x1 or 0x2. This loop works exactly the same as the v11 design (both poll the same PHY register), but pushes the loop down one level. This change removes one function call per loop (since the loop is pushed down to warpmac), which can reduce the Rx->Tx latency.

Offline

 

Board footer