增加自动挂断
authorhcj <1224667075@qq.com>
Wed, 3 Sep 2025 08:43:29 +0000 (16:43 +0800)
committerhcj <1224667075@qq.com>
Wed, 3 Sep 2025 08:43:29 +0000 (16:43 +0800)
code/sdk/application/wearable/fd230/service/msg_center/src/notify/phone_crt.cpp

index d692535..ada010a 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "cat1_UI_hal.h"
 #include "custom_utils.h"
-#include "phoneaddressmodel.h"
+#include "phone/include/phoneaddressmodel.h"
 #include "components/ui_label_button.h"
 #include "NativeAbility.h"
 #include "dial_sos_c.h"
@@ -74,7 +74,9 @@ void sos_falg_add(void)
     {
         if(OHOS::get_sos_number_count()<=0)
         {
+#ifdef SUPPORT_CAT1_SERVICE
             cat1_UI_call_dial("SOS");
+#endif
             return;
         }
 
@@ -85,7 +87,9 @@ void sos_falg_add(void)
         if( uapi_dev_runtime_get_cat1_simstat())
         #endif
         {
+#ifdef SUPPORT_CAT1_SERVICE
             cat1_UI_call_dial(OHOS:: get_sos_number(sos_dail_falg));
+#endif
         }
         #if SOS_HFP_FALG
         else if(uapi_hfp_connect_state())
@@ -95,7 +99,9 @@ void sos_falg_add(void)
         #endif
         else
         {
+#ifdef SUPPORT_CAT1_SERVICE
              cat1_UI_call_dial("SOS");
+#endif
         }
         sos_dail_falg++;
         if(sos_dail_falg>=OHOS::get_sos_number_count()*3)
@@ -114,7 +120,9 @@ void start_SOS_phone_dail(void)
 {
     if(OHOS::get_sos_number_count()<=0)
     {
+#ifdef SUPPORT_CAT1_SERVICE
         cat1_UI_call_dial("SOS");
+#endif
         return;
     }
     #if SOS_TEST_FLAG
@@ -123,7 +131,9 @@ void start_SOS_phone_dail(void)
     if(uapi_dev_runtime_get_cat1_simstat())
     #endif
     {
+#ifdef SUPPORT_CAT1_SERVICE
         cat1_UI_call_dial(OHOS::get_sos_number(0));
+#endif
          sos_dail_falg=1;
     }
     #if SOS_HFP_FALG
@@ -135,7 +145,9 @@ void start_SOS_phone_dail(void)
     #endif
     else
     {
+#ifdef SUPPORT_CAT1_SERVICE
         cat1_UI_call_dial("SOS");
+#endif
     }
     
    
@@ -517,7 +529,9 @@ void calllog_info_init(uint8_t type)
     info.creationTime = tmptime;
     info.callDurTime=0;
     info.telLen=len;
+#ifdef SUPPORT_CAT1_SERVICE
     info.calllogtype=CALL_CAT1;
+#endif
 }
 
 void addcalllog()
@@ -531,7 +545,9 @@ void addcalllog()
     if(call_stat<=2)
     {
         printf("写入:%s\r\b",info.tel);
+#ifdef SUPPORT_CAT1_SERVICE
         AddToCallLog_CAT1(&info);
+#endif
         call_stat=3;
     }
      
@@ -549,9 +565,11 @@ void addcalllogend()
     info.creationTime = tmptime;
     info.callDurTime=0;
     info.telLen=len;
+#ifdef SUPPORT_CAT1_SERVICE
     info.calllogtype=CALL_CAT1;
     info.status=CALL_MISSED;
     AddToCallLog_CAT1(&info);
+#endif
 
     return;
 }
@@ -559,9 +577,71 @@ void addcalllogend()
 static int g_callOperate = OPERATE_NO_OPE;
 
 
-static void DialingHandle(void)
+// 拨号超时自动挂断定时器回调函数
+void dialingTimeoutCallback(int data)
 {
+    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "dialingTimeoutCallback: 拨号超时,自动挂断电话");
+    
+    // 检查是否为紧急号码,紧急号码不自动挂断
+    const char* phoneNumber = CallerLogModel::GetInstance()->GetPhoneNumber().c_str();
+    if (strcmp(phoneNumber, "110") == 0 || strcmp(phoneNumber, "112") == 0 || 
+        strcmp(phoneNumber, "120") == 0 || strcmp(phoneNumber, "119") == 0 || 
+        strcmp(phoneNumber, "122") == 0) {
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "dialingTimeoutCallback: 紧急号码,不自动挂断");
+        return;
+    }
+    
+    // 自动挂断电话
+#ifdef SUPPORT_CAT1_SERVICE
+    cat1_call_hungup_timer();
+#endif
+    
+    // 更新状态
+    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "dialingTimeoutCallback: 自动挂断完成");
+}
+
+// 拨号超时定时器
+static osTimerId_t dialing_timeout_timer = NULL;
+
+// 启动拨号超时定时器
+static void startDialingTimeoutTimer(void)
+{
+    // 如果定时器已存在,先删除
+    if (dialing_timeout_timer != NULL) {
+        osTimerDelete(dialing_timeout_timer);
+        dialing_timeout_timer = NULL;
+    }
+    
+    // 创建新的定时器
+    dialing_timeout_timer = osTimerNew((osTimerFunc_t)dialingTimeoutCallback, osTimerOnce, NULL, NULL);
+    if (dialing_timeout_timer != NULL) {
+        uint32_t timeout_tick = osMs2Tick(30000); // 30秒超时
+        osStatus_t retTimer = osTimerStart(dialing_timeout_timer, timeout_tick);
+        if (retTimer != osOK) {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "startDialingTimeoutTimer: 启动拨号超时定时器失败, ret = %lx", retTimer);
+            osTimerDelete(dialing_timeout_timer);
+            dialing_timeout_timer = NULL;
+        } else {
+            WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "startDialingTimeoutTimer: 拨号超时定时器已启动,30秒后自动挂断");
+        }
+    } else {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "startDialingTimeoutTimer: 创建拨号超时定时器失败");
+    }
+}
+
+// 停止拨号超时定时器
+static void stopDialingTimeoutTimer(void)
+{
+    if (dialing_timeout_timer != NULL) {
+        osTimerStop(dialing_timeout_timer);
+        osTimerDelete(dialing_timeout_timer);
+        dialing_timeout_timer = NULL;
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "stopDialingTimeoutTimer: 拨号超时定时器已停止");
+    }
+}
 
+static void DialingHandle(void)
+{
     CallerLogModel::GetInstance()->SetCallSource(CallerLogModel::CallSource::CallSourceCat1);
     NotificationManager::GetInstance()->SetWatchCallStatus(true);
 
@@ -570,9 +650,10 @@ static void DialingHandle(void)
 
     InitCallingTimer();
 
-    // StartCallTimer(CallTimerType::NOTIFY_PHONE_DIAL_DISPLAY, (int32_t)NOTIFY_ONE_SECOND);
-
+    // 启动拨号超时定时器
+    startDialingTimeoutTimer();
 
+    // StartCallTimer(CallTimerType::NOTIFY_PHONE_DIAL_DISPLAY, (int32_t)NOTIFY_ONE_SECOND);
 }
 
 static void AlertingHandle(void)
@@ -597,7 +678,9 @@ static void WaitingOpreate()
         //  CallerLogModel::GetInstance()->SetCallSource(CallerLogModel::CallSource::CallSourceCat1);
          NotificationManager::GetInstance()->SetWatchCallStatus(true);
 
+#ifdef SUPPORT_CAT1_SERVICE
         cat1_call_hungup();
+#endif
         CustomEventPublish(TOPIC_EVENT_HFP_HINT,NULL,0);
         CallerLogModel::GetInstance()->set_RejectIncomingCall_falg(1);
         return;
@@ -615,6 +698,8 @@ static void WatchActiveHandle()
     InitCallingTimer();
     CallerLogModel::GetInstance()->SetCallStatus(true);
     CallerLogModel::GetInstance()->SetWaitingStatus(false);
+    
+    // 停止拨号超时定时器,因为已经接听电话
    
 
 }
@@ -668,10 +753,12 @@ static void WatchFinishHandle(void)
 //     RUNTIME_LOG_PHONE_RESET, //状态复位
 
 
+// #ifdef SUPPORT_CAT1_SERVICE
 void  using_cat1_phone_state_change_cb(uint8_t state)
 {
     g_callOperate = state;
     // DisableCallTimer(CallTimerType::NOTIFY_PHONE_DIAL_DISPLAY);
+    stopDialingTimeoutTimer();
     DisshakeTimer();
 
     switch (g_callOperate) {
@@ -732,12 +819,15 @@ void  using_cat1_phone_state_change_cb(uint8_t state)
     }
     CAT1_ChangeStatusScreendisplay(g_callOperate);
 }
+// #endif
 
+// #ifdef SUPPORT_CAT1_SERVICE
 void cat1_phone_state_change_cb(uint8_t state)
 {
     GraphicService::GetInstance()->PostGraphicEvent(
             std::bind(using_cat1_phone_state_change_cb,state));
 }
+// #endif
 
             
 
@@ -756,9 +846,11 @@ void CalldialTimerCallBackProc(int data)
         && strcmp(CallerLogModel::GetInstance()->GetPhoneNumber().c_str(),"119")!=0 
          && strcmp(CallerLogModel::GetInstance()->GetPhoneNumber().c_str(),"122")!=0 )
     {
+#ifdef SUPPORT_CAT1_SERVICE
         cat1_call_hungup_timer();
 
         // cat1_handle_call_disconnected((char *)CallerLogModel::GetInstance()->GetPhoneNumber().c_str());
+#endif
     }
    
 }