pinebuds/services/bt_if_enhanced/inc/hshf_api.h
2022-08-15 17:20:27 +08:00

408 lines
9.3 KiB
C

/***************************************************************************
*
* Copyright 2015-2019 BES.
* All rights reserved. All unpublished rights reserved.
*
* No part of this work may be used or reproduced in any form or by any
* means, or stored in a database or retrieval system, without prior written
* permission of BES.
*
* Use of this work is governed by a license granted by BES.
* This work contains confidential and proprietary information of
* BES. which is protected by copyright, trade secret,
* trademark and other intellectual property rights.
*
****************************************************************************/
#ifndef _HSHF_API_H
#define _HSHF_API_H
#include "btlib_type.h"
#include "rfcomm_api.h"
//#define PRO_PCDEMO
/////////////////////////////////////////////////////////////////
///common
#define HF_RECVDATA_BUF_SIZE 50
#define HS_RECVDATA_BUF_SIZE 48
/* notify upper layer */
enum hshf_event_t {
/* user command event */
HSHF_ENTER_PAIRING = 1,
HSHF_EXIT_PAIRING,
HF_DIAL_NUM_REQ,
HF_ANSWER_REQ,
HF_REJECT_REQ,
HF_ENDCALL_REQ,
HF_TRANSFER_REQ,
HF_DIAL_LASTNUM_REQ,
HF_TRANSMIT_DTMF,
HF_VOICE_DIAL_REQ, //10
HF_VOICE_DIAL_CANCEL_REQ,
HSHF_CONNECT_REQ,
HF_DISCONNECT_REQ,
HSHF_SPK_VOL_UP,
HSHF_SPK_VOL_DOWN,
HSHF_TOGGLE_MIC,
HSHF_TOGGLE_LED,
HSHF_TOGGLE_VOLBTN,
HF_ANSWER_ENDCALL_CONN, // answer @ ring, end @ talking, connect@idle
HF_REJ_REDIAL_TRANS_CONN, // reject @ ring, redial @ connected, transfer @ talking, connect@idle
HF_RELEASE_HOLD_REJECT_WAIT_REQ, //21
HF_RELEASE_ACTVIE_ACCEPT_OTHER_REQ,
HF_HOLD_ACTIVE_ACCEPT_OTHER_REQ,
HF_CONFERENCE_REQ,
HSHF_SET_PB_STORAGE,
HSHF_GET_PB_ITEM,
/* internal event */
HSHF_EVNT_BEGIN, //27
HSHF_RFCOMM_OPENED, //28
HSHF_CONN_OPENED,
HSHF_CONN_CLOSED,
HSHF_CONN_REQ_FAIL,
HF_AG_SUPPORTED_FEATURE_IND,
HF_AG_SUPPORTED_INDICATOR_IND,
HF_AG_CURRENT_INDICATOR_IND,
HF_INDICATOR_EVENT_IND,
HF_CIEV_CALL_IND,
HF_CIEV_SERVICE_IND,
HF_CIEV_CALLSETUP_IND,
HF_CALLER_ID_IND,
HF_VOICE_IND,
HSHF_RING_IND, //40
HSHF_AUDIOCONN_OPENED,
HSHF_AUDIOCONN_CLOSED,
HSHF_SPK_VOL_IND,
HSHF_MIC_VOL_IND,
HF_IN_BAND_RING_IND,
HSHF_PAIR_OK, //46
HSHF_PAIR_TOUT,
HSHF_PAIR_FAILED,
//// NEW for three way call
HF_CIEW_CALLHELD_IND,
HF_CCWA_IND,
HF_VOICE_REQ,
// for enter pairing and test mode by combkey
HSHF_ENTER_TESTMODE,
HSHF_CALL_IND,
HF_EVENT_AT_RESULT_DATA,
};
enum hshf_callsetup_enum {
CALL_SETUP_NONE,
CALL_SETUP_INCOMING,
CALL_SETUP_OUTGOING,
CALL_SETUP_REMOTE_ALERT,
CALL_SETUP_ESTABLISHED
};
enum hshf_call_enum {
CALL_NONE = 0,
CALL_ESTABLISHED
};
enum hshf_profile_enum {
PRO_BOTH = 0,
PRO_HEADSET,
PRO_HANDSFREE,
PRO_EXIT,
PRO_SHOW
};
enum hshf_conn_state_enum {
STOP,
STANDBY = 1,
PAIRING,
LISTENING, //ready
CONNECTING,
AT_EXCHANGING,
CONNECTED,
SCOCONNECTED
};
/////////////hdzhu added--20090505---
enum hshf_pb_location_enum {
LOCATION_SM = 0,
LOCATION_ME,
LOCATION_MT,
LOCATION_DC,
LOCATION_RC,
LOCATION_MC,
LOCATION_LD
};
enum hshf_pb_action_enum {
ACTION_PREV = 0,
ACTION_NEXT
};
#define MAX_DIAL_NUM_SIZE 0x10
#define MAX_SAVED_CALL_NUM 4
struct hshf_control_t {
struct bdaddr_t remote;
uint8 rfcomm_handle;
uint8 listen_channel;
uint8 disc_reason;
uint8 profile_set; /*0~2 *//* 0 - both, if set to both, profile_use depends on AG */
uint8 profile_use; /*1~2 *//* 1 - headset only */
/* 2 - handsfree only */
uint8 idxCall; /* Phone status info - index "call"in +CIND - call */
uint8 idxService; /* Phone status info - service index in +CIND - service */
uint8 idxCallSetup; /* Phone status info - Bluetooth proprietary call setup status from +CIND - callsetup */
uint8 idxCallHeld; /* Phone status info - BLuetooth proprietary call hold status from +CIND - callheld */
uint8 statusCall; /* Phone status info - call */
uint8 statusService; /* Phone status info - service */
uint8 statusCallSetup; /* Phone status info - callsetup */
uint8 statusCallHeld; /* Phone status info - callheld */
int8 hfSupportedFeature; /*hf supported feature bitmap: */
/* bit 0 - EC/NR function */
/* 1 - Call waiting and 3-way calling */
/* 2 - CLI presentation capability */
/* 3 - Voice recognition activation */
/* 4 - Remote volume control */
/* 5 - Enhance call status */
/* 6 - Enhanced call control */
int16 agSupportedFeature; /* AG supported feature bitmap */
/* bit0 - 3-way calling */
/* 1 - EC/NR function */
/* 2 - Voice recognition */
/* 3 - In-band ring tone */
/* 4 - Attach a number to a voice tag */
/* 5 - Ablility to reject a call */
/* 6 - Enhanced call status */
/* 7 - Enhanced call control */
/* 8 - extended error result codes */
enum hshf_conn_state_enum state; /*check if it is connecting now, if it is connecting,the hf_connect_req will not work */
uint32 isDialNumPending:1; /* setup slc connection before dial */
uint32 isDialLastNumPending:1; /* setup slc connection before dial */
uint32 isTransferPending:1; /* setup slc connection before transfer */
uint32 isBvraPending:1;
uint32 inbandRingEnabled:1; /*0-disable; 1-enable */
uint32 bvraEnabled:1;
uint32 brsf:1;
uint32 isPBStorage:1;
uint32 isPBItem:1;
uint32 isDialedCallHistory:1;
uint32 isReceivedCallHistory:1;
uint32 isMissedCallHistory:1;
uint32 unused:20;
uint8 statusRing; /* ring status info */
uint8 dialNum[MAX_DIAL_NUM_SIZE]; /* dialed number 0-9, *, #, + */
char dtmf; /* dtmf character, 0-9,*,#,A-D */
uint8 spkVol; /* should be implemented in hardware */
uint8 micVol; /* should be implemented in hardware */
uint8 pb_storage;
uint8 pb_prev_next;
uint16 idx_pb;
char callerId[MAX_DIAL_NUM_SIZE]; /* incoming caller id */
char *recvBuf;
void (*indicate) (uint8 event, void *pData);
};
extern struct hshf_control_t hshf_ctl;
// control list node
struct hshf_control_t_list_node {
struct hshf_control_t hshf_ctrl;
struct hshf_control_t_list_node *p_next;
};
// control list head
//extern struct hshf_control_t_list_node* p_hshf_ctrl_list_head = NULL;
/*---- hshf_app.c ----*/
void app_callback(uint8 event, void *pData);
/*----hshf.c----*/
enum hshf_conn_state_enum hshf_getState(void);
void hshf_setState(enum hshf_conn_state_enum state);
int8 hshf_connectReq(void);
int8 hshf_sendCmd(const char *data, uint32 len);
int8 hshf_atCmdParse(void);
int8 hshf_turnOn(void);
int8 hshf_turnOff(void);
int8 hshf_enterPairing(void);
int8 hshf_readPBReq(uint8 direction);
int8 hshf_selectPBReq(uint8 location);
//void hshf_setAutoAnswer(BOOLEAN flag);
//void hshf_setAutoConn(BOOLEAN flag);
uint8 hshf_getAutoAnswer(void);
uint8 hshf_getAutoConn(void);
void hshf_returnCallHistory2Host(uint8 location);
void hshf_cleanCallHistory(void);
void hshf_multi_dev_switch(void);
/*----volume.c----*/
int8 hshf_getSpkVol(void);
int8 hshf_getMicVol(void);
void hshf_setSpkVol(int8 vol);
void hshf_setMicVol(int8 vol);
int8 hshf_spkVolDown(void);
int8 hshf_spkVolUp(void);
void hshf_toggleMic(void);
void hshf_enableMic(void);
void hshf_disableMic(void);
#ifdef PRO_PCDEMO
/* ----profile.c----*/
uint8 hshf_showProfile(void);
#endif /*
*/
int8 hshf_setProfile(uint8 profile);
uint8 hshf_showProUse(void);
/////////////////////////////////////////////////////////
/////handsfree
typedef struct {
uint8 length;
char *caller_id;
} hf_caller_id_ind_t;
/*---- hfp.c ----*/
uint16 hf_getAgSupportedFeature(void);
int8 hf_releaseSCO(struct bdaddr_t *bdaddr, uint8 reason);
/*----connect.c----*/
int8 hf_disconnectReq(void);
int8 hshf_exit_sniff(void);
/*---- call.c ----*/
int8 hf_answer(void);
int8 hf_reject(void);
int8 hf_endCall(void);
int8 hf_transferReq(void);
uint8 hf_isTransferPending(void);
int8 hf_callerIdInd(hf_caller_id_ind_t * ind);
uint8 hf_getCallStatus(void);
uint8 hf_getServiceStatus(void);
uint8 hf_getCallSetupStatus(void);
uint8 hf_acceptSecondCall(uint8 h_type);
/*---- dial.c ----*/
#ifdef PRO_PCDEMO
int8 hf_dialMemory(const uint8 * mem, uint8 length);
void hf_setDialNum(uint8 * num, uint8 len);
void hf_setDialMemory(uint8 * mem, uint8 len);
#endif /*
*/
int8 hf_dialNum(const uint8 * dialNum, uint8 numLen);
//uint8 hf_isDialNumPending( void );
int8 hf_dialLastNum(void);
uint8 hf_isDialLastNumPending(void);
int8 hf_dialVoice(uint8 enable);
/*---- dtmf.c ----*/
int8 hf_transmitDtmf(char dtmf);
#ifdef PRO_PCDEMO
void hf_setDtmf(char dtmf);
/*---- nrec.c ----*/
//int8 hf_disableNrec( void );
#endif /*
*/
/*---- ring.c ----*/
uint8 hf_isInbandRing(void);
void hshf_ring(void);
uint8 hshf_getRingStatus(void);
////////////////////////////////////////////////////////////////////////////////
//////headset
int8 hs_button_req(void);
#endif /* */