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

add:luatos引出little flash的相关操作函数

Dozingfiretruck 5 месяцев назад
Родитель
Сommit
932a258bad
1 измененных файлов с 151 добавлено и 1 удалено
  1. 151 1
      components/little_flash/luat_lib_little_flash.c

+ 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