Browse Source

add: airlink,drv,添加wifi的ap功能,补回gpio的drv调用

Wendal Chen 1 year ago
parent
commit
633f8a0d2c

+ 55 - 0
components/airlink/include/luat_airlink.h

@@ -1,6 +1,13 @@
 #ifndef LUAT_AIRLINK_H
 #define LUAT_AIRLINK_H
 
+typedef struct luat_airlink_cmd_ext
+{
+    uint64_t pkgid;
+    uint8_t cdata[0];
+}luat_airlink_cmd_ext_t;
+
+
 typedef struct luat_airlink_cmd
 {
     uint16_t cmd; // 命令, 从0x0001开始, 到0xfffe结束
@@ -119,4 +126,52 @@ int luat_airlink_drv_gpio_setup(luat_gpio_t* gpio);
 int luat_airlink_drv_gpio_set(int pin, int level);
 int luat_airlink_drv_gpio_open(luat_gpio_cfg_t* gpio);
 
+// WLAN, 也就是wifi
+#include "luat_wlan.h"
+int luat_airlink_drv_wlan_init(luat_wlan_config_t *conf);
+
+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_disconnect(void);
+
+int luat_airlink_drv_wlan_scan(void);
+
+int luat_airlink_drv_wlan_scan_get_result(luat_wlan_scan_result_t *results, size_t ap_limit);
+
+int luat_airlink_drv_wlan_set_station_ip(luat_wlan_station_info_t *info);
+
+int luat_airlink_drv_wlan_smartconfig_start(int tp);
+
+int luat_airlink_drv_wlan_smartconfig_stop(void);
+
+// 数据类
+int luat_airlink_drv_wlan_get_mac(int id, char* mac);
+int luat_airlink_drv_wlan_set_mac(int id, const char* mac);
+
+int luat_airlink_drv_wlan_get_ip(int type, char* data);
+
+const char* luat_airlink_drv_wlan_get_hostname(int id);
+
+int luat_airlink_drv_wlan_set_hostname(int id, const char* hostname);
+
+// 设置和获取省电模式
+int luat_airlink_drv_wlan_set_ps(int mode);
+
+int luat_airlink_drv_wlan_get_ps(void);
+
+int luat_airlink_drv_wlan_get_ap_bssid(char* buff);
+
+int luat_airlink_drv_wlan_get_ap_rssi(void);
+
+int luat_airlink_drv_wlan_get_ap_gateway(char* buff);
+
+
+// AP类
+int luat_airlink_drv_wlan_ap_start(luat_wlan_apinfo_t *apinfo);
+int luat_airlink_drv_wlan_ap_stop(void);
+
 #endif

+ 109 - 0
components/airlink/src/driver/luat_airlink_drv_wlan.c

@@ -0,0 +1,109 @@
+#include "luat_base.h"
+#include "luat_spi.h"
+#include "luat_airlink.h"
+
+
+#include "luat_rtos.h"
+#include "luat_debug.h"
+#include "luat_spi.h"
+#include "luat_pm.h"
+#include "luat_gpio.h"
+#include "luat_airlink.h"
+#include "luat_mem.h"
+#include "luat_wlan.h"
+
+#define LUAT_LOG_TAG "airlink"
+#include "luat_log.h"
+
+#undef LLOGD
+#define LLOGD(...) 
+
+int luat_airlink_drv_wlan_init(luat_wlan_config_t* args) {
+    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(0x200, 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_ap_start(luat_wlan_apinfo_t* info) {
+    uint64_t luat_airlink_next_cmd_id = luat_airlink_get_next_cmd_id();
+    airlink_queue_item_t item = {
+        .len = sizeof(luat_wlan_apinfo_t) + sizeof(luat_airlink_cmd_t) + 8
+    };
+    luat_airlink_cmd_t* cmd = luat_airlink_cmd_new(0x203, item.len) ;
+    if (cmd == NULL) {
+        return -101;
+    }
+    memcpy(cmd->data, &luat_airlink_next_cmd_id, 8);
+    memcpy(cmd->data + 8, info, sizeof(luat_wlan_apinfo_t));
+    item.cmd = cmd;
+    luat_airlink_queue_send(LUAT_AIRLINK_QUEUE_CMD, &item);
+    return 0;
+};
+
+
+int luat_airlink_drv_wlan_ap_stop(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(0x204, 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_init(luat_wlan_config_t *conf);
+
+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_disconnect(void);
+
+int luat_airlink_drv_wlan_scan(void);
+
+int luat_airlink_drv_wlan_scan_get_result(luat_wlan_scan_result_t *results, size_t ap_limit);
+
+int luat_airlink_drv_wlan_set_station_ip(luat_wlan_station_info_t *info);
+
+int luat_airlink_drv_wlan_smartconfig_start(int tp);
+
+int luat_airlink_drv_wlan_smartconfig_stop(void);
+
+// 数据类
+int luat_airlink_drv_wlan_get_mac(int id, char* mac);
+int luat_airlink_drv_wlan_set_mac(int id, const char* mac);
+
+int luat_airlink_drv_wlan_get_ip(int type, char* data);
+
+const char* luat_airlink_drv_wlan_get_hostname(int id);
+
+int luat_airlink_drv_wlan_set_hostname(int id, const char* hostname);
+
+// 设置和获取省电模式
+int luat_airlink_drv_wlan_set_ps(int mode);
+
+int luat_airlink_drv_wlan_get_ps(void);
+
+int luat_airlink_drv_wlan_get_ap_bssid(char* buff);
+
+int luat_airlink_drv_wlan_get_ap_rssi(void);
+
+int luat_airlink_drv_wlan_get_ap_gateway(char* buff);
+
+

+ 55 - 0
components/airlink/src/exec/luat_airlink_cmd_exec_wlan.c

@@ -0,0 +1,55 @@
+#include "luat_base.h"
+#include "luat_spi.h"
+#include "luat_airlink.h"
+
+
+#include "luat_rtos.h"
+#include "luat_debug.h"
+#include "luat_pm.h"
+#include "luat_airlink.h"
+#include "luat_netdrv.h"
+#include "luat_network_adapter.h"
+#include "lwip/netif.h"
+#include "lwip/pbuf.h"
+#include "luat_wlan.h"
+
+#define LUAT_LOG_TAG "airlink.wlan"
+#include "luat_log.h"
+
+int luat_airlink_cmd_exec_wlan_init(luat_airlink_cmd_t* cmd, void* userdata) {
+    int ret = luat_wlan_init(NULL);
+    LLOGD("luat_wlan_init ret=%d", ret);
+    return 0;
+}
+
+int luat_airlink_cmd_exec_wlan_sta_connect(luat_airlink_cmd_t* cmd, void* userdata) {
+    luat_wlan_conninfo_t* info = (luat_wlan_conninfo_t*)(cmd->data+8);
+    int ret = luat_wlan_connect(info);
+    LLOGD("luat_wlan_connect ret=%d", ret);
+    return 0;
+}
+
+int luat_airlink_cmd_exec_wlan_sta_disconnect(luat_airlink_cmd_t* cmd, void* userdata) {
+    int ret = luat_wlan_disconnect();
+    LLOGD("luat_wlan_disconnect ret=%d", ret);
+    return 0;
+}
+
+int luat_airlink_cmd_exec_wlan_ap_start(luat_airlink_cmd_t* cmd, void* userdata) {
+    luat_wlan_apinfo_t* info = (luat_wlan_apinfo_t*)(cmd->data+8);
+    int ret = luat_wlan_ap_start(info);
+    LLOGD("luat_wlan_ap_start ret=%d", ret);
+    return 0;
+}
+
+int luat_airlink_cmd_exec_wlan_ap_stop(luat_airlink_cmd_t* cmd, void* userdata) {
+    int ret = luat_wlan_ap_stop();
+    LLOGD("luat_wlan_ap_stop ret=%d", ret);
+    return 0;
+}
+
+int luat_airlink_cmd_exec_wlan_scan(luat_airlink_cmd_t* cmd, void* userdata) {
+    int ret = luat_wlan_scan();
+    LLOGD("luat_wlan_scan ret=%d", ret);
+    return 0;
+}

+ 1 - 1
components/airlink/src/luat_airlink_cmds.c

@@ -71,7 +71,7 @@ const luat_airlink_cmd_reg_t airlink_cmds[] = {
     CMD_REG(0x203, wlan_ap_start),
     CMD_REG(0x204, wlan_ap_stop),
     CMD_REG(0x205, wlan_scan),
-    CMD_REG(0x206, wlan_scan_result),
+    // CMD_REG(0x206, wlan_scan_result),
 #endif
 
 #ifdef LUAT_USE_AIRLINK_EXEC_GPIO

+ 1 - 1
components/airlink/src/task/luat_airlink_task.c

@@ -73,7 +73,7 @@ static int luat_airlink_task(void *param) {
 
 void luat_airlink_task_start(void) {
     if (airlink_task_handle == NULL) {
-        luat_rtos_task_create(&airlink_task_handle, 8 * 1024, 50, "airlink", luat_airlink_task, NULL, 1024);
+        luat_rtos_task_create(&airlink_task_handle, 16 * 1024, 50, "airlink", luat_airlink_task, NULL, 1024);
     }
     else {
         LLOGD("airlink task 已经启动过了");

+ 53 - 0
components/drv/include/luat/drv_wlan.h

@@ -0,0 +1,53 @@
+#ifndef __DRV_WLAN_H
+#define __DRV_WLAN_H
+
+#include "luat_base.h"
+#include "luat_wlan.h"
+
+int luat_drv_wlan_init(luat_wlan_config_t *conf);
+
+int luat_drv_wlan_mode(luat_wlan_config_t *conf);
+
+int luat_drv_wlan_ready(void);
+
+int luat_drv_wlan_connect(luat_wlan_conninfo_t* info);
+
+int luat_drv_wlan_disconnect(void);
+
+int luat_drv_wlan_scan(void);
+
+int luat_drv_wlan_scan_get_result(luat_wlan_scan_result_t *results, size_t ap_limit);
+
+int luat_drv_wlan_set_station_ip(luat_wlan_station_info_t *info);
+
+int luat_drv_wlan_smartconfig_start(int tp);
+
+int luat_drv_wlan_smartconfig_stop(void);
+
+// 数据类
+int luat_drv_wlan_get_mac(int id, char* mac);
+int luat_drv_wlan_set_mac(int id, const char* mac);
+
+int luat_drv_wlan_get_ip(int type, char* data);
+
+const char* luat_drv_wlan_get_hostname(int id);
+
+int luat_drv_wlan_set_hostname(int id, const char* hostname);
+
+// 设置和获取省电模式
+int luat_drv_wlan_set_ps(int mode);
+
+int luat_drv_wlan_get_ps(void);
+
+int luat_drv_wlan_get_ap_bssid(char* buff);
+
+int luat_drv_wlan_get_ap_rssi(void);
+
+int luat_drv_wlan_get_ap_gateway(char* buff);
+
+
+// AP类
+int luat_drv_wlan_ap_start(luat_wlan_apinfo_t *apinfo);
+int luat_drv_wlan_ap_stop(void);
+
+#endif

+ 200 - 0
components/drv/src/luat_drv_wlan.c

@@ -0,0 +1,200 @@
+#include "luat_base.h"
+#include "luat_gpio.h"
+#include "luat_mem.h"
+#include "luat_wlan.h"
+#include "luat_airlink.h"
+#include "luat/drv_wlan.h"
+#include "luat_network_adapter.h"
+#include "luat_netdrv.h"
+
+#define LUAT_LOG_TAG "drv.gpio"
+#include "luat_log.h"
+
+// #undef LLOGD
+// #define LLOGD(...) 
+
+int luat_drv_wlan_init(luat_wlan_config_t *conf) {
+    return luat_airlink_drv_wlan_init(conf);
+}
+
+int luat_drv_wlan_mode(luat_wlan_config_t *conf) {
+    return 0;
+}
+
+int luat_drv_wlan_ready(void) {
+    return 1;
+}
+
+int luat_drv_wlan_connect(luat_wlan_conninfo_t* info) {
+    return 0;
+}
+
+int luat_drv_wlan_disconnect(void) {
+    return 0;
+}
+
+int luat_drv_wlan_scan(void) {
+    return 0;
+}
+
+int luat_drv_wlan_scan_get_result(luat_wlan_scan_result_t *results, size_t ap_limit) {
+    return 0;
+}
+
+int luat_drv_wlan_set_station_ip(luat_wlan_station_info_t *info) {
+    return 0;
+}
+
+int luat_drv_wlan_smartconfig_start(int tp) {
+    return -1;
+}
+
+int luat_drv_wlan_smartconfig_stop(void) {
+    return -1;
+}
+
+// 数据类
+int luat_drv_wlan_get_mac(int id, char* mac) {
+    return 0;
+}
+int luat_drv_wlan_set_mac(int id, const char* mac) {
+    return 0;
+}
+
+int luat_drv_wlan_get_ip(int type, char* data) {
+    return 0;
+}
+
+const char* luat_drv_wlan_get_hostname(int id) {
+    return NULL;
+}
+
+int luat_drv_wlan_set_hostname(int id, const char* hostname) {
+    return -1;
+}
+
+// 设置和获取省电模式
+int luat_drv_wlan_set_ps(int mode) {
+    return -1;
+}
+
+int luat_drv_wlan_get_ps(void) {
+    return -1;
+}
+
+int luat_drv_wlan_get_ap_bssid(char* buff) {
+    return -1;
+}
+
+int luat_drv_wlan_get_ap_rssi(void) {
+    return -1;
+}
+
+int luat_drv_wlan_get_ap_gateway(char* buff) {
+    return -1;
+}
+
+
+// AP类
+int luat_drv_wlan_ap_start(luat_wlan_apinfo_t *apinfo) {
+    return luat_airlink_drv_wlan_ap_start(apinfo);
+}
+
+int luat_drv_wlan_ap_stop(void) {
+    return luat_airlink_drv_wlan_ap_stop();
+}
+
+// 下面的都是代理函数
+#ifdef LUAT_USE_DRV_WLAN
+
+// int luat_wlan_init(luat_wlan_config_t *conf) {
+//     return luat_drv_wlan_init(conf);
+// }
+
+int luat_wlan_mode(luat_wlan_config_t *conf) {
+    return luat_drv_wlan_mode(conf);
+}
+
+int luat_wlan_ready(void) {
+    return luat_drv_wlan_ready();
+}
+
+int luat_wlan_connect(luat_wlan_conninfo_t* info) {
+    return luat_drv_wlan_connect(info);
+}
+
+int luat_wlan_disconnect(void) {
+    return luat_drv_wlan_disconnect();
+}
+
+// int luat_wlan_scan(void) {
+//     return luat_drv_wlan_scan();
+// }
+
+// int luat_wlan_scan_get_result(luat_wlan_scan_result_t *results, size_t ap_limit) {
+//     return luat_drv_wlan_scan_get_result(results, ap_limit);
+// }
+
+int luat_wlan_set_station_ip(luat_wlan_station_info_t *info) {
+    return luat_drv_wlan_set_station_ip(info);
+}
+
+int luat_wlan_smartconfig_start(int tp) {
+    return luat_drv_wlan_smartconfig_start(tp);
+}
+
+int luat_wlan_smartconfig_stop(void) {
+    return luat_drv_wlan_smartconfig_stop();
+}
+
+// 数据类
+int luat_wlan_get_mac(int id, char* mac) {
+    return luat_drv_wlan_get_mac(id, mac);
+}
+int luat_wlan_set_mac(int id, const char* mac) {
+    return luat_drv_wlan_set_mac(id, mac);
+}
+
+int luat_wlan_get_ip(int type, char* data) {
+    return luat_drv_wlan_get_ip(type, data);
+}
+
+const char* luat_wlan_get_hostname(int id) {
+    return luat_drv_wlan_get_hostname(id);
+}
+
+int luat_wlan_set_hostname(int id, const char* hostname) {
+    return luat_drv_wlan_set_hostname(id, hostname);
+}
+
+// 设置和获取省电模式
+int luat_wlan_set_ps(int mode) {
+    return luat_drv_wlan_set_ps(mode);
+}
+
+int luat_wlan_get_ps(void) {
+    return luat_drv_wlan_get_ps();
+}
+
+int luat_wlan_get_ap_bssid(char* buff) {
+    return luat_drv_wlan_get_ap_bssid(buff);
+}
+
+int luat_wlan_get_ap_rssi(void) {
+    return luat_drv_wlan_get_ap_rssi();
+}
+
+int luat_wlan_get_ap_gateway(char* buff) {
+    return luat_drv_wlan_get_ap_gateway(buff);
+}
+
+int luat_wlan_ap_start(luat_wlan_apinfo_t *apinfo) {
+    return luat_drv_wlan_ap_start(apinfo);
+}
+
+int luat_wlan_ap_stop(void) {
+    return luat_drv_wlan_ap_stop();
+}
+
+#endif
+

+ 34 - 19
components/wlan/luat_lib_wlan.c

@@ -19,6 +19,9 @@
 
 #include "luat_base.h"
 #include "luat_wlan.h"
+#ifdef LUAT_USE_DRV_WLAN
+#include "luat/drv_wlan.h"
+#endif
 
 #define LUAT_LOG_TAG "wlan"
 #include "luat_log.h"
@@ -39,7 +42,11 @@ static inline void to_ipv4(const char* data, uint8_t* dst) {
 @return bool 成功返回true,否则返回false
 */
 static int l_wlan_init(lua_State* L){
+    #ifdef LUAT_USE_DRV_WLAN
+    int ret = luat_drv_wlan_init(NULL);
+    #else
     int ret = luat_wlan_init(NULL);
+    #endif
     lua_pushboolean(L, ret == 0 ? 1 : 0);
     return 1;
 }
@@ -72,28 +79,14 @@ static int l_wlan_mode(lua_State* L){
         mode = LUAT_WLAN_MODE_STA;
     }
 
-    // switch (mode)
-    // {
-    // case LUAT_WLAN_MODE_NULL:
-    //     LLOGD("wlan mode NULL");
-    //     break;
-    // case LUAT_WLAN_MODE_STA:
-    //     LLOGD("wlan mode STATION");
-    //     break;
-    // case LUAT_WLAN_MODE_AP:
-    //     LLOGD("wlan mode AP");
-    //     break;
-    // case LUAT_WLAN_MODE_APSTA:
-    //     LLOGD("wlan mode AP-STATION");
-    //     break;
-    
-    // default:
-    //     break;
-    // }
     luat_wlan_config_t conf = {
         .mode = mode
     };
+    #ifdef LUAT_USE_DRV_WLAN
+    int ret = luat_drv_wlan_mode(&conf);
+    #else
     int ret = luat_wlan_mode(&conf);
+    #endif
     lua_pushboolean(L, ret == 0 ? 1 : 0);
     return 1;
 }
@@ -104,7 +97,11 @@ static int l_wlan_mode(lua_State* L){
 @return bool 已经连接成功返回true,否则返回false
 */
 static int l_wlan_ready(lua_State* L){
+    #ifdef LUAT_USE_DRV_WLAN
+    lua_pushboolean(L, luat_drv_wlan_ready());
+    #else
     lua_pushboolean(L, luat_wlan_ready());
+    #endif
     return 1;
 }
 
@@ -142,8 +139,11 @@ static int l_wlan_connect(lua_State* L){
     if (len == 6) {
         memcpy(info.bssid, bssid, 6);
     }
-
+    #ifdef LUAT_USE_DRV_WLAN
+    int ret = luat_drv_wlan_connect(&info);
+    #else
     int ret = luat_wlan_connect(&info);
+    #endif
     lua_pushboolean(L, ret == 0 ? 1 : 0);
     return 1;
 }
@@ -154,7 +154,11 @@ static int l_wlan_connect(lua_State* L){
 */
 static int l_wlan_disconnect(lua_State* L){
     (void)L;
+    #ifdef LUAT_USE_DRV_WLAN
+    luat_drv_wlan_disconnect();
+    #else
     luat_wlan_disconnect();
+    #endif
     return 0;
 }
 
@@ -185,7 +189,10 @@ end)
 */
 static int l_wlan_scan(lua_State* L){
     (void)L;
+    #ifdef LUAT_USE_DRV_WLAN
+    #else
     luat_wlan_scan();
+    #endif
     return 0;
 }
 
@@ -391,7 +398,11 @@ static int l_wlan_ap_start(lua_State *L) {
     memcpy(apinfo.ssid, ssid, ssid_len);
     memcpy(apinfo.password, password, password_len);
 
+    #ifdef LUAT_USE_DRV_WLAN
+    int ret = luat_drv_wlan_ap_start(&apinfo);
+    #else
     int ret = luat_wlan_ap_start(&apinfo);
+    #endif
     if (ret)
         LLOGD("apstart ret %d", ret);
     lua_pushboolean(L, ret == 0 ? 1 : 0);
@@ -406,7 +417,11 @@ static int l_wlan_ap_start(lua_State *L) {
 wlan.stopAP()
 */
 static int l_wlan_ap_stop(lua_State *L) {
+    #ifdef LUAT_USE_DRV_WLAN
+    int ret = luat_drv_wlan_ap_stop();
+    #else
     int ret = luat_wlan_ap_stop();
+    #endif
     if (ret)
         LLOGD("apstop ret %d", ret);
     lua_pushboolean(L, ret == 0 ? 1 : 0);

+ 45 - 0
demo/airlink/air8000_wifi/main.lua

@@ -0,0 +1,45 @@
+
+-- LuaTools需要PROJECT和VERSION这两个信息
+PROJECT = "air8000_gpio_ext"
+VERSION = "1.0.5"
+
+-- sys库是标配
+_G.sys = require("sys")
+dnsproxy = require("dnsproxy")
+dhcpsrv = require("dhcpsrv")
+
+PWR8000S = gpio.setup(23, 0, gpio.PULLUP) -- 关闭Air8000S的LDO供电
+
+sys.taskInit(function()
+    -- 稍微缓一下
+    sys.wait(10)
+    -- 初始化airlink
+    airlink.init()
+    -- 启动底层线程, 从机模式
+    airlink.start(1)
+    PWR8000S(1)
+    netdrv.setup(socket.LWIP_STA, netdrv.WHALE)
+    netdrv.setup(socket.LWIP_AP, netdrv.WHALE)
+
+    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
+end)
+
+
+-- 用户代码已结束---------------------------------------------
+-- 结尾总是这一句
+sys.run()
+-- sys.run()之后后面不要加任何语句!!!!!

+ 2 - 2
demo/airlink/air8000s/main.lua

@@ -13,9 +13,9 @@ sys.taskInit(function()
     -- sys.wait(500)
     airlink.start(0)
     wlan.init()
-    -- wlan.connect("uiot", "czcjhp1985cbm")
+    -- wlan.connect("uiot", "12345678")
     sys.wait(500)
-    wlan.createAP("uiot5678", "12345678")
+    -- wlan.createAP("uiot5678", "12345678")
     -- log.info("设置静态IPV4")
     -- netdrv.ipv4(socket.LWIP_ETH, "192.168.1.129", "255.255.255.0", "192.168.1.1")
     -- log.info("ip", socket.localIP(socket.LWIP_ETH))

+ 34 - 0
demo/airlink/air8000s_nop/main.lua

@@ -0,0 +1,34 @@
+
+-- LuaTools需要PROJECT和VERSION这两个信息
+PROJECT = "netdrv"
+VERSION = "1.0.4"
+
+
+-- sys库是标配
+_G.sys = require("sys")
+--[[特别注意, 使用http库需要下列语句]]
+_G.sysplus = require("sysplus")
+
+sys.taskInit(function()
+    -- sys.wait(500)
+    airlink.start(0)
+    wlan.init()
+end)
+
+sys.taskInit(function()
+    -- sys.waitUntil("IP_READY")
+    sys.wait(6000)
+    while 1 do
+        sys.wait(6000)
+        -- log.info("http", http.request("GET", "http://httpbin.air32.cn/bytes/2048", nil, nil, {adapter=socket.LWIP_ETH,timeout=3000}).wait())
+        log.info("lua", rtos.meminfo())
+        log.info("sys", rtos.meminfo("sys"))
+        -- log.info("ticks", mcu.ticks(), hmeta.chip(), hmeta.model(), hmeta.hwver())
+        -- log.info("ip", socket.localIP(socket.LWIP_ETH))
+    end
+end)
+
+-- 用户代码已结束---------------------------------------------
+-- 结尾总是这一句
+sys.run()
+-- sys.run()之后后面不要加任何语句!!!!!

+ 5 - 0
luat/include/luat_gpio.h

@@ -7,9 +7,14 @@
 #include "luat_gpio_legacy.h"
 
 // 若bsp没有定义最大PIN编号, 那么默认给个128吧
+#ifdef LUAT_USE_DRV_GPIO
+#undef LUAT_GPIO_PIN_MAX
+#define LUAT_GPIO_PIN_MAX 256
+#else
 #ifndef LUAT_GPIO_PIN_MAX
 #define LUAT_GPIO_PIN_MAX   (128)
 #endif
+#endif
 
 /**
  * @defgroup luatos_device_gpio GPIO接口

+ 16 - 4
luat/modules/luat_lib_gpio.c

@@ -19,6 +19,10 @@
 #include "luat_mcu.h"
 #include <math.h>
 
+#ifdef LUAT_USE_DRV_GPIO
+#include "luat/drv_gpio.h"
+#endif
+
 #define LUAT_LOG_TAG "gpio"
 #include "luat_log.h"
 
@@ -120,11 +124,7 @@ static int luat_gpio_irq_count(int pin, void* args) {
 
 int luat_gpio_irq_default(int pin, void* args) {
     rtos_msg_t msg = {0};
-#ifdef LUAT_GPIO_PIN_MAX
     if (pin < 0 || pin >= LUAT_GPIO_PIN_MAX) {
-#else
-    if (pin < 0 || pin >= Luat_GPIO_MAX_ID) {
-#endif
         return 0;
     }
 
@@ -284,7 +284,11 @@ static int l_gpio_setup(lua_State *L) {
     {
     	conf.alt_func = -1;
     }
+    #ifdef LUAT_USE_DRV_GPIO
+    int re = luat_drv_gpio_setup(&conf);
+    #else
     int re = luat_gpio_setup(&conf);
+    #endif
     if (re != 0) {
         LLOGW("gpio setup fail pin=%d", conf.pin);
         return 0;
@@ -297,7 +301,11 @@ static int l_gpio_setup(lua_State *L) {
         gpios[conf.pin].lua_ref = conf.lua_ref;
     }
     else if (conf.mode == Luat_GPIO_OUTPUT) {
+        #ifdef LUAT_USE_DRV_GPIO
+        luat_drv_gpio_set(conf.pin, conf.irq); // irq被重用为OUTPUT的初始值
+        #else
         luat_gpio_set(conf.pin, conf.irq); // irq被重用为OUTPUT的初始值
+        #endif
     }
     // 生成闭包
     lua_settop(L, 1);
@@ -445,7 +453,11 @@ static int l_gpio_set(lua_State *L) {
         pin = luaL_checkinteger(L, 1);
         value = luaL_checkinteger(L, 2);
     }
+    #ifdef LUAT_USE_DRV_GPIO
+    luat_drv_gpio_set(pin, value);
+    #else
     luat_gpio_set(pin, value);
+    #endif
     gpio_bit_set(pin, (uint8_t)value);
     return 0;
 }