#define GILROY_BOLD_FONT "./font_library/gilroy-bold-4.ttf"
#define GILROY_MEDIUM_FONT "./font_library/gilroy-medium-2.ttf"
-struct QuickTraining
-{
- OHOS::UIResourceTextId training1_Text;
- OHOS::UIResourceTextId training2_Text;
- OHOS::UIResourceTextId training3_Text;
-
- std::string training1_Image;
- std::string training2_Image;
- std::string training3_Image;
-
- QuickTraining()
- : training1_Text(OHOS::STR_EXERCISE_OUTDOORWALKING),
- training2_Text(OHOS::STR_EXERCISE_OUTDOORBIKING),
- training3_Text(OHOS::STR_EXERCISE_OUTDOORRUNNING),
- training1_Image(OHOS::WALKING_60_IMAGE),
- training2_Image(OHOS::RIDING_60_IMAGE),
- training3_Image(OHOS::RUNNING_60_IMAGE) {}
-};
-
#ifdef __cplusplus
extern "C"
{
{
uint64 starttime; // 开始时间时间戳
uint64 endtime; // 结束时间时间戳
+ uint64 duration; // 训练时长
int goaldegree; // 目标完成度
int calories; // 训练卡路里
- int duration; // 训练时长
int steps; // 训练步数
int distance; // 训练距离
int intensity; // 训练强度 (0:较低强度 1:中等强度 2:高等强度 3:超高强度)
int avgheart; // 训练平均心率
+ std::string start_date; // 训练开始日期
+ std::string start_time; // 训练开始时间
+ std::string end_time; // 训练结束时间
+ Exercisetype sportType; // 训练类型
UIResourceTextId sportId; // 训练Id
+
+ void Initialize()
+ {
+ starttime = 0;
+ endtime = 0;
+ duration = 0;
+ goaldegree = 0;
+ calories = 0;
+ steps = 0;
+ distance = 0;
+ intensity = 1;
+ avgheart = 0;
+ start_date = nullptr;
+ start_time = nullptr;
+ end_time = nullptr;
+ sportType = Exercisetype::FITNESS;
+ sportId = UIResourceTextId::STR_EXTREME_SPORTS;
+ }
+
+ void Reset()
+ {
+ Initialize(); // 调用初始化函数将数据重置为初始状态
+ }
};
class TraingModel
bool InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath);
void InitList();
- void SetQuickTraining(QuickTraining *quickTraining);
- QuickTraining *GetQuickTraining() const;
/*定时器 */
std::string DisplayMotionDuration();
std::string AnalysisTimestamp(uint64_t timestamp);
/*获取运动总时长*/
uint32_t GetTrainingTime();
+
+ std::string GetStartTiemStr();
+ std::string GetEndTiemStr();
+
/*平均心率计算*/
int CalculateAverageHeartRate(int newHeartRate);
TraingModel(const TraingModel &) = delete;
TraingModel &operator=(const TraingModel &) = delete;
- std::string motionDuration; // 训练时长
+ std::string motionDuration; // 显示训练时长
UIResourceTextId sportId_ = STR_EXTREME_SPORTS; // 训练项目
- Exercisetype sporttype_ = Exercisetype::FITNESS; // 训练类型
+ Exercisetype sportType_ = Exercisetype::FITNESS; // 训练类型
ExerciseState sportstate_ = ExerciseState::General; // 训练状态
+ // std::string startdate_{nullptr};
+ // std::string starttime_{nullptr};
+ // std::string endtime_{nullptr};
int totalHeartRate = 0;
- int countHeartRate = 1;
+ int countHeartRate = 0;
/*std::unique_ptr<SportData> sportdata;*/ // 使用 std::unique_ptr 管理 SportData 对象
};
}
labelsport->SetTextId(enddata->sportId);
// 运动开始结束时间
- std::string startTimeStr = TraingModel::GetInstance()->AnalysisTimestamp(enddata->starttime);
- std::string endTimeStr = TraingModel::GetInstance()->AnalysisTimestamp(enddata->endtime);
+ std::string startTimeStr = enddata->start_time;
+ std::string endTimeStr = enddata->end_time;
std::string durationStr = startTimeStr + "-" + endTimeStr;
labelduration->SetText(durationStr.c_str());
labeltag->SetText("100%"); // 暂时设置为默认
// 运动时长
- uint32_t time = TraingModel::GetInstance()->GetTrainingTime();
+ uint64_t time = TraingModel::GetInstance()->GetTrainingTime();
std::string timeStr = TraingModel::GetInstance()->AnalysisTimestamp(time);
labeltime->SetText(timeStr.c_str());
static constexpr int16 NUM_TIME_MIN = 60;
static constexpr int16 NUM_TIME_HOUR = 3600;
static constexpr int32 NUM_TIME_DAY = 86400;
-
- SportData *sportdata = new SportData();
-
#endif
+ SportData *sportdata = new SportData();
TraingModel ::TraingModel()
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingModel::TraingModel()");
-#if CHECK
- printf(" quickTraining_--training1_Text: %s\n", quickTraining_->training1_Text.c_str());
- printf(" quickTraining_--training1_Image: %s\n", quickTraining_->training1_Image.c_str());
- printf(" quickTraining_--training2_Text: %s\n", quickTraining_->training2_Text.c_str());
- printf(" quickTraining_--training2_Image: %s\n", quickTraining_->training2_Image.c_str());
- printf(" quickTraining_--training3_Text: %s\n", quickTraining_->training3_Text.c_str());
- printf(" quickTraining_--training3_Image: %s\n", quickTraining_->training3_Image.c_str());
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingModel::TraingModel()");
-#endif
+ // sportdata->Initialize(); // 初始化结构体
}
TraingModel ::~TraingModel()
{
{
TraingSubscribeTopic(TOPIC_EVENT_ACTIVITY_UPDATE); // 进行消息订阅
}
- /* -------------------------------------------------------------------------- */
- /***
- * @description:
- * @param {QuickTraining} *quickTraining
- * @brief 设置快捷训练
- */
- void TraingModel::SetQuickTraining(QuickTraining *quickTraining)
- {
- // quickTraining_ = quickTraining;
- }
- /***
- * @description:
- * @return {quickTraining_}
- * @brief 获取快捷训练
- */
- QuickTraining *TraingModel::GetQuickTraining() const
- {
- QuickTraining *quickTraining_ = new QuickTraining(); // 为quickTraining_赋初值
- return quickTraining_;
- }
/***
* @description: 初始化标签
* @param {UILabel} *
/*设置运动类型*/
void TraingModel::SetSportType(Exercisetype type)
{
+ sportType_ = type;
}
/*获取运动类型*/
Exercisetype TraingModel::GetSporType()
{
+ return sportType_;
}
/*设置运动Id*/
void TraingModel::SetSportEvent(UIResourceTextId id)
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " GetSportType %d", sportId_);
// 设置结构体里面的运动类型
sportdata->sportId = sportId_;
+ sportdata->sportType = sportType_;
switch (sportId_)
{
// 室外跑步
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " AnalysisData %d", type);
// 通用数据
sportdata->calories = cyweeInfo->calories;
- sportdata->duration = cyweeInfo->duration;
+ // sportdata->duration = cyweeInfo->duration;
PRINT("normal sportdata->calories[%d],sportdata->duration[%d] \r\n", sportdata->calories, sportdata->duration);
switch (type)
{
{
return sportdata->calories;
}
- /*设置时间戳*/
+ /*设置时间*/
void TraingModel::SetTimestamp()
{
- // std::lock_guard<std::mutex> lock(mutex); // 使用互斥锁确保线程安全
uint64_t time;
- uapi_get_timestampe_ms(&time);
+ if (uapi_get_timestampe_ms(&time) != ERRCODE_SUCC)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get timestamp");
+ return;
+ }
ExerciseState currentState = GetSportState(); // 获取当前运动状态
-
if (currentState == ExerciseState::Start)
{
sportdata->starttime = time;
+
+ char *start_date = (char *)malloc(9 * sizeof(char)); // 分配内存给start_date
+ if (uapi_get_YYMMDD_Time(start_date, '/') != ERRCODE_SUCC)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get start date");
+ free(start_date); // 释放内存
+ return;
+ }
+ PRINT("start_date[%s]\r\n", start_date);
+ sportdata->start_date = std::string(start_date);
+ free(start_date); // 释放内存
+
+ char *start_time = (char *)malloc(9 * sizeof(char)); // 分配内存给start_time
+ if (uapi_get_HHMMSS_Time(start_time, ':', true) != ERRCODE_SUCC)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get start time");
+ free(start_time); // 释放内存
+ return;
+ }
+ // PRINT("start_time [%s]\r\n", start_time);
+ sportdata->start_time = std::string(start_time);
+ free(start_time); // 释放内存
+
+ PRINT("sportdata->start_time [%s]\r\n", (sportdata->start_time).c_str());
}
else if (currentState == ExerciseState::End)
{
sportdata->endtime = time;
- }
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " SetTimestamp [%d %lu]", currentState, time);
+ char *end_time = (char *)malloc(9 * sizeof(char)); // 分配内存给end_time
+ if (uapi_get_HHMMSS_Time(end_time, ':', true) != ERRCODE_SUCC)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get end time");
+ free(end_time); // 释放内存
+ return;
+ }
+ // PRINT("end_time [%s]\r\n", end_time);
+ sportdata->end_time = std::string(end_time);
+ free(end_time); // 释放内存
+
+ PRINT("sportdata->end_time [%s]\r\n", (sportdata->end_time).c_str());
+ }
+ }
+#if 0
+ std::string TraingModel::GetStartTiemStr()
+ {
+ return starttime_;
+ }
+ std::string TraingModel::GetEndTiemStr()
+ {
+ return endtime_;
}
+#endif
// 获取训练时长时间戳
uint32_t TraingModel::GetTrainingTime()
{
- return g_motionTimes;
+ return (sportdata->endtime - sportdata->starttime);
}
/*解析时间戳 返回例如:13:00:22*/
std::string TraingModel::AnalysisTimestamp(uint64_t timestamp)
int minutes = (timestamp % 3600000) / 60000; // 1分钟 = 60000毫秒
int seconds = (timestamp % 60000) / 1000; // 1秒 = 1000毫秒
+ // 将小时、分钟、秒转换为字符串
+ std::string hoursStr = std::to_string(hours);
+ std::string minutesStr = std::to_string(minutes);
+ std::string secondsStr = std::to_string(seconds);
+
// 格式化输出为 HH:MM:SS
std::stringstream ss;
- ss << std::setfill('0') << std::setw(2) << hours << ":" << std::setw(2) << minutes << ":" << std::setw(2) << seconds;
+ ss << std::setfill('0') << std::setw(2) << hoursStr << ":" << std::setw(2) << minutesStr << ":" << std::setw(2) << secondsStr;
return ss.str();
}
return;
}
g_startCounting = NULL;
+ PRINT("g_motionTimes:%d\r\n", sportdata->duration);
g_motionTimes = 0;
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisableTimer!");
}
-
+/***
+ * @Date: 2024-04-15 10:55:58
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-04-16 17:33:11
+ * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingPresenter.cpp
+ */
#include "AppViewIDs.h"
#include "components/ui_label_ext.h"
// 当前Presenter属性实例化的内存指针
static TraingPresenter *g_pTraingPresenter = nullptr;
- QuickTraining *data = new QuickTraining;
TraingPresenter::TraingPresenter()
{
- data = TraingModel::GetInstance()->GetQuickTraining();
g_pTraingPresenter = this;
}
TraingPresenter::~TraingPresenter()
{
g_pTraingPresenter = nullptr;
- delete data;
}
TraingPresenter *TraingPresenter::GetInstance()
if (strcmp(view.GetViewId(), BUTTON1) == 0)
{
NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGNOMAL);
- TraingModel::GetInstance()->SetSportEvent(data->training1_Text);
+ TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORWALKING);
}
if (strcmp(view.GetViewId(), BUTTON2) == 0)
{
NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGNOMAL);
- TraingModel::GetInstance()->SetSportEvent(data->training2_Text);
+ TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORBIKING);
}
if (strcmp(view.GetViewId(), BUTTON3) == 0)
{
NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGNOMAL);
- TraingModel::GetInstance()->SetSportEvent(data->training3_Text);
+ TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORRUNNING);
}
if (strcmp(view.GetViewId(), BUTTONMORE) == 0)
{
NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGMORE);
}
- delete data;
return true;
}
}
static constexpr uint16_t BTNMORE_IMAGE_Y = 324;\r
\r
static TraingView *g_pTraingView{nullptr};\r
- static QuickTraining *data = new QuickTraining;\r
\r
TraingView::TraingView()\r
{\r
- data = TraingModel::GetInstance()->GetQuickTraining();\r
g_pTraingView = this;\r
}\r
\r
{\r
DeInitView();\r
g_pTraingView = nullptr;\r
- delete data;\r
}\r
TraingView *TraingView::GetInstance()\r
{\r
// 初始化标签\r
TraingModel::GetInstance()->InitLabelExt(title_label, TITLE_LABEL_X, TITLE_LABEL_Y, LABEL_X_SIZE, LABEL_Y_SIZE, "title_label", STR_RAPID_TRAINING, DEFAULT_VECTOR_FONT_FILENAME, LABEL_FONT_SIZE);\r
\r
- TraingModel::GetInstance()->InitLabelExt(btn1_label, BTN1_LABEL_X, BTN1_LABEL_Y, LABEL_X_SIZE, LABEL_Y_SIZE, "btu1_label", data->training1_Text, DEFAULT_VECTOR_FONT_FILENAME, LABEL_FONT_SIZE);\r
- TraingModel::GetInstance()->InitLabelExt(btn2_label, BTN2_LABEL_X, BTN2_LABEL_Y, LABEL_X_SIZE, LABEL_Y_SIZE, "btu2_label", data->training2_Text, DEFAULT_VECTOR_FONT_FILENAME, LABEL_FONT_SIZE);\r
- TraingModel::GetInstance()->InitLabelExt(btn3_label, BTN3_LABEL_X, BTN3_LABEL_Y, LABEL_X_SIZE, LABEL_Y_SIZE, "btu3_label", data->training3_Text, DEFAULT_VECTOR_FONT_FILENAME, LABEL_FONT_SIZE);\r
+ TraingModel::GetInstance()->InitLabelExt(btn1_label, BTN1_LABEL_X, BTN1_LABEL_Y, LABEL_X_SIZE, LABEL_Y_SIZE, "btu1_label", STR_EXERCISE_OUTDOORWALKING, DEFAULT_VECTOR_FONT_FILENAME, LABEL_FONT_SIZE);\r
+ TraingModel::GetInstance()->InitLabelExt(btn2_label, BTN2_LABEL_X, BTN2_LABEL_Y, LABEL_X_SIZE, LABEL_Y_SIZE, "btu2_label", STR_EXERCISE_OUTDOORBIKING, DEFAULT_VECTOR_FONT_FILENAME, LABEL_FONT_SIZE);\r
+ TraingModel::GetInstance()->InitLabelExt(btn3_label, BTN3_LABEL_X, BTN3_LABEL_Y, LABEL_X_SIZE, LABEL_Y_SIZE, "btu3_label", STR_EXERCISE_OUTDOORRUNNING, DEFAULT_VECTOR_FONT_FILENAME, LABEL_FONT_SIZE);\r
TraingModel::GetInstance()->InitLabelExt(btnmore_label, BTN2_LABEL_X, BTN3_LABEL_Y, LABEL_X_SIZE, LABEL_Y_SIZE, "btumore_label", STR_MORE, DEFAULT_VECTOR_FONT_FILENAME, LABEL_FONT_SIZE);\r
return true;\r
}\r
*/\r
bool TraingView::AddImageView()\r
{\r
- const char *dataStr1 = (data->training1_Image).c_str();\r
- const char *dataStr2 = (data->training2_Image).c_str();\r
- const char *dataStr3 = (data->training3_Image).c_str();\r
- // const char *dataStr1 = WALKING_60_IMAGE;\r
- // const char *dataStr2 = RUNNING_60_IMAGE;\r
- // const char *dataStr3 = RIDING_60_IMAGE;\r
- TraingModel::GetInstance()->InitImageView(btn1_image, BTN1_IMAGE_X, BTN1_IMAGE_Y, BTN_IMAGE_SIZE, BTN_IMAGE_SIZE, "btn1_image", dataStr1);\r
- TraingModel::GetInstance()->InitImageView(btn2_image, BTN2_IMAGE_X, BTN2_IMAGE_Y, BTN_IMAGE_SIZE, BTN_IMAGE_SIZE, "btn2_image", dataStr2);\r
- TraingModel::GetInstance()->InitImageView(btn3_image, BTN3_IMAGE_X, BTN3_IMAGE_Y, BTN_IMAGE_SIZE, BTN_IMAGE_SIZE, "btn3_image", dataStr3);\r
+\r
+ TraingModel::GetInstance()->InitImageView(btn1_image, BTN1_IMAGE_X, BTN1_IMAGE_Y, BTN_IMAGE_SIZE, BTN_IMAGE_SIZE, "btn1_image", WALKING_60_IMAGE);\r
+ TraingModel::GetInstance()->InitImageView(btn2_image, BTN2_IMAGE_X, BTN2_IMAGE_Y, BTN_IMAGE_SIZE, BTN_IMAGE_SIZE, "btn2_image", RIDING_60_IMAGE);\r
+ TraingModel::GetInstance()->InitImageView(btn3_image, BTN3_IMAGE_X, BTN3_IMAGE_Y, BTN_IMAGE_SIZE, BTN_IMAGE_SIZE, "btn3_image", RUNNING_60_IMAGE);\r
TraingModel::GetInstance()->InitImageView(btnmore_image, BTNMORE_IMAGE_X, BTNMORE_IMAGE_Y, BTN_IMAGE_SIZE, BTN_IMAGE_SIZE, "btnmore_image", MORE_ICON_IMAGE);\r
return true;\r
}\r
// 处理数据为空的情况\r
return;\r
}\r
-\r
- double distance_km = sportdata->distance / 1000.0; // 转换为公里并保留两位小数\r
- std::stringstream ss;\r
- ss << std::fixed << std::setprecision(2) << distance_km;\r
- std::string distanceStr = ss.str();\r
+ std::string distanceStr;\r
+ if (sportdata->distance != 0)\r
+ {\r
+ double distance_km = sportdata->distance / 1000.0; // 转换为公里并保留两位小数\r
+ std::stringstream ss;\r
+ ss << std::fixed << std::setprecision(2) << distance_km;\r
+ distanceStr = ss.str();\r
+ }\r
+ else\r
+ {\r
+ distanceStr = "--";\r
+ }\r
\r
std::string durationStr = std::to_string(sportdata->duration);\r
std::string stepsStr = (sportdata->steps != 0) ? std::to_string(sportdata->steps) : "--";\r
ControlSensor(ExerciseState::End);\r
if (TraingCardView::GetInstance()->RefreshEndView())\r
{\r
+ //进行存储操作?\r
NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGWIN);\r
}\r
else\r
{\r
NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGMORE);\r
}\r
-#if 0\r
- // 在点击事件中打印 SportData 对象之前,确保结束时间戳已经被设置\r
- if (TraingModel::GetInstance()->GetSportdata()->endtime == 0 && TraingModel::GetInstance()->GetSportState() == ExerciseState::End)\r
- {\r
- PRINT("RESET ENDTIMESTAMP\r\n");\r
- TraingModel::GetInstance()->SetTimestamp(); // 如果结束时间戳为0且当前为结束状态,再次调用 SetTimestamp 设置结束时间戳\r
- }\r
- // 打印 SportData 中的数据\r
- SportData *sportData = TraingModel::GetInstance()->GetSportdata();\r
-\r
- std::string formattedStartTime = TraingModel::GetInstance()->AnalysisTimestamp(sportData->starttime);\r
- std::string formattedEndTime = TraingModel::GetInstance()->AnalysisTimestamp(sportData->endtime);\r
- std::string formattedTimeRange = formattedStartTime + "-" + formattedEndTime;\r
-\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "【SportData - StartTime: [%lu], EndTime: [%lu] %s】", sportData->starttime, sportData->endtime, formattedTimeRange.c_str());\r
-#endif\r
}\r
// 返回按键\r
if (strcmp(view.GetViewId(), BUTTONBACK) == 0)\r
+/***
+ * @Date: 2024-04-15 10:55:58
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-04-16 17:36:17
+ * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/Training_CardPresenter.cpp
+ */
#include "traing/training_card/include/Training_CardPresenter.h"
#include "traing/training_card/include/Training_CardView.h"
namespace OHOS
{
- static QuickTraining *data = new QuickTraining;
+
bool TraingOnClickListener::OnClick(UIView &view, const ClickEvent &event)
{
UNUSED(event);
if (strcmp(view.GetViewId(), BUTTON1) == 0)
{
NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGNOMAL);
- TraingModel::GetInstance()->SetSportEvent(data->training1_Text);
+ TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORWALKING);
}
if (strcmp(view.GetViewId(), BUTTON2) == 0)
{
NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGNOMAL);
- TraingModel::GetInstance()->SetSportEvent(data->training2_Text);
+ TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORBIKING);
}
if (strcmp(view.GetViewId(), BUTTON3) == 0)
{
NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGNOMAL);
- TraingModel::GetInstance()->SetSportEvent(data->training3_Text);
+ TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORRUNNING);
}
if (strcmp(view.GetViewId(), BUTTONMORE) == 0)
{
namespace OHOS\r
{\r
static Training_CardView *g_pTraining_CardView{nullptr};\r
- static QuickTraining *data = new QuickTraining;\r
\r
Training_CardView::Training_CardView()\r
{\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Training_CardView::Training_CardView");\r
SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);\r
g_pTraining_CardView = this;\r
- data = TraingModel::GetInstance()->GetQuickTraining();\r
}\r
\r
Training_CardView::~Training_CardView()\r
RemoveAll();\r
DeInit();\r
g_pTraining_CardView = nullptr;\r
- delete data;\r
}\r
\r
Training_CardView *Training_CardView::GetInstance()\r
};\r
\r
ButtonInfo buttons[] = {\r
- {data->training1_Text, BUTTON1, TRAINING_BUTTONGROUND2, Button1, 86, 118},\r
- {data->training2_Text, BUTTON2, TRAINING_BOUTTONGROUND, Button2, 236, 118},\r
- {data->training3_Text, BUTTON3, TRAINING_BOUTTONGROUND, Button3, 86, 268},\r
+ {STR_EXERCISE_OUTDOORWALKING, BUTTON1, TRAINING_BUTTONGROUND2, Button1, 86, 118},\r
+ {STR_EXERCISE_OUTDOORBIKING, BUTTON2, TRAINING_BOUTTONGROUND, Button2, 236, 118},\r
+ {STR_EXERCISE_OUTDOORRUNNING, BUTTON3, TRAINING_BOUTTONGROUND, Button3, 86, 268},\r
{STR_MORE, BUTTONMORE, TRAINING_MORE, ButtonMore, 236, 268}};\r
\r
for (auto &buttonInfo : buttons)\r
return ERRCODE_SUCC;
}
+/**
+ * @param {char} *p_time
+ * @param {char} 隔断符
+ * @brief 获取日期
+ */
+errcode_t uapi_get_YYMMDD_Time(char *p_time, char separator)
+{
+ if (p_time == NULL)
+ {
+ return ERRCODE_FAIL; // 返回空指针错误码
+ }
+
+ time_t currtime;
+ struct tm *timeinfo;
+ time(&currtime);
+ timeinfo = localtime(&currtime);
+
+ // 根据传入的分隔符参数选择中间分隔符
+ char sep[2] = {separator, '\0'};
+
+ // 将年月日信息存储到 p_time 变量中,使用指定的分隔符
+ sprintf(p_time, "%02d%s%02d%s%02d", timeinfo->tm_year + 1900, sep, timeinfo->tm_mon + 1, sep, timeinfo->tm_mday);
+
+ return ERRCODE_SUCC;
+}
+/**
+ * @param {char} *p_time
+ * @param {char} 隔断符
+ * @param {bool} 是否包含秒
+ * @brief 获取时间
+ */
+errcode_t uapi_get_HHMMSS_Time(char *p_time, char separator, bool include_seconds)
+{
+ if (p_time == NULL)
+ {
+ return ERRCODE_FAIL; // 返回空指针错误码
+ }
+
+ time_t currtime;
+ struct tm *timeinfo;
+ time(&currtime);
+ timeinfo = localtime(&currtime);
+
+ // 根据传入的分隔符参数选择中间分隔符
+ char sep[2] = {separator, '\0'};
+
+ // 根据传入的 include_seconds 参数决定是否包含秒
+ if (include_seconds)
+ {
+ sprintf(p_time, "%02d%s%02d%s%02d", timeinfo->tm_hour, sep, timeinfo->tm_min, sep, timeinfo->tm_sec);
+ }
+ else
+ {
+ sprintf(p_time, "%02d%s%02d", timeinfo->tm_hour, sep, timeinfo->tm_min);
+ }
+
+ return ERRCODE_SUCC;
+}
+
/// @brief 控制屏幕是否常亮
/// @param turnOnFlag 1:常亮屏幕
/// @param turnOnFlag 0:取消常亮
/**获取日期*/
errcode_t uapi_get_yyyymmddhhmmss_Date(char *date);
+/*获取日期*/
+errcode_t uapi_get_YYMMDD_Time(char *p_time, char separator);
+/*获取时间*/
+errcode_t uapi_get_HHMMSS_Time(char *p_time, char separator, bool include_seconds);
+
char *uapi_get_local_yyyymmdd_date(void);
void ScreenAlwaysOnCtr(uint8_t turnOnFlag);