优化运动模式心率出值速度,关闭指南针界面翻腕灭屏
authorpenglei <1624952103@qq.com>
Thu, 26 Sep 2024 13:26:32 +0000 (21:26 +0800)
committerpenglei <1624952103@qq.com>
Thu, 26 Sep 2024 13:26:32 +0000 (21:26 +0800)
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingModel.h
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp
code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h
code/sdk/drivers/peripheral/cywee/service/cywee_service.c
code/sdk/drivers/peripheral/cywee/src/main_dml.c
code/sdk/drivers/peripheral/mag/service/mag_service.c
code/sdk/drivers/peripheral/utils/custom_runtime.c
code/sdk/drivers/peripheral/utils/custom_runtime.h

index 2231fc5..617fd1f 100644 (file)
@@ -240,6 +240,7 @@ namespace OHOS
         // 训练数据相关配置
         void AnalysisData(cywee_activity_result_t *cyweeInfo);                 /*解析传输过来的数据*/
         void AnalysisExtraData(cywee_activity_result_extre_info_t *cyweeInfo); /*解析运动额外数据*/
+        void AnalysisHeartData(uint8_t hrs);                                   /*解析运动心率数据*/
         SportData *GetSportdata();                                             /*获取训练数据*/
         void SetIntensity(int heart);                                          /*设置训练强度*/
         UIResourceTextId GetIntensity();                                       /*获取训练强度STR*/
index 3998ebb..9f6fae2 100644 (file)
@@ -170,6 +170,11 @@ extern "C"
             TraingModel::GetInstance()->AnalysisExtraData(cyweeInfo_ext);
             delete cyweeInfo_ext; // 释放内存
         }
+        if(request->msgId == TOPIC_EVENT_HEARTRATE_UPDATA)
+        {
+            uint8_t heart = *((u_int8_t*)(request->data)); // 进行类型转换
+            TraingModel::GetInstance()->AnalysisHeartData(heart);
+        }
         if (request->msgId == TOPIC_EVENT_BLE_TRAINING)
         {
             training_ble *traingbleInfo = new training_ble();
@@ -212,6 +217,7 @@ namespace OHOS
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingModel::~TraingModel()");
         TraingUnsubscribeTopic(TOPIC_EVENT_ACTIVITY_UPDATE); // 取消订阅
         TraingUnsubscribeTopic(TOPIC_EVENT_BLE_TRAINING);
+        TraingUnsubscribeTopic(TOPIC_EVENT_HEARTRATE_UPDATA);
         TraingUnsubscribeTopic(TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE);
     }
     TraingModel *TraingModel::GetInstance(void)
@@ -224,6 +230,7 @@ namespace OHOS
     {
         TraingSubscribeTopic(TOPIC_EVENT_ACTIVITY_UPDATE); // 进行消息订阅
         TraingSubscribeTopic(TOPIC_EVENT_BLE_TRAINING);
+        TraingSubscribeTopic(TOPIC_EVENT_HEARTRATE_UPDATA);
         TraingSubscribeTopic(TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE);
     }
     /*设置运动类型*/
@@ -488,8 +495,7 @@ namespace OHOS
             sportdata->spc = sportdata->pc;
         }
 
-        sportdata->heart = cyweeInfo->hrs;
-        SetIntensity(sportdata->heart); // 设置训练强度
+
 
         // 计算平均心率
         if (sportdata->heart > 50)
@@ -551,6 +557,12 @@ namespace OHOS
         sportdata->cdc = cyweeInfo->avg_step_freq;
         sportdata->std = cyweeInfo->avg_step_len * 100; // 前者cm 后者m
     }
+    /*分析运动心率数据*/
+    void TraingModel::AnalysisHeartData(u_int8_t hrs)
+    {
+        sportdata->heart = hrs;
+        SetIntensity(sportdata->heart); // 设置训练强度
+    }
 
     /*打印函数*/
     void TraingModel::printf_data(SportData *data)
index 61bf003..b7fb676 100644 (file)
@@ -462,7 +462,7 @@ typedef struct
     float step_length;//步幅
     int pace;//配速
     int BMR_calories;//基础卡路里
-    int hrs;//心率
+    // int hrs;//心率
     int duration;//持续时间
     int MHR_zone;//心率区间
 }cywee_activity_result_t;
index 3fb420a..0416eef 100644 (file)
@@ -71,49 +71,49 @@ void cywee_msg_callback(uint8_t msg_type, uint8_t *msg_data, int32_t msg_datalen
         switch (c_activity_result_t.activity_mode)
         {
             case SPORT_ACTIVE_MODE_NORMAL:
-                PRINT("normal mode activit_mode[%d], steps[%d], distance[%d], calories[%d], step frequency[%d], step length[%.2f], pace[%d],hrs[%d]\n",
+                PRINT("normal mode activit_mode[%d], steps[%d], distance[%d], calories[%d], step frequency[%d], step length[%.2f], pace[%d]\n",
                     c_activity_result_t.activity_mode, c_activity_result_t.steps, c_activity_result_t.distance, c_activity_result_t.calories, 
-                    c_activity_result_t.step_frequency,c_activity_result_t.step_length, c_activity_result_t.pace,  c_activity_result_t.hrs);
+                    c_activity_result_t.step_frequency,c_activity_result_t.step_length, c_activity_result_t.pace);
                 CustomEventPublish(TOPIC_EVENT_ACTIVITY_UPDATE, &c_activity_result_t, sizeof(cywee_activity_result_t));
                 break;
             case SPORT_ACTIVE_MODE_TREADMILL:
                 PRINT("CYWEE_MSG_TYPE_TREADMILL_UPDATE\r\n");
                 memcpy(&c_activity_result_t, msg_data, sizeof(cywee_activity_result_t));
-                PRINT("activit_mode[%d], steps[%d], distance[%d], calories[%d], step frequency[%d], step length[%.2f], pace[%d],hrs[%d]\n",
+                PRINT("activit_mode[%d], steps[%d], distance[%d], calories[%d], step frequency[%d], step length[%.2f], pace[%d]\n",
                     c_activity_result_t.activity_mode, c_activity_result_t.steps, c_activity_result_t.distance, c_activity_result_t.calories, 
-                    c_activity_result_t.step_frequency,c_activity_result_t.step_length, c_activity_result_t.pace, c_activity_result_t.hrs);
+                    c_activity_result_t.step_frequency,c_activity_result_t.step_length, c_activity_result_t.pace);
                 CustomEventPublish(TOPIC_EVENT_ACTIVITY_UPDATE, &c_activity_result_t, sizeof(cywee_activity_result_t));
                 break;
             case SPORT_ACTIVE_MODE_OUTDOOR_RUNNING:
                 PRINT("CYWEE_MSG_TYPE_OUTDOOR_RUNNING_UPDATE\r\n");
                 memcpy(&c_activity_result_t, msg_data, sizeof(cywee_activity_result_t));
-                PRINT("outdoor running activit_mode[%d], steps[%d], distance[%d], calories[%d], step frequency[%d], step length[%.2f], pace[%d],hrs[%d]\n",
+                PRINT("outdoor running activit_mode[%d], steps[%d], distance[%d], calories[%d], step frequency[%d], step length[%.2f], pace[%d]\n",
                     c_activity_result_t.activity_mode, c_activity_result_t.steps, c_activity_result_t.distance, c_activity_result_t.calories, 
-                    c_activity_result_t.step_frequency,c_activity_result_t.step_length, c_activity_result_t.pace, c_activity_result_t.hrs);
+                    c_activity_result_t.step_frequency,c_activity_result_t.step_length, c_activity_result_t.pace);
                 CustomEventPublish(TOPIC_EVENT_ACTIVITY_UPDATE, &c_activity_result_t, sizeof(cywee_activity_result_t));
                 break;
             case SPORT_ACTIVE_MODE_INDOOR_RUNNING:
                 PRINT("CYWEE_MSG_TYPE_INDOOR_RUNNING_UPDATE\r\n");
                 memcpy(&c_activity_result_t, msg_data, sizeof(cywee_activity_result_t));
-                PRINT("indoor running activit_mode[%d], steps[%d], distance[%d], calories[%d], step frequency[%d], step length[%.2f], pace[%d],hrs[%d]\n",
+                PRINT("indoor running activit_mode[%d], steps[%d], distance[%d], calories[%d], step frequency[%d], step length[%.2f], pace[%d]\n",
                     c_activity_result_t.activity_mode, c_activity_result_t.steps, c_activity_result_t.distance, c_activity_result_t.calories, 
-                    c_activity_result_t.step_frequency,c_activity_result_t.step_length, c_activity_result_t.pace, c_activity_result_t.hrs);
+                    c_activity_result_t.step_frequency,c_activity_result_t.step_length, c_activity_result_t.pace);
                 CustomEventPublish(TOPIC_EVENT_ACTIVITY_UPDATE, &c_activity_result_t, sizeof(cywee_activity_result_t));
                 break;
             case SPORT_ACTIVE_MODE_FITNESS_PEDOMETERR:
                 PRINT("CYWEE_MSG_TYPE_FITNESS_PEDOMETERR_UPDATE\r\n");
                 memcpy(&c_activity_result_t, msg_data, sizeof(cywee_activity_result_t));
-                PRINT("activit_mode[%d], steps[%d], distance[%d], calories[%d], step frequency[%d], step length[%.2f], pace[%d],hrs[%d]\n",
+                PRINT("activit_mode[%d], steps[%d], distance[%d], calories[%d], step frequency[%d], step length[%.2f], pace[%d]\n",
                     c_activity_result_t.activity_mode, c_activity_result_t.steps, c_activity_result_t.distance, c_activity_result_t.calories, 
-                    c_activity_result_t.step_frequency,c_activity_result_t.step_length, c_activity_result_t.pace, c_activity_result_t.hrs);
+                    c_activity_result_t.step_frequency,c_activity_result_t.step_length, c_activity_result_t.pace);
                 CustomEventPublish(TOPIC_EVENT_ACTIVITY_UPDATE, &c_activity_result_t, sizeof(cywee_activity_result_t));
                 break;
 
             case SPORT_ACTIVE_MODE_FREE_TRAINING:
                 PRINT("CYWEE_MSG_TYPE_FREE_TRAINING_UPDATE\r\n");
                 memcpy(&c_activity_result_t, msg_data, sizeof(cywee_activity_result_t));
-                PRINT("free training activit_mode[%d], calories[%d],MHR_zone[%d],hrs[%d]\n",
-                    c_activity_result_t.activity_mode, c_activity_result_t.calories, c_activity_result_t.MHR_zone,c_activity_result_t.hrs);
+                PRINT("free training activit_mode[%d], calories[%d],MHR_zone[%d]\n",
+                    c_activity_result_t.activity_mode, c_activity_result_t.calories, c_activity_result_t.MHR_zone);
                 CustomEventPublish(TOPIC_EVENT_ACTIVITY_UPDATE, &c_activity_result_t, sizeof(cywee_activity_result_t));
                 break;
             default:
index e8b78d0..ceda6f6 100644 (file)
@@ -17,6 +17,7 @@
 #include "sys/time.h"
 #include "time.h"
 #include "ConfigModelC.h"
+#include "battery_hal.h"
 
 #define AP_ENABLE_DML_SDO_LISTEN
 
@@ -36,7 +37,7 @@ static uint8_t cywee_installized = 0 ;
 
 CustomSensorData csd;
 
-static uint8_t hrs = 0;
+// static uint8_t hrs = 0;
 
 uint8_t hrs_mode_state = 0;
 
@@ -451,11 +452,11 @@ void cywee_time_sync(void)
 
 void cywee_hrs_update(int hrs_data)
 {
-    hrs = hrs_data;
-    CWM_OS_dbgPrintf("hrs : %d\r\n",hrs);
+    // hrs = hrs_data;
+    CWM_OS_dbgPrintf("hrs_data : %d\r\n",hrs_data);
     memset(&csd, 0, sizeof(CUSTOM_HEARTRATE));
     csd.sensorType = CUSTOM_HEARTRATE;
-    csd.fData[0] = hrs;
+    csd.fData[0] = hrs_data;
     CWM_CustomSensorInput(&csd); 
 }
 
@@ -470,11 +471,21 @@ void cywee_oncharging_update(int oncharging_status)
 
 void cywee_wearstatus_update(int wearstatus)
 {
+#if 1
     memset(&csd, 0, sizeof(CUSTOM_OFFBODY_DETECT));
     csd.sensorType = CUSTOM_OFFBODY_DETECT;
     csd.fData[0] = wearstatus;
     CWM_CustomSensorInput(&csd);
     CWM_OS_dbgPrintf("111wearstatus : %d\r\n",wearstatus);
+
+    if(uapi_dev_runtime_get_sleep_monitoring_status())
+    {
+        SLEEP_FLAG_T sleep_flag_t;
+        sleep_flag_t.stat = 16 + wearstatus;
+        uapi_get_timestampe_ss(&sleep_flag_t.timestamp);
+        uapi_save_sleep_flag(&sleep_flag_t,sizeof(SLEEP_FLAG_T));
+    }
+#endif
 }
 
 //0:resume , 1:pause
@@ -677,7 +688,7 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) {
     cywee_inactivity_result_t c_inactivity_result_t;
     cywee_inactivity_accumulate_time_t c_inactivity_accumulate_time_t;
     cywee_activity_result_extre_info_t c_activity_result_extre_info_t;
-    
+    SLEEP_FLAG_T sleep_flag_t;
     switch (sensorEVT->sensorType) {
         case IDX_ACCEL:
         gxyz_t.x = sensorEVT->fData[0];
@@ -746,13 +757,17 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) {
             if ((int)sensorEVT->fData[1] == 2)
             {
             #if defined(SUPPORT_POWER_MANAGER)
-                CWM_OS_dbgPrintf("[cwyee] turn_off_screen");
+
+            if(!uapi_dev_runtime_get_mmc_status_flag()) //非指南针界面 才开启翻腕灭屏
+            {   
+                CWM_OS_dbgPrintf("[cwyee] turn_off_screen \n");
                 mmi_screen_on_off_by_flip_wrist(false);
+            }
             #endif
             }else if ((int)sensorEVT->fData[1] == 1)
             {
             #if defined(SUPPORT_POWER_MANAGER)
-                CWM_OS_dbgPrintf("[cwyee] turn_on_screen");
+                CWM_OS_dbgPrintf("[cwyee] turn_on_screen \n");
                 mmi_screen_on_off_by_flip_wrist(true);  
             #endif
             }
@@ -790,7 +805,7 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) {
                 {
                     send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_PPG_TEST);
                     hrs_mode_state = 1;
-                    hrs = 0;//运动开始,清零心率
+                    // hrs = 0;//运动开始,清零心率
                 }
                 else
                 {
@@ -847,8 +862,7 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) {
                 /*保存睡眠状态*/
                 if(c_inactivity_result_t.status >= 6 && c_inactivity_result_t.status <= 13)
                 {
-                    SLEEP_FLAG_T sleep_flag_t = {0,0};
-                    uapi_get_timestampe_ss(sleep_flag_t.timestamp);
+                    uapi_get_timestampe_ss(&sleep_flag_t.timestamp);
                     sleep_flag_t.stat = c_inactivity_result_t.status;
                     uapi_save_sleep_flag(&sleep_flag_t,sizeof(SLEEP_FLAG_T));
                 }
@@ -939,8 +953,8 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) {
                 c_activity_result_t.calories = (int)sensorEVT->fData[1];
                 c_activity_result_t.duration = (int)sensorEVT->fData[5];
                 c_activity_result_t.MHR_zone = (int)sensorEVT->fData[6];
-                c_activity_result_t.hrs = hrs;
-                hrs = 0; //每次上报完 清除心率值
+                // c_activity_result_t.hrs = hrs;
+                // hrs = 0; //每次上报完 清除心率值
                 cywee_func(CYWEE_MSG_TYPE_ACTIVITY_UPDATE,&c_activity_result_t,sizeof(cywee_activity_result_t));
 
             }else if((int)sensorEVT->fData[0] == 102)
@@ -959,8 +973,8 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) {
                 c_activity_result_t.step_frequency = (int)sensorEVT->fData[5];
                 c_activity_result_t.step_length = (float)sensorEVT->fData[6];
                 c_activity_result_t.pace = (int)(sensorEVT->fData[7] * 60);
-                c_activity_result_t.hrs = hrs;
-                hrs = 0; //每次上报完 清除心率值
+                // c_activity_result_t.hrs = hrs;
+                // hrs = 0; //每次上报完 清除心率值
                 cywee_func(CYWEE_MSG_TYPE_ACTIVITY_UPDATE,&c_activity_result_t,sizeof(cywee_activity_result_t));
                 CustomEventPublish(TOPIC_EVENT_STEPDATA_UPDATE,&stepcount,sizeof(int)); 
             }
@@ -987,6 +1001,9 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) {
                 uapi_get_timestampe_ss(&abs_static_timestampe);
                 if((abs_static_timestampe - asleep_timestampe) >= 60 * 90)
                 {
+                    sleep_flag_t.stat = 15;
+                    sleep_flag_t.timestamp = abs_static_timestampe;
+                    uapi_save_sleep_flag(&sleep_flag_t,sizeof(SLEEP_FLAG_T));
                     uapi_dev_runtime_set_absolute_static_status(1);
                     cywee_get_sleep_data(1);
                 }  
@@ -1393,6 +1410,8 @@ int cywee_main_dml(void)
     cywee_set_user_info();
 
     cywee_activity_mode_change(SPORT_ACTIVE_MODE_NORMAL);
+
+    cywee_oncharging_update(get_charge_stat()); //初始化时检查充电状态
     //cywee_inactivity_mode_change(INACTIVITY_MODE_SEDENTARY_AND_NAP);
 
     //cywee_inactivity_mode_change(INACTIVITY_MODE_SLEEPING);
index 52696fb..1730b9a 100644 (file)
@@ -71,6 +71,7 @@ static bool g_batter_service_initialled = false;
 
 #include "mmc_customer.h"
 #include "custom_utils.h"
+#include "custom_runtime.h"
 /***
  * 其他cmd在Header里定义,对外开放
 */
@@ -161,12 +162,14 @@ static void mag_service_check_task(void const *arg)
             // MMC_LOG("MAG_SERVICE_CMD_TIMER_CHECK\r\n");
             mmc5603_check();
         }else if (mail.comm.app == MAG_SERVICE_CMD_START_CHECK){
+            uapi_dev_runtime_set_mmc_status(1);
             mmc5603_start();
             LOS_Mdelay(20);
             mag_service_running_stat = true;
             // uapi_pm_add_sleep_veto(PM_ID_SCREEN);
             mag_service_timer_start_check(MAG_CHECK_MS);
         }else if (mail.comm.app == MAG_SERVICE_CMD_STOP_CHECK){
+            uapi_dev_runtime_set_mmc_status(0);
             SavePara_infile();
             mag_service_running_stat = false;
             osTimerStop(g_mag_service_timer);
index c138258..914c784 100644 (file)
@@ -85,6 +85,7 @@ typedef struct
     uint8_t checkres_status;//校验文件状态
     uint8_t repair_download_status;//升级下载状态
     uint8_t hrs_passivity_status;//获取被动心率检测状态
+    uint8_t mmc_status; //是否为指南针页面
 } runtime_status_t;
 
 
@@ -448,4 +449,15 @@ void uapi_dev_runtime_set_hrs_passivity(uint8_t status)
 uint8_t uapi_dev_runtime_get_hrs_passivity_flag(void)
 {
     return g_runtime.hrs_passivity_status;
-}
\ No newline at end of file
+}
+
+// 设置是否为指南针页面状态
+void uapi_dev_runtime_set_mmc_status(uint8_t status)
+{
+    g_runtime.mmc_status = status;
+}
+// 获取指南针页面状态
+uint8_t uapi_dev_runtime_get_mmc_status_flag(void)
+{
+    return g_runtime.mmc_status;
+}
index a2fd51b..763edd6 100644 (file)
@@ -221,6 +221,10 @@ void uapi_dev_runtime_set_hrs_passivity(uint8_t status);
 // 获取被动心率检测状态
 uint8_t uapi_dev_runtime_get_hrs_passivity_flag(void);
 
+void uapi_dev_runtime_set_mmc_status(uint8_t status);
+// 获取指南针页面状态
+uint8_t uapi_dev_runtime_get_mmc_status_flag(void);
+
 #ifdef __cplusplus
 #if __cplusplus
 }