doubao_chat/lib/net/uip/port/wifi-tapdev.c

53 lines
1.6 KiB
C

#include "uip.h"
#include "string.h"
#include "wifi-tapdev.h"
#include "device/device.h"
#include "uip_arp.h"
#include "uip_timer.h"
extern void netdev_rx_register(void (*fun)(void *priv, void *data, unsigned int len), void *priv);
extern void *netdev_alloc_output_buf(unsigned char **buf, unsigned int len);
extern int netdev_send_data(void *priv, void *skb);
extern void UipPro(void);
extern int wifi_get_mac(u8 *mac_addr);
extern int uip_test_main(char *mac);
static void uip_rx_cb(void *param, void *data, int len)//接收数据
{
memcpy(uip_buf, data, len); //拷贝网卡接收到的数据到uip全局变量
uip_len = len ;//将接收到的数据长度传入uip全局变量
/*put_buf(uip_buf, len);*/
DEBUG_PRINTF(">>>>>>>>>>>>>>RX len = %d \r\n", len);
}
void tapdev_init(void)
{
unsigned char mac[6];
DEBUG_PRINTF(">>>>>>>>>>uip_init<<<<<<<<<");
wifi_get_mac(mac);//获取网卡MAC地址传入uip全局变量
memcpy(uip_ethaddr.addr, mac, 6);
netdev_rx_register((void (*)(void *, void *, unsigned int))uip_rx_cb, NULL);//注册回调函数接收网卡数据
}
void tapdev_send(void)
{
char *buffer, *pos;
buffer = (char *)netdev_alloc_output_buf((unsigned char **)(&pos), uip_len);//申请发送buf内存 申请的buf 为 ops buffer为结构体地址
if (buffer == NULL) {
printf("alloc_uip_buf [erro]!!!!");
}
/*put_buf(uip_buf, uip_len);*/
DEBUG_PRINTF("uip_send_buf len = %d \r\n", uip_len);
memcpy(pos, uip_buf, uip_len);//将发送的数据拷贝到申请的buf内存中
netdev_send_data(NULL, buffer);//网卡发送数据
}