16ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach/****************************************************************************** 2e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach * 3e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach * Copyright (C) 2009-2012 Broadcom Corporation 4e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach * 56ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * Licensed under the Apache License, Version 2.0 (the "License"); 66ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * you may not use this file except in compliance with the License. 76ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * You may obtain a copy of the License at: 8e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach * 96ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * http://www.apache.org/licenses/LICENSE-2.0 10e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach * 116ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * Unless required by applicable law or agreed to in writing, software 126ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * distributed under the License is distributed on an "AS IS" BASIS, 136ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 146ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * See the License for the specific language governing permissions and 156ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * limitations under the License. 16e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach * 176ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach ******************************************************************************/ 18ad2d45b15aae80ba254277c3d1fa036207d8b926Matthew Xie 19e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#ifndef BTIF_COMMON_H 20e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#define BTIF_COMMON_H 21e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach 22e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#include "data_types.h" 23e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#include "bt_types.h" 24e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#include "bta_api.h" 25e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach 26e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#ifndef LOG_TAG 27e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#error "LOG_TAG not defined, please add in .c file prior to including bt_common.h" 28e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#endif 29e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach 30e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#include <utils/Log.h> 31e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach 326ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach/******************************************************************************* 33e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach** Constants & Macros 346ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach********************************************************************************/ 35e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach 366ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach#define ASSERTC(cond, msg, val) if (!(cond)) { ALOGE( \ 376ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach "### ASSERT : %s line %d %s (%d) ###", __FILE__, __LINE__, msg, val);} 38e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach 39e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* Calculate start of event enumeration; id is top 8 bits of event */ 40e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#define BTIF_SIG_START(id) ((id) << 8) 41e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach 426ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach/* For upstream the MSB bit is always SET */ 43e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#define BTIF_SIG_CB_BIT (0x8000) 44e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#define BTIF_SIG_CB_START(id) (((id) << 8) | BTIF_SIG_CB_BIT) 45e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach 46e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTIF sub-systems */ 476ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach#define BTIF_CORE 0 48e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#define BTIF_DM 1 49e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#define BTIF_HFP 2 50e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#define BTIF_AV 3 518e469244c3df905f69183098bac204c776936e6bKausik Sinnaswamy#define BTIF_PAN 4 52e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach 53e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbachextern bt_callbacks_t *bt_hal_cbacks; 54e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach 55254588bfe6c3e70625b0f725b908598f30f476c8Mattias Agren#define HAL_CBACK(P_CB, P_CBACK, ...)\ 56e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach if (P_CB && P_CB->P_CBACK) { \ 57595bced8e7c280e37a75b9bf9c1f36263434041cMatthew Xie ALOGD("HAL %s->%s", #P_CB, #P_CBACK); \ 58e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach P_CB->P_CBACK(__VA_ARGS__); \ 59e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach } \ 60e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach else { \ 61e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach ASSERTC(0, "Callback is NULL", 0); \ 62e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach } 63e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach 646ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach/** 656ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * BTIF events for requests that require context switch to btif task 666ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * on downstreams path 676ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach */ 68e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbachenum 69e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach{ 70e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach BTIF_CORE_API_START = BTIF_SIG_START(BTIF_CORE), 71e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach BTIF_CORE_STORAGE_NO_ACTION, 72e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach BTIF_CORE_STORAGE_ADAPTER_WRITE, 73e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach BTIF_CORE_STORAGE_ADAPTER_READ, 74e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach BTIF_CORE_STORAGE_ADAPTER_READ_ALL, 75e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach BTIF_CORE_STORAGE_REMOTE_WRITE, 76e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach BTIF_CORE_STORAGE_REMOTE_READ, 77e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach BTIF_CORE_STORAGE_REMOTE_READ_ALL, 78254588bfe6c3e70625b0f725b908598f30f476c8Mattias Agren BTIF_CORE_STORAGE_READ_ALL, 79e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach BTIF_CORE_STORAGE_NOTIFY_STATUS, 80e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach /* add here */ 81e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach 82e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach BTIF_DM_API_START = BTIF_SIG_START(BTIF_DM), 83b23905722d8a1c714d66aaee2da5712694596426Kausik Sinnaswamy BTIF_DM_ENABLE_SERVICE, 84b23905722d8a1c714d66aaee2da5712694596426Kausik Sinnaswamy BTIF_DM_DISABLE_SERVICE, 85e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach /* add here */ 86e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach 87e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach BTIF_HFP_API_START = BTIF_SIG_START(BTIF_HFP), 88e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach /* add here */ 89e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach 90e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach BTIF_AV_API_START = BTIF_SIG_START(BTIF_AV), 91e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach /* add here */ 92e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach}; 93e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach 946ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach/** 956ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * BTIF events for callbacks that require context switch to btif task 966ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * on upstream path - Typically these would be non-BTA events 976ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * that are generated by the BTIF layer. 986ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach */ 99e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbachenum 100e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach{ 101e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach BTIF_CORE_CB_START = BTIF_SIG_CB_START(BTIF_CORE), 102e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach /* add here */ 103e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach 104e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach BTIF_DM_CB_START = BTIF_SIG_CB_START(BTIF_DM), 105e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach BTIF_DM_CB_DISCOVERY_STARTED, /* Discovery has started */ 106c01f69a35563261eca49bd2083afd7064790940dPriti Aghera BTIF_DM_CB_CREATE_BOND, /* Create bond */ 107c01f69a35563261eca49bd2083afd7064790940dPriti Aghera BTIF_DM_CB_REMOVE_BOND, /*Remove bond */ 108c01f69a35563261eca49bd2083afd7064790940dPriti Aghera BTIF_DM_CB_HID_REMOTE_NAME, /* Remote name callback for HID device */ 1098e469244c3df905f69183098bac204c776936e6bKausik Sinnaswamy BTIF_DM_CB_BOND_STATE_BONDING, 1108e469244c3df905f69183098bac204c776936e6bKausik Sinnaswamy 1112c79674ef766378464559c8645c74db5687280a9Kausik Sinnaswamy BTIF_HFP_CB_START = BTIF_SIG_CB_START(BTIF_HFP), 1122c79674ef766378464559c8645c74db5687280a9Kausik Sinnaswamy BTIF_HFP_CB_AUDIO_CONNECTING, /* HF AUDIO connect has been sent to BTA successfully */ 1132c79674ef766378464559c8645c74db5687280a9Kausik Sinnaswamy 1148e469244c3df905f69183098bac204c776936e6bKausik Sinnaswamy BTIF_PAN_CB_START = BTIF_SIG_CB_START(BTIF_PAN), 1158e469244c3df905f69183098bac204c776936e6bKausik Sinnaswamy BTIF_PAN_CB_DISCONNECTING, /* PAN Disconnect has been sent to BTA successfully */ 116e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach}; 117e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach 11835207a7fe091c5ade3ac3a80acf8366beb6e21daKausik Sinnaswamy/* Macro definitions for BD ADDR persistence */ 1196ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach 1206ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach/** 1216ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * PROPERTY_BT_BDADDR_PATH 1226ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * The property key stores the storage location of Bluetooth Device Address 1236ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach */ 12435207a7fe091c5ade3ac3a80acf8366beb6e21daKausik Sinnaswamy#ifndef PROPERTY_BT_BDADDR_PATH 12535207a7fe091c5ade3ac3a80acf8366beb6e21daKausik Sinnaswamy#define PROPERTY_BT_BDADDR_PATH "ro.bt.bdaddr_path" 12635207a7fe091c5ade3ac3a80acf8366beb6e21daKausik Sinnaswamy#endif 12735207a7fe091c5ade3ac3a80acf8366beb6e21daKausik Sinnaswamy 1286ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach/** 1296ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * PERSIST_BDADDR_PROPERTY 1306ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * If there is no valid bdaddr available from PROPERTY_BT_BDADDR_PATH, 1316ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach * generating a random BDADDR and keeping it in the PERSIST_BDADDR_DROP. 1326ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach */ 13335207a7fe091c5ade3ac3a80acf8366beb6e21daKausik Sinnaswamy#ifndef PERSIST_BDADDR_PROPERTY 13435207a7fe091c5ade3ac3a80acf8366beb6e21daKausik Sinnaswamy#define PERSIST_BDADDR_PROPERTY "persist.service.bdroid.bdaddr" 13535207a7fe091c5ade3ac3a80acf8366beb6e21daKausik Sinnaswamy#endif 13635207a7fe091c5ade3ac3a80acf8366beb6e21daKausik Sinnaswamy 13735207a7fe091c5ade3ac3a80acf8366beb6e21daKausik Sinnaswamy#define FACTORY_BT_BDADDR_STORAGE_LEN 17 13835207a7fe091c5ade3ac3a80acf8366beb6e21daKausik Sinnaswamy 1396ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach 1406ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach/******************************************************************************* 141e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach** Type definitions for callback functions 1426ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach********************************************************************************/ 143e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach 144e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbachtypedef void (tBTIF_CBACK) (UINT16 event, char *p_param); 145e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbachtypedef void (tBTIF_COPY_CBACK) (UINT16 event, char *p_dest, char *p_src); 146e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach 1476ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach 1486ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach/******************************************************************************* 149e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach** Type definitions and return values 1506ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach********************************************************************************/ 151e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach 152e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* this type handles all btif context switches between BTU and HAL */ 153e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbachtypedef struct 154e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach{ 155e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach BT_HDR hdr; 156e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach tBTIF_CBACK* p_cb; /* context switch callback */ 157e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach 158e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach /* parameters passed to callback */ 159e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach UINT16 event; /* message event id */ 160e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach char p_param[0]; /* parameter area needs to be last */ 161e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach} tBTIF_CONTEXT_SWITCH_CBACK; 162e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach 163e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach 1646ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach/******************************************************************************* 165e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach** Functions 1666ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach********************************************************************************/ 1676ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach 1686ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbachbt_status_t btif_transfer_context (tBTIF_CBACK *p_cback, UINT16 event, char* p_params, 1696ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach int param_len, tBTIF_COPY_CBACK *p_copy_cback); 170b23905722d8a1c714d66aaee2da5712694596426Kausik SinnaswamytBTA_SERVICE_MASK btif_get_enabled_services_mask(void); 171b23905722d8a1c714d66aaee2da5712694596426Kausik Sinnaswamybt_status_t btif_enable_service(tBTA_SERVICE_ID service_id); 172b23905722d8a1c714d66aaee2da5712694596426Kausik Sinnaswamybt_status_t btif_disable_service(tBTA_SERVICE_ID service_id); 1732fe476a7b55eea667c854bb40e48648e8a0d5f1dMattias Agrenint btif_is_enabled(void); 174e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach 1756ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach/** 176254588bfe6c3e70625b0f725b908598f30f476c8Mattias Agren * BTIF_Events 177e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach */ 178e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbachvoid btif_enable_bluetooth_evt(tBTA_STATUS status, BD_ADDR local_bd); 179e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbachvoid btif_disable_bluetooth_evt(void); 180e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbachvoid btif_adapter_properties_evt(bt_status_t status, uint32_t num_props, bt_property_t *p_props); 181e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbachvoid btif_remote_properties_evt(bt_status_t status, bt_bdaddr_t *remote_addr, 182e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach uint32_t num_props, bt_property_t *p_props); 183e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#endif /* BTIF_COMMON_H */ 184