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

fix:修复spi接收数据未上报lua

Dozingfiretruck 1 год назад
Родитель
Сommit
256afe4cc4
1 измененных файлов с 5 добавлено и 3 удалено
  1. 5 3
      luat/modules/luat_lib_spi.c

+ 5 - 3
luat/modules/luat_lib_spi.c

@@ -404,6 +404,7 @@ local len = spi.recv(0, 4, buff)
 static int l_spi_recv(lua_State *L) {
 static int l_spi_recv(lua_State *L) {
     luat_zbuff_t* buff = NULL;
     luat_zbuff_t* buff = NULL;
     char* recv_buff = NULL;
     char* recv_buff = NULL;
+    luaL_Buffer b = {0};
     int ret = 0;
     int ret = 0;
     int len = luaL_optinteger(L, 2, 1);
     int len = luaL_optinteger(L, 2, 1);
     if (len <= 0) {
     if (len <= 0) {
@@ -418,7 +419,8 @@ static int l_spi_recv(lua_State *L) {
         }
         }
     }
     }
     else {
     else {
-        recv_buff = (char *)luat_heap_malloc(len);
+        luaL_buffinitsize(L, &b, len);
+        recv_buff = b.b;
     }
     }
     if(recv_buff == NULL) {
     if(recv_buff == NULL) {
         LLOGW("out of memory when malloc spi buff %d", len);
         LLOGW("out of memory when malloc spi buff %d", len);
@@ -429,6 +431,7 @@ static int l_spi_recv(lua_State *L) {
     {
     {
         int id = luaL_checkinteger(L, 1);
         int id = luaL_checkinteger(L, 1);
         ret = luat_spi_recv(id, recv_buff, len);
         ret = luat_spi_recv(id, recv_buff, len);
+        b.n = ret;
     }
     }
     else if (lua_isuserdata(L, 1))
     else if (lua_isuserdata(L, 1))
     {
     {
@@ -450,8 +453,7 @@ static int l_spi_recv(lua_State *L) {
     }
     }
     
     
     if (buff == NULL) {
     if (buff == NULL) {
-        lua_pushlstring(L, recv_buff, ret);
-        luat_heap_free(recv_buff);
+        luaL_pushresult(&b);
     }
     }
     else {
     else {
         buff->used += len;
         buff->used += len;