1e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta/*
2e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta * Copyright (C) 2012-2014 The Android Open Source Project
3e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta *
4e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta * Licensed under the Apache License, Version 2.0 (the "License");
5e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta * you may not use this file except in compliance with the License.
6e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta * You may obtain a copy of the License at
7e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta *
8e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta *      http://www.apache.org/licenses/LICENSE-2.0
9e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta *
10e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta * Unless required by applicable law or agreed to in writing, software
11e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta * distributed under the License is distributed on an "AS IS" BASIS,
12e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta * See the License for the specific language governing permissions and
14e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta * limitations under the License.
15e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta */
16e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
17e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta#ifndef ANDROID_INCLUDE_BT_HF_CLIENT_H
18e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta#define ANDROID_INCLUDE_BT_HF_CLIENT_H
19e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
20e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta__BEGIN_DECLS
21e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
22e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef enum {
23e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CONNECTION_STATE_DISCONNECTED = 0,
24e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CONNECTION_STATE_CONNECTING,
25e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CONNECTION_STATE_CONNECTED,
26e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CONNECTION_STATE_SLC_CONNECTED,
27e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CONNECTION_STATE_DISCONNECTING
28e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta} bthf_client_connection_state_t;
29e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
30e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef enum {
31e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_AUDIO_STATE_DISCONNECTED = 0,
32e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_AUDIO_STATE_CONNECTING,
33e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_AUDIO_STATE_CONNECTED,
34e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_AUDIO_STATE_CONNECTED_MSBC,
35e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta} bthf_client_audio_state_t;
36e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
37e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef enum {
38e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_VR_STATE_STOPPED = 0,
39e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_VR_STATE_STARTED
40e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta} bthf_client_vr_state_t;
41e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
42e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef enum {
43e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_VOLUME_TYPE_SPK = 0,
44e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_VOLUME_TYPE_MIC
45e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta} bthf_client_volume_type_t;
46e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
47e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef enum
48e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta{
49e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_NETWORK_STATE_NOT_AVAILABLE = 0,
50e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_NETWORK_STATE_AVAILABLE
51e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta} bthf_client_network_state_t;
52e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
53e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef enum
54e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta{
55e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_SERVICE_TYPE_HOME = 0,
56e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_SERVICE_TYPE_ROAMING
57e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta} bthf_client_service_type_t;
58e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
59e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef enum {
60e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALL_STATE_ACTIVE = 0,
61e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALL_STATE_HELD,
62e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALL_STATE_DIALING,
63e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALL_STATE_ALERTING,
64e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALL_STATE_INCOMING,
65e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALL_STATE_WAITING,
66e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALL_STATE_HELD_BY_RESP_HOLD,
67e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta} bthf_client_call_state_t;
68e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
69e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef enum {
70e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALL_NO_CALLS_IN_PROGRESS = 0,
71e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALL_CALLS_IN_PROGRESS
72e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta} bthf_client_call_t;
73e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
74e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef enum {
75e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALLSETUP_NONE = 0,
76e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALLSETUP_INCOMING,
77e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALLSETUP_OUTGOING,
78e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALLSETUP_ALERTING
79e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
80e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta} bthf_client_callsetup_t;
81e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
82e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef enum {
83e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALLHELD_NONE = 0,
84e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALLHELD_HOLD_AND_ACTIVE,
85e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALLHELD_HOLD,
86e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta} bthf_client_callheld_t;
87e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
88e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef enum {
89e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_RESP_AND_HOLD_HELD = 0,
90e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTRH_CLIENT_RESP_AND_HOLD_ACCEPT,
91e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTRH_CLIENT_RESP_AND_HOLD_REJECT,
92e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta} bthf_client_resp_and_hold_t;
93e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
94e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef enum {
95e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALL_DIRECTION_OUTGOING = 0,
96e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALL_DIRECTION_INCOMING
97e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta} bthf_client_call_direction_t;
98e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
99e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef enum {
100e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALL_MPTY_TYPE_SINGLE = 0,
101e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALL_MPTY_TYPE_MULTI
102e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta} bthf_client_call_mpty_type_t;
103e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
104e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef enum {
105e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CMD_COMPLETE_OK = 0,
106e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CMD_COMPLETE_ERROR,
107e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CMD_COMPLETE_ERROR_NO_CARRIER,
108e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CMD_COMPLETE_ERROR_BUSY,
109e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CMD_COMPLETE_ERROR_NO_ANSWER,
110e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CMD_COMPLETE_ERROR_DELAYED,
111e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CMD_COMPLETE_ERROR_BLACKLISTED,
112e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CMD_COMPLETE_ERROR_CME
113e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta} bthf_client_cmd_complete_t;
114e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
115e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef enum {
116e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALL_ACTION_CHLD_0 = 0,
117e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALL_ACTION_CHLD_1,
118e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALL_ACTION_CHLD_2,
119e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALL_ACTION_CHLD_3,
120e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALL_ACTION_CHLD_4,
121e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALL_ACTION_CHLD_1x,
122e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALL_ACTION_CHLD_2x,
123e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALL_ACTION_ATA,
124e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALL_ACTION_CHUP,
125e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALL_ACTION_BTRH_0,
126e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALL_ACTION_BTRH_1,
127e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_CALL_ACTION_BTRH_2,
128e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta} bthf_client_call_action_t;
129e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
130e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef enum {
131e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_SERVICE_UNKNOWN = 0,
132e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_SERVICE_VOICE,
133e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_SERVICE_FAX
134e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta} bthf_client_subscriber_service_type_t;
135e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
136e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef enum {
137e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_IN_BAND_RINGTONE_NOT_PROVIDED = 0,
138e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    BTHF_CLIENT_IN_BAND_RINGTONE_PROVIDED,
139e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta} bthf_client_in_band_ring_state_t;
140e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
141e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta/* Peer features masks */
142e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta#define BTHF_CLIENT_PEER_FEAT_3WAY   0x00000001  /* Three-way calling */
143e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta#define BTHF_CLIENT_PEER_FEAT_ECNR   0x00000002  /* Echo cancellation and/or noise reduction */
144e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta#define BTHF_CLIENT_PEER_FEAT_VREC   0x00000004  /* Voice recognition */
145e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta#define BTHF_CLIENT_PEER_FEAT_INBAND 0x00000008  /* In-band ring tone */
146e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta#define BTHF_CLIENT_PEER_FEAT_VTAG   0x00000010  /* Attach a phone number to a voice tag */
147e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta#define BTHF_CLIENT_PEER_FEAT_REJECT 0x00000020  /* Ability to reject incoming call */
148e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta#define BTHF_CLIENT_PEER_FEAT_ECS    0x00000040  /* Enhanced Call Status */
149e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta#define BTHF_CLIENT_PEER_FEAT_ECC    0x00000080  /* Enhanced Call Control */
150e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta#define BTHF_CLIENT_PEER_FEAT_EXTERR 0x00000100  /* Extended error codes */
151e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta#define BTHF_CLIENT_PEER_FEAT_CODEC  0x00000200  /* Codec Negotiation */
152e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
153e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta/* Peer call handling features masks */
154e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta#define BTHF_CLIENT_CHLD_FEAT_REL           0x00000001  /* 0  Release waiting call or held calls */
155e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta#define BTHF_CLIENT_CHLD_FEAT_REL_ACC       0x00000002  /* 1  Release active calls and accept other
156e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta                                                              (waiting or held) cal */
157e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta#define BTHF_CLIENT_CHLD_FEAT_REL_X         0x00000004  /* 1x Release specified active call only */
158e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta#define BTHF_CLIENT_CHLD_FEAT_HOLD_ACC      0x00000008  /* 2  Active calls on hold and accept other
159e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta                                                              (waiting or held) call */
160e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta#define BTHF_CLIENT_CHLD_FEAT_PRIV_X        0x00000010  /* 2x Request private mode with specified
161e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta                                                              call (put the rest on hold) */
162e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta#define BTHF_CLIENT_CHLD_FEAT_MERGE         0x00000020  /* 3  Add held call to multiparty */
163e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta#define BTHF_CLIENT_CHLD_FEAT_MERGE_DETACH  0x00000040  /* 4  Connect two calls and leave
164e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta                                                              (disconnect from) multiparty */
165e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
166e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta/** Callback for connection state change.
167e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta *  state will have one of the values from BtHfConnectionState
168e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta *  peer/chld_features are valid only for BTHF_CLIENT_CONNECTION_STATE_SLC_CONNECTED state
169e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta */
170e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef void (* bthf_client_connection_state_callback)(bthf_client_connection_state_t state,
171e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta                                                       unsigned int peer_feat,
172e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta                                                       unsigned int chld_feat,
173e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta                                                       bt_bdaddr_t *bd_addr);
174e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
175e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta/** Callback for audio connection state change.
176e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta *  state will have one of the values from BtHfAudioState
177e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta */
178e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef void (* bthf_client_audio_state_callback)(bthf_client_audio_state_t state,
179e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta                                                  bt_bdaddr_t *bd_addr);
180e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
181e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta/** Callback for VR connection state change.
182e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta *  state will have one of the values from BtHfVRState
183e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta */
184e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef void (* bthf_client_vr_cmd_callback)(bthf_client_vr_state_t state);
185e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
186e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta/** Callback for network state change
187e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta */
188e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef void (* bthf_client_network_state_callback) (bthf_client_network_state_t state);
189e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
190e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta/** Callback for network roaming status change
191e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta */
192e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef void (* bthf_client_network_roaming_callback) (bthf_client_service_type_t type);
193e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
194e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta/** Callback for signal strength indication
195e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta */
196e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef void (* bthf_client_network_signal_callback) (int signal_strength);
197e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
198e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta/** Callback for battery level indication
199e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta */
200e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef void (* bthf_client_battery_level_callback) (int battery_level);
201e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
202e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta/** Callback for current operator name
203e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta */
204e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef void (* bthf_client_current_operator_callback) (const char *name);
205e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
206e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta/** Callback for call indicator
207e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta */
208e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef void (* bthf_client_call_callback) (bthf_client_call_t call);
209e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
210e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta/** Callback for callsetup indicator
211e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta */
212e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef void (* bthf_client_callsetup_callback) (bthf_client_callsetup_t callsetup);
213e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
214e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta/** Callback for callheld indicator
215e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta */
216e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef void (* bthf_client_callheld_callback) (bthf_client_callheld_t callheld);
217e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
218e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta/** Callback for response and hold
219e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta */
220e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef void (* bthf_client_resp_and_hold_callback) (bthf_client_resp_and_hold_t resp_and_hold);
221e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
222e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta/** Callback for Calling Line Identification notification
223e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta *  Will be called only when there is an incoming call and number is provided.
224e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta */
225e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef void (* bthf_client_clip_callback) (const char *number);
226e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
227e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta/**
228e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta * Callback for Call Waiting notification
229e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta */
230e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef void (* bthf_client_call_waiting_callback) (const char *number);
231e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
232e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta/**
233e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta *  Callback for listing current calls. Can be called multiple time.
234e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta *  If number is unknown NULL is passed.
235e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta */
236e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef void (*bthf_client_current_calls) (int index, bthf_client_call_direction_t dir,
237e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta                                           bthf_client_call_state_t state,
238e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta                                           bthf_client_call_mpty_type_t mpty,
239e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta                                           const char *number);
240e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
241e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta/** Callback for audio volume change
242e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta */
243e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef void (*bthf_client_volume_change_callback) (bthf_client_volume_type_t type, int volume);
244e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
245e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta/** Callback for command complete event
246e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta *  cme is valid only for BTHF_CLIENT_CMD_COMPLETE_ERROR_CME type
247e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta */
248e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef void (*bthf_client_cmd_complete_callback) (bthf_client_cmd_complete_t type, int cme);
249e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
250e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta/** Callback for subscriber information
251e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta */
252e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef void (* bthf_client_subscriber_info_callback) (const char *name,
253e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta                                                       bthf_client_subscriber_service_type_t type);
254e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
255e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta/** Callback for in-band ring tone settings
256e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta */
257e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef void (* bthf_client_in_band_ring_tone_callback) (bthf_client_in_band_ring_state_t state);
258e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
259e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta/**
260e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta * Callback for requested number from AG
261e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta */
262e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef void (* bthf_client_last_voice_tag_number_callback) (const char *number);
263e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
264e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta/**
265e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta * Callback for sending ring indication to app
266e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta */
267e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef void (* bthf_client_ring_indication_callback) (void);
268e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
269e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta/** BT-HF callback structure. */
270e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef struct {
271e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    /** set to sizeof(BtHfClientCallbacks) */
272e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    size_t      size;
273e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bthf_client_connection_state_callback  connection_state_cb;
274e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bthf_client_audio_state_callback       audio_state_cb;
275e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bthf_client_vr_cmd_callback            vr_cmd_cb;
276e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bthf_client_network_state_callback     network_state_cb;
277e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bthf_client_network_roaming_callback   network_roaming_cb;
278e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bthf_client_network_signal_callback    network_signal_cb;
279e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bthf_client_battery_level_callback     battery_level_cb;
280e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bthf_client_current_operator_callback  current_operator_cb;
281e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bthf_client_call_callback              call_cb;
282e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bthf_client_callsetup_callback         callsetup_cb;
283e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bthf_client_callheld_callback          callheld_cb;
284e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bthf_client_resp_and_hold_callback     resp_and_hold_cb;
285e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bthf_client_clip_callback              clip_cb;
286e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bthf_client_call_waiting_callback      call_waiting_cb;
287e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bthf_client_current_calls              current_calls_cb;
288e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bthf_client_volume_change_callback     volume_change_cb;
289e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bthf_client_cmd_complete_callback      cmd_complete_cb;
290e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bthf_client_subscriber_info_callback   subscriber_info_cb;
291e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bthf_client_in_band_ring_tone_callback in_band_ring_tone_cb;
292e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bthf_client_last_voice_tag_number_callback last_voice_tag_number_callback;
293e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bthf_client_ring_indication_callback   ring_indication_cb;
294e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta} bthf_client_callbacks_t;
295e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
296e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta/** Represents the standard BT-HF interface. */
297e7737c81e8f888a3f1960504324f282f8fae4258Hemant Guptatypedef struct {
298e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
299e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    /** set to sizeof(BtHfClientInterface) */
300e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    size_t size;
301e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    /**
302e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta     * Register the BtHf callbacks
303e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta     */
304e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bt_status_t (*init)(bthf_client_callbacks_t* callbacks);
305e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
306e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    /** connect to audio gateway */
307e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bt_status_t (*connect)(bt_bdaddr_t *bd_addr);
308e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
309e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    /** disconnect from audio gateway */
310e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bt_status_t (*disconnect)(bt_bdaddr_t *bd_addr);
311e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
312e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    /** create an audio connection */
313e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bt_status_t (*connect_audio)(bt_bdaddr_t *bd_addr);
314e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
315e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    /** close the audio connection */
316e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bt_status_t (*disconnect_audio)(bt_bdaddr_t *bd_addr);
317e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
318e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    /** start voice recognition */
319e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bt_status_t (*start_voice_recognition)(void);
320e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
321e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    /** stop voice recognition */
322e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bt_status_t (*stop_voice_recognition)(void);
323e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
324e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    /** volume control */
325e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bt_status_t (*volume_control) (bthf_client_volume_type_t type, int volume);
326e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
327e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    /** place a call with number a number
328e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta     * if number is NULL last called number is called (aka re-dial)*/
329e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bt_status_t (*dial) (const char *number);
330e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
331e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    /** place a call with number specified by location (speed dial) */
332e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bt_status_t (*dial_memory) (int location);
333e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
334e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    /** perform specified call related action
335e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta     * idx is limited only for enhanced call control related action
336e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta     */
337e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bt_status_t (*handle_call_action) (bthf_client_call_action_t action, int idx);
338e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
339e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    /** query list of current calls */
340e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bt_status_t (*query_current_calls) (void);
341e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
342e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    /** query name of current selected operator */
343e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bt_status_t (*query_current_operator_name) (void);
344e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
345e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    /** Retrieve subscriber information */
346e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bt_status_t (*retrieve_subscriber_info) (void);
347e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
348e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    /** Send DTMF code*/
349e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bt_status_t (*send_dtmf) (char code);
350e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
351e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    /** Request a phone number from AG corresponding to last voice tag recorded */
352e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bt_status_t (*request_last_voice_tag_number) (void);
353e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
354e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    /** Closes the interface. */
355e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    void (*cleanup)(void);
356e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
357e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    /** Send AT Command. */
358e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta    bt_status_t (*send_at_cmd) (int cmd, int val1, int val2, const char *arg);
359e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta} bthf_client_interface_t;
360e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
361e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta__END_DECLS
362e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta
363e7737c81e8f888a3f1960504324f282f8fae4258Hemant Gupta#endif /* ANDROID_INCLUDE_BT_HF_CLIENT_H */
364