209 lines
5.8 KiB
C
209 lines
5.8 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,
|
|
BT_PROFILE_HF_CALLSETUP,
|
|
BT_PROFILE_HF_MAX,
|
|
BT_PROFILE_A2DP_CONN,//8
|
|
BT_PROFILE_A2DP_DISCONN,
|
|
BT_PROFILE_A2DP_PLAYING,
|
|
BT_PROFILE_A2DP_SUSPEND,//10
|
|
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,
|
|
};
|
|
|
|
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;
|
|
|
|
} 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 |