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

338 lines
11 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 __HFP_API_H__
#define __HFP_API_H__
#include "bluetooth.h"
#include "conmgr_api.h"
#include "hci_api.h"
#ifdef __BT_ONE_BRING_TWO__
#define HF_CHANNEL_NUM 2
#else
#define HF_CHANNEL_NUM 1
#endif
typedef void *hf_chan_handle_t;
/* start of btif_audio_state_t*/
typedef enum {
BTIF_HF_AUDIO_DISCON = 0,
BTIF_HF_AUDIO_CON = 1,
} btif_audio_state_t;
/* End of btif_audio_state_t*/
/*---------------------------------------------------------------------------
* btif_hf_call_held_state type
*
*/
typedef uint8_t btif_hf_call_held_state;
#define BTIF_HF_CALL_HELD_NONE 0
#define BTIF_HF_CALL_HELD_ACTIVE 1
#define BTIF_HF_CALL_HELD_NO_ACTIVE 2
/* End of btif_hf_call_held_state */
/* start the definition of btif_hf_call_setup_t*/
typedef uint8_t btif_hf_call_setup_t;
#define BTIF_HF_CALL_SETUP_NONE 0
#define BTIF_HF_CALL_SETUP_IN 1
#define BTIF_HF_CALL_SETUP_OUT 2
#define BTIF_HF_CALL_SETUP_ALERT 3
/* end btif_hf_call_setup_t*/
/* start the definition of btif_hf_call_active_t */
typedef uint8_t btif_hf_call_active_t;
#define BTIF_HF_CALL_NONE 0
#define BTIF_HF_CALL_ACTIVE 1
/* end of btif_hf_call_active_t */
typedef enum {
BTIF_HF_SCO_CODEC_NONE = 0,
BTIF_HF_SCO_CODEC_CVSD = 1,
BTIF_HF_SCO_CODEC_MSBC = 2,
} hfp_sco_codec_t;
typedef enum {
BTIF_HF_HOLD_RELEASE_HELD_CALLS = 0,
BTIF_HF_HOLD_RELEASE_ACTIVE_CALLS = 1,
BTIF_HF_HOLD_HOLD_ACTIVE_CALLS = 2,
BTIF_HF_HOLD_ADD_HELD_CALL = 3,
BTIF_HF_HOLD_CALL_TRANSFER = 4,
} btif_hf_hold_call_t;
typedef enum {
BTIF_HF_STATE_CLOSED = 0,
BTIF_HF_STATE_CONN_PENDING = 1,
BTIF_HF_STATE_CONN_INCOMING = 2,
BTIF_HF_STATE_NEGOTIATE = 3,
BTIF_HF_STATE_OPEN = 4,
BTIF_HF_STATE_DISC = 5,
} btif_hf_chan_state_t;
typedef uint16_t hf_gateway_version;
/* Unable to determine the Hands Free Profile version that is supported */
#define BTIF_HF_GW_VERSION_UNKNOWN 0x0000
/* Supports Version 0.96 of the Hands Free Profile */
#define BTIF_HF_GW_VERSION_0_96 0x0100
/* Supports Version 1.0 of the Hands Free Profile */
#define BTIF_HF_GW_VERSION_1_0 0x0101
/* Supports Version 1.5 of the Hands Free Profile */
#define BTIF_HF_GW_VERSION_1_5 0x0105
#define BTIF_HF_GW_VERSION_1_6 0x0106
#define BTIF_HF_GW_VERSION_1_7 0x0107
/* End of hf_gateway_version */
typedef enum {
BTIF_HF_EVENT_SERVICE_CONNECT_REQ = 0,
BTIF_HF_EVENT_SERVICE_CONNECTED = 1,
BTIF_HF_EVENT_SERVICE_DISCONNECTED = 2,
BTIF_HF_EVENT_AUDIO_CONNECTED = 3,
BTIF_HF_EVENT_AUDIO_DISCONNECTED = 4,
BTIF_HF_EVENT_AUDIO_DATA = 5,
BTIF_HF_EVENT_AUDIO_DATA_SENT = 6,
BTIF_HF_EVENT_GATEWAY_FEATURES = 7,
BTIF_HF_EVENT_GW_HOLD_FEATURES = 8,
BTIF_HF_EVENT_CALL_STATE = 9,
BTIF_HF_EVENT_CALLER_ID = 10,
BTIF_HF_EVENT_CALL_LISTING_ENABLED = 11,
BTIF_HF_EVENT_RESPONSE_HOLD_APPL = 12,
BTIF_HF_EVENT_CALL_IND = 13,
BTIF_HF_EVENT_CALLSETUP_IND = 14,
BTIF_HF_EVENT_CALLHELD_IND = 15,
BTIF_HF_EVENT_RING_IND = 16,
BTIF_HF_EVENT_WAIT_NOTIFY = 17,
BTIF_HF_EVENT_CALLER_ID_NOTIFY = 18,
BTIF_HF_EVENT_CURRENT_CALL_STATE = 19,
BTIF_HF_EVENT_RESPONSE_HOLD = 20,
BTIF_HF_EVENT_SERVICE_IND = 21,
BTIF_HF_EVENT_BATTERY_IND = 22,
BTIF_HF_EVENT_SIGNAL_IND = 23,
BTIF_HF_EVENT_ROAM_IND = 24,
BTIF_HF_EVENT_SMS_IND = 25,
BTIF_HF_EVENT_VOICE_REC_STATE = 26,
BTIF_HF_EVENT_VOICE_TAG_NUMBER = 27,
BTIF_HF_EVENT_SPEAKER_VOLUME = 28,
BTIF_HF_EVENT_MIC_VOLUME = 29,
BTIF_HF_EVENT_IN_BAND_RING = 30,
BTIF_HF_EVENT_NETWORK_OPERATOR = 31,
BTIF_HF_EVENT_SUBSCRIBER_NUMBER = 32,
BTIF_HF_EVENT_NO_CARRIER = 33,
BTIF_HF_EVENT_BUSY = 34,
BTIF_HF_EVENT_NO_ANSWER = 35,
BTIF_HF_EVENT_DELAYED = 36,
BTIF_HF_EVENT_BLACKLISTED = 37,
BTIF_HF_EVENT_PHONEBOOK_STORAGE = 38,
BTIF_HF_EVENT_PHONEBOOK_INFO = 39,
BTIF_HF_EVENT_PHONEBOOK_SIZE = 40,
BTIF_HF_EVENT_PHONEBOOK_ENTRY = 41,
BTIF_HF_EVENT_AT_RESULT_DATA = 42,
BTIF_HF_EVENT_COMMAND_COMPLETE = 43,
BTIF_HF_EVENT_SIRI_STATUS = 44,
BTIF_HF_EVENT_READ_AG_INDICATORS_STATUS = 45,
BTIF_HF_EVENT_BES_TEST = 46,
BTIF_HF_EVENT_SELECT_CHANNEL = 47,
BTIF_HF_EVENT_RFCOMM_CONNECTED = 48,
} hf_event_t;
/* End of hf_event_t*/
struct hfp_context {
uint16_t remote_dev_hcihandle;
/*TODO:should remove the status */
bt_status_t status; /* Status of the callback event */
btif_hf_chan_state_t state;
bt_bdaddr_t remote_dev_bdaddr;
const char *call_number;
btif_hf_call_active_t call;
btif_hf_call_setup_t call_setup;
btif_hf_call_held_state call_held;
hf_event_t event;
uint8_t *audio_data;
uint16_t audio_data_len;
uint8_t error_code;
uint8_t disc_reason;
uint8_t disc_reason_saved;
uint32_t speaker_volume;
uint32_t voice_rec_state;
uint32_t **chan_sel_channel;
btif_remote_device_t *chan_sel_remDev;
char *ptr;
};
struct hfp_vendor_info {
uint16_t vendor_id;
uint16_t product_id;
uint16_t version_id;
uint16_t feature_id; //default is 3, if you do not known, set it 0
};
typedef void (*hf_event_cb_t) (hf_chan_handle_t chan, struct hfp_context * ctx);
#ifdef __cplusplus
extern "C" {
#endif
/*
* AT+XAPL=[vendorID]-[productID]-[version],[features]
* if you set features as 0,this api will ignore your features setting and use default value
*/
void btif_hf_init_vendor_info(struct hfp_vendor_info *info_ptr);
int hfp_hfcommand_mempool_init(void);
int btif_hfp_initialize(void);
int btif_hf_register_callback(hf_event_cb_t callback);
hf_gateway_version btif_hf_get_version(hf_chan_handle_t chan_h);
bt_status_t btif_hf_update_indicators_batt_level(hf_chan_handle_t chan_h, uint8_t assigned_num, uint8_t level);
bt_status_t btif_hf_batt_report(hf_chan_handle_t chan_h, uint8_t level);
bt_status_t btif_hf_siri_report(hf_chan_handle_t chan_h);
bt_status_t btif_hf_enable_voice_recognition(hf_chan_handle_t chan_h, bool en);
bt_status_t btif_hf_batt_report(hf_chan_handle_t chan_h, uint8_t level);
bool btif_hf_is_voice_rec_active(hf_chan_handle_t chan_h);
bt_status_t btif_hf_disable_nrec(hf_chan_handle_t chan_h);
bt_status_t btif_hf_report_speaker_volume(hf_chan_handle_t chan_h, uint8_t gain);
bt_status_t btif_hf_send_at_cmd(hf_chan_handle_t chan_h, const char *at_str);
bt_status_t btif_hf_list_current_calls(hf_chan_handle_t chan_h);
bool btif_hf_is_hf_indicators_support(hf_chan_handle_t chan_h);
bool btif_hf_is_batt_report_support(hf_chan_handle_t chan_h);
bt_status_t btif_hf_force_disconnect_sco(hf_chan_handle_t chan_h);
void btif_hf_set_negotiated_codec(hf_chan_handle_t chan_h, hfp_sco_codec_t codec);
hfp_sco_codec_t btif_hf_get_negotiated_codec(hf_chan_handle_t chan_h);
bt_status_t btif_hf_answer_call(hf_chan_handle_t chan_h);
bt_status_t btif_hf_hang_up_call(hf_chan_handle_t chan_h);
bt_status_t btif_hf_redial_call(hf_chan_handle_t chan_h);
bt_status_t btif_hf_dial_number(hf_chan_handle_t chan_h, uint8_t *number, uint16_t len);
bt_status_t btif_hf_disc_audio_link(hf_chan_handle_t chan_h);
bt_status_t btif_hf_create_audio_link(hf_chan_handle_t chan_h);
bt_status_t btif_hf_call_hold(hf_chan_handle_t chan_h, btif_hf_hold_call_t action,
uint8_t index);
bt_status_t btif_hf_switch_calls(hf_chan_handle_t hangup_chan_h,
hf_chan_handle_t answer_chan_h);
hf_chan_handle_t btif_get_hf_chan_by_address(bt_bdaddr_t *bdaddr);
uint8_t btif_get_hf_chan_audio_up_flag(hf_chan_handle_t chan_h);
btif_hf_chan_state_t btif_get_hf_chan_state(hf_chan_handle_t chan_h);
bool btif_hf_check_AudioConnect_status(hf_chan_handle_t chan_h);
hf_chan_handle_t btif_hf_create_channel(void);
int btif_hf_init_channel(hf_chan_handle_t chan_h);
bt_status_t btif_hf_disconnect_service_link(hf_chan_handle_t chan_h);
bt_status_t btif_hf_create_service_link(hf_chan_handle_t chan_h, bt_bdaddr_t * bt_addr);
btif_cmgr_handler_t *btif_hf_get_chan_manager_handler(hf_chan_handle_t chan_h);
bt_status_t btif_hfp_switch_sco(hf_chan_handle_t chan_h);
bt_status_t btif_hf_set_master_role(hf_chan_handle_t chan_h, bool role);
bt_status_t btif_hf_enable_sniff_mode(hf_chan_handle_t chan_h, bool enable);
bool btif_hf_get_remote_bdaddr(hf_chan_handle_t chan_h, bt_bdaddr_t *bdaddr_p);
uint16_t btif_hf_get_sco_hcihandle(hf_chan_handle_t chan_h);
btif_hci_handle_t btif_hf_get_remote_hci_handle(hf_chan_handle_t chan_h);
bool btif_hf_is_acl_connected(hf_chan_handle_t chan_h);
btif_remote_device_t *btif_hf_cmgr_get_remote_device(hf_chan_handle_t chan_h);
bool btif_hf_check_rfcomm_l2cap_channel_is_creating(bt_bdaddr_t *bdaddr);
bt_status_t btif_hf_send_audio_data(hf_chan_handle_t chan_h, btif_bt_packet_t *packet);
bt_status_t btif_hf_is_inbandring_enabled(hf_chan_handle_t chan_h);
uint32_t btif_hfp_profile_save_ctx(btif_remote_device_t *rem_dev, uint8_t *buf, uint32_t buf_len);
uint32_t btif_hfp_profile_restore_ctx(uint8_t *buf, uint32_t buf_len);
#if defined(IBRT)
bt_status_t btif_hf_sync_conn_audio_connected(hfp_sco_codec_t codec,uint16_t conhdl);
bt_status_t btif_hf_sync_conn_audio_disconnected(uint16_t conhdl);
btif_hf_chan_state_t btif_hfp_profile_channel_state(uint8_t bt_device_id);
#endif
bt_status_t btif_hf_indicators_1(hf_chan_handle_t chan_h);
bt_status_t btif_hf_indicators_2(hf_chan_handle_t chan_h);
bt_status_t btif_hf_indicators_3(hf_chan_handle_t chan_h);
#if defined(HFP_MOBILE_AG_ROLE)
bt_status_t btif_ag_create_service_link(hf_chan_handle_t chan_h, bt_bdaddr_t * bt_addr);
bt_status_t btif_ag_disconnect_service_link(hf_chan_handle_t chan_h);
bt_status_t btif_ag_create_audio_link(hf_chan_handle_t chan_h);
bt_status_t btif_ag_disc_audio_link(hf_chan_handle_t chan_h);
bt_status_t btif_ag_send_call_active_status(hf_chan_handle_t chan_h, bool active);
bt_status_t btif_ag_send_callsetup_status(hf_chan_handle_t chan_h, uint8_t status);
bt_status_t btif_ag_send_callheld_status(hf_chan_handle_t chan_h, uint8_t status);
bt_status_t btif_ag_send_calling_ring(hf_chan_handle_t chan_h, const char* number);
bt_status_t btif_ag_set_speaker_gain(hf_chan_handle_t chan_h, uint8_t volume);
bt_status_t btif_ag_set_microphone_gain(hf_chan_handle_t chan_h, uint8_t volume);
bt_status_t btif_ag_send_result_code(hf_chan_handle_t chan_h, const char *data, int len);
bt_status_t btif_ag_register_mobile_module(hf_chan_handle_t chan_h, struct hfp_mobile_module_handler* handler);
#endif
#ifdef __cplusplus
}
#endif /* */
#endif /*__HFP_API_H__*/