训练:修改训练过程中使用的configmodel为成员变量
authorCaisking <3449750381@qq.com>
Fri, 11 Oct 2024 11:34:37 +0000 (19:34 +0800)
committerCaisking <3449750381@qq.com>
Fri, 11 Oct 2024 11:34:37 +0000 (19:34 +0800)
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingModel.h
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp

index 3fae1be..f448722 100644 (file)
@@ -186,7 +186,7 @@ struct HeartRateEntry {
   uint32_t timestamp; // 4 bytes
   uint8_t heartRate;  // 1 byte
 };
-#pragma pack (pop)
+#pragma pack(pop)
 struct SportData {
   uint32 starttime; // 开始时间时间戳
   uint32 endtime;   // 结束时间时间戳
@@ -340,6 +340,9 @@ public:
   void printTrainingData(const Trainingdata &data); /*打印数据*/
   void printf_data(SportData *data);                /*打印函数*/
 
+  //配置用户信息
+  void SetUserSportdata();
+
 private:
   TraingModel(const TraingModel &) = delete;
   TraingModel &operator=(const TraingModel &) = delete;
@@ -379,6 +382,12 @@ private:
   const size_t MAX_ENTRIES = 10000;           // 规定最大进场条目数
   /*std::unique_ptr<SportData> sportdata;*/   // 使用 std::unique_ptr 管理
                                               // SportData 对象
+
+  int user_maxHeart; // 用户最高心率
+  int user_Age;      // 用户年龄
+  int user_autoget;  // 自动获取设置
+  int user_freq;     // 训练频率
+  int user_Intensity;
 };
 } // namespace OHOS
 
index 0028875..f1a1023 100644 (file)
@@ -445,9 +445,7 @@ void TraingModel::AnalysisData(cywee_activity_result_t *cyweeInfo) {
   }
 
   // 心率提醒
-  int maxHeartRate = ConfigModel::GetInstance()->get_configData_int(
-      ConfigModel::CONFIGMODEL_ITEM_TRAINING_HEART_MAX);
-  if (sportdata->heart >= maxHeartRate) {
+  if (sportdata->heart >= user_maxHeart) {
     uapi_set_screen_on_api(); // 亮屏检测
     if (true != OHOS::ConfigModel::GetInstance()->GetDnotdisturb() &&
         (!uapi_sleep_mode_flag_get())) {
@@ -597,6 +595,9 @@ void TraingModel::SetTimestamp() {
     // 设置训练 runtime 为 1 训练中
     uapi_dev_runtime_set_train_status(1);
 
+    //更新用户数据
+    SetUserSportdata();
+
     ResetSharedTrainingData(); // 重置共享训练数据
 
     printf("SetTimestamp::time:%u  \r\n", time);
@@ -862,22 +863,19 @@ void TraingModel::SetIntensity(int heart) {
       高等强度=最高心率*70%~79%
       超高强度=最高心率*80%以上
   */
-  int age = ConfigModel::GetInstance()->GetUserAge();
-  int maxHeartRate = MAX_HEART_RATE - age;
-
   // 确保最大心率为正值
-  if (maxHeartRate <= 0) {
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "maxHeartRate %d is error",
-                  maxHeartRate);
+  if (user_Intensity <= 0) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "maxHeartRate %d is error", user_Intensity);
     return;
   }
 
   // 将 heart 转换为 double 以避免整数除法
   double heartRateAsDouble = static_cast<double>(heart);
-  double intensityPercentage = (heartRateAsDouble / (double)maxHeartRate) * 100;
+  double intensityPercentage =
+      (heartRateAsDouble / (double)user_Intensity) * 100;
   WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,
                 "heart: %d, maxHeartRate: %d, intensityPercentage: %.2f", heart,
-                maxHeartRate, intensityPercentage);
+                HeartModel, intensityPercentage);
 
   if (intensityPercentage < LOW_INTENSITY_THRESHOLD) {
     // 较低强度
@@ -1127,6 +1125,32 @@ bool TraingModel::GetMomentum() {
   }
   return MomentumFlag;
 }
+
+//用户运动数据配置
+void TraingModel::SetUserSportdata() {
+  // 获取用户的最高心率提醒
+  user_maxHeart = ConfigModel::GetInstance()->get_configData_int(
+      ConfigModel::CONFIGMODEL_ITEM_TRAINING_HEART_MAX);
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "用户最高心率提醒: %d", user_maxHeart);
+
+  // 获取用户年龄
+  user_Age = ConfigModel::GetInstance()->GetUserAge();
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "用户年龄: %d", user_Age);
+
+  // 获取自动训练设置
+  user_autoget = ConfigModel::GetInstance()->get_configData_int(
+      ConfigModel::CONFIGMODEL_ITEM_TRANING_AUTO);
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "自动获取设置: %d", user_autoget);
+
+  // 获取训练频率设置
+  user_freq = ConfigModel::GetInstance()->get_configData_int(
+      ConfigModel::CONFIGMODEL_ITEM_TRANING_FREQ);
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "训练频率: %d", user_freq);
+
+  user_Intensity = MAX_HEART_RATE - user_Age;
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "用户运动强度心率: %d",
+                user_Intensity);
+}
 /*配速表与心率表相关*/
 //清空心率表
 void TraingModel::ClearHeartTable() {
@@ -1399,15 +1423,9 @@ std::string TraingModel::DisplayMotionDuration() {
 // 检查并发送实时数据
 void TraingModel::SendLiveDataIfNecessary() {
   // 检查自动获取的配置
-  if (ConfigModel::GetInstance()->get_configData_int(
-          ConfigModel::CONFIGMODEL_ITEM_TRANING_AUTO)) {
-
-    freq = ConfigModel::GetInstance()->get_configData_int(
-        ConfigModel::CONFIGMODEL_ITEM_TRANING_FREQ);
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "freq is %d\r\n", freq);
-
+  if (user_autoget) {
     // 发送实时数据
-    if (sportdata->duration % freq == 0) {
+    if (sportdata->duration % user_freq == 0) {
       WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SendLiveData is OK\r\n");
       SendLiveData(); // 发送实时数据
     }
@@ -1773,6 +1791,7 @@ bool TraingModel::SaveDataToJson(SportData *data) {
   cJSON_AddNumberToObject(sportData, "apc", data->apc); // 训练平均配速
   cJSON_AddNumberToObject(sportData, "cdc", data->cdc); // 训练步频
   cJSON_AddNumberToObject(sportData, "std", data->std); // 训练步幅
+  cJSON_AddNumberToObject(sportData, "calories", data->calories); //卡路里
 
   // 添加运动数据节点到数组并限制数量
   cJSON_AddItemToArray(dataArray, sportData);
@@ -1823,6 +1842,7 @@ bool TraingModel::SaveDataToJson(SportData *data) {
         cJSON_AddNumberToObject(sportData, "avgHeartRate", data->avgheart);
         cJSON_AddNumberToObject(sportData, "steps", data->steps);
         cJSON_AddNumberToObject(sportData, "intensity", data->intensity);
+        cJSON_AddNumberToObject(sportData, "calories", data->calories);
 
         cJSON_AddItemToArray(dataArray, sportData);