15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Copyright (C) 2009-2012 Broadcom Corporation 45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * you may not use this file except in compliance with the License. 75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * You may obtain a copy of the License at: 85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * See the License for the specific language governing permissions and 155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * limitations under the License. 165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Filename: bte_main.c 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Description: Contains BTE core stack initialization and shutdown code 245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <fcntl.h> 275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stdlib.h> 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <assert.h> 295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gki.h" 315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bd.h" 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btu.h" 335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bte.h" 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_api.h" 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_hci_lib.h" 365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Constants & Macros 395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Run-time configuration file */ 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BTE_STACK_CONF_FILE 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTE_STACK_CONF_FILE "/etc/bluetooth/bt_stack.conf" 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* if not specified in .txt file then use this as default */ 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef HCI_LOGGING_FILENAME 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define HCI_LOGGING_FILENAME "/data/misc/bluedroid/btsnoop_hci.log" 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Local type definitions 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Variables 575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN hci_logging_enabled = FALSE; /* by default, turn hci log off */ 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectchar hci_logfile[256] = HCI_LOGGING_FILENAME; 605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Static variables 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_hc_interface_t *bt_hc_if=NULL; 665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic const bt_hc_callbacks_t hc_callbacks; 675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN lpm_enabled = FALSE; 685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Static functions 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bte_main_in_hw_init(void); 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Externs 765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBTU_API extern UINT32 btu_task (UINT32 param); 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBTU_API extern void BTE_Init (void); 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBT_API extern void BTE_LoadStack(void); 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBT_API void BTE_UnloadStack(void); 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void scru_flip_bda (BD_ADDR dst, const BD_ADDR src); 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void bte_load_conf(const char *p_path); 835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** System Task Configuration 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* bluetooth protocol stack (BTU) task */ 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BTE_BTU_STACK_SIZE 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTE_BTU_STACK_SIZE 0//0x2000 /* In bytes */ 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTE_BTU_TASK_STR ((INT8 *) "BTU") 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT32 bte_btu_stack[(BTE_BTU_STACK_SIZE + 3) / 4]; 955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bte_main_in_hw_init 995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Internal helper function for chip hardware init 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_in_hw_init(void) 1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( (bt_hc_if = (bt_hc_interface_t *) bt_hc_get_interface()) \ 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project == NULL) 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("!!! Failed to get BtHostControllerInterface !!!"); 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bte_main_boot_entry 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTE MAIN API - Entry point for BTE chip/stack initialization 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_boot_entry(void) 1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* initialize OS */ 1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_init(); 1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bte_main_in_hw_init(); 1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bte_load_conf(BTE_STACK_CONF_FILE); 1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTTRC_INCLUDED == TRUE) 1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Initialize trace feature */ 1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTTRC_TraceInit(MAX_TRACE_RAM_SIZE, &BTE_TraceLogBuf[0], BTTRC_METHOD_RAM); 1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bte_main_shutdown 1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTE MAIN API - Shutdown code for BTE chip/stack 1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_shutdown() 1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_shutdown(); 1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bte_main_enable 1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTE MAIN API - Creates all the BTE tasks. Should be called 1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** part of the Bluetooth stack enable sequence 1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_enable(uint8_t *local_addr) 1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("%s", __FUNCTION__); 1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Initialize BTE control block */ 1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTE_Init(); 1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project lpm_enabled = FALSE; 1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bt_hc_if) 1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int result = bt_hc_if->init(&hc_callbacks, local_addr); 1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_EVENT1("libbt-hci init returns %d", result); 1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project assert(result == BT_HC_STATUS_SUCCESS); 1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (hci_logging_enabled == TRUE) 1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_hc_if->logging(BT_HC_LOGGING_ON, hci_logfile); 1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined (BT_CLEAN_TURN_ON_DISABLED) && BT_CLEAN_TURN_ON_DISABLED == TRUE) 1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("%s Not Turninig Off the BT before Turninig ON", __FUNCTION__); 1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Do not power off the chip before powering on if BT_CLEAN_TURN_ON_DISABLED flag 1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project is defined and set to TRUE to avoid below mentioned issue. 1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project Wingray kernel driver maintains a combined counter to keep track of 1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT-Wifi state. Invoking set_power(BT_HC_CHIP_PWR_OFF) when the BT is already 1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project in OFF state causes this counter to be incorrectly decremented and results in undesired 1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project behavior of the chip. 1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project This is only a workaround and when the issue is fixed in the kernel this work around 1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project should be removed. */ 1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else 1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* toggle chip power to ensure we will reset chip in case 1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project a previous stack shutdown wasn't completed gracefully */ 1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_hc_if->set_power(BT_HC_CHIP_PWR_OFF); 1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_hc_if->set_power(BT_HC_CHIP_PWR_ON); 2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_hc_if->preload(NULL); 2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_create_task((TASKPTR)btu_task, BTU_TASK, BTE_BTU_TASK_STR, 2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT16 *) ((UINT8 *)bte_btu_stack + BTE_BTU_STACK_SIZE), 2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(bte_btu_stack)); 2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_run(0); 2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bte_main_disable 2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTE MAIN API - Destroys all the BTE tasks. Should be called 2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** part of the Bluetooth stack disable sequence 2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_disable(void) 2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("%s", __FUNCTION__); 2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bt_hc_if) 2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_hc_if->cleanup(); 2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_hc_if->set_power(BT_HC_CHIP_PWR_OFF); 2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_destroy_task(BTU_TASK); 2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freeze(); 2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bte_main_postload_cfg 2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTE MAIN API - Stack postload configuration 2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_postload_cfg(void) 2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bt_hc_if) 2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_hc_if->postload(NULL); 2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(HCILP_INCLUDED) && HCILP_INCLUDED == TRUE) 2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bte_main_enable_lpm 2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTE MAIN API - Enable/Disable low power mode operation 2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_enable_lpm(BOOLEAN enable) 2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int result = -1; 2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bt_hc_if) 2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result = bt_hc_if->lpm( \ 2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (enable == TRUE) ? BT_HC_LPM_ENABLE : BT_HC_LPM_DISABLE \ 2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ); 2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_EVENT2("HC lib lpm enable=%d return %d", enable, result); 2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bte_main_lpm_allow_bt_device_sleep 2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTE MAIN API - Allow BT controller goest to sleep 2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_lpm_allow_bt_device_sleep() 2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int result = -1; 2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((bt_hc_if) && (lpm_enabled == TRUE)) 2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result = bt_hc_if->lpm(BT_HC_LPM_WAKE_DEASSERT); 2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("HC lib lpm deassertion return %d", result); 2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bte_main_lpm_wake_bt_device 2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTE MAIN API - Wake BT controller up if it is in sleep mode 2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_lpm_wake_bt_device() 3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int result = -1; 3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((bt_hc_if) && (lpm_enabled == TRUE)) 3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result = bt_hc_if->lpm(BT_HC_LPM_WAKE_ASSERT); 3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("HC lib lpm assertion return %d", result); 3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif // HCILP_INCLUDED 3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bte_main_hci_send 3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTE MAIN API - This function is called by the upper stack to 3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** send an HCI message. The function displays a protocol trace 3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** message (if enabled), and then calls the 'transmit' function 3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** associated with the currently selected HCI transport 3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_hci_send (BT_HDR *p_msg, UINT16 event) 3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 sub_event = event & BT_SUB_EVT_MASK; /* local controller ID */ 3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->event = event; 3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if((sub_event == LOCAL_BR_EDR_CONTROLLER_ID) || \ 3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (sub_event == LOCAL_BLE_CONTROLLER_ID)) 3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bt_hc_if) 3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_hc_if->transmit_buf((TRANSAC)p_msg, \ 3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (char *) (p_msg + 1), \ 3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->len); 3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf(p_msg); 3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("Invalid Controller ID. Discarding message."); 3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf(p_msg); 3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bte_main_post_reset_init 3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTE MAIN API - This function is mapped to BTM_APP_DEV_INIT 3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** and shall be automatically called from BTE after HCI_Reset 3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_post_reset_init() 3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_ContinueReset(); 3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** libbt-hci Callback Functions 3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/ 3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function preload_cb 3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description HOST/CONTROLLER LIB CALLBACK API - This function is called 3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** when the libbt-hci completed stack preload process 3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void preload_cb(TRANSAC transac, bt_hc_preload_result_t result) 3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_EVENT1("HC preload_cb %d [0:SUCCESS 1:FAIL]", result); 3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* notify BTU task that libbt-hci is ready */ 3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* even if PRELOAD process failed */ 3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_send_event(BTU_TASK, TASK_MBOX_0_EVT_MASK); 3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function postload_cb 3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description HOST/CONTROLLER LIB CALLBACK API - This function is called 3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** when the libbt-hci lib completed stack postload process 3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void postload_cb(TRANSAC transac, bt_hc_postload_result_t result) 3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_EVENT1("HC postload_cb %d", result); 4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function lpm_cb 4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description HOST/CONTROLLER LIB CALLBACK API - This function is called 4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** back from the libbt-hci to indicate the current LPM state 4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void lpm_cb(bt_hc_lpm_request_result_t result) 4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_EVENT1("HC lpm_result_cb %d", result); 4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project lpm_enabled = (result == BT_HC_LPM_ENABLED) ? TRUE : FALSE; 4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function hostwake_ind 4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description HOST/CONTROLLER LIB CALLOUT API - This function is called 4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** from the libbt-hci to indicate the HostWake event 4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void hostwake_ind(bt_hc_low_power_event_t event) 4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_EVENT1("HC hostwake_ind %d", event); 4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function alloc 4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description HOST/CONTROLLER LIB CALLOUT API - This function is called 4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** from the libbt-hci to request for data buffer allocation 4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns NULL / pointer to allocated buffer 4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic char *alloc(int size) 4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p_hdr = NULL; 4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* 4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("HC alloc size=%d", size); 4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_hdr = (BT_HDR *) GKI_getbuf ((UINT16) size); 4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_hdr == NULL) 4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_WARNING0("alloc returns NO BUFFER!"); 4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return ((char *) p_hdr); 4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function dealloc 4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description HOST/CONTROLLER LIB CALLOUT API - This function is called 4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** from the libbt-hci to release the data buffer allocated 4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** through the alloc call earlier 4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Bluedroid libbt-hci library uses 'transac' parameter to 4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** pass data-path buffer/packet across bt_hci_lib interface 4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** boundary. The 'p_buf' is not intended to be used here 4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** but might point to data portion of data-path buffer. 4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_hc_status_t 4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int dealloc(TRANSAC transac, char *p_buf) 4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf(transac); 4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_HC_STATUS_SUCCESS; 4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function data_ind 4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description HOST/CONTROLLER LIB CALLOUT API - This function is called 4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** from the libbt-hci to pass in the received HCI packets 4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** The core stack is responsible for releasing the data buffer 4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** passed in from the libbt-hci once the core stack has done 4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** with it. 4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Bluedroid libbt-hci library uses 'transac' parameter to 4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** pass data-path buffer/packet across bt_hci_lib interface 4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** boundary. The 'p_buf' and 'len' parameters are not intended 4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** to be used here but might point to data portion in data- 4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** path buffer and length of valid data respectively. 5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_hc_status_t 5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int data_ind(TRANSAC transac, char *p_buf, int len) 5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p_msg = (BT_HDR *) transac; 5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* 5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG2("HC data_ind event=0x%04X (len=%d)", p_msg->event, len); 5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_send_msg (BTU_TASK, BTU_HCI_RCV_MBOX, transac); 5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_HC_STATUS_SUCCESS; 5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function tx_result 5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description HOST/CONTROLLER LIB CALLBACK API - This function is called 5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** from the libbt-hci once it has processed/sent the prior data 5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** buffer which core stack passed to it through transmit_buf 5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** call earlier. 5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** The core stack is responsible for releasing the data buffer 5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** if it has been completedly processed. 5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Bluedroid libbt-hci library uses 'transac' parameter to 5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** pass data-path buffer/packet across bt_hci_lib interface 5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** boundary. The 'p_buf' is not intended to be used here 5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** but might point to data portion in data-path buffer. 5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_hc_status_t 5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int tx_result(TRANSAC transac, char *p_buf, \ 5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_hc_transmit_result_t result) 5385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* 5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG2("HC tx_result %d (event=%04X)", result, \ 5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ((BT_HDR *)transac)->event); 5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (result == BT_HC_TX_FRAGMENT) 5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_send_msg (BTU_TASK, BTU_HCI_RCV_MBOX, transac); 5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf(transac); 5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_HC_STATUS_SUCCESS; 5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** The libbt-hci Callback Functions Table 5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/ 5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic const bt_hc_callbacks_t hc_callbacks = { 5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(bt_hc_callbacks_t), 5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project preload_cb, 5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project postload_cb, 5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project lpm_cb, 5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project hostwake_ind, 5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project alloc, 5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project dealloc, 5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project data_ind, 5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tx_result 5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 571