stop_heart_gps(); // 停止心率和gps数据采集
-
#if 0
// 重置训练目标 [发生在训练前]
sportTag_ = 0;
// 保存速度表
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;
}
}
"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);
}
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());
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<Point> 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; // 返回完全匹配的文件路径
}
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",
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<Point> 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<const char *>(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; }