#ifndef __BT_MANAGER_1S2_H__ #define __BT_MANAGER_1S2_H__ #include #include #include #if __cplusplus extern "C" { #endif #define BTMGVERSION "Version:2.0.3.I161ca661" #define BT_LAST_CONNECT_FILE "/data/lib/bluetooth/last_connected" #ifndef CONFIG_FILE_PATH #define CONFIG_FILE_PATH "/etc/bluetooth/aw_bluetooth" #endif /*log devel in control of bt_manager*/ typedef enum btmg_log_level_t { BTMG_LOG_LEVEL_NONE = 0, BTMG_LOG_LEVEL_ERROR, BTMG_LOG_LEVEL_WARNG, BTMG_LOG_LEVEL_INFO, BTMG_LOG_LEVEL_DEBUG, } btmg_log_level_t; /*BT state*/ typedef enum { BTMG_STATE_OFF, BTMG_STATE_ON, BTMG_STATE_TURNING_ON, BTMG_STATE_TURNING_OFF, } btmg_state_t; /*BT discovery state*/ typedef enum { BTMG_DISC_STARTED, BTMG_DISC_STOPPED_AUTO, BTMG_DISC_START_FAILED, BTMG_DISC_STOPPED_BY_USER, } btmg_discovery_state_t; /*BT discovery mode*/ typedef enum { BTMG_SCAN_MODE_NONE, BTMG_SCAN_MODE_CONNECTABLE, BTMG_SCAN_MODE_CONNECTABLE_DISCOVERABLE, } btmg_discovery_mode_t; /*BT bond state*/ typedef enum { BTMG_BOND_STATE_NONE, BTMG_BOND_STATE_BONDING, BTMG_BOND_STATE_BONDED, } btmg_bond_state_t; /*AVRCP commands*/ typedef enum { BTMG_AVRCP_PLAY, BTMG_AVRCP_PAUSE, BTMG_AVRCP_STOP, BTMG_AVRCP_FORWARD, BTMG_AVRCP_BACKWARD, } btmg_avrcp_command_t; /*A2DP_SINK connection state for callback*/ typedef enum { BTMG_A2DP_SINK_DISCONNECTED, BTMG_A2DP_SINK_CONNECTING, BTMG_A2DP_SINK_CONNECTED, BTMG_A2DP_SINK_DISCONNECTING, } btmg_a2dp_sink_connection_state_t; /*A2DP_SINK audio state for callback*/ typedef enum { BTMG_A2DP_SINK_AUDIO_SUSPENDED, BTMG_A2DP_SINK_AUDIO_STOPPED, BTMG_A2DP_SINK_AUDIO_STARTED, } btmg_a2dp_sink_audio_state_t; /*AVRCP play state for callback*/ /*The A2DP_SINK audio state may not be updated in time due to the BT stack implementation * of different smartphone, while the AVRCP play state is always updated in time. So it is *recommended to take the reported ARVCP state to judge the playing status of BT music*/ typedef enum { BTMG_AVRCP_PLAYSTATE_STOPPED, BTMG_AVRCP_PLAYSTATE_PLAYING, BTMG_AVRCP_PLAYSTATE_PAUSED, BTMG_AVRCP_PLAYSTATE_ERROR, } btmg_avrcp_play_state_t; typedef struct btmg_track_info_t { char title[256]; char artist[256]; char album[256]; char track_num[64]; char num_tracks[64]; char genre[256]; char playing_time[256]; } btmg_track_info_t; struct paired_dev { char *remote_address; char *remote_name; bool is_connected; struct paired_dev *next; }; typedef struct paired_dev bt_paried_device; #define MAX_BT_NAME_LEN 248 #define MAX_BT_ADDR_LEN 17 /*callback functions for GAP profile*/ typedef void (*bt_gap_status_cb)(btmg_state_t status); typedef void (*bt_gap_bond_state_cb)(btmg_bond_state_t state,const char *bd_addr,const char *name); typedef void (*bt_gap_discovery_status_cb)(btmg_discovery_state_t status); typedef void (*bt_gap_dev_found_cb)(const char *address,const char *name, unsigned int bt_class, int rssi); /*gap callback*/ typedef struct btmg_gap_callback_t { bt_gap_status_cb gap_status_cb; /*used for return results of bt_manager_enable and status of BT*/ bt_gap_bond_state_cb gap_bond_state_cb; /*used for bond state event*/ bt_gap_discovery_status_cb gap_disc_status_cb; /*used for return discovery status of BT*/ bt_gap_dev_found_cb gap_dev_found_cb; /*used for device found event*/ } btmg_gap_callback_t; /*callback functions for a2dp_sink profile*/ typedef void (*bt_a2dp_sink_connection_state_cb)(const char *bd_addr, btmg_a2dp_sink_connection_state_t state); typedef void (*bt_a2dp_sink_audio_state_cb)(const char *bd_addr, btmg_a2dp_sink_audio_state_t state); typedef void (*bt_a2dp_sink_audio_underrun_cb)(void); /*a2dp_sink callback*/ typedef struct btmg_a2dp_sink_callback_t { bt_a2dp_sink_connection_state_cb a2dp_sink_connection_state_cb;/*used to report the a2dp_sink connection state*/ bt_a2dp_sink_audio_state_cb a2dp_sink_audio_state_cb;/*used to report the a2dp_sink audio state, not recommended as mentioned before*/ bt_a2dp_sink_audio_underrun_cb a2dp_sink_audio_underrun_cb;/*underrun callabck*/ } btmg_a2dp_sink_callback_t; /*callback functions for avrcp profile*/ typedef void (*bt_avrcp_play_state_cb)(const char *bd_addr, btmg_avrcp_play_state_t state); /*used to report play state of avrcp, recommended*/ typedef void (*bt_avrcp_track_changed_cb)(const char *bd_addr, btmg_track_info_t track_info); /*used to report track information*/ typedef void (*bt_avrcp_play_position_cb)(const char *bd_addr, int song_len, int song_pos);/*used to report the progress of playing music*/ /*avrcp callback*/ typedef struct btmg_avrcp_callback_t { bt_avrcp_play_state_cb avrcp_play_state_cb; bt_avrcp_track_changed_cb avrcp_track_changed_cb; bt_avrcp_play_position_cb avrcp_play_position_cb; } btmg_avrcp_callback_t; /*bt_manager callback struct to be registered when calling bt_manager_init to report various event*/ typedef struct btmg_callback_t { btmg_gap_callback_t btmg_gap_cb; btmg_a2dp_sink_callback_t btmg_a2dp_sink_cb; btmg_avrcp_callback_t btmg_avrcp_cb; }btmg_callback_t; /*bt_manager APIs*/ /* set the bt_manager printing level*/ int bt_manager_set_loglevel(btmg_log_level_t log_level); /* get the bt_manager printing level*/ btmg_log_level_t bt_manager_get_loglevel(void); int bt_manager_debug_open_file(const char *path); void bt_manager_debug_close_file(void); void bt_manager_debug_open_syslog(void); void bt_manager_debug_close_syslog(void); /*preinit function, to allocate room for callback struct, which will be free by bt_manager_deinit*/ int bt_manager_preinit(btmg_callback_t **btmg_cb); /*init function, the callback functions will be registered*/ int bt_manager_init(btmg_callback_t *btmg_cb); /*deinit function, must be called before exit*/ int bt_manager_deinit(btmg_callback_t *btmg_cb); /*GAP APIs*/ /*set BT discovery mode*/ int bt_manager_set_discovery_mode(btmg_discovery_mode_t mode); /*enable BT*/ int bt_manager_enable(bool enable); /*return BT state, is enabled or not*/ bool bt_manager_is_enabled(void); /*start discovery, will return immediately*/ int bt_manager_start_discovery(unsigned int mseconds); /*cancel discovery, will return immediately*/ int bt_manager_cancel_discovery(void); /*judge the discovery is in process or not*/ bool bt_manager_is_discovering(); /*pair*/ int bt_manager_pair(char *addr); /*unpair*/ int bt_manager_unpair(char *addr); /*get bt state*/ btmg_state_t bt_manager_get_state(); /*get BT name*/ int bt_manager_get_name(char *name, int size); /*set BT name*/ int bt_manager_set_name(const char *name); /*get local device address*/ int bt_manager_get_address(char *addr, int size); /*a2dp sink APIs*/ /*request a2dp_sink connection*/ int bt_manager_a2dp_sink_connect(char *addr); /*request a2dp_sink disconnection*/ int bt_manager_a2dp_sink_disconnect(char *addr); /*used to send avrcp command, refer to the struct btmg_avrcp_command_t for the supported commands*/ int bt_manager_disconnect(char *addr); int bt_manager_avrcp_command(char *addr, btmg_avrcp_command_t command); /* Get the paired device,need to call to free data*/ int bt_manager_get_paired_devices(bt_paried_device **dev_list,int *count); /* free paird device data resource*/ int bt_manager_free_paired_devices(bt_paried_device *dev_list); /*send GetPlayStatus cmd*/ int bt_manager_send_get_play_status(void); /*if support avrcp EVENT_PLAYBACK_POS_CHANGED,*/ bool bt_manager_is_support_pos_changed(); int bt_manager_switch_throughput(bool sw_to_wlan); #if __cplusplus }; // extern "C" #endif #endif