增加fd30的星历交互逻辑 2247/2 2247/head
authorCaisking <Casiking@zhihuishixun.com>
Mon, 15 Sep 2025 10:36:05 +0000 (18:36 +0800)
committerCaisking <Casiking@zhihuishixun.com>
Mon, 15 Sep 2025 10:36:05 +0000 (18:36 +0800)
code/sdk/application/wearable/CMakeLists.txt
code/sdk/application/wearable/fd230/nativeapp/nativeui/ephemeris_download/include/EphemerisDownloadModel.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/ephemeris_download/src/EphemerisDownloadModel.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/ephemeris_download/src/EphemerisDownloadView.cpp

index 54d668e..d16f2a3 100644 (file)
@@ -2,7 +2,7 @@
 # @brief    cmake make file
 # Copyright (c) @CompanyNameMagicTag 2022-2022. All rights reserved.
 #===============================================================================
-if("BOARD_FD230" IN_LIST DEFINES)
+if("FD230" IN_LIST DEFINES)
 add_subdirectory_if_exist(fd230)
 elseif("BOARD_N9" IN_LIST DEFINES)
 add_subdirectory_if_exist(n9)
index ae781fe..702f61e 100644 (file)
@@ -36,6 +36,8 @@ namespace OHOS
         void SetEphemerisValidityPeriod(const std::string &period);
         //获取下载进度
         int GetEphemerisDownloadProgress();
+        //获取有效期
+        bool GetValidityPeriod();
 
     private:
         
index d084be8..3da91e2 100644 (file)
@@ -9,15 +9,43 @@
 #include "gnss_http_server.h"
 #endif
 
+//最长的有效期 目前为2天
+#define MAX_VALIDITY_PERIOD 2 * 24 * 60
+
 namespace OHOS {
 
 EphemerisDownloadModel::EphemerisDownloadModel() {}
 
 EphemerisDownloadModel::~EphemerisDownloadModel() {}
 
+void EphemerisDownloadModel::DownloadEphemeris() {}
+//获取有效期接口
+bool EphemerisDownloadModel::GetValidityPeriod() {
+#if defined(SUPPORT_GNSS)
+  int validityPeriod = gnss_check_agnss_status();
+  if (validityPeriod > 0 && validityPeriod <= MAX_VALIDITY_PERIOD) {
+    return true;
+  }
+#endif
+  return false;
+}
+/*
+1、调用下载接口
+2、修改状态为下载中
+3、检测有效期,如果是有效的 则不能下载
+4、如果状态为下载中,则不能下载
+*/
 void EphemerisDownloadModel::DownloadEphemeris() {
-  //调用下载接口
-  //修改状态为下载中
+  if (ephemerisDownloadStatus == EphemerisDownloadStatus::DOWNLOADING) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PGNSS正在下载");
+    return;
+  }
+#if defined(SUPPORT_GNSS)
+  if (GetValidityPeriod()) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PGNSS有效");
+    return;
+  }
+#endif
   ephemerisDownloadStatus = EphemerisDownloadStatus::DOWNLOADING;
 #if defined(SUPPORT_GNSS)
   do_gnss_http_server_send_data(GNSS_HTTP_SERVICE_CMD_DOWNLOAD_AGNSS, NULL, 0);
@@ -25,30 +53,25 @@ void EphemerisDownloadModel::DownloadEphemeris() {
 }
 /*
 获取下载状态
-//返回值:过期返回8,有效返回剩余时间的分钟数,错误返回-1
+返回值:过期返回0,有效返回剩余时间的分钟数,错误返回-1
 int gnss_check_agnss_status(void);
 
-//简化的下载进度状态位
-//0:正在建立HTTP连接
-//-1:下载失败
-//1-9:下载进度(10%,20%,...,90%)
-//10:下载完成
+简化的下载进度状态位
+0:正在建立HTTP连接
+-1:下载失败
+1-9:下载进度(10%,20%,...,90%)
+10:下载完成
 int gnss_get_download_status(void);
 */
 int EphemerisDownloadModel::GetEphemerisDownloadProgress() {
 #if defined(SUPPORT_GNSS)
   int download_status = gnss_get_download_status();
-  if(download_status == -1)
-  {
-    ephemerisDownloadStatus =  EphemerisDownloadStatus::FAILED;
-  }
-  else if(download_status == 0)
-  {
-    ephemerisDownloadStatus =  EphemerisDownloadStatus::DOWNLOADING;
-  }
-  else if(download_status == 10)
-  {
-    ephemerisDownloadStatus =  EphemerisDownloadStatus::DOWNLOADED;
+  if (download_status == -1) {
+    ephemerisDownloadStatus = EphemerisDownloadStatus::FAILED;
+  } else if (download_status == 0) {
+    ephemerisDownloadStatus = EphemerisDownloadStatus::DOWNLOADING;
+  } else if (download_status == 10) {
+    ephemerisDownloadStatus = EphemerisDownloadStatus::DOWNLOADED;
   }
   return download_status;
 #endif
@@ -69,8 +92,14 @@ std::string EphemerisDownloadModel::GetEphemerisValidityPeriod() {
 #if defined(SUPPORT_GNSS)
   int validityPeriod = gnss_check_agnss_status();
   if (validityPeriod > 0) {
-    ephemerisValidityPeriod =
-        "有效期: " + std::to_string(validityPeriod) + "分钟";
+
+    //需要显示 天 小时 分钟的格式
+    int days = validityPeriod / (24 * 60);
+    int hours = (validityPeriod % (24 * 60)) / 60;
+    int minutes = validityPeriod % 60;
+    ephemerisValidityPeriod = "有效期: " + std::to_string(days) + "天" +
+                              std::to_string(hours) + "小时" +
+                              std::to_string(minutes) + "分钟";
   } else {
     ephemerisValidityPeriod = "无星历数据";
   }
index b4a3538..96e0bd4 100644 (file)
@@ -72,7 +72,7 @@ bool EphemerisDownloadView::EphemerisDownloadInit() {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "labelTitle_ new failed");
         return false;
     }
-    labelTitle_->SetPosition(83, 50, 300, 60);
+    labelTitle_->SetPosition(83, 50, 350, 60);
     labelTitle_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
     labelTitle_->SetText("下载星历");
     labelTitle_->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS);
@@ -85,7 +85,7 @@ bool EphemerisDownloadView::EphemerisDownloadInit() {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "labelStatus_ new failed");
         return false;
     }
-    labelStatus_->SetPosition(90, 120, 200, 40);
+    labelStatus_->SetPosition(90, 120, 300, 40);
     labelStatus_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 24);
     labelStatus_->SetText("未下载");
     labelStatus_->SetTextColor(Color::Yellow());
@@ -97,7 +97,7 @@ bool EphemerisDownloadView::EphemerisDownloadInit() {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "labelValidity_ new failed");
         return false;
     }
-    labelValidity_->SetPosition(90, 170, 300, 40);
+    labelValidity_->SetPosition(90, 170, 350, 40);
     labelValidity_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 20);
     labelValidity_->SetText("有效期: 无");
     labelValidity_->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f));
@@ -114,6 +114,19 @@ bool EphemerisDownloadView::EphemerisDownloadInit() {
     btnDownload_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 24);
     btnDownload_->SetViewId(DOWNLOAD_ID);
     btnDownload_->SetOnClickListener(presenter_);
+
+    //如果有效期大于0,则不能下载 下载按键显示灰色;否则显示绿色
+    if(EphemerisDownloadModel::GetInstance().GetValidityPeriod())
+    {
+        btnDownload_->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x5f));
+        btnDownload_->SetBackgroundColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x5f));
+    }
+    else
+    {
+        btnDownload_->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0xff));
+        btnDownload_->SetBackgroundColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0xff));
+    }
+    
     AddViewToRootContainer(btnDownload_);
 
     // 初始化返回按钮