1 /******************************************************************************
2  *
3  *  Copyright (c) 2014 The Android Open Source Project
4  *  Copyright (C) 2003-2012 Broadcom Corporation
5  *
6  *  Licensed under the Apache License, Version 2.0 (the "License");
7  *  you may not use this file except in compliance with the License.
8  *  You may obtain a copy of the License at:
9  *
10  *  http://www.apache.org/licenses/LICENSE-2.0
11  *
12  *  Unless required by applicable law or agreed to in writing, software
13  *  distributed under the License is distributed on an "AS IS" BASIS,
14  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  *  See the License for the specific language governing permissions and
16  *  limitations under the License.
17  *
18  ******************************************************************************/
19 
20 /******************************************************************************
21  *
22  *  This is the public interface file for the handsfree (HF role) subsystem
23  *
24  ******************************************************************************/
25 #ifndef BTA_HF_CLIENT_API_H
26 #define BTA_HF_CLIENT_API_H
27 
28 #include "bta_api.h"
29 
30 /*****************************************************************************
31 **  Constants and data types
32 *****************************************************************************/
33 
34 /* HFP peer (AG) features*/
35 #define BTA_HF_CLIENT_PEER_FEAT_3WAY   0x00000001  /* Three-way calling */
36 #define BTA_HF_CLIENT_PEER_FEAT_ECNR   0x00000002  /* Echo cancellation and/or noise reduction */
37 #define BTA_HF_CLIENT_PEER_FEAT_VREC   0x00000004  /* Voice recognition */
38 #define BTA_HF_CLIENT_PEER_INBAND      0x00000008  /* In-band ring tone */
39 #define BTA_HF_CLIENT_PEER_VTAG        0x00000010  /* Attach a phone number to a voice tag */
40 #define BTA_HF_CLIENT_PEER_REJECT      0x00000020  /* Ability to reject incoming call */
41 #define BTA_HF_CLIENT_PEER_ECS         0x00000040  /* Enhanced Call Status */
42 #define BTA_HF_CLIENT_PEER_ECC         0x00000080  /* Enhanced Call Control */
43 #define BTA_HF_CLIENT_PEER_EXTERR      0x00000100  /* Extended error codes */
44 #define BTA_HF_CLIENT_PEER_CODEC       0x00000200  /* Codec Negotiation */
45 
46 typedef UINT16 tBTA_HF_CLIENT_PEER_FEAT;
47 
48 /* HFP HF features */
49 #define BTA_HF_CLIENT_FEAT_ECNR        0x00000001  /* Echo cancellation and/or noise reduction */
50 #define BTA_HF_CLIENT_FEAT_3WAY        0x00000002  /* Call waiting and three-way calling */
51 #define BTA_HF_CLIENT_FEAT_CLI         0x00000004  /* Caller ID presentation capability */
52 #define BTA_HF_CLIENT_FEAT_VREC        0x00000008  /* Voice recognition activation */
53 #define BTA_HF_CLIENT_FEAT_VOL         0x00000010  /* Remote volume control */
54 #define BTA_HF_CLIENT_FEAT_ECS         0x00000020  /* Enhanced Call Status */
55 #define BTA_HF_CLIENT_FEAT_ECC         0x00000040  /* Enhanced Call Control */
56 #define BTA_HF_CLIENT_FEAT_CODEC       0x00000080  /* Codec Negotiation */
57 
58 /* HFP HF extended call handling - masks not related to any spec */
59 #define BTA_HF_CLIENT_CHLD_REL          0x00000001  /* 0  Release waiting call or held calls */
60 #define BTA_HF_CLIENT_CHLD_REL_ACC      0x00000002  /* 1  Release active calls and accept other (waiting or held) cal */
61 #define BTA_HF_CLIENT_CHLD_REL_X        0x00000004  /* 1x Release x call*/
62 #define BTA_HF_CLIENT_CHLD_HOLD_ACC     0x00000008  /* 2  Active calls on hold and accept other call */
63 #define BTA_HF_CLIENT_CHLD_PRIV_X       0x00000010  /* 2x Active multiparty call on hold except call x */
64 #define BTA_HF_CLIENT_CHLD_MERGE        0x00000020  /* 3  Add held call to multiparty */
65 #define BTA_HF_CLIENT_CHLD_MERGE_DETACH 0x00000040  /* 4  Add held call to multiparty */
66 
67 typedef UINT16 tBTA_HF_CLIENT_CHLD_FEAT;
68 
69 /* HFP AG errors ot OK sent to HF Unit */
70 #define BTA_HF_CLIENT_AT_RESULT_OK            0
71 #define BTA_HF_CLIENT_AT_RESULT_ERROR         1
72 #define BTA_HF_CLIENT_AT_RESULT_NO_CARRIER    2
73 #define BTA_HF_CLIENT_AT_RESULT_BUSY          3
74 #define BTA_HF_CLIENT_AT_RESULT_NO_ANSWER     4
75 #define BTA_HF_CLIENT_AT_RESULT_DELAY         5
76 #define BTA_HF_CLIENT_AT_RESULT_BLACKLISTED   6
77 #define BTA_HF_CLIENT_AT_RESULT_CME           7
78 
79 typedef UINT8 tBTA_HF_CLIENT_AT_RESULT_TYPE;
80 
81 /* HF Client callback events */
82 #define BTA_HF_CLIENT_ENABLE_EVT            0  /* HF Client enabled */
83 #define BTA_HF_CLIENT_REGISTER_EVT          1  /* HF Client registered */
84 #define BTA_HF_CLIENT_OPEN_EVT              2  /* HF Client connection open */
85 #define BTA_HF_CLIENT_CLOSE_EVT             3  /* HF Client connection closed */
86 #define BTA_HF_CLIENT_CONN_EVT              4  /* Service level connection opened */
87 #define BTA_HF_CLIENT_AUDIO_OPEN_EVT        5  /* Audio connection open */
88 #define BTA_HF_CLIENT_AUDIO_MSBC_OPEN_EVT   6  /* Audio connection with mSBC codec open */
89 #define BTA_HF_CLIENT_AUDIO_CLOSE_EVT       7  /* Audio connection closed */
90 #define BTA_HF_CLIENT_SPK_EVT               8  /* Speaker volume changed */
91 #define BTA_HF_CLIENT_MIC_EVT               9  /* Microphone volume changed */
92 #define BTA_HF_CLIENT_IND_EVT               10 /* Indicator */
93 #define BTA_HF_CLIENT_VOICE_REC_EVT         11 /* AG changed voice recognition setting */
94 #define BTA_HF_CLIENT_OPERATOR_NAME_EVT     12 /* Operator name acquired */
95 #define BTA_HF_CLIENT_CLIP_EVT              13 /* Calling line identification event */
96 #define BTA_HF_CLIENT_CCWA_EVT              14 /* Call waiting notification */
97 #define BTA_HF_CLIENT_AT_RESULT_EVT         15 /* Call waiting notification */
98 #define BTA_HF_CLIENT_CLCC_EVT              16 /* current call event */
99 #define BTA_HF_CLIENT_CNUM_EVT              17 /* subscriber information event */
100 #define BTA_HF_CLIENT_BTRH_EVT              18 /* bluetooth response and hold event */
101 #define BTA_HF_CLIENT_BSIR_EVT              19 /* in-band ring tone setting changed event */
102 #define BTA_HF_CLIENT_BINP_EVT              20 /* binp number event */
103 #define BTA_HF_CLIENT_RING_INDICATION       21 /* HF Client ring indication */
104 #define BTA_HF_CLIENT_DISABLE_EVT           30 /* HF Client disabled */
105 
106 typedef UINT8 tBTA_HF_CLIENT_EVT;
107 
108 /* HF Client open status */
109 #define BTA_HF_CLIENT_SUCCESS          0 /* Connection successfully opened */
110 #define BTA_HF_CLIENT_FAIL_SDP         1 /* Open failed due to SDP */
111 #define BTA_HF_CLIENT_FAIL_RFCOMM      2 /* Open failed due to RFCOMM */
112 #define BTA_HF_CLIENT_FAIL_RESOURCES   3 /* out of resources failure  */
113 
114 typedef UINT8 tBTA_HF_CLIENT_STATUS;
115 
116 /* indicator type */
117 #define BTA_HF_CLIENT_IND_BATTCH    0  /* Battery charge indicator */
118 #define BTA_HF_CLIENT_IND_SIGNAL    1  /* Signal Strength indicator */
119 #define BTA_HF_CLIENT_IND_SERVICE   2  /* Service availability indicator */
120 #define BTA_HF_CLIENT_IND_CALL      3  /* Standard call status indicator*/
121 #define BTA_HF_CLIENT_IND_ROAM      4  /* Roaming status indicator */
122 #define BTA_HF_CLIENT_IND_CALLSETUP 5  /* Call setup status indicator */
123 #define BTA_HF_CLIENT_IND_CALLHELD  6  /* Call hold status indicator */
124 
125 typedef UINT8 tBTA_HF_CLIENT_IND_TYPE;
126 
127 /* AT commands */
128 #define BTA_HF_CLIENT_AT_CMD_VTS    0
129 #define BTA_HF_CLIENT_AT_CMD_BTRH   1
130 #define BTA_HF_CLIENT_AT_CMD_CHUP   2
131 #define BTA_HF_CLIENT_AT_CMD_CHLD   3
132 #define BTA_HF_CLIENT_AT_CMD_BCC    4
133 #define BTA_HF_CLIENT_AT_CMD_CNUM   5
134 #define BTA_HF_CLIENT_AT_CMD_ATA    6
135 #define BTA_HF_CLIENT_AT_CMD_COPS   7
136 #define BTA_HF_CLIENT_AT_CMD_ATD    8
137 #define BTA_HF_CLIENT_AT_CMD_VGM    9
138 #define BTA_HF_CLIENT_AT_CMD_VGS    10
139 #define BTA_HF_CLIENT_AT_CMD_BVRA   11
140 #define BTA_HF_CLIENT_AT_CMD_CLCC   12
141 #define BTA_HF_CLIENT_AT_CMD_BINP   13
142 #define BTA_HF_CLIENT_AT_CMD_BLDN   14
143 #define BTA_HF_CLIENT_AT_CMD_NREC   15
144 
145 typedef UINT8 tBTA_HF_CLIENT_AT_CMD_TYPE;
146 
147 /* data associated with most non-AT events */
148 /* placeholder, if not needed should be removed*/
149 typedef struct
150 {
151 } tBTA_HF_CLIENT_HDR;
152 
153 /* data associated with BTA_HF_CLIENT_REGISTER_EVT */
154 typedef struct
155 {
156     tBTA_HF_CLIENT_HDR      hdr;
157     UINT16                  handle;
158     tBTA_HF_CLIENT_STATUS   status;
159 } tBTA_HF_CLIENT_REGISTER;
160 
161 /* data associated with BTA_HF_CLIENT_OPEN_EVT */
162 typedef struct
163 {
164     tBTA_HF_CLIENT_HDR      hdr;
165     BD_ADDR                 bd_addr;
166     tBTA_HF_CLIENT_STATUS   status;
167 } tBTA_HF_CLIENT_OPEN;
168 
169 /* data associated with BTA_HF_CLIENT_CONN_EVT */
170 typedef struct
171 {
172     tBTA_HF_CLIENT_HDR         hdr;
173     tBTA_HF_CLIENT_PEER_FEAT   peer_feat;
174     tBTA_HF_CLIENT_CHLD_FEAT   chld_feat;
175 } tBTA_HF_CLIENT_CONN;
176 
177 /* data associated with BTA_HF_CLIENT_IND_EVT event */
178 typedef struct
179 {
180     tBTA_HF_CLIENT_HDR         hdr;
181     tBTA_HF_CLIENT_IND_TYPE    type;
182     UINT16                     value;
183 } tBTA_HF_CLIENT_IND;
184 
185 /* data associated with BTA_HF_CLIENT_OPERATOR_NAME_EVT */
186 #define BTA_HF_CLIENT_OPERATOR_NAME_LEN 16
187 typedef struct
188 {
189     char                       name[BTA_HF_CLIENT_OPERATOR_NAME_LEN + 1];
190 } tBTA_HF_CLIENT_OPERATOR_NAME;
191 
192 /* data associated with BTA_HF_CLIENT_CLIP_EVT  and BTA_HF_CLIENT_CCWA_EVT*/
193 #define BTA_HF_CLIENT_NUMBER_LEN 32
194 typedef struct
195 {
196     char                       number[BTA_HF_CLIENT_NUMBER_LEN + 1];
197 } tBTA_HF_CLIENT_NUMBER;
198 
199 /* data associated with BTA_HF_CLIENT_AT_RESULT_EVT event */
200 typedef struct
201 {
202     tBTA_HF_CLIENT_AT_RESULT_TYPE    type;
203     UINT16                           cme;
204 } tBTA_HF_CLIENT_AT_RESULT;
205 
206 /* data associated with BTA_HF_CLIENT_CLCC_EVT event */
207 typedef struct
208 {
209     UINT32                     idx;
210     BOOLEAN                    inc;
211     UINT8                      status;
212     BOOLEAN                    mpty;
213     BOOLEAN                    number_present;
214     char                       number[BTA_HF_CLIENT_NUMBER_LEN + 1];
215 } tBTA_HF_CLIENT_CLCC;
216 
217 /* data associated with BTA_HF_CLIENT_CNUM_EVT event */
218 typedef struct
219 {
220     UINT16                     service;
221     char                       number[BTA_HF_CLIENT_NUMBER_LEN + 1];
222 } tBTA_HF_CLIENT_CNUM;
223 
224 /* data associated with other events */
225 typedef struct
226 {
227     UINT16                     value;
228 } tBTA_HF_CLIENT_VAL;
229 
230 /* union of data associated with AG callback */
231 typedef union
232 {
233     tBTA_HF_CLIENT_HDR              hdr;
234     tBTA_HF_CLIENT_REGISTER         reg;
235     tBTA_HF_CLIENT_OPEN             open;
236     tBTA_HF_CLIENT_CONN             conn;
237     tBTA_HF_CLIENT_IND              ind;
238     tBTA_HF_CLIENT_VAL              val;
239     tBTA_HF_CLIENT_OPERATOR_NAME    operator;
240     tBTA_HF_CLIENT_NUMBER           number;
241     tBTA_HF_CLIENT_AT_RESULT        result;
242     tBTA_HF_CLIENT_CLCC             clcc;
243     tBTA_HF_CLIENT_CNUM             cnum;
244 } tBTA_HF_CLIENT;
245 
246 typedef UINT32 tBTA_HF_CLIENT_FEAT;
247 
248 /* HF Client callback */
249 typedef void (tBTA_HF_CLIENT_CBACK)(tBTA_HF_CLIENT_EVT event, tBTA_HF_CLIENT *p_data);
250 
251 #ifdef __cplusplus
252 extern "C"
253 {
254 #endif
255 
256 /*****************************************************************************
257 **  External Function Declarations
258 *****************************************************************************/
259 
260 /*******************************************************************************
261 **
262 ** Function         BTA_HfClientEnable
263 **
264 ** Description      Enable the HF CLient service. When the enable
265 **                  operation is complete the callback function will be
266 **                  called with a BTA_HF_CLIENT_ENABLE_EVT. This function must
267 **                  be called before other function in the HF CLient API are
268 **                  called.
269 **
270 ** Returns          BTA_SUCCESS if OK, BTA_FAILURE otherwise.
271 **
272 *******************************************************************************/
273 tBTA_STATUS BTA_HfClientEnable(tBTA_HF_CLIENT_CBACK *p_cback);
274 
275 /*******************************************************************************
276 **
277 ** Function         BTA_HfClientDisable
278 **
279 ** Description      Disable the HF Client service
280 **
281 **
282 ** Returns          void
283 **
284 *******************************************************************************/
285 void BTA_HfClientDisable(void);
286 
287 /*******************************************************************************
288 **
289 ** Function         BTA_HfClientRegister
290 **
291 ** Description      Register an HF Client service.
292 **
293 **
294 ** Returns          void
295 **
296 *******************************************************************************/
297 void BTA_HfClientRegister(tBTA_SEC sec_mask, tBTA_HF_CLIENT_FEAT features,
298                           char *p_service_name);
299 
300 /*******************************************************************************
301 **
302 ** Function         BTA_HfClientDeregister
303 **
304 ** Description      Deregister an HF Client service.
305 **
306 **
307 ** Returns          void
308 **
309 *******************************************************************************/
310 void BTA_HfClientDeregister(UINT16 handle);
311 
312 /*******************************************************************************
313 **
314 ** Function         BTA_HfClientOpen
315 **
316 ** Description      Opens a connection to an audio gateway.
317 **                  When connection is open callback function is called
318 **                  with a BTA_HF_CLIENT_OPEN_EVT. Only the data connection is
319 **                  opened. The audio connection is not opened.
320 **
321 **
322 ** Returns          void
323 **
324 *******************************************************************************/
325 void BTA_HfClientOpen(UINT16 handle, BD_ADDR bd_addr, tBTA_SEC sec_mask);
326 
327 /*******************************************************************************
328 **
329 ** Function         BTA_HfClientClose
330 **
331 ** Description      Close the current connection to an audio gateway.
332 **                  Any current audio connection will also be closed
333 **
334 **
335 ** Returns          void
336 **
337 *******************************************************************************/
338 void BTA_HfClientClose(UINT16 handle);
339 
340 /*******************************************************************************
341 **
342 ** Function         BTA_HfCllientAudioOpen
343 **
344 ** Description      Opens an audio connection to the currently connected
345 **                 audio gateway
346 **
347 **
348 ** Returns          void
349 **
350 *******************************************************************************/
351 void BTA_HfClientAudioOpen(UINT16 handle);
352 
353 /*******************************************************************************
354 **
355 ** Function         BTA_HfClientAudioClose
356 **
357 ** Description      Close the currently active audio connection to an audio
358 **                  gateway. The data connection remains open
359 **
360 **
361 ** Returns          void
362 **
363 *******************************************************************************/
364 void BTA_HfClientAudioClose(UINT16 handle);
365 
366 /*******************************************************************************
367 **
368 ** Function         BTA_HfClientSendAT
369 **
370 ** Description      send AT command
371 **
372 **
373 ** Returns          void
374 **
375 *******************************************************************************/
376 void BTA_HfClientSendAT(UINT16 handle, tBTA_HF_CLIENT_AT_CMD_TYPE at, UINT32 val1, UINT32 val2, const char *str);
377 
378 #ifdef __cplusplus
379 }
380 #endif
381 
382 #endif /* BTA_HF_CLIENT_API_H */
383