}
//运动心率、gps开启准备
void TraingModel::start_training_heart() {
- if (gpsopen == false) {
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "开始启动GPS定位服务...");
//开启心率检测
#ifdef SUPPORT_PPG_SERVICE
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "启动心率检测服务");
ppg_hr_start();
#endif
- gpsopen = true;
//提前设置训练状态为1
uapi_dev_runtime_set_train_status(1);
- }
}
//运动心率、gps关闭
void TraingModel::stop_heart_gps() {
gnss_stop();
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gnss_stop()调用完成");
});
+ gpsopen = false;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GPS定位服务关闭完成,gpsopen设置为false");
#endif
-
+ }
//关闭心率检测
#ifdef SUPPORT_PPG_SERVICE
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "关闭心率检测服务");
ppg_hr_stop();
#endif
-
- gpsopen = false;
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GPS定位服务关闭完成,gpsopen设置为false");
- //提前设置训练状态为0
+ //设置训练状态为0
uapi_dev_runtime_set_train_status(0);
- }
}
-
- /////////////////////////////////////位置服务定时器/////////////////////////////////////
+
+bool TraingModel::GetGpsOpen() const {
+ return gpsopen;
+}
+
+void TraingModel::SetGpsOpen(bool open) {
+ gpsopen = open;
+}
+
+/////////////////////////////////////位置服务定时器/////////////////////////////////////
/*
* 位置服务定时器说明:
* - 功能:负责获取GPS定位数据,更新GPS连接状态,添加经纬度数据
if (gps_timer_count < 2) {
return;
}
- if (gps_timer_count == 2) {
+
#if defined(SUPPORT_GNSS)
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "开启gps");
- GraphicService::GetInstance()->PostGraphicEvent([]() {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "异步执行gnss_start()");
- gnss_start();
- });
-#endif
- }
- #if defined(SUPPORT_GNSS)
+ /* 延迟 2 秒后首次开启 GPS(规避 gps 注册时序问题) */
+ TraingModel *model = TraingModel::GetInstance();
+ if (gps_timer_count == 2 && model != nullptr && !model->GetGpsOpen()) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "开启gps");
+ GraphicService::GetInstance()->PostGraphicEvent([]() {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "异步执行gnss_start()");
+ gnss_start();
+ });
+ model->SetGpsOpen(true);
+ }
gps_data_t send_gps_data = {0};
gps_data_t *gps_data = getPGPSGlobaldata();
} else {
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GPS定位失败,跳过数据添加");
}
- #endif
- }
+#endif
+}
/*
* @brief 位置服务定时器回调函数
bat_vol.time = time;
bat_vol.percent = cur_percent;
+ PRINT("[battery] 关机/重启存储电量: voltage=%.3fV percent=%d%%\r\n", bat_vol.avg_vol > 0 ? bat_vol.avg_vol : current_battery_info.battery_voltage, cur_percent);
uapi_save_file_data("/user/userdata/battery.bin",(uint8_t *)&bat_vol,sizeof(BAT_VOL_T),"wb");
// uapi_save_file_data("/user/userdata/battery_time.bin",(uint8_t *)&time,sizeof(uint32_t),"wb");
}
cur_percent = battery_get_percent_by_voltage(*voltage);
// cur_percent = battery_get_percent_by_voltage(*voltage);
}
-
+ /* 开机显示电量打印:仅首次确定电量时打印一次 */
+ {
+ static uint8_t boot_printed = 0;
+ if (boot_printed == 0) {
+ float disp_vol = (bat_vol.avg_vol > 3.25f && bat_vol.avg_vol < 4.45f) ? bat_vol.avg_vol : *voltage;
+ PRINT("[battery] 开机读取电量: voltage=%.3fV percent=%d%% (history_percent=%d)\r\n", disp_vol, cur_percent, history_percent);
+ boot_printed = 1;
+ }
+ }
}
// PRINT("cur_percent : %d , history_percent : %d *voltage : %f\n",cur_percent,history_percent,*voltage);
}
//保存config文件到磁盘
// cm_sync_all_config_to_disk();
- //保存电量
+ // 保存电量历史(关机、重启、升级前均会执行,保证下次开机有历史电量可对比)
#ifdef SUPPORT_BATTERY_SERVICE
- PRINT("shutdown_reboot_prejobs_task: Calling send_battery_svr_cmd_msg()\r\n");
- // send_battery_svr_cmd_msg(BATTERY_CMD_SAVE_PERCENT);
+ PRINT("shutdown_reboot_prejobs_task: Calling battery_save_vol()\r\n");
battery_save_vol();
- PRINT("shutdown_reboot_prejobs_task: send_battery_svr_cmd_msg() completed\r\n");
+ PRINT("shutdown_reboot_prejobs_task: battery_save_vol() completed\r\n");
#endif
//重启前要保存时间