btu_task.c revision ead3cde4bac0c3e32cd31f149093f004eef8ceeb
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 */ 172ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta event = GKI_wait (0xFFFF, 0); 173ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (event & EVENT_MASK(GKI_SHUTDOWN_EVT)) 174ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* indicates BT ENABLE abort */ 175ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return (0); 1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Initialize the mandatory core stack control blocks 1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (BTU, BTM, L2CAP, and SDP) 1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_init_core(); 1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Initialize any optional stack components */ 1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTE_InitStack(); 1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(BTU_BTA_INCLUDED) && BTU_BTA_INCLUDED == TRUE) 1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_init(); 1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Initialise platform trace levels at this point as BTE_InitStack() and bta_sys_init() 1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * reset the control blocks and preset the trace level with XXX_INITIAL_TRACE_LEVEL 1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ( BT_USE_TRACES==TRUE ) 1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTE_InitTraceLevels(); 1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Send a startup evt message to BTIF_TASK to kickstart the init procedure */ 1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_send_event(BTIF_TASK, BT_EVT_TRIGGER_STACK_INIT); 1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project raise_priority_a2dp(TASK_HIGH_BTU); 2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Wait for, and process, events */ 2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (;;) 2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project event = GKI_wait (0xFFFF, 0); 2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (event & TASK_MBOX_0_EVT_MASK) 2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Process all messages in the queue */ 2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while ((p_msg = (BT_HDR *) GKI_read_mbox (BTU_HCI_RCV_MBOX)) != NULL) 2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Determine the input message type. */ 2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (p_msg->event & BT_EVT_MASK) 2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_BTU_HCI_ACL: 2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* All Acl Data goes to L2CAP */ 2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project l2c_rcv_acl_data (p_msg); 2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_BTU_L2C_SEG_XMIT: 2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* L2CAP segment transmit complete */ 2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project l2c_link_segments_xmitted (p_msg); 2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_BTU_HCI_SCO: 2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTM_SCO_INCLUDED == TRUE 2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_route_sco_data (p_msg); 2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_BTU_HCI_EVT: 2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_process_event ((UINT8)(p_msg->event & BT_SUB_EVT_MASK), p_msg); 2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf(p_msg); 2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(HCILP_INCLUDED) && HCILP_INCLUDED == TRUE) 2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If host receives events which it doesn't response to, */ 2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* host should start idle timer to enter sleep mode. */ 2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_check_bt_sleep (); 2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_BTU_HCI_CMD: 2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd ((UINT8)(p_msg->event & BT_SUB_EVT_MASK), p_msg); 2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(OBX_INCLUDED) && OBX_INCLUDED == TRUE) 2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(OBX_SERVER_INCLUDED) && OBX_SERVER_INCLUDED == TRUE) 2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_OBX_SR_MSG: 2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project obx_sr_proc_evt((tOBX_PORT_EVT *)(p_msg + 1)); 2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf (p_msg); 2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_OBX_SR_L2C_MSG: 2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project obx_sr_proc_l2c_evt((tOBX_L2C_EVT_MSG *)(p_msg + 1)); 2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf (p_msg); 2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(OBX_CLIENT_INCLUDED) && OBX_CLIENT_INCLUDED == TRUE) 2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_OBX_CL_MSG: 2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project obx_cl_proc_evt((tOBX_PORT_EVT *)(p_msg + 1)); 2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf (p_msg); 2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_OBX_CL_L2C_MSG: 2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project obx_cl_proc_l2c_evt((tOBX_L2C_EVT_MSG *)(p_msg + 1)); 2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf (p_msg); 2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(BIP_INCLUDED) && BIP_INCLUDED == TRUE) 2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_BIP_CMDS : 2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bip_proc_btu_event(p_msg); 2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf (p_msg); 2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BIP */ 2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BPP_SND_INCLUDED == TRUE || BPP_INCLUDED == TRUE) 2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_BPP_PR_CMDS: 2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bpp_pr_proc_event(p_msg); 2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf (p_msg); 2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_BPP_SND_CMDS: 2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bpp_snd_proc_event(p_msg); 2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf (p_msg); 2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BPP */ 2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* OBX */ 2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(SAP_SERVER_INCLUDED) && SAP_SERVER_INCLUDED == TRUE) 2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_BTU_SAP : 2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sap_proc_btu_event(p_msg); 2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf (p_msg); 2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* SAP */ 2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(GAP_CONN_INCLUDED) && GAP_CONN_INCLUDED == TRUE && GAP_CONN_POST_EVT_INCLUDED == TRUE) 2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_GAP_MSG : 2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project gap_proc_btu_event(p_msg); 2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf (p_msg); 3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_START_TIMER : 3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Start free running 1 second timer for list management */ 3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_start_timer (TIMER_0, GKI_SECS_TO_TICKS (1), TRUE); 3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf (p_msg); 3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 308ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BT_EVT_TO_STOP_TIMER: 309ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (btu_cb.timer_queue.p_first == NULL) 310ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 311ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta GKI_stop_timer(TIMER_0); 312ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 313ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta GKI_freebuf (p_msg); 314ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 315ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if defined(QUICK_TIMER_TICKS_PER_SEC) && (QUICK_TIMER_TICKS_PER_SEC > 0) 3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_TO_START_QUICK_TIMER : 3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_start_timer (TIMER_2, QUICK_TIMER_TICKS, TRUE); 3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf (p_msg); 3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project i = 0; 3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project mask = (UINT16) (p_msg->event & BT_EVT_MASK); 3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project handled = FALSE; 3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (; !handled && i < BTU_MAX_REG_EVENT; i++) 3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btu_cb.event_reg[i].event_cb == NULL) 3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project continue; 3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (mask == btu_cb.event_reg[i].event_range) 3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btu_cb.event_reg[i].event_cb) 3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_cb.event_reg[i].event_cb(p_msg); 3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project handled = TRUE; 3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (handled == FALSE) 3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf (p_msg); 3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (event & TIMER_0_EVT_MASK) 3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project TIMER_LIST_ENT *p_tle; 3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_update_timer_list (&btu_cb.timer_queue, 1); 3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while ((btu_cb.timer_queue.p_first) && (!btu_cb.timer_queue.p_first->ticks)) 3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_tle = btu_cb.timer_queue.p_first; 3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_remove_from_timer_list (&btu_cb.timer_queue, p_tle); 3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (p_tle->event) 3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_BTM_DEV_CTL: 3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_dev_timeout(p_tle); 3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_BTM_ACL: 3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_acl_timeout(p_tle); 3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_L2CAP_LINK: 3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_L2CAP_CHNL: 3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_L2CAP_HOLD: 3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_L2CAP_INFO: 3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_L2CAP_FCR_ACK: 3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project l2c_process_timeout (p_tle); 3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_SDP: 3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sdp_conn_timeout ((tCONN_CB *)p_tle->param); 3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_BTM_RMT_NAME: 3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_inq_rmt_name_failed(); 3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(RFCOMM_INCLUDED) && RFCOMM_INCLUDED == TRUE) 3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_RFCOMM_MFC: 3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_RFCOMM_PORT: 3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project rfcomm_process_timeout (p_tle); 3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* If defined(RFCOMM_INCLUDED) && RFCOMM_INCLUDED == TRUE */ 3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ((defined(BNEP_INCLUDED) && BNEP_INCLUDED == TRUE)) 3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_BNEP: 4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bnep_process_timeout(p_tle); 4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(AVDT_INCLUDED) && AVDT_INCLUDED == TRUE) 4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_AVDT_CCB_RET: 4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_AVDT_CCB_RSP: 4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_AVDT_CCB_IDLE: 4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_AVDT_SCB_TC: 4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project avdt_process_timeout(p_tle); 4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(OBX_INCLUDED) && OBX_INCLUDED == TRUE) 4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(OBX_CLIENT_INCLUDED) && OBX_CLIENT_INCLUDED == TRUE) 4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_OBX_CLIENT_TO: 4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project obx_cl_timeout(p_tle); 4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(OBX_SERVER_INCLUDED) && OBX_SERVER_INCLUDED == TRUE) 4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_OBX_SERVER_TO: 4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project obx_sr_timeout(p_tle); 4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_OBX_SVR_SESS_TO: 4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project obx_sr_sess_timeout(p_tle); 4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(SAP_SERVER_INCLUDED) && SAP_SERVER_INCLUDED == TRUE) 4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_SAP_TO: 4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sap_process_timeout(p_tle); 4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_BTU_CMD_CMPL: 4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_cmd_timeout((UINT8)(p_tle->event - BTU_TTYPE_BTU_CMD_CMPL)); 4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(HID_HOST_INCLUDED) && HID_HOST_INCLUDED == TRUE) 4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_HID_HOST_REPAGE_TO : 4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project hidh_proc_repage_timeout(p_tle); 4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(BLE_INCLUDED) && BLE_INCLUDED == TRUE) 4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_BLE_INQUIRY: 4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_BLE_GAP_LIM_DISC: 4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_BLE_RANDOM_ADDR: 4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_ble_timeout(p_tle); 4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_ATT_WAIT_FOR_RSP: 4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project gatt_rsp_timeout(p_tle); 4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_ATT_WAIT_FOR_IND_ACK: 4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project gatt_ind_ack_timeout(p_tle); 4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(SMP_INCLUDED) && SMP_INCLUDED == TRUE) 4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_SMP_PAIRING_CMD: 4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project smp_rsp_timeout(p_tle); 4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (MCA_INCLUDED == TRUE) 4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_MCA_CCB_RSP: 4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project mca_process_timeout(p_tle); 4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_USER_FUNC: 4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tUSER_TIMEOUT_FUNC *p_uf = (tUSER_TIMEOUT_FUNC *)p_tle->param; 4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*p_uf)(p_tle); 4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project i = 0; 4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project handled = FALSE; 4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (; !handled && i < BTU_MAX_REG_TIMER; i++) 4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btu_cb.timer_reg[i].timer_cb == NULL) 4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project continue; 4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btu_cb.timer_reg[i].p_tle == p_tle) 4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_cb.timer_reg[i].timer_cb(p_tle); 4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project handled = TRUE; 4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if timer list is empty stop periodic GKI timer */ 5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btu_cb.timer_queue.p_first == NULL) 5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_stop_timer(TIMER_0); 5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if defined(QUICK_TIMER_TICKS_PER_SEC) && (QUICK_TIMER_TICKS_PER_SEC > 0) 5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (event & TIMER_2_EVT_MASK) 5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_process_quick_timer_evt(); 5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (RPC_INCLUDED == TRUE) 5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if RPC message queue event */ 5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (event & RPCGEN_MSG_EVT) 5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_msg = (BT_HDR *) GKI_read_mbox(RPCGEN_MSG_MBOX)) != NULL) 5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project RPCT_RpcgenMsg(p_msg); /* handle RPC message queue */ 5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(BTU_BTA_INCLUDED) && BTU_BTA_INCLUDED == TRUE) 5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (event & TASK_MBOX_2_EVT_MASK) 5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while ((p_msg = (BT_HDR *) GKI_read_mbox(TASK_MBOX_2)) != NULL) 5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_event(p_msg); 5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (event & TIMER_1_EVT_MASK) 5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_timer_update(); 5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (event & EVENT_MASK(APPL_EVT_7)) 5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return(0); 5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btu_start_timer 5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Start a timer for the specified amount of time. 5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** NOTE: The timeout resolution is in SECONDS! (Even 5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** though the timer structure field is ticks) 5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btu_start_timer (TIMER_LIST_ENT *p_tle, UINT16 type, UINT32 timeout) 5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p_msg; 5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if timer list is currently empty, start periodic GKI timer */ 5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btu_cb.timer_queue.p_first == NULL) 5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if timer starts on other than BTU task */ 5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (GKI_get_taskid() != BTU_TASK) 5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* post event to start timer in BTU task */ 5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_msg = (BT_HDR *)GKI_getbuf(BT_HDR_SIZE)) != NULL) 5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->event = BT_EVT_TO_START_TIMER; 5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_send_msg (BTU_TASK, TASK_MBOX_0, p_msg); 5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 5735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Start free running 1 second timer for list management */ 5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_start_timer (TIMER_0, GKI_SECS_TO_TICKS (1), TRUE); 5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_remove_from_timer_list (&btu_cb.timer_queue, p_tle); 5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_tle->event = type; 5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_tle->ticks = timeout; /* Save the number of seconds for the timer */ 5835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_add_to_timer_list (&btu_cb.timer_queue, p_tle); 5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btu_remaining_time 5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Return amount of time to expire 5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns time in second 5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT32 btu_remaining_time (TIMER_LIST_ENT *p_tle) 5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return(GKI_get_remaining_ticks (&btu_cb.timer_queue, p_tle)); 5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btu_stop_timer 6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Stop a timer. 6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btu_stop_timer (TIMER_LIST_ENT *p_tle) 6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 612ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BT_HDR *p_msg; 6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_remove_from_timer_list (&btu_cb.timer_queue, p_tle); 6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 615ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* if timer is stopped on other than BTU task */ 616ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (GKI_get_taskid() != BTU_TASK) 6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 618ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* post event to stop timer in BTU task */ 619ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if ((p_msg = (BT_HDR *)GKI_getbuf(BT_HDR_SIZE)) != NULL) 620ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 621ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_msg->event = BT_EVT_TO_STOP_TIMER; 622ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta GKI_send_msg (BTU_TASK, TASK_MBOX_0, p_msg); 623ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 624ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 625ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else 626ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 627ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* if timer list is empty stop periodic GKI timer */ 628ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (btu_cb.timer_queue.p_first == NULL) 629ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 630ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta GKI_stop_timer(TIMER_0); 631ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if defined(QUICK_TIMER_TICKS_PER_SEC) && (QUICK_TIMER_TICKS_PER_SEC > 0) 6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btu_start_quick_timer 6395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Start a timer for the specified amount of time. 6415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** NOTE: The timeout resolution depends on including modules. 6425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** QUICK_TIMER_TICKS_PER_SEC should be used to convert from 6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** time to ticks. 6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btu_start_quick_timer (TIMER_LIST_ENT *p_tle, UINT16 type, UINT32 timeout) 6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p_msg; 6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if timer list is currently empty, start periodic GKI timer */ 6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btu_cb.quick_timer_queue.p_first == NULL) 6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* script test calls stack API without posting event */ 6575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (GKI_get_taskid() != BTU_TASK) 6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* post event to start timer in BTU task */ 6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_msg = (BT_HDR *)GKI_getbuf(BT_HDR_SIZE)) != NULL) 6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->event = BT_EVT_TO_START_QUICK_TIMER; 6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_send_msg (BTU_TASK, TASK_MBOX_0, p_msg); 6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 6675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_start_timer(TIMER_2, QUICK_TIMER_TICKS, TRUE); 6685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_remove_from_timer_list (&btu_cb.quick_timer_queue, p_tle); 6715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_tle->event = type; 6735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_tle->ticks = timeout; /* Save the number of ticks for the timer */ 6745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_add_to_timer_list (&btu_cb.quick_timer_queue, p_tle); 6765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btu_stop_quick_timer 6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Stop a timer. 6845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btu_stop_quick_timer (TIMER_LIST_ENT *p_tle) 6895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_remove_from_timer_list (&btu_cb.quick_timer_queue, p_tle); 6915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if timer list is empty stop periodic GKI timer */ 6935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btu_cb.quick_timer_queue.p_first == NULL) 6945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_stop_timer(TIMER_2); 6965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btu_process_quick_timer_evt 7025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Process quick timer event 7045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btu_process_quick_timer_evt(void) 7095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project process_quick_timer_evt(&btu_cb.quick_timer_queue); 7115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if timer list is empty stop periodic GKI timer */ 7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btu_cb.quick_timer_queue.p_first == NULL) 7145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_stop_timer(TIMER_2); 7165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function process_quick_timer_evt 7225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Process quick timer event 7245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 7265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid process_quick_timer_evt(TIMER_LIST_Q *p_tlq) 7295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project TIMER_LIST_ENT *p_tle; 7315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_update_timer_list (p_tlq, 1); 7335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while ((p_tlq->p_first) && (!p_tlq->p_first->ticks)) 7355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_tle = p_tlq->p_first; 7375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_remove_from_timer_list (p_tlq, p_tle); 7385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (p_tle->event) 7405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_L2CAP_CHNL: /* monitor or retransmission timer */ 7425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTU_TTYPE_L2CAP_FCR_ACK: /* ack timer */ 7435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project l2c_process_timeout (p_tle); 7445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 7455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 7475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 7485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* defined(QUICK_TIMER_TICKS_PER_SEC) && (QUICK_TIMER_TICKS_PER_SEC > 0) */ 7525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btu_register_timer (TIMER_LIST_ENT *p_tle, UINT16 type, UINT32 timeout, tBTU_TIMER_CALLBACK timer_cb) 7565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 i = 0; 7585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project INT8 first = -1; 7595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (; i < BTU_MAX_REG_TIMER; i++) 7605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btu_cb.timer_reg[i].p_tle == NULL && first < 0) 7625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project first = i; 7635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btu_cb.timer_reg[i].p_tle == p_tle) 7645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_cb.timer_reg[i].timer_cb = timer_cb; 7665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_start_timer(p_tle, type, timeout); 7675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project first = -1; 7685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 7695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (first >= 0 && first < BTU_MAX_REG_TIMER) 7735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_cb.timer_reg[first].timer_cb = timer_cb; 7755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_cb.timer_reg[first].p_tle = p_tle; 7765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_start_timer(p_tle, type, timeout); 7775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btu_deregister_timer(TIMER_LIST_ENT *p_tle) 7835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 i = 0; 7855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (; i < BTU_MAX_REG_TIMER; i++) 7875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btu_cb.timer_reg[i].p_tle == p_tle) 7895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_stop_timer(p_tle); 7915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_cb.timer_reg[i].timer_cb = NULL; 7925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_cb.timer_reg[i].p_tle = NULL; 7935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 7945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btu_register_event_range (UINT16 start, tBTU_EVENT_CALLBACK event_cb) 7995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 i = 0; 8015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project INT8 first = -1; 8025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (; i < BTU_MAX_REG_EVENT; i++) 8045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btu_cb.event_reg[i].event_cb == NULL && first < 0) 8065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project first = i; 8075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btu_cb.event_reg[i].event_range == start) 8095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_cb.event_reg[i].event_cb = event_cb; 8115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!event_cb) 8135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_cb.event_reg[i].event_range = 0; 8145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project first = -1; 8165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if not deregistering && an empty index was found in range, register */ 8205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (event_cb && first >= 0 && first < BTU_MAX_REG_EVENT) 8215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_cb.event_reg[first].event_range = start; 8235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_cb.event_reg[first].event_cb = event_cb; 8245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btu_deregister_event_range (UINT16 range) 8295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_register_event_range(range, NULL); 8315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(HCILP_INCLUDED) && HCILP_INCLUDED == TRUE) 8345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 8355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btu_check_bt_sleep 8375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to check if controller can go to sleep. 8395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 8415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 8435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btu_check_bt_sleep (void) 8445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((btu_cb.hci_cmd_cb[LOCAL_BR_EDR_CONTROLLER_ID].cmd_cmpl_q.count == 0) 8465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &&(btu_cb.hci_cmd_cb[LOCAL_BR_EDR_CONTROLLER_ID].cmd_xmit_q.count == 0)) 8475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (l2cb.controller_xmit_window == l2cb.num_lm_acl_bufs) 8495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* enable dev to sleep in the cmd cplt and cmd status only and num cplt packet */ 8515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HCI_LP_ALLOW_BT_DEVICE_SLEEP(); 8525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 856