blob: dbac061308dacaff5d60ecec9cb585a88285f9ed [file] [log] [blame]
Andre Eisenbach05f49542012-09-18 12:15:26 -07001/*
2 * Copyright (C) 2012 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef ANDROID_INCLUDE_BT_HF_H
18#define ANDROID_INCLUDE_BT_HF_H
19
20__BEGIN_DECLS
21
22/* AT response code - OK/Error */
23typedef enum {
24 BTHF_AT_RESPONSE_ERROR = 0,
25 BTHF_AT_RESPONSE_OK
26} bthf_at_response_t;
27
28typedef enum {
29 BTHF_CONNECTION_STATE_DISCONNECTED = 0,
30 BTHF_CONNECTION_STATE_CONNECTING,
31 BTHF_CONNECTION_STATE_CONNECTED,
32 BTHF_CONNECTION_STATE_SLC_CONNECTED,
33 BTHF_CONNECTION_STATE_DISCONNECTING
34} bthf_connection_state_t;
35
36typedef enum {
37 BTHF_AUDIO_STATE_DISCONNECTED = 0,
38 BTHF_AUDIO_STATE_CONNECTING,
39 BTHF_AUDIO_STATE_CONNECTED,
40 BTHF_AUDIO_STATE_DISCONNECTING
41} bthf_audio_state_t;
42
43typedef enum {
44 BTHF_VR_STATE_STOPPED = 0,
45 BTHF_VR_STATE_STARTED
46} bthf_vr_state_t;
47
48typedef enum {
49 BTHF_VOLUME_TYPE_SPK = 0,
50 BTHF_VOLUME_TYPE_MIC
51} bthf_volume_type_t;
52
53/* Noise Reduction and Echo Cancellation */
54typedef enum
55{
56 BTHF_NREC_STOP,
57 BTHF_NREC_START
58} bthf_nrec_t;
59
Mudumba Ananth3c4db4c2014-04-27 21:04:35 -070060/* WBS codec setting */
61typedef enum
62{
63 BTHF_WBS_NONE,
64 BTHF_WBS_NO,
65 BTHF_WBS_YES
66}bthf_wbs_config_t;
67
Sumit Bajpai0b4fbfb2015-01-09 14:48:00 +053068/* BIND type*/
69typedef enum
70{
71 BTHF_BIND_SET,
72 BTHF_BIND_READ,
73 BTHF_BIND_TEST
74}bthf_bind_type_t;
75
76
Andre Eisenbach05f49542012-09-18 12:15:26 -070077/* CHLD - Call held handling */
78typedef enum
79{
80 BTHF_CHLD_TYPE_RELEASEHELD, // Terminate all held or set UDUB("busy") to a waiting call
81 BTHF_CHLD_TYPE_RELEASEACTIVE_ACCEPTHELD, // Terminate all active calls and accepts a waiting/held call
82 BTHF_CHLD_TYPE_HOLDACTIVE_ACCEPTHELD, // Hold all active calls and accepts a waiting/held call
83 BTHF_CHLD_TYPE_ADDHELDTOCONF, // Add all held calls to a conference
84} bthf_chld_type_t;
85
86/** Callback for connection state change.
87 * state will have one of the values from BtHfConnectionState
88 */
89typedef void (* bthf_connection_state_callback)(bthf_connection_state_t state, bt_bdaddr_t *bd_addr);
90
91/** Callback for audio connection state change.
92 * state will have one of the values from BtHfAudioState
93 */
94typedef void (* bthf_audio_state_callback)(bthf_audio_state_t state, bt_bdaddr_t *bd_addr);
95
96/** Callback for VR connection state change.
97 * state will have one of the values from BtHfVRState
98 */
Sunny Kapdi6253b052014-03-14 18:21:58 -070099typedef void (* bthf_vr_cmd_callback)(bthf_vr_state_t state, bt_bdaddr_t *bd_addr);
Andre Eisenbach05f49542012-09-18 12:15:26 -0700100
101/** Callback for answer incoming call (ATA)
102 */
Sunny Kapdi6253b052014-03-14 18:21:58 -0700103typedef void (* bthf_answer_call_cmd_callback)(bt_bdaddr_t *bd_addr);
Andre Eisenbach05f49542012-09-18 12:15:26 -0700104
105/** Callback for disconnect call (AT+CHUP)
106 */
Sunny Kapdi6253b052014-03-14 18:21:58 -0700107typedef void (* bthf_hangup_call_cmd_callback)(bt_bdaddr_t *bd_addr);
Andre Eisenbach05f49542012-09-18 12:15:26 -0700108
109/** Callback for disconnect call (AT+CHUP)
110 * type will denote Speaker/Mic gain (BtHfVolumeControl).
111 */
Sunny Kapdi6253b052014-03-14 18:21:58 -0700112typedef void (* bthf_volume_cmd_callback)(bthf_volume_type_t type, int volume, bt_bdaddr_t *bd_addr);
Andre Eisenbach05f49542012-09-18 12:15:26 -0700113
114/** Callback for dialing an outgoing call
115 * If number is NULL, redial
116 */
Sunny Kapdi6253b052014-03-14 18:21:58 -0700117typedef void (* bthf_dial_call_cmd_callback)(char *number, bt_bdaddr_t *bd_addr);
Andre Eisenbach05f49542012-09-18 12:15:26 -0700118
119/** Callback for sending DTMF tones
120 * tone contains the dtmf character to be sent
121 */
Sunny Kapdi6253b052014-03-14 18:21:58 -0700122typedef void (* bthf_dtmf_cmd_callback)(char tone, bt_bdaddr_t *bd_addr);
Andre Eisenbach05f49542012-09-18 12:15:26 -0700123
124/** Callback for enabling/disabling noise reduction/echo cancellation
125 * value will be 1 to enable, 0 to disable
126 */
Sunny Kapdi6253b052014-03-14 18:21:58 -0700127typedef void (* bthf_nrec_cmd_callback)(bthf_nrec_t nrec, bt_bdaddr_t *bd_addr);
Andre Eisenbach05f49542012-09-18 12:15:26 -0700128
Mudumba Ananth3c4db4c2014-04-27 21:04:35 -0700129/** Callback for AT+BCS and event from BAC
130 * WBS enable, WBS disable
131 */
132typedef void (* bthf_wbs_callback)(bthf_wbs_config_t wbs, bt_bdaddr_t *bd_addr);
133
Andre Eisenbach05f49542012-09-18 12:15:26 -0700134/** Callback for call hold handling (AT+CHLD)
135 * value will contain the call hold command (0, 1, 2, 3)
136 */
Sunny Kapdi6253b052014-03-14 18:21:58 -0700137typedef void (* bthf_chld_cmd_callback)(bthf_chld_type_t chld, bt_bdaddr_t *bd_addr);
Andre Eisenbach05f49542012-09-18 12:15:26 -0700138
139/** Callback for CNUM (subscriber number)
140 */
Sunny Kapdi6253b052014-03-14 18:21:58 -0700141typedef void (* bthf_cnum_cmd_callback)(bt_bdaddr_t *bd_addr);
Andre Eisenbach05f49542012-09-18 12:15:26 -0700142
143/** Callback for indicators (CIND)
144 */
Sunny Kapdi6253b052014-03-14 18:21:58 -0700145typedef void (* bthf_cind_cmd_callback)(bt_bdaddr_t *bd_addr);
Andre Eisenbach05f49542012-09-18 12:15:26 -0700146
147/** Callback for operator selection (COPS)
148 */
Sunny Kapdi6253b052014-03-14 18:21:58 -0700149typedef void (* bthf_cops_cmd_callback)(bt_bdaddr_t *bd_addr);
Andre Eisenbach05f49542012-09-18 12:15:26 -0700150
151/** Callback for call list (AT+CLCC)
152 */
Sunny Kapdi6253b052014-03-14 18:21:58 -0700153typedef void (* bthf_clcc_cmd_callback) (bt_bdaddr_t *bd_addr);
Andre Eisenbach05f49542012-09-18 12:15:26 -0700154
155/** Callback for unknown AT command recd from HF
156 * at_string will contain the unparsed AT string
157 */
Sunny Kapdi6253b052014-03-14 18:21:58 -0700158typedef void (* bthf_unknown_at_cmd_callback)(char *at_string, bt_bdaddr_t *bd_addr);
Andre Eisenbach05f49542012-09-18 12:15:26 -0700159
160/** Callback for keypressed (HSP) event.
161 */
Sunny Kapdi6253b052014-03-14 18:21:58 -0700162typedef void (* bthf_key_pressed_cmd_callback)(bt_bdaddr_t *bd_addr);
Andre Eisenbach05f49542012-09-18 12:15:26 -0700163
Sumit Bajpai0b4fbfb2015-01-09 14:48:00 +0530164/** Callback for HF indicators (BIND)
165 */
166typedef void (* bthf_bind_cmd_callback)(char* hf_ind, bthf_bind_type_t type, bt_bdaddr_t *bd_addr);
167
168/** Callback for HF indicator value (BIEV)
169 */
170typedef void (* bthf_biev_cmd_callback)(char* hf_ind_val, bt_bdaddr_t *bd_addr);
171
172
Andre Eisenbach05f49542012-09-18 12:15:26 -0700173/** BT-HF callback structure. */
174typedef struct {
175 /** set to sizeof(BtHfCallbacks) */
176 size_t size;
177 bthf_connection_state_callback connection_state_cb;
178 bthf_audio_state_callback audio_state_cb;
179 bthf_vr_cmd_callback vr_cmd_cb;
180 bthf_answer_call_cmd_callback answer_call_cmd_cb;
181 bthf_hangup_call_cmd_callback hangup_call_cmd_cb;
182 bthf_volume_cmd_callback volume_cmd_cb;
183 bthf_dial_call_cmd_callback dial_call_cmd_cb;
184 bthf_dtmf_cmd_callback dtmf_cmd_cb;
185 bthf_nrec_cmd_callback nrec_cmd_cb;
Mudumba Ananth3c4db4c2014-04-27 21:04:35 -0700186 bthf_wbs_callback wbs_cb;
Andre Eisenbach05f49542012-09-18 12:15:26 -0700187 bthf_chld_cmd_callback chld_cmd_cb;
188 bthf_cnum_cmd_callback cnum_cmd_cb;
189 bthf_cind_cmd_callback cind_cmd_cb;
190 bthf_cops_cmd_callback cops_cmd_cb;
191 bthf_clcc_cmd_callback clcc_cmd_cb;
192 bthf_unknown_at_cmd_callback unknown_at_cmd_cb;
193 bthf_key_pressed_cmd_callback key_pressed_cmd_cb;
Sumit Bajpai0b4fbfb2015-01-09 14:48:00 +0530194 bthf_bind_cmd_callback bind_cmd_cb;
195 bthf_biev_cmd_callback biev_cmd_cb;
Andre Eisenbach05f49542012-09-18 12:15:26 -0700196} bthf_callbacks_t;
197
198/** Network Status */
199typedef enum
200{
201 BTHF_NETWORK_STATE_NOT_AVAILABLE = 0,
202 BTHF_NETWORK_STATE_AVAILABLE
203} bthf_network_state_t;
204
205/** Service type */
206typedef enum
207{
208 BTHF_SERVICE_TYPE_HOME = 0,
209 BTHF_SERVICE_TYPE_ROAMING
210} bthf_service_type_t;
211
212typedef enum {
213 BTHF_CALL_STATE_ACTIVE = 0,
214 BTHF_CALL_STATE_HELD,
215 BTHF_CALL_STATE_DIALING,
216 BTHF_CALL_STATE_ALERTING,
217 BTHF_CALL_STATE_INCOMING,
218 BTHF_CALL_STATE_WAITING,
219 BTHF_CALL_STATE_IDLE
220} bthf_call_state_t;
221
222typedef enum {
223 BTHF_CALL_DIRECTION_OUTGOING = 0,
224 BTHF_CALL_DIRECTION_INCOMING
225} bthf_call_direction_t;
226
227typedef enum {
228 BTHF_CALL_TYPE_VOICE = 0,
229 BTHF_CALL_TYPE_DATA,
230 BTHF_CALL_TYPE_FAX
231} bthf_call_mode_t;
232
233typedef enum {
234 BTHF_CALL_MPTY_TYPE_SINGLE = 0,
235 BTHF_CALL_MPTY_TYPE_MULTI
236} bthf_call_mpty_type_t;
237
238typedef enum {
Sumit Bajpai0b4fbfb2015-01-09 14:48:00 +0530239 BTHF_HF_INDICATOR_STATE_DISABLED = 0,
240 BTHF_HF_INDICATOR_STATE_ENABLED
241} bthf_hf_indicator_status_t;
242
243typedef enum {
Andre Eisenbach05f49542012-09-18 12:15:26 -0700244 BTHF_CALL_ADDRTYPE_UNKNOWN = 0x81,
245 BTHF_CALL_ADDRTYPE_INTERNATIONAL = 0x91
246} bthf_call_addrtype_t;
Sumit Bajpai92659ec2015-06-09 18:46:04 +0530247
248typedef enum {
249 BTHF_VOIP_CALL_NETWORK_TYPE_MOBILE = 0,
250 BTHF_VOIP_CALL_NETWORK_TYPE_WIFI
251} bthf_voip_call_network_type_t;
252
253typedef enum {
254 BTHF_VOIP_STATE_STOPPED = 0,
255 BTHF_VOIP_STATE_STARTED
256} bthf_voip_state_t;
257
Andre Eisenbach05f49542012-09-18 12:15:26 -0700258/** Represents the standard BT-HF interface. */
259typedef struct {
260
261 /** set to sizeof(BtHfInterface) */
262 size_t size;
263 /**
264 * Register the BtHf callbacks
265 */
Sunny Kapdi6253b052014-03-14 18:21:58 -0700266 bt_status_t (*init)( bthf_callbacks_t* callbacks, int max_hf_clients);
Andre Eisenbach05f49542012-09-18 12:15:26 -0700267
268 /** connect to headset */
269 bt_status_t (*connect)( bt_bdaddr_t *bd_addr );
270
271 /** dis-connect from headset */
272 bt_status_t (*disconnect)( bt_bdaddr_t *bd_addr );
273
274 /** create an audio connection */
275 bt_status_t (*connect_audio)( bt_bdaddr_t *bd_addr );
276
277 /** close the audio connection */
278 bt_status_t (*disconnect_audio)( bt_bdaddr_t *bd_addr );
279
280 /** start voice recognition */
Sunny Kapdi6253b052014-03-14 18:21:58 -0700281 bt_status_t (*start_voice_recognition)( bt_bdaddr_t *bd_addr );
Andre Eisenbach05f49542012-09-18 12:15:26 -0700282
283 /** stop voice recognition */
Sunny Kapdi6253b052014-03-14 18:21:58 -0700284 bt_status_t (*stop_voice_recognition)( bt_bdaddr_t *bd_addr );
Andre Eisenbach05f49542012-09-18 12:15:26 -0700285
286 /** volume control */
Sunny Kapdi6253b052014-03-14 18:21:58 -0700287 bt_status_t (*volume_control) (bthf_volume_type_t type, int volume, bt_bdaddr_t *bd_addr );
Andre Eisenbach05f49542012-09-18 12:15:26 -0700288
289 /** Combined device status change notification */
290 bt_status_t (*device_status_notification)(bthf_network_state_t ntk_state, bthf_service_type_t svc_type, int signal,
291 int batt_chg);
292
293 /** Response for COPS command */
Sunny Kapdi6253b052014-03-14 18:21:58 -0700294 bt_status_t (*cops_response)(const char *cops, bt_bdaddr_t *bd_addr );
Andre Eisenbach05f49542012-09-18 12:15:26 -0700295
296 /** Response for CIND command */
297 bt_status_t (*cind_response)(int svc, int num_active, int num_held, bthf_call_state_t call_setup_state,
Sunny Kapdi6253b052014-03-14 18:21:58 -0700298 int signal, int roam, int batt_chg, bt_bdaddr_t *bd_addr );
Andre Eisenbach05f49542012-09-18 12:15:26 -0700299
300 /** Pre-formatted AT response, typically in response to unknown AT cmd */
Sunny Kapdi6253b052014-03-14 18:21:58 -0700301 bt_status_t (*formatted_at_response)(const char *rsp, bt_bdaddr_t *bd_addr );
Andre Eisenbach05f49542012-09-18 12:15:26 -0700302
303 /** ok/error response
304 * ERROR (0)
305 * OK (1)
306 */
Sunny Kapdi6253b052014-03-14 18:21:58 -0700307 bt_status_t (*at_response) (bthf_at_response_t response_code, int error_code, bt_bdaddr_t *bd_addr );
Andre Eisenbach05f49542012-09-18 12:15:26 -0700308
309 /** response for CLCC command
310 * Can be iteratively called for each call index
311 * Call index of 0 will be treated as NULL termination (Completes response)
312 */
313 bt_status_t (*clcc_response) (int index, bthf_call_direction_t dir,
314 bthf_call_state_t state, bthf_call_mode_t mode,
315 bthf_call_mpty_type_t mpty, const char *number,
Sunny Kapdi6253b052014-03-14 18:21:58 -0700316 bthf_call_addrtype_t type, bt_bdaddr_t *bd_addr );
Andre Eisenbach05f49542012-09-18 12:15:26 -0700317
318 /** notify of a call state change
319 * Each update notifies
320 * 1. Number of active/held/ringing calls
321 * 2. call_state: This denotes the state change that triggered this msg
322 * This will take one of the values from BtHfCallState
323 * 3. number & type: valid only for incoming & waiting call
324 */
325 bt_status_t (*phone_state_change) (int num_active, int num_held, bthf_call_state_t call_setup_state,
326 const char *number, bthf_call_addrtype_t type);
327
328 /** Closes the interface. */
329 void (*cleanup)( void );
Mudumba Ananth3c4db4c2014-04-27 21:04:35 -0700330
331 /** configureation for the SCO codec */
332 bt_status_t (*configure_wbs)( bt_bdaddr_t *bd_addr ,bthf_wbs_config_t config );
Sumit Bajpai0b4fbfb2015-01-09 14:48:00 +0530333
334 /** Response for BIND READ command and activation/deactivation of HF indicator */
335 bt_status_t (*bind_response) (int anum, bthf_hf_indicator_status_t status,
336 bt_bdaddr_t *bd_addr);
337
338 /** Response for BIND TEST command */
339 bt_status_t (*bind_string_response) (const char* result, bt_bdaddr_t *bd_addr);
Sumit Bajpai92659ec2015-06-09 18:46:04 +0530340
341 /** Sends connectivity network type used by Voip currently to stack */
342 bt_status_t (*voip_network_type_wifi) (bthf_voip_state_t is_voip_started,
343 bthf_voip_call_network_type_t is_network_wifi);
Andre Eisenbach05f49542012-09-18 12:15:26 -0700344} bthf_interface_t;
345
346__END_DECLS
347
348#endif /* ANDROID_INCLUDE_BT_HF_H */