优化睡眠状态下误判为未佩戴的情况。
authorpenglei <1624952103@qq.com>
Sat, 19 Oct 2024 10:57:39 +0000 (18:57 +0800)
committerpenglei <1624952103@qq.com>
Sat, 19 Oct 2024 10:57:39 +0000 (18:57 +0800)
修改小睡佩戴检测Timer为1分钟,优化小睡入睡时间计算。
添加tar文件内存管理。

code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartModel.cpp
code/sdk/drivers/peripheral/ppg/hx3695/tyhx_hrs_custom.h
code/sdk/drivers/peripheral/utils/custom_utils.c

index b42dca9..81ef446 100644 (file)
@@ -630,6 +630,8 @@ void HeartModel::UpHeartdata(uint16_t heart) {
   if (uapi_dev_runtime_get_train_status() == 1)\r
     return;\r
 \r
+  int max_valid_count = 0;\r
+\r
   if (heart != 0) {\r
     if (display_counter_ >= DISPLAY_COUNT) {\r
       displayheart = heart;\r
@@ -666,7 +668,12 @@ void HeartModel::UpHeartdata(uint16_t heart) {
   }\r
 \r
   // 检查无效计数器是否达标\r
-  if (disvalid_counter_ >= MAX_DISVALID_HRS_COUNT) {\r
+  if(uapi_dev_runtime_get_sleep_monitoring_status()) //睡眠监测模式下,增加未佩戴个数最大值,避免误判\r
+      max_valid_count = MAX_DISVALID_HRS_COUNT * 2;\r
+  else\r
+      max_valid_count = MAX_DISVALID_HRS_COUNT;\r
+      \r
+  if (disvalid_counter_ >= max_valid_count) {\r
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,\r
                   "检测结果:无效数达标 disvalid_counter:%d", disvalid_counter_);\r
     SetResult(HeartResult::INVALID_DATA); // 标记为无效数据\r
index 35bfef2..b9f6bbd 100644 (file)
@@ -8,7 +8,7 @@
  * @Author: penglei 1624952103@qq.com
  * @Date: 2024-03-26 20:29:58
  * @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2024-09-05 19:04:40
+ * @LastEditTime: 2024-10-19 18:54:33
  * @FilePath: /FD230/code/sdk/drivers/peripheral/ppg/hx3695/tyhx_hrs_custom.h
  * @Description: 
  * 
@@ -77,7 +77,7 @@ uint32_t tyhx_read_regs( uint8_t reg_addr,uint8_t *readbuf,uint16_t readlen);
 
 #define TYHX_TIMER_40MS 40
 #define TYHX_TIMER_320MS 320
-#define TYHX_TIMER_5000MS 1000 * 60 * 5 //纯佩戴修改为5分钟
+#define TYHX_TIMER_5000MS 1000 * 60 //纯佩戴修改为1分钟 优化小睡入睡时间计算
 //#define TYHX_TIMER_5000MS 5000
 
 bool tyhx_timer_start(uint32_t ms);
index eacf76a..9077ee8 100644 (file)
@@ -1893,6 +1893,53 @@ int uapi_delete_files(const char *file_path)
     }
         
 }
+
+void uapi_check_tar_file_count(char *folderpath)
+{
+    DIR *dir;
+    struct dirent *entry;
+    uint8_t count = 0;
+    uint32_t old_tm,new_tm;
+    char old_tm_str[11] = {0};
+    char new_tm_str[11] = {0};
+    char old_file_name[64] = {0};
+
+    dir = opendir(folderpath);
+    if (dir == NULL) 
+    {
+        PRINT("open %s failed \n",folderpath);
+        return;
+    }
+    while ((entry = readdir(dir))!= NULL) //遍历tar文件找到时间戳最老的文件名
+    {
+        if (strstr(entry->d_name, ".tar")!= NULL) 
+        {
+            count++;
+            strncpy(new_tm_str, entry->d_name + strlen(entry->d_name) - 14, 10);
+            new_tm_str[10] = '\0';
+            new_tm = (uint32_t)strtoul(new_tm_str, NULL, 10);
+            if (old_tm == 0 || old_tm > new_tm) 
+            {
+                old_tm = new_tm;
+                memset(old_file_name,0,sizeof(old_file_name));
+                memcpy_s(old_file_name,sizeof(old_file_name),entry->d_name,strlen(entry->d_name));
+            }
+        }
+    }
+    
+
+    closedir(dir);
+    if (count > 5)  //文件数量超过5个则删掉最老的文件
+    {
+        char filePath[256];
+        snprintf(filePath, sizeof(filePath), "%s/%s", folderpath, old_file_name);
+        if (remove(filePath) == 0)
+            PRINT("delete %s succed\n", filePath);
+        else 
+            PRINT("delete %s failed\n", filePath);
+    }
+}
+
 #define  MAX_TAR_READ_BUF  1024
 int uapi_tar_file(const char *src_path,const char *tar_path,char *tarfilename)
 {
@@ -1996,6 +2043,10 @@ int uapi_tar_file(const char *src_path,const char *tar_path,char *tarfilename)
         remove(str);
         return -1;
     }
+    else
+    {
+        uapi_check_tar_file_count("/user/tar"); //有新的tar文件生成则检查tar文件数量
+    }
     free(buffer);
     return ret;
 }
@@ -3616,21 +3667,6 @@ void uapi_custom_set_uart_rx_enable_flag(bool enable_uart)
 }
 
 
-#define SLEEP_FLAG_PATH "/user/userdata/sleep_flag.bin"
-
-void uapi_save_sleep_flag(uint8_t *data,uint16_t len)
-{
-    if(access(SLEEP_FLAG_PATH, F_OK) == -1)
-        uapi_save_file_data(SLEEP_FLAG_PATH,data,len,"wb");
-    else
-        uapi_save_file_data(SLEEP_FLAG_PATH,data,len,"ab");
-}
-
-void uapi_clean_sleep_flag(void)
-{
-    uapi_delete_files(SLEEP_FLAG_PATH);
-}
-
 
 errcode_t touch_resume_in_cmd_queue(void)
 {