btsrv_inner.h 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675
  1. /*
  2. * Copyright (c) 2016 Actions Semi Co., Inc.
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. /**
  7. * @file
  8. * @brief bt service inner head file
  9. */
  10. #ifndef _BTSRV_INNER_H_
  11. #define _BTSRV_INNER_H_
  12. #include <btservice_api.h>
  13. #include "../btsrv_config.h"
  14. #include <acts_bluetooth/host_interface.h>
  15. #include <hci_core.h>
  16. #ifdef CONFIG_SUPPORT_TWS
  17. #include <btsrv_tws.h>
  18. #endif
  19. /* Two phone device, one tws device or one trs device */
  20. #define BTSRV_SAVE_AUTOCONN_NUM (3)
  21. enum {
  22. LINK_ADJUST_IDLE,
  23. LINK_ADJUST_RUNNING,
  24. LINK_ADJUST_STOP,
  25. LINK_ADJUST_SINK_BLOCK,
  26. LINK_ADJUST_SINK_CLEAR_BLOCK,
  27. };
  28. typedef enum {
  29. /** first time reconnect */
  30. RECONN_STARTUP,
  31. /** reconnect when timeout */
  32. RECONN_TIMEOUT,
  33. } btstack_reconnect_mode_e;
  34. struct rdm_sniff_info {
  35. uint8_t sniff_mode:4;
  36. uint8_t sniff_entering:1;
  37. uint8_t sniff_exiting:1;
  38. uint16_t sniff_interval;
  39. uint16_t conn_rxtx_cnt;
  40. uint32_t idle_start_time;
  41. uint32_t sniff_entering_time;
  42. };
  43. typedef void (*rdm_connected_dev_cb)(struct bt_conn *base_conn, uint8_t tws_dev, void *cb_param);
  44. #define MEDIA_RTP_HEAD_LEN 12
  45. #define AVDTP_SBC_HEADER_LEN 13
  46. #define AVDTP_AAC_HEADER_LEN 16
  47. enum {
  48. MEDIA_RTP_HEAD = 0x80,
  49. MEDIA_RTP_TYPE_SBC = 0x60,
  50. MEDIA_RTP_TYPE_AAC = 0x80, /* 0x80 or 0x62 ?? */
  51. };
  52. /** avrcp device state */
  53. typedef enum {
  54. BTSRV_AVRCP_PLAYSTATUS_STOPPED,
  55. BTSRV_AVRCP_PLAYSTATUS_PAUSEED,
  56. BTSRV_AVRCP_PLAYSTATUS_PLAYING,
  57. } btsrv_avrcp_state_e;
  58. enum {
  59. BTSRV_LINK_BASE_CONNECTED,
  60. BTSRV_LINK_BASE_CONNECTED_FAILED,
  61. BTSRV_LINK_BASE_CONNECTED_TIMEOUT,
  62. BTSRV_LINK_BASE_DISCONNECTED,
  63. BTSRV_LINK_BASE_GET_NAME,
  64. BTSRV_LINK_HFP_CONNECTED,
  65. BTSRV_LINK_HFP_DISCONNECTED,
  66. BTSRV_LINK_A2DP_CONNECTED,
  67. BTSRV_LINK_A2DP_DISCONNECTED,
  68. BTSRV_LINK_AVRCP_CONNECTED,
  69. BTSRV_LINK_AVRCP_DISCONNECTED,
  70. BTSRV_LINK_SPP_CONNECTED,
  71. BTSRV_LINK_SPP_DISCONNECTED,
  72. BTSRV_LINK_PBAP_CONNECTED,
  73. BTSRV_LINK_PBAP_DISCONNECTED,
  74. BTSRV_LINK_HID_CONNECTED,
  75. BTSRV_LINK_HID_DISCONNECTED,
  76. BTSRV_LINK_MAP_CONNECTED,
  77. BTSRV_LINK_MAP_DISCONNECTED,
  78. };
  79. enum {
  80. BTSRV_WAKE_LOCK_WAIT_CONNECT = (0x1 << 0),
  81. BTSRV_WAKE_LOCK_PAIR_MODE = (0x1 << 1),
  82. BTSRV_WAKE_LOCK_SEARCH = (0x1 << 2),
  83. BTSRV_WAKE_LOCK_RECONNECT = (0x1 << 3),
  84. BTSRV_WAKE_LOCK_CONN_BUSY = (0x1 << 8),
  85. BTSRV_WAKE_LOCK_CALL_BUSY = (0x1 << 9),
  86. BTSRV_WAKE_LOCK_ACTIVE_MODE = (0x1 << 10),
  87. BTSRV_WAKE_LOCK_BTSRV_RUNING = (0x1 << 11),
  88. BTSRV_WAKE_LOCK_TWS_IRQ_BUSY = (0x1 << 12),
  89. };
  90. struct btsrv_info_t {
  91. uint8_t running:1;
  92. uint8_t allow_sco_connect:1;
  93. uint16_t bt_wake_lock;
  94. btsrv_callback callback;
  95. uint8_t device_name[CONFIG_MAX_BT_NAME_LEN + 1];
  96. uint8_t device_addr[6];
  97. struct btsrv_config_info cfg;
  98. struct thread_timer wait_disconnect_timer;
  99. struct thread_timer wake_lock_timer;
  100. };
  101. struct btsrv_addr_name {
  102. bd_address_t mac;
  103. uint8_t name[CONFIG_MAX_BT_NAME_LEN + 1];
  104. };
  105. struct btsrv_mode_change_param {
  106. struct bt_conn *conn;
  107. uint8_t mode;
  108. uint16_t interval;
  109. };
  110. #ifdef CONFIG_BT_A2DP_TRS
  111. struct bt_paired_list_dev_t {
  112. bd_address_t addr;
  113. uint8_t name[CONFIG_MAX_BT_NAME_LEN + 1];
  114. uint8_t valid;
  115. };
  116. #endif
  117. extern struct btsrv_info_t *btsrv_info;
  118. #define btsrv_max_conn_num() btsrv_info->cfg.max_conn_num
  119. #define btsrv_max_phone_num() btsrv_info->cfg.max_phone_num
  120. #define btsrv_is_pts_test() btsrv_info->cfg.pts_test_mode
  121. #define btsrv_is_preemption_mode() btsrv_info->cfg.double_preemption_mode
  122. #define btsrv_volume_sync_delay_ms() btsrv_info->cfg.volume_sync_delay_ms
  123. #define btsrv_get_tws_version() btsrv_info->cfg.tws_version
  124. #define btsrv_get_tws_feature() btsrv_info->cfg.tws_feature
  125. #define btsrv_allow_sco_connect() btsrv_info->allow_sco_connect
  126. struct btsrv_info_t *btsrv_adapter_init(btsrv_callback cb);
  127. int btsrv_adapter_process(struct app_msg *msg);
  128. int btsrv_adapter_callback(btsrv_event_e event, void *param);
  129. void btsrv_adapter_run(void);
  130. int btsrv_adapter_stop(void);
  131. void btsrv_adapter_allow_sco_connect(bool allow);
  132. int btsrv_adapter_set_config_info(void *param);
  133. void btsrv_adapter_set_clear_wake_lock(uint16_t wake_lock, uint8_t set);
  134. int btsrv_adapter_get_wake_lock(void);
  135. void btsrv_adapter_srv_get_wake_lock(void);
  136. int btsrv_adapter_start_discover(struct btsrv_discover_param *param);
  137. int btsrv_adapter_stop_discover(void);
  138. int btsrv_adapter_remote_name_request(bd_address_t *addr, bt_br_remote_name_cb_t cb);
  139. int btsrv_adapter_connect(bd_address_t *addr, const struct bt_br_conn_param *param);
  140. int btsrv_adapter_check_cancal_connect(bd_address_t *addr);
  141. int btsrv_adapter_disconnect(struct bt_conn *conn);
  142. int btsrv_adapter_set_discoverable(bool enable);
  143. int btsrv_adapter_set_connnectable(bool enable);
  144. void btsrv_adapter_dump_info(void);
  145. void btsrv_dump_info_proc(void);
  146. int btsrv_a2dp_process(struct app_msg *msg);
  147. int btsrv_a2dp_init(struct btsrv_a2dp_start_param *param);
  148. int btsrv_a2dp_deinit(void);
  149. int btsrv_a2dp_disconnect(struct bt_conn *conn);
  150. int btsrv_a2dp_connect(struct bt_conn *conn, uint8_t role);
  151. void btsrv_a2dp_halt_aac_endpoint(bool halt);
  152. int btsrv_a2dp_media_state_change(struct bt_conn *conn, uint8_t state);
  153. int btsrv_a2dp_media_parser_frame_info(uint8_t codec_id, uint8_t *data, uint32_t data_len, uint16_t *frame_cnt, uint16_t *frame_len);
  154. uint32_t btsrv_a2dp_media_cal_frame_time_us(uint8_t codec_id, uint8_t *data);
  155. uint16_t btsrv_a2dp_media_cal_frame_samples(uint8_t codec_id, uint8_t *data);
  156. uint8_t btsrv_a2dp_media_get_samples_rate(uint8_t codec_id, uint8_t *data);
  157. uint8_t *btsrv_a2dp_media_get_zero_frame(uint8_t codec_id, uint16_t *len, uint8_t sample_rate);
  158. int btsrv_a2dp_trs_conn_get(void);
  159. struct btsrv_rdm_avrcp_pass_info {
  160. uint8_t pass_state;
  161. uint8_t op_id;
  162. uint32_t op_time;
  163. };
  164. int btsrv_avrcp_process(struct app_msg *msg);
  165. int btsrv_avrcp_init(btsrv_avrcp_callback_t *cb);
  166. int btsrv_avrcp_deinit(void);
  167. int btsrv_avrcp_disconnect(struct bt_conn *conn);
  168. int btsrv_avrcp_connect(struct bt_conn *conn);
  169. bool btsrv_avrcp_is_support_get_playback_pos(void);
  170. typedef enum {
  171. BTSRV_SCO_STATE_INIT,
  172. BTSRV_SCO_STATE_PHONE,
  173. BTSRV_SCO_STATE_HFP,
  174. BTSRV_SCO_STATE_DISCONNECT,
  175. } btsrv_sco_state;
  176. typedef enum {
  177. BTSRV_HFP_ROLE_HF =0,
  178. BTSRV_HFP_ROLE_AG,
  179. } btsrv_hfp_role;
  180. int btsrv_hfp_process(struct app_msg *msg);
  181. int btsrv_hfp_init(btsrv_hfp_callback cb);
  182. int btsrv_hfp_deinit(void);
  183. int btsrv_hfp_disconnect(struct bt_conn *conn);
  184. int btsrv_hfp_connect(struct bt_conn *conn);
  185. int btsrv_hfp_rejected(struct bt_conn *conn);
  186. int btsrv_hfp_set_status(struct bt_conn *conn, int state);
  187. uint8_t btsrv_hfp_get_codec_id(struct bt_conn *conn);
  188. int btsrv_hfp_get_call_state(uint8_t active_call, uint8_t *call_state);
  189. int btsrv_sco_process(struct app_msg *msg);
  190. struct bt_conn *btsrv_sco_get_conn(void);
  191. void btsrv_sco_disconnect(struct bt_conn *sco_conn);
  192. int btsrv_hfp_ag_process(struct app_msg *msg);
  193. int btsrv_hfp_ag_connect(struct bt_conn *conn);
  194. int btsrv_hfp_ag_set_status(struct bt_conn *conn, int state);
  195. int btsrv_spp_send_data(uint8_t app_id, uint8_t *data, uint32_t len);
  196. int btsrv_spp_process(struct app_msg *msg);
  197. int btsrv_pbap_process(struct app_msg *msg);
  198. int btsrv_map_process(struct app_msg *msg);
  199. void btsrv_hid_connect(struct bt_conn *conn);
  200. int btsrv_hid_process(struct app_msg *msg);
  201. bool btsrv_rdm_need_high_performance(void);
  202. struct bt_conn *btsrv_rdm_find_conn_by_addr(bd_address_t *addr);
  203. struct bt_conn *btsrv_rdm_find_conn_by_hdl(uint16_t hdl);
  204. int btsrv_rdm_get_connected_dev(rdm_connected_dev_cb cb, void *cb_param);
  205. int btsrv_rdm_get_dev_state(struct bt_dev_rdm_state *state);
  206. int btsrv_rdm_get_connected_dev_cnt_by_type(int type);
  207. int btsrv_rdm_get_autoconn_dev(struct autoconn_info *info, int max_dev);
  208. int btsrv_rdm_base_disconnected(struct bt_conn *base_conn);
  209. int btsrv_rdm_add_dev(struct bt_conn *base_conn);
  210. int btsrv_rdm_remove_dev(uint8_t *mac);
  211. void btsrv_rdm_set_security_changed(struct bt_conn *base_conn);
  212. bool btsrv_rdm_is_security_changed(struct bt_conn *base_conn);
  213. bool btsrv_rdm_is_connected(struct bt_conn *base_conn);
  214. bool btsrv_rdm_is_a2dp_connected(struct bt_conn *base_conn);
  215. bool btsrv_rdm_is_avrcp_connected(struct bt_conn *base_conn);
  216. bool btsrv_rdm_is_hfp_connected(struct bt_conn *base_conn);
  217. bool btsrv_rdm_is_spp_connected(struct bt_conn *base_conn);
  218. bool btsrv_rdm_is_hid_connected(struct bt_conn *base_conn);
  219. int btsrv_rdm_set_a2dp_connected(struct bt_conn *base_conn, bool connected);
  220. int btsrv_rdm_a2dp_actived_switch_lock(struct bt_conn *base_conn, uint8_t lock);
  221. int btsrv_rdm_a2dp_actived(struct bt_conn *base_conn, uint8_t actived);
  222. struct bt_conn *btsrv_rdm_a2dp_get_actived(void);
  223. struct bt_conn *btsrv_rdm_avrcp_get_actived(void);
  224. struct bt_conn *btsrv_rdm_a2dp_get_second_dev(void);
  225. int btsrv_rdm_is_actived_a2dp_stream_open(void);
  226. int btsrv_rdm_is_a2dp_stream_open(struct bt_conn *base_conn);
  227. int btsrv_rdm_a2dp_set_codec_info(struct bt_conn *base_conn, uint8_t format, uint8_t sample_rate, uint8_t cp_type);
  228. int btsrv_rdm_a2dp_get_codec_info(struct bt_conn *base_conn, uint8_t *format, uint8_t *sample_rate, uint8_t *cp_type);
  229. int btsrv_rdm_a2dp_set_bitpool(struct bt_conn *base_conn, uint8_t bitpool);
  230. uint8_t btsrv_rdm_a2dp_get_bitpool(struct bt_conn *base_conn);
  231. int btsrv_rdm_get_a2dp_start_time(struct bt_conn *base_conn, uint32_t *start_time);
  232. void btsrv_rdm_get_a2dp_acitve_mac(bd_address_t *addr);
  233. int btsrv_rdm_set_a2dp_pending_ahead_start(struct bt_conn *base_conn, uint8_t start);
  234. uint8_t btsrv_rdm_get_a2dp_pending_ahead_start(struct bt_conn *base_conn);
  235. int btsrv_rdm_set_avrcp_connected(struct bt_conn *base_conn, bool connected);
  236. int btsrv_rdm_avrcp_update_play_status(struct bt_conn *base_conn, uint8_t status);
  237. struct bt_conn *btsrv_rdm_acl_get_connected_dev(void);
  238. struct bt_conn *btsrv_rdm_avrcp_get_connected_dev(void);
  239. struct bt_conn *btsrv_rdm_a2dp_get_connected_dev(void);
  240. void btsrv_rdm_avrcp_set_getting_pos_time(struct bt_conn *base_conn, uint8_t getting);
  241. int btsrv_rdm_avrcp_get_getting_pos_time(struct bt_conn *base_conn);
  242. void *btsrv_rdm_avrcp_get_pass_info(struct bt_conn *base_conn);
  243. int btsrv_rdm_set_hfp_connected(struct bt_conn *base_conn, bool connected);
  244. int btsrv_rdm_set_hfp_role(struct bt_conn *base_conn, uint8_t role);
  245. int btsrv_rdm_get_hfp_role(struct bt_conn *base_conn);
  246. int btsrv_rdm_hfp_actived(struct bt_conn *base_conn, uint8_t actived, uint8_t force);
  247. struct bt_conn *btsrv_rdm_hfp_get_actived_sco(void);
  248. bool btsrv_rdm_hfp_in_call_state(struct bt_conn *base_conn);
  249. int btsrv_rdm_hfp_set_codec_info(struct bt_conn *base_conn, uint8_t format, uint8_t sample_rate);
  250. int btsrv_rdm_hfp_set_state(struct bt_conn *base_conn, uint8_t state);
  251. int btsrv_rdm_hfp_get_state(struct bt_conn *base_conn);
  252. int btsrv_rdm_hfp_set_sco_state(struct bt_conn *base_conn, uint8_t state);
  253. int btsrv_rdm_hfp_get_sco_state(struct bt_conn *base_conn);
  254. int btsrv_rdm_hfp_set_call_state(struct bt_conn *base_conn, uint8_t active, uint8_t held, uint8_t in, uint8_t out);
  255. int btsrv_rdm_hfp_get_call_state(struct bt_conn *base_conn, uint8_t *active, uint8_t *held, uint8_t *in, uint8_t *out);
  256. int btsrv_rdm_hfp_get_codec_info(struct bt_conn *base_conn, uint8_t *format, uint8_t *sample_rate);
  257. int btsrv_rdm_hfp_set_notify_phone_num_state(struct bt_conn *base_conn, uint8_t state);
  258. int btsrv_rdm_hfp_get_notify_phone_num_state(struct bt_conn *base_conn);
  259. struct bt_conn *btsrv_rdm_hfp_get_actived(void);
  260. struct bt_conn *btsrv_rdm_hfp_get_second_dev(void);
  261. void btsrv_rdm_get_hfp_acitve_mac(bd_address_t *addr);
  262. void btsrv_rdm_set_hfp_service(struct bt_conn *base_conn, uint8_t service);
  263. uint8_t btsrv_rdm_get_hfp_service(void);
  264. struct bt_conn *btsrv_rdm_get_base_conn_by_sco(struct bt_conn *sco_conn);
  265. int btsrv_rdm_sco_connected(struct bt_conn *base_conn, struct bt_conn *sco_conn);
  266. int btsrv_rdm_sco_disconnected(struct bt_conn *sco_conn);
  267. bool btsrv_rdm_is_sco_connected(struct bt_conn *acl_conn);
  268. void btsrv_rdm_set_sco_connected_reject(struct bt_conn *acl_conn, uint8_t reject);
  269. bool btsrv_rdm_is_sco_connected_reject(struct bt_conn *acl_conn);
  270. int btsrv_rdm_set_spp_connected(struct bt_conn *base_conn, bool connected);
  271. int btsrv_rdm_set_pbap_connected(struct bt_conn *base_conn, bool connected);
  272. int btsrv_rdm_set_map_connected(struct bt_conn *base_conn, bool connected);
  273. int btsrv_rdm_set_hid_connected(struct bt_conn *base_conn, bool connected);
  274. struct bt_conn *btsrv_rdm_hid_get_actived(void);
  275. int btsrv_rdm_set_tws_role(struct bt_conn *base_conn, uint8_t role);
  276. struct bt_conn *btsrv_rdm_get_tws_by_role(uint8_t role);
  277. int btsrv_rdm_get_conn_role(struct bt_conn *base_conn);
  278. int btsrv_rdm_get_dev_role(void);
  279. uint16_t btsrv_rdm_get_actived_phone_hdl(void);
  280. int btsrv_rdm_set_controler_role(struct bt_conn *base_conn, uint8_t role);
  281. int btsrv_rdm_get_controler_role(struct bt_conn *base_conn, uint8_t *role);
  282. int btsrv_rdm_set_link_time(struct bt_conn *base_conn, uint16_t link_time);
  283. uint16_t btsrv_rdm_get_link_time(struct bt_conn *base_conn);
  284. void btsrv_rdm_set_dev_name(struct bt_conn *base_conn, uint8_t *name);
  285. uint8_t *btsrv_rdm_get_dev_name(struct bt_conn *base_conn);
  286. void btsrv_rdm_set_wait_to_diconnect(struct bt_conn *base_conn, bool set);
  287. bool btsrv_rdm_is_wait_to_diconnect(struct bt_conn *base_conn);
  288. void btsrv_rdm_set_switch_sbc_state(struct bt_conn *base_conn, uint8_t state);
  289. uint8_t btsrv_rdm_get_switch_sbc_state(struct bt_conn *base_conn);
  290. void *btsrv_rdm_get_sniff_info(struct bt_conn *base_conn);
  291. int btsrv_rdm_get_active_dev_rssi(void);
  292. int btsrv_rdm_init(void);
  293. void btsrv_rdm_deinit(void);
  294. void btsrv_rdm_dump_info(void);
  295. struct thread_timer * btsrv_rdm_get_sco_disconnect_timer(struct bt_conn *base_conn);
  296. int btsrv_rdm_get_sco_creat_time(struct bt_conn *base_conn, uint32_t *creat_time);
  297. void btsrv_autoconn_info_update(void);
  298. int btsrv_connect_get_auto_reconnect_info(struct autoconn_info *info, uint8_t max_cnt);
  299. void btsrv_connect_set_auto_reconnect_info(struct autoconn_info *info, uint8_t max_cnt);
  300. void btsrv_connect_set_phone_controler_role(bd_address_t *bd, uint8_t role);
  301. int btsrv_connect_process(struct app_msg *msg);
  302. bool btsrv_autoconn_is_reconnecting(void);
  303. bool btsrv_autoconn_is_runing(void);
  304. void btsrv_connect_tws_role_confirm(void);
  305. int btsrv_connect_init(void);
  306. void btsrv_connect_deinit(void);
  307. void btsrv_connect_dump_info(void);
  308. void btsrv_scan_set_param(struct bt_scan_parameter *param, bool enhance_param);
  309. void btsrv_scan_set_user_discoverable(bool enable, bool immediate);
  310. void btsrv_scan_set_user_connectable(bool enable, bool immediate);
  311. void btsrv_inner_set_scan_enable(bool discoverable, bool connectable);
  312. void btsrv_scan_update_mode(bool immediate);
  313. uint8_t btsrv_scan_get_inquiry_mode(void);
  314. int btsrv_scan_init(void);
  315. void btsrv_scan_deinit(void);
  316. void btsrv_scan_dump_info(void);
  317. int btsrv_link_adjust_set_tws_state(uint8_t adjust_state, uint16_t buff_size, uint16_t source_cache, uint16_t cache_sink);
  318. int btsrv_link_adjust_tws_set_bt_play(bool bt_play);
  319. int btsrv_link_adjust_init(void);
  320. void btsrv_link_adjust_deinit(void);
  321. /* btsrv_sniff.c */
  322. void btsrv_sniff_update_idle_time(struct bt_conn *conn);
  323. void btsrv_sniff_mode_change(void *param);
  324. void btsrv_sniff_set_check_enable(bool enable);
  325. bool btsrv_sniff_in_sniff_mode(struct bt_conn *conn);
  326. void btsrv_sniff_init(void);
  327. void btsrv_sniff_deinit(void);
  328. /* btsrv_pnp.c */
  329. int btsrv_pnp_info_search(struct bt_conn *conn);
  330. int btsrv_pnp_info_process(struct app_msg *msg);
  331. bd_address_t *GET_CONN_BT_ADDR(struct bt_conn *conn);
  332. int btsrv_set_negative_prio(void);
  333. void btsrv_revert_prio(int prio);
  334. int btsrv_property_set(const char *key, char *value, int value_len);
  335. int btsrv_property_get(const char *key, char *value, int value_len);
  336. void ctrl_adjust_link_time(struct bt_conn *base_conn, int16_t adjust_val);
  337. #define BTSTAK_READY 0
  338. enum {
  339. MSG_BTSRV_BASE = MSG_APP_MESSAGE_START,
  340. MSG_BTSRV_CONNECT,
  341. MSG_BTSRV_A2DP,
  342. MSG_BTSRV_AVRCP,
  343. MSG_BTSRV_HFP,
  344. MSG_BTSRV_HFP_AG,
  345. MSG_BTSRV_SCO,
  346. MSG_BTSRV_SPP,
  347. MSG_BTSRV_PBAP,
  348. MSG_BTSRV_HID,
  349. MSG_BTSRV_TWS,
  350. MSG_BTSRV_MAP,
  351. MSG_BTSRV_PNP,
  352. MSG_BTSRV_MAX,
  353. };
  354. enum {
  355. MSG_BTSRV_SET_DEFAULT_SCAN_PARAM,
  356. MSG_BTSRV_SET_ENHANCE_SCAN_PARAM,
  357. MSG_BTSRV_SET_DISCOVERABLE,
  358. MSG_BTSRV_SET_CONNECTABLE,
  359. MSG_BTSRV_AUTO_RECONNECT,
  360. MSG_BTSRV_AUTO_RECONNECT_STOP,
  361. MSG_BTSRV_CONNECT_TO,
  362. MSG_BTSRV_DISCONNECT,
  363. MSG_BTSRV_READY,
  364. MSG_BTSRV_REQ_FLUSH_NVRAM,
  365. MSG_BTSRV_CONNECTED,
  366. MSG_BTSRV_CONNECTED_FAILED,
  367. MSG_BTSRV_SECURITY_CHANGED,
  368. MSG_BTSRV_ROLE_CHANGE,
  369. //MSG_BTSRV_MODE_CHANGE, /* Avoid build bt_trans lib, put in end */
  370. MSG_BTSRV_DISCONNECTED,
  371. MSG_BTSRV_DISCONNECTED_REASON,
  372. MSG_BTSRV_GET_NAME_FINISH,
  373. MSG_BTSRV_CLEAR_LIST_CMD,
  374. MGS_BTSRV_CLEAR_AUTO_INFO,
  375. MSG_BTSRV_DISCONNECT_DEVICE,
  376. MSG_BTSRV_ALLOW_SCO_CONNECT, /* Not used, but can't remove, avoid build bt_trans lib */
  377. MSG_BTSRV_A2DP_START,
  378. MSG_BTSRV_A2DP_STOP,
  379. MSG_BTSRV_A2DP_CHECK_STATE,
  380. MSG_BTSRV_A2DP_CONNECT_TO,
  381. MSG_BTSRV_A2DP_DISCONNECT,
  382. MSG_BTSRV_A2DP_CONNECTED,
  383. MSG_BTSRV_A2DP_DISCONNECTED,
  384. //MSG_BTSRV_A2DP_MEDIA_STATE_CB, /* Avoid build bt_trans lib, put in end */
  385. //MSG_BTSRV_A2DP_SET_CODEC_CB, /* Avoid build bt_trans lib, put in end */
  386. MSG_BTSRV_A2DP_MEDIA_STATE_OPEN,
  387. MSG_BTSRV_A2DP_MEDIA_STATE_START,
  388. MSG_BTSRV_A2DP_MEDIA_STATE_CLOSE,
  389. MSG_BTSRV_A2DP_MEDIA_STATE_SUSPEND,
  390. MSG_BTSRV_A2DP_ACTIVED_DEV_CHANGED,
  391. MSG_BTSRV_A2DP_SEND_DELAY_REPORT,
  392. MSG_BTSRV_A2DP_CHECK_SWITCH_SBC,
  393. MSG_BTSRV_AVRCP_START,
  394. MSG_BTSRV_AVRCP_STOP,
  395. MSG_BTSRV_AVRCP_CONNECT_TO,
  396. MSG_BTSRV_AVRCP_DISCONNECT,
  397. MSG_BTSRV_AVRCP_CONNECTED,
  398. MSG_BTSRV_AVRCP_DISCONNECTED,
  399. MSG_BTSRV_AVRCP_NOTIFY_CB,
  400. MSG_BTSRV_AVRCP_PASS_CTRL_CB,
  401. MSG_BTSRV_AVRCP_PLAYBACK_POS_CB,
  402. MSG_BTSRV_AVRCP_SEND_CMD,
  403. MSG_BTSRV_AVRCP_SYNC_VOLUME,
  404. MSG_BTSRV_AVRCP_GET_ID3_INFO,
  405. MSG_BTSRV_AVRCP_GET_PLAYBACK_POS,
  406. MSG_BTSRV_AVRCP_SET_ABSOLUTE_VOLUME,
  407. MSG_BTSRV_HFP_START,
  408. MSG_BTSRV_HFP_STOP,
  409. MSG_BTSRV_HFP_CONNECTED,
  410. MSG_BTSRV_HFP_DISCONNECTED,
  411. MSG_BTSRV_HFP_SET_STATE,
  412. MSG_BTSRV_HFP_VOLUME_CHANGE,
  413. MSG_BTSRV_HFP_PHONE_NUM,
  414. MSG_BTSRV_HFP_CODEC_INFO,
  415. MSG_BTSRV_HFP_SIRI_STATE,
  416. MSG_BTSRV_SCO_START,
  417. MSG_BTSRV_SCO_STOP,
  418. MSG_BTSRV_SCO_CONNECTED,
  419. MSG_BTSRV_SCO_DISCONNECTED,
  420. MSG_BTSRV_HFP_SWITCH_SOUND_SOURCE,
  421. MSG_BTSRV_HFP_HF_DIAL_NUM,
  422. MSG_BTSRV_HFP_HF_DIAL_LAST_NUM,
  423. MSG_BTSRV_HFP_HF_DIAL_MEMORY,
  424. MSG_BTSRV_HFP_HF_VOLUME_CONTROL,
  425. MSG_BTSRV_HFP_HF_ACCEPT_CALL,
  426. MSG_BTSRV_HFP_HF_BATTERY_REPORT,
  427. MSG_BTSRV_HFP_HF_REJECT_CALL,
  428. MSG_BTSRV_HFP_HF_HANGUP_CALL,
  429. MSG_BTSRV_HFP_HF_HANGUP_ANOTHER_CALL,
  430. MSG_BTSRV_HFP_HF_HOLDCUR_ANSWER_CALL,
  431. MSG_BTSRV_HFP_HF_HANGUPCUR_ANSWER_CALL,
  432. MSG_BTSRV_HFP_HF_VOICE_RECOGNITION_START,
  433. MSG_BTSRV_HFP_HF_VOICE_RECOGNITION_STOP,
  434. MSG_BTSRV_HFP_HF_VOICE_SEND_AT_COMMAND,
  435. MSG_BTSRV_HFP_HF_CCWA_PHONE_NUM,
  436. MSG_BTSRV_HFP_ACTIVED_DEV_CHANGED,
  437. MSG_BTSRV_HFP_GET_TIME,
  438. MSG_BTSRV_HFP_TIME_UPDATE,
  439. MSG_BTSRV_HFP_CLCC_INFO,
  440. MSG_BTSRV_HFP_AG_START,
  441. MSG_BTSRV_HFP_AG_STOP,
  442. MSG_BTSRV_HFP_AG_CONNECTED,
  443. MSG_BTSRV_HFP_AG_DISCONNECTED,
  444. MSG_BTSRV_HFP_AG_UPDATE_INDICATOR,
  445. MSG_BTSRV_HFP_AG_SEND_EVENT,
  446. MSG_BTSRV_SPP_START,
  447. MSG_BTSRV_SPP_STOP,
  448. MSG_BTSRV_SPP_REGISTER,
  449. MSG_BTSRV_SPP_CONNECT,
  450. MSG_BTSRV_SPP_DISCONNECT,
  451. MSG_BTSRV_SPP_CONNECT_FAILED,
  452. MSG_BTSRV_SPP_CONNECTED,
  453. MSG_BTSRV_SPP_DISCONNECTED,
  454. MSG_BTSRV_PBAP_CONNECT_FAILED,
  455. MSG_BTSRV_PBAP_CONNECTED,
  456. MSG_BTSRV_PBAP_DISCONNECTED,
  457. MSG_BTSRV_PBAP_CMD_OP,
  458. MSG_BTSRV_HID_START,
  459. MSG_BTSRV_HID_STOP,
  460. MSG_BTSRV_HID_CONNECTED,
  461. MSG_BTSRV_HID_DISCONNECTED,
  462. MSG_BTSRV_HID_REGISTER,
  463. MSG_BTSRV_HID_CONNECT,
  464. MSG_BTSRV_HID_DISCONNECT,
  465. MSG_BTSRV_HID_SEND_CTRL_DATA,
  466. MSG_BTSRV_HID_SEND_INTR_DATA,
  467. MSG_BTSRV_HID_SEND_RSP,
  468. MSG_BTSRV_HID_UNPLUG,
  469. MSG_BTSRV_HID_EVENT_CB,
  470. MSG_BTSRV_DID_REGISTER,
  471. MSG_BTSRV_TWS_INIT,
  472. MSG_BTSRV_TWS_DEINIT,
  473. MSG_BTSRV_TWS_VERSION_NEGOTIATE,
  474. MSG_BTSRV_TWS_ROLE_NEGOTIATE,
  475. MSG_BTSRV_TWS_NEGOTIATE_SET_ROLE,
  476. MSG_BTSRV_TWS_CONNECTED,
  477. MSG_BTSRV_TWS_DISCONNECTED,
  478. MSG_BTSRV_TWS_DISCONNECTED_ADDR,
  479. MSG_BTSRV_TWS_WAIT_PAIR,
  480. MSG_BTSRV_TWS_CANCEL_WAIT_PAIR,
  481. MSG_BTSRV_TWS_DISCOVERY_RESULT,
  482. MSG_BTSRV_TWS_DISCONNECT,
  483. MSG_BTSRV_TWS_RESTART,
  484. MSG_BTSRV_TWS_PROTOCOL_DATA,
  485. MSG_BTSRV_TWS_EVENT_SYNC,
  486. MSG_BTSRV_TWS_SCO_DATA,
  487. MSG_BTSRV_MAP_CONNECT,
  488. MSG_BTSRV_MAP_DISCONNECT,
  489. MSG_BTSRV_MAP_SET_FOLDER,
  490. MSG_BTSRV_MAP_GET_FOLDERLISTING,
  491. MSG_BTSRV_MAP_GET_MESSAGESLISTING,
  492. MSG_BTSRV_MAP_GET_MESSAGE,
  493. MSG_BTSRV_MAP_ABORT_GET,
  494. MSG_BTSRV_MAP_CONNECT_FAILED,
  495. MSG_BTSRV_MAP_CONNECTED,
  496. MSG_BTSRV_MAP_DISCONNECTED,
  497. MSG_BTSRV_MODE_CHANGE, /* Avoid build bt_trans lib, put in end */
  498. MSG_BTSRV_A2DP_MEDIA_STATE_CB, /* Avoid build bt_trans lib, put in end */
  499. MSG_BTSRV_A2DP_SET_CODEC_CB, /* Avoid build bt_trans lib, put in end */
  500. MSG_BTSRV_AVRCP_GET_PLAY_STATE,
  501. MSG_BTSRV_AVRCP_PLAY_STATE_CB,
  502. MSG_BTSRV_CLEAR_PAIRED_INFO,
  503. MSG_BTSRV_GET_CONNECTED_DEV_RSSI,/* Avoid build bt_trans lib, put in end */
  504. MSG_BTSRV_GET_ACTIVED_DEV_RSSI, /* Avoid build bt_trans lib, put in end */
  505. MSG_BTSRV_PAIR_PASSKEY_DISPLAY,
  506. MSG_BTSRV_PAIRING_COMPLETE,
  507. MSG_BTSRV_PAIRING_FAIL,
  508. MSG_BTSRV_GET_WAKE_LOCK, /* Just for get wake lock */
  509. MSG_BTSRV_HFP_MANUFACTURE_INFO,
  510. MSG_BTSRV_HFP_PHONE_NAME,
  511. MSG_BTSRV_HFP_SERVICE,
  512. MSG_BTSRV_BR_RESOLVE_ADDR,
  513. MSG_BTSRV_PNP_INFO_START,
  514. MSG_BTSRV_PNP_INFO_STOP,
  515. MSG_BTSRV_HFP_HPREC_BATTERY,
  516. MSG_BTSRV_HFP_HF_BATTERY_HPREC_REPORT,
  517. MSG_BTSRV_A2DP_DISABLE,
  518. MSG_BTSRV_A2DP_ENABLE,
  519. /** restore spp sdp service, only use to btreset */
  520. MSG_BTSRV_SPP_SDP_SERVICE_RESTORE,
  521. };
  522. static inline btsrv_callback _btsrv_get_msg_param_callback(struct app_msg *msg)
  523. {
  524. return (btsrv_callback)msg->ptr;
  525. }
  526. static inline int _btsrv_get_msg_param_type(struct app_msg *msg)
  527. {
  528. return msg->type;
  529. }
  530. static inline int _btsrv_get_msg_param_cmd(struct app_msg *msg)
  531. {
  532. return msg->cmd;
  533. }
  534. static inline int _btsrv_get_msg_param_reserve(struct app_msg *msg)
  535. {
  536. return msg->reserve;
  537. }
  538. static inline void *_btsrv_get_msg_param_ptr(struct app_msg *msg)
  539. {
  540. return msg->ptr;
  541. }
  542. static inline int _btsrv_get_msg_param_value(struct app_msg *msg)
  543. {
  544. return msg->value;
  545. }
  546. int btsrv_event_notify(int event_type, int cmd, void *param);
  547. int btsrv_event_notify_value(int event_type, int cmd, int value);
  548. int btsrv_event_notify_ext(int event_type, int cmd, void *param, uint8_t code);
  549. int btsrv_event_notify_malloc(int event_type, int cmd, uint8_t *data, uint16_t len, uint8_t code);
  550. #define btsrv_function_call btsrv_event_notify
  551. #define btsrv_function_call_ext btsrv_event_notify_ext
  552. #define btsrv_function_call_value btsrv_event_notify_value
  553. #define btsrv_function_call_malloc btsrv_event_notify_malloc
  554. typedef int (*btsrv_msg_process)(struct app_msg *msg);
  555. void bt_service_set_bt_ready(void);
  556. uint8_t bt_service_ready_status(void);
  557. int btsrv_register_msg_processer(uint8_t msg_type, btsrv_msg_process processer);
  558. int btsrv_storage_init(void);
  559. int btsrv_storage_get_addr_linkkey(bd_address_t *addr, uint8_t *linkkey);
  560. int btsrv_storage_get_linkkey(struct bt_linkkey_info *info, uint8_t cnt);
  561. int btsrv_storage_update_linkkey(struct bt_linkkey_info *info, uint8_t cnt);
  562. int btsrv_storage_write_ori_linkkey(bd_address_t *addr, uint8_t *link_key);
  563. void btsrv_storage_clean_linkkey(bd_address_t *addr);
  564. int btsrv_pts_send_hfp_cmd(char *cmd);
  565. int btsrv_pts_hfp_active_connect_sco(void);
  566. int btsrv_pts_avrcp_pass_through_cmd(uint8_t opid);
  567. int btsrv_pts_avrcp_notify_volume_change(uint8_t volume);
  568. int btsrv_pts_avrcp_reg_notify_volume_change(void);
  569. int btsrv_pts_register_auth_cb(bool reg_auth);
  570. #ifdef CONFIG_BT_A2DP_TRS
  571. struct bt_conn *btsrv_rdm_trs_avrcp_get_actived(void);
  572. struct bt_conn *btsrv_rdm_trs_a2dp_get_actived(void);
  573. int btsrv_rdm_get_dev_trs_mode(void);
  574. int btsrv_rdm_set_trs_mode(bd_address_t *addr, uint8_t trs_mode);
  575. int btsrv_rdm_get_trs_mode(struct bt_conn *base_conn);
  576. int btsrv_rdm_get_direction(bd_address_t *addr);
  577. int btsrv_rdm_trs_a2dp_set_codec_info(struct bt_conn *base_conn, struct bt_a2dp_media_codec *codec);
  578. int btsrv_rdm_trs_a2dp_set_mtu(struct bt_conn *base_conn, uint16_t mtu);
  579. int btsrv_rdm_trs_a2dp_get_codec_info(struct bt_conn *base_conn, struct bt_a2dp_media_codec *codec, uint16_t *media_mtu);
  580. int btsrv_rdm_trs_a2dp_stream_open(struct bt_conn *base_conn, bool open);
  581. struct bt_conn *btsrv_rdm_trs_get_conn(void);
  582. struct thread_timer * btsrv_rdm_get_trs_discover_timer(struct bt_conn *base_conn);
  583. void btsrv_trs_a2dp_ready(struct bt_conn *conn);
  584. void btsrv_trs_a2dp_close(struct bt_conn *conn);
  585. void btsrv_trs_a2dp_start(struct bt_conn *conn);
  586. void btsrv_trs_a2dp_suspend(struct bt_conn *conn);
  587. bool btsrv_trs_a2dp_media_state_req_cb(struct bt_conn *conn, uint8_t state);
  588. bool btsrv_trs_a2dp_seted_codec_cb(struct bt_conn *conn, struct bt_a2dp_media_codec *codec);
  589. int btsrv_trs_a2dp_init(struct btsrv_a2dp_start_param *param);
  590. int btsrv_trs_a2dp_deinit(void);
  591. bool btsrv_trs_a2dp_process(struct app_msg *msg);
  592. bool btsrv_trs_avrcp_ctrl_pass_ctrl_cb(struct bt_conn *conn, uint8_t op_id, uint8_t state);
  593. int btsrv_trs_avrcp_init(btsrv_avrcp_callback_t *cb);
  594. int btsrv_trs_avrcp_deinit(void);
  595. uint8_t btsrv_get_trs_dev_record(struct bt_paired_list_dev_t *record, uint8_t max);
  596. #endif
  597. #endif