#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"
{
if(OHOS::get_sos_number_count()<=0)
{
+#ifdef SUPPORT_CAT1_SERVICE
cat1_UI_call_dial("SOS");
+#endif
return;
}
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())
#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)
{
if(OHOS::get_sos_number_count()<=0)
{
+#ifdef SUPPORT_CAT1_SERVICE
cat1_UI_call_dial("SOS");
+#endif
return;
}
#if SOS_TEST_FLAG
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
#endif
else
{
+#ifdef SUPPORT_CAT1_SERVICE
cat1_UI_call_dial("SOS");
+#endif
}
info.creationTime = tmptime;
info.callDurTime=0;
info.telLen=len;
+#ifdef SUPPORT_CAT1_SERVICE
info.calllogtype=CALL_CAT1;
+#endif
}
void addcalllog()
if(call_stat<=2)
{
printf("写入:%s\r\b",info.tel);
+#ifdef SUPPORT_CAT1_SERVICE
AddToCallLog_CAT1(&info);
+#endif
call_stat=3;
}
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;
}
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);
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)
// 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;
InitCallingTimer();
CallerLogModel::GetInstance()->SetCallStatus(true);
CallerLogModel::GetInstance()->SetWaitingStatus(false);
+
+ // 停止拨号超时定时器,因为已经接听电话
}
// 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) {
}
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
&& 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
}
}