Receiving Packets on a Network Device
NetDev_Rx() is called by μC/TCP-IP’s Receive task after the Interrupt Service Routine handler has signaled to the Receive task that a receive event has occurred. NetDev_Rx() requires that the device driver return a pointer to the data area containing the received data and return the size of the received frame via pointer.
NetDev_Rx() should perform the following actions:
Check for receive errors, if applicable. If an error should occur during reception, the driver should set
*sizeto 0 and*p_datato(CPU_INT08U *)0and return. Additional steps may be necessary depending on the device being serviced.For Ethernet devices, get the size of the received frame and subtract four bytes for the CRC. It's recommended to first check the frame size to ensure that it is larger than four bytes before performing the subtraction, to ensure that an underflow does not occur. Set
*sizeto the adjusted frame size.Get a new data buffer area by calling
NetBuf_GetDataPtr(). If memory is not available, an error will be returned and the device driver should set*sizeto 0 and*p_datato(CPU_INT08U *)0.If an error does not occur while getting a new data area,
*p_datamust be set to the address of the data area.Set
perrtoNET_DEV_ERR_NONEand return from the receive function. Otherwise, setperrto an appropriate network device error code.