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