debug界面添加电压电量信息,优化gsensor时间同步,优化睡眠佩戴检测上报 1392/1 1392/head
authorpenglei <1624952103@qq.com>
Tue, 12 Nov 2024 10:07:05 +0000 (18:07 +0800)
committerpenglei <1624952103@qq.com>
Tue, 12 Nov 2024 10:07:05 +0000 (18:07 +0800)
code/sdk/application/battery/service/battery_service.cpp
code/sdk/application/battery/service/battery_service.h
code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/src/AlarmClockTimerConfig.cpp
code/sdk/application/wearable/service/msg_center/include/notify/debug_output_notification/debug_output_notification.h
code/sdk/application/wearable/service/msg_center/src/notify/debug_output_notification/debug_output_notification.cpp
code/sdk/drivers/peripheral/cywee/src/main_dml.c
code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c
code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.c
code/sdk/drivers/peripheral/ppg/service/ppg_service.cpp
code/sdk/drivers/peripheral/utils/custom_fileoperate_service.c
code/sdk/drivers/peripheral/utils/custom_utils.h

index 47a43d0..ac35b0e 100644 (file)
@@ -96,6 +96,58 @@ static void battery_check_timer_callback(void* data);
 errcode_t charger_plug_event_notify(uint8_t plugged);
 errcode_t charger_plug_event_ui_sendmsg_toUI(uint8_t plugged);
 
+
+static BATTERY_DATA_T *bat_t;
+static uint32_t len = 0;
+
+void battery_get_data_t(BATTERY_DATA_T **data,uint16_t *length)
+{
+    if(!len)
+        return;
+    *length = len;
+    *data = (BATTERY_DATA_T *)malloc(len);
+    memcpy_s(*data,len,bat_t,len);
+    free(bat_t);
+}
+
+void battery_get_data(void)   
+{
+    len = uapi_get_file_size("/user/userdata/battery_data.bin");
+    if(!len)
+      return;
+
+    bat_t = (BATTERY_DATA_T *)malloc(len);
+    FILE *fp;
+
+    fp = fopen("/user/userdata/battery_data.bin", "rb"); 
+    if (fp == NULL) 
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "battery_data file open failed");
+        free(bat_t);
+        return;
+    }
+
+    if(fread(bat_t, 1, len, fp) != len)
+    {
+        free(bat_t);
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "battery_data file read failed");
+    }
+    fclose(fp);
+}
+
+//保存电池信息到文件
+void battery_save_data(void)
+{
+    BATTERY_DATA_T data;
+    float voltage;
+    uint8_t percent = batteryservice_get_voltage(&voltage);
+    data.voltage = voltage;
+    data.percent = percent;
+    uapi_get_timestampe_ss(&data.tm);
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "data.voltage : %f , data[i].percent : %d  tm : %d",data.voltage,data.percent,data.tm);
+    uapi_save_file_data("user/userdata/battery_data.bin",(uint8_t *)&data,sizeof(BATTERY_DATA_T),"ab");
+}
+
 //保存电量到文件
 static void battery_save_percent(void)
 {
index d96ced7..b3328cb 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: penglei 1624952103@qq.com
  * @Date: 2024-10-25 14:42:28
  * @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2024-11-01 17:44:34
+ * @LastEditTime: 2024-11-12 11:10:16
  * @FilePath: /FD230/code/sdk/application/battery/service/battery_service.h
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -27,6 +27,15 @@ extern "C" {
 #include "stdint.h"
 #include "errcode.h"
 
+#pragma pack(1)
+typedef struct
+{
+    uint32_t tm;
+    float voltage; //电压
+    uint8_t percent;// 电量
+}BATTERY_DATA_T;
+#pragma pack()
+
 
 #define BATTERY_CMD_SAVE_PERCENT 0x16
 #define BATTERY_CMD_START_AGING_TEST 0x17
@@ -49,6 +58,10 @@ uint8_t battery_get_percent_onstart(void);
 //0 停止充电 , 1 低电流充电, 2 正常电流充电
 int get_charge_current_status(void);
 uint8_t get_02c_value(void);
+void battery_get_data(void);
+void battery_save_data(void);
+void battery_get_data_t(BATTERY_DATA_T **data,uint16_t *length);
+
 #ifdef __cplusplus
 #if __cplusplus
 }
index 3d08cba..7f3d684 100644 (file)
@@ -78,6 +78,7 @@ extern "C"
     static int drinkremind_expectedTime = 0;\r
     static int sleep_notify_time_min = 0;\r
     static int sleep_notify_time_hour = 0;\r
+    static int time_sync_flag = 0;\r
 \r
     // #define SEDENTARY_TIME_RANGE (((curTime.tm_hour > sedentary_start_hour) || (curTime.tm_hour == sedentary_start_hour && curTime.tm_min >= sedentary_start_min)) && \\r
 //                               ((curTime.tm_hour < sedentary_stop_hour) || (curTime.tm_hour == sedentary_stop_hour && curTime.tm_min < sedentary_stop_min)))\r
@@ -368,6 +369,11 @@ extern "C"
             do_cywee_service_check_msg(CYWEE_SERVICE_CMD_CHECK_ACC,NULL); //一分钟检查一次gsensor是否停止\r
         }\r
 \r
+        if(curTime.tm_min % 10 == 0 && curTime.tm_sec == 0)\r
+        {\r
+            do_custom_fileoperate_service_check_msg(CUSTOM_FILEOPERATE_MSG_TYPE_BATTERY_DATA_SAVE, nullptr, 0); //十分钟存一次电池信息\r
+        }\r
+\r
         if (g_alarmCtrA.state == ALARM_STATUS_RUNNING)\r
         {\r
             WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Checking Alarm A");\r
@@ -490,6 +496,16 @@ extern "C"
                     AlarmEventPublish(TOPIC_EVENT_SLEEPNOTE,  NULL, 0);  \r
                 }\r
             }\r
+            if ((curTime->tm_hour == wake_time_hour && curTime->tm_min == wake_time_min + 1 && curTime->tm_sec == 0) ||\r
+                (curTime->tm_hour == sleep_time_hour && curTime->tm_min == sleep_time_min + 1 && curTime->tm_sec == 0))\r
+            {\r
+                uapi_cywee_time_sync();\r
+            }\r
+            else if(!time_sync_flag && curTime->tm_min)\r
+            {\r
+                time_sync_flag = 1;\r
+                uapi_cywee_time_sync();\r
+            }\r
             // 退出睡眠检测模式并进入小睡检测模式\r
             if (!is_time_range(*curTime, sleep_time_hour, sleep_time_min, wake_time_hour, wake_time_min) && (uapi_dev_runtime_get_nap_monitoring_status() == 0))\r
             {\r
index a48baba..9fc759a 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-10-02 14:12:12
  * @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2024-11-11 15:03:39
+ * @LastEditTime: 2024-11-12 10:27:28
  * @FilePath: /FD230/code/sdk/application/wearable/service/msg_center/include/notify/debug_output_notification.h
  */
 #ifndef DEBUG_OUTPUT_NOTIFICATION_H
@@ -41,6 +41,7 @@ namespace OHOS
         std::string get_shutdown_info(void);
         std::string get_sleep_time(void);
         std::string get_wear_status(void);
+        std::string get_battery_percent(void);
         std::string get_free_memory(void);
         std::string get_nextday_log(void);
         std::string get_heart_rate(void);
index 0946b3b..d59ff94 100644 (file)
@@ -153,6 +153,8 @@ namespace OHOS
         debugOutputItemInfo[index++] = {index, "vote_service_status"};
         // 佩戴状态
         debugOutputItemInfo[index++] = {index, "wear_status"};
+        // 电量信息
+        debugOutputItemInfo[index++] = {index, "battery_percent"};
         usedLen = index;
         /* -------------------------------- Add data -------------------------------- */
         for (uint8_t i = 0; i < usedLen; i++)
@@ -456,6 +458,51 @@ namespace OHOS
         return get_wear_status_str(); // 返回结果字符串  
     } 
 
+    // 获取佩戴状态  
+    std::string DebugOutputViewEventListener::get_battery_percent(void) 
+    {
+        std::string result;
+        // 进行文件读取
+        do_custom_fileoperate_service_check_msg(  
+            CUSTOM_FILEOPERATE_MSG_TYPE_BATTERY_DATA_READ, nullptr, 0);  
+        LOS_Msleep(100); // 等待文件系统准备  
+        BATTERY_DATA_T *data = NULL;
+        uint16_t len = 0;
+        battery_get_data_t(&data,&len);
+        if(len == 0)
+            return result;
+
+        for(int i = 0; i < len/sizeof(BATTERY_DATA_T); i++)
+        {
+            std::string timestr;
+            char labelTime[20] = {0};
+
+            if (uapi_get_TIME_STR(data[i].tm, labelTime, '.', ':', DATE_Y_M_D_H_M) != ERRCODE_SUCC)  
+            {  
+                timestr = "--";  
+            }  
+            else  
+            {  
+                timestr = labelTime;  
+            } 
+
+            std::ostringstream oss;
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "data[i].voltage : %f , data[i].percent : %d",data[i].voltage,data[i].percent);
+
+            oss << std::fixed
+            << std::setprecision(3) // 设置为固定小数位,保留两位小数
+            <<"["<<timestr<< "] :\n"
+            << data[i].voltage << " V, "
+            << static_cast<int>(data[i].percent)
+            << "%\n";
+
+            result += oss.str();
+            // result += std::to_string(i*10) + " min  , " + std::to_string(data[i].voltage) + "V , "+ std::to_string(data[i].percent) + "%" + "\n";
+        }
+        free(data);
+        return result; // 返回结果字符串  
+    } 
+
     // 获取系统free内存
     std::string DebugOutputViewEventListener::get_free_memory()
     {
@@ -725,6 +772,9 @@ namespace OHOS
         case 15:
             str = get_wear_status();
             break;
+        case 16:
+            str = get_battery_percent();
+            break;
         default:
             str = "--";
             break;
index 9c25a57..c49b719 100644 (file)
@@ -768,9 +768,9 @@ void cywee_time_sync(void)
 
     time(&rawtime);
     timeinfo = localtime(&rawtime);
-    // CWM_OS_dbgPrintf("cywee_time_sync : year[%d], mon[%d], day[%d], hour[%d], min[%d], sec[%d] \r\n",
-    // timeinfo->tm_year+1900,timeinfo->tm_mon+1,timeinfo->tm_mday,
-    // timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec);
+    CWM_OS_dbgPrintf("cywee_time_sync : year[%d], mon[%d], day[%d], hour[%d], min[%d], sec[%d] \r\n",
+    timeinfo->tm_year+1900,timeinfo->tm_mon+1,timeinfo->tm_mday,
+    timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec);
 
     current_year = timeinfo->tm_year+1900;
 
@@ -864,7 +864,7 @@ void activity_mode_setstatus(int cmd)
 
 void cywee_inactivity_mode_change(int mode)
 {
-    cywee_time_sync();
+    // cywee_time_sync();
     switch (mode)
     {
         //无作用
index c635fa6..e670d4b 100644 (file)
@@ -2947,9 +2947,9 @@ void hx3695_hrs_ppg_Int_handle(void)
     {\r
         if(hrsresult.hr_living == MSG_LIVING_TRUE)\r
         {\r
+            cywee_wear_status = 1;\r
             if(hrsresult.lastesthrs > 30 && hrsresult.lastesthrs < 220)\r
                            get_avg_hrs(hrsresult.lastesthrs);\r
-            cywee_wear_status = 1;\r
         }\r
         else\r
         {\r
index 4c34ab2..0e4ed0e 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: penglei 1624952103@qq.com
  * @Date: 2024-03-13 15:08:38
  * @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2024-09-06 14:14:16
+ * @LastEditTime: 2024-11-12 18:05:23
  * @FilePath: /FD230/code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.c
  * @Description: 
  * 
@@ -76,6 +76,11 @@ void ppg_send_cmd_to_driver(char* mode, uint8_t enable)
         {
 #ifdef HRS_ALG_LIB   
             hx3695_hrs_disable();
+            if(uapi_dev_runtime_get_sleep_monitoring_status() && uapi_dev_runtime_get_hrs_passivity_flag())//处于睡眠监测 且在心率周期检测期间 上报活体佩戴 
+            {
+                hx3695_wearstatus_update();   
+                uapi_dev_runtime_set_hrs_passivity(0);//清除被动检测runtime     
+            }
 #endif
         }else  if(md == HRV_MODE)
         {
index ec63f48..e32fdca 100644 (file)
@@ -319,14 +319,6 @@ static void ppg_service_check_task(void  *arg)
             enable = 0;
             wear_mode_state = 0;
         }else if (mail == PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST){
-            //do_cywee_service_check_msg(CYWEE_SERVICE_CMD_CLOSE_GET_ACC,NULL);
-            //PRINT("uapi_dev_runtime_get_sleep_monitoring_status : %d \n",uapi_dev_runtime_get_sleep_monitoring_status());
-            //PRINT("uapi_dev_runtime_get_hrs_passivity_flag : %d \n",uapi_dev_runtime_get_hrs_passivity_flag());
-            if(uapi_dev_runtime_get_sleep_monitoring_status() && uapi_dev_runtime_get_hrs_passivity_flag())//处于睡眠监测 且在心率周期检测期间 上报活体佩戴 
-            {
-                hx3695_wearstatus_update();   
-                uapi_dev_runtime_set_hrs_passivity(0);//清除被动检测runtime     
-            }
             cmd = "hrs";
             enable = 0;
             uint8_t cnt = pm_veto_get_id_cnt(PM_ID_HEART);
index 32a02c4..8b50c54 100644 (file)
@@ -183,7 +183,14 @@ static void custom_fileoperate_service_check_task(void const *arg)
             cywee_custom_save_wear_data();
             break;
 
-        default:
+        case CUSTOM_FILEOPERATE_MSG_TYPE_BATTERY_DATA_READ:
+            battery_get_data();
+            break;
+
+        case CUSTOM_FILEOPERATE_MSG_TYPE_BATTERY_DATA_SAVE:
+            battery_save_data();
+            break;
+
             PRINT("Unknown CUSTOM_FILE_OPERATE_MSG cmd 0x%02X \r\n", mail.cmd);
             break;
         }
index 5ffcb47..fdcf518 100644 (file)
@@ -280,8 +280,11 @@ errcode_t do_custom_cmd_service_check_msg_head(int cmd, void *params, int paraml
 #define CUSTOM_FILEOPERATE_MSG_TYPE_AGING_DATA_SAVE 0x10 //存储老化数据
 #define CUSTOM_FILEOPERATE_MSG_TYPE_POPUP_WINDOWS_DATA_LIST 0x11 //存储弹窗数据
 
-#define CUSTOM_FILEOPERATE_MSG_TYPE_WEAR_DATA_READ 0x12 //读取老化数据
-#define CUSTOM_FILEOPERATE_MSG_TYPE_WEAR_DATA_SAVE 0x13 //存储老化数据
+#define CUSTOM_FILEOPERATE_MSG_TYPE_WEAR_DATA_READ 0x12 //读取佩戴数据
+#define CUSTOM_FILEOPERATE_MSG_TYPE_WEAR_DATA_SAVE 0x13 //存储佩戴数据
+
+#define CUSTOM_FILEOPERATE_MSG_TYPE_BATTERY_DATA_READ 0x14 //读取电池数据
+#define CUSTOM_FILEOPERATE_MSG_TYPE_BATTERY_DATA_SAVE 0x15 //存储电池数据
 
 errcode_t uapi_custom_fileoperate_service_init(void);
 errcode_t do_custom_fileoperate_service_check_msg(int cmd, void *params, int paramlen);