btif_base.c 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396
  1. /*
  2. * Copyright (c) 2016 Actions Semi Co., Inc.
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. /**
  7. * @file
  8. * @brief bt srv api interface
  9. */
  10. #define SYS_LOG_DOMAIN "btif_base"
  11. #include "btsrv_os_common.h"
  12. #include "btsrv_inner.h"
  13. int btif_base_register_processer(void)
  14. {
  15. int ret = 0;
  16. ret |= btsrv_register_msg_processer(MSG_BTSRV_BASE, &btsrv_adapter_process);
  17. #if CONFIG_BT_BR_ACTS
  18. ret |= btsrv_register_msg_processer(MSG_BTSRV_CONNECT, &btsrv_connect_process);
  19. #endif
  20. return ret;
  21. }
  22. int btif_start(btsrv_callback cb, uint32_t classOfDevice, uint16_t *did)
  23. {
  24. struct app_msg msg = {0};
  25. if (!srv_manager_check_service_is_actived(BLUETOOTH_SERVICE_NAME)) {
  26. if (srv_manager_active_service(BLUETOOTH_SERVICE_NAME)) {
  27. SYS_LOG_DBG("btif_start ok\n");
  28. } else {
  29. SYS_LOG_ERR("btif_start failed\n");
  30. return -ESRCH;
  31. }
  32. }
  33. msg.type = MSG_INIT_APP;
  34. msg.ptr = cb;
  35. if (classOfDevice) {
  36. hostif_bt_init_class(classOfDevice);
  37. }
  38. if (did) {
  39. hostif_bt_init_device_id(did);
  40. }
  41. return !send_async_msg(BLUETOOTH_SERVICE_NAME, &msg);
  42. }
  43. int btif_stop(void)
  44. {
  45. int ret = 0;
  46. if (!srv_manager_check_service_is_actived(BLUETOOTH_SERVICE_NAME)) {
  47. SYS_LOG_ERR("btif_stop failed\n");
  48. ret = -ESRCH;
  49. goto exit;
  50. }
  51. if (!srv_manager_exit_service(BLUETOOTH_SERVICE_NAME)) {
  52. ret = -ETIMEDOUT;
  53. goto exit;
  54. }
  55. SYS_LOG_DBG("btif_stop success!\n");
  56. exit:
  57. return ret;
  58. }
  59. int btif_base_set_config_info(void *param)
  60. {
  61. int ret, flags;
  62. flags = btsrv_set_negative_prio();
  63. ret = btsrv_adapter_set_config_info(param);
  64. btsrv_revert_prio(flags);
  65. return ret;
  66. }
  67. int btif_base_get_wake_lock(void)
  68. {
  69. int ret, flags;
  70. flags = btsrv_set_negative_prio();
  71. ret = btsrv_adapter_get_wake_lock();
  72. btsrv_revert_prio(flags);
  73. return ret;
  74. }
  75. int btif_br_start_discover(struct btsrv_discover_param *param)
  76. {
  77. int ret, flags;
  78. flags = btsrv_set_negative_prio();
  79. ret = btsrv_adapter_start_discover(param);
  80. btsrv_revert_prio(flags);
  81. return ret;
  82. }
  83. int btif_br_stop_discover(void)
  84. {
  85. int ret, flags;
  86. flags = btsrv_set_negative_prio();
  87. ret = btsrv_adapter_stop_discover();
  88. btsrv_revert_prio(flags);
  89. return ret;
  90. }
  91. int btif_br_remote_name_req(bd_address_t *addr, bt_br_remote_name_cb_t cb)
  92. {
  93. int ret, flags;
  94. flags = btsrv_set_negative_prio();
  95. ret = btsrv_adapter_remote_name_request(addr, cb);
  96. btsrv_revert_prio(flags);
  97. return ret;
  98. }
  99. /* Mac low address store in low memory address */
  100. int btif_br_connect(bd_address_t *bd)
  101. {
  102. return btsrv_function_call_malloc(MSG_BTSRV_BASE, MSG_BTSRV_CONNECT_TO, (void *)bd, sizeof(bd_address_t), 0);
  103. }
  104. int btif_br_disconnect(bd_address_t *bd)
  105. {
  106. return btsrv_function_call_malloc(MSG_BTSRV_BASE, MSG_BTSRV_DISCONNECT, (void *)bd, sizeof(bd_address_t), 0);
  107. }
  108. int btif_br_set_scan_param(const struct bt_scan_parameter *param, bool enhance_param)
  109. {
  110. int cmd;
  111. cmd = enhance_param ? MSG_BTSRV_SET_ENHANCE_SCAN_PARAM : MSG_BTSRV_SET_DEFAULT_SCAN_PARAM;
  112. return btsrv_function_call_malloc(MSG_BTSRV_BASE, cmd, (void *)param, sizeof(struct bt_scan_parameter), 0);
  113. }
  114. int btif_br_set_discoverable(bool enable)
  115. {
  116. return btsrv_function_call(MSG_BTSRV_BASE, MSG_BTSRV_SET_DISCOVERABLE, (void *)enable);
  117. }
  118. int btif_br_set_connnectable(bool enable)
  119. {
  120. return btsrv_function_call(MSG_BTSRV_BASE, MSG_BTSRV_SET_CONNECTABLE, (void *)enable);
  121. }
  122. int btif_br_get_auto_reconnect_info(struct autoconn_info *info, uint8_t max_cnt)
  123. {
  124. int ret, flags;
  125. flags = btsrv_set_negative_prio();
  126. ret = btsrv_connect_get_auto_reconnect_info(info, max_cnt);
  127. btsrv_revert_prio(flags);
  128. return ret;
  129. }
  130. void btif_br_set_auto_reconnect_info(struct autoconn_info *info, uint8_t max_cnt)
  131. {
  132. int flags;
  133. flags = btsrv_set_negative_prio();
  134. btsrv_connect_set_auto_reconnect_info(info, max_cnt);
  135. btsrv_revert_prio(flags);
  136. }
  137. int btif_br_auto_reconnect(struct bt_set_autoconn *param)
  138. {
  139. return btsrv_function_call_malloc(MSG_BTSRV_CONNECT, MSG_BTSRV_AUTO_RECONNECT, (void *)param, sizeof(struct bt_set_autoconn), 0);
  140. }
  141. int btif_br_auto_reconnect_stop(void)
  142. {
  143. return btsrv_function_call(MSG_BTSRV_CONNECT, MSG_BTSRV_AUTO_RECONNECT_STOP, NULL);
  144. }
  145. bool btif_br_is_auto_reconnect_runing(void)
  146. {
  147. return btsrv_autoconn_is_runing();
  148. }
  149. int btif_br_clear_list(int mode)
  150. {
  151. return btsrv_function_call(MSG_BTSRV_CONNECT, MSG_BTSRV_CLEAR_LIST_CMD, (void *)mode);
  152. }
  153. int btif_br_disconnect_device(int disconnect_mode)
  154. {
  155. return btsrv_function_call(MSG_BTSRV_CONNECT, MSG_BTSRV_DISCONNECT_DEVICE, (void *)disconnect_mode);
  156. }
  157. int btif_br_allow_sco_connect(bool allowed)
  158. {
  159. /* Most call in btsrv hfp callback,
  160. * send message process may after sco connected process,
  161. * mistake rejuect sco connected.
  162. */
  163. btsrv_adapter_allow_sco_connect(allowed);
  164. return 0;
  165. }
  166. /* Device include phone and tws device */
  167. int btif_br_get_connected_device_num(void)
  168. {
  169. int ret, flags;
  170. if (!bt_service_ready_status()) {
  171. SYS_LOG_ERR("bt service not ready!\n");
  172. return 0;
  173. }
  174. flags = btsrv_set_negative_prio();
  175. ret = btsrv_rdm_get_connected_dev(NULL, NULL);
  176. btsrv_revert_prio(flags);
  177. return ret;
  178. }
  179. int btif_br_get_dev_rdm_state(struct bt_dev_rdm_state *state)
  180. {
  181. int ret, flags;
  182. if (!bt_service_ready_status()) {
  183. SYS_LOG_ERR("bt service not ready!\n");
  184. return 0;
  185. }
  186. flags = btsrv_set_negative_prio();
  187. ret = btsrv_rdm_get_dev_state(state);
  188. btsrv_revert_prio(flags);
  189. return ret;
  190. }
  191. void btif_br_set_phone_controler_role(bd_address_t *bd, uint8_t role)
  192. {
  193. if (role != CONTROLER_ROLE_MASTER && role != CONTROLER_ROLE_SLAVE) {
  194. return;
  195. }
  196. btsrv_connect_set_phone_controler_role(bd, role);
  197. }
  198. int btif_br_get_addr_linkkey(bd_address_t *addr, uint8_t *linkkey)
  199. {
  200. int ret, flags;
  201. flags = btsrv_set_negative_prio();
  202. ret = btsrv_storage_get_addr_linkkey(addr, linkkey);
  203. btsrv_revert_prio(flags);
  204. return ret;
  205. }
  206. int btif_br_get_linkkey(struct bt_linkkey_info *info, uint8_t cnt)
  207. {
  208. int ret, flags;
  209. flags = btsrv_set_negative_prio();
  210. ret = btsrv_storage_get_linkkey(info, cnt);
  211. btsrv_revert_prio(flags);
  212. return ret;
  213. }
  214. int btif_br_update_linkkey(struct bt_linkkey_info *info, uint8_t cnt)
  215. {
  216. int ret, flags;
  217. flags = btsrv_set_negative_prio();
  218. ret = btsrv_storage_update_linkkey(info, cnt);
  219. btsrv_revert_prio(flags);
  220. return ret;
  221. }
  222. int btif_br_write_ori_linkkey(bd_address_t *addr, uint8_t *link_key)
  223. {
  224. int ret, flags;
  225. flags = btsrv_set_negative_prio();
  226. ret = btsrv_storage_write_ori_linkkey(addr, link_key);
  227. btsrv_revert_prio(flags);
  228. return ret;
  229. }
  230. void btif_br_clean_linkkey(bd_address_t *addr)
  231. {
  232. int flags;
  233. flags = btsrv_set_negative_prio();
  234. btsrv_storage_clean_linkkey(addr);
  235. btsrv_revert_prio(flags);
  236. }
  237. int btif_dump_brsrv_info(void)
  238. {
  239. int flags;
  240. flags = btsrv_set_negative_prio();
  241. btsrv_dump_info_proc();
  242. btsrv_revert_prio(flags);
  243. return 0;
  244. }
  245. int btif_br_get_connected_device_rssi(struct bt_get_rssi_param *param)
  246. {
  247. return btsrv_function_call_malloc(MSG_BTSRV_BASE, MSG_BTSRV_GET_CONNECTED_DEV_RSSI, (void *)param, sizeof(struct bt_get_rssi_param), 0);
  248. }
  249. int btif_br_get_actived_device_rssi(int8_t *rssi)
  250. {
  251. int flags,ret;
  252. flags = btsrv_set_negative_prio();
  253. *rssi = btsrv_rdm_get_active_dev_rssi();
  254. if(*rssi == 0x7F){
  255. ret = -1;
  256. }
  257. else{
  258. ret = 0;
  259. }
  260. btsrv_revert_prio(flags);
  261. return ret;
  262. }
  263. uint16_t btif_br_get_active_phone_hdl(void)
  264. {
  265. int flags;
  266. uint16_t hdl;
  267. flags = btsrv_set_negative_prio();
  268. hdl = btsrv_rdm_get_actived_phone_hdl();
  269. btsrv_revert_prio(flags);
  270. return hdl;
  271. }
  272. int btif_bt_set_apll_temp_comp(uint8_t enable)
  273. {
  274. int flags, ret;
  275. flags = btsrv_set_negative_prio();
  276. ret = hostif_bt_vs_set_apll_temp_comp(enable);
  277. btsrv_revert_prio(flags);
  278. return ret;
  279. }
  280. int btif_bt_do_apll_temp_comp(void)
  281. {
  282. int flags, ret;
  283. flags = btsrv_set_negative_prio();
  284. ret = hostif_bt_vs_do_apll_temp_comp();
  285. btsrv_revert_prio(flags);
  286. return ret;
  287. }
  288. #ifdef CONFIG_BT_A2DP_TRS
  289. int btif_br_get_trs_list_info(struct bt_trs_list_dev_t *info, uint8_t max_cnt)
  290. {
  291. int ret, flags;
  292. flags = btsrv_set_negative_prio();
  293. ret = btsrv_get_trs_dev_record((struct bt_paired_list_dev_t *)info, max_cnt);
  294. btsrv_revert_prio(flags);
  295. return ret;
  296. }
  297. int btif_br_clean_trs_dev_info(bd_address_t *bd)
  298. {
  299. int ret, flags;
  300. flags = btsrv_set_negative_prio();
  301. ret = btsrv_function_call_malloc(MSG_BTSRV_CONNECT, MSG_BTSRV_CLEAR_PAIRED_INFO, (void *)bd, sizeof(bd_address_t), 0);
  302. btsrv_revert_prio(flags);
  303. return ret;
  304. }
  305. #endif