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