Merge #3245 into fd272 from refs/changes/3245/head
author袁清梦 <3449750381@qq.com>
Fri, 6 Mar 2026 06:57:47 +0000 (06:57 +0000)
committer袁清梦 <3449750381@qq.com>
Fri, 6 Mar 2026 06:57:47 +0000 (06:57 +0000)
Code review from 袁清梦

* refs/changes/3245/head: (5 commits squashed)

  - 增加开关机电量打印

  - Merge branch &#39;fd272&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into fd272

  - Merge branch &#39;fd272&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into fd272

  - Merge branch &#39;fd272&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into fd272

  - 优化其他运动不对gps操作

Signed-off-by: Caisking <3449750381@qq.com>
Merged-by: Caisking <3449750381@qq.com>
link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/3245
code/sdk/application/wearable/fd272/nativeapp/nativeui/traing/include/TraingModel.h
code/sdk/application/wearable/fd272/nativeapp/nativeui/traing/src/TraingModel.cpp
code/sdk/zhihui/services/battery/service/battery_driver.cpp
code/sdk/zhihui/utils/custom_utils.c

index 30349ee..b29eaa9 100644 (file)
@@ -389,6 +389,8 @@ public:
   void SetGPSConnectState(bool state);
   void OpenGPS();
   void CloseGPS();
+  bool GetGpsOpen() const;
+  void SetGpsOpen(bool open);
   bool SaveGPSData();
   bool LoadGPSData(const std::string &filePath);
   std::string GetGPSDataPath(uint32_t timestamp);
index cfc1ee5..cecd9a9 100644 (file)
@@ -3174,17 +3174,14 @@ bool TraingModel::LoadGPSData(const std::string &filePath) {
  }
  //运动心率、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() {
@@ -3198,23 +3195,29 @@ bool TraingModel::LoadGPSData(const std::string &filePath) {
       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连接状态,添加经纬度数据
@@ -3237,16 +3240,18 @@ bool TraingModel::LoadGPSData(const std::string &filePath) {
    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();
  
@@ -3285,8 +3290,8 @@ bool TraingModel::LoadGPSData(const std::string &filePath) {
    } else {
      WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GPS定位失败,跳过数据添加");
    }
- #endif
- }
+#endif
+}
  
  /*
   * @brief 位置服务定时器回调函数
index 88c350a..2432bd0 100644 (file)
@@ -531,6 +531,7 @@ void battery_save_vol(void)
 
     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");
 }
@@ -1008,7 +1009,15 @@ static bool adc_get_sample_result(float *voltage, uint8_t channel)
                     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);
     }
index 46209e4..9445789 100644 (file)
@@ -433,12 +433,11 @@ void shutdown_reboot_prejobs_task(void)
     //保存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
 
     //重启前要保存时间