Răsfoiți Sursa

update:lcd准备统一化命令

Dozingfiretruck 2 ani în urmă
părinte
comite
ea92b94c8c

+ 3 - 3
components/lcd/luat_lcd.c

@@ -18,10 +18,10 @@ luat_color_t color_swap(luat_color_t color) {
     return tmp;
 }
 
-void luat_lcd_execute_cmds(luat_lcd_conf_t* conf, uint32_t* cmds, uint32_t count) {
+void luat_lcd_execute_cmds(luat_lcd_conf_t* conf) {
     uint32_t cmd = 0;
-    for (size_t i = 0; i < count; i++){
-        cmd = cmds[i];
+    for (size_t i = 0; i < conf->opts->init_cmds_len; i++){
+        cmd = conf->opts->init_cmds[i];
         switch(((cmd >> 16) & 0xFFFF)) {
             case 0x0000 :
             case 0x0002 :

+ 5 - 8
components/lcd/luat_lcd.h

@@ -52,7 +52,7 @@ typedef struct luat_lcd_conf {
     uint8_t auto_flush;
     uint8_t direction;//方向
     u8g2_t luat_lcd_u8g2 ;
-    const struct luat_lcd_opts* opts;
+    struct luat_lcd_opts* opts;
     luat_spi_device_t* lcd_spi_device;
     int lcd_spi_ref;
     void* userdata;
@@ -68,6 +68,8 @@ typedef struct luat_lcd_conf {
 } luat_lcd_conf_t;
 
 typedef struct luat_lcd_opts {
+    uint32_t init_cmds_len;
+    uint32_t* init_cmds;
     const char* name;
     int (*init)(luat_lcd_conf_t* conf);
     int (*write_cmd_data)(luat_lcd_conf_t* conf,const uint8_t cmd, const uint8_t *data, uint8_t data_len);
@@ -77,6 +79,8 @@ typedef struct luat_lcd_opts {
 int lcd_write_cmd(luat_lcd_conf_t* conf,const uint8_t cmd);
 int lcd_write_data(luat_lcd_conf_t* conf,const uint8_t data);
 
+void luat_lcd_execute_cmds(luat_lcd_conf_t* conf);
+
 int lcd_write_cmd_data(luat_lcd_conf_t* conf,const uint8_t cmd, const uint8_t *data, uint8_t data_len);
 int lcd_read_cmd_data(luat_lcd_conf_t* conf,const uint8_t cmd, const uint8_t *data, uint8_t data_len, uint8_t dummy_bit);
 
@@ -105,13 +109,6 @@ int luat_lcd_draw_hline(luat_lcd_conf_t* conf, int16_t x, int16_t y,int16_t h, l
 int luat_lcd_draw_rectangle(luat_lcd_conf_t* conf, int16_t x1, int16_t y1, int16_t x2, int16_t y2, luat_color_t color);
 int luat_lcd_draw_circle(luat_lcd_conf_t* conf, int16_t x0, int16_t y0, uint8_t r, luat_color_t color);
 
-void luat_lcd_execute_cmds(luat_lcd_conf_t* conf, uint32_t* cmds, uint32_t count);
-
-typedef struct luat_lcd_custom {
-    size_t init_cmd_count;
-    uint32_t *initcmd; // 实际命令长度与init_cmd_count相同
-}luat_lcd_custom_t;
-
 void luat_lcd_service_init(uint32_t pro);
 void luat_lcd_service_run(void *CB, void *data, uint32_t param, uint32_t timeout);
 void luat_lcd_service_draw(void *data);

+ 1 - 2
components/lcd/luat_lcd_custom.c

@@ -35,8 +35,7 @@ static int custom_init(luat_lcd_conf_t* conf) {
     luat_lcd_wakeup(conf);
     luat_rtos_task_sleep(120);
     // 发送初始化命令
-    luat_lcd_custom_t * cst = (luat_lcd_custom_t *)conf->userdata;
-    luat_lcd_execute_cmds(conf, cst->initcmd, cst->init_cmd_count);
+    luat_lcd_execute_cmds(conf);
     
     luat_lcd_wakeup(conf);
     /* wait for power stability */

+ 14 - 15
components/lcd/luat_lib_lcd.c

@@ -188,26 +188,25 @@ static int l_lcd_init(lua_State* L) {
             lua_pop(L, 1);
         }
         if (s_index == 0){
-            luat_lcd_custom_t *cst = luat_heap_malloc(sizeof(luat_lcd_custom_t));
             lua_pushstring(L, "initcmd");
             lua_gettable(L, 2);
             if (lua_istable(L, -1)) {
-              cst->init_cmd_count = lua_rawlen(L, -1);
-              cst->initcmd = luat_heap_malloc(cst->init_cmd_count * sizeof(uint32_t));
-              for (size_t i = 1; i <= cst->init_cmd_count; i++){
+              conf->opts->init_cmds_len = lua_rawlen(L, -1);
+              conf->opts->init_cmds = luat_heap_malloc( conf->opts->init_cmds_len * sizeof(uint32_t));
+              for (size_t i = 1; i <= conf->opts->init_cmds_len; i++){
                   lua_geti(L, -1, i);
-                  cst->initcmd[i-1] = luaL_checkinteger(L, -1);
+                  conf->opts->init_cmds[i-1] = luaL_checkinteger(L, -1);
                   lua_pop(L, 1);
               }
             }else if(lua_isstring(L, -1)){
               size_t  len,cmd;
               const char *fail_name = luaL_checklstring(L, -1, &len);
               FILE* fd = (FILE *)luat_fs_fopen(fail_name, "rb");
-              cst->init_cmd_count = 0;
+              conf->opts->init_cmds_len = 0;
               if (fd){
                   #define INITCMD_BUFF_SIZE 128
                   char init_cmd_buff[INITCMD_BUFF_SIZE] ;
-                  cst->initcmd = luat_heap_malloc(sizeof(uint32_t));
+                  conf->opts->init_cmds = luat_heap_malloc(sizeof(uint32_t));
                   while (1) {
                       memset(init_cmd_buff, 0, INITCMD_BUFF_SIZE);
                       int readline_len = luat_fs_readline(init_cmd_buff, INITCMD_BUFF_SIZE-1, fd);
@@ -220,27 +219,27 @@ static int l_lcd_init(lua_State* L) {
                       if (sscanf(token,"%x",&cmd) < 1){
                           continue;
                       }
-                      cst->init_cmd_count = cst->init_cmd_count + 1;
-                      cst->initcmd = luat_heap_realloc(cst->initcmd,cst->init_cmd_count * sizeof(uint32_t));
-                      cst->initcmd[cst->init_cmd_count-1]=cmd;
+                      conf->opts->init_cmds_len = conf->opts->init_cmds_len + 1;
+                      conf->opts->init_cmds = luat_heap_realloc(conf->opts->init_cmds,conf->opts->init_cmds_len * sizeof(uint32_t));
+                      conf->opts->init_cmds[conf->opts->init_cmds_len-1]=cmd;
                       while( token != NULL ) {
                           token = strtok(NULL, ",");
                           if (sscanf(token,"%x",&cmd) < 1){
                               break;
                           }
-                          cst->init_cmd_count = cst->init_cmd_count + 1;
-                          cst->initcmd = luat_heap_realloc(cst->initcmd,cst->init_cmd_count * sizeof(uint32_t));
-                          cst->initcmd[cst->init_cmd_count-1]=cmd;
+                          conf->opts->init_cmds_len = conf->opts->init_cmds_len + 1;
+                          conf->opts->init_cmds = luat_heap_realloc(conf->opts->init_cmds,conf->opts->init_cmds_len * sizeof(uint32_t));
+                          conf->opts->init_cmds[conf->opts->init_cmds_len-1]=cmd;
                       }
                   }
-                  cst->initcmd[cst->init_cmd_count]= 0;
+                  conf->opts->init_cmds[conf->opts->init_cmds_len]= 0;
                   luat_fs_fclose(fd);
               }else{
                   LLOGE("init_cmd fail open error");
               }
             }
+            luat_heap_free(conf->opts->init_cmds);
             lua_pop(L, 1);
-            conf->userdata = cst;
         }
         // 默认自动flush,即使没有buff
         conf->auto_flush = 1;