Эх сурвалжийг харах

add: airlink,drv,支持wlan库的STA连接操作,并添加demo

Wendal Chen 1 жил өмнө
parent
commit
eb0d2dc5b2

+ 29 - 2
components/airlink/src/driver/luat_airlink_drv_wlan.c

@@ -71,9 +71,36 @@ int luat_airlink_drv_wlan_mode(luat_wlan_config_t *conf);
 
 int luat_airlink_drv_wlan_ready(void);
 
-int luat_airlink_drv_wlan_connect(luat_wlan_conninfo_t* info);
+int luat_airlink_drv_wlan_connect(luat_wlan_conninfo_t* info) {
+    uint64_t luat_airlink_next_cmd_id = luat_airlink_get_next_cmd_id();
+    airlink_queue_item_t item = {
+        .len = sizeof(luat_wlan_conninfo_t) + sizeof(luat_airlink_cmd_t) + 8
+    };
+    luat_airlink_cmd_t* cmd = luat_airlink_cmd_new(0x201, item.len) ;
+    if (cmd == NULL) {
+        return -101;
+    }
+    memcpy(cmd->data, &luat_airlink_next_cmd_id, 8);
+    memcpy(cmd->data + 8, info, sizeof(luat_wlan_conninfo_t));
+    item.cmd = cmd;
+    luat_airlink_queue_send(LUAT_AIRLINK_QUEUE_CMD, &item);
+    return 0;
+}
 
-int luat_airlink_drv_wlan_disconnect(void);
+int luat_airlink_drv_wlan_disconnect(void) {
+    uint64_t luat_airlink_next_cmd_id = luat_airlink_get_next_cmd_id();
+    airlink_queue_item_t item = {
+        .len = sizeof(luat_airlink_cmd_t) + 8
+    };
+    luat_airlink_cmd_t* cmd = luat_airlink_cmd_new(0x202, item.len) ;
+    if (cmd == NULL) {
+        return -101;
+    }
+    memcpy(cmd->data, &luat_airlink_next_cmd_id, 8);
+    item.cmd = cmd;
+    luat_airlink_queue_send(LUAT_AIRLINK_QUEUE_CMD, &item);
+    return 0;
+}
 
 int luat_airlink_drv_wlan_scan(void);
 

+ 2 - 2
components/drv/src/luat_drv_wlan.c

@@ -26,11 +26,11 @@ int luat_drv_wlan_ready(void) {
 }
 
 int luat_drv_wlan_connect(luat_wlan_conninfo_t* info) {
-    return 0;
+    return luat_airlink_drv_wlan_connect(info);
 }
 
 int luat_drv_wlan_disconnect(void) {
-    return 0;
+    return luat_airlink_drv_wlan_disconnect();
 }
 
 int luat_drv_wlan_scan(void) {

+ 40 - 12
demo/airlink/air8000_wifi/main.lua

@@ -5,11 +5,45 @@ VERSION = "1.0.5"
 
 -- sys库是标配
 _G.sys = require("sys")
+require "sysplus"
 dnsproxy = require("dnsproxy")
 dhcpsrv = require("dhcpsrv")
+httpplus = require("httpplus")
 
 PWR8000S = gpio.setup(23, 0, gpio.PULLUP) -- 关闭Air8000S的LDO供电
 
+
+function test_ap()
+    wlan.createAP("uiot5678", "12345678")
+    netdrv.ipv4(socket.LWIP_AP, "192.168.4.1", "255.255.255.0", "0.0.0.0")
+    sys.wait(100)
+    dnsproxy.setup(socket.LWIP_AP, socket.LWIP_GP)
+    dhcpsrv.create({adapter=socket.LWIP_AP})
+    while 1 do
+        if netdrv.ready(socket.LWIP_GP) then
+            netdrv.napt(socket.LWIP_GP)
+            break
+        end
+        sys.wait(1000)
+    end
+end
+
+function test_sta()
+    wlan.connect("uiot", "12345678")
+    netdrv.dhcp(socket.LWIP_STA, true)
+    netdrv.napt(socket.LWIP_STA)
+    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(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, headers, body = http.request("GET", "https://httpbin.air32.cn/bytes/2048", nil, nil, {adapter=socket.LWIP_STA,timeout=3000}).wait()
+        log.info("http执行结果", code, headers, body and #body)
+    end
+end
+
 sys.taskInit(function()
     -- 稍微缓一下
     sys.wait(10)
@@ -24,18 +58,12 @@ sys.taskInit(function()
     sys.wait(100)
     wlan.init()
     sys.wait(100)
-    wlan.createAP("uiot5678", "12345678")
-    netdrv.ipv4(socket.LWIP_AP, "192.168.4.1", "255.255.255.0", "0.0.0.0")
-    sys.wait(100)
-    dnsproxy.setup(socket.LWIP_AP, socket.LWIP_GP)
-    dhcpsrv.create({adapter=socket.LWIP_AP})
-    while 1 do
-        if netdrv.ready(socket.LWIP_GP) then
-            netdrv.napt(socket.LWIP_GP)
-            break
-        end
-        sys.wait(1000)
-    end
+    
+    -- 启动AP测试
+    -- test_ap()
+
+    -- 连接STA测试
+    test_sta()
 end)