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

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

alienwalker 2 лет назад
Родитель
Сommit
7d84c4c6b7

+ 17 - 0
components/mbedtls/library/entropy_poll.c

@@ -285,5 +285,22 @@ int mbedtls_nv_seed_poll( void *data,
     return( 0 );
 }
 #endif /* MBEDTLS_ENTROPY_NV_SEED */
+#if defined(MBEDTLS_ENTROPY_HARDWARE_ALT)
+int luat_crypto_trng(char* buff, size_t len);
+int mbedtls_hardware_poll( void *data,
+                           unsigned char *output, size_t len, size_t *olen ){
+
+    if (data != NULL)
+        data = NULL;
+    *olen = 0;
+    int rnd = luat_crypto_trng((char *)output, len);
+    if (rnd != 0)
+    {
+        return -1;
+    }
+    *olen = len;   
+    return( 0 );
+}
+#endif
 
 #endif /* MBEDTLS_ENTROPY_C */

+ 0 - 1
components/network/libhttp/luat_lib_http.c

@@ -260,7 +260,6 @@ static int l_http_request(lua_State *L) {
 			}
 			lua_pop(L, 1);
 		}
-		lua_pop(L, 1);
 	}
 	if (lua_isstring(L, 4)) {
 		const char *body = luaL_checklstring(L, 4, &(http_ctrl->req_body_len));

+ 8 - 3
components/network/libsntp/luat_sntp.c

@@ -187,8 +187,10 @@ next:
     return 0;
 }
 
-int ntp_get(void){
-	int adapter_index = network_get_last_register_adapter();
+int ntp_get(int adapter_index){
+    if (-1 == adapter_index){
+        adapter_index = network_get_last_register_adapter();
+    }
 	if (adapter_index < 0 || adapter_index >= NW_ADAPTER_QTY){
 		return -1;
 	}
@@ -209,10 +211,12 @@ sntp时间同步
 @api    socket.sntp(sntp_server)
 @tag LUAT_USE_SNTP
 @string/table sntp服务器地址 选填
+@int 适配器序号, 只能是socket.ETH0(外置以太网),socket.LWIP_ETH(内置以太网),socket.LWIP_STA(内置WIFI的STA),socket.LWIP_AP(内置WIFI的AP),socket.LWIP_GP(内置蜂窝网络的GPRS),socket.USB(外置USB网卡),如果不填,优先选择soc平台自带能上外网的适配器,若仍然没有,选择最后一个注册的适配器
 @usage
 socket.sntp()
 --socket.sntp("ntp.aliyun.com") --自定义sntp服务器地址
 --socket.sntp({"ntp.aliyun.com","ntp1.aliyun.com","ntp2.aliyun.com"}) --sntp自定义服务器地址
+--socket.sntp(nil, socket.ETH0) --sntp自定义适配器序号
 sys.subscribe("NTP_UPDATE", function()
     log.info("sntp", "time", os.date())
 end)
@@ -248,7 +252,8 @@ int l_sntp_get(lua_State *L){
 			lua_pop(L, 1);
 		}
 	}
-    ntp_get();
+    int adapter_index = luaL_optinteger(L, 2, network_get_last_register_adapter());
+    ntp_get(adapter_index);
 	return 0;
 }
 

+ 1 - 1
components/network/libsntp/luat_sntp.h

@@ -2,7 +2,7 @@
 #define LUAT_SNTP_H
 
 
-int ntp_get(void);
+int ntp_get(int adapter_index);
 int l_sntp_get(lua_State *L);
 
 #endif

+ 4 - 0
components/nimble/src/luat_lib_nimble.c

@@ -94,6 +94,10 @@ static int l_nimble_init(lua_State* L) {
     int rc = 0;
     size_t len = 0;
     const char* name = NULL;
+
+    lua_gc(L, LUA_GCCOLLECT, 0);
+    lua_gc(L, LUA_GCCOLLECT, 0);
+
     if(lua_isstring(L, 1)) {
         name = luaL_checklstring(L, 1, &len);
         if (len > 0) {

+ 1 - 1
components/shell/luat_shell.c

@@ -216,7 +216,7 @@ static void cmd_i2c_tools(char* uart_buff, size_t len) {
 #ifdef LUAT_USE_SNTP
 #include "luat_sntp.h"
 static void cmd_sntp(char* uart_buff, size_t len){
-    ntp_get();
+    ntp_get(-1);
 }
 #endif
 

+ 2 - 2
demo/adc/main.lua

@@ -45,7 +45,7 @@ function adc_pin() -- 根据不同开发板,设置ADC编号
         return 0,1,255,255,adc.CH_CPU ,adc.CH_VBAT 
     else
         log.info("main", "define ADC pin in main.lua")
-        return 0, 0,0,0,0,0
+        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()
@@ -81,7 +81,7 @@ sys.taskInit(function()
         if adc_pin_vbat and adc_pin_vbat ~= 255 then
             log.debug("adc", "VBAT", adc.get(adc_pin_vbat))
         end
-        sys.wait(500)
+        sys.wait(1000)
     end
 
     -- 若不再读取, 可关掉adc, 降低功耗, 非必须

+ 4 - 3
demo/feishu/main.lua

@@ -23,9 +23,10 @@ _G.sys = require("sys")
 --[[特别注意, 使用http库需要下列语句]]
 _G.sysplus = require("sysplus")
 
-
-wdt.init(3000)
-sys.timerLoopStart(wdt.feed, 1000)
+if wdt then
+    wdt.init(3000)
+    sys.timerLoopStart(wdt.feed, 1000)
+end
 
 -- 因为这个demo适合所有能联网的设备
 -- 统一联网函数, 按需要增删

+ 4 - 4
demo/ftp/main.lua

@@ -23,7 +23,7 @@ sys.taskInit(function()
         local password = "12341234"
         log.info("wifi", ssid, password)
         -- TODO 改成esptouch配网
-        LED = gpio.setup(12, 0, gpio.PULLUP)
+        -- LED = gpio.setup(12, 0, gpio.PULLUP)
         wlan.init()
         wlan.setMode(wlan.STATION)
         wlan.connect(ssid, password, 1)
@@ -37,13 +37,13 @@ sys.taskInit(function()
         log.info("auto mac", w5500.getMac():toHex())
         w5500.config() --默认是DHCP模式
         w5500.bind(socket.ETH0)
-        LED = gpio.setup(62, 0, gpio.PULLUP)
+        -- LED = gpio.setup(62, 0, gpio.PULLUP)
         sys.wait(1000)
         -- TODO 获取mac地址作为device_id
-    elseif rtos.bsp() == "EC618" then
+    elseif mobile then
         -- Air780E/Air600E系列
         --mobile.simid(2)
-        LED = gpio.setup(27, 0, gpio.PULLUP)
+        -- LED = gpio.setup(27, 0, gpio.PULLUP)
         device_id = mobile.imei()
         sys.waitUntil("IP_READY", 30000)
     end

+ 4 - 4
demo/http/main.lua

@@ -30,7 +30,7 @@ sys.taskInit(function()
         local password = "12341234"
         log.info("wifi", ssid, password)
         -- TODO 改成esptouch配网
-        LED = gpio.setup(12, 0, gpio.PULLUP)
+        -- LED = gpio.setup(12, 0, gpio.PULLUP)
         wlan.init()
         wlan.setMode(wlan.STATION)
         wlan.connect(ssid, password, 1)
@@ -42,13 +42,13 @@ sys.taskInit(function()
         w5500.init(spi.HSPI_0, 24000000, pin.PC14, pin.PC01, pin.PC00)
         w5500.config() --默认是DHCP模式
         w5500.bind(socket.ETH0)
-        LED = gpio.setup(62, 0, gpio.PULLUP)
+        -- LED = gpio.setup(62, 0, gpio.PULLUP)
         sys.wait(1000)
         -- TODO 获取mac地址作为device_id
-    elseif rtos.bsp() == "EC618" then
+    elseif mobile then
         -- Air780E/Air600E系列
         --mobile.simid(2)
-        LED = gpio.setup(27, 0, gpio.PULLUP)
+        -- LED = gpio.setup(27, 0, gpio.PULLUP)
         device_id = mobile.imei()
         log.info("ipv6", mobile.ipv6(true))
         sys.waitUntil("IP_READY", 30000)

+ 4 - 4
demo/httpdns/main.lua

@@ -32,7 +32,7 @@ sys.taskInit(function()
         local password = "12341234"
         log.info("wifi", ssid, password)
         -- TODO 改成esptouch配网
-        LED = gpio.setup(12, 0, gpio.PULLUP)
+        -- LED = gpio.setup(12, 0, gpio.PULLUP)
         wlan.init()
         -- wlan.setMode(wlan.STATION)
         wlan.connect(ssid, password, 1)
@@ -44,13 +44,13 @@ sys.taskInit(function()
         w5500.init(spi.HSPI_0, 24000000, pin.PC14, pin.PC01, pin.PC00)
         w5500.config() --默认是DHCP模式
         w5500.bind(socket.ETH0)
-        LED = gpio.setup(62, 0, gpio.PULLUP)
+        -- LED = gpio.setup(62, 0, gpio.PULLUP)
         sys.wait(1000)
         -- TODO 获取mac地址作为device_id
-    elseif rtos.bsp() == "EC618" then
+    elseif mobile then
         -- Air780E/Air600E系列
         --mobile.simid(2)
-        LED = gpio.setup(27, 0, gpio.PULLUP)
+        -- LED = gpio.setup(27, 0, gpio.PULLUP)
         device_id = mobile.imei()
         -- log.info("ipv6", mobile.ipv6(true))
         sys.waitUntil("IP_READY", 30000)

+ 48 - 0
demo/otp/main.lua

@@ -0,0 +1,48 @@
+
+-- LuaTools需要PROJECT和VERSION这两个信息
+PROJECT = "otpdemo"
+VERSION = "1.0.0"
+
+log.info("main", PROJECT, VERSION)
+
+-- sys库是标配
+_G.sys = require("sys")
+
+--[[
+提示: OTP是比较高级的API, 一般用于存储密钥等核心数据, 不建议用于普通数据的存放
+
+OTP有个非常重要的特性, 就是一旦加锁就永久无法解锁, 这点非常非常重要
+
+OTP通常由多个zone, 0,1,2, 每个zone通常由256字节, 但这个非常取决于具体模块.
+
+OTP在没有加锁之前是可以抹除的, 每次都是整个zone一起抹除.
+]]
+
+sys.taskInit(function()
+    sys.wait(3000)
+
+    -- 擦除区域
+    -- otp.erase(2)
+
+    -- 写otp区域
+    local ret = otp.write(2, "1234", 0)
+    log.info("otp", "write", ret)
+
+    -- 读取otp区域
+    for zone = 0, 2, 1 do
+        local otpdata = otp.read(zone, 0, 64)
+        if otpdata then
+            log.info("otp", zone, otpdata:toHex())
+            log.info("otp", zone, otpdata)
+        end
+    end
+
+    -- 锁定otp区域, 别轻易尝试, 加锁之后就无法解锁了
+    -- otp.lock(2)
+end)
+
+
+-- 用户代码已结束---------------------------------------------
+-- 结尾总是这一句
+sys.run()
+-- sys.run()之后后面不要加任何语句!!!!!

+ 3 - 3
demo/rtkv/main.lua

@@ -47,13 +47,13 @@ sys.taskInit(function()
         w5500.init(spi.HSPI_0, 24000000, pin.PC14, pin.PC01, pin.PC00)
         w5500.config() --默认是DHCP模式
         w5500.bind(socket.ETH0)
-        LED = gpio.setup(62, 0, gpio.PULLUP)
+        -- LED = gpio.setup(62, 0, gpio.PULLUP)
         sys.wait(1000)
         -- TODO 获取mac地址作为device_id
-    elseif rtos.bsp() == "EC618" then
+    elseif mobile then
         -- Air780E/Air600E系列
         --mobile.simid(2)
-        LED = gpio.setup(27, 0, gpio.PULLUP)
+        -- LED = gpio.setup(27, 0, gpio.PULLUP)
         device_id = mobile.imei()
         -- log.info("ipv6", mobile.ipv6(true))
         sys.waitUntil("IP_READY", 30000)

+ 1 - 0
luat/modules/luat_lib_otp.c

@@ -5,6 +5,7 @@
 @version 1.0
 @date    2021.12.08
 @tag LUAT_USE_OTP
+@demo    otp
 */
 #include "luat_base.h"
 #include "luat_otp.h"