From: Caisking <3449750381@qq.com> Date: Fri, 26 Apr 2024 10:03:15 +0000 (+0800) Subject: 修复发送训练实时数据;修复设置训练面板死机bug;增加发送训练状态; X-Git-Tag: release_V1.2.70_20241020_135402~1108^2~30 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=8daeca8ea569a175683f55c6ce71b92ba2126fa5;p=mirrors%2FFD230.git 修复发送训练实时数据;修复设置训练面板死机bug;增加发送训练状态; --- 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 6edd1c60b..b640594c5 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingModel.h @@ -105,8 +105,8 @@ namespace OHOS // 运动状态 enum class ExerciseState { - Start = 0, - End, + End = 0, + Start, Pause, Continue, General, @@ -282,7 +282,7 @@ namespace OHOS int sportTag_ = 0; // 训练目标 int totalHeartRate = 0; int countHeartRate = 0; - int freq = 0; // 训练频率 + int freq = 0; // 训练发送数据频率 bool Gettagstuats{false}; // 训练达标标志位 bool Startstate{false}; // 开始训练标志位 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 b408865a0..cc6f2f868 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp @@ -247,6 +247,10 @@ namespace OHOS /*设置运动状态*/ void TraingModel::SetSportState(ExerciseState state) { + if (state != ExerciseState::General) + { + sendtraningstatedata(static_cast(state), sportdata->duration); + } sportState_ = state; } /*获取运动状态*/ @@ -335,6 +339,7 @@ namespace OHOS sportdata->Reset(); // 重置结构体 /*将Model的成员变量赋值到结构体里面*/ + printf("SetTimestamp::time:%u \r\n", time); sportdata->starttime = time; sportdata->sportType = sportType_; // 训练类型 Gettagstuats = false; // 重置训练达标标志位 @@ -383,6 +388,7 @@ namespace OHOS } // PRINT("end_time [%s]\r\n", end_time); sportdata->end_time = std::string(end_time); + sportState_ = ExerciseState::General; Openstate = false; // 关闭运动标志位 free(end_time); // 释放内存 @@ -407,7 +413,7 @@ namespace OHOS Endstate = true; } } - // 获取训练时长时间戳 + // 获取训练时长时间 std::string TraingModel::GetTrainingTime() { int hour = sportdata->duration / NUM_TIME_HOUR; @@ -674,7 +680,9 @@ namespace OHOS void TraingModel::SendLiveData() { msg_get_train_data_info_t data; - data.st = sportdata->starttime / 1000; + memset(&data, 0, sizeof(msg_get_train_data_info_t)); + PRINT("sportdata->starttime %d \r\n", sportdata->starttime); + data.st = (uint32)(sportdata->starttime / 1000); data.hr = sportdata->heart; data.ca = sportdata->calories; data.stp = sportdata->steps; diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingCardPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingCardPresenter.h index 3c5f8f4bd..907250881 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingCardPresenter.h +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingCardPresenter.h @@ -53,12 +53,19 @@ namespace OHOS void RefreshData(); // 更新数据 bool send_sport_cmd(training_ble *cmd); + /*控制*/ + void handleStartState(); + void handleEndState(); + void handlePauseState(); + void handleContinueState(); + private: // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承; bool OnClick(UIView &view, const ClickEvent &event) override; bool OnDrag(UIView &view, const DragEvent &event) override; int tag_ = 0; bool opensensorstuats{false}; + bool goalSet{nullptr}; // bool OnDragEnd(UIView& view, const DragEvent& event) override; }; } // namespace OHOS 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 d89bb687c..227dafe59 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 @@ -1,4 +1,9 @@ - +/*** + * @Date: 2024-04-26 09:23:18 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-04-26 10:25:05 + * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp + */ #include "AppViewIDs.h" #include "components/ui_label_ext.h" @@ -213,32 +218,17 @@ namespace OHOS // 点击暂停按键 if (strcmp(view.GetViewId(), BUTTONSTOP) == 0) { - // 开始状态 - if (TraingModel::GetInstance()->GetSportState() == ExerciseState::Start || TraingModel::GetInstance()->GetSportState() == ExerciseState::Continue) + // 进行状态 + if (TraingModel::GetInstance()->GetSportState() == ExerciseState::Continue || TraingModel::GetInstance()->GetSportState() == ExerciseState::Start) { - TrainingControlView::GetInstance()->GetLabel()->SetText("ç»§ç»­"); - TrainingControlView::GetInstance()->GetButton()->SetImageSrc(SPORT_CONTINUE_IMAGE, SPORT_CONTINUE_IMAGE); - // 设置为暂停状态 - TraingModel::GetInstance()->SetSportState(ExerciseState::Pause); - // 暂停计时器 - PauseTimer(); - // 暂停运动库 - ControlSensor(ExerciseState::Pause); - return true; + handlePauseState(); } // 暂停状态 - if (TraingModel::GetInstance()->GetSportState() == ExerciseState::Pause) + else if (TraingModel::GetInstance()->GetSportState() == ExerciseState::Pause) { - TrainingControlView::GetInstance()->GetLabel()->SetText("暂停"); - TrainingControlView::GetInstance()->GetButton()->SetImageSrc(SPORT_PAUSE_IMAGE, SPORT_PAUSE_IMAGE); - // 设置为继续状态 - TraingModel::GetInstance()->SetSportState(ExerciseState::Continue); - // 恢复计时器 - ResumeTimer(); - // 恢复运动库 - ControlSensor(ExerciseState::Continue); - return true; + handleContinueState(); } + return true; } // 点击结束按键,弹窗显示 if (strcmp(view.GetViewId(), BUTTONEND) == 0) @@ -251,20 +241,7 @@ namespace OHOS // 退出按键 if (strcmp(view.GetViewId(), BUTTONEXIT) == 0) { - TraingModel::GetInstance()->SetSportState(ExerciseState::End); - ControlSensor(ExerciseState::End); -#if DATATEST - NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGENDDATA); -#endif - if (TraingModel::GetInstance()->GetMomentum()) - { - NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGENDDATA); - } - else - { - // 训练量不足进入训练记录界面 - NativeAbility::GetInstance().ChangeSlice(VIEW_TRAINING_RECORD); - } + handleEndState(); } // 返回按键 if (strcmp(view.GetViewId(), BUTTONBACK) == 0) @@ -281,48 +258,54 @@ namespace OHOS return true; } - /*蓝牙控制接口*/ bool TraingCardPresenter::send_sport_cmd(training_ble *cmd) { - - if (cmd == nullptr || cmd->sportType < 0) + if (cmd == nullptr) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Invalid sport command"); return false; } - //命令为设置目标 - if (cmd->controlmd == 4) + switch (cmd->controlmd) { - TraingModel::GetInstance()->SetSportTag(static_cast(cmd->sportTagType), cmd->sportTag); - return true; //设置目标为单指令 + case SETGOAL: + if (TraingModel::GetInstance()->GetSportState() == ExerciseState::General) + { + // 设置目标:在非运动情况下设置 [单指令,执行后退出] + TraingModel::GetInstance()->SetSportTag(static_cast(cmd->sportTagType), cmd->sportTag); + return true; + } + break; + case SENDDATA: + TraingModel::GetInstance()->SendLiveData(); // 发送实时数据 [单指令,执行后退出] + return true; + default: + break; } - uapi_set_screen_on_api(); // 亮屏检测 if (TraingCardView::GetInstance() == nullptr) { - NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCRAD); // 切换Slice - //对训练项目的选择只进行一次判断 + uapi_set_screen_on_api(); // 亮屏 + NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCRAD); + // 设置目标类型和项目有且只有一次 switch (cmd->sportType) { - // 室外走路 case 0: + TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORWALKING); OpenSensor(ExerciseClass::FREE_TRAINING); - break; - // 室外跑步 case 1: - OpenSensor(ExerciseClass::OUTDOOR); + TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORBIKING); + OpenSensor(ExerciseClass::FREE_TRAINING); break; - // 室外骑行 case 2: - OpenSensor(ExerciseClass::FREE_TRAINING); + TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORRUNNING); + OpenSensor(ExerciseClass::OUTDOOR); break; default: break; } } - // 增加打印 PRINT("cmd->sportType[%d],cmd->controlmd[%d],cmd->sportTagType[%d],cmd->sportTag[%d]\r\n", cmd->sportType, cmd->controlmd, cmd->sportTagType, cmd->sportTag); ExerciseState cmdState = static_cast(cmd->controlmd); @@ -331,47 +314,17 @@ namespace OHOS switch (cmdState) { case ExerciseState::End: - { - PRINT("ExerciseState::End [%d]\r\n", cmdState); - TraingModel::GetInstance()->SetSportState(ExerciseState::End); - ControlSensor(ExerciseState::End); - if (TraingCardView::GetInstance()->RefreshEndView()) - { - NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGENDDATA); - } - else - { - NativeAbility::GetInstance().ChangeSlice(VIEW_TRAINING_RECORD); - } + handleEndState(); break; - } case ExerciseState::Pause: - { - PRINT("ExerciseState %d\r\n", cmdState); - TraingModel::GetInstance()->SetSportState(cmdState); - TrainingControlView::GetInstance()->GetLabel()->SetText("ç»§ç»­"); - TrainingControlView::GetInstance()->GetButton()->SetImageSrc(SPORT_CONTINUE_IMAGE, SPORT_CONTINUE_IMAGE); - TraingModel::GetInstance()->SetSportState(ExerciseState::Pause); - PauseTimer(); - ControlSensor(ExerciseState::Pause); + handlePauseState(); break; - } case ExerciseState::Continue: - { - TrainingControlView::GetInstance()->GetLabel()->SetText("暂停"); - TrainingControlView::GetInstance()->GetButton()->SetImageSrc(SPORT_PAUSE_IMAGE, SPORT_PAUSE_IMAGE); - TraingModel::GetInstance()->SetSportState(ExerciseState::Continue); - ResumeTimer(); - ControlSensor(ExerciseState::Continue); + handleContinueState(); break; - } case ExerciseState::Start: - { - PRINT("ExerciseState::Start [%d]\r\n", cmdState); - ControlSensor(cmdState); - TraingModel::GetInstance()->SetSportOpenWay(true); + handleStartState(); break; - } default: break; } @@ -379,4 +332,50 @@ namespace OHOS return true; } + /*训练结束*/ + void TraingCardPresenter::handleEndState() + { + TraingModel::GetInstance()->SetSportState(ExerciseState::End); + ControlSensor(ExerciseState::End); +#if DATATEST + NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGENDDATA); + return; +#endif + if (TraingModel::GetInstance()->GetMomentum()) + { + NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGENDDATA); + } + else + { + NativeAbility::GetInstance().ChangeSlice(VIEW_TRAINING_RECORD); + } + } + + /*训练暂停*/ + void TraingCardPresenter::handlePauseState() + { + TrainingControlView::GetInstance()->GetLabel()->SetText("ç»§ç»­"); + TrainingControlView::GetInstance()->GetButton()->SetImageSrc(SPORT_CONTINUE_IMAGE, SPORT_CONTINUE_IMAGE); + TraingModel::GetInstance()->SetSportState(ExerciseState::Pause); + PauseTimer(); + ControlSensor(ExerciseState::Pause); + } + + /*训练继续*/ + void TraingCardPresenter::handleContinueState() + { + TrainingControlView::GetInstance()->GetLabel()->SetText("暂停"); + TrainingControlView::GetInstance()->GetButton()->SetImageSrc(SPORT_PAUSE_IMAGE, SPORT_PAUSE_IMAGE); + TraingModel::GetInstance()->SetSportState(ExerciseState::Continue); + ResumeTimer(); + ControlSensor(ExerciseState::Continue); + } + + /*训练开始*/ + void TraingCardPresenter::handleStartState() + { + ControlSensor(ExerciseState::Start); + TraingModel::GetInstance()->SetSportOpenWay(true); + } + } diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardView.cpp index be920a3b5..d88771156 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardView.cpp @@ -45,8 +45,7 @@ namespace OHOS { DeInit(); g_pTraingCardView = nullptr; - DisableTimer(); // 关闭计时器 - TraingModel::GetInstance()->SetSportState(ExerciseState::End); // 设置运动状态为结束 + DisableTimer(); // 关闭计时器 TraingModel::GetInstance()->SetTimestamp(); } diff --git a/code/sdk/application/wearable/service/ble_service/blemoder/bletest.h b/code/sdk/application/wearable/service/ble_service/blemoder/bletest.h index 167fa60f0..227c99419 100644 --- a/code/sdk/application/wearable/service/ble_service/blemoder/bletest.h +++ b/code/sdk/application/wearable/service/ble_service/blemoder/bletest.h @@ -53,10 +53,17 @@ enum PAIRING // Continue, // General, // }; + +/* +0:结束 +1:开始 +2:暂停 +3:恢复 +*/ enum TRANING { - START=0, - END, + END=0, + START, STOP, RECOVER, SETGOAL, diff --git a/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c b/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c index deed5f76a..cb2947805 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c @@ -286,11 +286,11 @@ void send_big_data(uint8_t flag,char *data,int datalen,int total,uint32_t Packet if(data==NULL) { data="\0"; - buf[17+datalen] = Calculate_CRC_Big((uint8_t *)data,datalen); + // buf[17+datalen] = Calculate_CRC_Big((uint8_t *)data,datalen); if(flag) - sendDataNow(buf,17+datalen+1); + sendDataNow(buf,17+1); else - sendBleData(buf,17+datalen+1); + sendBleData(buf,17+1); }else { @@ -312,7 +312,7 @@ void sendtraningstatedata(uint8_t state ,uint16_t time) uint32_t data_len=3; data[0]=state; memcpy(&data[1],&time,2); - printf("发送训练状态数据%d %s\r\n",data_len,data); + printf("发送训练状态数据%d %d\r\n",data[0],time); send_big_data(0,data,data_len,data_len,1,1,0x50,5); } @@ -1273,40 +1273,36 @@ static uint8_t jsonCheck_targetparam(uint8_t *buf)//训练目标参数 // "ty":0, // "di":5000, // } + memset(&training_ble_data,0,sizeof(training_ble)); cJSON* ty = cJSON_GetObjectItem(root, "ty");//目标类型 if (cJSON_IsNumber(ty)) { printf("ty: %d\n", ty->valueint); training_ble_data.sportTagType=ty->valueint; training_ble_data.controlmd=SETGOAL; - //CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,sizeof(training_ble)); } cJSON* di = cJSON_GetObjectItem(root, "di");//目标距离 if (cJSON_IsNumber(di)) { printf("di: %d\n", di->valueint); training_ble_data.sportTag=di->valueint; - CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,sizeof(training_ble)); } cJSON* ca = cJSON_GetObjectItem(root, "ca");//目标卡路里 if (cJSON_IsNumber(ca)) { printf("ca: %d\n", ca->valueint); training_ble_data.sportTag=ca->valueint; - CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,sizeof(training_ble)); - } cJSON* tm = cJSON_GetObjectItem(root, "tm");//目标时间 if (cJSON_IsNumber(tm)) { printf("tm: %d\n", tm->valueint); training_ble_data.sportTag=tm->valueint; - CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,sizeof(training_ble)); - } cJSON* st = cJSON_GetObjectItem(root, "st");//目标步数 if (cJSON_IsNumber(st)) { printf("st: %d\n", st->valueint); training_ble_data.sportTag=st->valueint; - CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,sizeof(training_ble)); + } + CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,sizeof(training_ble)); cJSON_Delete(root); return 1; } @@ -2583,7 +2579,7 @@ static void SetRTDataFreCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *t // } void sendRealTimeDataToAPP(uint8_t flag) { - if(flag != 0)//校验失败 + if(flag == 0)//校验失败 { send_big_data(0,NULL,1,data_len,1,1,0x0f,1); diff --git a/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c b/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c index 578680b11..7c72278ae 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c @@ -945,7 +945,7 @@ static void svr_ble_bt_gatts_req_write_cb(uint8_t server_id, uint16_t conn_id, g { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "g_ble_server_handle %d conn_id :%d write_cb_para->length:%d write_cb_para->handle %d write_cb_para->request_id:%d",g_ble_server_handle,conn_id,write_cb_para->length, write_cb_para->handle,write_cb_para->request_id); - printf("alipay_handle%d",alipay_handle); + // printf("alipay_handle%d",alipay_handle); for(uint16_t i = 0;ilength;i++) { printf("%x ",write_cb_para->value[i]); @@ -1455,6 +1455,10 @@ void openBle(void) #define MODE_ALIPAY_ADV_SRV (1) void ble_avd_mode_change(uint8_t mode) { + if(AdverFlag == false) + { + return; + } uint8_t adv_ok = 0; switch(mode) {