Просмотр исходного кода

change: netdrv-whale初始化归入netdrv.setup函数统一初始化

Wendal Chen 1 год назад
Родитель
Сommit
4fb14a87ab

+ 1 - 21
components/airlink/src/luat_airlink.c

@@ -20,27 +20,7 @@ extern int luat_airlink_start_master(void);
 
 int luat_airlink_init(void)
 {
-    luat_netdrv_whale_t cfg = {0};
-    luat_netdrv_t *drv = NULL;
-    // 注册2个网络设备, STA和AP
-    cfg.id = NW_ADAPTER_INDEX_LWIP_WIFI_STA;
-    cfg.flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_IGMP | NETIF_FLAG_MLD6;
-    cfg.mtu = 1460;
-    drv = luat_netdrv_whale_create(&cfg);
-    if (drv != NULL)
-    {
-        // LLOGD("注册STA网络设备");
-        luat_netdrv_register(cfg.id, drv);
-    }
-
-    // AP设备
-    cfg.id = NW_ADAPTER_INDEX_LWIP_WIFI_AP;
-    drv = luat_netdrv_whale_create(&cfg);
-    if (drv != NULL)
-    {
-        // LLOGD("注册AP网络设备");
-        luat_netdrv_register(cfg.id, drv);
-    }
+    // TODO Air8000自动新增设备?
     return 0;
 }
 

+ 11 - 0
components/network/netdrv/binding/luat_lib_netdrv.c

@@ -58,6 +58,16 @@ static int l_netdrv_setup(lua_State *L) {
             conf.irqpin = luaL_checkinteger(L, -1);
         };
         lua_pop(L, 1);
+
+        if (lua_getfield(L, 3, "mtu") == LUA_TNUMBER) {
+            conf.mtu = luaL_checkinteger(L, -1);
+        };
+        lua_pop(L, 1);
+
+        if (lua_getfield(L, 3, "flags") == LUA_TNUMBER) {
+            conf.flags = luaL_checkinteger(L, -1);
+        };
+        lua_pop(L, 1);
     }
     luat_netdrv_t* ret = luat_netdrv_setup(&conf);
     lua_pushboolean(L, ret != NULL);
@@ -253,6 +263,7 @@ static const rotable_Reg_t reg_netdrv[] =
     { "W5500",          ROREG_INT(3)}, // 考虑兼容Air780E/Air105的老客户
     { "UART",           ROREG_INT(16)}, // UART形式的网卡, 不带MAC, 直接IP包
     { "SPINET",         ROREG_INT(32)}, // SPI形式的网卡, 可以带MAC, 也可以不带
+    { "WHALE",          ROREG_INT(64)}, // 通用WHALE设备
 	{ NULL,             ROREG_INT(0) }
 };
 

+ 2 - 0
components/network/netdrv/include/luat_netdrv.h

@@ -31,6 +31,8 @@ typedef struct luat_netdrv_conf
     uint8_t cspin;
     uint8_t rstpin;
     uint8_t irqpin;
+    uint16_t mtu;
+    uint8_t flags;
 }luat_netdrv_conf_t;
 
 typedef struct luat_netdrv_statics_item

+ 10 - 2
components/network/netdrv/src/luat_netdrv.c

@@ -2,8 +2,8 @@
 #include "luat_netdrv.h"
 #include "luat_network_adapter.h"
 #ifdef __LUATOS__
-#include "luat_netdrv_ch390h.h"
-#include "luat_netdrv_uart.h"
+// #include "luat_netdrv_ch390h.h"
+// #include "luat_netdrv_uart.h"
 #endif
 #include "luat_mem.h"
 #include "luat_airlink.h"
@@ -13,6 +13,10 @@
 
 static luat_netdrv_t* drvs[NW_ADAPTER_QTY];
 
+luat_netdrv_t* luat_netdrv_ch390h_setup(luat_netdrv_conf_t *conf);
+luat_netdrv_t* luat_netdrv_uart_setup(luat_netdrv_conf_t *conf);
+luat_netdrv_t* luat_netdrv_whale_setup(luat_netdrv_conf_t *conf);
+
 luat_netdrv_t* luat_netdrv_setup(luat_netdrv_conf_t *conf) {
     if (conf->id < 0 || conf->id >= NW_ADAPTER_QTY) {
         return NULL;
@@ -28,6 +32,10 @@ luat_netdrv_t* luat_netdrv_setup(luat_netdrv_conf_t *conf) {
             drvs[conf->id] = luat_netdrv_uart_setup(conf);
             return drvs[conf->id];
         }
+        if (conf->impl == 64) { // UART
+            drvs[conf->id] = luat_netdrv_whale_setup(conf);
+            return drvs[conf->id];
+        }
         #endif
     }
     else {

+ 20 - 0
components/network/netdrv/src/luat_netdrv_whale.c

@@ -175,3 +175,23 @@ luat_netdrv_t* luat_netdrv_whale_create(luat_netdrv_whale_t* tmp) {
     netdrv->userdata = cfg;
     return netdrv;
 }
+
+luat_netdrv_t*  luat_netdrv_whale_setup(luat_netdrv_conf_t* conf) {
+    luat_netdrv_whale_t cfg = {0};
+    cfg.id = conf->id;
+    cfg.flags = conf->flags;
+    cfg.mtu = conf->mtu;
+
+    if (cfg.flags == 0) {
+        if (cfg.id == NW_ADAPTER_INDEX_LWIP_WIFI_STA || cfg.id == NW_ADAPTER_INDEX_LWIP_WIFI_AP) {
+            cfg.flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_IGMP | NETIF_FLAG_MLD6;
+        }
+    }
+
+    luat_netdrv_t* drv = luat_netdrv_whale_create(&cfg);
+    if (drv == NULL) {
+        return NULL;
+    }
+    drv->boot(drv, drv->userdata);
+    return drv;
+}

+ 7 - 7
demo/airlink/air780epm/main.lua

@@ -17,8 +17,8 @@ sys.taskInit(function()
     -- 初始化airlink
     airlink.init()
     log.info("注册STA和AP设备")
-    netdrv.setup(socket.LWIP_STA)
-    netdrv.setup(socket.LWIP_AP)
+    netdrv.setup(socket.LWIP_STA, netdrv.WHALE)
+    netdrv.setup(socket.LWIP_AP, netdrv.WHALE)
     -- 启动底层线程, 从机模式
     airlink.start(1)
     sys.wait(100)
@@ -28,16 +28,16 @@ sys.taskInit(function()
     sys.wait(5000)
 
     netdrv.ipv4(socket.LWIP_STA, "192.168.1.35", "255.255.255.0", "192.168.1.1")
-
+    sys.wait(1000)
     while 1 do
         -- log.info("MAC地址", netdrv.mac(socket.LWIP_STA))
         -- log.info("IP地址", netdrv.ipv4(socket.LWIP_STA))
         -- log.info("ready?", netdrv.ready(socket.LWIP_STA))
-        sys.wait(5000)
+        sys.wait(1000)
         log.info("执行http请求")
-        local code = http.request("GET", "http://192.168.1.15:8000/README.md", nil, nil, {adapter=socket.LWIP_STA,timeout=3000}).wait()
-        -- local code = http.request("GET", "http://112.125.89.8:42376/get", nil, nil, {adapter=socket.LWIP_STA,timeout=3000}).wait()
-        log.info("http执行结果", code, "=============================================")
+        -- local code = http.request("GET", "http://192.168.1.15:8000/README.md", nil, nil, {adapter=socket.LWIP_STA,timeout=3000}).wait()
+        local code, headers, body = http.request("GET", "https://httpbin.air32.cn/bytes/2048", nil, nil, {adapter=socket.LWIP_STA,timeout=3000}).wait()
+        log.info("http执行结果", code, code, headers, body)
     end
 end)