/*---------------------------------------------------------------------------- * Copyright (c) TJD Technologies Co., Ltd. 2025. All rights reserved. * * Description: TjdPhoneService.h * * Author: luziquan@ss-tjd.com * * Create: 2025-08-16 *--------------------------------------------------------------------------*/ #ifndef PHONE_SERVICE_H #define PHONE_SERVICE_H #include "bts_br_gap.h" #include "bts_hfp_hf.h" #include "stdint.h" #ifdef __cplusplus extern "C" { #endif #define MULTI_CALL_MAX_NUME 5 // 最大多路通话路数 #define CALL_LOG_MAX_NUM 20 // 最多记录20条通话记录,超出后删除最老的记录 #define NAME_SIZE 20 #define MAX_PHONE_NUM 20 #define CALL_VOLUME_MAX 15 typedef enum { OPERATE_NO_OPE = 0, // 无操作 OPERATE_DIALING, // 呼出,正在拨号中 OPERATE_ALERTING, // 呼出,对方响铃 OPERATE_INCOMING, // 来电呼入 OPERATE_WAITING, // 来电呼入(等待) OPERATE_WATCH_ACTIVE, // 对方呼入,手表接听 OPERATE_PHONE_ACTIVE, // 对方呼入,手机接听 (手表接收到此操作,调用DisconnectSco接口断开SCO连接) OPERATE_PEER_ACTIVE, // 呼出,对方接听 OPERATE_PHONE_HOLD, // 手机挂起通话 OPERATE_WATCH_REJECT, // 手表拒接来电 OPERATE_WATCH_FINISH, // 手表发起通话结束(挂断通话) OPERATE_NON_WATCH_FINISH, // 非手表发起通话结束(手机挂断+拒接来电) } CurOperateType; /** * @brief 联系人信息 */ typedef struct { int operate; int lastStatus; char name[NAME_SIZE]; unsigned char nameLen; unsigned char tel[MAX_PHONE_NUM]; unsigned char telLen; uint64_t activeTime; // 首次电话接通时间点 uint64_t creationTime; // 通话创建时间(不是接通时间) hfp_hf_calls_info_t unitCalls; } ContactsInfo; // 通话失败类型 typedef enum { ERROR_BT = 0, // 蓝牙 ERROR_DIAL, // 拨号 } PhoneServiceErrorType; // 通话结束类型 typedef enum { CALL_OUTGOING = 0, // 呼出电话 CALL_INCOMING, // 呼入电话 CALL_MISSED, // 未接来电 } CallLogType; typedef struct { char name[NAME_SIZE]; unsigned char nameLen; unsigned char tel[MAX_PHONE_NUM]; unsigned char telLen; CallLogType status; uint64_t creationTime; // 通话创建时间(不是接通时间) uint64_t callDurTime; // 通话持续时间 } CallLogInfo; void TjdPhoneServiceInit(void); uint32_t GetCallAudioCodec(void); bd_addr_t *GetHfpBdAddr(void); // 通话状态改变回调函数 typedef void (*PhoneServiceCallChangedCb)(const ContactsInfo *phoneCall); // 电话服务失败回调函数 typedef void (*PhoneServiceErrorCb)(PhoneServiceErrorType type, int volume); // sco连接回调函数(状态只有断开和连接两种状态) 通话转移会导致sco连接和断连 typedef void (*PhoneServiceScoStatusCb)(hfp_sco_connect_state_t state); typedef struct { PhoneServiceCallChangedCb callChanged; PhoneServiceErrorCb phoneServiceErrorCb; PhoneServiceScoStatusCb scoStatusCb; } PhoneServiceCb; int RegisterPhoneCallChangedCb(PhoneServiceCb *phoneServiceFun); int DialCallOut(const unsigned char *number, unsigned char len); int AnswerCallIn(void); int RejectCallIn(void); int DialCallFinish(void); int GetCurCallNumber(void); unsigned char GetHFPCallCurrVolume(void); void SetHFPSpeakerVolume(unsigned char hfpVolume); #ifdef __cplusplus } #endif #endif // PHONE_SERVICE_H