MXC-A36-Demo/MCU/examples/application/btdm_audio/Src/user_bt.h

223 lines
6.1 KiB
C

#ifndef __USER_BT_H
#define __USER_BT_H
#include <stdint.h>
#include "app_bt.h"
#include "bt_types.h"
#include "btconfig.h"
#include "co_list.h"
///enable_profiles
#define ENABLE_PROFILE_HF BIT0
#define ENABLE_PROFILE_A2DP BIT1 //if a2dp is enabled, avrcp is enabled automatically
#define ENABLE_PROFILE_HID BIT2
#define ENABLE_PROFILE_PBAP BIT3
#define ENABLE_PROFILE_SPP BIT4
#define ENABLE_PROFILE_HFG BIT5
#define ENABLE_PROFILE_MAP BIT6
#define ENABLE_PROFILE_ALL 0xff
//conn flags
#define LINK_STATUS_HF_CONNECTED (1<<0)
#define LINK_STATUS_AV_CONNECTED (1<<1)
#define LINK_STATUS_AVC_CONNECTED (1<<2)
#define LINK_STATUS_MEDIA_PLAYING (1<<3)
#define LINK_STATUS_SCO_CONNECTED (1<<4)
#define LINK_STATUS_HID_CONNECTED (1<<5)
#define LINK_STATUS_PBAP_CONNECTED (1<<6)
#define LINK_STATUS_SPP_CONNECTED (1<<7)
#define LINK_STATUS_HFG_CONNECTED (1<<8)
enum bt_state_t{
BT_STATE_IDLE, //IDLE
BT_STATE_CONNECTING, //CONNECTING, connect is ongoing
BT_STATE_DISCONNECTING, //disconnecting
BT_STATE_CONNECTED, //CONNECTED, connected,no call and music
BT_STATE_HFP_INCOMMING, //INCOMMING CALL
BT_STATE_HFP_OUTGOING, //OUTGOING CALL
BT_STATE_HFP_CALLACTIVE, //CALL IS ACTIVE
BT_STATE_MEDIA_PLAYING, //MUSIC PLAYING
BT_STATE_MAX,
};
//enum bt_state_t{
// BT_STATE_IDLE, //IDLE
// BT_STATE_PAIRING, //PAIRING
// BT_STATE_CONNECTED, //CONNECTED, connected,no call and music
// BT_STATE_BOTH_CONNECTED, //used in connecting with two device
// BT_STATE_MAX,
//};
enum bt_link_state_t{
BT_LINK_STATE_IDLE,
BT_LINK_STATE_CONNECTING,
BT_LINK_STATE_DISCONNECTING,
BT_LINK_STATE_ACL_CONNECTED,
BT_LINK_STATE_PROFILE_CONNECTED,
};
enum app_bt_access_state_t{
ACCESS_IDLE = 0x00,
ACCESS_PAIRING,
};
enum bt_connect_action_t{
BT_ACTION_NULL,
BT_ACTION_CONNECT,
BT_ACTION_DISCONNECT,
BT_ACTION_ACCESS,
};
enum bt_connect_event_t{
BT_EVENT_CON_IND,
BT_EVENT_CON_CNF,
BT_EVENT_PROFILE_CONNECT,
BT_EVENT_DISCONNECT,
BT_EVENT_ACC_CHG,
};
enum bt_profile_event_t{
BT_PROFILE_HF_CONN_REQ,
BT_PROFILE_HF_CONN,
BT_PROFILE_HF_DISCONN,
BT_PROFILE_HF_AUDIO_CONN,
BT_PROFILE_HF_AUDIO_DISCONN,
BT_PROFILE_HF_CALL, //5
BT_PROFILE_HF_CALLSETUP,
BT_PROFILE_HF_SPK_VOL,
BT_PROFILE_HF_CURRENT_CALL,
BT_PROFILE_HF_AT_RESULT,
BT_PROFILE_HF_MAX, //10
BT_PROFILE_A2DP_CONN,
BT_PROFILE_A2DP_DISCONN,
BT_PROFILE_A2DP_PLAYING,
BT_PROFILE_A2DP_SUSPEND,
BT_PROFILE_A2DP_OPEN_IND,
BT_PROFILE_A2DP_MAX,
BT_PROFILE_AVRCP_CONN,
BT_PROFILE_AVRCP_DISCONN,
BT_PROFILE_AVRCP_MEDIA_STATUS,
BT_PROFILE_AVRCP_MEDIA_INFO,
BT_PROFILE_AVRCP_MEDIA_POS,
BT_PROFILE_AVRCP_MAX,
BT_PROFILE_PBAP_CONN,
BT_PROFILE_PBAP_DISCONN,
BT_PROFILE_PBAP_DATA_IND,
BT_PROFILE_PBAP_COMP,
BT_PROFILE_PBAP_MAX,
};
struct bt_connect_param_t{
uint16_t page_timeout; //unit: 625us
uint8_t connect_times;
// uint8_t connect_interval; //unit: 1s , interval shall larger than page_timeout
};
struct bt_connect_elt_t{
struct co_list_hdr hdr;
BD_ADDR addr;
uint8_t action;
// struct bt_connect_param_t param;
};
/* Device context */
typedef struct app_device_t {
BD_ADDR remote_bd;
uint16_t conFlags;//avrcp,a2dp,hfp conn status
uint8_t prf_all_connected;
uint8_t responder;
uint8_t state;
uint8_t mode;//active or sniff
HfCallSetupState setup_state;
HfCallActiveState active;
HfCallHeldState call_held;
BtRemoteDevice *remDev;
HfChannel *hf_chan;
HfgChannel *hfg_chan;
AvrcpChannel *rcp_chan;
A2dpStream *pstream;
HidChannel *hid_chan;
PbapClientSession *pbap_client;
} APP_DEVICE;
struct user_bt_env_t {
uint8_t enable_profiles;
uint8_t last_active_index;
uint8_t access_state;
uint16_t page_timeout; //unit: 625us
uint8_t connect_times;
BD_ADDR last_dev_addr;
uint8_t cur_action;
uint8_t action_cnt;
struct co_list op_list;
// struct bt_connect_param_t connect_param;
void (*bt_disconnect_cb)(BD_ADDR *addr, uint8_t errcode);
void (*bt_connect_cb)(uint8_t type, BD_ADDR *addr, uint8_t errcode);
void (*bt_access_change_cb)(uint8_t mode);
APP_DEVICE dev[NUM_BT_DEVICES];
};
extern struct user_bt_env_t user_bt_env;
BtStatus bt_connect(BD_ADDR *addr);
BtStatus bt_disconnect(BD_ADDR *addr, uint8_t force_disconnect);
BtStatus bt_poweroff(void);
void bt_connect_act_cmp(uint8_t evt,uint8_t error,BtRemoteDevice *rem_dev);
void bt_update_conn_status(uint8_t event, void *chan, const void *param);
uint8_t user_bt_get_state(uint8_t dev_index);
void user_bt_init(void);
BtStatus bt_answer_call(uint8_t dev_index);
BtStatus bt_dial_number(uint8_t dev_index, uint8_t *number, uint16_t len);
BtStatus bt_redial(uint8_t dev_index);
BtStatus bt_call_hold(uint8_t dev_index, HfHoldAction action, uint8_t index);
BtStatus bt_hang_up(uint8_t dev_index);
BtStatus bt_list_current_calls(uint8_t dev_index);
BtStatus bt_transfer_sco(uint8_t dev_index);
BtStatus bt_send_dtmf(uint8_t dev_index, uint8_t dtmf);
BtStatus bt_report_mic_volume(uint8_t dev_index, uint8_t vol);
BtStatus bt_report_spk_volume(uint8_t dev_index, uint8_t vol);
BtStatus bt_send_hf_cmd(uint8_t dev_index, const uint8_t *at_str);
BtStatus bt_enable_voice_recognition(uint8_t dev_index, uint8_t enabled);
uint8_t bt_is_voice_rec_active(uint8_t dev_index);
BtStatus bt_get_media_info(uint8_t dev_index,AvrcpMediaAttrIdMask mediaMask);
BtStatus bt_get_playstatus(uint8_t dev_index);
BtStatus bt_set_media_volume(uint8_t dev_index, uint8_t volume);
BtStatus bt_enter_pairing(uint8_t access, BtAccessModeInfo *info);
BtStatus bt_exit_pairing(void);
#endif