Prechádzať zdrojové kódy

add: 给network_adapter新增2种lwip网络设备

Wendal Chen 1 rok pred
rodič
commit
dba2da254e

+ 6 - 0
components/network/adapter/luat_lib_socket.c

@@ -1334,6 +1334,12 @@ static const rotable_Reg_t reg_socket_adapter[] =
     //@const CLOSED number CLOSED事件
 	{ "CLOSED",     		ROREG_INT(EV_NW_RESULT_CLOSE & 0x0fffffff)},
 
+	
+	//@const LWIP_SPI number 使用LWIP协议栈的SPI网络
+	{ "LWIP_SPI",          	ROREG_INT(NW_ADAPTER_INDEX_LWIP_GPRS)},
+	//@const LWIP_UART number 使用LWIP协议栈的UART网络
+	{ "LWIP_UART",          	ROREG_INT(NW_ADAPTER_INDEX_LWIP_GPRS)},
+
 	//@const LWIP_USER0 number 使用LWIP协议栈的自定义网卡0, 2025.1.12新增
 	{ "LWIP_USER0",          	ROREG_INT(NW_ADAPTER_INDEX_LWIP_USER0)},
 	//@const LWIP_USER1 number 使用LWIP协议栈的自定义网卡1, 2025.1.12新增

+ 2 - 0
components/network/adapter/luat_network_adapter.h

@@ -94,6 +94,8 @@ enum
 	NW_ADAPTER_INDEX_LWIP_WIFI_STA,	//WIFI SOC
 	NW_ADAPTER_INDEX_LWIP_WIFI_AP,	//WIFI SOC
 	NW_ADAPTER_INDEX_LWIP_ETH,		//自带以太网控制器的SOC
+	NW_ADAPTER_INDEX_LWIP_SPI,		// SPI协议的网卡,无MAC,纯IP包
+	NW_ADAPTER_INDEX_LWIP_UART,     // UART协议的网卡,无MAC,纯IP包
 	NW_ADAPTER_INDEX_LWIP_USER0,
 	NW_ADAPTER_INDEX_LWIP_USER1,
 	NW_ADAPTER_INDEX_LWIP_USER2,

+ 10 - 4
components/network/netdrv/src/luat_netdrv_uart.c

@@ -21,7 +21,7 @@
 
 static luat_netdrv_uart_ctx_t* ctxs[MAX_UART_CTX_ID];
 
-static void uart_dataout(void* userdata, uint8_t* buff, uint16_t len) {
+static void uart_ip_output(void* userdata, uint8_t* buff, uint16_t len) {
     luat_netdrv_uart_ctx_t* uc = (luat_netdrv_uart_ctx_t*)userdata;
     
     memcpy(uc->txbuff, "LU\x00\x00", 4);
@@ -35,6 +35,10 @@ static void uart_dataout(void* userdata, uint8_t* buff, uint16_t len) {
     luat_uart_write(uc->uart_id, uc->txbuff, len + 8);
 }
 
+static void uart_data_input(int uart_id, uint32_t data_len) {
+
+}
+
 static err_t netif_output(struct netif *netif, struct pbuf *p) {
     luat_netdrv_uart_ctx_t* uc = NULL;
     for (size_t i = 0; i < MAX_UART_CTX_ID; i++)
@@ -49,7 +53,7 @@ static err_t netif_output(struct netif *netif, struct pbuf *p) {
         return 0;
     }
     pbuf_copy_partial(p, uc->txbuff + 4, p->tot_len, 0);
-    uart_dataout(uc, uc->txbuff, p->tot_len);
+    uart_ip_output(uc, uc->txbuff, p->tot_len);
     return 0;
 }
 
@@ -89,15 +93,17 @@ luat_netdrv_t* luat_netdrv_uart_setup(luat_netdrv_conf_t *conf) {
     ctx->netdrv.netif = luat_heap_malloc(sizeof(struct netif));
     ctx->netdrv.netif->state = ctx;
     ctx->netdrv.id = conf->id;
-    ctx->netdrv.dataout = uart_dataout;
+    ctx->netdrv.dataout = uart_ip_output;
     // ctx->netdrv.dhcp = uart_dhcp;
     ctx->ulwip.adapter_index = conf->id;
     ctx->ulwip.netif = ctx->netdrv.netif;
     ctx->ulwip.mtu = 1420;
 
     netif_add(ctx->netdrv.netif, IP4_ADDR_ANY4, IP4_ADDR_ANY4, IP4_ADDR_ANY4, ctx, uart_netif_init, netif_input);
+    netif_set_up(ctx->netdrv.netif);
+    netif_set_link_up(ctx->netdrv.netif);
 
-    // TODO 启动uart线程
+    luat_uart_ctrl(ctx->uart_id, LUAT_UART_SET_RECV_CALLBACK, uart_data_input);
 
     return &ctx->netdrv;
 }