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