From: Caisking Date: Fri, 11 Jul 2025 06:55:16 +0000 (+0800) Subject: 修改gps相关数据接口 X-Git-Url: http://git.snicker.com.cn/css/static/gitweb.css?a=commitdiff_plain;h=7ebdf76918c145ae891b445f455592187f1914f0;p=mirrors%2FFD230.git 修改gps相关数据接口 --- 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 7f1bfe031..38b2b10de 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingModel.h @@ -110,7 +110,8 @@ namespace OHOS { #define TRAINING_RECORD_FILE "user/userdata/sport/Record.json" #define TRAINING_HEART_FILE "user/userdata/sport/HeartTabel/" #define TRAINING_PACE_FILE "user/userdata/sport/PaceTabel/" -#define TRAINING_GPS_FILE "user/userdata/sport/GPS/" +#define TRAINING_CANVAS_FILE "user/userdata/sport/Canvas_Point/" +#define TRAINING_GPS_FILE "user/userdata/sport/GPS_Point/" #define MAX_DATA_COUNT 10 #define TIMER 1 @@ -371,14 +372,15 @@ public: void AddGPSData(uint32_t timestamp, double latitude, double longitude); bool SaveCanvasData(); void ClearCanvasData(); - std::string GetGPSDataPath(uint32_t timestamp); - //获取轨迹点集 + bool LoadCanvasData(const std::string &filePath); + std::string GetCanvasDataPath(uint32_t timestamp); std::vector GetCanvasData() const; bool GetGPSConnectState(); void SetGPSConnectState(bool state); - bool LoadGPSData(const std::string &filePath); void OpenGPS(); void CloseGPS(); + bool SaveGPSData(); + std::string GetGPSDataPath(uint32_t timestamp); //运动心率、gps开启准备 void start_heart_gps(); //运动心率、gps关闭 diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataView.cpp index 235e2d623..5ffceca2e 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataView.cpp @@ -654,9 +654,9 @@ void TraingEnddataView::InitData() { //读取一下gps文件 std::string gpsFilePath = - TraingModel::GetInstance()->GetGPSDataPath(enddata->starttime); + TraingModel::GetInstance()->GetCanvasDataPath(enddata->starttime); if (!gpsFilePath.empty()) { - if (TraingModel::GetInstance()->LoadGPSData(gpsFilePath) == false) { + if (TraingModel::GetInstance()->LoadCanvasData(gpsFilePath) == false) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gps文件加载失败"); return; } 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 02e3b3bf0..fdcfced2f 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp @@ -807,7 +807,6 @@ void TraingModel::SetTimestamp() { stop_heart_gps(); // 停止心率和gps数据采集 - #if 0 // 重置训练目标 [发生在训练前] sportTag_ = 0; @@ -1425,13 +1424,15 @@ bool TraingModel::SaveSportData() { // 保存速度表 if (!SavePaceTable()) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SaveSpeedData is error!"); - // uapi_dev_runtime_set_train_storage_status(0); // 恢复状态 // return false; } // 保存GPS数据 if (!SaveCanvasData()) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SaveGpsData is error!"); - // uapi_dev_runtime_set_train_storage_status(0); // 恢复状态 + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SaveCanvasData is error!"); + return false; //必须手表端存储成功 + } + if (!SaveGPSData()) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SaveGPSData is error!"); // return false; } } @@ -2843,12 +2844,13 @@ void TraingModel::AddGPSData(uint32_t timestamp, double latitude, "Added GPS data #%zu: ts=%u, (%.6f, %.6f)", gpsData.size(), timestamp, latitude, longitude); } -//保存gps数据 + +//保存canvas数据 bool TraingModel::SaveCanvasData() { //打印一下gps的数据 for (const auto &point : gpsData) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GPS Data: Latitude = %f, Longitude = %f", point.latitude, point.longitude); } @@ -2858,13 +2860,13 @@ bool TraingModel::SaveCanvasData() { return false; } - CreateDirectoryIfNotExists(TRAINING_GPS_FILE); + CreateDirectoryIfNotExists(TRAINING_CANVAS_FILE); WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "canvasData.size() = %zu", canvasData.size()); std::string filePath = - TRAINING_GPS_FILE + std::to_string(sportdata->starttime) + ".bin"; + TRAINING_CANVAS_FILE + std::to_string(sportdata->starttime) + ".bin"; WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SaveCanvasData filePath: %s", filePath.c_str()); @@ -2885,15 +2887,18 @@ bool TraingModel::SaveCanvasData() { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SaveGPSData Success."); return true; // 返回成功 } +// 清除canvas数据 void TraingModel::ClearCanvasData() { canvasData.clear(); } - -std::string TraingModel::GetGPSDataPath(uint32_t timestamp) { +// 获取轨迹点集 +std::vector TraingModel::GetCanvasData() const { return canvasData; } +// 获取canvas数据 +std::string TraingModel::GetCanvasDataPath(uint32_t timestamp) { // 首先检查完全匹配的时间戳 std::string exactFilePath = - TRAINING_GPS_FILE + std::to_string(timestamp) + ".bin"; - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gps表: %s", exactFilePath.c_str()); + TRAINING_CANVAS_FILE + std::to_string(timestamp) + ".bin"; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "canvas表: %s", exactFilePath.c_str()); if (IsFileAccessibleAndNotEmpty(exactFilePath)) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "找到gps表: %s", + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "找到canvas表: %s", exactFilePath.c_str()); return exactFilePath; // 返回完全匹配的文件路径 } @@ -2902,18 +2907,19 @@ std::string TraingModel::GetGPSDataPath(uint32_t timestamp) { for (int i = -2; i <= 2; ++i) { uint32_t checkTimestamp = timestamp + i; std::string filePath = - TRAINING_GPS_FILE + std::to_string(checkTimestamp) + ".bin"; + TRAINING_CANVAS_FILE + std::to_string(checkTimestamp) + ".bin"; if (IsFileAccessibleAndNotEmpty(filePath)) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "找到gps表: %s", filePath.c_str()); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "找到canvas表: %s", + filePath.c_str()); return filePath; // 返回找到的文件路径 } } - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "未找到与时间戳相关的找到gps表。"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "未找到与时间戳相关的找到canvas表。"); return ""; // 未找到文件 } // 加载GPS数据 -bool TraingModel::LoadGPSData(const std::string &filePath) { +bool TraingModel::LoadCanvasData(const std::string &filePath) { std::ifstream gpsFile(filePath, std::ios::binary); if (!gpsFile) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "无法打开文件: %s", @@ -2938,12 +2944,65 @@ bool TraingModel::LoadGPSData(const std::string &filePath) { return false; } - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadGPSData Success. 加载了 %zu 个点", - canvasData.size()); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + "LoadCanvasData Success. 加载了 %zu 个点", canvasData.size()); return true; } -// 获取轨迹点集 -std::vector TraingModel::GetCanvasData() const { return canvasData; } +//////////////////////////////////////gps存储/////////////////////////////////////// +//存储gps数据 +bool TraingModel::SaveGPSData() { + //打印gps数据 + for (const auto &point : gpsData) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, + "GPS Data: Latitude = %f, Longitude = %f", point.latitude, + point.longitude); + } + CreateDirectoryIfNotExists(TRAINING_GPS_FILE); + std::string filePath = + TRAINING_GPS_FILE + std::to_string(sportdata->starttime) + ".bin"; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SaveGPSData filePath: %s", + filePath.c_str()); + + std::ofstream gpsFile(filePath, std::ios::binary); + if (!gpsFile) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "无法打开文件: %s", + filePath.c_str()); + return false; // 返回失败 + } + // 写入gps数据 + if (!gpsFile.write(reinterpret_cast(gpsData.data()), + gpsData.size() * sizeof(GPSData))) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "写入GPS数据失败。"); + return false; // 返回失败 + } + gpsFile.close(); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SaveGPSData Success."); + return true; +} +std::string TraingModel::GetGPSDataPath(uint32_t timestamp) { + // 首先检查完全匹配的时间戳 + std::string exactFilePath = + TRAINING_GPS_FILE + std::to_string(timestamp) + ".bin"; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gps表: %s", exactFilePath.c_str()); + if (IsFileAccessibleAndNotEmpty(exactFilePath)) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "找到gps表: %s", + exactFilePath.c_str()); + return exactFilePath; // 返回完全匹配的文件路径 + } + + // 如果未找到,检查时间戳相差1到2秒的文件 + for (int i = -2; i <= 2; ++i) { + uint32_t checkTimestamp = timestamp + i; + std::string filePath = + TRAINING_GPS_FILE + std::to_string(checkTimestamp) + ".bin"; + if (IsFileAccessibleAndNotEmpty(filePath)) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "找到gps表: %s", filePath.c_str()); + return filePath; // 返回找到的文件路径 + } + } + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "未找到与时间戳相关的找到gps表。"); + return ""; +} //获取GPS连接状态 bool TraingModel::GetGPSConnectState() { return gpsconnect; }