/****************************************************************************** * * 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 #include #include "bt_common.h" #include "btcore/include/module.h" #include "bte.h" #include "btif/include/btif_config.h" #include "btsnoop.h" #include "btu.h" #include "device/include/interop.h" #include "hci_layer.h" #include "osi/include/log.h" #include "osi/include/osi.h" #include "shim/hci_layer.h" #include "shim/shim.h" #include "stack_config.h" /******************************************************************************* * 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(); } } void bte_main_init(void) { hci = hci_layer_get_interface(); if (!hci) { LOG_ERROR("%s could not get hci layer interface.", __func__); return; } hci->set_data_cb(base::Bind(&post_to_main_message_loop)); } /****************************************************************************** * * 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); } }