瀏覽代碼

1、串口接收图片数据修改
1)接收到预备发送的命令时,校验数据长度要大于0并且小于等于360x360x3才是合法,之后分配4K动态空间来存储数据,并将以前存入flash中的头像图片文件删除
2)在接收数据过程中,先把数据存在动态存储区,当接收数据长度即将到达4K时,存入一次flash,然后动态存储区从头开始存,以减少写flash的次数
3)收到结束命令时,先判断接收到的数据长度和第一次发来的数据长度是否对应,不对应则删除存入flash中的数据,回应0x55通知失败;若数据长度正确,则将最后收到的数据写入flash中,并把数据长度写入flash中,回应0xAA通知成功
4)对于每帧数据,在收到第一个字节开始计时,50ms之后如果还没收完,则发送超时信息告诉上层需要重发,避免中间串口传输丢数据,一直在等待数据发送
5)加强对接收数据的校验,要收到帧头0xAA 0x55,并且累计的总数据长度要等于发来的长度,才算合法

2、在显示头像图片时,从flash中读取对应文件名的数据,判断数据长度大于0并且小于等于360x360x3才是合法的,用ui_mem_res_alloc分配足够的内存来存放数据

robbin 3 天之前
父節點
當前提交
68e3c28262

二進制
application/aem_watch/boards/ats3085s4_dev_watch_ext_nor/udisk/1223.wf


+ 14 - 9
application/aem_watch/src/application/profile_photo/aem_profile_photo_screen.c

@@ -16,8 +16,13 @@
 #define LV_COLOR_BLACK LV_COLOR_MAKE(0x00, 0x00, 0x00)
 #define LV_COLOR_WHITE LV_COLOR_MAKE(0xff, 0xff, 0xff)
 #define POWER_WIDTH 140
+#define PHOTO_DATA_MAX_SIZE (DEF_UI_WIDTH * DEF_UI_HEIGHT * LV_IMG_PX_SIZE_ALPHA_BYTE)  //360*360*3
 
 extern uint32_t flash_read(const char *name, uint32_t offset, void *data, uint32_t size);
+#ifdef CONFIG_UI_MEMORY_MANAGER
+extern void ui_mem_res_free(void * ptr);
+extern void * ui_mem_res_alloc(size_t size);
+#endif
 
 static uint8_t *photo_data_buff;
 static lv_img_dsc_t *img_dsc;
@@ -55,7 +60,7 @@ static lv_obj_t *activity_value_item_create(lv_obj_t *par, lv_color_t value_colo
         return NULL;
     }
 
-    lv_obj_t *bg = aem_bg_create(par, AEM_SIZE_HOR_FACTOR_466(360), AEM_SIZE_VER_FACTOR_466(hight), lv_color_black());
+    lv_obj_t *bg = aem_bg_create(par, AEM_SIZE_HOR_FACTOR_466(DEF_UI_WIDTH), AEM_SIZE_VER_FACTOR_466(hight), lv_color_black());
     if (bg == NULL)
     {
         return NULL;
@@ -98,16 +103,16 @@ static lv_obj_t *aem_profile_photo_arc_show_create(lv_obj_t *par)
             {    
                 photo_data_size = photo_data_size_buff[0] + ((uint32_t)photo_data_size_buff[1] << 8) + ((uint32_t)photo_data_size_buff[2] << 16);
                 
-                if (photo_data_size > 0)
+                if ((photo_data_size > 0) && (photo_data_size <= PHOTO_DATA_MAX_SIZE))  //>0且≤360*360*3
                 {
-                    photo_data_buff = (uint8_t *)lv_mem_alloc(photo_data_size);  
+                    photo_data_buff = (uint8_t *)ui_mem_res_alloc(photo_data_size);  
 
                     flash_read("profile_photo_name", 3, photo_data_buff, photo_data_size);
                     //struct fs_file_t file = {0};
 
                     printk("photo_data_size: %d\n", photo_data_size);
-                    //printk("photo_data_buff62,63,64: %d, %d, %d\n", photo_data_buff[62], photo_data_buff[63], photo_data_buff[64]);
-                    //printk("photo_data_buff-62,-63,-64: %d, %d, %d\n", photo_data_buff[photo_data_size-63], photo_data_buff[photo_data_size-64], photo_data_buff[photo_data_size-65]);
+                    //printk("photo_data_buff322,323,324,325: %d, %d, %d, %d\n", photo_data_buff[322], photo_data_buff[323], photo_data_buff[324], photo_data_buff[325]);
+                    //printk("photo_data_buff-0,-1,-2: %d, %d, %d\n", photo_data_buff[1024-0], photo_data_buff[1024-1], photo_data_buff[1024-2]);
                     
                     //int ret;
                     //fs_file_t_init(&file);
@@ -122,10 +127,10 @@ static lv_obj_t *aem_profile_photo_arc_show_create(lv_obj_t *par)
 
                     img_dsc->header.always_zero = 0;
                     img_dsc->header.reserved = 0;
-                    img_dsc->header.w = 360; //图片宽
-                    img_dsc->header.h = 360; //图片高
+                    img_dsc->header.w = DEF_UI_WIDTH; //图片宽
+                    img_dsc->header.h = DEF_UI_HEIGHT; //图片高
                     img_dsc->header.cf = LV_IMG_CF_TRUE_COLOR_ALPHA;
-                    img_dsc->data_size = LV_IMG_BUF_SIZE_TRUE_COLOR_ALPHA(360, 360);
+                    img_dsc->data_size = LV_IMG_BUF_SIZE_TRUE_COLOR_ALPHA(DEF_UI_WIDTH, DEF_UI_HEIGHT);
                     img_dsc->data = photo_data_buff;
 
                     lv_img_set_src(photo_icon, img_dsc);
@@ -240,7 +245,7 @@ void aem_profile_photo_screen_del(lv_obj_t *par)
     if (ext_data)
     {
         lv_mem_free(ext_data);
-        lv_mem_free(photo_data_buff);
+        ui_mem_res_free(photo_data_buff);
         lv_mem_free(img_dsc);
         ext_data = NULL;
         photo_data_buff = NULL;

+ 2 - 2
application/aem_watch/src/user_cfg/device_info_cfg.h

@@ -4,8 +4,8 @@
 #ifndef __DEVICE_INFO_CONFIG_H__
 #define __DEVICE_INFO_CONFIG_H__
 #define MAJOR_VERSION 1
-#define MINOR_VERSION 0
-#define MICRO_VERSION 7
+#define MINOR_VERSION 1
+#define MICRO_VERSION 0
 #define DEVICE_ID "CJ01"//3085
 #define DEVICE_NAME "Catsights"//"3085S WATCH"
 #define DEVICE_NAME_UI "Catsights"//"3085S WATCH"

+ 1 - 1
thirdparty/lib/aem/adapter/flash/aem_adapter_flash.c

@@ -201,7 +201,7 @@ uint32_t flash_read(const char *name, uint32_t offset, void *data, uint32_t size
     return AEM_ADAPTER_ERR_INVALID_DATA;
 }
 
-static uint32_t flash_erase(const char *name)
+uint32_t flash_erase(const char *name)
 {
     if (name == NULL)
     {

+ 1 - 1
thirdparty/lib/aem/config/aem_project.h

@@ -4,7 +4,7 @@
 #pragma warning(error : 4013)
 #endif
 #define AEM_VERSION "BL_Develop_NOR"
-#define BUILD_TIME "202503281835"
+#define BUILD_TIME "202504271550"
 #define AEM_GUI_FWK_LIB_VER "2.0.0.0"
 #define APP_DOWNLOAD_URL "https://customer.com"
 #define AEM_APP_TRANS_ANIMATION 1

文件差異過大導致無法顯示
+ 17 - 83
zephyr/drivers/serial/uart2_rec.c


部分文件因文件數量過多而無法顯示