123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- /******************************************************************************
- *
- * Copyright 2009-2012 Broadcom Corporation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************/
- /******************************************************************************
- *
- * Filename: bte_main.cc
- *
- * Description: Contains BTE core stack initialization and shutdown code
- *
- ******************************************************************************/
- #define LOG_TAG "bt_main"
- #include <base/logging.h>
- #include <base/threading/thread.h>
- #include <fcntl.h>
- #include <pthread.h>
- #include <signal.h>
- #include <stdlib.h>
- #include <time.h>
- #include <hardware/bluetooth.h>
- #include "bt_common.h"
- #include "bt_hci_bdroid.h"
- #include "bt_utils.h"
- #include "bta_api.h"
- #include "btcore/include/module.h"
- #include "bte.h"
- #include "btif_common.h"
- #include "btsnoop.h"
- #include "btu.h"
- #include "device/include/interop.h"
- #include "hci_layer.h"
- #include "hcimsgs.h"
- #include "osi/include/alarm.h"
- #include "osi/include/fixed_queue.h"
- #include "osi/include/future.h"
- #include "osi/include/log.h"
- #include "osi/include/osi.h"
- #include "stack_config.h"
- /*******************************************************************************
- * Constants & Macros
- ******************************************************************************/
- /* Run-time configuration file for BLE*/
- #ifndef BTE_BLE_STACK_CONF_FILE
- // TODO(armansito): Find a better way than searching by a hardcoded path.
- #if defined(OS_GENERIC)
- #define BTE_BLE_STACK_CONF_FILE "ble_stack.conf"
- #else // !defined(OS_GENERIC)
- #define BTE_BLE_STACK_CONF_FILE "/etc/bluetooth/ble_stack.conf"
- #endif // defined(OS_GENERIC)
- #endif // BT_BLE_STACK_CONF_FILE
- /******************************************************************************
- * Variables
- *****************************************************************************/
- /*******************************************************************************
- * Static variables
- ******************************************************************************/
- static const hci_t* hci;
- /*******************************************************************************
- * Externs
- ******************************************************************************/
- extern void btu_hci_msg_process(BT_HDR* p_msg);
- /*******************************************************************************
- * Static functions
- ******************************************************************************/
- /******************************************************************************
- *
- * Function post_to_hci_message_loop
- *
- * Description Post an HCI event to the main thread
- *
- * Returns None
- *
- *****************************************************************************/
- void post_to_main_message_loop(const base::Location& from_here, BT_HDR* p_msg) {
- if (do_in_main_thread(from_here, base::Bind(&btu_hci_msg_process, p_msg)) !=
- BT_STATUS_SUCCESS) {
- LOG(ERROR) << __func__ << ": do_in_main_thread failed from "
- << from_here.ToString();
- }
- }
- /******************************************************************************
- *
- * Function bte_main_boot_entry
- *
- * Description BTE MAIN API - Entry point for BTE chip/stack initialization
- *
- * Returns None
- *
- *****************************************************************************/
- void bte_main_boot_entry(void) {
- module_init(get_module(INTEROP_MODULE));
- hci = hci_layer_get_interface();
- if (!hci) {
- LOG_ERROR(LOG_TAG, "%s could not get hci layer interface.", __func__);
- return;
- }
- hci->set_data_cb(base::Bind(&post_to_main_message_loop));
- module_init(get_module(STACK_CONFIG_MODULE));
- }
- /******************************************************************************
- *
- * Function bte_main_cleanup
- *
- * Description BTE MAIN API - Cleanup code for BTE chip/stack
- *
- * Returns None
- *
- *****************************************************************************/
- void bte_main_cleanup() {
- module_clean_up(get_module(STACK_CONFIG_MODULE));
- module_clean_up(get_module(INTEROP_MODULE));
- }
- /******************************************************************************
- *
- * Function bte_main_enable
- *
- * Description BTE MAIN API - Creates all the BTE tasks. Should be called
- * part of the Bluetooth stack enable sequence
- *
- * Returns None
- *
- *****************************************************************************/
- void bte_main_enable() {
- APPL_TRACE_DEBUG("%s", __func__);
- module_start_up(get_module(BTSNOOP_MODULE));
- module_start_up(get_module(HCI_MODULE));
- BTU_StartUp();
- }
- /******************************************************************************
- *
- * Function bte_main_disable
- *
- * Description BTE MAIN API - Destroys all the BTE tasks. Should be called
- * part of the Bluetooth stack disable sequence
- *
- * Returns None
- *
- *****************************************************************************/
- void bte_main_disable(void) {
- APPL_TRACE_DEBUG("%s", __func__);
- module_shut_down(get_module(HCI_MODULE));
- module_shut_down(get_module(BTSNOOP_MODULE));
- BTU_ShutDown();
- }
- /******************************************************************************
- *
- * Function bte_main_postload_cfg
- *
- * Description BTE MAIN API - Stack postload configuration
- *
- * Returns None
- *
- *****************************************************************************/
- void bte_main_postload_cfg(void) {
- // TODO(eisenbach): [HIDL] DEPRECATE?
- }
- /******************************************************************************
- *
- * Function bte_main_hci_send
- *
- * Description BTE MAIN API - This function is called by the upper stack to
- * send an HCI message. The function displays a protocol trace
- * message (if enabled), and then calls the 'transmit' function
- * associated with the currently selected HCI transport
- *
- * Returns None
- *
- *****************************************************************************/
- void bte_main_hci_send(BT_HDR* p_msg, uint16_t event) {
- uint16_t sub_event = event & BT_SUB_EVT_MASK; /* local controller ID */
- p_msg->event = event;
- if ((sub_event == LOCAL_BR_EDR_CONTROLLER_ID) ||
- (sub_event == LOCAL_BLE_CONTROLLER_ID)) {
- hci->transmit_downward(event, p_msg);
- } else {
- APPL_TRACE_ERROR("Invalid Controller ID. Discarding message.");
- osi_free(p_msg);
- }
- }
|