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> 2948ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao#include <signal.h> 3048ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao#include <time.h> 3148ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao#include <hardware/bluetooth.h> 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gki.h" 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bd.h" 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btu.h" 365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bte.h" 375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_api.h" 385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_hci_lib.h" 395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Constants & Macros 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Run-time configuration file */ 455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BTE_STACK_CONF_FILE 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTE_STACK_CONF_FILE "/etc/bluetooth/bt_stack.conf" 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* if not specified in .txt file then use this as default */ 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef HCI_LOGGING_FILENAME 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define HCI_LOGGING_FILENAME "/data/misc/bluedroid/btsnoop_hci.log" 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5448ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao/* Stack preload process timeout period */ 5548ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao#ifndef PRELOAD_START_TIMEOUT_MS 5648ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao#define PRELOAD_START_TIMEOUT_MS 3000 // 3 seconds 5748ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao#endif 5848ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao 5948ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao/* Stack preload process maximum retry attempts */ 6048ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao#ifndef PRELOAD_MAX_RETRY_ATTEMPTS 6148ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao#define PRELOAD_MAX_RETRY_ATTEMPTS 0 6248ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao#endif 6348ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Local type definitions 665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6748ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao/* Preload retry control block */ 6848ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chaotypedef struct 6948ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao{ 7048ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao int retry_counts; 7148ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao BOOLEAN timer_created; 7248ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao timer_t timer_id; 7348ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao} bt_preload_retry_cb_t; 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Variables 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN hci_logging_enabled = FALSE; /* by default, turn hci log off */ 79bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai XuBOOLEAN hci_logging_config = FALSE; /* configured from bluetooth framework */ 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectchar hci_logfile[256] = HCI_LOGGING_FILENAME; 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Static variables 855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_hc_interface_t *bt_hc_if=NULL; 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic const bt_hc_callbacks_t hc_callbacks; 885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN lpm_enabled = FALSE; 8948ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chaostatic bt_preload_retry_cb_t preload_retry_cb; 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Static functions 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bte_main_in_hw_init(void); 9548ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chaostatic void bte_hci_enable(void); 9648ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chaostatic void bte_hci_disable(void); 9748ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chaostatic void preload_start_wait_timer(void); 9848ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chaostatic void preload_stop_wait_timer(void); 995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Externs 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBTU_API extern UINT32 btu_task (UINT32 param); 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBTU_API extern void BTE_Init (void); 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBT_API extern void BTE_LoadStack(void); 1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBT_API void BTE_UnloadStack(void); 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void scru_flip_bda (BD_ADDR dst, const BD_ADDR src); 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void bte_load_conf(const char *p_path); 10948ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chaoextern bt_bdaddr_t btif_local_bd_addr; 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** System Task Configuration 1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* bluetooth protocol stack (BTU) task */ 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BTE_BTU_STACK_SIZE 1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTE_BTU_STACK_SIZE 0//0x2000 /* In bytes */ 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTE_BTU_TASK_STR ((INT8 *) "BTU") 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT32 bte_btu_stack[(BTE_BTU_STACK_SIZE + 3) / 4]; 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bte_main_in_hw_init 1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Internal helper function for chip hardware init 1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 13248ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chaostatic void bte_main_in_hw_init(void) 1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( (bt_hc_if = (bt_hc_interface_t *) bt_hc_get_interface()) \ 1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project == NULL) 1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("!!! Failed to get BtHostControllerInterface !!!"); 1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13948ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao 14048ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao memset(&preload_retry_cb, 0, sizeof(bt_preload_retry_cb_t)); 1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bte_main_boot_entry 1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTE MAIN API - Entry point for BTE chip/stack initialization 1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_boot_entry(void) 1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* initialize OS */ 1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_init(); 1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bte_main_in_hw_init(); 1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bte_load_conf(BTE_STACK_CONF_FILE); 1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTTRC_INCLUDED == TRUE) 1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Initialize trace feature */ 1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTTRC_TraceInit(MAX_TRACE_RAM_SIZE, &BTE_TraceLogBuf[0], BTTRC_METHOD_RAM); 1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bte_main_shutdown 1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTE MAIN API - Shutdown code for BTE chip/stack 1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_shutdown() 1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_shutdown(); 1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bte_main_enable 1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTE MAIN API - Creates all the BTE tasks. Should be called 1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** part of the Bluetooth stack enable sequence 1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 19148ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chaovoid bte_main_enable() 1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("%s", __FUNCTION__); 1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Initialize BTE control block */ 1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTE_Init(); 1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project lpm_enabled = FALSE; 1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20048ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao bte_hci_enable(); 20148ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao 20248ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao GKI_create_task((TASKPTR)btu_task, BTU_TASK, BTE_BTU_TASK_STR, 20348ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao (UINT16 *) ((UINT8 *)bte_btu_stack + BTE_BTU_STACK_SIZE), 20448ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao sizeof(bte_btu_stack)); 20548ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao 20648ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao GKI_run(0); 20748ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao} 20848ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao 20948ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao/****************************************************************************** 21048ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** 21148ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** Function bte_main_disable 21248ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** 21348ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** Description BTE MAIN API - Destroys all the BTE tasks. Should be called 21448ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** part of the Bluetooth stack disable sequence 21548ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** 21648ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** Returns None 21748ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** 21848ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao******************************************************************************/ 21948ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chaovoid bte_main_disable(void) 22048ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao{ 22148ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao APPL_TRACE_DEBUG1("%s", __FUNCTION__); 22248ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao 22348ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao preload_stop_wait_timer(); 22448ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao bte_hci_disable(); 22548ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao GKI_destroy_task(BTU_TASK); 22648ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao GKI_freeze(); 22748ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao} 22848ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao 22948ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao/****************************************************************************** 23048ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** 231bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu** Function bte_main_config_hci_logging 232bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu** 233bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu** Description enable or disable HIC snoop logging 234bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu** 235bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu** Returns None 236bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu** 237bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu******************************************************************************/ 238bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xuvoid bte_main_config_hci_logging(BOOLEAN enable, BOOLEAN bt_disabled) 239bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu{ 240bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu int old = (hci_logging_enabled == TRUE) || (hci_logging_config == TRUE); 241bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu int new; 242bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu 243bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu if (enable) { 244bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu hci_logging_config = TRUE; 245bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu } else { 246bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu hci_logging_config = FALSE; 247bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu } 248bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu 249bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu new = (hci_logging_enabled == TRUE) || (hci_logging_config == TRUE); 250bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu 251bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu if ((old == new) || bt_disabled || (bt_hc_if == NULL)) { 252bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu return; 253bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu } 254bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu 255bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu bt_hc_if->logging(new ? BT_HC_LOGGING_ON : BT_HC_LOGGING_OFF, hci_logfile); 256bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu} 257bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu 258bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu/****************************************************************************** 259bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu** 26048ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** Function bte_hci_enable 26148ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** 26248ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** Description Enable HCI & Vendor modules 26348ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** 26448ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** Returns None 26548ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** 26648ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao******************************************************************************/ 26748ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chaostatic void bte_hci_enable(void) 26848ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao{ 26948ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao APPL_TRACE_DEBUG1("%s", __FUNCTION__); 27048ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao 27148ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao preload_start_wait_timer(); 27248ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao 2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bt_hc_if) 2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 27548ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao int result = bt_hc_if->init(&hc_callbacks, btif_local_bd_addr.address); 2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_EVENT1("libbt-hci init returns %d", result); 2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project assert(result == BT_HC_STATUS_SUCCESS); 2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 280bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu if (hci_logging_enabled == TRUE || hci_logging_config == TRUE) 2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_hc_if->logging(BT_HC_LOGGING_ON, hci_logfile); 2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined (BT_CLEAN_TURN_ON_DISABLED) && BT_CLEAN_TURN_ON_DISABLED == TRUE) 2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("%s Not Turninig Off the BT before Turninig ON", __FUNCTION__); 2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Do not power off the chip before powering on if BT_CLEAN_TURN_ON_DISABLED flag 2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project is defined and set to TRUE to avoid below mentioned issue. 2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project Wingray kernel driver maintains a combined counter to keep track of 2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT-Wifi state. Invoking set_power(BT_HC_CHIP_PWR_OFF) when the BT is already 2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project in OFF state causes this counter to be incorrectly decremented and results in undesired 2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project behavior of the chip. 2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project This is only a workaround and when the issue is fixed in the kernel this work around 2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project should be removed. */ 2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else 2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* toggle chip power to ensure we will reset chip in case 2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project a previous stack shutdown wasn't completed gracefully */ 2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_hc_if->set_power(BT_HC_CHIP_PWR_OFF); 3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_hc_if->set_power(BT_HC_CHIP_PWR_ON); 3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_hc_if->preload(NULL); 3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 30948ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** Function bte_hci_disable 3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 31148ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** Description Disable HCI & Vendor modules 3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 31648ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chaostatic void bte_hci_disable(void) 3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("%s", __FUNCTION__); 3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bt_hc_if) 3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_hc_if->cleanup(); 3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_hc_if->set_power(BT_HC_CHIP_PWR_OFF); 324bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu if (hci_logging_enabled == TRUE || hci_logging_config == TRUE) 32548ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao bt_hc_if->logging(BT_HC_LOGGING_OFF, hci_logfile); 3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 32748ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao} 3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 32948ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao/******************************************************************************* 33048ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** 33148ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** Function preload_wait_timeout 33248ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** 33348ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** Description Timeout thread of preload watchdog timer 33448ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** 33548ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** Returns None 33648ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** 33748ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao*******************************************************************************/ 33848ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chaostatic void preload_wait_timeout(union sigval arg) 33948ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao{ 34048ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao APPL_TRACE_ERROR2("...preload_wait_timeout (retried:%d/max-retry:%d)...", 34148ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao preload_retry_cb.retry_counts, 34248ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao PRELOAD_MAX_RETRY_ATTEMPTS); 3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 34448ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao if (preload_retry_cb.retry_counts++ < PRELOAD_MAX_RETRY_ATTEMPTS) 34548ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao { 34648ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao bte_hci_disable(); 34748ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao GKI_delay(100); 34848ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao bte_hci_enable(); 34948ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao } 35048ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao else 35148ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao { 35248ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao /* Notify BTIF_TASK that the init procedure had failed*/ 35348ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao GKI_send_event(BTIF_TASK, BT_EVT_HARDWARE_INIT_FAIL); 35448ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao } 35548ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao} 35648ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao 35748ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao/******************************************************************************* 35848ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** 35948ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** Function preload_start_wait_timer 36048ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** 36148ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** Description Launch startup watchdog timer 36248ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** 36348ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** Returns None 36448ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** 36548ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao*******************************************************************************/ 36648ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chaostatic void preload_start_wait_timer(void) 36748ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao{ 36848ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao int status; 36948ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao struct itimerspec ts; 37048ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao struct sigevent se; 37148ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao UINT32 timeout_ms = PRELOAD_START_TIMEOUT_MS; 37248ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao 37348ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao if (preload_retry_cb.timer_created == FALSE) 37448ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao { 37548ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao se.sigev_notify = SIGEV_THREAD; 37648ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao se.sigev_value.sival_ptr = &preload_retry_cb.timer_id; 37748ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao se.sigev_notify_function = preload_wait_timeout; 37848ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao se.sigev_notify_attributes = NULL; 37948ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao 38048ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao status = timer_create(CLOCK_MONOTONIC, &se, &preload_retry_cb.timer_id); 38148ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao 38248ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao if (status == 0) 38348ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao preload_retry_cb.timer_created = TRUE; 38448ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao } 38548ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao 38648ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao if (preload_retry_cb.timer_created == TRUE) 38748ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao { 38848ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao ts.it_value.tv_sec = timeout_ms/1000; 38948ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao ts.it_value.tv_nsec = 1000000*(timeout_ms%1000); 39048ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao ts.it_interval.tv_sec = 0; 39148ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao ts.it_interval.tv_nsec = 0; 39248ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao 39348ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao status = timer_settime(preload_retry_cb.timer_id, 0, &ts, 0); 39448ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao if (status == -1) 39548ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao APPL_TRACE_ERROR0("Failed to fire preload watchdog timer"); 39648ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao } 39748ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao} 39848ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao 39948ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao/******************************************************************************* 40048ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** 40148ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** Function preload_stop_wait_timer 40248ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** 40348ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** Description Stop preload watchdog timer 40448ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** 40548ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** Returns None 40648ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao** 40748ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao*******************************************************************************/ 40848ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chaostatic void preload_stop_wait_timer(void) 40948ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao{ 41048ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao if (preload_retry_cb.timer_created == TRUE) 41148ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao { 41248ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao timer_delete(preload_retry_cb.timer_id); 41348ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao preload_retry_cb.timer_created = FALSE; 41448ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao } 4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bte_main_postload_cfg 4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTE MAIN API - Stack postload configuration 4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_postload_cfg(void) 4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bt_hc_if) 4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_hc_if->postload(NULL); 4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(HCILP_INCLUDED) && HCILP_INCLUDED == TRUE) 4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bte_main_enable_lpm 4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTE MAIN API - Enable/Disable low power mode operation 4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_enable_lpm(BOOLEAN enable) 4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int result = -1; 4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bt_hc_if) 4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result = bt_hc_if->lpm( \ 4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (enable == TRUE) ? BT_HC_LPM_ENABLE : BT_HC_LPM_DISABLE \ 4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ); 4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_EVENT2("HC lib lpm enable=%d return %d", enable, result); 4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bte_main_lpm_allow_bt_device_sleep 4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTE MAIN API - Allow BT controller goest to sleep 4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_lpm_allow_bt_device_sleep() 4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int result = -1; 4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((bt_hc_if) && (lpm_enabled == TRUE)) 4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result = bt_hc_if->lpm(BT_HC_LPM_WAKE_DEASSERT); 4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("HC lib lpm deassertion return %d", result); 4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bte_main_lpm_wake_bt_device 4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTE MAIN API - Wake BT controller up if it is in sleep mode 4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_lpm_wake_bt_device() 4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int result = -1; 4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((bt_hc_if) && (lpm_enabled == TRUE)) 4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result = bt_hc_if->lpm(BT_HC_LPM_WAKE_ASSERT); 4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("HC lib lpm assertion return %d", result); 4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif // HCILP_INCLUDED 4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bte_main_hci_send 4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTE MAIN API - This function is called by the upper stack to 4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** send an HCI message. The function displays a protocol trace 4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** message (if enabled), and then calls the 'transmit' function 5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** associated with the currently selected HCI transport 5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_hci_send (BT_HDR *p_msg, UINT16 event) 5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 sub_event = event & BT_SUB_EVT_MASK; /* local controller ID */ 5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->event = event; 5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if((sub_event == LOCAL_BR_EDR_CONTROLLER_ID) || \ 5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (sub_event == LOCAL_BLE_CONTROLLER_ID)) 5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bt_hc_if) 5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_hc_if->transmit_buf((TRANSAC)p_msg, \ 5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (char *) (p_msg + 1), \ 5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->len); 5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf(p_msg); 5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("Invalid Controller ID. Discarding message."); 5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf(p_msg); 5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bte_main_post_reset_init 5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTE MAIN API - This function is mapped to BTM_APP_DEV_INIT 5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** and shall be automatically called from BTE after HCI_Reset 5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_post_reset_init() 5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_ContinueReset(); 5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** libbt-hci Callback Functions 5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/ 5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function preload_cb 5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description HOST/CONTROLLER LIB CALLBACK API - This function is called 5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** when the libbt-hci completed stack preload process 5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void preload_cb(TRANSAC transac, bt_hc_preload_result_t result) 5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_EVENT1("HC preload_cb %d [0:SUCCESS 1:FAIL]", result); 5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 56448ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao 56548ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao if (result == BT_HC_PRELOAD_SUCCESS) 56648ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao { 56748ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao preload_stop_wait_timer(); 56848ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao 56948ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao /* notify BTU task that libbt-hci is ready */ 57048ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao GKI_send_event(BTU_TASK, BT_EVT_PRELOAD_CMPL); 57148ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao } 5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function postload_cb 5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description HOST/CONTROLLER LIB CALLBACK API - This function is called 5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** when the libbt-hci lib completed stack postload process 5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 5845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void postload_cb(TRANSAC transac, bt_hc_postload_result_t result) 5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_EVENT1("HC postload_cb %d", result); 5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function lpm_cb 5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description HOST/CONTROLLER LIB CALLBACK API - This function is called 5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** back from the libbt-hci to indicate the current LPM state 5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void lpm_cb(bt_hc_lpm_request_result_t result) 6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_EVENT1("HC lpm_result_cb %d", result); 6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project lpm_enabled = (result == BT_HC_LPM_ENABLED) ? TRUE : FALSE; 6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function hostwake_ind 6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description HOST/CONTROLLER LIB CALLOUT API - This function is called 6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** from the libbt-hci to indicate the HostWake event 6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void hostwake_ind(bt_hc_low_power_event_t event) 6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_EVENT1("HC hostwake_ind %d", event); 6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 6215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function alloc 6235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description HOST/CONTROLLER LIB CALLOUT API - This function is called 6255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** from the libbt-hci to request for data buffer allocation 6265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns NULL / pointer to allocated buffer 6285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 6305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic char *alloc(int size) 6315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p_hdr = NULL; 6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* 6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("HC alloc size=%d", size); 6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_hdr = (BT_HDR *) GKI_getbuf ((UINT16) size); 6395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_hdr == NULL) 6415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_WARNING0("alloc returns NO BUFFER!"); 6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return ((char *) p_hdr); 6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function dealloc 6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description HOST/CONTROLLER LIB CALLOUT API - This function is called 6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** from the libbt-hci to release the data buffer allocated 6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** through the alloc call earlier 6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Bluedroid libbt-hci library uses 'transac' parameter to 6575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** pass data-path buffer/packet across bt_hci_lib interface 6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** boundary. The 'p_buf' is not intended to be used here 6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** but might point to data portion of data-path buffer. 6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_hc_status_t 6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int dealloc(TRANSAC transac, char *p_buf) 6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf(transac); 6675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_HC_STATUS_SUCCESS; 6685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 6715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function data_ind 6735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description HOST/CONTROLLER LIB CALLOUT API - This function is called 6755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** from the libbt-hci to pass in the received HCI packets 6765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** The core stack is responsible for releasing the data buffer 6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** passed in from the libbt-hci once the core stack has done 6795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** with it. 6805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Bluedroid libbt-hci library uses 'transac' parameter to 6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** pass data-path buffer/packet across bt_hci_lib interface 6835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** boundary. The 'p_buf' and 'len' parameters are not intended 6845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** to be used here but might point to data portion in data- 6855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** path buffer and length of valid data respectively. 6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_hc_status_t 6885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 6905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int data_ind(TRANSAC transac, char *p_buf, int len) 6915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p_msg = (BT_HDR *) transac; 6935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* 6955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG2("HC data_ind event=0x%04X (len=%d)", p_msg->event, len); 6965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 6975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_send_msg (BTU_TASK, BTU_HCI_RCV_MBOX, transac); 6995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_HC_STATUS_SUCCESS; 7005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 7035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function tx_result 7055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description HOST/CONTROLLER LIB CALLBACK API - This function is called 7075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** from the libbt-hci once it has processed/sent the prior data 7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** buffer which core stack passed to it through transmit_buf 7095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** call earlier. 7105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** The core stack is responsible for releasing the data buffer 7125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** if it has been completedly processed. 7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Bluedroid libbt-hci library uses 'transac' parameter to 7155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** pass data-path buffer/packet across bt_hci_lib interface 7165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** boundary. The 'p_buf' is not intended to be used here 7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** but might point to data portion in data-path buffer. 7185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_hc_status_t 7205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/ 7225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int tx_result(TRANSAC transac, char *p_buf, \ 7235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_hc_transmit_result_t result) 7245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* 7265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG2("HC tx_result %d (event=%04X)", result, \ 7275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ((BT_HDR *)transac)->event); 7285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 7295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (result == BT_HC_TX_FRAGMENT) 7315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_send_msg (BTU_TASK, BTU_HCI_RCV_MBOX, transac); 7335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 7355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf(transac); 7375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_HC_STATUS_SUCCESS; 7405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 7435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** The libbt-hci Callback Functions Table 7445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/ 7455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic const bt_hc_callbacks_t hc_callbacks = { 7465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(bt_hc_callbacks_t), 7475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project preload_cb, 7485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project postload_cb, 7495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project lpm_cb, 7505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project hostwake_ind, 7515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project alloc, 7525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project dealloc, 7535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project data_ind, 7545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tx_result 7555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 7565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 757