From 91ea31d682b82fff9223ab7dc3a97d2cb46f683a Mon Sep 17 00:00:00 2001 From: penglei <1624952103@qq.com> Date: Tue, 12 Nov 2024 18:07:05 +0800 Subject: [PATCH] =?utf8?q?debug=E7=95=8C=E9=9D=A2=E6=B7=BB=E5=8A=A0?= =?utf8?q?=E7=94=B5=E5=8E=8B=E7=94=B5=E9=87=8F=E4=BF=A1=E6=81=AF=EF=BC=8C?= =?utf8?q?=E4=BC=98=E5=8C=96gsensor=E6=97=B6=E9=97=B4=E5=90=8C=E6=AD=A5?= =?utf8?q?=EF=BC=8C=E4=BC=98=E5=8C=96=E7=9D=A1=E7=9C=A0=E4=BD=A9=E6=88=B4?= =?utf8?q?=E6=A3=80=E6=B5=8B=E4=B8=8A=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../battery/service/battery_service.cpp | 52 +++++++++++++++++++ .../battery/service/battery_service.h | 15 +++++- .../src/AlarmClockTimerConfig.cpp | 16 ++++++ .../debug_output_notification.h | 3 +- .../debug_output_notification.cpp | 50 ++++++++++++++++++ .../drivers/peripheral/cywee/src/main_dml.c | 8 +-- .../drivers/peripheral/ppg/hx3695/hx3695.c | 2 +- .../peripheral/ppg/hx3695/hx3695_hal.c | 7 ++- .../peripheral/ppg/service/ppg_service.cpp | 8 --- .../utils/custom_fileoperate_service.c | 9 +++- .../drivers/peripheral/utils/custom_utils.h | 7 ++- 11 files changed, 158 insertions(+), 19 deletions(-) diff --git a/code/sdk/application/battery/service/battery_service.cpp b/code/sdk/application/battery/service/battery_service.cpp index 47a43d010..ac35b0ed3 100644 --- a/code/sdk/application/battery/service/battery_service.cpp +++ b/code/sdk/application/battery/service/battery_service.cpp @@ -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) { diff --git a/code/sdk/application/battery/service/battery_service.h b/code/sdk/application/battery/service/battery_service.h index d96ced764..b3328cbb6 100644 --- a/code/sdk/application/battery/service/battery_service.h +++ b/code/sdk/application/battery/service/battery_service.h @@ -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 } diff --git a/code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/src/AlarmClockTimerConfig.cpp b/code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/src/AlarmClockTimerConfig.cpp index 3d08cbae7..7f3d68478 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/src/AlarmClockTimerConfig.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/src/AlarmClockTimerConfig.cpp @@ -78,6 +78,7 @@ extern "C" static int drinkremind_expectedTime = 0; static int sleep_notify_time_min = 0; static int sleep_notify_time_hour = 0; + static int time_sync_flag = 0; // #define SEDENTARY_TIME_RANGE (((curTime.tm_hour > sedentary_start_hour) || (curTime.tm_hour == sedentary_start_hour && curTime.tm_min >= sedentary_start_min)) && \ // ((curTime.tm_hour < sedentary_stop_hour) || (curTime.tm_hour == sedentary_stop_hour && curTime.tm_min < sedentary_stop_min))) @@ -368,6 +369,11 @@ extern "C" do_cywee_service_check_msg(CYWEE_SERVICE_CMD_CHECK_ACC,NULL); //一分钟检查一次gsensor是否停止 } + if(curTime.tm_min % 10 == 0 && curTime.tm_sec == 0) + { + do_custom_fileoperate_service_check_msg(CUSTOM_FILEOPERATE_MSG_TYPE_BATTERY_DATA_SAVE, nullptr, 0); //十分钟存一次电池信息 + } + if (g_alarmCtrA.state == ALARM_STATUS_RUNNING) { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Checking Alarm A"); @@ -490,6 +496,16 @@ extern "C" AlarmEventPublish(TOPIC_EVENT_SLEEPNOTE, NULL, 0); } } + if ((curTime->tm_hour == wake_time_hour && curTime->tm_min == wake_time_min + 1 && curTime->tm_sec == 0) || + (curTime->tm_hour == sleep_time_hour && curTime->tm_min == sleep_time_min + 1 && curTime->tm_sec == 0)) + { + uapi_cywee_time_sync(); + } + else if(!time_sync_flag && curTime->tm_min) + { + time_sync_flag = 1; + uapi_cywee_time_sync(); + } // 退出睡眠检测模式并进入小睡检测模式 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)) { diff --git a/code/sdk/application/wearable/service/msg_center/include/notify/debug_output_notification/debug_output_notification.h b/code/sdk/application/wearable/service/msg_center/include/notify/debug_output_notification/debug_output_notification.h index a48baba48..9fc759a45 100644 --- a/code/sdk/application/wearable/service/msg_center/include/notify/debug_output_notification/debug_output_notification.h +++ b/code/sdk/application/wearable/service/msg_center/include/notify/debug_output_notification/debug_output_notification.h @@ -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); diff --git a/code/sdk/application/wearable/service/msg_center/src/notify/debug_output_notification/debug_output_notification.cpp b/code/sdk/application/wearable/service/msg_center/src/notify/debug_output_notification/debug_output_notification.cpp index 0946b3bf2..d59ff94e1 100644 --- a/code/sdk/application/wearable/service/msg_center/src/notify/debug_output_notification/debug_output_notification.cpp +++ b/code/sdk/application/wearable/service/msg_center/src/notify/debug_output_notification/debug_output_notification.cpp @@ -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) // 设置为固定小数位,保留两位小数 + <<"["<(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; diff --git a/code/sdk/drivers/peripheral/cywee/src/main_dml.c b/code/sdk/drivers/peripheral/cywee/src/main_dml.c index 9c25a5730..c49b71924 100644 --- a/code/sdk/drivers/peripheral/cywee/src/main_dml.c +++ b/code/sdk/drivers/peripheral/cywee/src/main_dml.c @@ -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) { //无作用 diff --git a/code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c b/code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c index c635fa6a6..e670d4b96 100644 --- a/code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c +++ b/code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c @@ -2947,9 +2947,9 @@ void hx3695_hrs_ppg_Int_handle(void) { if(hrsresult.hr_living == MSG_LIVING_TRUE) { + cywee_wear_status = 1; if(hrsresult.lastesthrs > 30 && hrsresult.lastesthrs < 220) get_avg_hrs(hrsresult.lastesthrs); - cywee_wear_status = 1; } else { diff --git a/code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.c b/code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.c index 4c34ab239..0e4ed0e77 100644 --- a/code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.c +++ b/code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.c @@ -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) { diff --git a/code/sdk/drivers/peripheral/ppg/service/ppg_service.cpp b/code/sdk/drivers/peripheral/ppg/service/ppg_service.cpp index ec63f487e..e32fdca60 100644 --- a/code/sdk/drivers/peripheral/ppg/service/ppg_service.cpp +++ b/code/sdk/drivers/peripheral/ppg/service/ppg_service.cpp @@ -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); diff --git a/code/sdk/drivers/peripheral/utils/custom_fileoperate_service.c b/code/sdk/drivers/peripheral/utils/custom_fileoperate_service.c index 32a02c4af..8b50c542a 100644 --- a/code/sdk/drivers/peripheral/utils/custom_fileoperate_service.c +++ b/code/sdk/drivers/peripheral/utils/custom_fileoperate_service.c @@ -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; } diff --git a/code/sdk/drivers/peripheral/utils/custom_utils.h b/code/sdk/drivers/peripheral/utils/custom_utils.h index 5ffcb47c7..fdcf518a9 100644 --- a/code/sdk/drivers/peripheral/utils/custom_utils.h +++ b/code/sdk/drivers/peripheral/utils/custom_utils.h @@ -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); -- 2.17.1