Przeglądaj źródła

Merge branch 'master' of https://gitee.com/openLuat/LuatOS

alienwalker 7 miesięcy temu
rodzic
commit
b475fb2771
31 zmienionych plików z 1512 dodań i 969 usunięć
  1. 3 1
      components/airlink/src/task/luat_airlink_spi_master_task.c
  2. 3 3
      components/network/netdrv/binding/luat_lib_netdrv.c
  3. 4 3
      components/pins/src/luat_pins.c
  4. 826 857
      luat/vfs/luat_inline_libs_64bit_size32.c
  5. 24 0
      module/Air780EGH/demo/adc/main.lua
  6. 83 0
      module/Air780EGH/demo/adc/testAdc.lua
  7. 51 0
      module/Air780EGH/demo/uart/uart/main.lua
  8. 48 0
      module/Air780EGH/demo/uart/uart_rs485/main.lua
  9. 77 0
      module/Air780EGH/demo/uart/uart_two/main.lua
  10. 61 0
      module/Air780EGH/demo/uart/uart_vir/main.lua
  11. 10 9
      module/Air780EHM/demo/sfud/readme.md
  12. 9 2
      module/Air780EHM/demo/sfud/sfud_test.lua
  13. 3 3
      module/Air780EHM/demo/tf/main.lua
  14. 4 4
      module/Air780EHM/demo/tf/readme.md
  15. 16 24
      module/Air780EHM/demo/tf/tf_test.lua
  16. 25 0
      module/Air8000/demo/ble/ibeacon/check_wifi.lua
  17. 1 5
      module/Air8000/demo/ble/ibeacon/main.lua
  18. 25 0
      module/Air8000/demo/ble/master/check_wifi.lua
  19. 2 6
      module/Air8000/demo/ble/master/main.lua
  20. 25 0
      module/Air8000/demo/ble/peripheral/check_wifi.lua
  21. 1 5
      module/Air8000/demo/ble/peripheral/main.lua
  22. 25 0
      module/Air8000/demo/ble/scan/check_wifi.lua
  23. 1 5
      module/Air8000/demo/ble/scan/main.lua
  24. 25 1
      module/Air8000/demo/wifi_location/main.lua
  25. 22 3
      module/Air8000/demo/wlan/AP/main.lua
  26. 25 6
      module/Air8000/demo/wlan/Power_Save/main.lua
  27. 23 3
      module/Air8000/demo/wlan/STA/main.lua
  28. 24 4
      module/Air8000/demo/wlan/wifi_configuration_network_by_ap/main.lua
  29. 24 3
      module/Air8000/demo/wlan/wifi_scan/main.lua
  30. 18 17
      script/libs/espblufi.lua
  31. 24 5
      script/libs/fota_wifi.lua

+ 3 - 1
components/airlink/src/task/luat_airlink_spi_master_task.c

@@ -303,7 +303,9 @@ __USER_FUNC_IN_RAM__ void airlink_wait_and_prepare_data(uint8_t *txbuff)
     }
     else
     {
-        LLOGI("从机内存高水位, 停止下发IP数据");
+        if (g_airlink_debug) {
+            LLOGI("从机内存高水位, 停止下发IP数据");
+        }
     }
     if (item.len > 0 && item.cmd != NULL)
     {

+ 3 - 3
components/network/netdrv/binding/luat_lib_netdrv.c

@@ -112,7 +112,7 @@ log.info("netdrv", "mac addr", netdrv.mac(socket.LWIP_ETH))
 */
 static int l_netdrv_mac(lua_State *L) {
     int id = luaL_checkinteger(L, 1);
-    char buff[6] = {0};
+    uint8_t buff[6] = {0};
     char tmpbuff[13] = {0};
     size_t len = 0;
     if (lua_type(L, 2) == LUA_TSTRING) {
@@ -120,10 +120,10 @@ static int l_netdrv_mac(lua_State *L) {
         if (len != 6) {
             return 0;
         }
-        luat_netdrv_mac(id, tmp, buff);
+        luat_netdrv_mac(id, tmp, (char*)buff);
     }
     else {
-        luat_netdrv_mac(id, NULL, buff);
+        luat_netdrv_mac(id, NULL, (char*)buff);
     }
     if (lua_isboolean(L, 3) && !lua_toboolean(L, 3)) {
         lua_pushlstring(L, (const char*)buff, 6);

+ 4 - 3
components/pins/src/luat_pins.c

@@ -34,7 +34,7 @@ static int search(char *string, size_t string_len, const char **table, uint8_t l
 
 static luat_pin_peripheral_function_description_u luat_pin_function_analyze(char *string, size_t len)
 {
-	luat_pin_peripheral_function_description_u description;
+	luat_pin_peripheral_function_description_u description = {0};
 	char *old = string;
 	size_t org_len = len;
 	size_t offset = 0;
@@ -315,14 +315,15 @@ int luat_pins_setup(uint16_t pin, const char* func_name, size_t name_len, int al
 			goto LUAT_PIN_SETUP_DONE;
 		}
 		// GPIO128 及以上的, 不支持配置
-		if (func_description.function_id == LUAT_MCU_PERIPHERAL_GPIO && func_description.peripheral_id >= 128) {
+		if (func_description.peripheral_type == LUAT_MCU_PERIPHERAL_GPIO && func_description.code >= 128) {
 			goto LUAT_PIN_SETUP_DONE;
 		}
 		// UART10 及以上的, 不支持配置
-		if (func_description.function_id == LUAT_MCU_PERIPHERAL_UART && func_description.peripheral_id >= 10) {
+		if (func_description.peripheral_type == LUAT_MCU_PERIPHERAL_UART && func_description.code >= 10) {
 			goto LUAT_PIN_SETUP_DONE;
 		}
 	}
+	LLOGD("luat_pins_setup pin %d func %.*s fid %d pid %d", pin, (int)name_len, func_name, func_description.function_id, func_description.peripheral_id);
 	if (luat_pin_get_description_from_num(pin, &pin_description))
 	{
 		LLOGE("pin%d不支持修改", pin);

Plik diff jest za duży
+ 826 - 857
luat/vfs/luat_inline_libs_64bit_size32.c


+ 24 - 0
module/Air780EGH/demo/adc/main.lua

@@ -0,0 +1,24 @@
+
+-- LuaTools需要PROJECT和VERSION这两个信息
+PROJECT = "adcdemo"
+VERSION = "1.0.0"
+
+log.info("main", PROJECT, VERSION)
+
+-- 一定要添加sys.lua !!!!
+sys = require("sys")
+
+-- 添加硬狗防止程序卡死
+if wdt then
+    wdt.init(9000) -- 初始化watchdog设置为9s
+    sys.timerLoopStart(wdt.feed, 3000) -- 3s喂一次狗
+end
+
+local testAdc = require "testAdc"
+sys.taskInit(testAdc.dotest)
+
+
+-- 用户代码已结束---------------------------------------------
+-- 结尾总是这一句
+sys.run()
+-- sys.run()之后后面不要加任何语句!!!!!

+ 83 - 0
module/Air780EGH/demo/adc/testAdc.lua

@@ -0,0 +1,83 @@
+
+--[[
+1. Air101,Air103 模块上的ADC0脚-PA1, 0~2.4v,不要超过范围使用!!!
+2. Air101,Air103模块上的ADC1脚-PA4, 0~2.4v,不要超过范围使用!!!
+3. Air103 模块上的ADC2脚-PA2, 0~2.4v,不要超过范围使用!!!
+4. Air103 模块上的ADC3脚-PA3, 0~2.4v,不要超过范围使用!!!
+5. Air101,Air103 adc.CH_CPU 为内部温度 ,adc.CH_VBAT为VBAT
+6. Air105 adc参考电压是1.88V,所有通道一致,
+7. Air105内部分压没有隔离措施,在开启内部分压后,量程有所变化,具体看寄存器手册,1~5分压后能测到3.6,6通道能接近5V,但是不能直接测5V,可以测4.2V 0通道是始终开启无法关闭分压。
+8. Air780E内部ADC接口为12bits 外部直流分压为0-3.4V
+9. Air780E内部具有2个ADC接口,ADC0 -- AIO3 ADC1 -- AIO4
+10. 特殊通道, CPU内部温度Temp -- adc.CH_CPU 主供电脚电压 VBAT -- adc.CH_VBAT
+11. 设置分压(adc.setRange)要在adc.open之前设置,否则无效!!
+]]
+
+local testAdc = {}
+
+function adc_pin()
+    --Air780EGH开发板ADC编号
+    -- 默认不开启分压,范围是0-1.1v精度高
+    -- 开启分压后,外部输入最大不可超过3.3V
+    -- 设置分压要在adc.open之前设置,否则无效!!
+    -- adc.setRange(adc.ADC_RANGE_MAX)
+    return 0,1,255,255,adc.CH_CPU ,adc.CH_VBAT
+end
+local adc_pin_0,adc_pin_1,adc_pin_2,adc_pin_3,adc_pin_temp,adc_pin_vbat=adc_pin()
+
+
+function testAdc.dotest()
+    if adc_pin_0 and adc_pin_0 ~= 255 then adc.open(adc_pin_0) end
+    if adc_pin_1 and adc_pin_1 ~= 255 then adc.open(adc_pin_1) end
+    if adc_pin_2 and adc_pin_2 ~= 255 then adc.open(adc_pin_2) end
+    if adc_pin_3 and adc_pin_3 ~= 255 then adc.open(adc_pin_3) end
+    if adc_pin_temp and adc_pin_temp ~= 255 then adc.open(adc_pin_temp) end
+    if adc_pin_vbat and adc_pin_vbat ~= 255 then adc.open(adc_pin_vbat) end
+
+    if adc_pin_0 and adc_pin_0 ~= 255 and mcu and mcu.ticks then
+        sys.wait(1000)
+        log.info("开始读取ADC")
+        local ms_start = mcu.ticks()
+        for i = 1, 100, 1 do
+            adc.get(adc_pin_0)
+        end
+        local ms_end = mcu.ticks()
+        log.info("结束读取ADC")
+        log.info("adc", "读取耗时", "100次", ms_end - ms_start, "ms", "单次", (ms_end - ms_start) // 100, "ms")
+    end
+
+    -- 下面是循环打印, 接地不打印0也是正常现象
+    -- ADC的精度都不会太高, 若需要高精度ADC, 建议额外添加adc芯片
+    while true do
+        if adc_pin_0 and adc_pin_0 ~= 255 then
+            log.debug("adc", "adc" .. tostring(adc_pin_0), adc.get(adc_pin_0)) -- 若adc.get报nil, 改成adc.read
+        end
+        if adc_pin_1 and adc_pin_1 ~= 255 then
+            log.debug("adc", "adc" .. tostring(adc_pin_1), adc.get(adc_pin_1))
+        end
+        if adc_pin_2 and adc_pin_2 ~= 255 then
+            log.debug("adc", "adc" .. tostring(adc_pin_2), adc.get(adc_pin_2))
+        end
+        if adc_pin_3 and adc_pin_3 ~= 255 then
+            log.debug("adc", "adc" .. tostring(adc_pin_3), adc.get(adc_pin_3))
+        end
+        if adc_pin_temp and adc_pin_temp ~= 255 then
+            log.debug("adc", "CPU TEMP", adc.get(adc_pin_temp))
+        end
+        if adc_pin_vbat and adc_pin_vbat ~= 255 then
+            log.debug("adc", "VBAT", adc.get(adc_pin_vbat))
+        end
+        sys.wait(1000)
+    end
+
+    -- 若不再读取, 可关掉adc, 降低功耗, 非必须
+    if adc_pin_0 and adc_pin_0 ~= 255 then adc.close(adc_pin_0) end
+    if adc_pin_1 and adc_pin_1 ~= 255 then adc.close(adc_pin_1) end
+    if adc_pin_2 and adc_pin_2 ~= 255 then adc.close(adc_pin_2) end
+    if adc_pin_3 and adc_pin_3 ~= 255 then adc.close(adc_pin_3) end
+    if adc_pin_temp and adc_pin_temp ~= 255 then adc.close(adc_pin_temp) end
+    if adc_pin_vbat and adc_pin_vbat ~= 255 then adc.close(adc_pin_vbat) end
+
+end
+
+return testAdc

+ 51 - 0
module/Air780EGH/demo/uart/uart/main.lua

@@ -0,0 +1,51 @@
+-- Luatools需要PROJECT和VERSION这两个信息
+PROJECT = "uart"
+VERSION = "1.0.0"
+
+log.info("main", PROJECT, VERSION)
+
+-- 引入必要的库文件(lua编写), 内部库不需要require
+sys = require("sys")
+
+if wdt then
+    --添加硬狗防止程序卡死,在支持的设备上启用这个功能
+    wdt.init(9000)--初始化watchdog设置为9s
+    sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
+end
+
+log.info("main", "uart demo run......")
+
+local uartid = 1 -- 根据实际设备选取不同的uartid
+
+--初始化
+uart.setup(
+    uartid,--串口id
+    115200,--波特率
+    8,--数据位
+    1--停止位
+)
+
+-- 收取数据会触发回调, 这里的"receive" 是固定值
+uart.on(uartid, "receive", function(id, len)
+    local s = ""
+    repeat
+        s = uart.read(id, 128)
+        if #s > 0 then -- #s 是取字符串的长度
+            -- 关于收发hex值,请查阅 https://doc.openluat.com/article/583
+            log.info("uart", "receive", id, #s, s)
+            -- log.info("uart", "receive", id, #s, s:toHex()) --如果传输二进制/十六进制数据, 部分字符不可见, 不代表没收到
+        end
+    until s == ""
+end)
+
+sys.taskInit(function()
+    -- 循环两秒向串口发一次数据
+    while true do
+        sys.wait(2000)
+        uart.write(uartid, "test data.")
+    end
+end)
+
+-- 用户代码已结束---------------------------------------------
+sys.run()
+-- sys.run()之后后面不要加任何语句!!!!!

+ 48 - 0
module/Air780EGH/demo/uart/uart_rs485/main.lua

@@ -0,0 +1,48 @@
+-- Luatools需要PROJECT和VERSION这两个信息
+PROJECT = "uart_RS485"
+VERSION = "1.0.0"
+
+log.info("main", PROJECT, VERSION)
+
+-- 引入必要的库文件(lua编写), 内部库不需要require
+sys = require("sys")
+
+if wdt then
+    --添加硬狗防止程序卡死,在支持的设备上启用这个功能
+    wdt.init(9000)--初始化watchdog设置为9s
+    sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
+end
+
+log.info("main", "uart demo run......")
+
+local uartid = 1        -- 根据实际设备选取不同的uartid
+local uart485Pin = 24   -- 用于控制485接收和发送的使能引脚
+
+
+--初始化
+uart.setup(uartid, 9600, 8, 1, uart.NONE, uart.LSB, 1024, uart485Pin, 0, 2000)
+
+-- 收取数据会触发回调, 这里的"receive" 是固定值
+uart.on(uartid, "receive", function(id, len)
+    local s = ""
+    repeat
+        s = uart.read(id, 128)
+        if #s > 0 then -- #s 是取字符串的长度
+            -- 关于收发hex值,请查阅 https://doc.openluat.com/article/583
+            log.info("uart", "receive", id, #s, s)
+            -- log.info("uart", "receive", id, #s, s:toHex()) --如果传输二进制/十六进制数据, 部分字符不可见, 不代表没收到
+        end
+    until s == ""
+end)
+
+sys.taskInit(function()
+    -- 循环两秒向串口发一次数据
+    while true do
+        sys.wait(2000)
+        uart.write(uartid, "test data.")
+    end
+end)
+
+-- 用户代码已结束---------------------------------------------
+sys.run()
+-- sys.run()之后后面不要加任何语句!!!!!

+ 77 - 0
module/Air780EGH/demo/uart/uart_two/main.lua

@@ -0,0 +1,77 @@
+-- Luatools需要PROJECT和VERSION这两个信息
+PROJECT = "uart_two"
+VERSION = "1.0.0"
+
+log.info("main", PROJECT, VERSION)
+
+-- 引入必要的库文件(lua编写), 内部库不需要require
+sys = require("sys")
+
+if wdt then
+    --添加硬狗防止程序卡死,在支持的设备上启用这个功能
+    wdt.init(9000)--初始化watchdog设置为9s
+    sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
+end
+
+log.info("main", "uart_two demo run......")
+
+-- 根据实际设备选取不同的uartid
+local uartid1 = 1 -- 第一个串口id
+local uartid2 = 3 -- 第二个串口id
+
+-- 初始化第一个串口
+uart.setup(
+    uartid1,--串口id
+    115200,--波特率
+    8,--数据位
+    1--停止位
+)
+
+-- 初始化第一个串口
+uart.setup(
+    uartid2,--串口id
+    115200,--波特率
+    8,--数据位
+    1--停止位
+)
+
+-- 第一个串口接收数据回调函数
+-- 收取数据会触发回调, 这里的"receive" 是固定值
+uart.on(uartid1, "receive", function(id, len)
+    local s = ""
+    repeat
+        s = uart.read(id, 128)
+        if #s > 0 then -- #s 是取字符串的长度
+            -- 关于收发hex值,请查阅 https://doc.openluat.com/article/583
+            log.info("uart", "receive", id, #s, s)
+            -- log.info("uart", "receive", id, #s, s:toHex()) --如果传输二进制/十六进制数据, 部分字符不可见, 不代表没收到
+        end
+    until s == ""
+end)
+
+-- 第二个串口接收数据回调函数
+-- 收取数据会触发回调, 这里的"receive" 是固定值
+uart.on(uartid2, "receive", function(id, len)
+    local s = ""
+    repeat
+        s = uart.read(id, 128)
+        if #s > 0 then -- #s 是取字符串的长度
+            -- 关于收发hex值,请查阅 https://doc.openluat.com/article/583
+            log.info("uart", "receive", id, #s, s)
+            -- log.info("uart", "receive", id, #s, s:toHex()) --如果传输二进制/十六进制数据, 部分字符不可见, 不代表没收到
+        end
+    until s == ""
+end)
+
+sys.taskInit(function()
+    -- 循环两秒分别向两个串口发一次数据
+    while true do
+        sys.wait(2000)
+        uart.write(uartid1, "uart1 test data.")
+        uart.write(uartid2, "uart2 test data.")
+    end
+end)
+
+-- 用户代码已结束---------------------------------------------
+sys.run()
+-- sys.run()之后后面不要加任何语句!!!!!

+ 61 - 0
module/Air780EGH/demo/uart/uart_vir/main.lua

@@ -0,0 +1,61 @@
+-- Luatools需要PROJECT和VERSION这两个信息
+PROJECT = "uart_vir"
+VERSION = "1.0.0"
+
+log.info("main", PROJECT, VERSION)
+
+-- 引入必要的库文件(lua编写), 内部库不需要require
+sys = require("sys")
+
+if wdt then
+    --添加硬狗防止程序卡死,在支持的设备上启用这个功能
+    wdt.init(9000)--初始化watchdog设置为9s
+    sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
+end
+
+log.info("main", "uart demo run......")
+
+local uartid = uart.VUART_0 -- 使用USB虚拟串口,固定id
+
+--初始化
+uart.setup(
+    uartid,--串口id
+    115200,--波特率
+    8,--数据位
+    1--停止位
+)
+
+-- 收取数据会触发回调, 这里的"receive" 是固定值
+uart.on(uartid, "receive", function(id, len)
+    local s = ""
+    repeat
+        s = uart.read(id, 128)
+        if #s > 0 then -- #s 是取字符串的长度
+            -- 关于收发hex值,请查阅 https://doc.openluat.com/article/583
+            log.info("uart", "receive", id, #s, s)
+            -- log.info("uart", "receive", id, #s, s:toHex()) --如果传输二进制/十六进制数据, 部分字符不可见, 不代表没收到
+        end
+    until s == ""
+end)
+
+sys.taskInit(function()
+    local data =
+    {
+        host = "abcdefg.com",
+        port = "1883",
+        clientID = "c88885",
+        username = "user",
+        password = "123456",
+        ca_self = {ssl=false},
+    }
+    local jsondata = json.encode(data)
+    -- 循环每两秒向串口发一次数据
+    while true do
+        sys.wait(2000)
+        uart.write(uartid, jsondata)
+    end
+end)
+
+-- 用户代码已结束---------------------------------------------
+sys.run()
+-- sys.run()之后后面不要加任何语句!!!!!

+ 10 - 9
module/Air780EHM/demo/sfud/readme.md

@@ -34,7 +34,7 @@
 
 1、Luatools下载调试工具
 
-2、[Air780EHM V2008版本固件](https://gitee.com/openLuat/LuatOS/tree/master/module/Air780EHM/core)(理论上最新版本固件也可以,如果使用最新版本的固件不可以,可以烧录V2007固件对比验证)
+2、[Air780EHM V2008版本固件](https://gitee.com/openLuat/LuatOS/tree/master/module/Air780EHM/core)(理论上最新版本固件也可以,如果使用最新版本的固件不可以,可以烧录V2008固件对比验证)
 
 ## 演示核心步骤
 
@@ -47,14 +47,15 @@
 (1) 直接操作sfud接口去读写Flash,结果如下:
 
 ```lua
-[2025-07-01 21:25:27.134][000000001.369] I/user.sfud	spi_flash	SPI*: 0C7F6EF0
-[2025-07-01 21:25:27.139][000000001.370] I/sfud Found a Winbond flash chip. Size is 4194304 bytes.
-[2025-07-01 21:25:27.142][000000001.389] I/sfud LuatOS-sfud flash device initialized successfully.
-[2025-07-01 21:25:27.149][000000001.390] I/user.sfud.init ok
-[2025-07-01 21:25:27.153][000000001.390] I/user.sfud.getDeviceNum	1
-[2025-07-01 21:25:27.157][000000001.390] I/user.sfud.getInfo	4194304	4096
-[2025-07-01 21:25:27.162][000000001.421] I/user.sfud.eraseWrite	0
-[2025-07-01 21:25:27.167][000000001.422] I/user.sfud.read	luat
+[2025-07-03 19:00:18.305][000000001.391] I/user.sfud	spi_flash	SPI*: 0C7F6E58
+[2025-07-03 19:00:18.325][000000001.392] I/sfud Found a Winbond flash chip. Size is 4194304 bytes.
+[2025-07-03 19:00:18.351][000000001.411] I/sfud LuatOS-sfud flash device initialized successfully.
+[2025-07-03 19:00:18.421][000000001.412] I/user.sfud.init ok
+[2025-07-03 19:00:18.480][000000001.412] I/user.sfud.getDeviceNum	1
+[2025-07-03 19:00:18.536][000000001.412] I/user.sfud.getInfo	4194304	4096
+[2025-07-03 19:00:18.590][000000001.443] I/user.sfud.eraseWrite	0
+[2025-07-03 19:00:18.637][000000001.444] I/user.sfud 写入与读取数据成功
+
 ```
 
 (2) 将Flash设备成功挂载为sfud lfs文件系统后,通过标准化文件管理接口对文件系统进行了全流程验证,结果如下:

+ 9 - 2
module/Air780EHM/demo/sfud/sfud_test.lua

@@ -45,8 +45,15 @@ function sfud_test_func()
     local test_sfud_mount = false
     --通过sfud接口对flash进行写入和读取操作
     if test_sfud_raw then
-        log.info("sfud.eraseWrite",sfud.eraseWrite(sfud_device,1024,"luatos-sfud1234567890123456789012345678901234567890"))
-        log.info("sfud.read",sfud.read(sfud_device,1024,4))
+        local test_str = "luatos-sfud1234567890123456789012345678901234567890"
+        log.info("sfud.eraseWrite",sfud.eraseWrite(sfud_device,1024,test_str))
+        local read_str = sfud.read(sfud_device,1024,#test_str)
+        if test_str == read_str then
+            log.info("sfud 写入与读取数据成功")
+        else
+            log.info("sfud 写入与读取数据失败")
+        end
+
     end
     --挂载为sfud lfs文件系统,通过文件系统相关接口去操作sfud lfs文件系统中的文件,并演示文件的读写、删除、追加等操作。
     if test_sfud_mount then

+ 3 - 3
module/Air780EHM/demo/tf/main.lua

@@ -6,7 +6,7 @@
 @author  李源龙
 @usage
 本demo演示的功能为:
-使用Air780EHM核心板通过SFUD库实现对SPI Flash的高效操作,并可以挂载sfud lfs文件系统,通过文件系统相关接口去操作sfud lfs文件系统中的文件,并演示文件的读写、删除、追加等操作。
+使用Air780EHM核心板通过fatfs库和io库实现对tf卡的高效操作,并可以挂载fatfs文件系统,通过文件系统相关接口去操作fatfs文件系统中的文件,并演示文件的读写、删除、追加以及HTTP服务器下载到SD卡等操作。
 ]]
 
 --[[
@@ -19,8 +19,8 @@ VERSION:项目版本号,ascii string类型
             因为历史原因,YYY这三位数字必须存在,但是没有任何用处,可以一直写为000
         如果不使用合宙iot.openluat.com进行远程升级,根据自己项目的需求,自定义格式即可
 ]]
-PROJECT = "fatfs"
-VERSION = "1.0.0"
+PROJECT = "tftest"
+VERSION = "001.000.000"
 
 -- 在日志中打印项目名和项目版本号
 log.info("main", PROJECT, VERSION)

+ 4 - 4
module/Air780EHM/demo/tf/readme.md

@@ -1,7 +1,7 @@
 
 ## 演示功能概述
 
-使用Air780EHM核心板通过fatfs库实现对SPI SD的高效操作,并可以挂载fatfs文件系统,通过文件系统相关接口去操作fatfs文件系统中的文件,并演示文件的读写、删除、追加以及HTTP服务器下载到SD卡等操作。
+使用Air780EHM核心板通过fatfs库和io库实现对tf卡的高效操作,并可以挂载fatfs文件系统,通过文件系统相关接口去操作fatfs文件系统中的文件,并演示文件的读写、删除、追加以及HTTP服务器下载到SD卡等操作。
 
 ## 演示硬件环境
 
@@ -9,7 +9,7 @@
 
 2、TYPE-C USB数据线一根
 
-3、spi SD卡模块一个和SD卡一张
+3、AirMICROSD_1000模块一个和SD卡一张
 
 4、Air780EHM核心板和数据线的硬件接线方式为
 
@@ -17,9 +17,9 @@
 
 - TYPE-C USB数据线直接插到核心板的TYPE-C USB座子,另外一端连接电脑USB口;
 
-5、Air780EHM核心板和spi SD卡模块接线方式
+5、Air780EHM核心板和AirMICROSD_1000模块接线方式
 
-|   Air780EHM     |       SPI_SD卡模块    |
+|   Air780EHM     |    AirMICROSD_1000    |
 | --------------- | --------------------- |
 |  GND(任意)      |          GND          |
 |  VDD_EXT        |          VCC          |

+ 16 - 24
module/Air780EHM/demo/tf/tf_test.lua

@@ -1,28 +1,20 @@
---[[]
-运行环境:Air780EHM核心板+SD卡扩展板
-最后修改时间:2025-7-2
-使用了如下IO口:
-SD卡的使用IO口:
-[83, "SPI0CS", " PIN83脚, 用于SD卡片选脚"],
-[84, "SPI0MISO," PIN84脚, 用于SD卡数据脚"],
-[85, "SPI0MOSI", " PIN85脚, 用于SD卡数据脚"],
-[86, "SPI0CLK", " PIN86脚, 用于SD卡时钟脚"],
-[24, "VDD_EXT", " PIN24脚, 用于给SD卡供电脚"],
-GND
-执行逻辑为:
-1. 初始化SD卡
-2. 挂载文件系统
-3. 在文件系统中创建一个文件
-4. 向文件中写入数据
-5. 读取文件中的数据
-6. 删除文件
-7. 卸载文件系统
-8. 关闭SD卡
-
-扩展了HTTP从服务器下载文件到SD卡的功能,可以下载指定URL的文件到SD卡中,并保存到SD卡里面
+--[[
+@module  tf_test
+@summary tf_test测试功能模块
+@version 1.0
+@date    2025.07.02
+@author  李源龙
+@usage
+使用Air780EHM核心板通过fatfs库和io库实现对tf卡的高效操作,并可以挂载fatfs文件系统,通过文件系统相关接口去操作fatfs文件系统中的文件,并演示文件的读写、删除、追加以及HTTP服务器下载到SD卡等操作。
+以 Air780EHM核心板为例,和AirMICROSD_1000接线如下:
+Air780EHM            AirMICROSD_1000
+GND(任意)            GND
+VDD_EXT              VCC
+GPIO8/SPI0_CS        CS,片选
+SPI0_SLK             CLK,时钟
+SPI0_MOSI            MOSI,主机输出,从机输入
+SPI0_MISO            MISO,主机输入,从机输出
 ]]
--- sys库是标配
-_G.sys = require("sys")
 
 
 local function main_task()

+ 25 - 0
module/Air8000/demo/ble/ibeacon/check_wifi.lua

@@ -0,0 +1,25 @@
+-- 用于检查当前模组中WiFi是否是最新版本,如果不是最新版本则启动升级。
+local fota_wifi = require("fota_wifi")
+
+local function wifi_fota_task_func()
+    local result = fota_wifi.request()
+    if result then
+        log.info("fota_wifi", "升级任务执行成功")
+    else
+        log.info("fota_wifi", "升级任务执行失败")
+    end
+end
+
+-- 判断网络是否正常
+local function wait_ip_ready()
+    local result, ip, adapter = sys.waitUntil("IP_READY", 30000)
+    if result then
+        log.info("fota_wifi", "开始执行升级任务")
+        sys.taskInit(wifi_fota_task_func)
+    else
+        log.error("当前正在升级WIFI&蓝牙固件,请插入可以上网的SIM卡")
+    end
+end
+
+-- 在设备启动时检查网络状态
+sys.taskInit(wait_ip_ready)

+ 1 - 5
module/Air8000/demo/ble/ibeacon/main.lua

@@ -1,6 +1,6 @@
 --[[
 @module  main
-@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑 
+@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
 @version 1.0
 @date    2025.07.01
 @author  wangshihao
@@ -39,10 +39,6 @@ if wdt then
     sys.timerLoopStart(wdt.feed, 3000)
 end
 
--- 如果需要升级WIFI固件,请打开下面两行注释
--- local fota_wifi = require("fota_wifi")
--- sys.taskInit(fota_wifi.request)
-
 -- 如果内核固件支持errDump功能,此处进行配置,【强烈建议打开此处的注释】
 -- 因为此功能模块可以记录并且上传脚本在运行过程中出现的语法错误或者其他自定义的错误信息,可以初步分析一些设备运行异常的问题
 -- 以下代码是最基本的用法,更复杂的用法可以详细阅读API说明文档

+ 25 - 0
module/Air8000/demo/ble/master/check_wifi.lua

@@ -0,0 +1,25 @@
+-- 用于检查当前模组中WiFi是否是最新版本,如果不是最新版本则启动升级。
+local fota_wifi = require("fota_wifi")
+
+local function wifi_fota_task_func()
+    local result = fota_wifi.request()
+    if result then
+        log.info("fota_wifi", "升级任务执行成功")
+    else
+        log.info("fota_wifi", "升级任务执行失败")
+    end
+end
+
+-- 判断网络是否正常
+local function wait_ip_ready()
+    local result, ip, adapter = sys.waitUntil("IP_READY", 30000)
+    if result then
+        log.info("fota_wifi", "开始执行升级任务")
+        sys.taskInit(wifi_fota_task_func)
+    else
+        log.error("当前正在升级WIFI&蓝牙固件,请插入可以上网的SIM卡")
+    end
+end
+
+-- 在设备启动时检查网络状态
+sys.taskInit(wait_ip_ready)

+ 2 - 6
module/Air8000/demo/ble/master/main.lua

@@ -1,6 +1,6 @@
 --[[
 @module  main
-@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑 
+@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
 @version 1.0
 @date    2025.07.01
 @author  wangshihao
@@ -36,10 +36,6 @@ if wdt then
     sys.timerLoopStart(wdt.feed, 3000)
 end
 
--- 如果需要升级WIFI固件,请打开下面两行注释
--- local fota_wifi = require("fota_wifi")
--- sys.taskInit(fota_wifi.request)
-
 -- 如果内核固件支持errDump功能,此处进行配置,【强烈建议打开此处的注释】
 -- 因为此功能模块可以记录并且上传脚本在运行过程中出现的语法错误或者其他自定义的错误信息,可以初步分析一些设备运行异常的问题
 -- 以下代码是最基本的用法,更复杂的用法可以详细阅读API说明文档
@@ -68,4 +64,4 @@ require "ble_master"
 -- 用户代码已结束---------------------------------------------
 -- 结尾总是这一句
 sys.run()
--- sys.run()之后后面不要加任何语句!!!!!
+-- sys.run()之后后面不要加任何语句!!!!!

+ 25 - 0
module/Air8000/demo/ble/peripheral/check_wifi.lua

@@ -0,0 +1,25 @@
+-- 用于检查当前模组中WiFi是否是最新版本,如果不是最新版本则启动升级。
+local fota_wifi = require("fota_wifi")
+
+local function wifi_fota_task_func()
+    local result = fota_wifi.request()
+    if result then
+        log.info("fota_wifi", "升级任务执行成功")
+    else
+        log.info("fota_wifi", "升级任务执行失败")
+    end
+end
+
+-- 判断网络是否正常
+local function wait_ip_ready()
+    local result, ip, adapter = sys.waitUntil("IP_READY", 30000)
+    if result then
+        log.info("fota_wifi", "开始执行升级任务")
+        sys.taskInit(wifi_fota_task_func)
+    else
+        log.error("当前正在升级WIFI&蓝牙固件,请插入可以上网的SIM卡")
+    end
+end
+
+-- 在设备启动时检查网络状态
+sys.taskInit(wait_ip_ready)

+ 1 - 5
module/Air8000/demo/ble/peripheral/main.lua

@@ -1,6 +1,6 @@
 --[[
 @module  main
-@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑 
+@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
 @version 1.0
 @date    2025.07.01
 @author  wangshihao
@@ -35,10 +35,6 @@ if wdt then
     sys.timerLoopStart(wdt.feed, 3000)
 end
 
--- 如果需要升级WIFI固件,请打开下面两行注释
--- local fota_wifi = require("fota_wifi")
--- sys.taskInit(fota_wifi.request)
-
 -- 如果内核固件支持errDump功能,此处进行配置,【强烈建议打开此处的注释】
 -- 因为此功能模块可以记录并且上传脚本在运行过程中出现的语法错误或者其他自定义的错误信息,可以初步分析一些设备运行异常的问题
 -- 以下代码是最基本的用法,更复杂的用法可以详细阅读API说明文档

+ 25 - 0
module/Air8000/demo/ble/scan/check_wifi.lua

@@ -0,0 +1,25 @@
+-- 用于检查当前模组中WiFi是否是最新版本,如果不是最新版本则启动升级。
+local fota_wifi = require("fota_wifi")
+
+local function wifi_fota_task_func()
+    local result = fota_wifi.request()
+    if result then
+        log.info("fota_wifi", "升级任务执行成功")
+    else
+        log.info("fota_wifi", "升级任务执行失败")
+    end
+end
+
+-- 判断网络是否正常
+local function wait_ip_ready()
+    local result, ip, adapter = sys.waitUntil("IP_READY", 30000)
+    if result then
+        log.info("fota_wifi", "开始执行升级任务")
+        sys.taskInit(wifi_fota_task_func)
+    else
+        log.error("当前正在升级WIFI&蓝牙固件,请插入可以上网的SIM卡")
+    end
+end
+
+-- 在设备启动时检查网络状态
+sys.taskInit(wait_ip_ready)

+ 1 - 5
module/Air8000/demo/ble/scan/main.lua

@@ -1,6 +1,6 @@
 --[[
 @module  main
-@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑 
+@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
 @version 1.0
 @date    2025.07.01
 @author  wangshihao
@@ -35,10 +35,6 @@ if wdt then
     sys.timerLoopStart(wdt.feed, 3000)
 end
 
--- 如果需要升级WIFI固件,请打开下面两行注释
--- local fota_wifi = require("fota_wifi")
--- sys.taskInit(fota_wifi.request)
-
 -- 如果内核固件支持errDump功能,此处进行配置,【强烈建议打开此处的注释】
 -- 因为此功能模块可以记录并且上传脚本在运行过程中出现的语法错误或者其他自定义的错误信息,可以初步分析一些设备运行异常的问题
 -- 以下代码是最基本的用法,更复杂的用法可以详细阅读API说明文档

+ 25 - 1
module/Air8000/demo/wifi_location/main.lua

@@ -7,7 +7,7 @@
     (4)执行时间同步
     (5)等待时间同步成功
     (6)循环扫描wifi,如果扫描到wifi信息,则请求wifi定位
-]] 
+]]
 
 -- LuaTools需要PROJECT和VERSION这两个信息
 PROJECT = "WLAN_LOCATION"
@@ -22,6 +22,27 @@ local result = false -- 用于保存结果
 local data = nil -- 用于保存定位请求数据
 local wifiList = {} -- 用于保存扫描到的wifi信息
 local requestParam = {} -- 用于保存定位请求参数
+local fota_wifi = require("fota_wifi")
+
+local function wifi_fota_task_func()
+    local result = fota_wifi.request()
+    if result then
+        log.info("fota_wifi", "升级任务执行成功")
+    else
+        log.info("fota_wifi", "升级任务执行失败")
+    end
+end
+
+-- 判断网络是否正常
+local function wait_ip_ready()
+    local result, ip, adapter = sys.waitUntil("IP_READY", 30000)
+    if result then
+        log.info("fota_wifi", "开始执行升级任务")
+        sys.taskInit(wifi_fota_task_func)
+    else
+        log.error("当前正在升级WIFI&蓝牙固件,请插入可以上网的SIM卡")
+    end
+end
 
 local airlbs = require "airlbs"
 
@@ -85,6 +106,9 @@ sys.taskInit(function()
     end
 end)
 
+-- 在设备启动时检查网络状态
+sys.taskInit(wait_ip_ready)
+
 sysplus.taskInitEx(wlan_location_task, taskName)
 
 -- 用户代码已结束---------------------------------------------

+ 22 - 3
module/Air8000/demo/wlan/AP/main.lua

@@ -6,10 +6,27 @@ VERSION = "1.0.5"
 dnsproxy = require("dnsproxy")
 dhcpsrv = require("dhcpsrv")
 httpplus = require("httpplus")
+local fota_wifi = require("fota_wifi")
 
--- 如果需要升级WIFI固件,请打开下面两行注释
--- local fota_wifi = require("fota_wifi")
--- sys.taskInit(fota_wifi.request)
+local function wifi_fota_task_func()
+    local result = fota_wifi.request()
+    if result then
+        log.info("fota_wifi", "升级任务执行成功")
+    else
+        log.info("fota_wifi", "升级任务执行失败")
+    end
+end
+
+-- 判断网络是否正常
+local function wait_ip_ready()
+    local result, ip, adapter = sys.waitUntil("IP_READY", 30000)
+    if result then
+        log.info("fota_wifi", "开始执行升级任务")
+        sys.taskInit(wifi_fota_task_func)
+    else
+        log.error("当前正在升级WIFI&蓝牙固件,请插入可以上网的SIM卡")
+    end
+end
 
 function test_ap()
     log.info("执行AP创建操作")
@@ -41,6 +58,8 @@ end)
 
 
 
+-- 在设备启动时检查网络状态
+sys.taskInit(wait_ip_ready)
 
 sys.taskInit(function()
     log.info("开始AP 测试...")

+ 25 - 6
module/Air8000/demo/wlan/Power_Save/main.lua

@@ -5,11 +5,27 @@ VERSION = "1.0.5"
 
 dnsproxy = require("dnsproxy")
 dhcpsrv = require("dhcpsrv")
--- httpplus = require("httpplus")
+local fota_wifi = require("fota_wifi")
+
+local function wifi_fota_task_func()
+    local result = fota_wifi.request()
+    if result then
+        log.info("fota_wifi", "升级任务执行成功")
+    else
+        log.info("fota_wifi", "升级任务执行失败")
+    end
+end
 
--- 如果需要升级WIFI固件,请打开下面两行注释
--- local fota_wifi = require("fota_wifi")
--- sys.taskInit(fota_wifi.request)
+-- 判断网络是否正常
+local function wait_ip_ready()
+    local result, ip, adapter = sys.waitUntil("IP_READY", 30000)
+    if result then
+        log.info("fota_wifi", "开始执行升级任务")
+        sys.taskInit(wifi_fota_task_func)
+    else
+        log.error("当前正在升级WIFI&蓝牙固件,请插入可以上网的SIM卡")
+    end
+end
 
 -- 通过boot按键方便刷Air8000S
 function PWR8000S(val)
@@ -124,15 +140,18 @@ end)
 --     end
 -- end)
 
+-- 在设备启动时检查网络状态
+sys.taskInit(wait_ip_ready)
+
 sys.taskInit(function()
     log.info("新的Air8000脚本...")
 
     wlan.init()
     -- sys.wait(5000)
-    
+
     sys.wait(300)
     test_ap()
-    
+
     -- 连接STA测试
     -- sys.wait(300)
     -- test_sta()

+ 23 - 3
module/Air8000/demo/wlan/STA/main.lua

@@ -6,10 +6,27 @@ VERSION = "1.0.5"
 dnsproxy = require("dnsproxy")
 dhcpsrv = require("dhcpsrv")
 httpplus = require("httpplus")
+local fota_wifi = require("fota_wifi")
 
--- 如果需要升级WIFI固件,请打开下面两行注释
--- local fota_wifi = require("fota_wifi")
--- sys.taskInit(fota_wifi.request)
+local function wifi_fota_task_func()
+    local result = fota_wifi.request()
+    if result then
+        log.info("fota_wifi", "升级任务执行成功")
+    else
+        log.info("fota_wifi", "升级任务执行失败")
+    end
+end
+
+-- 判断网络是否正常
+local function wait_ip_ready()
+    local result, ip, adapter = sys.waitUntil("IP_READY", 30000)
+    if result then
+        log.info("fota_wifi", "开始执行升级任务")
+        sys.taskInit(wifi_fota_task_func)
+    else
+        log.error("当前正在升级WIFI&蓝牙固件,请插入可以上网的SIM卡")
+    end
+end
 
 -- wifi的STA相关事件
 sys.subscribe("WLAN_STA_INC", function(evt, data)
@@ -83,6 +100,9 @@ end
 --     end
 -- end)
 
+-- 在设备启动时检查网络状态
+sys.taskInit(wait_ip_ready)
+
 sys.taskInit(function()
     log.info("新的Air8000脚本...")
     wlan.init()

+ 24 - 4
module/Air8000/demo/wlan/wifi_configuration_network_by_ap/main.lua

@@ -8,10 +8,27 @@ require "sysplus"
 dnsproxy = require("dnsproxy")
 dhcpsrv = require("dhcpsrv")
 httpplus = require("httpplus")
+local fota_wifi = require("fota_wifi")
+
+local function wifi_fota_task_func()
+    local result = fota_wifi.request()
+    if result then
+        log.info("fota_wifi", "升级任务执行成功")
+    else
+        log.info("fota_wifi", "升级任务执行失败")
+    end
+end
 
--- 如果需要升级WIFI固件,请打开下面两行注释
--- local fota_wifi = require("fota_wifi")
--- sys.taskInit(fota_wifi.request)
+-- 判断网络是否正常
+local function wait_ip_ready()
+    local result, ip, adapter = sys.waitUntil("IP_READY", 30000)
+    if result then
+        log.info("fota_wifi", "开始执行升级任务")
+        sys.taskInit(wifi_fota_task_func)
+    else
+        log.error("当前正在升级WIFI&蓝牙固件,请插入可以上网的SIM卡")
+    end
+end
 
 -- 初始化LED灯, 这里演示控制Air8000核心板蓝灯,其他开发板请查看硬件原理图自行修改(如果使用整机开发板可以用GPIO146)
 local LEDA = gpio.setup(20, 0, gpio.PULLUP)
@@ -88,9 +105,12 @@ function main_task()
     create_ap()
     wifi_networking()
 
-    
+
 end
 
+-- 在设备启动时检查网络状态
+sys.taskInit(wait_ip_ready)
+
 sys.subscribe("WLAN_SCAN_DONE", scan_done_handle)
 sys.subscribe("IP_READY", ip_ready_handle)
 sys.taskInit(main_task)

+ 24 - 3
module/Air8000/demo/wlan/wifi_scan/main.lua

@@ -5,10 +5,27 @@ VERSION = "1.0.5"
 -- sys库是标配
 _G.sys = require("sys")
 require "sysplus"
+local fota_wifi = require("fota_wifi")
 
--- 如果需要升级WIFI固件,请打开下面两行注释
--- local fota_wifi = require("fota_wifi")
--- sys.taskInit(fota_wifi.request)
+local function wifi_fota_task_func()
+    local result = fota_wifi.request()
+    if result then
+        log.info("fota_wifi", "升级任务执行成功")
+    else
+        log.info("fota_wifi", "升级任务执行失败")
+    end
+end
+
+-- 判断网络是否正常
+local function wait_ip_ready()
+    local result, ip, adapter = sys.waitUntil("IP_READY", 30000)
+    if result then
+        log.info("fota_wifi", "开始执行升级任务")
+        sys.taskInit(wifi_fota_task_func)
+    else
+        log.error("当前正在升级WIFI&蓝牙固件,请插入可以上网的SIM卡")
+    end
+end
 
 function test_scan()
     while 1 do
@@ -39,6 +56,10 @@ sys.taskInit(function()
 end)
 
 sys.subscribe("WLAN_SCAN_DONE", scan_done_handle)
+
+-- 在设备启动时检查网络状态
+sys.taskInit(wait_ip_ready)
+
 sys.taskInit(function()
     -- 稍微缓一下
     sys.wait(500)

+ 18 - 17
script/libs/espblufi.lua

@@ -1,6 +1,6 @@
 --[[
 @module espblufi
-@summary espblufi esp blufi 蓝牙配网(注意:初版不支持加密功能,需要后续版本支持!!!!!!!!)
+@summary espblufi esp blufi 蓝牙配网(注意:初版不支持加密功能!!!!!!!!)
 @version 1.0
 @date    2025.07.01
 @author  Dozingfiretruck
@@ -17,7 +17,7 @@
 -- 小程序测试:微信搜索小程序:ESP Config
 -- 小程序源码下载地址:https://github.com/EspressifApps/ESP-Config-WeChat
 
--- 注意:初版不支持加密功能,需要后续版本支持!!!!!!!!
+-- 注意:初版不支持加密功能!!!!!!!!
 
 -- 用法实例
 local espblufi = require("espblufi")
@@ -37,7 +37,8 @@ local function espblufi_callback(event,data)
 end
 
 sys.taskInit(function()
-    espblufi.init(espblufi_callback)
+    local bluetooth_device = bluetooth.init()
+    espblufi.init(bluetooth_device, espblufi_callback)
     espblufi.start()
     while 1 do
         sys.wait(1000)
@@ -239,10 +240,9 @@ local function btc_blufi_wifi_conn_report(sta_conn_state)
         if wlan_info.bssid then
             data = data .. string.char(BLUFI_TYPE_DATA_SUBTYPE_STA_BSSID,6) .. string.fromHex(wlan_info.bssid)
         end
-        print("rssi",type(wlan_info.rssi),wlan_info.rssi)
-        -- if wlan_info.rssi then
-        --     data = data .. string.char(BLUFI_TYPE_DATA_SUBTYPE_STA_CONN_RSSI,1) .. tonumber(wlan_info.rssi)
-        -- end
+        if wlan_info.rssi then
+            data = data .. string.char(BLUFI_TYPE_DATA_SUBTYPE_STA_CONN_RSSI,1,wlan_info.rssi%256)
+        end
     end
     if blufi_env.sta_ssid then
         data = data .. string.char(BLUFI_TYPE_DATA_SUBTYPE_STA_SSID,#blufi_env.sta_ssid) .. blufi_env.sta_ssid
@@ -392,10 +392,10 @@ local function btc_blufi_protocol_handler(parse_data)
             blufi_env.opmode = blufi_hdr.data:byte(1)
         elseif blufi_subtype == BLUFI_TYPE_CTRL_SUBTYPE_CONN_TO_AP then
             blufi_env.callback(espblufi.EVENT_STA_INFO,
-                                {ssid=blufi_env.sta_ssid,password=blufi_env.sta_passwd,})
+                                {ssid=blufi_env.sta_ssid,password=blufi_env.sta_passwd})
             wlan.connect(blufi_env.sta_ssid, blufi_env.sta_passwd)
             blufi_env.wlan_state = BLUFI_WLAN_STATE_CONNING
-            local results = sys.waitUntil("IP_READY",1000)
+            local results = sys.waitUntil("IP_READY",3000)
             if results then blufi_env.wlan_state = BLUFI_WLAN_STATE_CONNED 
             else blufi_env.wlan_state = BLUFI_WLAN_STATE_DISCONN end
             btc_blufi_wifi_conn_report()
@@ -461,7 +461,6 @@ local function btc_blufi_protocol_handler(parse_data)
         end
     else
         return
-
     end
 end
 
@@ -491,17 +490,24 @@ end
 
 --[[
 初始化espblufi
-@api espblufi.init(espblufi_callback,local_name)
+@api espblufi.init(bluetooth_device,espblufi_callback,local_name)
+@userdata bluetooth_device 蓝牙设备对象
 @function 事件回调函数
 @number 蓝牙名,可选,默认为"BLUFI_xxx",xxx为设备型号(因为esp的配网测试app默认过滤蓝牙名称为BLUFI_开头的设备进行显示,可手动修改)
 @usage
 espblufi.init(espblufi_callback)
 ]]
-function espblufi.init(espblufi_callback,local_name)
+function espblufi.init(bluetooth_device,espblufi_callback,local_name)
     if not bluetooth or not ble or not wlan then
+        log.error("need bluetooth ble and wlan")
+        return
+    end
+    if bluetooth_device == nil or type(bluetooth_device) ~= "userdata" then
+        log.error("bluetooth_device is nil")
         return
     end
     if not espblufi_callback then
+        log.error("espblufi_callback is nil")
         return
     else
         blufi_env.callback = espblufi_callback
@@ -510,14 +516,9 @@ function espblufi.init(espblufi_callback,local_name)
         local_name = "BLUFI_"..rtos.bsp()
     end
     wlan.init()
-    local bluetooth_device = bluetooth.init()
     local ble_device = bluetooth_device:ble(espblufi_ble_callback)
     ble_device:gatt_create(espblufi_att_db)
     ble_device:adv_create({
-        addr_mode = ble.PUBLIC,
-        channel_map = ble.CHNLS_ALL,
-        intv_min = 120,
-        intv_max = 120,
         adv_data = {{ble.FLAGS,string.char(0x06)},{ble.COMPLETE_LOCAL_NAME, local_name}},
     })
     blufi_env.ble_device = ble_device

+ 24 - 5
script/libs/fota_wifi.lua

@@ -22,9 +22,15 @@ local function wifi_fota_task_func()
     -- ...此处省略很多代码
 end
 
--- 两种调用方式均可,任选其一
--- sys.taskInit(wifi_fota_task_func)
-sysplus.taskInitEx(wifi_fota_task_func, "wifi_fota_task")
+-- 判断SIM卡是否
+local function wait_sim_ready()
+    sys.waitUntil("IP_READY")
+    log.info("fota_wifi", "SIM卡已插入,开始执行升级任务")
+    sys.taskInit(wifi_fota_task_func)
+end
+
+-- 在设备启动时检查SIM卡状态
+sys.taskInit(wait_sim_ready)
 ]]
 local fota_wifi = {}
 local is_request = false -- 标记是否正在执行request任务
@@ -115,13 +121,25 @@ local function download_file(url)
         if io.exists(file_path) then
             os.remove(file_path)
         end
-
     end
     return nil
 end
 
 -- 执行升级操作
 local function fota_start(file_path)
+    -- 检查文件是否存在
+    if not io.exists(file_path) then
+        log.error("fota_wifi", "升级文件不存在")
+        return false
+    end
+    
+    -- 检查文件大小是否超过256K (256 * 1024 Bytes)
+    local file_size = io.fileSize(file_path)
+    if file_size < 256 * 1024 then
+        log.error("fota_wifi", "升级文件大小不足256K,文件大小:", file_size)
+        return false
+    end
+    
     -- 执行airlink.sfota操作
     local result = airlink.sfota(file_path)
     if result then
@@ -137,6 +155,7 @@ local function fota_start(file_path)
     end
 end
 
+
 --[[
 Air8000系列模组自动升级wifi
 @api fota_wifi.request()
@@ -169,7 +188,7 @@ function fota_wifi.request()
     log.info("fota_wifi", "正在请求升级信息, URL:", request_url)
 
     -- 发送HTTP请求获取服务器响应
-    local code, headers, body = http.request("GET", request_url, {}, nil, nil).wait()
+    local code, headers, body = http.request("GET", request_url, {}, nil, {timeout = 30000}).wait()
     if code == 200 then
         log.info("fota_wifi", "获取服务器响应成功")
         -- 打印返回的body内容

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików