From da20cd56f66e558cdbc8907c253153b59ec0b339 Mon Sep 17 00:00:00 2001 From: Caisking <3449750381@qq.com> Date: Sat, 12 Oct 2024 11:24:15 +0800 Subject: [PATCH] =?utf8?q?=E8=AE=AD=E7=BB=83=EF=BC=9A=E4=BF=AE=E5=A4=8D?= =?utf8?q?=E5=BC=80=E6=9C=BA=E7=9A=84=E5=AF=B9=E4=BA=8ETopic=E7=9A=84?= =?utf8?q?=E6=B6=88=E6=81=AF=E6=A6=82=E7=8E=87=E4=BB=A5=E5=8F=8A=E9=94=99?= =?utf8?q?=E8=AF=AF=E9=A2=84=E9=98=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../nativeui/traing/include/TraingModel.h | 10 +- .../nativeui/traing/src/TraingModel.cpp | 148 ++++++------------ .../training_card/src/TraingCardPresenter.cpp | 7 +- 3 files changed, 55 insertions(+), 110 deletions(-) diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingModel.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingModel.h index f44872218..f1a9f6f8a 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingModel.h @@ -383,11 +383,11 @@ private: /*std::unique_ptr sportdata;*/ // 使用 std::unique_ptr 管理 // SportData 对象 - int user_maxHeart; // 用户最高心率 - int user_Age; // 用户年龄 - int user_autoget; // 自动获取设置 - int user_freq; // 训练频率 - int user_Intensity; + int user_maxHeart{190}; // 用户最高心率 + int user_Age{20}; // 用户年龄 + int user_autoget{1}; // 自动获取设置 + int user_freq{10}; // 训练频率 + int user_Intensity{160}; }; } // namespace OHOS diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp index f1a1023e4..9f590a5c4 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp @@ -52,14 +52,14 @@ extern "C" errcode_t uapi_get_timestampe_ms(uint32_t *tm); #ifdef __cplusplus extern "C" { #endif -static void Notify(void *args, const Topic topic, Request *request); +static void Training_Notify(void *args, const Topic topic, Request *request); using namespace OHOS; Subscriber TraingSubscirber = { .identity = NULL, .args = NULL, - .Notify = Notify, + .Notify = Training_Notify, }; void TraingSubscribeTopic(Topic topic) { @@ -107,24 +107,35 @@ void TraingUnsubscribeTopic(Topic topic) { broadcastApi->Release((IUnknown *)broadcastApi); } int flag = 0; -static void Notify(void *args, const Topic topic, Request *request) { +static void Training_Notify(void *args, const Topic topic, Request *request) { UNUSED(args); UNUSED(topic); if (request == NULL) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "request is NULL"); return; } - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "request %d\r\n", request->msgId); - if (request->msgId == TOPIC_EVENT_ACTIVITY_UPDATE) { -#if BLETEST - if (!flag) { - training_ble *traingbleInfo = new training_ble(); - traingbleInfo->sportType = 1; - traingbleInfo->controlmd = 0; - TraingCardPresenter::GetInstance()->send_sport_cmd(traingbleInfo); - delete traingbleInfo; - flag = 1; + //蓝牙开启运动 + if (request->msgId == TOPIC_EVENT_BLE_TRAINING) { + training_ble *traingbleInfo = new training_ble(); + int rets = memcpy_s(traingbleInfo, sizeof(training_ble), + (training_ble *)request->data, request->len); + if (rets != EOK) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + "memcpy_s cywee_activity_result_t fail ret = %d", rets); + return; } -#endif + TraingCardPresenter::GetInstance()->send_sport_cmd(traingbleInfo); + delete traingbleInfo; + } + //增加训练runtime控制 + if (uapi_dev_runtime_get_train_status() == 0) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + "uapi_dev_runtime_get_train_status %d", + uapi_dev_runtime_get_train_status()); + return; + } + //训练基本信息更新 + if (request->msgId == TOPIC_EVENT_ACTIVITY_UPDATE) { cywee_activity_result_t *cyweeInfo = new cywee_activity_result_t(); int rets = memcpy_s(cyweeInfo, sizeof(cywee_activity_result_t), (cywee_activity_result_t *)request->data, request->len); @@ -138,6 +149,7 @@ static void Notify(void *args, const Topic topic, Request *request) { TraingModel::GetInstance()->AnalysisData(cyweeInfo); delete cyweeInfo; // 释放内存 } + //训练额外信息 if (request->msgId == TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE) { cywee_activity_result_extre_info_t *cyweeInfo_ext = new cywee_activity_result_extre_info_t(); @@ -155,22 +167,11 @@ static void Notify(void *args, const Topic topic, Request *request) { 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(); - int rets = memcpy_s(traingbleInfo, sizeof(training_ble), - (training_ble *)request->data, request->len); - if (rets != EOK) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, - "memcpy_s cywee_activity_result_t fail ret = %d", rets); - return; - } - TraingCardPresenter::GetInstance()->send_sport_cmd(traingbleInfo); - delete traingbleInfo; - } } #ifdef __cplusplus } @@ -451,7 +452,9 @@ void TraingModel::AnalysisData(cywee_activity_result_t *cyweeInfo) { (!uapi_sleep_mode_flag_get())) { ui_api_vibrate_once_func(); } - TraingCardView::GetInstance()->SetPopupViewStatus(HeartPopup, true); + if (TraingCardView::GetInstance()) { + TraingCardView::GetInstance()->SetPopupViewStatus(HeartPopup, true); + } } // 训练目标检查 @@ -466,9 +469,11 @@ void TraingModel::AnalysisData(cywee_activity_result_t *cyweeInfo) { if (true != OHOS::ConfigModel::GetInstance()->GetDnotdisturb()) { ui_api_vibrate_once_func(); } - TraingCardView::GetInstance()->SetPopupViewStatus(GetTagPopup, true); - if (TraingCardView::GetInstance()->GetAnimator()) { - TraingCardView::GetInstance()->GetAnimator()->Start(); + if (TraingCardView::GetInstance()) { + TraingCardView::GetInstance()->SetPopupViewStatus(GetTagPopup, true); + if (TraingCardView::GetInstance()->GetAnimator()) { + TraingCardView::GetInstance()->GetAnimator()->Start(); + } } Gettagstuats = true; } @@ -595,8 +600,8 @@ void TraingModel::SetTimestamp() { // 设置训练 runtime 为 1 训练中 uapi_dev_runtime_set_train_status(1); - //更新用户数据 - SetUserSportdata(); + // 更新用户数据 + // SetUserSportdata(); ResetSharedTrainingData(); // 重置共享训练数据 @@ -865,7 +870,8 @@ void TraingModel::SetIntensity(int heart) { */ // 确保最大心率为正值 if (user_Intensity <= 0) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "maxHeartRate %d is error", user_Intensity); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "maxHeartRate %d is error", + user_Intensity); return; } @@ -1733,7 +1739,7 @@ bool TraingModel::CheckDataJson() { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CheckDataJson is ok"); return true; } -#if 1 + bool TraingModel::SaveDataToJson(SportData *data) { FILE *fp; char *jsonStr = NULL; @@ -1814,75 +1820,7 @@ bool TraingModel::SaveDataToJson(SportData *data) { return true; } -#endif -#if 0 - bool TraingModel::SaveDataToJson(SportData *data) - { - if (data == nullptr) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Data is null"); - return false; - } - printf_data(data); - - cJSON *root = cJSON_CreateObject(); // 创建一个新的 JSON 对象 - - // 创建或更新数据节点 - cJSON *dataArray = cJSON_AddArrayToObject(root, "data"); - cJSON *sportData = cJSON_CreateObject(); - cJSON_AddNumberToObject(sportData, "sportTypeId", static_cast(data->sportType)); - cJSON_AddNumberToObject(sportData, "sportId", static_cast(data->sportId)); - cJSON_AddStringToObject(sportData, "startDate", data->start_date.c_str()); - cJSON_AddStringToObject(sportData, "startTime", data->start_time.c_str()); - cJSON_AddStringToObject(sportData, "endTime", data->end_time.c_str()); - cJSON_AddNumberToObject(sportData, "goalDegree", data->goaldegree); - cJSON_AddNumberToObject(sportData, "duration", data->duration); - cJSON_AddNumberToObject(sportData, "distance", data->distance); - 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); - - // 限制存储数量并删除多余数据 - while (cJSON_GetArraySize(dataArray) > MAX_DATA_COUNT) - { - cJSON_DeleteItemFromArray(dataArray, 0); - } - - // 将更新后的 JSON 数据写入文件 - char *jsonStrNew = cJSON_Print(root); - if (jsonStrNew == nullptr) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to serialize JSON data"); - cJSON_Delete(root); - return false; - } - - printf("jsonStrNew:%s\r\n", jsonStrNew); - - FILE *fp = fopen(TRAINING_RECORD_FILE, "w"); - if (fp == nullptr) - { - perror("fopen"); - cJSON_Delete(root); - cJSON_free(jsonStrNew); - return false; - } - - fwrite(jsonStrNew, strlen(jsonStrNew), 1, fp); - fclose(fp); - - // 释放资源 - cJSON_Delete(root); - cJSON_free(jsonStrNew); - - WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "SaveDataToJson succeeded"); - return true; - } -#endif /* 加载训练数据函数 */ bool TraingModel::LoadDataFormJson(std::vector &sportDataVector) { std::ifstream file(TRAINING_RECORD_FILE); @@ -2014,6 +1952,12 @@ bool TraingModel::LoadDataFormJson(std::vector &sportDataVector) { else isValid = false; + if (cJSON *caloriesItem = cJSON_GetObjectItem(item, "calories"); + caloriesItem && cJSON_IsNumber(caloriesItem)) + sportData.calories = caloriesItem->valueint; + else + isValid = false; + // 只有在所有字段都有效的情况下才添加 sportData 到向量中 if (isValid) { sportDataVector.push_back(sportData); diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp index fa2d03d43..a9675343b 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp @@ -370,13 +370,14 @@ bool TraingCardPresenter::OnKeyAct(UIView &view, const KeyEvent &event) { bool TraingCardPresenter::send_sport_cmd(training_ble *cmd) { if (cmd == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "无效的运动命令"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "无效的运动命令 cmd 为空!"); return false; } // 获取当前的运动状态 ExerciseState currentState = TraingModel::GetInstance()->GetSportState(); ExerciseState cmdstate = static_cast(cmd->controlmd); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "cmdstate:%d currentState:%d", cmdstate,currentState); switch (cmd->controlmd) { case SETGOAL: @@ -384,7 +385,7 @@ bool TraingCardPresenter::send_sport_cmd(training_ble *cmd) { if (currentState == ExerciseState::General) { TraingModel::GetInstance()->SetSportTag( static_cast(cmd->sportTagType), cmd->sportTag); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "目标设置成功!\r\n"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "目标设置成功!\r\n"); return true; } break; @@ -392,7 +393,7 @@ bool TraingCardPresenter::send_sport_cmd(training_ble *cmd) { case SENDDATA: // 随时允许发送实时数据 TraingModel::GetInstance()->SendLiveData(); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "实时数据发送成功!\r\n"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "实时数据发送成功!\r\n"); return true; default: -- 2.17.1