123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396 |
- /*
- * Copyright (c) 2016 Actions Semi Co., Inc.
- *
- * SPDX-License-Identifier: Apache-2.0
- */
- /**
- * @file
- * @brief bt srv api interface
- */
- #define SYS_LOG_DOMAIN "btif_base"
- #include "btsrv_os_common.h"
- #include "btsrv_inner.h"
- int btif_base_register_processer(void)
- {
- int ret = 0;
- ret |= btsrv_register_msg_processer(MSG_BTSRV_BASE, &btsrv_adapter_process);
- #if CONFIG_BT_BR_ACTS
- ret |= btsrv_register_msg_processer(MSG_BTSRV_CONNECT, &btsrv_connect_process);
- #endif
- return ret;
- }
- int btif_start(btsrv_callback cb, uint32_t classOfDevice, uint16_t *did)
- {
- struct app_msg msg = {0};
- if (!srv_manager_check_service_is_actived(BLUETOOTH_SERVICE_NAME)) {
- if (srv_manager_active_service(BLUETOOTH_SERVICE_NAME)) {
- SYS_LOG_DBG("btif_start ok\n");
- } else {
- SYS_LOG_ERR("btif_start failed\n");
- return -ESRCH;
- }
- }
- msg.type = MSG_INIT_APP;
- msg.ptr = cb;
- if (classOfDevice) {
- hostif_bt_init_class(classOfDevice);
- }
- if (did) {
- hostif_bt_init_device_id(did);
- }
- return !send_async_msg(BLUETOOTH_SERVICE_NAME, &msg);
- }
- int btif_stop(void)
- {
- int ret = 0;
- if (!srv_manager_check_service_is_actived(BLUETOOTH_SERVICE_NAME)) {
- SYS_LOG_ERR("btif_stop failed\n");
- ret = -ESRCH;
- goto exit;
- }
- if (!srv_manager_exit_service(BLUETOOTH_SERVICE_NAME)) {
- ret = -ETIMEDOUT;
- goto exit;
- }
- SYS_LOG_DBG("btif_stop success!\n");
- exit:
- return ret;
- }
- int btif_base_set_config_info(void *param)
- {
- int ret, flags;
- flags = btsrv_set_negative_prio();
- ret = btsrv_adapter_set_config_info(param);
- btsrv_revert_prio(flags);
- return ret;
- }
- int btif_base_get_wake_lock(void)
- {
- int ret, flags;
- flags = btsrv_set_negative_prio();
- ret = btsrv_adapter_get_wake_lock();
- btsrv_revert_prio(flags);
- return ret;
- }
- int btif_br_start_discover(struct btsrv_discover_param *param)
- {
- int ret, flags;
- flags = btsrv_set_negative_prio();
- ret = btsrv_adapter_start_discover(param);
- btsrv_revert_prio(flags);
- return ret;
- }
- int btif_br_stop_discover(void)
- {
- int ret, flags;
- flags = btsrv_set_negative_prio();
- ret = btsrv_adapter_stop_discover();
- btsrv_revert_prio(flags);
- return ret;
- }
- int btif_br_remote_name_req(bd_address_t *addr, bt_br_remote_name_cb_t cb)
- {
- int ret, flags;
- flags = btsrv_set_negative_prio();
- ret = btsrv_adapter_remote_name_request(addr, cb);
- btsrv_revert_prio(flags);
- return ret;
- }
- /* Mac low address store in low memory address */
- int btif_br_connect(bd_address_t *bd)
- {
- return btsrv_function_call_malloc(MSG_BTSRV_BASE, MSG_BTSRV_CONNECT_TO, (void *)bd, sizeof(bd_address_t), 0);
- }
- int btif_br_disconnect(bd_address_t *bd)
- {
- return btsrv_function_call_malloc(MSG_BTSRV_BASE, MSG_BTSRV_DISCONNECT, (void *)bd, sizeof(bd_address_t), 0);
- }
- int btif_br_set_scan_param(const struct bt_scan_parameter *param, bool enhance_param)
- {
- int cmd;
- cmd = enhance_param ? MSG_BTSRV_SET_ENHANCE_SCAN_PARAM : MSG_BTSRV_SET_DEFAULT_SCAN_PARAM;
- return btsrv_function_call_malloc(MSG_BTSRV_BASE, cmd, (void *)param, sizeof(struct bt_scan_parameter), 0);
- }
- int btif_br_set_discoverable(bool enable)
- {
- return btsrv_function_call(MSG_BTSRV_BASE, MSG_BTSRV_SET_DISCOVERABLE, (void *)enable);
- }
- int btif_br_set_connnectable(bool enable)
- {
- return btsrv_function_call(MSG_BTSRV_BASE, MSG_BTSRV_SET_CONNECTABLE, (void *)enable);
- }
- int btif_br_get_auto_reconnect_info(struct autoconn_info *info, uint8_t max_cnt)
- {
- int ret, flags;
- flags = btsrv_set_negative_prio();
- ret = btsrv_connect_get_auto_reconnect_info(info, max_cnt);
- btsrv_revert_prio(flags);
- return ret;
- }
- void btif_br_set_auto_reconnect_info(struct autoconn_info *info, uint8_t max_cnt)
- {
- int flags;
- flags = btsrv_set_negative_prio();
- btsrv_connect_set_auto_reconnect_info(info, max_cnt);
- btsrv_revert_prio(flags);
- }
- int btif_br_auto_reconnect(struct bt_set_autoconn *param)
- {
- return btsrv_function_call_malloc(MSG_BTSRV_CONNECT, MSG_BTSRV_AUTO_RECONNECT, (void *)param, sizeof(struct bt_set_autoconn), 0);
- }
- int btif_br_auto_reconnect_stop(void)
- {
- return btsrv_function_call(MSG_BTSRV_CONNECT, MSG_BTSRV_AUTO_RECONNECT_STOP, NULL);
- }
- bool btif_br_is_auto_reconnect_runing(void)
- {
- return btsrv_autoconn_is_runing();
- }
- int btif_br_clear_list(int mode)
- {
- return btsrv_function_call(MSG_BTSRV_CONNECT, MSG_BTSRV_CLEAR_LIST_CMD, (void *)mode);
- }
- int btif_br_disconnect_device(int disconnect_mode)
- {
- return btsrv_function_call(MSG_BTSRV_CONNECT, MSG_BTSRV_DISCONNECT_DEVICE, (void *)disconnect_mode);
- }
- int btif_br_allow_sco_connect(bool allowed)
- {
- /* Most call in btsrv hfp callback,
- * send message process may after sco connected process,
- * mistake rejuect sco connected.
- */
- btsrv_adapter_allow_sco_connect(allowed);
- return 0;
- }
- /* Device include phone and tws device */
- int btif_br_get_connected_device_num(void)
- {
- int ret, flags;
- if (!bt_service_ready_status()) {
- SYS_LOG_ERR("bt service not ready!\n");
- return 0;
- }
- flags = btsrv_set_negative_prio();
- ret = btsrv_rdm_get_connected_dev(NULL, NULL);
- btsrv_revert_prio(flags);
- return ret;
- }
- int btif_br_get_dev_rdm_state(struct bt_dev_rdm_state *state)
- {
- int ret, flags;
- if (!bt_service_ready_status()) {
- SYS_LOG_ERR("bt service not ready!\n");
- return 0;
- }
- flags = btsrv_set_negative_prio();
- ret = btsrv_rdm_get_dev_state(state);
- btsrv_revert_prio(flags);
- return ret;
- }
- void btif_br_set_phone_controler_role(bd_address_t *bd, uint8_t role)
- {
- if (role != CONTROLER_ROLE_MASTER && role != CONTROLER_ROLE_SLAVE) {
- return;
- }
- btsrv_connect_set_phone_controler_role(bd, role);
- }
- int btif_br_get_addr_linkkey(bd_address_t *addr, uint8_t *linkkey)
- {
- int ret, flags;
- flags = btsrv_set_negative_prio();
- ret = btsrv_storage_get_addr_linkkey(addr, linkkey);
- btsrv_revert_prio(flags);
- return ret;
- }
- int btif_br_get_linkkey(struct bt_linkkey_info *info, uint8_t cnt)
- {
- int ret, flags;
- flags = btsrv_set_negative_prio();
- ret = btsrv_storage_get_linkkey(info, cnt);
- btsrv_revert_prio(flags);
- return ret;
- }
- int btif_br_update_linkkey(struct bt_linkkey_info *info, uint8_t cnt)
- {
- int ret, flags;
- flags = btsrv_set_negative_prio();
- ret = btsrv_storage_update_linkkey(info, cnt);
- btsrv_revert_prio(flags);
- return ret;
- }
- int btif_br_write_ori_linkkey(bd_address_t *addr, uint8_t *link_key)
- {
- int ret, flags;
- flags = btsrv_set_negative_prio();
- ret = btsrv_storage_write_ori_linkkey(addr, link_key);
- btsrv_revert_prio(flags);
- return ret;
- }
- void btif_br_clean_linkkey(bd_address_t *addr)
- {
- int flags;
- flags = btsrv_set_negative_prio();
- btsrv_storage_clean_linkkey(addr);
- btsrv_revert_prio(flags);
- }
- int btif_dump_brsrv_info(void)
- {
- int flags;
- flags = btsrv_set_negative_prio();
- btsrv_dump_info_proc();
- btsrv_revert_prio(flags);
- return 0;
- }
- int btif_br_get_connected_device_rssi(struct bt_get_rssi_param *param)
- {
- return btsrv_function_call_malloc(MSG_BTSRV_BASE, MSG_BTSRV_GET_CONNECTED_DEV_RSSI, (void *)param, sizeof(struct bt_get_rssi_param), 0);
- }
- int btif_br_get_actived_device_rssi(int8_t *rssi)
- {
- int flags,ret;
- flags = btsrv_set_negative_prio();
- *rssi = btsrv_rdm_get_active_dev_rssi();
- if(*rssi == 0x7F){
- ret = -1;
- }
- else{
- ret = 0;
- }
- btsrv_revert_prio(flags);
- return ret;
- }
- uint16_t btif_br_get_active_phone_hdl(void)
- {
- int flags;
- uint16_t hdl;
- flags = btsrv_set_negative_prio();
- hdl = btsrv_rdm_get_actived_phone_hdl();
- btsrv_revert_prio(flags);
- return hdl;
- }
- int btif_bt_set_apll_temp_comp(uint8_t enable)
- {
- int flags, ret;
- flags = btsrv_set_negative_prio();
- ret = hostif_bt_vs_set_apll_temp_comp(enable);
- btsrv_revert_prio(flags);
- return ret;
- }
- int btif_bt_do_apll_temp_comp(void)
- {
- int flags, ret;
- flags = btsrv_set_negative_prio();
- ret = hostif_bt_vs_do_apll_temp_comp();
- btsrv_revert_prio(flags);
- return ret;
- }
- #ifdef CONFIG_BT_A2DP_TRS
- int btif_br_get_trs_list_info(struct bt_trs_list_dev_t *info, uint8_t max_cnt)
- {
- int ret, flags;
- flags = btsrv_set_negative_prio();
- ret = btsrv_get_trs_dev_record((struct bt_paired_list_dev_t *)info, max_cnt);
- btsrv_revert_prio(flags);
- return ret;
- }
- int btif_br_clean_trs_dev_info(bd_address_t *bd)
- {
- int ret, flags;
- flags = btsrv_set_negative_prio();
- ret = btsrv_function_call_malloc(MSG_BTSRV_CONNECT, MSG_BTSRV_CLEAR_PAIRED_INFO, (void *)bd, sizeof(bd_address_t), 0);
- btsrv_revert_prio(flags);
- return ret;
- }
- #endif
|