static void prvENET_Send(void) { RequestSend(); /* Copy the header into the Tx buffer. */ CopyToFrame_EMAC( uip_buf, uipTOTAL_FRAME_HEADER_SIZE ); if( uip_len > uipTOTAL_FRAME_HEADER_SIZE ) { CopyToFrame_EMAC( uip_appdata, ( uip_len - uipTOTAL_FRAME_HEADER_SIZE ) ); } DoSend_EMAC( uip_len ); }
static err_t low_level_output(struct netif *netif, struct pbuf *p) { // struct ethernetif *ethernetif = netif->state; struct pbuf *q; // initiate transfer(); #if ETH_PAD_SIZE pbuf_header(p, -ETH_PAD_SIZE); /* drop the padding word */ #endif if(xSemaphoreTake(semEthTx, portMAX_DELAY) == pdTRUE ) { RequestSend(p->tot_len); for(q = p; q != NULL; q = q->next) { /* Send the data from the pbuf to the interface, one pbuf at a time. The size of the data in each pbuf is kept in the ->len variable. */ //send data from(q->payload, q->len); CopyToFrame_EMAC_Start(q->payload, q->len); } //signal that packet should be sent(); CopyToFrame_EMAC_End(); } pbuf_free(p); #if ETH_PAD_SIZE pbuf_header(p, ETH_PAD_SIZE); /* reclaim the padding word */ #endif LINK_STATS_INC(link.xmit); return ERR_OK; }