增加网络状态判断
authorCaisking <Casiking@zhihuishixun.com>
Sun, 21 Sep 2025 03:57:35 +0000 (11:57 +0800)
committerCaisking <Casiking@zhihuishixun.com>
Sun, 21 Sep 2025 03:57:35 +0000 (11:57 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/include/ThunderBirdModel.h
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdMainView.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp

index cc7bc99..3b30d56 100644 (file)
@@ -135,7 +135,18 @@ namespace OHOS
         // IMEI状态管理函数
         bool IsIMEIValid() const;
         void CheckIMEIStatus();
-  
+        void SetIMEIValid(bool valid);
+        
+        // 网络状态管理函数
+        int GetSimStatus() const;
+        int GetCat1PowerStatus() const;
+        int GetSignalStrength() const;
+        int GetNetworkStatus() const;
+        int GetNetworkType() const;
+        void UpdateNetworkStatus();
+        bool HasNetwork() const;
+        bool IsNetworkStatusChanged() const;
+        void SetNetworkStatusChanged(bool changed);
 
         // 对话状态相关函数
         int GetConversationStatus();
@@ -174,6 +185,15 @@ namespace OHOS
         // IMEI状态管理
         bool m_imeiValid;              // IMEI是否有效标志位
         bool m_imeiChecked;            // IMEI是否已检查过
+        
+        // 网络状态管理
+        int m_simStatus;               // SIM卡状态
+        int m_cat1PowerStatus;         // CAT1电源状态
+        int m_signalStrength;          // 信号强度
+        int m_networkStatus;           // 网络状态
+        int m_networkType;             // 网络类型
+        bool m_hasNetwork;             // 网络连接标志位
+        bool m_networkStatusChanged;   // 网络状态变化标志位
     };
 }
 
index 62482c1..b7cefa3 100644 (file)
@@ -867,11 +867,15 @@ namespace OHOS
 
     void ThunderBirdMainView::updateSignalDisplay() // 信号接收
     {
-        int sim = uapi_dev_runtime_get_cat1_simstat();
-        int cat1_powerOn = uapi_dev_runtime_get_cat1_powerstat();
-        int signal = uapi_dev_runtime_get_cat1_signal();
-        int network_on = uapi_dev_runtime_get_cat1_networkstat();
-        int cat1_network_type = uapi_dev_runtime_get_cat1_networtype();
+        // 更新网络状态
+        ThunderBirdModel::GetInstance()->UpdateNetworkStatus();
+        
+        // 从Model获取网络状态信息
+        int sim = ThunderBirdModel::GetInstance()->GetSimStatus();
+        int cat1_powerOn = ThunderBirdModel::GetInstance()->GetCat1PowerStatus();
+        int signal = ThunderBirdModel::GetInstance()->GetSignalStrength();
+        int network_on = ThunderBirdModel::GetInstance()->GetNetworkStatus();
+        int cat1_network_type = ThunderBirdModel::GetInstance()->GetNetworkType();
         // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sim = %d", sim);
         // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "cat1_powerOn = %d", cat1_powerOn);
         // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "signal = %d", signal);
index 9d09497..72bf980 100644 (file)
                                            m_reminderHideActive(false), m_reminderHideTime(0),
                                            m_otaCountdownActive(false), m_otaCountdownValue(0),
                                            m_countUpActive(false), m_countUpValue(0), m_countUpTarget(0),
-                                           m_imeiValid(false), m_imeiChecked(false)
+                                           m_imeiValid(false), m_imeiChecked(false),
+                                           m_simStatus(0), m_cat1PowerStatus(0), m_signalStrength(0),
+                                           m_networkStatus(0), m_networkType(0),
+                                           m_hasNetwork(false), m_networkStatusChanged(false)
      {
          // 初始化时加载提醒数据
          // LoadRemindersFromFile();
         m_reminderHideTime = intervalMs / 1000; // 转换为秒数
         
         // 先隐藏全部提醒界面
-        auto *reminder = ThunderBirdReminderView::GetInstance();
+         auto *reminder = ThunderBirdReminderView::GetInstance();
         if (reminder != nullptr) {
-            reminder->HideAll();
-        }
+             reminder->HideAll();
+         }
         
         // 确保时间显示定时器正在运行
         if (m_timeDisplayTimer == nullptr) {
              WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::StartBootOperation: 未绑定");
              return 0;
          }
-        return 1;
-     }
+             return 1;
+         }
      //判断是否绑定
      ThunderBirdModel::BindingStatus ThunderBirdModel::CheckBindingStatus()
      {
      {
          return g_isRecording;
      }
-
+ 
      bool ThunderBirdModel::StopRecording()
      {
          WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::StopRecording");
 
      
  
-    /*
-            1、新手引导 
-                判断是否绑定 返回,0:绑定,1:未绑定;2:没有网络 使用枚举
-            2、对话
-                2.1 录音
-                    开始录音接口
-                    停止录音接口
-                2.2 发送录音接口
-                2.3 接收回答数据
-                2.4 对话文本获取接口 
-                2.5 对话结束接口
-            3、哄睡模式
-            4、事项提醒
-    */ 
+ /*
+         1、新手引导 
+             判断是否绑定 返回,0:绑定,1:未绑定;2:没有网络 使用枚举
+         2、对话
+             2.1 录音
+                 开始录音接口
+                 停止录音接口
+             2.2 发送录音接口
+             2.3 接收回答数据
+             2.4 对话文本获取接口 
+             2.5 对话结束接口
+         3、哄睡模式
+         4、事项提醒
+  */ 
 
     // ==================== 时间显示定时器实现 ====================
 
      */
     void ThunderBirdModel::StatusCallback()
     {
+        // ==================== 网络状态处理 ====================
+        // 更新网络状态信息(包括SIM卡、信号强度、网络连接等)
+        UpdateNetworkStatus();
+        
+        // 检查网络状态是否发生变化
+        if (IsNetworkStatusChanged()) {
+            if (HasNetwork()) {
+                // 网络连接成功,调用HTTP服务获取设备Token
+                do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_GET_DEVICE_TOKEN, NULL, 0);
+                // 获取一下OTA 是否有最新版本
+                ota_update_boot();
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Network connected, calling HTTP service");
+            } else {
+                // 网络断开,记录状态变化日志
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Network disconnected");
+            }
+            // 重置网络状态变化标志位,避免重复处理
+            SetNetworkStatusChanged(false);
+        }
+        
         // 更新设备状态
         UpdateDeviceStatus();
         
         WEARABLE_LOGD("IMEI status checked: valid=%d", m_imeiValid);
     }
 
+    // ==================== 网络状态管理函数实现 ====================
+    
+    /**
+     * @brief 获取SIM卡状态
+     * @return SIM卡状态值
+     * @note 0=无SIM卡,1=有SIM卡,其他值表示SIM卡异常状态
+     */
+    int ThunderBirdModel::GetSimStatus() const
+    {
+        return m_simStatus;
+    }
+
+    /**
+     * @brief 获取CAT1模块电源状态
+     * @return CAT1电源状态值
+     * @note 0=关机,1=开机,其他值表示电源异常状态
+     */
+    int ThunderBirdModel::GetCat1PowerStatus() const
+    {
+        return m_cat1PowerStatus;
+    }
+
+    /**
+     * @brief 获取信号强度
+     * @return 信号强度值
+     * @note 信号强度范围通常为0-31,数值越大信号越强
+     */
+    int ThunderBirdModel::GetSignalStrength() const
+    {
+        return m_signalStrength;
+    }
+
+    /**
+     * @brief 获取网络连接状态
+     * @return 网络连接状态值
+     * @note 0=未连接,1=已连接,其他值表示连接异常状态
+     */
+    int ThunderBirdModel::GetNetworkStatus() const
+    {
+        return m_networkStatus;
+    }
+
+    /**
+     * @brief 获取网络类型
+     * @return 网络类型值
+     * @note 不同数值代表不同的网络类型(2G/3G/4G/5G等)
+     */
+    int ThunderBirdModel::GetNetworkType() const
+    {
+        return m_networkType;
+    }
+
+    /**
+     * @brief 更新网络状态信息
+     * @details 从底层API获取最新的网络状态信息,并检测状态变化
+     * @note 此函数会更新所有网络相关的状态变量,并设置变化标志位
+     * 
+     * 更新的状态包括:
+     * - SIM卡状态 (m_simStatus)
+     * - CAT1电源状态 (m_cat1PowerStatus) 
+     * - 信号强度 (m_signalStrength)
+     * - 网络连接状态 (m_networkStatus)
+     * - 网络类型 (m_networkType)
+     * - 网络连接标志位 (m_hasNetwork)
+     * - 状态变化标志位 (m_networkStatusChanged)
+     */
+    void ThunderBirdModel::UpdateNetworkStatus()
+    {
+        // 保存之前的网络状态,用于变化检测
+        int previousNetworkStatus = m_networkStatus;
+        bool previousHasNetwork = m_hasNetwork;
+        
+        // 从底层API获取最新的网络状态信息
+        m_simStatus = uapi_dev_runtime_get_cat1_simstat();           // SIM卡状态
+        m_cat1PowerStatus = uapi_dev_runtime_get_cat1_powerstat();   // CAT1电源状态
+        m_signalStrength = uapi_dev_runtime_get_cat1_signal();       // 信号强度
+        m_networkStatus = uapi_dev_runtime_get_cat1_networkstat();   // 网络连接状态
+        m_networkType = uapi_dev_runtime_get_cat1_networtype();      // 网络类型
+        
+        // 更新网络连接标志位:m_networkStatus == 1表示有网络连接
+        m_hasNetwork = (m_networkStatus == 1);
+        
+        // 检测网络状态是否发生变化
+        if (previousNetworkStatus != m_networkStatus || previousHasNetwork != m_hasNetwork) {
+            m_networkStatusChanged = true;
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"Network status changed: previous=%d, current=%d, hasNetwork=%d", 
+                         previousNetworkStatus, m_networkStatus, m_hasNetwork);
+        }
+        
+        // 记录网络状态更新日志
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"Network status updated: sim=%d, power=%d, signal=%d, network=%d, type=%d, hasNetwork=%d", 
+                     m_simStatus, m_cat1PowerStatus, m_signalStrength, m_networkStatus, m_networkType, m_hasNetwork);
+    }
+
+    /**
+     * @brief 获取网络连接状态
+     * @return true表示有网络连接,false表示无网络连接
+     * @note 基于m_networkStatus == 1判断网络连接状态
+     */
+    bool ThunderBirdModel::HasNetwork() const
+    {
+        return m_hasNetwork;
+    }
+
+    /**
+     * @brief 检查网络状态是否发生变化
+     * @return true表示网络状态发生变化,false表示无变化
+     * @note 用于检测网络状态变化,避免重复处理
+     */
+    bool ThunderBirdModel::IsNetworkStatusChanged() const
+    {
+        return m_networkStatusChanged;
+    }
+
+    /**
+     * @brief 设置网络状态变化标志位
+     * @param changed true表示状态已变化,false表示重置标志位
+     * @note 用于控制网络状态变化检测,处理完成后应重置为false
+     */
+    void ThunderBirdModel::SetNetworkStatusChanged(bool changed)
+    {
+        m_networkStatusChanged = changed;
+    }
 
  }
  
\ No newline at end of file