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