274 lines
6.7 KiB
C
274 lines
6.7 KiB
C
/*
|
||
* Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
|
||
* Description: PhoneService
|
||
* Create: 2021-09-22
|
||
*/
|
||
|
||
#ifndef PHONE_SERVICE_H
|
||
#define PHONE_SERVICE_H
|
||
|
||
#include "bts_br_gap.h"
|
||
#include "bts_hfp_hf.h"
|
||
#include "ohos_types.h"
|
||
#include "PhoneAudio.h"
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
#define MULTI_CALL_MAX_NUME 5 // 最大多路通话路数
|
||
#define CALL_LOG_MAX_NUM 30 // 最多记录30条通话记录,超出后删除最老的记录
|
||
#define NAME_SIZE 20
|
||
#define MAX_PHONE_NUM 20
|
||
#define CALL_VOLUME_MAX 15
|
||
|
||
typedef struct {
|
||
bd_addr_t bd_addr;
|
||
int id;
|
||
int state;
|
||
char number[MAX_PHONE_NUM];
|
||
unsigned char number_len;
|
||
bt_uuid_t uuid;
|
||
bool multi_party;
|
||
bool outgoing;
|
||
bool in_band_ring;
|
||
long creation_time;
|
||
} PhoneHfpCallInfo;
|
||
|
||
typedef struct {
|
||
int operate;
|
||
int lastStatus;
|
||
char name[NAME_SIZE];
|
||
unsigned char nameLen;
|
||
unsigned char tel[MAX_PHONE_NUM];
|
||
unsigned char telLen;
|
||
uint64 activeTime; // 首次电话接通时间点
|
||
uint64 creationTime; // 通话创建时间(不是接通时间)
|
||
PhoneHfpCallInfo unitCalls;
|
||
} PhoneCallInfo;
|
||
|
||
enum OperateType {
|
||
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, // 非手表发起通话结束(手机挂断+拒接来电)
|
||
};
|
||
|
||
// 通话失败类型
|
||
typedef enum {
|
||
ERROR_BT = 0, // 蓝牙
|
||
ERROR_DIAL, // 拨号
|
||
} PhoneServiceErrorType;
|
||
|
||
// 通话结束类型
|
||
typedef enum {
|
||
CALL_OUTGOING = 0, // 呼出电话
|
||
CALL_INCOMING, // 呼入电话
|
||
CALL_MISSED, // 未接来电
|
||
} CallFinishStatus;
|
||
|
||
typedef struct {
|
||
char name[NAME_SIZE];
|
||
unsigned char nameLen;
|
||
unsigned char tel[MAX_PHONE_NUM];
|
||
unsigned char telLen;
|
||
CallFinishStatus status;
|
||
uint64 creationTime; // 通话创建时间(不是接通时间)
|
||
uint64 callDurTime; // 通话持续时间
|
||
} CallLogInfo;
|
||
|
||
// 通话状态改变回调函数
|
||
typedef void (*PhoneServiceCallChangedCb)(const PhoneCallInfo *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;
|
||
|
||
/**
|
||
* @brief 注册电话服务回调函数
|
||
*
|
||
* @param phoneServiceFun 注册函数
|
||
* @return 返回值 成功返回0,失败返回错误码
|
||
*/
|
||
int RegisterCallChangedCb(PhoneServiceCb *phoneServiceFun);
|
||
|
||
/**
|
||
* @brief 电话服务初始化
|
||
*/
|
||
void PhoneServiceInit(void);
|
||
|
||
/**
|
||
* @brief 手表呼出电话
|
||
*
|
||
* @param number 呼出号码
|
||
* @param len 号码长度,只包括号码数字部分,不包括结尾'\0'
|
||
* @return 返回值 成功返回0,失败返回错误码
|
||
*/
|
||
int DialCall(unsigned char *number, unsigned char len);
|
||
|
||
/**
|
||
* @brief 手表接听呼入来电
|
||
*
|
||
* @return 返回值 成功返回0,失败返回错误码
|
||
*/
|
||
int AcceptIncomingCall(void);
|
||
|
||
/**
|
||
* @brief 手表拒接呼入来电
|
||
*
|
||
* @return 返回值 成功返回0,失败返回错误码
|
||
*/
|
||
int RejectIncomingCall(void);
|
||
|
||
/**
|
||
* @brief 手表结束通话
|
||
*
|
||
* @return 返回值 成功返回0,失败返回错误码
|
||
*/
|
||
int FinishCall(void);
|
||
|
||
/**
|
||
* @brief 获取当前通话的最新变化状态
|
||
*
|
||
* @return 返回值 通话变化状态
|
||
*/
|
||
int GetCurrCallState(void);
|
||
|
||
/**
|
||
* @brief 判断此次通话是否是完整通话流程
|
||
*
|
||
* @return 返回值 true:是;false:不是
|
||
*/
|
||
bool IsCompleteCallFlow(void);
|
||
|
||
/**
|
||
* @brief 获取当前正在通话路数
|
||
*
|
||
* @return 返回值 返回当前正在通话路数
|
||
*/
|
||
int GetCurrCallNum(void);
|
||
|
||
/**
|
||
* @brief 获取当前通话路数和对应的通话信息
|
||
*
|
||
* @param callList 用来接收通话信息,需调用者分配空间,大小为MULTI_CALL_MAX_NUME * sizeof(PhoneCallInfo)
|
||
* @param listNum callList中PhoneCallInfo个数,大小为MULTI_CALL_MAX_NUME
|
||
* @param retNum 接收当前正在进行的通话路数
|
||
* @return 返回值 成功返回0,失败返回错误码
|
||
*/
|
||
int GetCallInfoInCallList(PhoneCallInfo callList[], int listNum, int *retNum);
|
||
|
||
/**
|
||
* @brief 获取当前通话音量大小(0 -15)
|
||
*
|
||
* @param volume
|
||
*
|
||
* @return 返回值 当前通话音量大小
|
||
*/
|
||
unsigned char GetCallCurrVolume(void);
|
||
|
||
/**
|
||
* @brief 设置手表通话Speaker音量
|
||
*
|
||
* @param volume
|
||
*
|
||
* @return 返回值 void
|
||
*/
|
||
void SetSpeakerVolume(unsigned char volume);
|
||
|
||
/**
|
||
* @brief 设置通话Speaker静音/取消静音
|
||
*
|
||
* @param isMute true:设置通话Speaker静音;false:设置通话Speaker取消静音
|
||
* @return 返回值 成功返回ture,失败返回false
|
||
*/
|
||
bool SetSpeakerMute(bool isMute);
|
||
|
||
/**
|
||
* @brief 设置通话mic静音/取消静音
|
||
*
|
||
* @param isMute true:设置通话mic静音;false:设置通话mic取消静音
|
||
* @return 返回值 成功返回ture,失败返回false
|
||
*/
|
||
bool SetMicMute(bool isMute);
|
||
|
||
/**
|
||
* @brief 获取SCO的连接状态
|
||
*
|
||
* @return 返回值 返回SCO的连接状态
|
||
*/
|
||
int GetScoConnectState(void);
|
||
|
||
/**
|
||
* @brief 通话转移到手表
|
||
*
|
||
* @return 返回值 成功返回0,失败返回错误码
|
||
*/
|
||
int TransCallToWatch(void);
|
||
|
||
/**
|
||
* @brief 通话转移到手机
|
||
*
|
||
* @return 返回值 成功返回0,失败返回错误码
|
||
*/
|
||
int TransCallToMobilePhone(void);
|
||
|
||
/**
|
||
* @brief 获取通话记录
|
||
*
|
||
* @param info 接收获取的通话记录,由调用者释放free
|
||
* @param num 接收通话记录条数
|
||
* @return 返回值 成功返回0,失败返回错误码
|
||
*/
|
||
int GetCallLog(CallLogInfo **info, int *num);
|
||
|
||
/**
|
||
* @brief 删除第一条通话记录
|
||
*
|
||
* @return 返回值 成功返回0,失败返回错误码
|
||
*/
|
||
int RemoveFirstCallLog(void);
|
||
|
||
/**
|
||
* @brief 清空通话记录
|
||
*
|
||
* @return 返回值 成功返回0,失败返回错误码
|
||
*/
|
||
int ClearCallLogFile(void);
|
||
|
||
/**
|
||
* @brief 获取蓝牙状态
|
||
*
|
||
* @return 返回值 蓝牙连接状态
|
||
*/
|
||
uint32 GetBtConnectStatus(void);
|
||
|
||
/**
|
||
* @brief 释放蓝牙通话媒体资源
|
||
*
|
||
* @return 返回值 无
|
||
*/
|
||
void AudioRelease(void);
|
||
|
||
uint32 GetCallCodec(void);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif // PHONE_SERVICE_H
|