15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Copyright (C) 1999-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 * This file contains the main Bluetooth Upper Layer processing loop. 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * The Broadcom implementations of L2CAP RFCOMM, SDP and the BTIf run as one 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * GKI task. This btu_task switches between them. 245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Note that there will always be an L2CAP, but there may or may not be an 265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * RFCOMM or SDP. Whether these layers are present or not is determined by 275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * compile switches. 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stdlib.h> 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h> 335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stdio.h> 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_target.h" 365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gki.h" 375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_types.h" 385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "hcimsgs.h" 395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "l2c_int.h" 405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btu.h" 415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_utils.h" 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "sdpint.h" 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ( defined(RFCOMM_INCLUDED) && RFCOMM_INCLUDED == TRUE ) 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "port_api.h" 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "port_ext.h" 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btm_api.h" 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btm_int.h" 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(EVAL) && EVAL == TRUE) 545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btu_eval.h" 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if GAP_INCLUDED == TRUE 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gap_int.h" 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(OBX_INCLUDED) && OBX_INCLUDED == TRUE) 625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "obx_int.h" 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(BIP_INCLUDED) && BIP_INCLUDED == TRUE) 655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bip_int.h" 665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BIP */ 675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BPP_SND_INCLUDED == TRUE || BPP_INCLUDED == TRUE) 695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bpp_int.h" 705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BPP */ 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* OBX */ 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_trace.h" 755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* BTE application task */ 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if APPL_INCLUDED == TRUE 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bte_appl.h" 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(RPC_INCLUDED) && RPC_INCLUDED == TRUE) 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "rpct_main.h" 835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(BNEP_INCLUDED) && BNEP_INCLUDED == TRUE) 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bnep_int.h" 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(PAN_INCLUDED) && PAN_INCLUDED == TRUE) 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "pan_int.h" 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(SAP_SERVER_INCLUDED) && SAP_SERVER_INCLUDED == TRUE) 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "sap_int.h" 955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(HID_DEV_INCLUDED) && HID_DEV_INCLUDED == TRUE ) 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "hidd_int.h" 995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(HID_HOST_INCLUDED) && HID_HOST_INCLUDED == TRUE ) 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "hidh_int.h" 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(AVDT_INCLUDED) && AVDT_INCLUDED == TRUE) 1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "avdt_int.h" 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void avdt_rcv_sync_info (BT_HDR *p_buf); /* this is for hci_test */ 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(MCA_INCLUDED) && MCA_INCLUDED == TRUE) 1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "mca_api.h" 1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "mca_defs.h" 1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "mca_int.h" 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(BTU_BTA_INCLUDED) && BTU_BTA_INCLUDED == TRUE) 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_sys.h" 1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BLE_INCLUDED == TRUE) 1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gatt_int.h" 1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (SMP_INCLUDED == TRUE) 1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "smp_int.h" 1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btm_ble_int.h" 1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifdef __cplusplus 1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern "C" 1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBT_API extern void BTE_InitStack(void); 1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifdef __cplusplus 1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Define BTU storage area 1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*/ 1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTU_DYNAMIC_MEMORY == FALSE 1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTU_CB btu_cb; 1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Define a function prototype to allow a generic timeout handler */ 1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef void (tUSER_TIMEOUT_FUNC) (TIMER_LIST_ENT *p_tle); 1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btu_task 1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This is the main task of the Bluetooth Upper Layers unit. 1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** It sits in a loop waiting for messages, and dispatches them 1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** to the appropiate handlers. 1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns should never return 1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBTU_API UINT32 btu_task (UINT32 param) 1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 event; 1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p_msg; 1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 i; 1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 mask; 1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN handled; 1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(HCISU_H4_INCLUDED) && HCISU_H4_INCLUDED == TRUE) 1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* wait an event that HCISU is ready */ 17248ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao BT_TRACE_0(TRACE_LAYER_BTU, TRACE_TYPE_API, 17348ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao "btu_task pending for preload complete event"); 17448ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao 17548ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao for (;;) 17648ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao { 17748ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao event = GKI_wait (0xFFFF, 0); 17848ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao if (event & EVENT_MASK(GKI_SHUTDOWN_EVT)) 17948ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao { 18048ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao /* indicates BT ENABLE abort */ 18148ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao BT_TRACE_0(TRACE_LAYER_BTU, TRACE_TYPE_WARNING, 18248ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao "btu_task start abort!"); 18348ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao return (0); 18448ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao } 18548ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao else if (event & BT_EVT_PRELOAD_CMPL) 18648ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao { 18748ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao break; 18848ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao } 18948ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao else 19048ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao { 19148ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao BT_TRACE_1(TRACE_LAYER_BTU, TRACE_TYPE_WARNING, 19248ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao "btu_task ignore evt %04x while pending for preload complete", 19348ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao event); 19448ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao } 19548ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao } 19648ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao 19748ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao BT_TRACE_0(TRACE_LAYER_BTU, TRACE_TYPE_API, 19848ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao "btu_task received preload complete event"); 1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 20048ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao 2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Initialize the mandatory core stack control blocks 2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (BTU, BTM, L2CAP, and SDP) 2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_init_core(); 2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Initialize any optional stack components */ 2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTE_InitStack(); 2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(BTU_BTA_INCLUDED) && BTU_BTA_INCLUDED == TRUE) 2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_init(); 2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Initialise platform trace levels at this point as BTE_InitStack() and bta_sys_init() 2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * reset the control blocks and preset the trace level with XXX_INITIAL_TRACE_LEVEL 2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ( BT_USE_TRACES==TRUE ) 2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTE_InitTraceLevels(); 2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Send a startup evt message to BTIF_TASK to kickstart the init procedure */ 2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_send_event(BTIF_TASK, BT_EVT_TRIGGER_STACK_INIT); 2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project raise_priority_a2dp(TASK_HIGH_BTU); 2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Wait for, and process, events */ 2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (;;) 2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project event = GKI_wait (0xFFFF, 0); 2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (event & TASK_MBOX_0_EVT_MASK) 2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Process all messages in the queue */ 2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while ((p_msg = (BT_HDR *) GKI_read_mbox (BTU_HCI_RCV_MBOX)) != NULL) 2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Determine the input message type. */ 2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (p_msg->event & BT_EVT_MASK) 2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_BTU_HCI_ACL: 2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* All Acl Data goes to L2CAP */ 2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project l2c_rcv_acl_data (p_msg); 2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_BTU_L2C_SEG_XMIT: 2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* L2CAP segment transmit complete */ 2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project l2c_link_segments_xmitted (p_msg); 2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_BTU_HCI_SCO: 2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTM_SCO_INCLUDED == TRUE 2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_route_sco_data (p_msg); 2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_BTU_HCI_EVT: 2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_process_event ((UINT8)(p_msg->event & BT_SUB_EVT_MASK), p_msg); 2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf(p_msg); 2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(HCILP_INCLUDED) && HCILP_INCLUDED == TRUE) 2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If host receives events which it doesn't response to, */ 2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* host should start idle timer to enter sleep mode. */ 2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_check_bt_sleep (); 2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_BTU_HCI_CMD: 2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd ((UINT8)(p_msg->event & BT_SUB_EVT_MASK), p_msg); 2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(OBX_INCLUDED) && OBX_INCLUDED == TRUE) 2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(OBX_SERVER_INCLUDED) && OBX_SERVER_INCLUDED == TRUE) 2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_OBX_SR_MSG: 2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project obx_sr_proc_evt((tOBX_PORT_EVT *)(p_msg + 1)); 2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf (p_msg); 2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_OBX_SR_L2C_MSG: 2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project obx_sr_proc_l2c_evt((tOBX_L2C_EVT_MSG *)(p_msg + 1)); 2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf (p_msg); 2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(OBX_CLIENT_INCLUDED) && OBX_CLIENT_INCLUDED == TRUE) 2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_OBX_CL_MSG: 2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project obx_cl_proc_evt((tOBX_PORT_EVT *)(p_msg + 1)); 2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf (p_msg); 2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_OBX_CL_L2C_MSG: 2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project obx_cl_proc_l2c_evt((tOBX_L2C_EVT_MSG *)(p_msg + 1)); 2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf (p_msg); 2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(BIP_INCLUDED) && BIP_INCLUDED == TRUE) 2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_BIP_CMDS : 2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bip_proc_btu_event(p_msg); 2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf (p_msg); 2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BIP */ 3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BPP_SND_INCLUDED == TRUE || BPP_INCLUDED == TRUE) 3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_BPP_PR_CMDS: 3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bpp_pr_proc_event(p_msg); 3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf (p_msg); 3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_BPP_SND_CMDS: 3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bpp_snd_proc_event(p_msg); 3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf (p_msg); 3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BPP */ 3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* OBX */ 3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(SAP_SERVER_INCLUDED) && SAP_SERVER_INCLUDED == TRUE) 3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_BTU_SAP : 3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sap_proc_btu_event(p_msg); 3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf (p_msg); 3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* SAP */ 3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(GAP_CONN_INCLUDED) && GAP_CONN_INCLUDED == TRUE && GAP_CONN_POST_EVT_INCLUDED == TRUE) 3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_GAP_MSG : 3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project gap_proc_btu_event(p_msg); 3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf (p_msg); 3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_START_TIMER : 3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Start free running 1 second timer for list management */ 3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_start_timer (TIMER_0, GKI_SECS_TO_TICKS (1), TRUE); 3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf (p_msg); 3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 332ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BT_EVT_TO_STOP_TIMER: 333ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (btu_cb.timer_queue.p_first == NULL) 334ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 335ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta GKI_stop_timer(TIMER_0); 336ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 337ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta GKI_freebuf (p_msg); 338ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 339ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if defined(QUICK_TIMER_TICKS_PER_SEC) && (QUICK_TIMER_TICKS_PER_SEC > 0) 3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_START_QUICK_TIMER : 3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_start_timer (TIMER_2, QUICK_TIMER_TICKS, TRUE); 3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf (p_msg); 3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project i = 0; 3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project mask = (UINT16) (p_msg->event & BT_EVT_MASK); 3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project handled = FALSE; 3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (; !handled && i < BTU_MAX_REG_EVENT; i++) 3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btu_cb.event_reg[i].event_cb == NULL) 3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project continue; 3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (mask == btu_cb.event_reg[i].event_range) 3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btu_cb.event_reg[i].event_cb) 3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_cb.event_reg[i].event_cb(p_msg); 3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project handled = TRUE; 3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (handled == FALSE) 3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf (p_msg); 3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (event & TIMER_0_EVT_MASK) 3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project TIMER_LIST_ENT *p_tle; 3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_update_timer_list (&btu_cb.timer_queue, 1); 3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while ((btu_cb.timer_queue.p_first) && (!btu_cb.timer_queue.p_first->ticks)) 3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_tle = btu_cb.timer_queue.p_first; 3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_remove_from_timer_list (&btu_cb.timer_queue, p_tle); 3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (p_tle->event) 3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_BTM_DEV_CTL: 3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_dev_timeout(p_tle); 3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_BTM_ACL: 3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_acl_timeout(p_tle); 3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_L2CAP_LINK: 3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_L2CAP_CHNL: 3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_L2CAP_HOLD: 4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_L2CAP_INFO: 4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_L2CAP_FCR_ACK: 4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project l2c_process_timeout (p_tle); 4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_SDP: 4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sdp_conn_timeout ((tCONN_CB *)p_tle->param); 4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_BTM_RMT_NAME: 4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_inq_rmt_name_failed(); 4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(RFCOMM_INCLUDED) && RFCOMM_INCLUDED == TRUE) 4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_RFCOMM_MFC: 4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_RFCOMM_PORT: 4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project rfcomm_process_timeout (p_tle); 4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* If defined(RFCOMM_INCLUDED) && RFCOMM_INCLUDED == TRUE */ 4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ((defined(BNEP_INCLUDED) && BNEP_INCLUDED == TRUE)) 4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_BNEP: 4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bnep_process_timeout(p_tle); 4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(AVDT_INCLUDED) && AVDT_INCLUDED == TRUE) 4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_AVDT_CCB_RET: 4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_AVDT_CCB_RSP: 4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_AVDT_CCB_IDLE: 4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_AVDT_SCB_TC: 4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_process_timeout(p_tle); 4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(OBX_INCLUDED) && OBX_INCLUDED == TRUE) 4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(OBX_CLIENT_INCLUDED) && OBX_CLIENT_INCLUDED == TRUE) 4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_OBX_CLIENT_TO: 4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project obx_cl_timeout(p_tle); 4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(OBX_SERVER_INCLUDED) && OBX_SERVER_INCLUDED == TRUE) 4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_OBX_SERVER_TO: 4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project obx_sr_timeout(p_tle); 4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_OBX_SVR_SESS_TO: 4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project obx_sr_sess_timeout(p_tle); 4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(SAP_SERVER_INCLUDED) && SAP_SERVER_INCLUDED == TRUE) 4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_SAP_TO: 4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sap_process_timeout(p_tle); 4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_BTU_CMD_CMPL: 4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_cmd_timeout((UINT8)(p_tle->event - BTU_TTYPE_BTU_CMD_CMPL)); 4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(HID_HOST_INCLUDED) && HID_HOST_INCLUDED == TRUE) 4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_HID_HOST_REPAGE_TO : 4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project hidh_proc_repage_timeout(p_tle); 4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(BLE_INCLUDED) && BLE_INCLUDED == TRUE) 4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_BLE_INQUIRY: 4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_BLE_GAP_LIM_DISC: 4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_BLE_RANDOM_ADDR: 4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_ble_timeout(p_tle); 4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_ATT_WAIT_FOR_RSP: 4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project gatt_rsp_timeout(p_tle); 4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_ATT_WAIT_FOR_IND_ACK: 4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project gatt_ind_ack_timeout(p_tle); 4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(SMP_INCLUDED) && SMP_INCLUDED == TRUE) 4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_SMP_PAIRING_CMD: 4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project smp_rsp_timeout(p_tle); 4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (MCA_INCLUDED == TRUE) 4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_MCA_CCB_RSP: 4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project mca_process_timeout(p_tle); 4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_USER_FUNC: 4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tUSER_TIMEOUT_FUNC *p_uf = (tUSER_TIMEOUT_FUNC *)p_tle->param; 5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*p_uf)(p_tle); 5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project i = 0; 5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project handled = FALSE; 5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (; !handled && i < BTU_MAX_REG_TIMER; i++) 5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btu_cb.timer_reg[i].timer_cb == NULL) 5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project continue; 5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btu_cb.timer_reg[i].p_tle == p_tle) 5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_cb.timer_reg[i].timer_cb(p_tle); 5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project handled = TRUE; 5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if timer list is empty stop periodic GKI timer */ 5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btu_cb.timer_queue.p_first == NULL) 5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_stop_timer(TIMER_0); 5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if defined(QUICK_TIMER_TICKS_PER_SEC) && (QUICK_TIMER_TICKS_PER_SEC > 0) 5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (event & TIMER_2_EVT_MASK) 5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_process_quick_timer_evt(); 5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (RPC_INCLUDED == TRUE) 5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if RPC message queue event */ 5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (event & RPCGEN_MSG_EVT) 5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_msg = (BT_HDR *) GKI_read_mbox(RPCGEN_MSG_MBOX)) != NULL) 5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project RPCT_RpcgenMsg(p_msg); /* handle RPC message queue */ 5445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(BTU_BTA_INCLUDED) && BTU_BTA_INCLUDED == TRUE) 5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (event & TASK_MBOX_2_EVT_MASK) 5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while ((p_msg = (BT_HDR *) GKI_read_mbox(TASK_MBOX_2)) != NULL) 5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_event(p_msg); 5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (event & TIMER_1_EVT_MASK) 5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_timer_update(); 5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (event & EVENT_MASK(APPL_EVT_7)) 5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return(0); 5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btu_start_timer 5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Start a timer for the specified amount of time. 5745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** NOTE: The timeout resolution is in SECONDS! (Even 5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** though the timer structure field is ticks) 5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btu_start_timer (TIMER_LIST_ENT *p_tle, UINT16 type, UINT32 timeout) 5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p_msg; 583c16715fe1f36984dd3d8e78a4662806a8473b0bczzy GKI_disable(); 5845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if timer list is currently empty, start periodic GKI timer */ 5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btu_cb.timer_queue.p_first == NULL) 5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if timer starts on other than BTU task */ 5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (GKI_get_taskid() != BTU_TASK) 5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* post event to start timer in BTU task */ 5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_msg = (BT_HDR *)GKI_getbuf(BT_HDR_SIZE)) != NULL) 5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->event = BT_EVT_TO_START_TIMER; 5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_send_msg (BTU_TASK, TASK_MBOX_0, p_msg); 5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Start free running 1 second timer for list management */ 6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_start_timer (TIMER_0, GKI_SECS_TO_TICKS (1), TRUE); 6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_remove_from_timer_list (&btu_cb.timer_queue, p_tle); 6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_tle->event = type; 6075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_tle->ticks = timeout; /* Save the number of seconds for the timer */ 6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_add_to_timer_list (&btu_cb.timer_queue, p_tle); 610c16715fe1f36984dd3d8e78a4662806a8473b0bczzy GKI_enable(); 6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btu_remaining_time 6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Return amount of time to expire 6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns time in second 6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT32 btu_remaining_time (TIMER_LIST_ENT *p_tle) 6235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return(GKI_get_remaining_ticks (&btu_cb.timer_queue, p_tle)); 6255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btu_stop_timer 6305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Stop a timer. 6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btu_stop_timer (TIMER_LIST_ENT *p_tle) 6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 638ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BT_HDR *p_msg; 639c16715fe1f36984dd3d8e78a4662806a8473b0bczzy GKI_disable(); 6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_remove_from_timer_list (&btu_cb.timer_queue, p_tle); 6415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 642ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* if timer is stopped on other than BTU task */ 643ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (GKI_get_taskid() != BTU_TASK) 6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 645ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* post event to stop timer in BTU task */ 646ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if ((p_msg = (BT_HDR *)GKI_getbuf(BT_HDR_SIZE)) != NULL) 647ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 648ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_msg->event = BT_EVT_TO_STOP_TIMER; 649ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta GKI_send_msg (BTU_TASK, TASK_MBOX_0, p_msg); 650ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 651ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 652ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else 653ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 654ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* if timer list is empty stop periodic GKI timer */ 655ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (btu_cb.timer_queue.p_first == NULL) 656ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 657ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta GKI_stop_timer(TIMER_0); 658ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 660c16715fe1f36984dd3d8e78a4662806a8473b0bczzy GKI_enable(); 6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if defined(QUICK_TIMER_TICKS_PER_SEC) && (QUICK_TIMER_TICKS_PER_SEC > 0) 6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btu_start_quick_timer 6675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Start a timer for the specified amount of time. 6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** NOTE: The timeout resolution depends on including modules. 6705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** QUICK_TIMER_TICKS_PER_SEC should be used to convert from 6715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** time to ticks. 6725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 6755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btu_start_quick_timer (TIMER_LIST_ENT *p_tle, UINT16 type, UINT32 timeout) 6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p_msg; 6805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 681c16715fe1f36984dd3d8e78a4662806a8473b0bczzy GKI_disable(); 6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if timer list is currently empty, start periodic GKI timer */ 6835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btu_cb.quick_timer_queue.p_first == NULL) 6845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* script test calls stack API without posting event */ 6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (GKI_get_taskid() != BTU_TASK) 6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* post event to start timer in BTU task */ 6895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_msg = (BT_HDR *)GKI_getbuf(BT_HDR_SIZE)) != NULL) 6905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->event = BT_EVT_TO_START_QUICK_TIMER; 6925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_send_msg (BTU_TASK, TASK_MBOX_0, p_msg); 6935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 6965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_start_timer(TIMER_2, QUICK_TIMER_TICKS, TRUE); 6975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_remove_from_timer_list (&btu_cb.quick_timer_queue, p_tle); 7005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_tle->event = type; 7025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_tle->ticks = timeout; /* Save the number of ticks for the timer */ 7035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_add_to_timer_list (&btu_cb.quick_timer_queue, p_tle); 705c16715fe1f36984dd3d8e78a4662806a8473b0bczzy GKI_enable(); 7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btu_stop_quick_timer 7125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Stop a timer. 7145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 7165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btu_stop_quick_timer (TIMER_LIST_ENT *p_tle) 7195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 720c16715fe1f36984dd3d8e78a4662806a8473b0bczzy GKI_disable(); 7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_remove_from_timer_list (&btu_cb.quick_timer_queue, p_tle); 7225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if timer list is empty stop periodic GKI timer */ 7245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btu_cb.quick_timer_queue.p_first == NULL) 7255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_stop_timer(TIMER_2); 7275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 728c16715fe1f36984dd3d8e78a4662806a8473b0bczzy GKI_enable(); 7295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btu_process_quick_timer_evt 7345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Process quick timer event 7365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 7385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btu_process_quick_timer_evt(void) 7415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project process_quick_timer_evt(&btu_cb.quick_timer_queue); 7435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if timer list is empty stop periodic GKI timer */ 7455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btu_cb.quick_timer_queue.p_first == NULL) 7465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_stop_timer(TIMER_2); 7485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function process_quick_timer_evt 7545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Process quick timer event 7565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 7585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid process_quick_timer_evt(TIMER_LIST_Q *p_tlq) 7615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project TIMER_LIST_ENT *p_tle; 7635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_update_timer_list (p_tlq, 1); 7655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while ((p_tlq->p_first) && (!p_tlq->p_first->ticks)) 7675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_tle = p_tlq->p_first; 7695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_remove_from_timer_list (p_tlq, p_tle); 7705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (p_tle->event) 7725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_L2CAP_CHNL: /* monitor or retransmission timer */ 7745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_L2CAP_FCR_ACK: /* ack timer */ 7755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project l2c_process_timeout (p_tle); 7765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 7775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 7795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 7805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* defined(QUICK_TIMER_TICKS_PER_SEC) && (QUICK_TIMER_TICKS_PER_SEC > 0) */ 7845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btu_register_timer (TIMER_LIST_ENT *p_tle, UINT16 type, UINT32 timeout, tBTU_TIMER_CALLBACK timer_cb) 7885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 i = 0; 7905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project INT8 first = -1; 7915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (; i < BTU_MAX_REG_TIMER; i++) 7925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btu_cb.timer_reg[i].p_tle == NULL && first < 0) 7945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project first = i; 7955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btu_cb.timer_reg[i].p_tle == p_tle) 7965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_cb.timer_reg[i].timer_cb = timer_cb; 7985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_start_timer(p_tle, type, timeout); 7995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project first = -1; 8005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 8015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (first >= 0 && first < BTU_MAX_REG_TIMER) 8055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_cb.timer_reg[first].timer_cb = timer_cb; 8075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_cb.timer_reg[first].p_tle = p_tle; 8085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_start_timer(p_tle, type, timeout); 8095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btu_deregister_timer(TIMER_LIST_ENT *p_tle) 8155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 i = 0; 8175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (; i < BTU_MAX_REG_TIMER; i++) 8195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btu_cb.timer_reg[i].p_tle == p_tle) 8215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_stop_timer(p_tle); 8235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_cb.timer_reg[i].timer_cb = NULL; 8245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_cb.timer_reg[i].p_tle = NULL; 8255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 8265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btu_register_event_range (UINT16 start, tBTU_EVENT_CALLBACK event_cb) 8315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 i = 0; 8335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project INT8 first = -1; 8345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (; i < BTU_MAX_REG_EVENT; i++) 8365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btu_cb.event_reg[i].event_cb == NULL && first < 0) 8385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project first = i; 8395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btu_cb.event_reg[i].event_range == start) 8415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_cb.event_reg[i].event_cb = event_cb; 8435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!event_cb) 8455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_cb.event_reg[i].event_range = 0; 8465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project first = -1; 8485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if not deregistering && an empty index was found in range, register */ 8525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (event_cb && first >= 0 && first < BTU_MAX_REG_EVENT) 8535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_cb.event_reg[first].event_range = start; 8555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_cb.event_reg[first].event_cb = event_cb; 8565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btu_deregister_event_range (UINT16 range) 8615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_register_event_range(range, NULL); 8635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(HCILP_INCLUDED) && HCILP_INCLUDED == TRUE) 8665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 8675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btu_check_bt_sleep 8695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to check if controller can go to sleep. 8715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 8735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 8755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btu_check_bt_sleep (void) 8765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((btu_cb.hci_cmd_cb[LOCAL_BR_EDR_CONTROLLER_ID].cmd_cmpl_q.count == 0) 8785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &&(btu_cb.hci_cmd_cb[LOCAL_BR_EDR_CONTROLLER_ID].cmd_xmit_q.count == 0)) 8795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (l2cb.controller_xmit_window == l2cb.num_lm_acl_bufs) 8815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* enable dev to sleep in the cmd cplt and cmd status only and num cplt packet */ 8835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HCI_LP_ALLOW_BT_DEVICE_SLEEP(); 8845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 888