From 1988abaee4eea426f8b871371b449be49be8a74c Mon Sep 17 00:00:00 2001 From: Caisking Date: Tue, 27 Jan 2026 20:07:16 +0800 Subject: [PATCH] =?utf8?q?=E4=BC=98=E5=8C=96=E8=BF=90=E5=8A=A8=E9=85=8D?= =?utf8?q?=E9=80=9F=E6=A3=80=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../nativeui/traing/src/TraingModel.cpp | 78 ++++++++++++++----- 1 file changed, 57 insertions(+), 21 deletions(-) diff --git a/code/sdk/application/wearable/fd272/nativeapp/nativeui/traing/src/TraingModel.cpp b/code/sdk/application/wearable/fd272/nativeapp/nativeui/traing/src/TraingModel.cpp index 2992e166f..aafcf1cdd 100644 --- a/code/sdk/application/wearable/fd272/nativeapp/nativeui/traing/src/TraingModel.cpp +++ b/code/sdk/application/wearable/fd272/nativeapp/nativeui/traing/src/TraingModel.cpp @@ -512,16 +512,34 @@ // sportdata->cdc = cyweeInfo->step_frequency; // sportdata->std = cyweeInfo->step_length; - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " pace %d", sportdata->pc); - - sportdata->pc = cyweeInfo->pace; - - // 更新最慢配速 - if (sportdata->spc < sportdata->pc && sportdata->pc != 0) { - sportdata->spc = sportdata->pc; - } - - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "spc %d", sportdata->spc); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " pace %d", sportdata->pc); + + // 通过距离和时间自己计算配速,而不是使用CYWEE提供的配速 + // 配速单位:秒/公里 + // 计算公式:配速 = 时间(秒) * 1000 / 距离(米) + int calculatedPace = 0; + if (sportdata->distance > 0 && sportdata->duration > 0) { + // 距离单位是米,需要转换为公里:距离(公里) = 距离(米) / 1000 + // 配速(秒/公里) = 时间(秒) / 距离(公里) = 时间(秒) * 1000 / 距离(米) + calculatedPace = (sportdata->duration * 1000) / sportdata->distance; + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, + "CalculatePace: distance=%d米, duration=%d秒, calculatedPace=%d秒/公里", + sportdata->distance, sportdata->duration, calculatedPace); + } else { + // 如果距离或时间为0,使用CYWEE提供的配速作为后备 + calculatedPace = cyweeInfo->pace; + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, + "CalculatePace: 距离或时间为0,使用CYWEE配速=%d", calculatedPace); + } + + sportdata->pc = calculatedPace; + + // 更新最慢配速 + if (sportdata->spc < sportdata->pc && sportdata->pc != 0) { + sportdata->spc = sportdata->pc; + } + + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "spc %d", sportdata->spc); #if 0 @@ -570,17 +588,35 @@ return; } - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[apc:%d fpc:%d cdc:%d std:%d]", - cyweeInfo->avg_pace, cyweeInfo->max_pace, - cyweeInfo->avg_step_freq, cyweeInfo->avg_step_len); - //平均配速 - if (cyweeInfo->avg_pace != 0) { - sportdata->apc = cyweeInfo->avg_pace; - } - //最快配速 - if (cyweeInfo->max_pace != 0) { - sportdata->fpc = cyweeInfo->max_pace; - } + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[apc:%d fpc:%d cdc:%d std:%d]", + cyweeInfo->avg_pace, cyweeInfo->max_pace, + cyweeInfo->avg_step_freq, cyweeInfo->avg_step_len); + + // 通过距离和时间自己计算平均配速和最快配速 + // 平均配速 = 总时间(秒) * 1000 / 总距离(米) + if (sportdata->distance > 0 && sportdata->duration > 0) { + int calculatedAvgPace = (sportdata->duration * 1000) / sportdata->distance; + sportdata->apc = calculatedAvgPace; + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, + "CalculateAvgPace: distance=%d米, duration=%d秒, avgPace=%d秒/公里", + sportdata->distance, sportdata->duration, calculatedAvgPace); + } else if (cyweeInfo->avg_pace != 0) { + // 如果距离或时间为0,使用CYWEE提供的平均配速作为后备 + sportdata->apc = cyweeInfo->avg_pace; + } + + // 最快配速:配速越小表示速度越快,所以最快配速应该是最小的配速值 + // 如果当前配速不为0且小于之前的最快配速(或最快配速为0),则更新最快配速 + if (sportdata->pc > 0) { + if (sportdata->fpc == 0 || sportdata->pc < sportdata->fpc) { + sportdata->fpc = sportdata->pc; + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, + "UpdateFastestPace: fpc=%d秒/公里", sportdata->fpc); + } + } else if (cyweeInfo->max_pace != 0) { + // 如果当前配速为0,使用CYWEE提供的最快配速作为后备 + sportdata->fpc = cyweeInfo->max_pace; + } //平均步频 if (cyweeInfo->avg_step_freq != 0) { sportdata->cdc = cyweeInfo->avg_step_freq; -- 2.17.1