Pārlūkot izejas kodu

remove: 移除luat/demo

Wendal Chen 5 mēneši atpakaļ
vecāks
revīzija
c1d65cf969
100 mainītis faili ar 0 papildinājumiem un 5592 dzēšanām
  1. 0 5
      luat/demo/README.md
  2. 0 53
      luat/demo/SC7A20/main.lua
  3. 0 24
      luat/demo/adc/main.lua
  4. 0 113
      luat/demo/adc/testAdc.lua
  5. 0 49
      luat/demo/adxl345/main.lua
  6. 0 81
      luat/demo/air153C_wtd/main.lua
  7. 0 53
      luat/demo/air530z/offline/main.lua
  8. 0 16
      luat/demo/air780eg_gnsstest/README.md
  9. 0 35
      luat/demo/air780eg_gnsstest/main.lua
  10. 0 50
      luat/demo/air780eg_gnsstest/testGnss.lua
  11. 0 23
      luat/demo/air780eg_gnsstest/testGpio.lua
  12. 0 127
      luat/demo/air780eg_gnsstest/testMqtt.lua
  13. 0 190
      luat/demo/air780eg_gnsstest/testTcp.lua
  14. 0 281
      luat/demo/air780eg_gnsstest/uc6228.lua
  15. 0 22
      luat/demo/air780epvh_gnsstest/README.md
  16. 0 284
      luat/demo/air780epvh_gnsstest/hdgnss.lua
  17. 0 35
      luat/demo/air780epvh_gnsstest/main.lua
  18. 0 48
      luat/demo/air780epvh_gnsstest/testGnss.lua
  19. 0 23
      luat/demo/air780epvh_gnsstest/testGpio.lua
  20. 0 127
      luat/demo/air780epvh_gnsstest/testMqtt.lua
  21. 0 190
      luat/demo/air780epvh_gnsstest/testTcp.lua
  22. BIN
      luat/demo/air8000_airlink_fota/air8000s_v11.bin
  23. 0 34
      luat/demo/air8000_airlink_fota/main.lua
  24. 0 106
      luat/demo/airlbs/main.lua
  25. 0 7
      luat/demo/airlink/README.md
  26. 0 154
      luat/demo/airlink/air7000_wifi/main.lua
  27. 0 45
      luat/demo/airlink/air724ug_test/main.lua
  28. 0 133
      luat/demo/airlink/air780ehm_spi_slave/main.lua
  29. 0 36
      luat/demo/airlink/air780epm/main.lua
  30. 0 39
      luat/demo/airlink/air780epm_test/main.lua
  31. 0 92
      luat/demo/airlink/air8000/main.lua
  32. 0 57
      luat/demo/airlink/air80000_wifi_start_stop/main.lua
  33. 0 75
      luat/demo/airlink/air8000_LAN_WAN/air780epm_WAN/main.lua
  34. 0 85
      luat/demo/airlink/air8000_LAN_WAN/air8000_LAN/main.lua
  35. BIN
      luat/demo/airlink/air8000_airlink_fota/air8000s_v10.bin
  36. BIN
      luat/demo/airlink/air8000_airlink_fota/air8000s_v9.bin
  37. 0 34
      luat/demo/airlink/air8000_airlink_fota/main.lua
  38. 0 129
      luat/demo/airlink/air8000_ap_lan/main.lua
  39. 0 76
      luat/demo/airlink/air8000_ap_sta_ping/air8000_ap_ping/main.lua
  40. 0 61
      luat/demo/airlink/air8000_ap_sta_ping/air8101_sta_httpsrv/main.lua
  41. 0 64
      luat/demo/airlink/air8000_ble/ibeacon/main.lua
  42. 0 83
      luat/demo/airlink/air8000_ble/master/main.lua
  43. 0 127
      luat/demo/airlink/air8000_ble/peripheral/main.lua
  44. 0 85
      luat/demo/airlink/air8000_ble/scan/main.lua
  45. 0 41
      luat/demo/airlink/air8000_gpio/main.lua
  46. 0 43
      luat/demo/airlink/air8000_gpio_get/main.lua
  47. 0 73
      luat/demo/airlink/air8000_uart/main.lua
  48. 0 49
      luat/demo/airlink/air8000_uart11_gnss/main.lua
  49. 0 146
      luat/demo/airlink/air8000_wifi/main.lua
  50. 0 115
      luat/demo/airlink/air8000_wifi_ap_httpsrv/index.html
  51. 0 115
      luat/demo/airlink/air8000_wifi_ap_httpsrv/index2.html
  52. 0 139
      luat/demo/airlink/air8000_wifi_ap_httpsrv/main.lua
  53. 0 72
      luat/demo/airlink/air8000_wifi_ap_ping/main.lua
  54. 0 118
      luat/demo/airlink/air8000_wifi_eth/main.lua
  55. 0 39
      luat/demo/airlink/air8000s/main.lua
  56. 0 38
      luat/demo/airlink/air8000s_nop/main.lua
  57. 0 173
      luat/demo/airlink/air8000s_nop/nop.txt
  58. 0 35
      luat/demo/airlink/air8101/main.lua
  59. 0 48
      luat/demo/airlink/air8101_air780ehm_http/README.md
  60. 0 36
      luat/demo/airlink/air8101_air780ehm_http/air780ehm/main.lua
  61. 0 29
      luat/demo/airlink/air8101_air780ehm_http/air8101/main.lua
  62. 0 67
      luat/demo/airlink/air8101_air780epm_fota/main.lua
  63. 0 44
      luat/demo/airlink/air8101_air780epm_sdata/main.lua
  64. 0 166
      luat/demo/airlink/for_ccc/main.lua
  65. 0 78
      luat/demo/airlink/uart_http/main.lua
  66. 0 64
      luat/demo/airlink/uart_sdata/main.lua
  67. 0 339
      luat/demo/airtalk/airtalk_dev_ctrl.lua
  68. 0 79
      luat/demo/airtalk/audio_config.lua
  69. 0 27
      luat/demo/airtalk/demo_define.lua
  70. 0 68
      luat/demo/airtalk/main.lua
  71. BIN
      luat/demo/airui/0804_demo/A1.jpg
  72. BIN
      luat/demo/airui/0804_demo/A2.jpg
  73. BIN
      luat/demo/airui/0804_demo/A3.jpg
  74. BIN
      luat/demo/airui/0804_demo/A4.jpg
  75. BIN
      luat/demo/airui/0804_demo/A5.jpg
  76. BIN
      luat/demo/airui/0804_demo/A6.jpg
  77. BIN
      luat/demo/airui/0804_demo/A7.jpg
  78. BIN
      luat/demo/airui/0804_demo/A8.jpg
  79. BIN
      luat/demo/airui/0804_demo/A9.jpg
  80. BIN
      luat/demo/airui/0804_demo/B1.jpg
  81. BIN
      luat/demo/airui/0804_demo/B2.jpg
  82. BIN
      luat/demo/airui/0804_demo/B3.jpg
  83. BIN
      luat/demo/airui/0804_demo/B4.jpg
  84. BIN
      luat/demo/airui/0804_demo/B5.jpg
  85. BIN
      luat/demo/airui/0804_demo/B6.jpg
  86. BIN
      luat/demo/airui/0804_demo/B7.jpg
  87. BIN
      luat/demo/airui/0804_demo/B8.jpg
  88. BIN
      luat/demo/airui/0804_demo/B9.jpg
  89. BIN
      luat/demo/airui/0804_demo/C1.jpg
  90. BIN
      luat/demo/airui/0804_demo/C2.jpg
  91. BIN
      luat/demo/airui/0804_demo/C3.jpg
  92. BIN
      luat/demo/airui/0804_demo/C4.jpg
  93. BIN
      luat/demo/airui/0804_demo/C5.jpg
  94. BIN
      luat/demo/airui/0804_demo/C6.jpg
  95. BIN
      luat/demo/airui/0804_demo/C7.jpg
  96. BIN
      luat/demo/airui/0804_demo/C8.jpg
  97. BIN
      luat/demo/airui/0804_demo/C9.jpg
  98. BIN
      luat/demo/airui/0804_demo/D1.jpg
  99. BIN
      luat/demo/airui/0804_demo/D7.jpg
  100. BIN
      luat/demo/airui/0804_demo/D9.jpg

+ 0 - 5
luat/demo/README.md

@@ -1,5 +0,0 @@
-# LuatOS 内部测试代码
-
-## 重要提示
-
-本目录仅供研发内部测试使用, 普通客户请勿使用.

+ 0 - 53
luat/demo/SC7A20/main.lua

@@ -1,53 +0,0 @@
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "sc7a20_demo"
-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 sc7a20 = require "sc7a20"
-
-i2cid = 0
-i2c_speed = i2c.FAST
-
-gpio.setup(24, function() --配置中断,外部唤醒用
-    log.info("gpio 24")
-end, gpio.PULLUP, gpio.BOTH)
-
-gpio.setup(2, function() --配置中断,外部唤醒用
-    log.info("gpio 2")
-end, gpio.PULLUP, gpio.BOTH)
-
-sys.taskInit(function()
-    i2c.setup(i2cid, i2c_speed)
-
-    sc7a20.init(i2cid)--初始化,传入i2c_id
-
-    sys.wait(50)
-    sc7a20.set_thresh(i2cid, string.char(0x05), string.char(0x05))  -- 设置活动阀值
-    sys.wait(50)
-    sc7a20.set_irqf(i2cid, 1, string.char(0x1F), string.char(0x03), string.char(0xFF))  -- AOI1中断映射到INT1上
-    sys.wait(50)
-    sc7a20.set_irqf(i2cid, 2, string.char(0x1F), string.char(0x03), string.char(0xFF))  -- AOI2中断映射到INT2上
-
-    while 1 do
-        local sc7a20_data = sc7a20.get_data()
-        log.info("sc7a20_data", "sc7a20_data.x"..(sc7a20_data.x),"sc7a20_data.y"..(sc7a20_data.y),"sc7a20_data.z"..(sc7a20_data.z))
-        sys.wait(1000)
-    end
-end)
-
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 24
luat/demo/adc/main.lua

@@ -1,24 +0,0 @@
-
--- 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()之后后面不要加任何语句!!!!!

+ 0 - 113
luat/demo/adc/testAdc.lua

@@ -1,113 +0,0 @@
-
---[[
-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 = {}
-
-local rtos_bsp = rtos.bsp()
-function adc_pin() -- 根据不同开发板,设置ADC编号
-    if rtos_bsp == "AIR101" then -- Air101开发板ADC编号
-        return 0,1,255,255,adc.CH_CPU ,adc.CH_VBAT 
-    elseif rtos_bsp == "AIR103" then -- Air103开发板ADC编号
-        return 0,1,2,3,adc.CH_CPU ,adc.CH_VBAT 
-    elseif rtos_bsp == "AIR105" then -- Air105开发板ADC编号
-        -- 默认不开启分压,范围是0-1.8v精度高
-        -- 设置分压要在adc.open之前设置,否则无效!!
-        -- adc.setRange(adc.ADC_RANGE_3_6)
-        return 0,5,6,255,255,255
-    elseif rtos_bsp == "ESP32C3" then -- ESP32C3开发板ADC编号
-        return 0,1,2,3,adc.CH_CPU , 255
-    elseif rtos_bsp == "ESP32C2" then -- ESP32C2开发板ADC编号
-        return 0,1,2,3,adc.CH_CPU , 255
-    elseif rtos_bsp == "ESP32S3" then -- ESP32S3开发板ADC编号
-        return 0,1,2,3,adc.CH_CPU , 255
-    elseif rtos_bsp == "EC618" then --Air780E开发板ADC编号
-        -- 默认不开启分压,范围是0-1.2v精度高
-        -- 设置分压要在adc.open之前设置,否则无效!!
-        -- adc.setRange(adc.ADC_RANGE_3_8)
-        return 0,1,255,255,adc.CH_CPU ,adc.CH_VBAT 
-    elseif string.find(rtos_bsp,"EC718") then --Air780EP开发板ADC编号
-        -- 默认不开启分压,范围是0-1.6v精度高
-        -- 开启分压后,外部输入最大不可超过3.3V
-        -- 设置分压要在adc.open之前设置,否则无效!!
-        -- adc.setRange(adc.ADC_RANGE_MAX)
-        return 0,1,255,255,adc.CH_CPU ,adc.CH_VBAT 
-    elseif string.find(rtos_bsp,"UIS") then 
-        return 0,1,255,255, adc.CH_CPU ,adc.CH_VBAT 
-    else
-        log.info("main", "define ADC pin in main.lua")
-        return 255,255,255,255, adc.CH_CPU ,adc.CH_VBAT 
-    end
-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 rtos_bsp == "AIR105" then
-        adc.setRange(adc.ADC_RANGE_3_6) --开启的内部分压,可以把量程扩大
-    end
-    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), "单位0.001摄氏度")
-        end
-        if adc_pin_vbat and adc_pin_vbat ~= 255 then
-            log.debug("adc", "VBAT", adc.get(adc_pin_vbat), "单位毫伏(mV)")
-        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

+ 0 - 49
luat/demo/adxl345/main.lua

@@ -1,49 +0,0 @@
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "adxl345_demo"
-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 adxl34x = require "adxl34x"
-
-i2cid = 0
-i2c_speed = i2c.FAST
-
-gpio.setup(24, function() --配置wakeup中断,外部唤醒用  连接ADXL34X INT1引脚
-    log.info("gpio ri")
-end, gpio.PULLUP, gpio.FALLING)
-
-sys.taskInit(function()
-    i2c.setup(i2cid, i2c_speed)
-
-    adxl34x.init(i2cid)--初始化,传入i2c_id
-
-    sys.wait(50)
-    adxl34x.set_thresh(i2cid, string.char(0x05), string.char(0x02), string.char(0x05))  -- 设置阀值
-    sys.wait(50)
-    adxl34x.set_irqf(i2cid, string.char(0x00), string.char(0xff), string.char(0x10))     -- activity映射到到INT1,并开启对应中断功能
-
-    while 1 do
-        adxl34x.get_int_source(i2cid)    -- 不加这个不会触发中断
-        
-        local adxl34x_data = adxl34x.get_data()
-        log.info("adxl34x_data", "adxl34x_data.x"..(adxl34x_data.x),"adxl34x_data.y"..(adxl34x_data.y),"adxl34x_data.z"..(adxl34x_data.z))
-        sys.wait(1000)
-    end
-end)
-
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 81
luat/demo/air153C_wtd/main.lua

@@ -1,81 +0,0 @@
-PROJECT = 'air153C_wtd'
-VERSION = '2.0.0'
-LOG_LEVEL = log.LOG_INFO
-log.setLevel(LOG_LEVEL )
-require 'air153C_wtd'
-local sys = require "sys"
-_G.sysplus = require("sysplus")
-
---[[
-    对于喂狗以及关闭喂狗,调用函数时需要等待对应的时间
-    例如:   1. 喂狗是410ms,那么需要等待至少400ms,即
-            air153C_wtd.feed_dog(pin)
-            sys.wait(410ms)
-            2. 关闭喂狗是710ms,那么需要等待至少700ms
-            air153C_wtd.close_watch_dog(pin)
-            sys.wait(710ms)
-]]
-
-sys.taskInit(function ()
-    log.info("main","taskInit")
-    local flag = 0
-    air153C_wtd.init(28)
-    air153C_wtd.feed_dog(28)--模块开机第一步需要喂狗一次
-    sys.wait(3000)--此处延时3s,防止1s内喂狗2次导致进入测试模式
-
-
-    --不喂狗
-    log.info("WTD","not eatdog test start!")
-    while 1 do
-        flag=flag+1
-        log.info("not feed dog",flag)
-        sys.wait(1000)
-    end
-
-
-    --喂狗
-    -- log.info("WTD","eatdog test start!")
-    -- while 1 do
-    -- air153C_wtd.feed_dog(28)--28为看门狗控制引脚
-    -- log.info("main","feed dog")
-    -- sys.wait(200000)
-    -- end
-
-    
-    --关闭喂狗
-    -- log.info("WTD","close eatdog test start!")
-    -- air153C_wtd.close_watch_dog(28)--28为看门狗控制引脚
-    -- sys.wait(1000)
-    
-
-    --先关闭喂狗,再打开喂狗
-    -- log.info("WTD","close eatdog and open eatdog test start!")
-    -- while 1 do
-    --     if flag==0 then
-    --         flag = 1
-    --         log.info("main","close watch dog")
-    --         air153C_wtd.close_watch_dog(28)--28为看门狗控制引脚
-    --         sys.wait(30000) --方便观察设置的时间长一点
-    --     end
-    --     flag=flag+1
-    --     if flag == 280 then
-    --         log.info("main","feed dog")
-    --         air153C_wtd.feed_dog(28)
-    --     end
-    --     sys.wait(1000)
-    --     log.info("Timer count(1s):", flag);
-    -- end
-
-
-    --测试模式复位
-    --测试模式: 1s内喂狗2次,会使模块复位重启
-    -- log.info("WTD","testmode test start!")
-    -- while flag<2 do
-    -- flag =flag+ 1
-    -- air153C_wtd.feed_dog(28)--28为看门狗控制引脚
-    -- log.info("main","feed dog")
-    -- sys.wait(500)
-    -- end
-end)
-
-sys.run()

+ 0 - 53
luat/demo/air530z/offline/main.lua

@@ -1,53 +0,0 @@
-
-_G.sys = require("sys")
-require "sysplus"
---[[
-接Air530Z-BD, 本demo演示的是不带AGPS的, 带AGPS的请参考demo/air530z/agps (还没写完)
-
-提醒:
-1. Air530Z-BD的串口默认是9600波特率, 单北斗
-2. Air530Z 是北斗+GPS双模, 默认是9600波特率
-3. UART的TX/RX要交叉接, 否则无法正常工作
-]]
-
-local gps_uart_id = 2
-
-sys.taskInit(function()
-    libgnss.clear() -- 清空数据,兼初始化
-    sys.wait(100)
-    -- 先尝试9600波特率, 并切换波特率
-    uart.setup(gps_uart_id, 9600)
-    uart.write(gps_uart_id, "$PCAS01,5*19\r\n")
-    sys.wait(200)
-
-    -- 按115200开始读取数据
-    uart.setup(gps_uart_id, 115200)
-    -- 调试日志,可选
-    -- libgnss.debug(true)
-    libgnss.bind(gps_uart_id)
-end)
-
-sys.taskInit(function()
-    while 1 do
-        sys.wait(1000)
-        log.info("RMC", json.encode(libgnss.getRmc(2) or {}, "7f"))
-        -- log.info("INT", libgnss.getIntLocation())
-        -- log.info("GGA", libgnss.getGga(3))
-        -- log.info("GLL", json.encode(libgnss.getGll(2) or {}, "7f"))
-        -- log.info("GSA", json.encode(libgnss.getGsa(1) or {}, "7f"))
-        -- log.info("GSV", json.encode(libgnss.getGsv(2) or {}, "7f"))
-        -- log.info("VTG", json.encode(libgnss.getVtg(2) or {}, "7f"))
-        -- log.info("ZDA", json.encode(libgnss.getZda(2) or {}, "7f"))
-        -- log.info("date", os.date())
-        -- log.info("sys", rtos.meminfo("sys"))
-        -- log.info("lua", rtos.meminfo("lua"))
-
-        -- 打印全部卫星
-        -- local gsv = libgnss.getGsv() or {sats={}}
-        -- for i, v in ipairs(gsv.sats) do
-        --     log.info("sat", i, v.nr, v.snr, v.azimuth, v.elevation)
-        -- end
-    end
-end)
-
-sys.run()

+ 0 - 16
luat/demo/air780eg_gnsstest/README.md

@@ -1,16 +0,0 @@
-# Air780EG定位数据测试程序
-
-## 使用条件
-
-硬件条件: Air780EG 或 Air780E + Air530H, 或春节内测开发板
-
-## 固件要求
-
-若使用 Air780EG, V1105或以上
-
-## 提醒, 本demo需要很多流量
-
-若持续开启, 日流量需要**100M**以上, 务必留意!!
-
-本demo完全没有优化流量, 会上报**全部**GNSS数据, 以便分析!!!
-

+ 0 - 35
luat/demo/air780eg_gnsstest/main.lua

@@ -1,35 +0,0 @@
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "gnsstest"
-VERSION = "1.0.1"
-PRODUCT_KEY = "" -- 基站定位需要用到
-
---[[
-本demo需要很多流量!!!
-注意: 室内无信号!! 无法定位!!!
-]]
-
--- sys库是标配
-_G.sys = require("sys")
-require("sysplus")
-
-_G.gps_uart_id = 2
-
--- 演示GNSS定位, 含AGPS
-require "testGnss"
-
--- 演示上报到MQTT服务器 对应的网页是 https://iot.openluat.com/iot/device-gnss
--- require "testMqtt"
-
--- 演示定位成功后切换GPIO高低电平
--- require "testGpio"
-
--- 本TCP演示是连接到 gps.nutz.cn 19002 端口, irtu的自定义包格式
--- 网页是 https://gps.nutz.cn/ 输入IMEI号可参考当前位置
--- 微信小程序是 irtu寻物, 点击IMEI号, 扫描模块的二维码可查看当前位置和历史轨迹
--- 服务器源码地址: https://gitee.com/wendal/irtu-gps
-require "testTcp"
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 50
luat/demo/air780eg_gnsstest/testGnss.lua

@@ -1,50 +0,0 @@
-
--- libgnss库初始化
-libgnss.clear() -- 清空数据,兼初始化
-
--- LED和ADC初始化
-LED_GNSS = 24
-gpio.setup(LED_GNSS, 0) -- GNSS定位成功灯
-
-local gnss = require("uc6228")
-
-sys.taskInit(function()
-    log.debug("提醒", "室内无GNSS信号,定位不会成功, 要到空旷的室外,起码要看得到天空")
-    gnss.setup({
-        uart_id=2,
-        uart_forward = uart.VUART_0, -- 转发到虚拟串口,方便对接GnssToolKit3
-        debug=true
-    })
-    pm.power(pm.GPS, true)
-    gnss.start()
-    gnss.agps()
-end)
-
-sys.taskInit(function()
-    while 1 do
-        sys.wait(5000)
-        -- log.info("RMC", json.encode(libgnss.getRmc(2) or {}, "7f"))
-        -- log.info("INT", libgnss.getIntLocation())
-        -- log.info("GGA", libgnss.getGga(3))
-        -- log.info("GLL", json.encode(libgnss.getGll(2) or {}, "7f"))
-        -- log.info("GSA", json.encode(libgnss.getGsa(1) or {}, "7f"))
-        -- log.info("GSV", json.encode(libgnss.getGsv(2) or {}, "7f"))
-        -- log.info("VTG", json.encode(libgnss.getVtg(2) or {}, "7f"))
-        -- log.info("ZDA", json.encode(libgnss.getZda(2) or {}, "7f"))
-        -- log.info("date", os.date())
-        -- log.info("sys", rtos.meminfo("sys"))
-        -- log.info("lua", rtos.meminfo("lua"))
-    end
-end)
-
--- 订阅GNSS状态编码
-sys.subscribe("GNSS_STATE", function(event, ticks)
-    -- event取值有 
-    -- FIXED 定位成功
-    -- LOSE  定位丢失
-    -- ticks是事件发生的时间,一般可以忽略
-    local onoff = libgnss.isFix() and 1 or 0
-    log.info("GNSS", "LED", onoff)
-    gpio.set(LED_GNSS, onoff)
-end)
-

+ 0 - 23
luat/demo/air780eg_gnsstest/testGpio.lua

@@ -1,23 +0,0 @@
-
-
-LED_VBAT = 26
-gpio.setup(LED_VBAT, 0) -- 低电压警告灯
-
-adc.open(adc.CH_CPU)
-
--- 适配GNSS测试设备的GPIO
-sys.taskInit(function()
-    while 1 do
-        local vbat = adc.get(adc.CH_VBAT)
-        log.info("vbat", vbat)
-        if vbat < 3400 then
-            gpio.set(LED_VBAT, 1)
-            sys.wait(100)
-            gpio.set(LED_VBAT, 0)
-            sys.wait(900)
-        else
-            sys.wait(1000)
-        end
-    end
-end)
-

+ 0 - 127
luat/demo/air780eg_gnsstest/testMqtt.lua

@@ -1,127 +0,0 @@
-
-local mqttc = nil
-
--- mqtt 上传任务
-sys.taskInit(function()
-    sys.waitUntil("IP_READY", 15000)
-    mqttc = mqtt.create(nil, "lbsmqtt.airm2m.com", 1886) -- mqtt客户端创建
-
-    mqttc:auth(mobile.imei(), mobile.imei(), mobile.muid()) -- mqtt三元组配置
-    log.info("mqtt", mobile.imei(), mobile.imei(), mobile.muid())
-    mqttc:keepalive(30) -- 默认值240s
-    mqttc:autoreconn(true, 3000) -- 自动重连机制
-
-    mqttc:on(function(mqtt_client, event, data, payload) -- mqtt回调注册
-        -- 用户自定义代码,按event处理
-        -- log.info("mqtt", "event", event, mqtt_client, data, payload)
-        if event == "conack" then -- mqtt成功完成鉴权后的消息
-            sys.publish("mqtt_conack") -- 小写字母的topic均为自定义topic
-            -- 订阅不是必须的,但一般会有
-            mqtt_client:subscribe("/gnss/" .. mobile.imei() .. "/down/#")
-        elseif event == "recv" then -- 服务器下发的数据
-            log.info("mqtt", "downlink", "topic", data, "payload", payload)
-            local dl = json.decode(data)
-            if dl then
-                -- 检测命令
-                if dl.cmd then
-                    -- 直接写uart
-                    if dl.cmd == "uart" and dl.data then
-                        uart.write(gps_uart_id, dl.data)
-                    -- 重启命令
-                    elseif dl.cmd == "reboot" then
-                        rtos.reboot()
-                    elseif dl.cmd == "stat" then
-                        upload_stat()
-                    end
-                end
-            end
-        elseif event == "sent" then -- publish成功后的事件
-            log.info("mqtt", "sent", "pkgid", data)
-        end
-    end)
-
-    -- 发起连接之后,mqtt库会自动维护链接,若连接断开,默认会自动重连
-    mqttc:connect()
-    -- sys.waitUntil("mqtt_conack")
-    -- log.info("mqtt连接成功")
-    sys.timerStart(upload_stat, 3000) -- 一秒后主动上传一次
-    while true do
-        sys.wait(60*1000)
-    end
-    mqttc:close()
-    mqttc = nil
-end)
-
-sys.taskInit(function()
-    while 1 do
-        sys.wait(3600 * 1000) -- 一小时检查一次
-        local fixed, time_fixed = libgnss.isFix()
-        if not fixed then
-            exec_agnss()
-        end
-    end
-end)
-
-sys.timerLoopStart(upload_stat, 60000)
-
-sys.taskInit(function()
-    local msgs = {}
-    while 1 do
-        local ret, topic, data, qos = sys.waitUntil("uplink", 30000)
-        if ret then
-            if topic == "close" then
-                break
-            end
-            log.info("mqtt", "publish", "topic", topic)
-            -- if #data > 512 then
-            --     local start = mcu.ticks()
-            --     local cdata = miniz.compress(data)
-            --     local endt = mcu.ticks() - start
-            --     if cdata then
-            --         log.info("miniz", #data, #cdata, endt)
-            --     end
-            -- end
-            if mqttc:ready() then
-                local tmp = msgs
-                if #tmp > 0 then
-                    log.info("mqtt", "ready, send buff", #tmp)
-                    msgs = {}
-                    for k, msg in pairs(tmp) do
-                        mqttc:publish(msg.topic, msg.data, 0)
-                    end
-                end
-                mqttc:publish(topic, data, qos)
-            else
-                log.info("mqtt", "not ready, insert into buff")
-                if #msgs > 60 then
-                    table.remove(msgs, 1)
-                end
-                table.insert(msgs, {
-                    topic = topic,
-                    data = data
-                })
-            end
-        end
-    end
-end)
-
-function upload_stat()
-    if mqttc == nil or not mqttc:ready() then return end
-    local stat = {
-        csq = mobile.csq(),
-        rssi = mobile.rssi(),
-        rsrq = mobile.rsrq(),
-        rsrp = mobile.rsrp(),
-        -- iccid = mobile.iccid(),
-        snr = mobile.snr(),
-        vbat = adc.get(adc.CH_VBAT),
-        temp = adc.get(adc.CH_CPU),
-        memsys = {rtos.meminfo("sys")},
-        memlua = {rtos.meminfo()},
-        fixed = libgnss.isFix()
-    }
-    sys.publish("uplink", "/gnss/" .. mobile.imei() .. "/up/stat", (json.encode(stat)), 1)
-end
-
-sys.timerLoopStart(upload_stat, 60 * 1000)
-

+ 0 - 190
luat/demo/air780eg_gnsstest/testTcp.lua

@@ -1,190 +0,0 @@
---[[
-连到gps.nutz.cn 19002 端口, irtu的自定义包格式
-]]
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "scdemo"
-VERSION = "1.0.0"
-
-log.info("main", PROJECT, VERSION)
-
--- 一定要添加sys.lua !!!!
-sys = require("sys")
-sysplus = require("sysplus")
-libnet = require "libnet"
-
-if pm and pm.PWK_MODE then
-    pm.power(pm.PWK_MODE, false)
-end
-
-if wdt then
-    --添加硬狗防止程序卡死,在支持的设备上启用这个功能
-    wdt.init(9000)--初始化watchdog设置为9s
-    sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
-end
-
-adc.open(adc.CH_VBAT)
-
---=============================================================
--- 本TCP演示是连接到 gps.nutz.cn 19002 端口, irtu的自定义包格式
--- 网页是 https://gps.nutz.cn/ 输入IMEI号可参考当前位置
--- 微信小程序是 irtu寻物, 点击IMEI号, 扫描模块的二维码可查看当前位置和历史轨迹
-local host = "gps.nutz.cn"  -- 服务器ip或者域名, 都可以的
-local port = 19002          -- 服务器端口号
-local is_udp = false        -- 如果是UDP, 要改成true, false就是TCP
-local is_tls = false        -- 加密与否, 要看服务器的实际情况
---=============================================================
-
--- 处理未识别的网络消息
-local function netCB(msg)
-	log.info("未处理消息", msg[1], msg[2], msg[3], msg[4])
-end
-
-local socket_ready = false
-local taskName = "sc"
-local topic = taskName .. "_txrx"
-log.info("socket", "event topic", topic)
-
--- 演示task
-local function sockettest()
-    sys.waitUntil("IP_READY")
-
-    -- 开始正在的逻辑, 发起socket链接,等待数据/上报心跳
-    local txqueue = {}
-    sysplus.taskInitEx(sockettask, taskName, netCB, taskName, txqueue, topic)
-    while 1 do
-        local result, tp, data = sys.waitUntil(topic, 30000)
-        -- log.info("event", result, tp, data)
-        if not result then
-            -- 等很久了,没数据上传/下发, 发个日期心跳包吧
-            table.insert(txqueue, string.char(0))
-            sys_send(taskName, socket.EVENT, 0)
-        elseif tp == "uplink" then
-            -- 上行数据, 主动上报的数据,那就发送呀
-            table.insert(txqueue, data)
-            sys_send(taskName, socket.EVENT, 0)
-        elseif tp == "downlink" then
-            -- 下行数据,接收的数据, 从ipv6task来的
-            -- 其他代码可以通过 sys.publish()
-            log.info("socket", "收到下发的数据了", #data)
-        end
-    end
-end
-
-
-
-function sockettask(d1Name, txqueue, rxtopic)
-    -- 打印准备连接的服务器信息
-    log.info("socket", host, port, is_udp and "UDP" or "TCP", is_tls and "TLS" or "RAW")
-
-    -- 准备好所需要的接收缓冲区
-    local rx_buff = zbuff.create(1024)
-    local netc = socket.create(nil, d1Name)
-    socket.config(netc, nil, is_udp, is_tls)
-    log.info("任务id", d1Name)
-
-    while true do
-        -- 连接服务器, 15秒超时
-        log.info("socket", "开始连接服务器")
-        sysplus.cleanMsg(d1Name)
-        local result = libnet.connect(d1Name, 15000, netc, host, port)
-        if result then
-			log.info("socket", "服务器连上了")
-            local tmp = {imei=mobile.imei(),iccid=mobile.iccid()}
-			libnet.tx(d1Name, 0, netc, json.encode(tmp))
-            socket_ready = true
-        else
-            log.info("socket", "服务器没连上了!!!")
-		end
-		while result do
-            -- 连接成功之后, 先尝试接收
-            -- log.info("socket", "调用rx接收数据")
-			local succ, param = socket.rx(netc, rx_buff)
-			if not succ then
-				log.info("服务器断开了", succ, param, ip, port)
-				break
-			end
-            -- 如果服务器有下发数据, used()就必然大于0, 进行处理
-			if rx_buff:used() > 0 then
-				log.info("socket", "收到服务器数据,长度", rx_buff:used())
-                local data = rx_buff:query() -- 获取数据
-                sys.publish(rxtopic, "downlink", data)
-				rx_buff:del()
-			end
-            -- log.info("libnet", "调用wait开始等待消息")
-            -- 等待事件, 例如: 服务器下发数据, 有数据准备上报, 服务器断开连接
-			result, param, param2 = libnet.wait(d1Name, 15000, netc)
-            log.info("libnet", "wait", result, param, param2)
-			if not result then
-                -- 网络异常了, 那就断开了, 执行清理工作
-				log.info("socket", "服务器断开了", result, param)
-				break
-            elseif #txqueue > 0 then
-                -- 有待上报的数据,处理之
-                while #txqueue > 0 do
-                    local data = table.remove(txqueue, 1)
-                    if not data then
-                        break
-                    end
-                    result,param = libnet.tx(d1Name, 15000, netc,data)
-                    -- log.info("libnet", "发送数据的结果", result, param)
-                    if not result then
-                        log.info("socket", "数据发送异常", result, param)
-                        break
-                    end
-                end
-            end
-            -- 循环尾部, 继续下一轮循环
-		end
-        socket_ready = false
-        -- 能到这里, 要么服务器断开连接, 要么上报(tx)失败, 或者是主动退出
-		libnet.close(d1Name, 5000, netc)
-		-- log.info(rtos.meminfo("sys"))
-		sys.wait(3000) -- 这是重连时长, 自行调整
-    end
-end
-
-sys.taskInit(sockettest)
-
-
-sys.taskInit(function()
-    sys.waitUntil("IP_READY")
-    local stat_t = 0
-    local buff = zbuff.create(64)
-    while true do
-        if socket_ready then
-            -- 发送设备状态  >b7IHb  ==  1*7+4+2+1 = 14
-            if os.time() - stat_t > 30 then
-                -- 30秒上报一次
-                local vbat = adc.get(adc.CH_VBAT)
-                buff:seek(0)
-                buff:pack(">b7IHb", 0x55, 0, 0, 0, 0, 0, 0, 0, vbat, mobile.csq())
-                sys.publish(topic, "uplink", buff:query())
-                stat_t = os.time()
-                sys.wait(100)
-            end
-            -- 发送位置信息 >b2i3H2b3 == 1*2+4*3+2*2+1*3 == 2+12+4+3 = 21
-            if true then
-                local rmc = libgnss.getRmc(1)
-                local gsa = libgnss.getGsa()
-                local gsv = libgnss.getGsv()
-                -- log.info("socket", "rmc", rmc.lat, rmc.lng, rmc.alt, rmc.course, rmc.speed)
-                buff:seek(0)
-                buff:pack(">b2i3H2b3", 0xAA, libgnss.isFix() and 1 or 0,
-                        os.time(),
-                        rmc and rmc.lng or 0,
-                        rmc and rmc.lat or 0,
-                        0, -- rmc and rmc.alt or 0,
-                        math.floor(rmc and rmc.course or 0),
-                        math.floor(rmc and rmc.speed or 0),
-                        gsa and #gsa.sats or 0, -- msg.sateCno
-                        gsv and gsv.total_sats or 0 -- msg.sateCnt
-                )
-                sys.publish(topic, "uplink", buff:query())
-            end
-            sys.wait(1000)
-        else
-            sys.wait(100)
-        end
-    end
-end)

+ 0 - 281
luat/demo/air780eg_gnsstest/uc6228.lua

@@ -1,281 +0,0 @@
---[[
-
-]]
-
-local uc6228 = {
-    version = "1.0.1"
-}
-
-local sys = require("sys")
-
-function uc6228.setup(opts)
-    uc6228.opts = opts
-    if not uc6228.opts.uart_id then
-        uc6228.opts.uart_id = 2
-    end
-end
-
-function uc6228.start()
-    -- 初始化串口
-    local gps_uart_id = uc6228.opts.uart_id
-    local opts = uc6228.opts
-    local write = uc6228.writeCmd
-    uart.setup(gps_uart_id, 115200)
-    -- 是否为调试模式
-    if opts.debug then
-        libgnss.debug(true)
-    end
-    if uc6228.opts.uart_forward then
-        uart.setup(uc6228.opts.uart_forward, 115200)
-        libgnss.bind(gps_uart_id, uc6228.opts.uart_forward)
-    else
-        libgnss.bind(gps_uart_id)
-    end
-
-    -- 是否需要切换定位系统呢?
-    if opts.sys then
-        if type(opts.sys) == "number" then
-            if opts.sys == 1 then
-                uart.write(gps_uart_id, "$CFGSYS,H01\r\n")
-            elseif opts.sys == 2 then
-                uart.write(gps_uart_id, "$CFGSYS,H10\r\n")
-            elseif opts.sys == 5 then
-                uart.write(gps_uart_id, "$CFGSYS,H101\r\n")
-            else
-                uart.write(gps_uart_id, "$CFGSYS,H11\r\n")
-            end
-        end
-    end
-
-    if not opts.nmea_ver or opts.nmea_ver == 41 then
-        uart.write(gps_uart_id, "$CFGNMEA,h51\r\n") -- 切换到NMEA 4.1
-    end
-
-    -- 打开全部NMEA语句
-    if opts.rmc_only then
-        uart.write(gps_uart_id, "$CFGMSG,0,0,0\r\n")
-        sys.wait(20)
-        uart.write(gps_uart_id, "$CFGMSG,0,1,0\r\n")
-        sys.wait(20)
-        uart.write(gps_uart_id, "$CFGMSG,0,2,0\r\n")
-        sys.wait(20)
-        uart.write(gps_uart_id, "$CFGMSG,0,3,0\r\n")
-        sys.wait(20)
-        uart.write(gps_uart_id, "$CFGMSG,0,4,1\r\n")
-        sys.wait(20)
-        uart.write(gps_uart_id, "$CFGMSG,0,5,0\r\n")
-        sys.wait(20)
-        uart.write(gps_uart_id, "$CFGMSG,0,6,0\r\n")
-        sys.wait(20)
-        uart.write(gps_uart_id, "$CFGMSG,0,7,0\r\n")
-        sys.wait(20)
-    elseif uc6228.opts.no_nmea then
-        uart.write(gps_uart_id, "$CFGMSG,0,0,0\r\n")
-        sys.wait(20)
-        uart.write(gps_uart_id, "$CFGMSG,0,1,0\r\n")
-        sys.wait(20)
-        uart.write(gps_uart_id, "$CFGMSG,0,2,0\r\n")
-        sys.wait(20)
-        uart.write(gps_uart_id, "$CFGMSG,0,3,0\r\n")
-        sys.wait(20)
-        uart.write(gps_uart_id, "$CFGMSG,0,4,0\r\n")
-        sys.wait(20)
-        uart.write(gps_uart_id, "$CFGMSG,0,5,0\r\n")
-        sys.wait(20)
-        uart.write(gps_uart_id, "$CFGMSG,0,6,0\r\n")
-        sys.wait(20)
-        uart.write(gps_uart_id, "$CFGMSG,0,7,0\r\n")
-        sys.wait(20)
-    else
-        uart.write(gps_uart_id, "$CFGMSG,0,0,1\r\n") -- GGA
-        sys.wait(10)
-        uart.write(gps_uart_id, "$CFGMSG,0,1,1\r\n") -- GLL
-        sys.wait(10)
-        uart.write(gps_uart_id, "$CFGMSG,0,2,1\r\n") -- GSA
-        sys.wait(10)
-        uart.write(gps_uart_id, "$CFGMSG,0,3,1\r\n") -- GSV
-        sys.wait(10)
-        uart.write(gps_uart_id, "$CFGMSG,0,4,1\r\n") -- RMC
-        sys.wait(10)
-        uart.write(gps_uart_id, "$CFGMSG,0,5,1\r\n") -- VTG
-        sys.wait(10)
-        uart.write(gps_uart_id, "$CFGMSG,0,6,1\r\n") -- ZDA
-        sys.wait(10)
-        -- uart.write(gps_uart_id, "$CFGMSG,0,7,1\r\n") -- GST
-        -- sys.wait(10)
-    end
-end
-
-function uc6228.writeCmd(cmd)
-    log.info("uc6228", "写入指令", cmd:trim())
-    uart.write(uc6228.opts.uart_id, cmd)
-end
-
-function uc6228.reboot(mode)
-    local cmd = "$RESET,0,"
-    if not mode then
-        mode = 0
-    end
-    if mode == 2 then
-        cmd = cmd .. "hff\r\n"
-    elseif mode == 1 then
-        cmd = cmd .. "h01\r\n"
-    else
-        cmd = cmd .. "h00\r\n"
-    end
-    uart.write(uc6228.opts.uart_id, cmd)
-    if mode == 2 then
-        uc6228.agps_tm = nil
-    end
-    libgnss.clear()
-end
-
-function uc6228.stop()
-    uart.close(uc6228.opts.uart_id)
-end
-
-local function do_agps()
-    -- 首先, 发起位置查询
-    local lat, lng
-    if mobile then
-        mobile.reqCellInfo(6)
-        sys.waitUntil("CELL_INFO_UPDATE", 6000)
-        local lbsLoc2 = require("lbsLoc2")
-        lat, lng = lbsLoc2.request(5000)
-        -- local lat, lng, t = lbsLoc2.request(5000, "bs.openluat.com")
-        log.info("lbsLoc2", lat, lng)
-        if lat and lng then
-            lat = tonumber(lat)
-            lng = tonumber(lng)
-            log.info("lbsLoc2", lat, lng)
-            -- 转换单位
-            local lat_dd,lat_mm = math.modf(lat)
-            local lng_dd,lng_mm = math.modf(lng)
-            lat = lat_dd * 100 + lat_mm * 60
-            lng = lng_dd * 100 + lng_mm * 60
-        end
-    elseif wlan then
-        -- wlan.scan()
-        -- sys.waitUntil("WLAN_SCAN_DONE", 5000)
-    end
-    if not lat then
-        -- 获取最后的本地位置
-        local locStr = io.readFile("/hxxtloc")
-        if locStr then
-            local jdata = json.decode(locStr)
-            if jdata and jdata.lat then
-                lat = jdata.lat
-                lng = jdata.lng
-            end
-        end
-    end
-    -- 然后, 判断星历时间和下载星历
-    local now = os.time()
-    local agps_time = tonumber(io.readFile("/hxxt_tm") or "0") or 0
-    if now - agps_time > 3600 then
-        local url = uc6228.opts.url
-        if not uc6228.opts.url then
-            if uc6228.opts.sys and 2 == uc6228.opts.sys then
-                -- 单北斗
-                url = "http://download.openluat.com/9501-xingli/HXXT_BDS_AGNSS_DATA.dat"
-            else
-                url = "http://download.openluat.com/9501-xingli/HXXT_GPS_BDS_AGNSS_DATA.dat"
-            end
-        end
-        local code = http.request("GET", url, nil, nil, {dst="/hxxt.dat"}).wait()
-        if code and code == 200 then
-            log.info("uc6228", "下载星历成功", url)
-            io.writeFile("/hxxt_tm", tostring(now))
-        else
-            log.info("uc6228", "下载星历失败", code)
-        end
-    else
-        log.info("uc6228", "星历不需要更新", now - agps_time)
-    end
-
-    local gps_uart_id = uc6228.opts.uart_id or 2
-
-    -- 写入星历
-    local agps_data = io.readFile("/hxxt.dat")
-    if agps_data and #agps_data > 1024 then
-        log.info("uc6228", "写入星历数据", "长度", #agps_data)
-        for offset=1,#agps_data,512 do
-            log.info("gnss", "AGNSS", "write >>>", #agps_data:sub(offset, offset + 511))
-            uart.write(gps_uart_id, agps_data:sub(offset, offset + 511))
-            sys.wait(100) -- 等100ms反而更成功
-        end
-        -- uart.write(gps_uart_id, agps_data)
-    else
-        log.info("uc6228", "没有星历数据")
-        return
-    end
-
-    -- 写入参考位置
-    -- "lat":23.4068813,"min":27,"valid":true,"day":27,"lng":113.2317505
-    if not lat or not lng then
-        -- lat, lng = 23.4068813, 113.2317505
-        log.info("uc6228", "没有GPS坐标", lat, lng)
-        return -- TODO 暂时不写入参考位置
-    end
-    if socket.sntp then
-        socket.sntp()
-        sys.waitUntil("NTP_UPDATE", 1000)
-    end
-    local date = os.date("!*t")
-    if date.year > 2023 then
-        local str = string.format("$AIDTIME,%d,%d,%d,%d,%d,%d,000", date["year"], date["month"], date["day"],
-            date["hour"], date["min"], date["sec"])
-        log.info("uc6228", "参考时间", str)
-        uart.write(gps_uart_id, str .. "\r\n")
-        sys.wait(20)
-    end
-
-    local str = string.format("$AIDPOS,%.7f,%s,%.7f,%s,1.0\r\n",
-    lat > 0 and lat or (0 - lat), lat > 0 and 'N' or 'S',
-    lng > 0 and lng or (0 - lng), lng > 0 and 'E' or 'W')
-    log.info("uc6228", "写入AGPS参考位置", str)
-    uart.write(gps_uart_id, str)
-
-    -- 结束
-    uc6228.agps_tm = now
-end
-
-function uc6228.agps(force)
-    -- 如果不是强制写入AGPS信息, 而且是已经定位成功的状态,那就没必要了
-    if not force and libgnss.isFix() then return end
-    -- 先判断一下时间
-    local now = os.time()
-    if force or not uc6228.agps_tm or now - uc6228.agps_tm > 3600 then
-        -- 执行AGPS
-        log.info("uc6228", "开始执行AGPS")
-        do_agps()
-    else
-        log.info("uc6228", "暂不需要写入AGPS")
-    end
-end
-
-function uc6228.saveloc(lat, lng)
-    if not lat or not lng then
-        if libgnss.isFix() then
-            local rmc = libgnss.getRmc(3)
-            if rmc then
-                lat, lng = rmc.lat, rmc.lng
-            end
-        end
-    end
-    if lat and lng then
-        log.info("待保存的GPS位置", lat, lng)
-        local locStr = string.format('{"lat":%7f,"lng":%7f}', lat, lng)
-        log.info("uc6228", "保存GPS位置", locStr)
-        io.writeFile("/hxxtloc", locStr)
-    end
-end
-
-sys.subscribe("GNSS_STATE", function(event)
-    if event == "FIXED" then
-        uc6228.saveloc()
-    end
-end)
-
-
-return uc6228

+ 0 - 22
luat/demo/air780epvh_gnsstest/README.md

@@ -1,22 +0,0 @@
-# Air780EPVH定位数据测试程序
-
-## 使用条件
-
-硬件条件: Air780EVPH
-
-## 固件要求
-
-2024.6.1之后的编译的Air780EP或者Air780EPV固件
-
-## 提醒, 本demo需要很多流量
-
-若持续开启, 日流量需要**100M**以上, 务必留意!!
-
-本demo完全没有优化流量, 会上报**全部**GNSS数据, 以便分析!!!
-
-## demo说明
-
-1. 开启 testGnss 是定位功能演示, 含开启GNSS功能, 获取GNSS数据, 注入辅助定位信息(AGPS)
-2. 开启 testMqtt 是上报定位信息到MQTT服务器, 对应的演示网页是 https://iot.openluat.com/iot/device-gnss
-3. 开启 testGpio 是演示GPIO功能, 定位成功后切换GPIO输出
-4. 开启 testTcp 是演示上传数据到TCP服务器, 对应的网页是 https://gps.nutz.cn 微信小程序 iRTU寻物

+ 0 - 284
luat/demo/air780epvh_gnsstest/hdgnss.lua

@@ -1,284 +0,0 @@
-
-local lbsLoc2 = require "lbsLoc2"
-
-local hdgnss = {}
-
-function hdcrc(str, len)
-    if not len then
-        len = #str
-    end
-    local crc1 = 0
-    local crc2 = 0
-    for i = 3, len do
-        crc1 = crc1 + str:byte(i)
-        crc2 = crc2 + (crc1 & 0xff)
-    end
-    -- print(string.format("%02X%02X", crc1 & 0xFF, crc2 & 0xFF))
-    return string.char(crc1 & 0xFF, crc2 & 0xFF)
-end
-
-function hdgnss.aideph()
-    local url = "http://download.openluat.com/9501-xingli/HD_GPS_BDS.hdb"
-    local eph_body = nil
-    if io.fileSize("/hdgnss.bin") > 1024 then
-        local date = os.date("!*t")
-        -- log.info("gnss", "当前系统时间", os.date())
-        if date.year < 2024 then
-            date = os.date("!*t")
-        end
-        if date.year > 2023 then
-            local tm = io.readFile("/hdgnss_tm")
-            if tm then
-                local t = tonumber(tm)
-                if t and (os.time() - t < 3600*2) then
-                    log.info("hdgnss", "重用星历文件")
-                    eph_body = io.readFile("/hdgnss.bin")
-                else
-                    log.info("hdgnss", "星历过期了")
-                    os.remove("/hdgnss.bin")
-                end
-            else
-                log.info("hdgnss", "星历时间有问题")
-            end
-        else
-            log.info("hdgnss", "系统时间有问题")
-        end
-    end
-    if http and not eph_body then
-        -- AGNSS 已调通
-        for i = 1, 3 do
-            local code, _, body = http.request("GET", url, nil, nil, {timeout=3000}).wait()
-            log.info("hdgnss", "AGNSS", code, body and #body or 0)
-            if code == 200 and body and #body > 1024 then
-                io.writeFile("/hdgnss.bin", body)
-                sys.wait(1000)
-                local date = os.date("!*t")
-                if date.year > 2022 then
-                    io.writeFile("/hdgnss_tm", tostring(os.time()))
-                end
-                eph_body = body
-                break
-            end
-            sys.wait(6 * 1000)
-        end
-    end
-    if eph_body and #eph_body > 1024 then
-        local body = eph_body
-        -- for offset = 1, #body, 512 do
-        --     -- log.info("hdgnss", "AGNSS", "write >>>", #body:sub(offset, offset + 511))
-        --     -- uart.write(gps_uart_id, body:sub(offset, offset + 511))
-        --     -- sys.waitUntil("UART2_SEND", 100)
-        --     sys.wait(100) -- 等100ms反而更成功
-        -- end
-        -- uart.write(gps_uart_id, body)
-        local offset = 1
-        local size = #body
-        while offset < size do
-            -- 前两个字符是F1D9
-            if body:byte(offset) == 0xF1 and body:byte(offset + 1) == 0xD9 then
-                -- log.info("hdgnss", "星历数据", body:sub(1, 16):toHex())
-                local len = body:byte(offset + 4) + body:byte(offset + 5) * 256
-                local tmp = body:sub(offset, offset + len + 7)
-                -- log.info("hdgnss", "写入星历片段", offset, len, #tmp, tmp:toHex())
-                uart.write(gps_uart_id, tmp)
-                offset = offset + len + 8
-                sys.wait(20)
-            else
-                log.warn("hdgnss", "分隔出错了", offset, size)
-                break
-            end
-        end
-    end
-    sys.wait(20)
-end
-
-local function exec_agnss()
-    for i = 1, 3 do
-        local ip = socket.localIP()
-        if ip and ip ~= "0.0.0.0" then
-            break
-        end
-        sys.waitUntil("IP_READY", 3000)
-    end
-
-    socket.sntp()
-    sys.waitUntil("NTP_UPDATE", 1000)
-
-    -- 注入当前时间
-    if os.date("*t").year > 2023 then
-        hdgnss.aidtime()
-        sys.wait(100)
-    end
-
-    -- 读取之前的位置信息
-    local lat, lng
-    local gnssloc = io.readFile("/hdloc")
-    if gnssloc then
-        log.info("hdgnss", "最后已知位置信息", gnssloc)
-        local tmp = gnssloc:split(",")
-        if tmp and #tmp == 2 then
-            lat = tonumber(tmp[1])
-            lng = tonumber(tmp[2])
-        end
-    end
-
-    -- 写入参考位置
-    if lat and lng and lat ~= 0 and lng ~= 0 then
-        hdgnss.aidpos(lat, lng)
-        sys.wait(100)
-    else
-        log.info("hdgnss", "当前无辅助位置信息")
-    end
-
-    -- 发起基站定位, 暂时禁用
-    if mobile and false then
-        mobile.reqCellInfo(6)
-        sys.waitUntil("CELL_INFO_UPDATE", 6000)
-        local lat2, lng2, t = lbsLoc2.request(5000)
-        log.info("hdgnss", "基站定位结果", lat2, lng2)
-        if lat2 and lng2 then
-            lat2 = tonumber(lat2:sub(1, 3) .. lat2:sub(5))
-            lng2 = tonumber(lng2:sub(1, 3) .. lng2:sub(5))
-            if lat2 and lng2 then
-                lat = lat
-                lng = lng
-                log.info("hdgnss", "基站定位结果", lat, lng)
-                hdgnss.aidpos(lat, lng)
-            end
-        end
-    end
-
-    hdgnss.aideph()
-
-    -- sys.wait(1000)
-end
-
-function hdgnss.aidpos(lat, lng)
-    local gps_uart_id = hdgnss.opts.uart_id
-    -- AID-POS
-    local str = string.char(
-        0xF1, 0xD9,                       -- 帧头
-        0x0B, 0x10, 0x11, 0x00,           -- 指令ID: 0x0B 0x11, 载荷17字节
-        0x01                              -- LLA 1, ECEF 0
-    )
-    -- lat =  234068458 1132310388
-    --        234072543	1132310160
-    log.info("hdgnss", "参考坐标(单位1/10000000度)", lat, lng)
-    str = str .. pack.pack("<IIII", lat, lng, 5000, 0)
-    str = str .. hdcrc(str)
-    log.info("hdgnss", "写入AID-POS", str:toHex())
-    uart.write(gps_uart_id, str)
-end
-
-function hdgnss.aidtime()
-    local gps_uart_id = hdgnss.opts.uart_id
-    local date = os.date("!*t")
-    if date.year > 2023 then
-        -- AID-TIME, 时间精度要在3秒以内
-        log.info("hdgnss", "当前时间", date.year, date.month, date.day, date.hour, date.min, date.sec)
-        local str = string.char(
-            0xF1, 0xD9,                       -- 帧头
-            0x0B, 0x11, 0x14, 0x00,           -- 指令ID: 0x0B 0x11, 载荷20字节
-            0x00,                             -- UTC 0, TNOW 1
-            0x00,                             -- 保留参数,填0
-            0x11,                             -- 闰秒
-            date.year & 0xFF, date.year >> 8, -- 年
-            date.month,                       -- 月
-            date.day,                         -- 日
-            date.hour,                        -- 小时
-            date.min,                         -- 分钟
-            date.sec,                         -- 秒
-            0x00, 0x00, 0x00, 0x00,           -- 亚毫秒
-            0x00, 0x00,                       -- 时间精度(秒)
-            0x00, 0x00, 0x00, 0x00            -- 时间精度(亚毫秒)
-        )
-        str = str .. hdcrc(str)
-        log.info("hdgnss", "写入AID-TIME", str:toHex())
-        uart.write(gps_uart_id, str)
-        -- sys.wait(20)
-    end
-end
-
-function hdgnss.setup(opts)
-    if not opts then
-        opts = {}
-    end
-    if not opts.uart_id then
-        opts.uart_id = 2
-    end
-    hdgnss.opts = opts
-end
-
-function hdgnss.start()
-    log.debug("提醒", "室内无GNSS信号,定位不会成功, 要到空旷的室外,起码要看得到天空")
-    local gps_uart_id = hdgnss.opts.uart_id
-    local uart_forward = hdgnss.opts.uart_forward
-    log.info("hdgnss", "start")
-    libgnss.on("raw", function(data)
-        -- sys.publish("uplink", nmea_topic, data, 1)
-        if data:byte(1) == 0xF1 then
-            log.info("hdgnss", "二进制协议数据", data:toHex())
-        end
-    end)
-    uart.setup(gps_uart_id, 9600)
-    if uart_forward then
-        uart.setup(uart_forward, 115200)
-    end
-
-    pm.power(pm.GPS, true)
-    sys.wait(250) -- GPNSS芯片启动需要时间,大概250ms
-    -- 串口配置, 切换到115200
-    uart.write(gps_uart_id, (string.fromHex("F1D9060008000000000000C20100D1E0")))
-    sys.wait(20)
-    uart.close(gps_uart_id)
-    sys.wait(10)
-    uart.setup(gps_uart_id, 115200)
-    -- 调试日志,可选
-    libgnss.debug(hdgnss.opts.debug)
-    libgnss.bind(gps_uart_id, uart_forward)
-
-    if not hdgnss.opts.no_agps then
-        exec_agnss()
-    end
-    hdgnss.running = true
-end
-
-function hdgnss.stop()
-    hdgnss.running = false
-    if hdgnss.opts and hdgnss.opts.uart_id then
-        uart.close(hdgnss.opts.uart_id)
-    end
-end
-
-function hdgnss.saveloc()
-    local rmc = libgnss.getRmc(1)
-    log.info("hdgnss", "rmc", rmc.lat, rmc.lng)
-    io.writeFile("/hdloc", string.format("%d,%d", rmc.lat, rmc.lng))
-end
-
--- 订阅GNSS状态编码
-sys.subscribe("GNSS_STATE", function(event, ticks)
-    -- event取值有 
-    -- FIXED 定位成功
-    -- LOSE  定位丢失
-    -- ticks是事件发生的时间,一般可以忽略
-    log.info("hdgnss", "state", event, ticks)
-    if event == "FIXED" then
-        hdgnss.saveloc()
-    end
-end)
-
-sys.taskInit(function()
-    while 1 do
-        sys.wait(600 * 1000) -- 10分钟检查一次
-        local fixed = libgnss.isFix()
-        if not fixed and not hdgnss.opts.no_agps and hdgnss.running then
-            exec_agnss()
-        end
-        if fixed then
-            hdgnss.saveloc()
-        end
-    end
-end)
-
-return hdgnss

+ 0 - 35
luat/demo/air780epvh_gnsstest/main.lua

@@ -1,35 +0,0 @@
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "gnsstest"
-VERSION = "1.0.1"
-PRODUCT_KEY = "" -- 基站定位需要用到
-
---[[
-本demo需要很多流量!!!
-注意: 室内无信号!! 无法定位!!!
-]]
-
--- sys库是标配
-_G.sys = require("sys")
-require("sysplus")
-
-_G.gps_uart_id = 2
-
--- 演示GNSS定位, 含AGPS
-require "testGnss"
-
--- 演示上报到MQTT服务器 对应的网页是 https://iot.openluat.com/iot/device-gnss
--- require "testMqtt"
-
--- 演示定位成功后切换GPIO高低电平
--- require "testGpio"
-
--- 本TCP演示是连接到 gps.nutz.cn 19002 端口, irtu的自定义包格式
--- 网页是 https://gps.nutz.cn/ 输入IMEI号可参考当前位置
--- 微信小程序是 irtu寻物, 点击IMEI号, 扫描模块的二维码可查看当前位置和历史轨迹
--- 服务器源码地址: https://gitee.com/wendal/irtu-gps
-require "testTcp"
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 48
luat/demo/air780epvh_gnsstest/testGnss.lua

@@ -1,48 +0,0 @@
-
--- libgnss库初始化
-libgnss.clear() -- 清空数据,兼初始化
-
--- LED和ADC初始化
-LED_GNSS = 24
-gpio.setup(LED_GNSS, 0) -- GNSS定位成功灯
-
-local hdgnss = require("hdgnss")
-
-sys.taskInit(function()
-    log.debug("提醒", "室内无GNSS信号,定位不会成功, 要到空旷的室外,起码要看得到天空")
-    hdgnss.setup({
-        uart_id=2,
-        uart_forward = uart.VUART_0, -- 转发到虚拟串口,方便对接GnssToolKit3
-        debug=true
-    })
-    hdgnss.start()
-end)
-
-sys.taskInit(function()
-    while 1 do
-        sys.wait(5000)
-        -- log.info("RMC", json.encode(libgnss.getRmc(2) or {}, "7f"))
-        -- log.info("INT", libgnss.getIntLocation())
-        -- log.info("GGA", libgnss.getGga(3))
-        -- log.info("GLL", json.encode(libgnss.getGll(2) or {}, "7f"))
-        -- log.info("GSA", json.encode(libgnss.getGsa(1) or {}, "7f"))
-        -- log.info("GSV", json.encode(libgnss.getGsv(2) or {}, "7f"))
-        -- log.info("VTG", json.encode(libgnss.getVtg(2) or {}, "7f"))
-        -- log.info("ZDA", json.encode(libgnss.getZda(2) or {}, "7f"))
-        -- log.info("date", os.date())
-        -- log.info("sys", rtos.meminfo("sys"))
-        -- log.info("lua", rtos.meminfo("lua"))
-    end
-end)
-
--- 订阅GNSS状态编码
-sys.subscribe("GNSS_STATE", function(event, ticks)
-    -- event取值有 
-    -- FIXED 定位成功
-    -- LOSE  定位丢失
-    -- ticks是事件发生的时间,一般可以忽略
-    local onoff = libgnss.isFix() and 1 or 0
-    log.info("GNSS", "LED", onoff)
-    gpio.set(LED_GNSS, onoff)
-end)
-

+ 0 - 23
luat/demo/air780epvh_gnsstest/testGpio.lua

@@ -1,23 +0,0 @@
-
-
-LED_VBAT = 26
-gpio.setup(LED_VBAT, 0) -- 低电压警告灯
-
-adc.open(adc.CH_CPU)
-
--- 适配GNSS测试设备的GPIO
-sys.taskInit(function()
-    while 1 do
-        local vbat = adc.get(adc.CH_VBAT)
-        log.info("vbat", vbat)
-        if vbat < 3400 then
-            gpio.set(LED_VBAT, 1)
-            sys.wait(100)
-            gpio.set(LED_VBAT, 0)
-            sys.wait(900)
-        else
-            sys.wait(1000)
-        end
-    end
-end)
-

+ 0 - 127
luat/demo/air780epvh_gnsstest/testMqtt.lua

@@ -1,127 +0,0 @@
-
-local mqttc = nil
-
--- mqtt 上传任务
-sys.taskInit(function()
-    sys.waitUntil("IP_READY", 15000)
-    mqttc = mqtt.create(nil, "lbsmqtt.airm2m.com", 1886) -- mqtt客户端创建
-
-    mqttc:auth(mobile.imei(), mobile.imei(), mobile.muid()) -- mqtt三元组配置
-    log.info("mqtt", mobile.imei(), mobile.imei(), mobile.muid())
-    mqttc:keepalive(30) -- 默认值240s
-    mqttc:autoreconn(true, 3000) -- 自动重连机制
-
-    mqttc:on(function(mqtt_client, event, data, payload) -- mqtt回调注册
-        -- 用户自定义代码,按event处理
-        -- log.info("mqtt", "event", event, mqtt_client, data, payload)
-        if event == "conack" then -- mqtt成功完成鉴权后的消息
-            sys.publish("mqtt_conack") -- 小写字母的topic均为自定义topic
-            -- 订阅不是必须的,但一般会有
-            mqtt_client:subscribe("/gnss/" .. mobile.imei() .. "/down/#")
-        elseif event == "recv" then -- 服务器下发的数据
-            log.info("mqtt", "downlink", "topic", data, "payload", payload)
-            local dl = json.decode(data)
-            if dl then
-                -- 检测命令
-                if dl.cmd then
-                    -- 直接写uart
-                    if dl.cmd == "uart" and dl.data then
-                        uart.write(gps_uart_id, dl.data)
-                    -- 重启命令
-                    elseif dl.cmd == "reboot" then
-                        rtos.reboot()
-                    elseif dl.cmd == "stat" then
-                        upload_stat()
-                    end
-                end
-            end
-        elseif event == "sent" then -- publish成功后的事件
-            log.info("mqtt", "sent", "pkgid", data)
-        end
-    end)
-
-    -- 发起连接之后,mqtt库会自动维护链接,若连接断开,默认会自动重连
-    mqttc:connect()
-    -- sys.waitUntil("mqtt_conack")
-    -- log.info("mqtt连接成功")
-    sys.timerStart(upload_stat, 3000) -- 一秒后主动上传一次
-    while true do
-        sys.wait(60*1000)
-    end
-    mqttc:close()
-    mqttc = nil
-end)
-
-sys.taskInit(function()
-    while 1 do
-        sys.wait(3600 * 1000) -- 一小时检查一次
-        local fixed, time_fixed = libgnss.isFix()
-        if not fixed then
-            exec_agnss()
-        end
-    end
-end)
-
-sys.timerLoopStart(upload_stat, 60000)
-
-sys.taskInit(function()
-    local msgs = {}
-    while 1 do
-        local ret, topic, data, qos = sys.waitUntil("uplink", 30000)
-        if ret then
-            if topic == "close" then
-                break
-            end
-            log.info("mqtt", "publish", "topic", topic)
-            -- if #data > 512 then
-            --     local start = mcu.ticks()
-            --     local cdata = miniz.compress(data)
-            --     local endt = mcu.ticks() - start
-            --     if cdata then
-            --         log.info("miniz", #data, #cdata, endt)
-            --     end
-            -- end
-            if mqttc:ready() then
-                local tmp = msgs
-                if #tmp > 0 then
-                    log.info("mqtt", "ready, send buff", #tmp)
-                    msgs = {}
-                    for k, msg in pairs(tmp) do
-                        mqttc:publish(msg.topic, msg.data, 0)
-                    end
-                end
-                mqttc:publish(topic, data, qos)
-            else
-                log.info("mqtt", "not ready, insert into buff")
-                if #msgs > 60 then
-                    table.remove(msgs, 1)
-                end
-                table.insert(msgs, {
-                    topic = topic,
-                    data = data
-                })
-            end
-        end
-    end
-end)
-
-function upload_stat()
-    if mqttc == nil or not mqttc:ready() then return end
-    local stat = {
-        csq = mobile.csq(),
-        rssi = mobile.rssi(),
-        rsrq = mobile.rsrq(),
-        rsrp = mobile.rsrp(),
-        -- iccid = mobile.iccid(),
-        snr = mobile.snr(),
-        vbat = adc.get(adc.CH_VBAT),
-        temp = adc.get(adc.CH_CPU),
-        memsys = {rtos.meminfo("sys")},
-        memlua = {rtos.meminfo()},
-        fixed = libgnss.isFix()
-    }
-    sys.publish("uplink", "/gnss/" .. mobile.imei() .. "/up/stat", (json.encode(stat)), 1)
-end
-
-sys.timerLoopStart(upload_stat, 60 * 1000)
-

+ 0 - 190
luat/demo/air780epvh_gnsstest/testTcp.lua

@@ -1,190 +0,0 @@
---[[
-连到gps.nutz.cn 19002 端口, irtu的自定义包格式
-]]
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "scdemo"
-VERSION = "1.0.0"
-
-log.info("main", PROJECT, VERSION)
-
--- 一定要添加sys.lua !!!!
-sys = require("sys")
-sysplus = require("sysplus")
-libnet = require "libnet"
-
-if pm and pm.PWK_MODE then
-    pm.power(pm.PWK_MODE, false)
-end
-
-if wdt then
-    --添加硬狗防止程序卡死,在支持的设备上启用这个功能
-    wdt.init(9000)--初始化watchdog设置为9s
-    sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
-end
-
-adc.open(adc.CH_VBAT)
-
---=============================================================
--- 本TCP演示是连接到 gps.nutz.cn 19002 端口, irtu的自定义包格式
--- 网页是 https://gps.nutz.cn/ 输入IMEI号可参考当前位置
--- 微信小程序是 irtu寻物, 点击IMEI号, 扫描模块的二维码可查看当前位置和历史轨迹
-local host = "gps.nutz.cn"  -- 服务器ip或者域名, 都可以的
-local port = 19002          -- 服务器端口号
-local is_udp = false        -- 如果是UDP, 要改成true, false就是TCP
-local is_tls = false        -- 加密与否, 要看服务器的实际情况
---=============================================================
-
--- 处理未识别的网络消息
-local function netCB(msg)
-	log.info("未处理消息", msg[1], msg[2], msg[3], msg[4])
-end
-
-local socket_ready = false
-local taskName = "sc"
-local topic = taskName .. "_txrx"
-log.info("socket", "event topic", topic)
-
--- 演示task
-local function sockettest()
-    sys.waitUntil("IP_READY")
-
-    -- 开始正在的逻辑, 发起socket链接,等待数据/上报心跳
-    local txqueue = {}
-    sysplus.taskInitEx(sockettask, taskName, netCB, taskName, txqueue, topic)
-    while 1 do
-        local result, tp, data = sys.waitUntil(topic, 30000)
-        -- log.info("event", result, tp, data)
-        if not result then
-            -- 等很久了,没数据上传/下发, 发个日期心跳包吧
-            table.insert(txqueue, string.char(0))
-            sys_send(taskName, socket.EVENT, 0)
-        elseif tp == "uplink" then
-            -- 上行数据, 主动上报的数据,那就发送呀
-            table.insert(txqueue, data)
-            sys_send(taskName, socket.EVENT, 0)
-        elseif tp == "downlink" then
-            -- 下行数据,接收的数据, 从ipv6task来的
-            -- 其他代码可以通过 sys.publish()
-            log.info("socket", "收到下发的数据了", #data)
-        end
-    end
-end
-
-
-
-function sockettask(d1Name, txqueue, rxtopic)
-    -- 打印准备连接的服务器信息
-    log.info("socket", host, port, is_udp and "UDP" or "TCP", is_tls and "TLS" or "RAW")
-
-    -- 准备好所需要的接收缓冲区
-    local rx_buff = zbuff.create(1024)
-    local netc = socket.create(nil, d1Name)
-    socket.config(netc, nil, is_udp, is_tls)
-    log.info("任务id", d1Name)
-
-    while true do
-        -- 连接服务器, 15秒超时
-        log.info("socket", "开始连接服务器")
-        sysplus.cleanMsg(d1Name)
-        local result = libnet.connect(d1Name, 15000, netc, host, port)
-        if result then
-			log.info("socket", "服务器连上了")
-            local tmp = {imei=mobile.imei(),iccid=mobile.iccid()}
-			libnet.tx(d1Name, 0, netc, json.encode(tmp))
-            socket_ready = true
-        else
-            log.info("socket", "服务器没连上了!!!")
-		end
-		while result do
-            -- 连接成功之后, 先尝试接收
-            -- log.info("socket", "调用rx接收数据")
-			local succ, param = socket.rx(netc, rx_buff)
-			if not succ then
-				log.info("服务器断开了", succ, param, ip, port)
-				break
-			end
-            -- 如果服务器有下发数据, used()就必然大于0, 进行处理
-			if rx_buff:used() > 0 then
-				log.info("socket", "收到服务器数据,长度", rx_buff:used())
-                local data = rx_buff:query() -- 获取数据
-                sys.publish(rxtopic, "downlink", data)
-				rx_buff:del()
-			end
-            -- log.info("libnet", "调用wait开始等待消息")
-            -- 等待事件, 例如: 服务器下发数据, 有数据准备上报, 服务器断开连接
-			result, param, param2 = libnet.wait(d1Name, 15000, netc)
-            log.info("libnet", "wait", result, param, param2)
-			if not result then
-                -- 网络异常了, 那就断开了, 执行清理工作
-				log.info("socket", "服务器断开了", result, param)
-				break
-            elseif #txqueue > 0 then
-                -- 有待上报的数据,处理之
-                while #txqueue > 0 do
-                    local data = table.remove(txqueue, 1)
-                    if not data then
-                        break
-                    end
-                    result,param = libnet.tx(d1Name, 15000, netc,data)
-                    -- log.info("libnet", "发送数据的结果", result, param)
-                    if not result then
-                        log.info("socket", "数据发送异常", result, param)
-                        break
-                    end
-                end
-            end
-            -- 循环尾部, 继续下一轮循环
-		end
-        socket_ready = false
-        -- 能到这里, 要么服务器断开连接, 要么上报(tx)失败, 或者是主动退出
-		libnet.close(d1Name, 5000, netc)
-		-- log.info(rtos.meminfo("sys"))
-		sys.wait(3000) -- 这是重连时长, 自行调整
-    end
-end
-
-sys.taskInit(sockettest)
-
-
-sys.taskInit(function()
-    sys.waitUntil("IP_READY")
-    local stat_t = 0
-    local buff = zbuff.create(64)
-    while true do
-        if socket_ready then
-            -- 发送设备状态  >b7IHb  ==  1*7+4+2+1 = 14
-            if os.time() - stat_t > 30 then
-                -- 30秒上报一次
-                local vbat = adc.get(adc.CH_VBAT)
-                buff:seek(0)
-                buff:pack(">b7IHb", 0x55, 0, 0, 0, 0, 0, 0, 0, vbat, mobile.csq())
-                sys.publish(topic, "uplink", buff:query())
-                stat_t = os.time()
-                sys.wait(100)
-            end
-            -- 发送位置信息 >b2i3H2b3 == 1*2+4*3+2*2+1*3 == 2+12+4+3 = 21
-            if true then
-                local rmc = libgnss.getRmc(1)
-                local gsa = libgnss.getGsa()
-                local gsv = libgnss.getGsv()
-                -- log.info("socket", "rmc", rmc.lat, rmc.lng, rmc.alt, rmc.course, rmc.speed)
-                buff:seek(0)
-                buff:pack(">b2i3H2b3", 0xAA, libgnss.isFix() and 1 or 0,
-                        os.time(),
-                        rmc and rmc.lng or 0,
-                        rmc and rmc.lat or 0,
-                        0, -- rmc and rmc.alt or 0,
-                        math.floor(rmc and rmc.course or 0),
-                        math.floor(rmc and rmc.speed or 0),
-                        gsa and #gsa.sats or 0, -- msg.sateCno
-                        gsv and gsv.total_sats or 0 -- msg.sateCnt
-                )
-                sys.publish(topic, "uplink", buff:query())
-            end
-            sys.wait(1000)
-        else
-            sys.wait(100)
-        end
-    end
-end)

BIN
luat/demo/air8000_airlink_fota/air8000s_v11.bin


+ 0 - 34
luat/demo/air8000_airlink_fota/main.lua

@@ -1,34 +0,0 @@
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "wififota"
-VERSION = "1.0.11"
-
--- sys库是标配
-_G.sys = require("sys")
---[[特别注意, 使用http库需要下列语句]]
-
-PWR8000S = function(level)
-    gpio.set(23, level)
-end
-
-gpio.debounce(0, 1000)
-gpio.setup(0, function()
-    sys.taskInit(function()
-        log.info("复位Air8000S")
-        PWR8000S(0)
-        sys.wait(20)
-        PWR8000S(1)
-    end)
-end, gpio.PULLDOWN)
-
-sys.taskInit(function()
-    sys.wait(1000)
-    airlink.debug(1)
-    airlink.sfota("/luadb/air8000s_v11.bin")
-end)
-
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 106
luat/demo/airlbs/main.lua

@@ -1,106 +0,0 @@
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "helloworld"
-VERSION = "1.0.0"
-
--- 使用合宙iot平台时需要这个参数
-PRODUCT_KEY = "xxx" -- 到 iot.openluat.com 创建项目,获取正确的项目id
-
--- 引入必要的库文件(lua编写), 内部库不需要require
-sys = require("sys")
-sysplus = require("sysplus")
-libnet = require "libnet"
-
-log.info("main", PROJECT, VERSION)
-
-if wdt then
-    --添加硬狗防止程序卡死,在支持的设备上启用这个功能
-    wdt.init(20000)--初始化watchdog设置为9s
-    sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
-end
-
-local airlbs = require "airlbs"
-
--- 此为收费服务,需自行联系销售申请
-local airlbs_project_id = "xxx"
-local airlbs_project_key = "xxx"
-
-sys.taskInit(function()
-    sys.waitUntil("IP_READY")
-
-    -- 如需wifi定位,需要硬件以及固件支持wifi扫描功能
-    local wifi_info = nil
-    if wlan then
-        sys.wait(3000) -- 网络可用后等待一段时间才再调用wifi扫描功能,否则可能无法获取wifi信息
-        wlan.init()
-        wlan.scan()
-        sys.waitUntil("WLAN_SCAN_DONE", 15000)
-        wifi_info = wlan.scanResult()
-        log.info("scan", "wifi_info", #wifi_info)
-    end
-
-    socket.sntp()
-    sys.waitUntil("NTP_UPDATE", 1000)
-
-    while 1 do
-        local result , data = airlbs.request({project_id = airlbs_project_id, project_key = airlbs_project_key, wifi_info = wifi_info, timeout = 1000})
-        if result then
-            log.info("airlbs", json.encode(data))
-        end
-        sys.wait(20000)
-    end
-end)
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

+ 0 - 7
luat/demo/airlink/README.md

@@ -1,7 +0,0 @@
-# AirLink的演示
-
-注意: 这里的demo是需要搭配使用的
-
-* Air8101 与 Air780EPM 搭配
-* Air8000 与 Air8000S 搭配, 实际就是Air8000模块内部
-

+ 0 - 154
luat/demo/airlink/air7000_wifi/main.lua

@@ -1,154 +0,0 @@
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "airlink"
-VERSION = "1.0.4"
-
--- Air724UG要用SPI1, CS选GPIO10, RDY选GPIO18
-
-airlink.config(airlink.CONF_SPI_ID, 1) -- SPI1
-airlink.config(airlink.CONF_SPI_CS, 10) -- GPIO10
-airlink.config(airlink.CONF_SPI_RDY, 18) -- GPIO18
-airlink.config(airlink.CONF_SPI_SPEED, 20*1000000) -- 20MHz速度
-
-function test_ap()
-    log.info("执行AP创建操作")
-    wlan.createAP("uiot5678", "12345678")
-    netdrv.ipv4(socket.LWIP_AP, "192.168.4.1", "255.255.255.0", "0.0.0.0")
-    sys.wait(5000)
-    -- netdrv.ipv4(socket.LWIP_AP, "192.168.4.1", "255.255.255.0", "0.0.0.0")
-    -- log.info("创建dns代理", netdrv.ipv4(socket.LWIP_AP))
-    dnsproxy.setup(socket.LWIP_AP, socket.LWIP_GP)
-    -- log.info('创建DHCP服务器', netdrv.ipv4(socket.LWIP_AP))
-    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
-
--- wifi的STA相关事件
-sys.subscribe("WLAN_STA_INC", function(evt, data)
-    -- evt 可能的值有: "CONNECTED", "DISCONNECTED"
-    -- 当evt=CONNECTED, data是连接的AP的ssid, 字符串类型
-    -- 当evt=DISCONNECTED, data断开的原因, 整数类型
-    log.info("收到STA事件", evt, data)
-end)
-
--- wifi的AP相关事件
-sys.subscribe("WLAN_AP_INC", function(evt, data)
-    -- evt 可能的值有: "CONNECTED", "DISCONNECTED"
-    -- 当evt=CONNECTED, data是连接的AP的新STA的MAC地址
-    -- 当evt=DISCONNECTED, data是断开与AP连接的STA的MAC地址
-    log.info("收到AP事件", evt, data and data:toHex())
-end)
-
-function test_sta()
-    log.info("执行STA连接操作")
-    -- netdrv.debug(0, true)
-    wlan.connect("luatos1234", "12341234")
-    -- airlink.debug(1)
-    -- netdrv.dhcp(socket.LWIP_STA, true)
-    while 1 do
-        if wlan.ready() then
-            break
-        end
-        sys.wait(100)
-    end
-    -- sys.wait(8000)
-    -- iperf.server(socket.LWIP_STA)
-    -- iperf.client(socket.LWIP_STA, "47.94.236.172")
-
-    -- sys.wait(5000)
-    while 1 do
-        log.info("wlan", "info", json.encode(wlan.getInfo()))
-        -- 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=5000,debug=false}).wait()
-        -- local code, headers, body = http.request("GET", "https://httpbin.air32.cn/bytes/2048", nil, nil).wait()
-        log.info("http执行结果", code, headers, body and #body)
-        -- socket.sntp(nil, socket.LWIP_STA)
-        -- sys.wait(12000)
-
-        -- socket.sntp(nil)
-        -- sys.wait(2000)
-        -- log.info("执行ping操作")
-        -- icmp.ping(socket.LWIP_STA, "183.2.172.177")
-        -- sys.wait(2000)
-        local re_ip = httpdns.ali("air32.cn", {adapter=socket.LWIP_STA, timeout=3000})
-        log.info("httpdns", re_ip)
-        sys.wait(3000)
-        -- pm.request(pm.LIGHT, 1)
-    end
-end
-
-sys.subscribe("PING_RESULT", function(id, time, dst)
-    log.info("ping", id, time, dst);
-end)
-
-function test_scan()
-    while 1 do
-        log.info("执行wifi扫描")
-        wlan.scan()
-        sys.wait(30 * 1000)
-    end
-end
-sys.subscribe("WLAN_SCAN_DONE", function ()
-    local results = wlan.scanResult()
-    log.info("scan", "results", #results)
-    for k,v in pairs(results) do
-        log.info("scan", v["ssid"], v["rssi"], (v["bssid"]:toHex()))
-    end
-end)
-
---  每隔6秒打印一次airlink统计数据, 调试用
--- sys.taskInit(function()
---     while 1 do
---         sys.wait(6000)
---         airlink.statistics()
---     end
--- end)
-
-sys.taskInit(function()
-    log.info("新的Air7000脚本...")
-    -- log.info("5秒后开始测试")
-    -- sys.wait(5000)
-    airlink.init()
-    airlink.start(1)
-    
-    sys.wait(200) -- 稍微缓一下, Air8000S的启动大概需要300ms
-
-    -- 等待初始化完成
-    while not airlink.ready() do
-        log.info("等待Airlink初始化完成")
-        sys.wait(1000)
-    end
-
-    -- 启动AP测试
-    netdrv.setup(socket.LWIP_STA, netdrv.WHALE)
-    netdrv.setup(socket.LWIP_AP, netdrv.WHALE)
-    wlan.init()
-    -- sys.wait(5000)
-    
-    -- sys.wait(300)
-    -- test_ap()
-
-    -- 连接STA测试
-    test_sta()
-
-    -- wifi扫描测试
-    -- sys.wait(2000)
-    -- test_scan()
-end)
-
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 45
luat/demo/airlink/air724ug_test/main.lua

@@ -1,45 +0,0 @@
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "airlink"
-VERSION = "1.0.4"
-
--- Air724UG要用SPI1, CS选GPIO10, RDY选GPIO22
-
-airlink.config(airlink.CONF_SPI_ID, 1) -- SPI1
-airlink.config(airlink.CONF_SPI_CS, 10) -- GPIO10
-airlink.config(airlink.CONF_SPI_RDY, 18) -- GPIO18
-airlink.config(airlink.CONF_SPI_SPEED, 20*1000000) -- 20MHz速度
-
-sys.taskInit(function()
-    log.info("5秒后开始测试")
-    gpio.setup(10, 1, gpio.PULLUP) -- CS
-    sys.wait(5000)
-    -- airlink.init()
-    -- sys.wait(10)
-    -- airlink.start(1)
-    -- sys.wait(800)
-    -- log.info("Airlink初始化完成")
-    -- airlink.pause(1)
-
-    local result = spi.setup(
-        1,--spi id
-        nil,
-        1,--CPHA
-        1,--CPOL
-        8,--数据宽度
-        20000000--,--波特率
-    )
-    sys.wait(1000)
-    while 1 do
-        gpio.setup(10, 0)
-        spi.send(1, "12345678901234567890") -- 发送一个字节, 这里可以是任意值, 只是为了测试SPI通信
-        gpio.setup(10, 1)
-        sys.wait(100)
-    end
-end)
-
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 133
luat/demo/airlink/air780ehm_spi_slave/main.lua

@@ -1,133 +0,0 @@
-
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "airlink_spi_slave"
-VERSION = "1.0.0"
-
-
--- sys库是标配
-_G.sys = require("sys")
---[[特别注意, 使用http库需要下列语句]]
-_G.sysplus = require("sysplus")
-dnsproxy = require ("dnsproxy")
-
-local rtos_bsp = rtos.bsp()
-
-local mode = "slave"
-
--- 订阅airlink的SDATA事件,打印收到的信息。
-local function airlink_sdata(data)
-    -- 打印收到的信息。
-    log.info("收到AIRLINK_SDATA!!", data)
-end
-
-local function airlink_sdata_MOBILE()
-    sys.waitUntil("IP_READY")
-    -- 设置网络时间同步。
-    socket.sntp()
-    while 1 do
-        -- rtos.bsp():设备硬件bsp型号;os.date():本地时间。
-        local data = rtos_bsp .. " " .. os.date()
-        log.info("发送数据给对端设备", data, "当前airlink状态", airlink.ready())
-        airlink.sdata(data)
-        sys.wait(200)
-    end
-end
-
--- 订阅airlink的SDATA事件,打印收到的信息。
-sys.subscribe("AIRLINK_SDATA", airlink_sdata)
-
-sys.subscribe("IP_READY", function(id, ip)
-    log.info("收到IP_READY!!", id, ip)
-end)
-
-local function spi_slave_task()
-    local suc_request_num, fail_request_num = 0, 0
-    sys.wait(100)
-    -- 初始化airlink
-    airlink.init()
-    -- 注册网卡
-    netdrv.setup(socket.LWIP_GP_GW, netdrv.WHALE)
-    -- 启动airlink从机模式
-    airlink.start(0)
-
-    -- 配置网关ip
-    -- netdrv.ipv4(socket.LWIP_USER0, "192.168.111.1", "255.255.255.0", "192.168.111.2")
-    netdrv.ipv4(socket.LWIP_GP_GW, "192.168.111.2", "255.255.255.0", "192.168.111.1")
-    sys.wait(100)
-    sys.waitUntil("IP_READY", 10000)
-    netdrv.napt(socket.LWIP_GP)
-    -- 设置DNS代理。
-    dnsproxy.setup(socket.LWIP_GP_GW, socket.LWIP_GP)
-
-    while 1 do
-        sys.wait(1000)
-        -- log.info("ticks", mcu.ticks(), hmeta.chip(), hmeta.model(), hmeta.hwver())
-        -- airlink.statistics()
-        -- log.info("执行http请求")
-        -- local code, headers, body = http.request("GET", "http://httpbin.air32.cn/bytes/2048", nil, nil, {adapter=socket.LWIP_GP,timeout=3000}).wait()
-        -- local code, headers, body = http.request("GET", "http://httpbin.air32.cn/bytes/2048", nil, nil, {adapter=socket.LWIP_USER0,timeout=3000}).wait()
-        -- log.info("http执行结果", code, code, headers, body)
-        -- if code == 200 then
-        --     suc_request_num = suc_request_num + 1
-        -- else
-        --     fail_request_num = fail_request_num + 1
-        -- end
-        -- log.info("当前成功请求次数", suc_request_num, "失败请求次数", fail_request_num)
-    end
-end
-
-local function spi_master_task()
-    sys.wait(100)
-    -- 初始化airlink
-    airlink.init()
-    log.info("创建桥接网络设备")
-    netdrv.setup(socket.LWIP_GP_GW, netdrv.WHALE)
-    -- 启动底层线程, 主机模式
-    airlink.start(1)
-
-    -- netdrv.ipv4(socket.LWIP_USER0, "192.168.111.2", "255.255.255.0", "192.168.111.1")
-    netdrv.ipv4(socket.LWIP_GP_GW, "192.168.111.1", "255.255.255.0", "192.168.111.2")
-    -- sys.wait(100)
-    -- sys.waitUntil("IP_READY", 10000)
-    -- netdrv.napt(socket.LWIP_GP)
-    -- -- 设置DNS代理。
-    -- dnsproxy.setup(socket.LWIP_USER0, socket.LWIP_GP)
-    -- airlink.test(1000)
-    while 1 do
-        sys.wait(1000)
-        log.info("airlink", "从机固件版本号", airlink.sver())
-        -- log.info("ticks", mcu.ticks(), hmeta.chip(), hmeta.model(), hmeta.hwver())
-        -- airlink.statistics()
-        log.info("执行http请求")
-        local code, headers, body = http.request("GET", "https://httpbin.air32.cn/bytes/2048", nil, nil, {adapter=socket.LWIP_GP_GW,timeout=3000}).wait()
-        -- log.info("http执行结果", code, code, headers, body)
-    end
-end
-
-sys.taskInit(function()
-    sys.wait(300)
-    log.info("main", rtos_bsp)
-    -- netdrv.debug(0, true)
-    -- 测试使用Air780EHM模块作为从机演示,如果使用其他模块测试,修改下面的代码。
-    if string.find(rtos_bsp, "780EHM") then
-        mode = "slave"
-    else
-        mode = "master"
-    end
-
-    if mode == "slave" then
-        spi_slave_task()
-    elseif mode == "master" then
-        spi_master_task()
-    else
-        log.info("airlink_spi", "未知的通讯模式:", mode)
-    end
-end)
-
--- sys.taskInit(airlink_sdata_MOBILE) 
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 36
luat/demo/airlink/air780epm/main.lua

@@ -1,36 +0,0 @@
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "netdrv"
-VERSION = "1.0.4"
-
-
--- sys库是标配
-_G.sys = require("sys")
---[[特别注意, 使用http库需要下列语句]]
-_G.sysplus = require("sysplus")
-dnsproxy = require ("dnsproxy")
-
-sys.taskInit(function()
-    sys.wait(100)
-    -- 初始化airlink
-    airlink.init()
-    log.info("创建桥接网络设备")
-    netdrv.setup(socket.LWIP_USER0, netdrv.WHALE)
-    -- 启动底层线程, 从机模式
-    airlink.start(1)
-
-    netdrv.ipv4(socket.LWIP_USER0, "192.168.111.2", "255.255.255.0", "192.168.111.1")
-    sys.wait(100)
-    sys.waitUntil("IP_READY", 10000)
-    netdrv.napt(socket.LWIP_GP)
-    dnsproxy.setup(socket.LWIP_USER0, socket.LWIP_GP)
-end)
-
-sys.subscribe("IP_READY", function(id, ip)
-    log.info("收到IP_READY!!", id, ip)
-end)
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 39
luat/demo/airlink/air780epm_test/main.lua

@@ -1,39 +0,0 @@
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "airlink"
-VERSION = "1.0.4"
-
-
--- sys库是标配
-_G.sys = require("sys")
-
-sys.taskInit(function()
-    sys.wait(100)
-    airlink.init()
-    airlink.start(1)
-    sys.wait(10)
-    airlink.test(1)
-    sys.wait(10)
-
-    airlink.statistics()
-
-    airlink.test(1000)
-    sys.wait(1000)
-    airlink.statistics()
-    -- wlan.init()
-    -- wlan.connect("luatos1234", "12341234")
-    -- airlink.test(1000)
-    for i = 1, 20, 1 do
-        airlink.test(1000)
-        sys.wait(1000)
-    end
-    -- sys.wait(1000)
-    airlink.statistics()
-
-end)
-
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 92
luat/demo/airlink/air8000/main.lua

@@ -1,92 +0,0 @@
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "netdrv"
-VERSION = "1.0.5"
-
-
--- sys库是标配
-_G.sys = require("sys")
---[[特别注意, 使用http库需要下列语句]]
-_G.sysplus = require("sysplus")
-dnsproxy = require("dnsproxy")
-dhcpsrv = require("dhcpsrv")
-
-gpio.setup(0, function()
-    sys.publish("WIFI_RESET")
-end, gpio.PULLDOWN, gpio.RISING)
-gpio.debounce(0, 100)
-
-gpio.setup(23, 0, gpio.PULLUP) -- 关闭Air8000S的LDO供电
-
-sys.taskInit(function()
-    sys.wait(100)
-    while 1 do
-        sys.waitUntil("WIFI_RESET")
-        log.info("复位WIFI部分")
-        gpio.set(23, 0)
-        sys.wait(100)
-        gpio.setup(23, 1)
-    end
-end)
-
-sys.taskInit(function()
-    -- 设置电平, 关闭小核的供电
-    pm.ioVol(pm.IOVOL_ALL_GPIO, 3300)
-    sys.wait(100)
-    -- 初始化airlink
-    airlink.init()
-    log.info("注册STA和AP设备")
-    netdrv.setup(socket.LWIP_STA, netdrv.WHALE)
-    netdrv.setup(socket.LWIP_AP, netdrv.WHALE)
-    -- 启动底层线程, 从机模式
-    airlink.start(1)
-    sys.wait(100)
-    log.info("打开Air8000S的LDO供电")
-    gpio.setup(23, 1) -- 打开Air8000S的LDO供电
-    log.info("一切就绪了")
-    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(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, code, headers, body)
-    -- end
-end)
-
-sys.subscribe("IP_READY", function(ip, id)
-    log.info("收到IP_READY!!", ip, id)
-end)
-
-sys.subscribe("IP_LOSE", function(id)
-    log.info("收到IP_LOSE!!", id)
-end)
-
-sys.taskInit(function()
-    while netdrv.ready(socket.LWIP_AP) == false do
-        sys.wait(100)
-    end
-    sys.wait(100)
-    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()之后后面不要加任何语句!!!!!

+ 0 - 57
luat/demo/airlink/air80000_wifi_start_stop/main.lua

@@ -1,57 +0,0 @@
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "air8000_wifi"
-VERSION = "1.0.5"
-
--- 通过boot按键方便刷Air8000S
-function PWR8000S(val)
-    gpio.set(23, val)
-end
-
-gpio.debounce(0, 1000)
-gpio.setup(0, function()
-    sys.taskInit(function()
-        log.info("复位Air8000S")
-        PWR8000S(0)
-        sys.wait(20)
-        PWR8000S(1)
-    end)
-end, gpio.PULLDOWN)
-
-sys.subscribe("IP_READY", function(ip, id)
-    log.info("ip_ready", ip, id)
-end)
-
-sys.subscribe("IP_LOSE", function(id)
-    log.info("ip_lose", id)
-end)
-
--- wifi的STA相关事件
-sys.subscribe("WLAN_STA_INC", function(evt, data)
-    -- evt 可能的值有: "CONNECTED", "DISCONNECTED"
-    -- 当evt=CONNECTED, data是连接的AP的ssid, 字符串类型
-    -- 当evt=DISCONNECTED, data断开的原因, 整数类型
-    log.info("收到STA事件", evt, data)
-end)
-
-sys.taskInit(function()
-
-    while 1 do
-        log.info("初始化wifi")
-        wlan.init()
-        log.info("尝试连接sta")
-        wlan.connect("luatos1234", "12341234")
-        sys.wait(15000)
-        log.info("关闭wifi芯片")
-        PWR8000S(0)
-        sys.wait(10*1000) -- 等10秒
-        log.info("打开wifi芯片, 然后等10秒")
-        PWR8000S(1)
-        sys.wait(10*1000)
-    end
-end)
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 75
luat/demo/airlink/air8000_LAN_WAN/air780epm_WAN/main.lua

@@ -1,75 +0,0 @@
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "air780epm_WAN"
-VERSION = "1.0.5"
-
-dnsproxy = require("dnsproxy")
-dhcpsrv = require("dhcpsrv")
-httpplus = require("httpplus")
-
-gpio.setup(20, 1) -- 打开lan供电
-
-function eth_wan()
-
-    sys.wait(3000)
-    local result = spi.setup(
-        0,--spi id
-        nil,
-        0,--CPHA
-        0,--CPOL
-        8,--数据宽度
-        25600000--,--频率
-        -- spi.MSB,--高低位顺序    可选,默认高位在前
-        -- spi.master,--主模式     可选,默认主
-        -- spi.full--全双工       可选,默认全双工
-    )
-    log.info("main", "open",result)
-    if result ~= 0 then--返回值为0,表示打开成功
-        log.info("main", "spi open error",result)
-        return
-    end
-    
-    sys.wait(200)
-    log.info("netdrv", "初始化WAN")    
-    
-    netdrv.setup(socket.LWIP_ETH, netdrv.CH390, {spi=0,cs=8})
-    sys.wait(100)
-    netdrv.dhcp(socket.LWIP_ETH, true)
-    log.info("netdrv", "以太网就绪")
-
-
-end
-
-
-
-sys.taskInit(function()
-
-    
-    sys.taskInit(eth_wan)
-    sys.wait(1000)
-    while 1 do
-        sys.wait(1000)
-        local result, ip, adapter = sys.waitUntil("IP_READY", 3000)
-        log.info("ready?", result, ip, adapter)
-        if adapter and adapter ==  socket.LWIP_ETH then
-            break
-        end
-    end
-    sys.wait(500)
-
-    iperf.server(socket.LWIP_ETH)
-
-    while 1 do
-        sys.wait(6000)
-        -- local code, headers, body = http.request("GET", "http://httpbin.air32.cn/bytes/4096", nil, nil, {adapter=socket.LWIP_ETH}).wait()
-        local code, headers, body = http.request("GET", "http://www.baidu.com/", nil, nil, {adapter=socket.LWIP_ETH}).wait()
-        log.info("http", code, headers, body and #body)
-        log.info("lua", rtos.meminfo())
-        log.info("sys", rtos.meminfo("sys"))
-    end
-end)
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 85
luat/demo/airlink/air8000_LAN_WAN/air8000_LAN/main.lua

@@ -1,85 +0,0 @@
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "air8000_wifi"
-VERSION = "1.0.5"
-
---[[
-本demo演示的功能是:
-1. 创建AP, 提供wifi设备, 通过4G上网
-2. 创建以太网, 为局域网内的设备, 通过4G上网
-]]
-
-dnsproxy = require("dnsproxy")
-dhcpsrv = require("dhcpsrv")
-httpplus = require("httpplus")
-
-gpio.setup(140, 1, gpio.PULLUP)
-
-
-sys.subscribe("PING_RESULT", function(id, time, dst)
-    log.info("ping", id, time, dst);
-end)
-
-function eth_lan()
-    -- sys.wait(3000)
-    local result = spi.setup(
-        1,--spi id
-        nil,
-        0,--CPHA
-        0,--CPOL
-        8,--数据宽度
-        51200000--,--波特率
-    )
-    log.info("main", "open spi",result)
-    if result ~= 0 then--返回值为0,表示打开成功
-        log.info("main", "spi open error",result)
-        return
-    end
-    log.info("netdrv", "初始化以太网")
-    netdrv.setup(socket.LWIP_ETH, netdrv.CH390, {spi=1,cs=12,irq=255})
-    log.info("netdrv", "等待以太网就绪")
-    sys.wait(1000)
-    netdrv.ipv4(socket.LWIP_ETH, "192.168.5.1", "255.255.255.0", "0.0.0.0")
-    while netdrv.ready(socket.LWIP_ETH) ~= true do
-        -- log.info("netdrv", "等待以太网就绪")
-        sys.wait(100)
-    end
-    log.info("netdrv", "以太网就绪")
-    log.info("netdrv", "创建dhcp服务器, 供以太网使用")
-    dhcpsrv.create({adapter=socket.LWIP_ETH, gw={192,168,5,1}})
-    log.info("netdrv", "创建dns代理服务, 供以太网使用")
-    dnsproxy.setup(socket.LWIP_ETH, socket.LWIP_GP)
-end
-
-sys.taskInit(function()
-    while airlink.ready() ~= true do
-        sys.wait(100)
-    end
-    wlan.init()
-    sys.taskInit(eth_lan)
-    sys.wait(3000)
-    log.info("socket", "ip",socket.localIP(socket.LWIP_ETH))
-
-    
-    while 1 do
-        if netdrv.ready(socket.LWIP_GP) then
-            log.info("netdrv", "4G作为网关")
-            netdrv.napt(socket.LWIP_GP)
-            break
-        end
-        sys.wait(1000)
-    end
-
-        -- for i = 0, 2, 1 do
-        --     local ip = "192.168.5." .. (i+100)
-        --     icmp.ping(socket.LWIP_AP, ip)
-        --     sys.waitUntil("PING_RESULT", 3000)
-        -- end
-        -- sys.wait(1000)
-
-end)
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

BIN
luat/demo/airlink/air8000_airlink_fota/air8000s_v10.bin


BIN
luat/demo/airlink/air8000_airlink_fota/air8000s_v9.bin


+ 0 - 34
luat/demo/airlink/air8000_airlink_fota/main.lua

@@ -1,34 +0,0 @@
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "wififota"
-VERSION = "1.0.10"
-
--- sys库是标配
-_G.sys = require("sys")
---[[特别注意, 使用http库需要下列语句]]
-
-PWR8000S = function(level)
-    gpio.set(23, level)
-end
-
-gpio.debounce(0, 1000)
-gpio.setup(0, function()
-    sys.taskInit(function()
-        log.info("复位Air8000S")
-        PWR8000S(0)
-        sys.wait(20)
-        PWR8000S(1)
-    end)
-end, gpio.PULLDOWN)
-
-sys.taskInit(function()
-    sys.wait(1000)
-    airlink.debug(1)
-    airlink.sfota("/luadb/air8000s_v10.bin")
-end)
-
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 129
luat/demo/airlink/air8000_ap_lan/main.lua

@@ -1,129 +0,0 @@
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "air8000_wifi"
-VERSION = "1.0.5"
-
---[[
-本demo演示的功能是:
-1. 创建AP, 提供wifi设备, 通过4G上网
-2. 创建以太网, 为局域网内的设备, 通过4G上网
-]]
-
-dnsproxy = require("dnsproxy")
-dhcpsrv = require("dhcpsrv")
-httpplus = require("httpplus")
-
-gpio.setup(140, 1, gpio.PULLUP)
-
--- 通过boot按键方便刷Air8000S
-function PWR8000S(val)
-    gpio.set(23, val)
-end
-
-gpio.debounce(0, 1000)
-gpio.setup(0, function()
-    sys.taskInit(function()
-        log.info("复位Air8000S")
-        PWR8000S(0)
-        sys.wait(20)
-        PWR8000S(1)
-    end)
-end, gpio.PULLDOWN)
-
-function test_ap()
-    log.info("执行AP创建操作", airlink.ready() , "正常吗?")
-    wlan.createAP("uiot5678", "12345678")
-    netdrv.ipv4(socket.LWIP_AP, "192.168.4.1", "255.255.255.0", "0.0.0.0")
-    log.info("netdrv", "等待AP就绪")
-    while netdrv.ready(socket.LWIP_AP) ~= true do
-        sys.wait(100)
-    end
-    log.info("netdrv", "创建dhcp服务器, 供AP使用")
-    dhcpsrv.create({adapter=socket.LWIP_AP})
-    log.info("netdrv", "等待4G就绪")
-    while netdrv.ready(socket.LWIP_GP) ~= true do
-        sys.wait(100)
-    end
-    log.info("netdrv", "创建dns代理服务, 供AP使用")
-    dnsproxy.setup(socket.LWIP_AP, socket.LWIP_GP)
-end
-
-sys.subscribe("PING_RESULT", function(id, time, dst)
-    log.info("ping.result", id, time, dst);
-end)
-
--- wifi的AP相关事件
-sys.subscribe("WLAN_AP_INC", function(evt, data)
-    -- evt 可能的值有: "CONNECTED", "DISCONNECTED"
-    -- 当evt=CONNECTED, data是连接的AP的新STA的MAC地址
-    -- 当evt=DISCONNECTED, data是断开与AP连接的STA的MAC地址
-    log.info("收到AP事件", evt, data and data:toHex())
-end)
-
-sys.subscribe("PING_RESULT", function(id, time, dst)
-    log.info("ping", id, time, dst);
-end)
-
---  每隔6秒打印一次airlink统计数据, 调试用
--- sys.taskInit(function()
---     while 1 do
---         sys.wait(6000)
---         airlink.statistics()
---     end
--- end)
-
-
-function eth_lan()
-    -- sys.wait(3000)
-    local result = spi.setup(
-        1,--spi id
-        nil,
-        0,--CPHA
-        0,--CPOL
-        8,--数据宽度
-        51200000--,--波特率
-    )
-    log.info("main", "open spi",result)
-    if result ~= 0 then--返回值为0,表示打开成功
-        log.info("main", "spi open error",result)
-        return
-    end
-    log.info("netdrv", "初始化以太网")
-    netdrv.setup(socket.LWIP_ETH, netdrv.CH390, {spi=1,cs=12,irq=255})
-    log.info("netdrv", "等待以太网就绪")
-    sys.wait(1000)
-    netdrv.ipv4(socket.LWIP_ETH, "192.168.5.1", "255.255.255.0", "0.0.0.0")
-    while netdrv.ready(socket.LWIP_ETH) ~= true do
-        -- log.info("netdrv", "等待以太网就绪")
-        sys.wait(100)
-    end
-    log.info("netdrv", "以太网就绪")
-    log.info("netdrv", "创建dhcp服务器, 供以太网使用")
-    dhcpsrv.create({adapter=socket.LWIP_ETH, gw={192,168,5,1}})
-    log.info("netdrv", "创建dns代理服务, 供以太网使用")
-    dnsproxy.setup(socket.LWIP_ETH, socket.LWIP_GP)
-end
-
-sys.taskInit(function()
-    while airlink.ready() ~= true do
-        sys.wait(100)
-    end
-    wlan.init()
-    sys.taskInit(eth_lan)
-    sys.taskInit(test_ap)
-
-    
-    while 1 do
-        if netdrv.ready(socket.LWIP_GP) then
-            log.info("netdrv", "4G作为网关")
-            netdrv.napt(socket.LWIP_GP)
-            break
-        end
-        sys.wait(1000)
-    end
-end)
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 76
luat/demo/airlink/air8000_ap_sta_ping/air8000_ap_ping/main.lua

@@ -1,76 +0,0 @@
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "air8000_ap_ping"
-VERSION = "1.0.0"
-
--- sys库是标配
-_G.sys = require("sys")
-require "sysplus"
-dnsproxy = require("dnsproxy")
-dhcpsrv = require("dhcpsrv")
-
-function create_ap()
-    log.info("执行AP创建操作", "luatos8888")
-    wlan.createAP("luatos8888", "12345678")
-    sys.wait(1000)
-    netdrv.ipv4(socket.LWIP_AP, "192.168.4.1", "255.255.255.0", "0.0.0.0")
-    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 wifi_networking()
-   sys.wait(3000)
-    -- AP的ssid和password
-    wlan.scan()
-    -- sys.wait(500)
-    httpsrv.start(80, function(fd, method, uri, headers, body)
-        log.info("httpsrv", method, uri, json.encode(headers), body)
-    end, socket.LWIP_AP)
-end
-
-
-sys.subscribe("IP_READY", function()
-    -- 联网成功后, 模拟上报到服务器
-    log.info("wlan", "已联网", "通知服务器")
-
-end)
-
-sys.subscribe("PING_RESULT", function(id, time, dst)
-    log.info("ping", id, time, dst);
-end)
-
-sys.taskInit(function()
-
-    -- sys.wait(100)
-    wlan.init()
-    sys.wait(100)
-
-    -- 启动AP测试
-    create_ap()
-    wifi_networking()
-
-    icmp.setup(socket.LWIP_AP)
-    while 1 do
-        log.info("开始ping STA")
-
-        for i = 0, 10, 1 do
-            local ip = "192.168.4." .. (i+100)
-            log.info("STA客户端", ip)
-            icmp.ping(socket.LWIP_AP, ip)
-            sys.waitUntil("PING_RESULT", 3000)
-        end
-        sys.wait(1000)
-    end
-
-end)
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 61
luat/demo/airlink/air8000_ap_sta_ping/air8101_sta_httpsrv/main.lua

@@ -1,61 +0,0 @@
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "air8101_sta_httpsrv"
-VERSION = "1.0.5"
-
-dnsproxy = require("dnsproxy")
-dhcpsrv = require("dhcpsrv")
-
--- wifi的STA相关事件
-sys.subscribe("WLAN_STA_INC", function(evt, data)
-    -- evt 可能的值有: "CONNECTED", "DISCONNECTED"
-    -- 当evt=CONNECTED, data是连接的AP的ssid, 字符串类型
-    -- 当evt=DISCONNECTED, data断开的原因, 整数类型
-    log.info("收到STA事件", evt, data)
-end)
-
-function test_sta()
-    log.info("执行STA连接操作")
-    wlan.connect("luatos8888", "12345678")
-    sys.wait(8000)
-    iperf.server(socket.LWIP_STA)
-
-
-    sys.wait(5000)
-    sys.wait(200)
-    wifi_networking()
-    
-    while 1 do
-        log.info("wlan", "info", json.encode(wlan.getInfo()))
-           
-        sys.wait(30*1000)
-        local code, headers, body = http.request("GET", "http://httpbin.air32.cn/get", nil, nil, {adapter=socket.LWIP_STA,timeout=5000,debug=false}).wait()
-        log.info("http执行结果", code, headers, body and #body)
- 
-    end
-end
-
-function wifi_networking()
-   sys.wait(3000)
-    -- AP的ssid和password
-    wlan.scan()
-    -- sys.wait(500)
-    httpsrv.start(80, function(fd, method, uri, headers, body)
-        log.info("httpsrv", method, uri, json.encode(headers), body)
-    end, socket.LWIP_STA)
-end
-
-sys.taskInit(function()
-    wlan.init()
-   
-    -- 连接STA测试
-    log.info("STA_httpsrv测试启动...")
-    test_sta()
-
-end)
-
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 64
luat/demo/airlink/air8000_ble/ibeacon/main.lua

@@ -1,64 +0,0 @@
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "ble"
-VERSION = "1.0.0"
-
--- 引入必要的库文件(lua编写), 内部库不需要require
-sys = require("sys")
-
-log.info("main", "project name is ", PROJECT, "version is ", VERSION)
-
--- 通过boot按键方便刷Air8000S
-function PWR8000S(val) gpio.set(23, val) end
-
-gpio.debounce(0, 1000)
-gpio.setup(0, function()
-    sys.taskInit(function()
-        log.info("复位Air8000S")
-        PWR8000S(0)
-        sys.wait(20)
-        PWR8000S(1)
-    end)
-end, gpio.PULLDOWN)
-
-function ble_callback()
-    -- 无事可做
-end
-
-sys.taskInit(function()
-    local ret = 0
-    sys.wait(500)
-    log.info("开始初始化蓝牙核心")
-    bluetooth_device = bluetooth.init()
-    sys.wait(100)
-    log.info("初始化BLE功能")
-    ble_device = bluetooth_device:ble(ble_callback)
-    sys.wait(100)
-
-    sys.wait(100)
-    log.info("开始设置广播内容")
-    local adv_data = string.char(0x4C, 0x00,
-                                0x02, 0x15, 0x01, 0x02, 0x03, 0x04, 0x05,
-                                        0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10,
-                                        0x00, 0x01,
-                                        0x00, 0x02,
-                                        0x00)
-    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.MANUFACTURER_SPECIFIC_DATA, adv_data}
-        }
-    })
-
-    sys.wait(100)
-    log.info("开始广播")
-    ble_device:adv_start()
-end)
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 83
luat/demo/airlink/air8000_ble/master/main.lua

@@ -1,83 +0,0 @@
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "ble"
-VERSION = "1.0.0"
-
-log.info("main", "project name is ", PROJECT, "version is ", VERSION)
-
--- 通过boot按键方便刷Air8000S
-function PWR8000S(val) gpio.set(23, val) end
-
-gpio.debounce(0, 1000)
-gpio.setup(0, function()
-    sys.taskInit(function()
-        log.info("复位Air8000S")
-        PWR8000S(0)
-        sys.wait(20)
-        PWR8000S(1)
-    end)
-end, gpio.PULLDOWN)
-
-local scan_count = 0
-
-local function ble_callback(ble_device, ble_event, ble_param)
-    if ble_event == ble.EVENT_CONN then
-        log.info("ble", "connect 成功")
-    elseif ble_event == ble.EVENT_DISCONN then
-        log.info("ble", "disconnect", ble_param.reason)
-        sys.timerStart(function() ble_device:scan_start() end, 1000)
-    elseif ble_event == ble.EVENT_WRITE then
-        log.info("ble", "write", ble_param.handle,ble_param.uuid_service:toHex(),ble_param.uuid_characteristic:toHex())
-        log.info("ble", "data", ble_param.data:toHex())
-    elseif ble_event == ble.EVENT_READ_VALUE then
-        log.info("ble", "read", ble_param.handle,ble_param.uuid_service:toHex(),ble_param.uuid_characteristic:toHex(),ble_param.data:toHex())
-    elseif ble_event == ble.EVENT_SCAN_REPORT then
-        print("ble scan report",ble_param.addr_type,ble_param.rssi,ble_param.adv_addr:toHex(),ble_param.data:toHex())
-        scan_count = scan_count + 1
-        if scan_count > 100 then
-            log.info("ble", "扫描次数超过100次, 停止扫描, 15秒后重新开始")
-            scan_count = 0
-            ble_device:scan_stop()
-            sys.timerStart(function() ble_device:scan_start() end, 15000)
-        end
-        -- 注意, 这里是连接到另外一个设备, 设备名称带LuatOS字样
-        if ble_param.addr_type == 0 and ble_param.data:find("LuatOS") then
-            log.info("ble", "停止扫描, 连接设备", ble_param.adv_addr:toHex(), ble_param.addr_type)
-            ble_device:scan_stop()
-            ble_device:connect(ble_param.adv_addr,ble_param.addr_type)
-        end
-    elseif ble_event == ble.EVENT_GATT_ITEM then
-        -- 读取GATT完成, 打印出来
-        log.info("ble", "gatt item", ble_param)
-    elseif ble_event == ble.EVENT_GATT_DONE then
-        log.info("ble", "gatt done", ble_param.service_num)
-        local wt = {uuid_service = string.fromHex("FA00"), uuid_characteristic = string.fromHex("EA01")}
-        ble_device:notify_enable(wt, true) -- 开启通知
-
-        -- 主动写入数据, 但不带通知, 带通知是 write_notify
-        local wt = {uuid_service = string.fromHex("FA00"), uuid_characteristic = string.fromHex("EA02")}
-        ble_device:write_value(wt,string.fromHex("1234"))
-
-        local wt = {uuid_service = string.fromHex("FA00"), uuid_characteristic = string.fromHex("EA03")}
-        ble_device:read_value(wt)
-    end
-end
-
-
-sys.taskInit(function()
-    log.info("开始初始化蓝牙核心")
-    bluetooth_device = bluetooth.init()
-    log.info("初始化BLE功能")
-    ble_device = bluetooth_device:ble(ble_callback)
-
-    -- master
-    ble_device:scan_create({})
-    ble_device:scan_start()
-    -- ble_device:scan_stop()
-end)
-
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 127
luat/demo/airlink/air8000_ble/peripheral/main.lua

@@ -1,127 +0,0 @@
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "ble"
-VERSION = "1.0.0"
-
--- 引入必要的库文件(lua编写), 内部库不需要require
-sys = require("sys")
-
-log.info("main", "project name is ", PROJECT, "version is ", VERSION)
-
--- 通过boot按键方便刷Air8000S
-function PWR8000S(val) gpio.set(23, val) end
-
-gpio.debounce(0, 1000)
-gpio.setup(0, function()
-    sys.taskInit(function()
-        log.info("复位Air8000S")
-        PWR8000S(0)
-        sys.wait(20)
-        PWR8000S(1)
-    end)
-end, gpio.PULLDOWN)
-
-local att_db = { -- Service
-    string.fromHex("FA00"), -- Service UUID
-    -- Characteristic
-    { -- Characteristic 1
-        string.fromHex("EA01"), -- Characteristic UUID Value
-        ble.NOTIFY | ble.READ | ble.WRITE -- Properties
-    }, { -- Characteristic 2
-        string.fromHex("EA02"), ble.WRITE
-    }, { -- Characteristic 3
-        string.fromHex("EA03"), ble.READ
-    }, { -- Characteristic 4
-        string.fromHex("EA04"), ble.IND | ble.READ
-    }
-}
-
-ble_stat = false
-
-local function ble_callback(dev, evt, param)
-    if evt == ble.EVENT_CONN then
-        log.info("ble", "connect 成功", param, param and param.addr and param.addr:toHex() or "unknow")
-        ble_stat = true
-    elseif evt == ble.EVENT_DISCONN then
-        log.info("ble", "disconnect")
-        ble_stat = false
-        -- 1秒后重新开始广播
-        sys.timerStart(function() dev:adv_start() end, 1000)
-    elseif evt == ble.EVENT_WRITE then
-        -- 收到写请求
-        log.info("ble", "接收到写请求", param.uuid_service:toHex(), param.uuid_characteristic:toHex(), param.data:toHex())
-    end
-end
-
-local bt_scan = false -- 是否扫描蓝牙
-
-sys.taskInit(function()
-    local ret = 0
-    sys.wait(500)
-    log.info("开始初始化蓝牙核心")
-    bluetooth_device = bluetooth.init()
-    sys.wait(100)
-    log.info("初始化BLE功能")
-    ble_device = bluetooth_device:ble(ble_callback)
-    if ble_device == nil then
-        log.error("当前固件不支持完整的BLE")
-        return
-    end
-    sys.wait(100)
-
-    log.info('开始创建GATT')
-    ret = ble_device:gatt_create(att_db)
-    log.info("创建的GATT", ret)
-
-    sys.wait(100)
-    log.info("开始设置广播内容")
-    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, "LuatOS123"},
-            {ble.SERVICE_DATA, string.fromHex("FE01")},
-            {ble.MANUFACTURER_SPECIFIC_DATA, string.fromHex("05F0")}
-        }
-    })
-
-    sys.wait(100)
-    log.info("开始广播")
-    ble_device:adv_start()
-
-        
-    -- 放入预设值, 注意是有READ属性的特性才能读取
-    -- 手机APP设置MTU到256
-    local wt = {
-        uuid_service = string.fromHex("FA00"),
-        uuid_characteristic = string.fromHex("EA01"), 
-    }
-    ble_device:write_value(wt, "12345678901234567890")
-
-    while 1 do
-        sys.wait(3000)
-        if ble_stat then
-            local wt = {
-                uuid_service = string.fromHex("FA00"),
-                uuid_characteristic = string.fromHex("EA01"), 
-            }
-            local result = ble_device:write_notify(wt, "123456" .. os.date())
-            log.info("ble", "发送数据", result)
-        else
-            -- log.info("等待连接成功之后发送数据")
-        end
-        
-        local wt = {
-            uuid_service = string.fromHex("FA00"),
-            uuid_characteristic = string.fromHex("EA03"), 
-        }
-        ble_device:write_value(wt, "8888 123454")
-    end
-end)
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 85
luat/demo/airlink/air8000_ble/scan/main.lua

@@ -1,85 +0,0 @@
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "ble"
-VERSION = "1.0.0"
-
--- 引入必要的库文件(lua编写), 内部库不需要require
-sys = require("sys")
-
-log.info("main", "project name is ", PROJECT, "version is ", VERSION)
-
--- 通过boot按键方便刷Air8000S
-function PWR8000S(val)
-    gpio.set(23, val)
-end
-
-gpio.debounce(0, 1000)
-gpio.setup(0, function()
-    sys.taskInit(function()
-        log.info("复位Air8000S")
-        PWR8000S(0)
-        sys.wait(20)
-        PWR8000S(1)
-    end)
-end, gpio.PULLDOWN)
-
-local function ble_callback(ble_device, ble_event, ble_param)
-    if ble_event == ble.EVENT_SCAN_INIT then
-        log.info("ble", "scan init")
-    elseif ble_event == ble.EVENT_SCAN_REPORT then
-        log.info("ble", "scan report", ble_param.rssi, ble_param.adv_addr:toHex(), ble_param.data:toHex())
-        -- 解析广播数据, 日志很多, 按需使用
-        -- local adv_data = ble_device:adv_decode(ble_param.data)
-        -- if adv_data then
-        --     for k, v in pairs(adv_data) do
-        --         log.info("ble", "adv data", v.len, v.tp, v.data:toHex())
-        --     end
-        -- end
-        -- if ble_param.data:byte(1) == 0x1A then
-        --     log.info("ble", "ibeacon数据", ble_param.rssi, ble_param.adv_addr:toHex(), ble_param.data:toHex())
-        -- end
-    elseif ble_event == ble.EVENT_SCAN_STOP then
-        log.info("ble", "scan stop")
-    end
-end
-
-local bt_scan = false   -- 是否扫描蓝牙
-
-sys.taskInit(function()
-    sys.wait(500)
-    log.info("开始初始化蓝牙核心")
-    bluetooth_device = bluetooth.init()
-    sys.wait(100)
-    log.info("初始化BLE功能")
-    ble_device = bluetooth_device:ble(ble_callback)
-    if ble_device == nil then
-        log.error("当前固件不支持完整的BLE")
-        return
-    end
-    sys.wait(100)
-    -- 扫描模式
-    sys.wait(1000)
-    ble_device:scan_create() -- 使用默认参数, addr_mode=0, scan_interval=100, scan_window=100
-    -- ble_device:scan_create(0, 10, 10) -- 使用自定义参数
-    sys.wait(100)
-    log.info("开始扫描")
-    ble_device:scan_start()
-
-    -- sys.wait(15000)
-    -- log.info("停止扫描")
-    -- ble_device:scan_stop()
-
-end)
-
--- sys.timerLoopStart(function()
---     print("hi, LuatOS")
---     print("mem.lua", rtos.meminfo())
---     print("mem.sys", rtos.meminfo("sys"))
---     print("mem.psram", rtos.meminfo("psram"))
--- end, 3000)
-
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 41
luat/demo/airlink/air8000_gpio/main.lua

@@ -1,41 +0,0 @@
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "air8000_gpio_ext"
-VERSION = "1.0.5"
-
--- sys库是标配
-_G.sys = require("sys")
---[[特别注意, 使用http库需要下列语句]]
-
--- 通过boot按键方便刷Air8000S
-function PWR8000S(val)
-    gpio.set(23, val)
-end
-
-gpio.debounce(0, 1000)
-gpio.setup(0, function()
-    sys.taskInit(function()
-        log.info("复位Air8000S")
-        PWR8000S(0)
-        sys.wait(20)
-        PWR8000S(1)
-    end)
-end, gpio.PULLDOWN)
-
-sys.taskInit(function()
-    -- 闪灯开始
-    sys.wait(100)
-    pin = 164
-    while 1 do
-        gpio.setup(pin, 0, gpio.PULLUP)
-        sys.wait(500)
-        gpio.setup(pin, 1, gpio.PULLUP)
-        sys.wait(500)
-    end
-end)
-
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 43
luat/demo/airlink/air8000_gpio_get/main.lua

@@ -1,43 +0,0 @@
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "air8000_gpio_get"
-VERSION = "1.0.5"
-
--- sys库是标配
-_G.sys = require("sys")
---[[特别注意, 使用http库需要下列语句]]
-
--- 通过boot按键方便刷Air8000S
-function PWR8000S(val)
-    gpio.set(23, val)
-end
-
-gpio.debounce(0, 1000)
-gpio.setup(0, function()
-    sys.taskInit(function()
-        log.info("复位Air8000S")
-        PWR8000S(0)
-        sys.wait(20)
-        PWR8000S(1)
-    end)
-end, gpio.PULLDOWN)
-
-sys.taskInit(function()
-
-    -- GPIO153 输出电平
-    -- GPIO160 读取电平
-    sys.wait(3000)
-    IN = gpio.setup(160, nil, gpio.PULLUP)
-    OUT = gpio.setup(153, 0, gpio.PULLUP)
-    while 1 do
-        gpio.toggle(153)
-        log.info("gpio", "读出的值是", gpio.get(160)) 
-        sys.wait(1000)
-    end
-end)
-
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 73
luat/demo/airlink/air8000_uart/main.lua

@@ -1,73 +0,0 @@
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "air8000_gpio_ext"
-VERSION = "1.0.5"
-
--- sys库是标配
-_G.sys = require("sys")
---[[特别注意, 使用http库需要下列语句]]
-
-PWR8000S = function(level)
-    gpio.set(23, level)
-end
-
-gpio.debounce(0, 1000)
-gpio.setup(0, function()
-    sys.taskInit(function()
-        log.info("复位Air8000S")
-        PWR8000S(0)
-        sys.wait(20)
-        PWR8000S(1)
-    end)
-end, gpio.PULLDOWN)
-
-local uartid = 11
-local buff = zbuff.create(1024)
-function uart_on()
-    local result = uart.on(uartid, "receive", function(id, len)
-        local s = ""
-        log.info("uart", "recv", id, len)
-        repeat
-            -- s = uart.read(id, 128)
-            uart.rx(id, buff)
-            s = buff:query()
-            if s and #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())
-                buff:del()
-            else
-                break
-            end
-        until s == ""
-    end)
-    log.info("uart.on", "receive", result)
-
-    uart.on(uartid, "sent", function(id)
-        log.info("uart", id, "sent")
-    end)
-end
-
-sys.taskInit(function()
-    sys.wait(1000)
-    airlink.debug(1)
-    local ret = uart.setup(uartid, 115200)
-    log.info("执行初始化", ret);
-    uart_on()
-    while 1 do
-        uart.write(uartid, "1234123412341234")
-        -- gpio.setup(164, 0, gpio.PULLDOWN)
-        sys.wait(1000)
-        -- break
-        -- airlink.statistics()
-    end
-    -- while 1 do
-    --     uart.write(11, "ABC\r\n")
-    --     sys.wait(1000)
-    -- end
-end)
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 49
luat/demo/airlink/air8000_uart11_gnss/main.lua

@@ -1,49 +0,0 @@
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "uart11"
-VERSION = "1.0.5"
-
---[[
-注意!!!
-这个demo演示的是外挂一个GNSS模组, 不是使用Air8000里面的GNSS芯片
-]]
-
--- 通过boot按键方便刷Air8000S
-function PWR8000S(val)
-    gpio.set(23, val)
-end
-
-gpio.debounce(0, 1000)
-gpio.setup(0, function()
-    sys.taskInit(function()
-        log.info("复位Air8000S")
-        PWR8000S(0)
-        sys.wait(20)
-        PWR8000S(1)
-    end)
-end, gpio.PULLDOWN)
-
-sys.taskInit(function()
-    
-    -- 首先, 初始化uart11
-    uart.setup(11, 115200)
-    libgnss.bind(11)
-    libgnss.debug(true) -- 调试开关,非必须,生产环境要关掉
-    while 1 do
-        -- 这段代码是演示注入假数据的, 真实接GNSS模组的话, 这段代码不需要
-        log.info("uart11", "注入假的GNSS数据")
-        uart.write(11, "$GPGGA,055258.000,3027.4932,N,11424.2381,E,1,06,2.9,101.9,M,-13.6,M,,0000*7E\r\n")
-        uart.write(11, "$GPGSA,A,3,28,06,57,58,30,02,,,,,,,4.1,2.9,2.9*35\r\n")
-        uart.write(11, "$GPRMC,055258.000,A,3027.4932,N,11424.2381,E,0.00,15.90,120620,,,A*5B\r\n")
-
-        -- 打印定位信息
-        log.info("RMC", json.encode(libgnss.getRmc(2) or {}, "7f"))
-        sys.wait(1000)
-    end
-end)
-
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 146
luat/demo/airlink/air8000_wifi/main.lua

@@ -1,146 +0,0 @@
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "air8000_wifi"
-VERSION = "1.0.5"
-
-dnsproxy = require("dnsproxy")
-dhcpsrv = require("dhcpsrv")
-httpplus = require("httpplus")
-
--- 通过boot按键方便刷Air8000S
-function PWR8000S(val)
-    gpio.set(23, val)
-end
-
-gpio.debounce(0, 1000)
-gpio.setup(0, function()
-    sys.taskInit(function()
-        log.info("复位Air8000S")
-        PWR8000S(0)
-        sys.wait(20)
-        PWR8000S(1)
-    end)
-end, gpio.PULLDOWN)
-
--- if airlink.irqmode then
---     log.info("尝试开启IRQ模式", "GPIO20 <--> GPIO140")
---     airlink.irqmode(true, 20, 140)
--- end
-
-function test_ap()
-    log.info("执行AP创建操作")
-    wlan.createAP("uiot5678", "12345678")
-    netdrv.ipv4(socket.LWIP_AP, "192.168.4.1", "255.255.255.0", "0.0.0.0")
-    sys.wait(5000)
-    -- netdrv.ipv4(socket.LWIP_AP, "192.168.4.1", "255.255.255.0", "0.0.0.0")
-    -- log.info("创建dns代理", netdrv.ipv4(socket.LWIP_AP))
-    dnsproxy.setup(socket.LWIP_AP, socket.LWIP_GP)
-    -- log.info('创建DHCP服务器', netdrv.ipv4(socket.LWIP_AP))
-    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
-
--- wifi的STA相关事件
-sys.subscribe("WLAN_STA_INC", function(evt, data)
-    -- evt 可能的值有: "CONNECTED", "DISCONNECTED"
-    -- 当evt=CONNECTED, data是连接的AP的ssid, 字符串类型
-    -- 当evt=DISCONNECTED, data断开的原因, 整数类型
-    log.info("收到STA事件", evt, data)
-end)
-
--- wifi的AP相关事件
-sys.subscribe("WLAN_AP_INC", function(evt, data)
-    -- evt 可能的值有: "CONNECTED", "DISCONNECTED"
-    -- 当evt=CONNECTED, data是连接的AP的新STA的MAC地址
-    -- 当evt=DISCONNECTED, data是断开与AP连接的STA的MAC地址
-    log.info("收到AP事件", evt, data and data:toHex())
-end)
-
-function test_sta()
-    log.info("执行STA连接操作")
-    wlan.connect("luatos1234", "12341234")
-    -- netdrv.dhcp(socket.LWIP_STA, true)
-    sys.wait(8000)
-    iperf.server(socket.LWIP_STA)
-    -- iperf.client(socket.LWIP_STA, "47.94.236.172")
-
-    sys.wait(5000)
-    while 1 do
-        log.info("wlan", "info", json.encode(wlan.getInfo()))
-        -- 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=5000,debug=false}).wait()
-        log.info("http执行结果", code, headers, body and #body)
-        -- socket.sntp(nil, socket.LWIP_STA)
-        sys.wait(2000)
-
-        -- socket.sntp(nil)
-        -- sys.wait(2000)
-        -- log.info("执行ping操作")
-        -- icmp.ping(socket.LWIP_STA, "183.2.172.177")
-        -- sys.wait(2000)
-    end
-end
-
-sys.subscribe("PING_RESULT", function(id, time, dst)
-    log.info("ping", id, time, dst);
-end)
-
-function test_scan()
-    while 1 do
-        log.info("执行wifi扫描")
-        wlan.scan()
-        sys.wait(30 * 1000)
-    end
-end
-sys.subscribe("WLAN_SCAN_DONE", function ()
-    local results = wlan.scanResult()
-    log.info("scan", "results", #results)
-    for k,v in pairs(results) do
-        log.info("scan", v["ssid"], v["rssi"], (v["bssid"]:toHex()))
-    end
-end)
-
---  每隔6秒打印一次airlink统计数据, 调试用
--- sys.taskInit(function()
---     while 1 do
---         sys.wait(6000)
---         airlink.statistics()
---     end
--- end)
-
-sys.taskInit(function()
-    log.info("新的Air8000脚本...")
-
-    -- sys.wait(200) -- 稍微缓一下, Air8000S的启动大概需要300ms
-    -- 启动AP测试
-    -- netdrv.setup(socket.LWIP_STA, netdrv.WHALE)
-    -- netdrv.setup(socket.LWIP_AP, netdrv.WHALE)
-    wlan.init()
-    -- sys.wait(5000)
-    
-    -- sys.wait(300)
-    -- test_ap()
-
-    -- 连接STA测试
-    test_sta()
-
-    -- wifi扫描测试
-    -- test_scan()
-end)
-
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 115
luat/demo/airlink/air8000_wifi_ap_httpsrv/index.html

@@ -1,115 +0,0 @@
-<!DOCTYPE html>
-<html>
-<header>
-    <meta charset="utf-8" />
-    <title>Http Server Get-Start</title>
-    <!-- fetch api-->
-    <!-- <script type="text/javascript" src="/petite-vue.js"></script> -->
-    <script type="text/javascript">
-        function led(key) {
-            fetch("/led/" + key)
-        }
-        function wifi_get_aplist() {
-            var resp = fetch("/scan/list").then(function (resp) {
-                console.log(resp, resp.status)
-                if (resp.status != 200) {
-                    return
-                }
-                resp.json().then(function (data) {
-                    console.log("data", data)
-                    var tmp = ""
-                    for (let index = 0; index < data.data.length; index++) {
-                        const apname = data.data[index];
-                        if (index == 0) {
-                            tmp += "<option vaule='" + index + "' selected>" + apname+"</option>\n"
-                        }
-                        else {
-                            tmp += "<option vaule='" + index + "'>" + apname+"</option>\n"
-                        }
-                        
-                    }
-                    document.getElementById("aplist").innerHTML = tmp
-                })
-            })
-        }
-        function wifi_scan() {
-            fetch("/scan/go")
-            setTimeout(wifi_get_aplist, 3000)
-        }
-        function wifi_connect() {
-            var ssid = document.getElementById("ssid").value
-            var passwd = document.getElementById("passwd").value
-            console.log(ssid, passwd)
-            fetch("/connect", {
-                method : "POST",
-                body : JSON.stringify({ssid:ssid, passwd:passwd})
-            }).then(function(resp) {
-                if (resp.status == 200) {
-                    alert("正在尝试连接")
-                }
-                else {
-                    alert("出了点问题")
-                }
-            })
-        }
-        function wifi_ipstat() {
-            fetch("/connok").then(function(resp){
-                if (resp.status != 200)
-                    return
-                resp.json().then(function(data){
-                    console.log(data)
-                    if (data && data.ip != "0.0.0.0") {
-                        document.getElementById("ipstat").innerHTML = "已联网"
-                    }
-                })
-            })
-        }
-        function select_changed(event) {
-            var apselect = document.getElementById("aplist")
-            var ssid = document.getElementById("ssid")
-            ssid.value = apselect.options[apselect.selectedIndex].text
-        }
-        setTimeout(wifi_get_aplist, 3000)
-        // setInterval(wifi_ipstat, 3000)
-    </script>
-</header>
-
-<body>
-    <h2>点击按钮, led灯会亮起或熄灭</h2>
-    <div>
-        <div>
-            <button onclick="led(1)">LED亮</button>
-        </div>
-        <div>
-            <button onclick="led(0)">LED灭</button>
-        </div>
-    </div>
-    <h2>AP WEB 配网</h2>
-    <div v-scope="{aps:[]}">
-        <div>
-            <button onclick="wifi_scan()">扫描wifi</button>
-        </div>
-        <div>
-            <h4>wifi列表</h4>
-            <select id="aplist" onchange="select_changed()">
-                <option vaule="">luatos1234</option>
-            </select>
-            <p></p>
-            wifi名称: <input id="ssid">
-            <p></p>
-            密码: <input id="passwd">
-            <p></p>
-            <button onclick="wifi_connect()">连接</button>
-        </div>
-        <div>
-            <h4>联网状态:</h4><span id="ipstat">未联网</span>
-            <p></p>
-            <button onclick="wifi_ipstat()">检查状态</button>
-        </div>
-    </div>
-    <div>
-        <h4>Power by <a href="https://wiki.luatos.com">LuatOS</a></h4>
-    </div>
-</body>
-
-</html>

+ 0 - 115
luat/demo/airlink/air8000_wifi_ap_httpsrv/index2.html

@@ -1,115 +0,0 @@
-<!DOCTYPE html>
-<html>
-<header>
-    <meta charset="utf-8" />
-    <title>Http Server Get-Start</title>
-    <!-- fetch api-->
-    <!-- <script type="text/javascript" src="/petite-vue.js"></script> -->
-    <script type="text/javascript">
-        function led(key) {
-            fetch("/led/" + key)
-        }
-        function wifi_get_aplist() {
-            var resp = fetch("/scan/list").then(function (resp) {
-                console.log(resp, resp.status)
-                if (resp.status != 200) {
-                    return
-                }
-                resp.json().then(function (data) {
-                    console.log("data", data)
-                    var tmp = ""
-                    for (let index = 0; index < data.data.length; index++) {
-                        const apname = data.data[index];
-                        if (index == 0) {
-                            tmp += "<option vaule='" + index + "' selected>" + apname+"</option>\n"
-                        }
-                        else {
-                            tmp += "<option vaule='" + index + "'>" + apname+"</option>\n"
-                        }
-                        
-                    }
-                    document.getElementById("aplist").innerHTML = tmp
-                })
-            })
-        }
-        function wifi_scan() {
-            fetch("/scan/go")
-            setTimeout(wifi_get_aplist, 3000)
-        }
-        function wifi_connect() {
-            var ssid = document.getElementById("ssid").value
-            var passwd = document.getElementById("passwd").value
-            console.log(ssid, passwd)
-            fetch("/connect", {
-                method : "POST",
-                body : JSON.stringify({ssid:ssid, passwd:passwd})
-            }).then(function(resp) {
-                if (resp.status == 200) {
-                    alert("正在尝试连接")
-                }
-                else {
-                    alert("出了点问题")
-                }
-            })
-        }
-        function wifi_ipstat() {
-            fetch("/connok").then(function(resp){
-                if (resp.status != 200)
-                    return
-                resp.json().then(function(data){
-                    console.log(data)
-                    if (data && data.ip != "0.0.0.0") {
-                        document.getElementById("ipstat").innerHTML = "已联网"
-                    }
-                })
-            })
-        }
-        function select_changed(event) {
-            var apselect = document.getElementById("aplist")
-            var ssid = document.getElementById("ssid")
-            ssid.value = apselect.options[apselect.selectedIndex].text
-        }
-        setTimeout(wifi_get_aplist, 3000)
-        // setInterval(wifi_ipstat, 3000)
-    </script>
-</header>
-
-<body>
-    <h2>点击按钮, led灯会亮起或熄灭</h2>
-    <div>
-        <div>
-            <button onclick="led(1)">LED亮</button>
-        </div>
-        <div>
-            <button onclick="led(0)">LED灭</button>
-        </div>
-    </div>
-    <h2>AP WEB 配网</h2>
-    <div v-scope="{aps:[]}">
-        <div>
-            <button onclick="wifi_scan()">扫描wifi</button>
-        </div>
-        <div>
-            <h4>wifi列表</h4>
-            <select id="aplist" onchange="select_changed()">
-                <option vaule="">luatos1234</option>
-            </select>
-            <p></p>
-            wifi名称: <input id="ssid">
-            <p></p>
-            密码: <input id="passwd">
-            <p></p>
-            <button onclick="wifi_connect()">连接</button>
-        </div>
-        <div>
-            <h4>联网状态:</h4><span id="ipstat">未联网</span>
-            <p></p>
-            <button onclick="wifi_ipstat()">检查状态</button>
-        </div>
-    </div>
-    <div>
-        <h4>Power by <a href="https://wiki.luatos.com">LuatOS</a></h4>
-    </div>
-</body>
-
-</html>

+ 0 - 139
luat/demo/airlink/air8000_wifi_ap_httpsrv/main.lua

@@ -1,139 +0,0 @@
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "WIFI_AP"
-VERSION = "1.0.0"
---[[
-本demo演示AP的配网实例
-1. 启动后, 会创建一个 luatos_ + mac地址的热点
-2. 热点密码是 12345678
-3. 热点网关是 192.168.4.1, 同时也是配网网页的ip
-4. http://192.168.4.1
-]]
-
--- sys库是标配
-_G.sys = require("sys")
-require "sysplus"
-dnsproxy = require("dnsproxy")
-dhcpsrv = require("dhcpsrv")
-httpplus = require("httpplus")
-local LEDA= gpio.setup(20, 0, gpio.PULLUP)
-
-function create_ap()
-    log.info("执行AP创建操作", "luatos8888")
-    wlan.createAP("luatos8888", "12345678")
-    sys.wait(1000)
-    netdrv.ipv4(socket.LWIP_AP, "192.168.4.1", "255.255.255.0", "0.0.0.0")
-    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 wifi_networking()
-   sys.wait(3000)
-    -- AP的ssid和password
-    wlan.scan()
-    -- sys.wait(500)
-    httpsrv.start(80, function(fd, method, uri, headers, body)
-        log.info("httpsrv", method, uri, json.encode(headers), body)
-        -- /led是控制灯的API
-        if uri == "/led/1" then
-            LEDA(1)
-            return 200, {}, "ok"
-        elseif uri == "/led/0" then
-            LEDA(0)
-            return 200, {}, "ok"
-        -- 扫描AP
-        elseif uri == "/scan/go" then
-            wlan.scan()
-            return 200, {}, "ok"
-        -- 前端获取AP列表
-        elseif uri == "/scan/list" then
-            return 200, {["Content-Type"]="applaction/json"}, (json.encode({data=_G.scan_result, ok=true}))
-        -- 前端填好了ssid和密码, 那就连接吧
-        elseif uri == "/connect" then
-            if method == "POST" and body and #body > 2 then
-                local jdata = json.decode(body)
-                if jdata and jdata.ssid then
-                    -- 开启一个定时器联网, 否则这个情况可能会联网完成后才执行完
-                    sys.timerStart(wlan.connect, 500, jdata.ssid, jdata.passwd)
-                    return 200, {}, "ok"
-                end
-            end
-            return 400, {}, "ok"
-        -- 根据ip地址来判断是否已经连接成功
-        elseif uri == "/connok" then
-            return 200, {["Content-Type"]="applaction/json"}, json.encode({ip=socket.localIP()})
-        end
-        -- 其他情况就是找不到了
-        return 404, {}, "Not Found" .. uri
-    end, socket.LWIP_AP)
-    log.info("web", "pls open url http://192.168.4.1/")
-end
-
--- wifi扫描成功后, 会有WLAN_SCAN_DONE消息, 读取即可
-sys.subscribe("WLAN_SCAN_DONE", function ()
-    local result = wlan.scanResult()
-    _G.scan_result = {}
-    for k,v in pairs(result) do
-        log.info("scan", (v["ssid"] and #v["ssid"] > 0) and v["ssid"] or "[隐藏SSID]", v["rssi"], (v["bssid"]:toHex()))
-        if v["ssid"] and #v["ssid"] > 0 then
-            table.insert(_G.scan_result, v["ssid"])
-        end
-    end
-    log.info("scan", "aplist", json.encode(_G.scan_result))
-end)
-
-sys.subscribe("IP_READY", function()
-    -- 联网成功后, 模拟上报到服务器
-    log.info("wlan", "已联网", "通知服务器")
-
-end)
-
-function test_scan()
-    while 1 do
-        log.info("执行wifi扫描")
-        wlan.scan()
-        sys.wait(30 * 1000)
-    end
-end
-sys.subscribe("WLAN_SCAN_DONE", function ()
-    local results = wlan.scanResult()
-    log.info("scan", "results", #results)
-    for k,v in pairs(results) do
-        log.info("scan", v["ssid"], v["rssi"], (v["bssid"]:toHex()))
-    end
-end)
-
---  每隔6秒打印一次airlink统计数据, 调试用
--- sys.taskInit(function()
---     while 1 do
---         sys.wait(6000)
---         airlink.statistics()
---     end
--- end)
-
-sys.taskInit(function()
-
-    -- sys.wait(100)
-    wlan.init()
-    sys.wait(100)
-
-    -- 启动AP测试
-    create_ap()
-    wifi_networking()
-    -- 连接STA测试
-    -- test_sta()
-
-    -- wifi扫描测试
-    -- test_scan()
-end)
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 72
luat/demo/airlink/air8000_wifi_ap_ping/main.lua

@@ -1,72 +0,0 @@
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "WIFI_AP"
-VERSION = "1.0.0"
---[[
-本demo演示AP的配网实例
-1. 启动后, 会创建一个 luatos_ + mac地址的热点
-2. 热点密码是 12345678
-3. 热点网关是 192.168.4.1, 同时也是配网网页的ip
-4. http://192.168.4.1
-]]
-
--- sys库是标配
-_G.sys = require("sys")
-require "sysplus"
-dnsproxy = require("dnsproxy")
-dhcpsrv = require("dhcpsrv")
-httpplus = require("httpplus")
-
-function create_ap()
-    log.info("执行AP创建操作", "luatos8888")
-    wlan.createAP("luatos8888", "12345678")
-    sys.wait(1000)
-    netdrv.ipv4(socket.LWIP_AP, "192.168.4.1", "255.255.255.0", "0.0.0.0")
-    dnsproxy.setup(socket.LWIP_AP, socket.LWIP_GP)
-    apdhcpd = 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
-
-    icmp.setup(socket.LWIP_AP)
-    while 1 do
-        log.info("开始ping STA")
-        -- for k, v in pairs(apdhcpd.clients) do
-        --     local ip = "192.168.4." .. k
-        --     log.info("STA客户端", ip, v.mac and v.mac:toHex())
-        --     icmp.ping(socket.LWIP_AP, ip)
-        --     sys.waitUntil("PING_RESULT", 3000)
-        --     -- sys.wait(2000)
-        -- end
-        for i = 1, 10, 1 do
-            local ip = "192.168.4." .. (i+100)
-            log.info("STA客户端", ip)
-            icmp.ping(socket.LWIP_AP, ip)
-            sys.waitUntil("PING_RESULT", 3000)
-            -- sys.wait(2000)
-        end
-        sys.wait(1000)
-    end
-end
-
-sys.subscribe("PING_RESULT", function(id, time, dst)
-    log.info("ping", id, time, dst);
-end)
-
-sys.taskInit(function()
-
-    -- sys.wait(100)
-    wlan.init()
-    sys.wait(100)
-
-    -- 启动AP测试
-    create_ap()
-end)
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 118
luat/demo/airlink/air8000_wifi_eth/main.lua

@@ -1,118 +0,0 @@
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "air8000_wifi"
-VERSION = "1.0.5"
-
-dnsproxy = require("dnsproxy")
-dhcpsrv = require("dhcpsrv")
-httpplus = require("httpplus")
-
-gpio.setup(140, 1, gpio.PULLUP)
-
--- 通过boot按键方便刷Air8000S
-function PWR8000S(val)
-    gpio.set(23, val)
-end
-
-gpio.debounce(0, 1000)
-gpio.setup(0, function()
-    sys.taskInit(function()
-        log.info("复位Air8000S")
-        PWR8000S(0)
-        sys.wait(20)
-        PWR8000S(1)
-    end)
-end, gpio.PULLDOWN)
-
-function test_ap()
-    log.info("执行AP创建操作")
-    wlan.createAP("uiot5678", "12345678")
-    netdrv.ipv4(socket.LWIP_AP, "192.168.4.1", "255.255.255.0", "0.0.0.0")
-    sys.wait(5000)
-    dnsproxy.setup(socket.LWIP_AP, socket.LWIP_ETH)
-    dhcpsrv.create({adapter=socket.LWIP_AP})
-    while 1 do
-        if netdrv.ready(socket.LWIP_ETH) then
-            log.info("以太网作为网关")
-            netdrv.napt(socket.LWIP_ETH)
-            break
-        end
-        sys.wait(1000)
-    end
-    icmp.setup(socket.LWIP_ETH)
-    while 1 do
-        -- 持续ping网关
-        local ip,mark,gw = netdrv.ipv4(socket.LWIP_ETH)
-        if gw then
-            log.info("ping", gw)
-            icmp.ping(socket.LWIP_ETH, gw)
-        end
-        sys.wait(3000)
-    end
-end
-
-sys.subscribe("PING_RESULT", function(id, time, dst)
-    log.info("ping.result", id, time, dst);
-end)
-
--- wifi的AP相关事件
-sys.subscribe("WLAN_AP_INC", function(evt, data)
-    -- evt 可能的值有: "CONNECTED", "DISCONNECTED"
-    -- 当evt=CONNECTED, data是连接的AP的新STA的MAC地址
-    -- 当evt=DISCONNECTED, data是断开与AP连接的STA的MAC地址
-    log.info("收到AP事件", evt, data and data:toHex())
-end)
-
-sys.subscribe("PING_RESULT", function(id, time, dst)
-    log.info("ping", id, time, dst);
-end)
-
---  每隔6秒打印一次airlink统计数据, 调试用
--- sys.taskInit(function()
---     while 1 do
---         sys.wait(6000)
---         airlink.statistics()
---     end
--- end)
-
-
-function eth_wan()
-    -- sys.wait(3000)
-    local result = spi.setup(
-        1,--spi id
-        nil,
-        0,--CPHA
-        0,--CPOL
-        8,--数据宽度
-        51200000--,--波特率
-    )
-    log.info("main", "open spi",result)
-    if result ~= 0 then--返回值为0,表示打开成功
-        log.info("main", "spi open error",result)
-        return
-    end
-
-    netdrv.setup(socket.LWIP_ETH, netdrv.CH390, {spi=1,cs=12})
-    netdrv.dhcp(socket.LWIP_ETH, true)
-
-    while 1 do
-        local ip = netdrv.ipv4(socket.LWIP_ETH)
-        if ip and ip ~= "0.0.0.0" then
-            break
-        end
-        sys.wait(100)
-    end
-    iperf.server(socket.LWIP_ETH)
-end
-
-sys.taskInit(function()
-    eth_wan()
-    wlan.init()
-    sys.wait(300)
-    test_ap()
-end)
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 39
luat/demo/airlink/air8000s/main.lua

@@ -1,39 +0,0 @@
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "netdrv"
-VERSION = "1.0.5"
-
-
--- sys库是标配
-_G.sys = require("sys")
---[[特别注意, 使用http库需要下列语句]]
-_G.sysplus = require("sysplus")
-
-wdt.init(3000)
-sys.timerLoopStart(wdt.feed, 1000)
-
-sys.taskInit(function()
-    -- sys.wait(500)
-    airlink.start(0)
-    -- wlan.init()
-    -- sys.wait(5000)
-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())
-        airlink.statistics()
-        -- log.info("ip", socket.localIP(socket.LWIP_ETH))
-    end
-end)
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 38
luat/demo/airlink/air8000s_nop/main.lua

@@ -1,38 +0,0 @@
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "netdrv"
-VERSION = "1.0.5"
---[[特别注意, 生成量产文件的时候要带上nop.txt,否则会造成fota失败]]
---[[特别注意, 生成量产文件的时候要带上nop.txt,否则会造成fota失败]]
---[[特别注意, 生成量产文件的时候要带上nop.txt,否则会造成fota失败]]
-
-
--- 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))
-        airlink.statistics()
-    end
-end)
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 173
luat/demo/airlink/air8000s_nop/nop.txt

@@ -1,173 +0,0 @@
-# Byte-compiled / optimized / DLL files
-__pycache__/
-*.py[cod]
-*$py.class
-
-# C extensions
-*.so
-
-# Distribution / packaging
-.Python
-build/
-develop-eggs/
-downloads/
-eggs/
-.eggs/
-lib/
-lib64/
-parts/
-sdist/
-var/
-wheels/
-share/python-wheels/
-*.egg-info/
-.installed.cfg
-*.egg
-MANIFEST
-
-# PyInstaller
-#  Usually these files are written by a python script from a template
-#  before PyInstaller builds the exe, so as to inject date/other infos into it.
-*.manifest
-*.spec
-
-# Installer logs
-pip-log.txt
-pip-delete-this-directory.txt
-
-# Unit test / coverage reports
-htmlcov/
-.tox/
-.nox/
-.coverage
-.coverage.*
-.cache
-nosetests.xml
-coverage.xml
-*.cover
-*.py,cover
-.hypothesis/
-.pytest_cache/
-cover/
-
-# Translations
-*.mo
-*.pot
-
-# Django stuff:
-*.log
-local_settings.py
-db.sqlite3
-db.sqlite3-journal
-
-# Flask stuff:
-instance/
-.webassets-cache
-
-# Scrapy stuff:
-.scrapy
-
-# Sphinx documentation
-docs/_build/
-
-# PyBuilder
-.pybuilder/
-target/
-
-# Jupyter Notebook
-.ipynb_checkpoints
-
-# IPython
-profile_default/
-ipython_config.py
-
-# pyenv
-#   For a library or package, you might want to ignore these files since the code is
-#   intended to run in multiple environments; otherwise, check them in:
-# .python-version
-
-# pipenv
-#   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
-#   However, in case of collaboration, if having platform-specific dependencies or dependencies
-#   having no cross-platform support, pipenv may install dependencies that don't work, or not
-#   install all needed dependencies.
-#Pipfile.lock
-
-# poetry
-#   Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
-#   This is especially recommended for binary packages to ensure reproducibility, and is more
-#   commonly ignored for libraries.
-#   https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
-#poetry.lock
-
-# pdm
-#   Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
-#pdm.lock
-#   pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
-#   in version control.
-#   https://pdm.fming.dev/latest/usage/project/#working-with-version-control
-.pdm.toml
-.pdm-python
-.pdm-build/
-
-# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
-__pypackages__/
-
-# Celery stuff
-celerybeat-schedule
-celerybeat.pid
-
-# SageMath parsed files
-*.sage.py
-
-# Environments
-.env
-.venv
-env/
-venv/
-ENV/
-env.bak/
-venv.bak/
-
-# Spyder project settings
-.spyderproject
-.spyproject
-
-# Rope project settings
-.ropeproject
-
-# mkdocs documentation
-/site
-
-# mypy
-.mypy_cache/
-.dmypy.json
-dmypy.json
-
-# Pyre type checker
-.pyre/
-
-# pytype static type analyzer
-.pytype/
-
-# Cython debug symbols
-cython_debug/
-
-# PyCharm
-#  JetBrains specific template is maintained in a separate JetBrains.gitignore that can
-#  be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
-#  and can be added to the global gitignore or merged into this file.  For a more nuclear
-#  option (not recommended) you can uncomment the following to ignore the entire idea folder.
-#.idea/
-
-data/
-.settings/
-.classpath
-.project
-Cargo.lock
-Cargo.toml
-dependency-reduced-pom.xml
-temp/
-
-**/node_modules/
-webapi/Scripts/

+ 0 - 35
luat/demo/airlink/air8101/main.lua

@@ -1,35 +0,0 @@
-
--- 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.init()
-    netdrv.setup(socket.LWIP_USER0, netdrv.WHALE)
-    airlink.start(0)
-    netdrv.ipv4(socket.LWIP_USER0, "192.168.111.1", "255.255.255.0", "192.168.111.2")
-end)
-
-sys.taskInit(function()
-    -- sys.waitUntil("IP_READY")
-    sys.wait(6000)
-    while 1 do
-        sys.wait(500)
-        local code, headers, body = http.request("GET", "https://httpbin.air32.cn/bytes/2048", nil, nil, {adapter=socket.LWIP_USER0,timeout=3000}).wait()
-        log.info("http", code, body and #body)
-        log.info("lua", rtos.meminfo())
-        log.info("sys", rtos.meminfo("sys"))
-    end
-end)
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 48
luat/demo/airlink/air8101_air780ehm_http/README.md

@@ -1,48 +0,0 @@
-# AirLink-SPI通信
-
-## 协议通信描述
-
-整个协议主要分为2层:
-1. 物理层协议:以整体封包的形式,为上层包提供无错误的传输支持
-2. 应用层协议:以TLV形式,提供命令类型、命令长度、命令数据(若有)的数据封装
-
-### 物理管脚说明
-
-| 功能说明 | 从机(以Air8101为例) | 主机(以Air780EHM为例) | 备注 |
-| --- | --- | --- | --- |
-| GND | GND | GND | 接2根,确保稳定共地 |
-| SPI_CLK | GPIO14 | SPI0_CLK/GPIO11 | 主从时钟,必须连接,杜邦线尽量保持相同长度 |
-| SPI_CS | GPIO15 | SPI0_CS/GPIO8 | 从机片选,必须连接 |
-| SPI_MOSI | GPIO16 | SPI0_MOSI/GPIO9 | 主发从收,必须连接 |
-| SPI_MISO | GPIO17 | SPI0_MISO/GPIO10 | 主收从发,必须连接 |
-| RDY | GPIO48 | GPIO22/WAKEUP5 | 从机就绪,必须连接,杜邦线尽量保持相同长度 |
-| IRQ | GPIO28 | GPIO1 | 从机通知主机有新数据,可选,中间串0R电阻 |
-
-### 通信时序介绍
-
-1. 主机初始化SPI相关参数,CS脚拉高
-2. 从机初始化SPI相关参数,RDY脚拉高,监听CS脚中断信息
-3. 主机拉低CS脚
-4. 从机就绪后,启动SPI从机通信,然后拉低RDY脚
-5. 主机等待RDY脚低电平后,开始传输1600字节的SPI数据
-6. 主机传输完毕后,拉高CS脚,分析SPI数据
-7. 从机监听到CS脚拉高的中断,分析SPI数据,若数据非法,立即重置SPI外设驱动,重新等待下一次传输
-8. 主机分析SPI数据后,若有其他待传输数据,从步骤3重新开始传输逻辑,否则等待传输事件唤醒
-
-## 脚本介绍
-
-* 功能角色:Air8101作为SPI主机,发送网络请求;Air780EHM作为SPI从机,开启dnsproxy、napt,做网关
-
-### 1. SPI从机模式(Air780EHM)
-- 初始化AirLink并注册网卡
-- 启动AirLink从机模式,配置本地IP、网关等
-- 等待网络就绪(IP_READY)
-- 启用NAPT(网络地址端口转换)
-
-### 2. SPI主机模式(如Air8101)
-- 初始化AirLink并注册网卡
-- 配置SPI CS和RDY引脚
-- 启动AirLink主机模式,配置本地IP、网关
-- 等待网络就绪(IP_READY)
-- 循环打印设备信息和AirLink统计数据
-- 定时发起HTTP请求,测试网络连通性

+ 0 - 36
luat/demo/airlink/air8101_air780ehm_http/air780ehm/main.lua

@@ -1,36 +0,0 @@
-PROJECT = "airlink_spi_slave"
-VERSION = "1.0.0"
-
-_G.sys = require("sys")
-_G.sysplus = require("sysplus")
-dnsproxy = require ("dnsproxy")
-
--- 订阅airlink的SDATA事件,打印收到的信息。
-local function airlink_sdata(data)
-    log.info("收到AIRLINK_SDATA!!", data)
-end
-
-sys.subscribe("AIRLINK_SDATA", airlink_sdata)
-sys.subscribe("IP_READY", function(id, ip)
-    log.info("收到IP_READY!!", id, ip)
-end)
-
-sys.taskInit(function()
-    sys.wait(100)
-    airlink.init()
-    netdrv.setup(socket.LWIP_USER0, netdrv.WHALE)
-    sys.wait(100)
-    airlink.start(0)
-    netdrv.ipv4(socket.LWIP_USER0, "192.168.111.1", "255.255.255.0", "192.168.111.2")
-    sys.waitUntil("IP_READY")
-    netdrv.napt(socket.LWIP_GP)
-
-    dnsproxy.setup(socket.LWIP_USER0, socket.LWIP_GP)
-    while 1 do
-        sys.wait(1000)
-        log.info("ticks", mcu.ticks(), hmeta.chip(), hmeta.model(), hmeta.hwver())
-        airlink.statistics()
-    end
-end)
-
-sys.run()

+ 0 - 29
luat/demo/airlink/air8101_air780ehm_http/air8101/main.lua

@@ -1,29 +0,0 @@
-PROJECT = "airlink_spi_master"
-VERSION = "1.0.0"
-
-_G.sys = require("sys")
-_G.sysplus = require("sysplus")
-dnsproxy = require ("dnsproxy")
-
-sys.taskInit(function()
-    sys.wait(100)
-    airlink.init()
-    log.info("创建桥接网络设备")
-    netdrv.setup(socket.LWIP_USER0, netdrv.WHALE)
-    airlink.config(airlink.CONF_SPI_CS, 15)
-    airlink.config(airlink.CONF_SPI_RDY, 48)
-    airlink.start(1)
-    netdrv.ipv4(socket.LWIP_USER0, "192.168.111.2", "255.255.255.0", "192.168.111.1")
-    sys.wait(100)
-    sys.waitUntil("IP_READY", 10000)
-    while 1 do
-        sys.wait(1000)
-        log.info("ticks", mcu.ticks(), hmeta.chip(), hmeta.model(), hmeta.hwver())
-        airlink.statistics()
-        log.info("执行http请求")
-        local code, headers, body = http.request("GET", "https://httpbin.air32.cn/bytes/2048", nil, nil, {adapter=socket.LWIP_USER0,timeout=3000}).wait()
-        log.info("http执行结果", code, code, headers, body)
-    end
-end)
-
-sys.run()

+ 0 - 67
luat/demo/airlink/air8101_air780epm_fota/main.lua

@@ -1,67 +0,0 @@
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "fota2"
-VERSION = "1.0.0"
-
--- 使用合宙iot平台时需要这个参数
-PRODUCT_KEY = "1234" -- 到 iot.openluat.com 创建项目,获取正确的项目id
-
-sys = require "sys"
-libfota2 = require "libfota2"
-sys.taskInit(function()
-    -- sys.wait(500)
-    airlink.init()
-    airlink.start(0)
-    log.info("创建桥接网络设备")
-    netdrv.setup(socket.LWIP_USER0, netdrv.WHALE)
-    netdrv.ipv4(socket.LWIP_USER0, "192.168.111.1", "255.255.255.0", "192.168.111.2")
-end)
-
--- 循环打印版本号, 方便看版本号变化, 非必须
-sys.taskInit(function()
-    while 1 do
-        sys.wait(2000)
-        log.info("fota", "version", VERSION)
-    end
-end)
-
--- 升级结果的回调函数
-local function fota_cb(ret)
-    log.info("fota", ret)
-    if ret == 0 then
-        rtos.reboot()
-    end
-end
-
--- 使用合宙iot平台进行升级, 支持自定义参数, 也可以不配置
-local ota_opts = {
-    -- 合宙IOT平台的默认升级URL, 不填就是这个默认值
-    -- 如果是自建的OTA服务器, 则需要填写正确的URL, 例如 http://192.168.1.5:8000/update
-    -- 如果自建OTA服务器,且url包含全部参数,不需要额外添加参数, 请在url前面添加 ### 
-    -- url="http://iot.openluat.com/api/site/firmware_upgrade",
-    -- 请求的版本号, 合宙IOT有一套版本号体系,不传就是合宙规则, 自建服务器的话当然是自行约定版本号了
-    -- version=_G.VERSION,
-    -- 其他更多参数, 请查阅libfota2的文档 https://wiki.luatos.com/api/libs/libfota2.html
-    url = "https://www.air32.cn/fota/air8101/adcdemo_1003.1.0_LuatOS-SoC_Air8101.bin?"
-}
-sys.taskInit(function()
-    -- 这个判断是提醒要设置PRODUCT_KEY的,实际生产请删除
-    if "123" == _G.PRODUCT_KEY and not ota_opts.url then
-        while 1 do
-            sys.wait(1000)
-            log.info("fota", "请修改正确的PRODUCT_KEY")
-        end
-    end
-    -- 等待网络就行后开始检查升级
-    sys.waitUntil("net_ready",10000)
-    sys.wait(500)
-    libfota2.request(fota_cb, ota_opts)
-end)
-
--- 演示定时自动升级, 每隔4小时自动检查一次
-sys.timerLoopStart(libfota2.request, 4*3600000, fota_cb, ota_opts)
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 44
luat/demo/airlink/air8101_air780epm_sdata/main.lua

@@ -1,44 +0,0 @@
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "netdrv"
-VERSION = "1.0.4"
-
-
--- sys库是标配
-_G.sys = require("sys")
-
-wdt.init(3000)
-sys.timerLoopStart(function()
-    wdt.feed()
-    log.info("喂狗")
-end, 1000)
-
-sys.taskInit(function()
-    sys.wait(100)
-    -- 初始化airlink
-    airlink.init()
-
-    if rtos.bsp() == "Air8101" then
-        airlink.start(0)
-    else
-        airlink.start(1)
-    end
-    sys.wait(100)
-
-    while 1 do
-        -- 发送给对端设备
-        local data = rtos.bsp() .. " " .. os.date()
-        log.info("发送数据给对端设备", data, "当前airlink状态", airlink.ready())
-        airlink.sdata(data)
-        sys.wait(1000)
-    end
-end)
-
-sys.subscribe("AIRLINK_SDATA", function(data)
-    log.info("收到AIRLINK_SDATA!!", data)
-end)
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 166
luat/demo/airlink/for_ccc/main.lua

@@ -1,166 +0,0 @@
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "air8000_factory"
-VERSION = "001.000.012"
-
-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.setLevel(log.LOG_ERROR)
-
-local uartid = 1 -- 根据实际设备选取不同的uartid
-
---初始化
-uart.setup(
-    uartid,--串口id
-    115200,--波特率
-    8,--数据位
-    1--停止位
-)
-
--- gpio.setup(140, 1, gpio.PULLUP)
-
-local topic_uart_receive = "air8000_uart1_receive"
-
--- --循环发数据
--- sys.timerLoopStart(uart.write,1000, uartid, "test")
-uart.on(uartid, "sent", function(id)
-    log.info("uart", "sent", id)
-end)
-
--- 收取数据会触发回调, 这里的"receive" 是固定值
-uart.on(uartid, "receive", function(id, len)
-    log.info("uart", "receive", id,len)
-    data = uart.read(id, len)
-    if data and len==#data then
-        log.info("uart", "receive", data)
-        sys.publish(topic_uart_receive,data)
-    elseif #data > 2 then
-        log.info("uart", "receive", data:toHex())
-        uart.write(uartid, "ERROR\r\n")
-    end
-end)
-
-local function ble_callback(ble_device, ble_event, ble_param)
-    if ble_event == ble.EVENT_SCAN_INIT then
-        log.info("ble", "scan init")
-    elseif ble_event == ble.EVENT_SCAN_REPORT then
-        log.info("ble", "scan report", ble_param.rssi, ble_param.adv_addr:toHex(), ble_param.data:toHex())
-    elseif ble_event == ble.EVENT_SCAN_STOP then
-        log.info("ble", "scan stop")
-    end
-end
-
-sys.taskInit(function()
-    while 1 do
-        local ret, data = sys.waitUntil(topic_uart_receive)
-        if ret then
-            if data:sub(1,10) == "AT+WIFIOFF" then--关闭wifi------------
-                local result = airlink.power(false)
-                log.info("关闭wifi")
-                if not result then
-                    uart.write(uartid, "OK\r\n")
-                else
-                    uart.write(uartid, "ERROR\r\n")
-                end
-            elseif data:sub(1,9) == "AT+WIFION" then--开启wifi
-                airlink.power(true)
-                while airlink.ready() ~= true do
-                    sys.wait(100)
-                end
-                local result = wlan.init()
-                log.info("开启wifi",result)
-                if result then
-                    uart.write(uartid, "OK\r\n")
-                else
-                    uart.write(uartid, "ERROR\r\n")--------------
-                end
-            elseif data:sub(1,11) == "AT+WIFISCAN" then--wifi扫描---------------
-                while airlink.ready() ~= true do
-                    sys.wait(100)
-                end
-                wlan.init()
-                wlan.scan()
-                log.info("扫描wifi")
-                sys.waitUntil("WLAN_SCAN_DONE", 5000)
-                local results = wlan.scanResult()
-                if results then
-                    uart.write(uartid, "OK\r\n")
-                else
-                    uart.write(uartid, "ERROR\r\n")
-                end
-            elseif data:sub(1,8) == "AT+WIFI=" then -- 连接指定ssid/passwd--------
-                wlan.init()
-
-                local SSID = data:sub(9,data:find(",")-1)
-                local PWD = data:sub(data:find(",")+1,data:find('\r')-1)
-
-                log.info("SSID", SSID,"PWD", PWD)
-                local result = wlan.connect(SSID, PWD)
-                log.info("连接指定wifi",result)
-
-                local result, ip, adapter = sys.waitUntil("IP_READY",5000)
-                log.info("ready?", result, ip, adapter)
-
-                if not result then
-                    uart.write(uartid, "ERROR\r\n")
-                else
-                    -- netdrv.ipv4(socket.LWIP_STA)
-                    log.info("IP地址", netdrv.ipv4(socket.LWIP_STA))
-
-                    uart.write(uartid, "OK\r\n")
-                end
-
-            elseif data:sub(1,10) == "AT+BLEINIT" then--初始化蓝牙
-                bluetooth_device = bluetooth.init()
-                ble_device = bluetooth_device:ble(ble_callback)
-                log.info("初始化蓝牙")
-                if ble_device then
-                    uart.write(uartid, "OK\r\n")
-                else
-                    uart.write(uartid, "ERROR\r\n")
-                end
-            elseif data:sub(1,10) == "AT+BLESCAN" then--蓝牙扫描
-
-                -- 扫描模式
-                sys.wait(1000)
-                local result = ble_device:scan_create() -- 使用默认参数, addr_mode=0, scan_interval=100, scan_window=100
-                -- ble_device:scan_create(0, 10, 10) -- 使用自定义参数
-                sys.wait(100)
-                log.info("开始扫描")
-                ble_device:scan_start()
-
-                sys.wait(5000)
-                log.info("停止扫描")
-                ble_device:scan_stop()
-                if result then
-                    uart.write(uartid, "OK\r\n")
-                else
-                    uart.write(uartid, "ERROR\r\n")
-                end
-
-            elseif data:sub(1,11) == "AT+RESETALL" then--整体复位
-                uart.write(uartid, "OK\r\n")
-                sys.wait(500)
-                rtos.reboot()
-
-            elseif #data > 2 then
-                log.info("uart", data:toHex())
-                uart.write(uartid, "ERROR\r\n")
-            end
-        end
-    end
-end)
-
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 78
luat/demo/airlink/uart_http/main.lua

@@ -1,78 +0,0 @@
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "airlink_uart_http"
-VERSION = "1.0.1"
-
-dnsproxy = require("dnsproxy")
-
------------------------------------
--- 配置区域
------------------------------------
-is_gw = false -- 是否是网关模式, 要插卡, 要能联网
-uart_id = 1   -- 按实际接到UART的ID来设置, 1或2
-airlink.config(airlink.CONF_UART_ID, uart_id) -- 设置airlink使用的UART ID
-uart.setup(uart_id, 115200) -- 初始化UART1, 波特率115200, 8N1
--- 注意, uart波特率的设置值,取决于两个设备的都支持的最高波特率, 例如2M也是可以的, 但要确保两个设备都支持2M波特率
--------------------------------------
-
-
-sys.taskInit(function()
-    sys.wait(500)
-    log.info("airlink", "Starting airlink with UART task")
-    -- 初始化airlink
-    airlink.init()
-    -- 注册网卡
-    netdrv.setup(socket.LWIP_USER0, netdrv.WHALE)
-    -- 启动airlink uart任务
-    airlink.start(2)
-
-    -- 网关模式下, ip设置为.1, 对端设置为.2
-    if is_gw then
-        netdrv.ipv4(socket.LWIP_USER0, "192.168.111.1", "255.255.255.0", "192.168.111.2")
-    else
-        netdrv.ipv4(socket.LWIP_USER0, "192.168.111.2", "255.255.255.0", "192.168.111.1")
-    end
-    -- netdrv.debug(0, true)
-
-end)
-
-sys.taskInit(function()
-    sys.wait(1000)
-    while 1 do
-        -- 发送给对端设备
-        local data = rtos.bsp() .. " " .. os.date() .. " " .. (mobile and mobile.imei() or "")
-        log.info("client 发送数据给sever设备", data, "当前airlink状态", airlink.ready())
-        airlink.sdata(data)
-        -- airlink.test(1000) -- 要测试高速连续发送的情况
-        sys.wait(1000)
-    end
-end)
-
-sys.taskInit(function()
-    -- sys.waitUntil("IP_READY")
-    sys.wait(3000)
-    if is_gw then
-        log.info("airlink", "Gateway mode")
-        -- while netdrv.ready(socket.LWIP_USER0) == false do
-        while netdrv.ready(socket.LWIP_GP) == false do
-            sys.wait(100)
-        end
-        netdrv.napt(socket.LWIP_GP)
-        return
-    else
-        log.info("airlink", "Client mode")
-    end
-    while 1 do
-        sys.wait(500)
-        local code, headers, body = http.request("GET", "https://httpbin.air32.cn/bytes/2048", nil, nil, {adapter=socket.LWIP_USER0,timeout=3000}).wait()
-        log.info("http", code, body and #body)
-        -- log.info("lua", rtos.meminfo())
-        -- log.info("sys", rtos.meminfo("sys"))
-    end
-end)
-
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 64
luat/demo/airlink/uart_sdata/main.lua

@@ -1,64 +0,0 @@
-
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "airlink_uart"
-VERSION = "1.0.1"
-
-dnsproxy = require("dnsproxy")
-
-is_gw = true
-
-sys.taskInit(function()
-    sys.wait(500)
-    log.info("airlink", "Starting airlink with UART task")
-    -- 首先, 初始化uart1, 115200波特率 8N1
-    uart.setup(1, 115200)
-    -- 初始化airlink
-    airlink.init()
-    netdrv.setup(socket.LWIP_USER0, netdrv.WHALE) -- 初始化netdrv
-    -- 启动airlink uart任务
-    airlink.start(2)
-    if is_gw then
-        netdrv.ipv4(socket.LWIP_USER0, "192.168.111.1", "255.255.255.0", "192.168.111.2")
-    else
-        netdrv.ipv4(socket.LWIP_USER0, "192.168.111.2", "255.255.255.0", "192.168.111.1")
-    end
-    sys.wait(100)
-    --等待IP_READY事件
-    sys.waitUntil("IP_READY", 1000)
-    while 1 do
-        -- 发送给对端设备
-        local data = rtos.bsp() .. " " .. os.date() .. " " .. (mobile and mobile.imei() or "")
-        log.info("sever 发送数据给client设备", data, "当前airlink状态", airlink.ready())
-        airlink.sdata(data)
-        -- airlink.test(1000) -- 要测试高速连续发送的情况
-        sys.wait(1000)
-    end
-end)
-
-sys.taskInit(function()
-    -- sys.waitUntil("IP_READY")
-    sys.wait(3000)
-    if is_gw then
-        log.info("airlink", "Gateway mode")
-        while netdrv.ready(socket.LWIP_GP) == false do
-            sys.wait(100)
-            log.info("airlink", "Waiting for netdrv_READY")
-        end
-        log.info("airlink", "netdrv_READY")
-        netdrv.napt(socket.LWIP_GP)
-        dnsproxy.setup(socket.LWIP_USER0,socket.LWIP_GP)
-        return
-    else
-        log.info("airlink", "Client mode")
-    end
-end)
-
---订阅IP_READY事件,打印收到的信息
-sys.subscribe("IP_READY", function(id,ip)
-    log.info("收到IP_READY!!", id,ip)
-end)
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 0 - 339
luat/demo/airtalk/airtalk_dev_ctrl.lua

@@ -1,339 +0,0 @@
-local g_state = SP_T_NO_READY   --device状态
-local g_mqttc = nil             --mqtt客户端
-local g_local_id                  --本机ID
-local g_remote_id                 --对端ID
-local g_s_type                  --对讲的模式,字符串形式的
-local g_s_topic                 --对讲用的topic
-local g_s_mode                  --对讲的模式
-local g_dev_list                --对讲列表
-
-
-
-
-local function auth()
-    if g_state == SP_T_NO_READY then
-        g_mqttc:publish("ctrl/uplink/" .. g_local_id .."/0001", json.encode({["key"] = PRODUCT_KEY, ["device_type"] = 1}))
-    end
-end
-
-local function heart()
-    if g_state == SP_T_CONNECTED then
-        g_mqttc:publish("ctrl/uplink/" .. g_local_id .."/0005", json.encode({["from"] = g_local_id, ["to"] = g_remote_id}))
-    end
-end
-
-local function wait_speech_to()
-    log.info("主动请求对讲超时无应答")
-    speech_off(true, false)
-end
-
---对讲开始,topic,ssrc,采样率(8K或者16K)这3个参数都有了之后就能进行对讲了,可以通过其他协议传入
-local function speech_on(ssrc, sample)
-    g_state = SP_T_CONNECTED
-    g_mqttc:subscribe(g_s_topic)
-    airtalk.set_topic(g_s_topic)
-    airtalk.set_ssrc(ssrc)
-    log.info("对讲模式", g_s_mode)
-    airtalk.speech(true, g_s_mode, sample)
-    sys.sendMsg(AIRTALK_TASK_NAME, MSG_SPEECH_ON_IND, true) 
-    sys.timerLoopStart(heart, 150000)
-    sys.timerStopAll(wait_speech_to)
-    log.info("对讲接通,可以说话了")
-end
---对讲结束
-local function speech_off(need_upload, need_ind)
-    if g_state ==  SP_T_CONNECTED then
-        g_mqttc:unsubscribe(g_s_topic)
-        airtalk.speech(false)
-        g_s_topic = nil
-    end
-    g_state = SP_T_IDLE
-    sys.timerStopAll(auth)
-    sys.timerStopAll(heart)
-    sys.timerStopAll(wait_speech_to)
-    log.info("对讲断开了")
-    if need_upload then
-        g_mqttc:publish("ctrl/uplink/" .. g_local_id .."/0004", json.encode({["to"] = g_remote_id}))
-    end
-    if need_ind then
-        sys.sendMsg(AIRTALK_TASK_NAME, MSG_SPEECH_OFF_IND, true)
-    end
-end
-
-
-local function analyze_v1(cmd, topic, obj)
-    if cmd == "8005" or cmd == "8004" then       -- 对讲心跳保持和结束对讲的应答不做处理
-        return
-    end
-    if cmd == "8003" then       -- 请求对讲应答
-        if g_state ~= SP_T_CONNECTING then  --没有发起对讲请求
-            log.error("state", g_state, "need", SP_T_CONNECTING)
-            return
-        else
-            if obj and obj["result"] == SUCC and g_s_topic == obj["topic"]then  --完全正确,开始对讲
-                speech_on(obj["ssrc"], obj["audio_code"] == "amr-nb" and 8000 or 16000)
-                return
-            else
-                log.info(obj["result"], obj["topic"], g_s_topic)
-                sys.sendMsg(AIRTALK_TASK_NAME, MSG_SPEECH_ON_IND, false)   --有异常,无法对讲
-            end
-            
-        end
-        g_s_topic = nil
-        g_state = SP_T_IDLE
-        return
-    end
-    local new_obj = nil
-    if cmd == "0102" then       -- 对端打过来
-        if obj and obj["topic"] and obj["ssrc"] and obj["audio_code"] and obj["type"] then
-            if g_state ~= SP_T_IDLE then    -- 空闲状态下才可以进入对讲状态
-                log.error("state", g_state, "need", SP_T_IDLE)
-                new_obj = {["result"] = "failed", ["topic"] = obj["topic"], ["info"] = "device is busy"}
-            else
-                if obj["type"] == "one-on-one" then -- 1对1对讲
-                    local from = string.match(obj["topic"], "audio/.*/(.*)/.*")
-                    if from then
-                        log.info("remote id ", from)
-                        g_s_topic = obj["topic"]
-                        g_remote_id = from
-                        new_obj = {["result"] = SUCC, ["topic"] = obj["topic"], ["info"] = ""}
-                        g_s_type = "one-on-one"
-                        g_s_mode = airtalk.MODE_PERSON
-                        speech_on(obj["ssrc"], obj["audio_code"] == "amr-nb" and 8000 or 16000)
-                    else
-                        new_obj = {["result"] = "failed", ["topic"] = obj["topic"], ["info"] = "topic error"}
-                    end
-                elseif obj["type"] == "broadcast" then  -- 1对多对讲
-                    g_s_topic = obj["topic"]
-                    new_obj = {["result"] = SUCC, ["topic"] = obj["topic"], ["info"] = ""}
-                    g_s_mode = airtalk.MODE_GROUP_LISTENER
-                    g_s_type = "broadcast"
-                    speech_on(obj["ssrc"], obj["audio_code"] == "amr-nb" and 8000 or 16000)
-                end
-            end
-        else
-            new_obj = {["result"] = "failed", ["topic"] = obj["topic"], ["info"] = "json info error"}
-        end
-        g_mqttc:publish("ctrl/uplink/" .. g_local_id .."/8102", json.encode(new_obj))
-        return
-    end
-
-    if cmd == "0103" then   --对端挂断
-        if g_state == SP_T_IDLE then
-            new_obj = {["result"] = "failed", ["info"] = "no speech"}
-        else
-            if obj and obj["type"] == g_s_type then
-                new_obj = {["result"] = SUCC, ["info"] = ""}
-                speech_off(false, true)
-            else
-                new_obj = {["result"] = "failed", ["info"] = "type mismatch"}
-            end
-        end
-        g_mqttc:publish("ctrl/uplink/" .. g_local_id .."/8103", json.encode(new_obj))
-        return
-    end
-
-    if cmd == "0101" then                        --更新设备列表
-        if obj then
-            g_dev_list = obj["dev_list"]
-            -- for i=1,#g_dev_list do
-            --     log.info(g_dev_list[i]["id"],g_dev_list[i]["name"])
-            -- end
-            new_obj = {["result"] = SUCC, ["info"] = ""}
-        else
-            new_obj = {["result"] = "failed", ["info"] = "json info error"}
-        end
-        g_mqttc:publish("ctrl/uplink/" .. g_local_id .."/8101", json.encode(new_obj))
-        return
-    end
-    if cmd == "8001" then
-        if obj and obj["result"] == SUCC then
-            g_mqttc:publish("ctrl/uplink/" .. g_local_id .."/0002","")  -- 更新列表
-        else
-            sys.sendMsg(AIRTALK_TASK_NAME, MSG_AUTH_IND, false, "鉴权失败" .. obj["info"]) 
-        end
-        return
-    end
-    if cmd == "8002" then
-        if obj and obj["result"] == SUCC then   --收到设备列表更新应答,才能认为相关网络服务准备好了
-            g_dev_list = obj["dev_list"]
-            -- for i=1,#g_dev_list do
-            --     log.info(g_dev_list[i]["id"],g_dev_list[i]["name"])
-            -- end
-            g_state = SP_T_IDLE
-            sys.sendMsg(AIRTALK_TASK_NAME, MSG_AUTH_IND, true)  --完整登录流程结束
-        else
-            sys.sendMsg(AIRTALK_TASK_NAME, MSG_AUTH_IND, false, "更新设备列表失败") 
-        end
-        return
-    end
-end
-
-local function mqtt_cb(mqttc, event, topic, payload)
-    log.info(event, topic)
-    local msg,data,obj
-    if event == "conack" then
-        sys.sendMsg(AIRTALK_TASK_NAME, MSG_CONNECT_ON_IND) --mqtt连上了,开始自定义的鉴权流程
-        g_mqttc:subscribe("ctrl/downlink/" .. g_local_id .. "/#")--单主题订阅
-    elseif event == "suback" then
-        if g_state == SP_T_NO_READY then
-            if topic then
-                auth()
-            else
-                sys.sendMsg(AIRTALK_TASK_NAME, MSG_AUTH_IND, false, "订阅失败" .. "ctrl/downlink/" .. g_local_id .. "/#") 
-            end
-        elseif g_state == SP_T_CONNECTED then
-            if not topic then
-                speech_off(false, true)
-            end
-        end
-    elseif event == "recv" then
-        local result = string.match(topic, g_dl_topic)
-        if result then 
-            local obj,res,err = json.decode(payload)
-            analyze_v1(result, topic, obj)
-        end
-        result = nil
-        data = nil
-        obj = nil
-        
-    elseif event == "sent" then
-        -- log.info("mqtt", "sent", "pkgid", data)
-    elseif event == "disconnect" then
-        speech_off(false, true)
-        g_state = SP_T_NO_READY
-    elseif event == "error" then
-
-    end
-end
-
-local function task_cb(msg)
-    if msg[1] == MSG_SPEECH_CONNECT_TO then
-        speech_off(true,false)
-    else
-        log.info("未处理消息", msg[1], msg[2], msg[3], msg[4])
-    end
-end
-
-local function airtalk_event_cb(event, param)
-    log.info("airtalk event", event, param)
-    if event == airtalk.EVENT_ERROR then
-        if param == airtalk.ERROR_NO_DATA then
-            log.error("长时间没有收到音频数据")
-            speech_off(true, true)
-        end
-    end
-end
-
-local function airtalk_mqtt_task()
-    local msg,data,obj,online,num,res
-    --g_local_id也可以自己设置
-    g_local_id = mobile.imei()
-    g_dl_topic = "ctrl/downlink/" .. g_local_id .. "/(%w%w%w%w)"
-    sys.timerLoopStart(next_auth, 900000)
-
-    g_mqttc = mqtt.create(nil, "mqtt.airtalk.luatos.com", 1883, false, {rxSize = 32768})
-    airtalk.config(airtalk.PROTOCOL_MQTT, g_mqttc, 200) -- 缓冲至少200ms播放
-    airtalk.on(airtalk_event_cb)
-    airtalk.start()
-
-    g_mqttc:auth(g_local_id,g_local_id,mobile.muid()) -- g_local_id必填,其余选填
-    g_mqttc:keepalive(240) -- 默认值240s
-    g_mqttc:autoreconn(true, 15000) -- 自动重连机制
-    g_mqttc:debug(false)
-    g_mqttc:on(mqtt_cb)
-    log.info("设备信息", g_local_id, mobile.muid())
-    -- mqttc自动处理重连, 除非自行关闭
-    g_mqttc:connect()
-    online = false
-    while true do
-        msg = sys.waitMsg(AIRTALK_TASK_NAME, MSG_CONNECT_ON_IND)   --等服务器连上
-        log.info("connected")
-        while not online do
-            msg = sys.waitMsg(AIRTALK_TASK_NAME, MSG_AUTH_IND, 30000)   --登录流程不应该超过30秒
-            if type(msg) == 'table' then
-                online = msg[2]
-                if online then
-                    sys.timerLoopStart(auth, 3600000) --鉴权通过则60分钟后尝试重新鉴权
-                else
-                    log.info(msg[3])
-                    sys.timerLoopStart(auth, 300000)       --5分钟后重新鉴权
-                end
-            else
-                auth()  --30秒鉴权无效后重新鉴权
-            end
-        end
-        log.info("对讲管理平台已连接")
-        while online do
-            msg = sys.waitMsg(AIRTALK_TASK_NAME)
-            if type(msg) == 'table' and type(msg[1]) == "number" then
-                if msg[1] == MSG_PERSON_SPEECH_TEST_START then
-                    if g_state ~= SP_T_IDLE then
-                        log.info("正在对讲无法开始")
-                    else
-                        log.info("测试一下主动1对1对讲功能,找一个有效的IMEI")
-
-                        for i=1,#g_dev_list do
-                            res = string.match(g_dev_list[i]["id"], "(%w%w%w%w%w%w%w%w%w%w%w%w%w%w%w)")
-                            if res and res ~= g_local_id then
-                                break
-                            end
-                        end
-                        if res then
-                            log.info("向", res, "主动发起对讲")
-                            g_state = SP_T_CONNECTING
-                            g_remote_id = res
-                            g_s_mode = airtalk.MODE_PERSON
-                            g_s_type = "one-on-one"
-                            g_s_topic = "audio/" .. g_local_id .. "/" .. g_remote_id .. "/" .. (string.sub(tostring(mcu.ticks()), -4, -1))
-                            g_mqttc:publish("ctrl/uplink/" .. g_local_id .."/0003", json.encode({["topic"] = g_s_topic, ["type"] = g_s_type}))
-                            sys.timerStart(wait_speech_to, 15000)
-                        else
-                            log.info("找不到有效的设备ID")
-                        end
-                    end
-                elseif msg[1] == MSG_GROUP_SPEECH_TEST_START then
-                    if g_state ~= SP_T_IDLE then
-                        log.info("正在对讲无法开始")
-                    else
-                        log.info("测试一下1对多对讲功能")
-                        g_remote_id = "all"
-                        g_state = SP_T_CONNECTING
-                        g_s_mode = airtalk.MODE_GROUP_SPEAKER
-                        g_s_type = "broadcast"
-                        g_s_topic = "audio/" .. g_local_id .. "/all/" .. (string.sub(tostring(mcu.ticks()), -4, -1))
-                        g_mqttc:publish("ctrl/uplink/" .. g_local_id .."/0003", json.encode({["topic"] = g_s_topic, ["type"] = g_s_type}))
-                        sys.timerStart(wait_speech_to, 15000)
-                    end
-                elseif msg[1] == MSG_SPEECH_STOP_TEST_END then
-                    if g_state ~= SP_T_CONNECTING and g_state ~= SP_T_CONNECTED then
-                        log.info("没有对讲", g_state)
-                    else
-                        log.info("主动断开对讲")
-                        speech_off(true, false)
-                    end
-                elseif msg[1] == MSG_SPEECH_ON_IND then
-                    if msg[2] then
-                        log.info("对讲接通")
-                    else
-                        log.info("对讲断开")
-                    end
-                elseif msg[1] == MSG_CONNECT_OFF_IND then
-                    log.info("connect", msg[2])
-                    online = msg[2]
-                end
-                obj = nil
-            else
-                log.info(type(msg), type(msg[1]))
-            end
-            msg = nil
-        end
-        online = false
-    end
-end
-
-function airtalk_mqtt_init()
-    sys.taskInitEx(airtalk_mqtt_task, AIRTALK_TASK_NAME, task_cb)
-end
-
-

+ 0 - 79
luat/demo/airtalk/audio_config.lua

@@ -1,79 +0,0 @@
-function audio_init()
-    pm.ioVol(pm.IOVOL_ALL_GPIO, 3300)
-    -- local multimedia_id = 0
-
-    -- local i2s_id = 0
-    -- local i2s_mode = 0
-    -- local i2s_sample_rate = 16000
-    -- local i2s_bits_per_sample = 16
-    -- local i2s_channel_format = i2s.MONO_R
-    -- local i2s_communication_format = i2s.MODE_LSB
-    -- local i2s_channel_bits = 16
-    -- --air8000 core开发版+音频小板配置
-    -- local voice_vol = 60 --音频小板喇叭太容易失真了,不能太大
-    -- local i2c_id = 0
-    -- local pa_pin = 162           -- 喇叭pa功放脚
-    -- local pa_on_level = 1
-    -- local pa_delay = 200
-    -- local dac_power_pin = 164
-    -- local dac_power_on_level = 1
-    -- local dac_power_off_delay = 600
-    -- gpio.setup(24, 1)   --air8000的I2C0需要拉高gpio24才能用
-    -- gpio.setup(26, 0)
-    -- i2c.setup(0, i2c.FAST)
-    -- gpio.setup(24, 1, gpio.PULLUP)          -- i2c工作的电压域
-    -- sys.wait(100)
-    -- gpio.setup(dac_power_pin, 1, gpio.PULLUP)   -- 打开音频编解码供电
-    -- gpio.setup(pa_pin, 1, gpio.PULLUP)      -- 打开音频放大器
-    -- audio.on(0, audio_callback)
-
-    -- i2s.setup(i2s_id, i2s_mode, i2s_sample_rate, i2s_bits_per_sample, i2s_channel_format, i2s_communication_format,i2s_channel_bits)
-
-    -- audio.config(multimedia_id, pa_pin, pa_on_level, 0, pa_delay, dac_power_pin, dac_power_on_level, dac_power_off_delay)
-    -- audio.setBus(multimedia_id, audio.BUS_I2S,{chip = "es8311",i2cid = i2c_id , i2sid = i2s_id})	--通道0的硬件输出通道设置为I2S
-
-    -- audio.vol(multimedia_id, voice_vol)
-    -- audio.micVol(multimedia_id, 75)
-     local multimedia_id = 0
- local i2c_id = 0 -- i2c_id 0
-
-    local pa_pin = gpio.AUDIOPA_EN -- 喇叭pa功放脚
-    local power_pin = 20 -- es8311电源脚
-
-    local i2s_id = 0 -- i2s_id 0
-    local i2s_mode = 0 -- i2s模式 0 主机 1 从机
-    local i2s_sample_rate = 16000 -- 采样率
-    local i2s_bits_per_sample = 16 -- 数据位数
-    local i2s_channel_format = i2s.MONO_R -- 声道, 0 左声道, 1 右声道, 2 立体声
-    local i2s_communication_format = i2s.MODE_LSB -- 格式, 可选MODE_I2S, MODE_LSB, MODE_MSB
-    local i2s_channel_bits = 16 -- 声道的BCLK数量
-
-    local multimedia_id = 0 -- 音频通道 0
-    local pa_on_level = 1 -- PA打开电平 1 高电平 0 低电平
-    local power_delay = 3 -- 在DAC启动前插入的冗余时间,单位100ms
-    local pa_delay = 100 -- 在DAC启动后,延迟多长时间打开PA,单位1ms
-    local power_on_level = 1 -- 电源控制IO的电平,默认拉高
-    local power_time_delay = 100 -- 音频播放完毕时,PA与DAC关闭的时间间隔,单位1ms
-
-    local voice_vol = 70 -- 喇叭音量
-    local mic_vol = 80 -- 麦克风音量
-    gpio.setup(power_pin, 1, gpio.PULLUP)
-    gpio.setup(pa_pin, 1, gpio.PULLUP)
-
-    sys.wait(200)
-
-    i2c.setup(i2c_id, i2c.FAST) -- 设置i2c
-    i2s.setup(i2s_id, i2s_mode, i2s_sample_rate, i2s_bits_per_sample, i2s_channel_format, i2s_communication_format,
-        i2s_channel_bits) -- 设置i2s
-
-    audio.config(multimedia_id, pa_pin, pa_on_level, power_delay, pa_delay, power_pin, power_on_level, power_time_delay)
-    audio.setBus(multimedia_id, audio.BUS_I2S, {
-        chip = "es8311",
-        i2cid = i2c_id,
-        i2sid = i2s_id,
-    }) -- 通道0的硬件输出通道设置为I2S
-
-    audio.vol(multimedia_id, voice_vol)
-    audio.micVol(multimedia_id, mic_vol)
-
-end

+ 0 - 27
luat/demo/airtalk/demo_define.lua

@@ -1,27 +0,0 @@
-
-AIRTALK_TASK_NAME = "airtalk_task"
-USER_TASK_NAME = "user"
-
-MSG_CONNECT_ON_IND = 0
-MSG_CONNECT_OFF_IND = 1
-MSG_AUTH_IND = 2
-MSG_SPEECH_ON_IND = 3
-MSG_SPEECH_OFF_IND = 4
-MSG_SPEECH_CONNECT_TO = 5
-
-MSG_PERSON_SPEECH_TEST_START = 20
-MSG_GROUP_SPEECH_TEST_START = 21
-MSG_SPEECH_STOP_TEST_END = 22
-
-
-MSG_READY = 10
-MSG_NOT_READY = 11
-MSG_KEY_PRESS = 12
-
-SP_T_NO_READY = 0           -- 离线状态无法对讲
-SP_T_IDLE = 1               -- 对讲空闲状态
-SP_T_CONNECTING = 2         -- 主动发起对讲
-SP_T_CONNECTED = 3          -- 对讲中
-
-
-SUCC = "success"

+ 0 - 68
luat/demo/airtalk/main.lua

@@ -1,68 +0,0 @@
---演示airtalk基本功能
---按一次boot,开始1对1对讲,再按一次boot,结束对讲
---按一次powerkey,开始1对多对讲,再按一次powerkey或者boot,结束对讲
-PROJECT = "airtalk_demo"
-VERSION = "1.0.1"
-PRODUCT_KEY = "s1uUnY6KA06ifIjcutm5oNbG3MZf5aUv" -- 到 iot.openluat.com 创建项目,获取正确的项目id
-_G.sys=require"sys"
-log.style(1)
-require "demo_define"
-require "airtalk_dev_ctrl"
-require "audio_config"
-
---errDump.config(true, 600, "airtalk_test")
-mcu.hardfault(0)
-local function boot_key_cb()
-    sys.sendMsg(USER_TASK_NAME, MSG_KEY_PRESS, false)
-end
-
-local function power_key_cb()
-    sys.sendMsg(USER_TASK_NAME, MSG_KEY_PRESS, true)
-end
-
---按下boot开始上传,再按下停止,加入了软件去抖,不需要长按了
-gpio.setup(0, boot_key_cb, gpio.PULLDOWN, gpio.RISING)
-gpio.debounce(0, 200, 1)
-gpio.setup(gpio.PWR_KEY, power_key_cb, gpio.PULLUP, gpio.FALLING)
-gpio.debounce(gpio.PWR_KEY, 200, 1)
-
-local test_ready = false
-local function task_cb(msg)
-    log.info("未处理消息", msg[1], msg[2], msg[3], msg[4])
-    if msg[1] == MSG_SPEECH_IND then
-
-    elseif msg[1] == MSG_NOT_READY then
-        test_ready = false
-        msg = sys.waitMsg(USER_TASK_NAME, MSG_KEY_PRESS)
-    end
-end
-
-local function user_task()
-    audio_init()
-    airtalk_mqtt_init()
-    local msg
-    while true do
-        msg = sys.waitMsg(USER_TASK_NAME, MSG_KEY_PRESS)
-        if msg[2] then  -- true powerkey false boot key
-            sys.sendMsg(AIRTALK_TASK_NAME, MSG_GROUP_SPEECH_TEST_START)   --测试阶段自动给一个device打
-        else
-            sys.sendMsg(AIRTALK_TASK_NAME, MSG_PERSON_SPEECH_TEST_START)   --测试阶段自动给一个device打
-        end 
-        msg = sys.waitMsg(USER_TASK_NAME, MSG_KEY_PRESS)
-        sys.sendMsg(AIRTALK_TASK_NAME, MSG_SPEECH_STOP_TEST_END)        --再按一次就自动挂断
-    end
-end
-
-sys.taskInitEx(user_task, USER_TASK_NAME, task_cb)
-
---定期检查ram使用情况,及时发现内存泄露
-sys.taskInit(function()
-    while true do
-        sys.wait(60000)
-        log.info("time", os.time())
-        log.info("lua", rtos.meminfo("lua"))
-        log.info("sys", rtos.meminfo("sys"))
-        log.info("psram", rtos.meminfo("psram"))
-    end
-end)
-sys.run()

BIN
luat/demo/airui/0804_demo/A1.jpg


BIN
luat/demo/airui/0804_demo/A2.jpg


BIN
luat/demo/airui/0804_demo/A3.jpg


BIN
luat/demo/airui/0804_demo/A4.jpg


BIN
luat/demo/airui/0804_demo/A5.jpg


BIN
luat/demo/airui/0804_demo/A6.jpg


BIN
luat/demo/airui/0804_demo/A7.jpg


BIN
luat/demo/airui/0804_demo/A8.jpg


BIN
luat/demo/airui/0804_demo/A9.jpg


BIN
luat/demo/airui/0804_demo/B1.jpg


BIN
luat/demo/airui/0804_demo/B2.jpg


BIN
luat/demo/airui/0804_demo/B3.jpg


BIN
luat/demo/airui/0804_demo/B4.jpg


BIN
luat/demo/airui/0804_demo/B5.jpg


BIN
luat/demo/airui/0804_demo/B6.jpg


BIN
luat/demo/airui/0804_demo/B7.jpg


BIN
luat/demo/airui/0804_demo/B8.jpg


BIN
luat/demo/airui/0804_demo/B9.jpg


BIN
luat/demo/airui/0804_demo/C1.jpg


BIN
luat/demo/airui/0804_demo/C2.jpg


BIN
luat/demo/airui/0804_demo/C3.jpg


BIN
luat/demo/airui/0804_demo/C4.jpg


BIN
luat/demo/airui/0804_demo/C5.jpg


BIN
luat/demo/airui/0804_demo/C6.jpg


BIN
luat/demo/airui/0804_demo/C7.jpg


BIN
luat/demo/airui/0804_demo/C8.jpg


BIN
luat/demo/airui/0804_demo/C9.jpg


BIN
luat/demo/airui/0804_demo/D1.jpg


BIN
luat/demo/airui/0804_demo/D7.jpg


BIN
luat/demo/airui/0804_demo/D9.jpg


Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels