Browse Source

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

alienwalker 5 months ago
parent
commit
7632dc61d8

+ 2 - 0
components/little_flash/inc/little_flash.h

@@ -27,6 +27,8 @@ lf_err_t little_flash_chip_erase(const little_flash_t *lf);
 
 lf_err_t little_flash_write(const little_flash_t *lf, uint32_t addr, const uint8_t *data, uint32_t len);
 
+lf_err_t little_flash_erase_write(const little_flash_t *lf, uint32_t addr, const uint8_t *data, uint32_t len);
+
 lf_err_t little_flash_read(const little_flash_t *lf, uint32_t addr, uint8_t *data, uint32_t len);
 
 lf_err_t little_flash_write_status(const little_flash_t *lf, uint8_t address, uint8_t status);

+ 151 - 1
components/little_flash/luat_lib_little_flash.c

@@ -18,7 +18,7 @@
 /*
 初始化 little_flash
 @api  lf.init(spi_device)
-@int  userdata spi_device
+@userdata spi_device
 @return userdata 成功返回一个数据结构,否则返回nil
 @usage
 --spi_device
@@ -47,6 +47,150 @@ static int luat_little_flash_init(lua_State *L){
     return 0;
 }
 
+/*
+擦除 Flash 指定地址指定大小,按照flash block大小进行擦除
+@api  lf.erase(flash,add,size)
+@userdata flash Flash 设备对象 lf.init()返回的数据结构
+@number add 擦除地址
+@number size 擦除大小
+@return bool 成功返回true
+@usage
+lf.erase(flash,add,size)
+*/
+static int luat_little_flash_erase(lua_State *L){
+    little_flash_t *flash = lua_touserdata(L, 1);
+    if (flash == NULL) {
+        LLOGE("little_flash mount flash is nil");
+        return 0;
+    }
+    uint32_t addr = luaL_checkinteger(L, 2);
+    size_t size = luaL_checkinteger(L, 3);
+    lf_err_t ret = little_flash_erase(flash,addr,size);
+    lua_pushboolean(L, ret ? 1 : 0);
+    return 1;
+}
+
+/*
+擦除 Flash 全部数据
+@api  lf.chipErase(flash)
+@userdata flash Flash 设备对象 lf.init()返回的数据结构
+@return bool 成功返回true
+@usage
+lf.chipErase(flash)
+*/
+static int luat_little_flash_chip_erase(lua_State *L){
+    little_flash_t *flash = lua_touserdata(L, 1);
+    if (flash == NULL) {
+        LLOGE("little_flash mount flash is nil");
+        return 0;
+    }
+    lf_err_t ret = little_flash_chip_erase(flash);
+    lua_pushboolean(L, ret ? 1 : 0);
+    return 1;
+}
+
+/*
+读取 Flash 数据
+@api  lf.read(flash, addr, size)
+@userdata flash Flash 设备对象 lf.init()返回的数据结构
+@int addr 起始地址
+@int size 从起始地址开始读取数据的总大小
+@return string data 读取到的数据
+@usage
+log.info("lf.read",lf.read(lf_device,1024,4))
+*/
+static int luat_little_flash_read(lua_State *L){
+    little_flash_t *flash = lua_touserdata(L, 1);
+    if (flash == NULL) {
+        LLOGE("little_flash mount flash is nil");
+        return 0;
+    }
+    uint32_t addr = luaL_checkinteger(L, 2);
+    size_t size = luaL_checkinteger(L, 3);
+    uint8_t* data = (uint8_t*)luat_heap_malloc(size);
+    lf_err_t ret = little_flash_read(flash, addr, data, size);
+    if(ret != 0){
+        size = 0;
+        LLOGD("lf read ret %d", ret);
+    }
+    lua_pushlstring(L, (const char*)data, size);
+    luat_heap_free(data);
+    return 1;
+}
+    
+/*
+向 Flash 写数据
+@api  lf.write(flash, addr,data)
+@userdata flash Flash 设备对象 lf.init()返回的数据结构
+@int addr 起始地址
+@string data 待写入的数据
+@return bool 成功返回true
+@usage
+log.info("lf.write",lf.write(lf_device,1024,"lf"))
+*/
+static int luat_little_flash_write(lua_State *L){
+    little_flash_t *flash = lua_touserdata(L, 1);
+    if (flash == NULL) {
+        LLOGE("little_flash mount flash is nil");
+        return 0;
+    }
+    uint32_t addr = luaL_checkinteger(L, 2);
+    size_t size = 0;
+    const char* data = luaL_checklstring(L, 3, &size);
+    lf_err_t ret = little_flash_write(flash, addr, (const uint8_t*)data, size);
+    lua_pushboolean(L, ret ? 1 : 0);
+    return 1;
+}
+
+/*
+先擦除再往 Flash 写数据
+@api  lf.eraseWrite(flash, addr,data)
+@userdata flash Flash 设备对象 lf.init()返回的数据结构
+@int addr 起始地址
+@string data 待写入的数据
+@return bool 成功返回true
+@usage
+log.info("lf.eraseWrite",lf.eraseWrite(lf_device,1024,"lf"))
+*/
+static int luat_little_flash_erase_write(lua_State *L){
+    little_flash_t *flash = lua_touserdata(L, 1);
+    if (flash == NULL) {
+        LLOGE("little_flash mount flash is nil");
+        return 0;
+    }
+    uint32_t addr = luaL_checkinteger(L, 2);
+    size_t size = 0;
+    const char* data = luaL_checklstring(L, 3, &size);
+    lf_err_t ret = little_flash_erase_write(flash, addr, (const uint8_t*)data, size);
+    lua_pushboolean(L, ret ? 1 : 0);
+    return 1;
+}
+
+/*
+获取 Flash 容量和page大小
+@api  lf.getInfo(flash)
+@userdata flash Flash 设备对象 lf.init()返回的数据结构
+@return int Flash 容量
+@return int page 页大小
+@usage
+log.info("lf.getInfo",lf.getInfo(lf_device))
+*/
+
+static int luat_little_flash_get_info(lua_State *L){
+    little_flash_t *flash = lua_touserdata(L, 1);
+    if (flash == NULL) {
+        LLOGE("little_flash mount flash is nil");
+        return 0;
+    }
+    uint32_t capacity = 0;
+    uint32_t page = 0;
+    capacity = flash->chip_info.capacity;
+    page = flash->chip_info.prog_size;
+    lua_pushinteger(L, capacity);
+    lua_pushinteger(L, page);
+    return 2;
+}
+
 #ifdef LUAT_USE_FS_VFS
 #include "luat_fs.h"
 #include "lfs.h"
@@ -95,6 +239,12 @@ static int luat_little_flash_mount(lua_State *L) {
 static const rotable_Reg_t reg_little_flash[] =
 {
     { "init",           ROREG_FUNC(luat_little_flash_init)},
+    { "erase",          ROREG_FUNC(luat_little_flash_erase)},
+    { "chipErase",      ROREG_FUNC(luat_little_flash_chip_erase)},
+    { "read",           ROREG_FUNC(luat_little_flash_read)},
+    { "write",          ROREG_FUNC(luat_little_flash_write)},
+    { "eraseWrite",     ROREG_FUNC(luat_little_flash_erase_write)},
+    { "getInfo",        ROREG_FUNC(luat_little_flash_get_info)},
 #ifdef LUAT_USE_FS_VFS
     { "mount",          ROREG_FUNC(luat_little_flash_mount)},
 #endif

+ 8 - 2
components/little_flash/src/little_flash.c

@@ -473,7 +473,6 @@ error:
     return LF_ERR_READ;
 }
 
-
 lf_err_t little_flash_write(const little_flash_t *lf, uint32_t addr, const uint8_t *data, uint32_t len){
 #ifdef LF_USE_HEAP
     uint8_t* cmd_data = (uint8_t*)lf->malloc(4+lf->chip_info.prog_size);
@@ -597,7 +596,14 @@ error:
     return LF_ERR_WRITE;
 }
 
-
+lf_err_t little_flash_erase_write(const little_flash_t *lf, uint32_t addr, const uint8_t *data, uint32_t len){
+    lf_err_t result = LF_ERR_OK;
+    result = little_flash_erase(lf, addr, len);
+    if (result == LF_ERR_OK) {
+        result = little_flash_write(lf, addr, data, len);
+    }
+    return result;
+}
 
 lf_err_t little_flash_read(const little_flash_t *lf, uint32_t addr, uint8_t *data, uint32_t len){
     uint8_t cmd_data[4];

+ 10 - 1
components/network/adapter/luat_lib_socket.c

@@ -5,6 +5,15 @@
 @date    2022.11.13
 @demo socket
 @tag LUAT_USE_NETWORK
+@usage
+-- 本库用于网络通信, 支持TCP, UDP, 也支持TLS加密传输
+-- 支持加密传输版本有 TLS 1.0/1.1/1.2/1.3, DTLS 1.0/1.2, 当前不支持TLS 1.3
+-- 不支持 SSL 3.0, 该协议已经被废弃, 也不安全
+-- 支持的加密算法有 RSA, ECC, AES, 3DES, SHA1, SHA256, MD5 等等
+-- 完整的加密套件列表, 可通过 crypto.cipher_suites() 获取
+
+-- 本库的函数, 除非特别说明, 都是立即返回的非阻塞函数
+-- 这意味着, 函数调用成功, 并不代表网络操作成功, 只代表网络操作已经开始
 */
 #include "luat_base.h"
 #include "luat_mem.h"
@@ -31,7 +40,7 @@ network_adapter_info* network_adapter_fetch(int id, void** userdata);
 /*
 获取本地ip
 @api    socket.localIP(adapter)
-@int 适配器序号, 只能是socket.ETH0(外置以太网),socket.LWIP_ETH(内置以太网),socket.LWIP_STA(内置WIFI的STA),socket.LWIP_AP(内置WIFI的AP),socket.LWIP_GP(内置蜂窝网络的GPRS),socket.USB(外置USB网卡),如果不填,优先选择soc平台自带能上外网的适配器,若仍然没有,选择最后一个注册的适配器
+@int 适配器序号, 默认是平台自带的能上外网的适配器,通过socket.dft()可以获取和修改
 @return string 通常是内网ip, 也可能是外网ip, 取决于运营商的分配
 @return string 网络掩码
 @return string 网关IP

+ 1 - 18
components/tp/luat_tp_cst9220.c

@@ -120,14 +120,6 @@ static int hyn_wr_reg(luat_tp_config_t* luat_tp_config, uint32_t reg_addr, uint8
     return ret;
 }
 
-int tp_cst92xx_clear_status(luat_tp_config_t* luat_tp_config){
-	if (tp_i2c_write_reg16(luat_tp_config, CST92XX_STATUS, (uint8_t[]){0x00}, 1)){
-		LLOGE("write status reg fail!");
-		return -1;
-	}
-	return 0;
-}
-
 static int tp_cst92xx_detect(luat_tp_config_t* luat_tp_config){
     struct tp_info *ic = &hyn_92xxdata.hw_info;
     // LLOGD("module_id: 0x%04x", ic->fw_chip_type);
@@ -654,15 +646,6 @@ void cst92xx_read_point(uint8_t *input_buff, void *buf, uint8_t touch_num){
 	pre_touch = touch_num;
 }
 
-int tp_cst92xx_read_status(luat_tp_config_t* luat_tp_config, uint8_t *status){
-	if (tp_i2c_read_reg16(luat_tp_config, CST92XX_STATUS, status, 1, 1)){
-		LLOGE("read status reg fail!\r\n");
-		return -1;
-	}
-	// LLOGD("status=0x%02X\r\n", *status); // 调试需要看!!!
-	return 0;
-}
-
 
 static int tp_cst92xx_read(luat_tp_config_t* luat_tp_config, luat_tp_data_t *luat_tp_data){
     uint8_t touch_num=0, point_status=0;
@@ -711,7 +694,7 @@ static int tp_cst92xx_read(luat_tp_config_t* luat_tp_config, luat_tp_data_t *lua
     cst92xx_read_point(read_buff, luat_tp_data, touch_num);
     
 exit_:
-    // tp_cst92xx_clear_status(luat_tp_config);
+
     return touch_num;
 }
 

+ 14 - 1
luat/demo/wlan/ap_get_start/main.lua

@@ -72,7 +72,12 @@ sys.taskInit(function()
         -- 其他情况就是找不到了
         return 404, {}, "Not Found" .. uri
     end, socket.LWIP_AP)
-    log.info("web", "pls open url http://192.168.4.1/")
+    if netdrv then
+        local ip = netdrv.ipv4(socket.LWIP_AP)
+        log.info("web", "pls open url http://" .. (ip or "192.168.4.1") .. "/")
+    else
+        log.info("web", "pls open url http://192.168.4.1/")
+    end
 end)
 
 -- wifi扫描成功后, 会有WLAN_SCAN_DONE消息, 读取即可
@@ -103,6 +108,14 @@ sys.subscribe("IP_READY", function()
     end)
 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.run()