1/*
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
60/* CHLD - Call held handling */
61typedef enum
62{
63    BTHF_CHLD_TYPE_RELEASEHELD,              // Terminate all held or set UDUB("busy") to a waiting call
64    BTHF_CHLD_TYPE_RELEASEACTIVE_ACCEPTHELD, // Terminate all active calls and accepts a waiting/held call
65    BTHF_CHLD_TYPE_HOLDACTIVE_ACCEPTHELD,    // Hold all active calls and accepts a waiting/held call
66    BTHF_CHLD_TYPE_ADDHELDTOCONF,            // Add all held calls to a conference
67} bthf_chld_type_t;
68
69/** Callback for connection state change.
70 *  state will have one of the values from BtHfConnectionState
71 */
72typedef void (* bthf_connection_state_callback)(bthf_connection_state_t state, bt_bdaddr_t *bd_addr);
73
74/** Callback for audio connection state change.
75 *  state will have one of the values from BtHfAudioState
76 */
77typedef void (* bthf_audio_state_callback)(bthf_audio_state_t state, bt_bdaddr_t *bd_addr);
78
79/** Callback for VR connection state change.
80 *  state will have one of the values from BtHfVRState
81 */
82typedef void (* bthf_vr_cmd_callback)(bthf_vr_state_t state);
83
84/** Callback for answer incoming call (ATA)
85 */
86typedef void (* bthf_answer_call_cmd_callback)();
87
88/** Callback for disconnect call (AT+CHUP)
89 */
90typedef void (* bthf_hangup_call_cmd_callback)();
91
92/** Callback for disconnect call (AT+CHUP)
93 *  type will denote Speaker/Mic gain (BtHfVolumeControl).
94 */
95typedef void (* bthf_volume_cmd_callback)(bthf_volume_type_t type, int volume);
96
97/** Callback for dialing an outgoing call
98 *  If number is NULL, redial
99 */
100typedef void (* bthf_dial_call_cmd_callback)(char *number);
101
102/** Callback for sending DTMF tones
103 *  tone contains the dtmf character to be sent
104 */
105typedef void (* bthf_dtmf_cmd_callback)(char tone);
106
107/** Callback for enabling/disabling noise reduction/echo cancellation
108 *  value will be 1 to enable, 0 to disable
109 */
110typedef void (* bthf_nrec_cmd_callback)(bthf_nrec_t nrec);
111
112/** Callback for call hold handling (AT+CHLD)
113 *  value will contain the call hold command (0, 1, 2, 3)
114 */
115typedef void (* bthf_chld_cmd_callback)(bthf_chld_type_t chld);
116
117/** Callback for CNUM (subscriber number)
118 */
119typedef void (* bthf_cnum_cmd_callback)();
120
121/** Callback for indicators (CIND)
122 */
123typedef void (* bthf_cind_cmd_callback)();
124
125/** Callback for operator selection (COPS)
126 */
127typedef void (* bthf_cops_cmd_callback)();
128
129/** Callback for call list (AT+CLCC)
130 */
131typedef void (* bthf_clcc_cmd_callback) ();
132
133/** Callback for unknown AT command recd from HF
134 *  at_string will contain the unparsed AT string
135 */
136typedef void (* bthf_unknown_at_cmd_callback)(char *at_string);
137
138/** Callback for keypressed (HSP) event.
139 */
140typedef void (* bthf_key_pressed_cmd_callback)();
141
142/** BT-HF callback structure. */
143typedef struct {
144    /** set to sizeof(BtHfCallbacks) */
145    size_t      size;
146    bthf_connection_state_callback  connection_state_cb;
147    bthf_audio_state_callback       audio_state_cb;
148    bthf_vr_cmd_callback            vr_cmd_cb;
149    bthf_answer_call_cmd_callback   answer_call_cmd_cb;
150    bthf_hangup_call_cmd_callback   hangup_call_cmd_cb;
151    bthf_volume_cmd_callback        volume_cmd_cb;
152    bthf_dial_call_cmd_callback     dial_call_cmd_cb;
153    bthf_dtmf_cmd_callback          dtmf_cmd_cb;
154    bthf_nrec_cmd_callback          nrec_cmd_cb;
155    bthf_chld_cmd_callback          chld_cmd_cb;
156    bthf_cnum_cmd_callback          cnum_cmd_cb;
157    bthf_cind_cmd_callback          cind_cmd_cb;
158    bthf_cops_cmd_callback          cops_cmd_cb;
159    bthf_clcc_cmd_callback          clcc_cmd_cb;
160    bthf_unknown_at_cmd_callback    unknown_at_cmd_cb;
161    bthf_key_pressed_cmd_callback   key_pressed_cmd_cb;
162} bthf_callbacks_t;
163
164/** Network Status */
165typedef enum
166{
167    BTHF_NETWORK_STATE_NOT_AVAILABLE = 0,
168    BTHF_NETWORK_STATE_AVAILABLE
169} bthf_network_state_t;
170
171/** Service type */
172typedef enum
173{
174    BTHF_SERVICE_TYPE_HOME = 0,
175    BTHF_SERVICE_TYPE_ROAMING
176} bthf_service_type_t;
177
178typedef enum {
179    BTHF_CALL_STATE_ACTIVE = 0,
180    BTHF_CALL_STATE_HELD,
181    BTHF_CALL_STATE_DIALING,
182    BTHF_CALL_STATE_ALERTING,
183    BTHF_CALL_STATE_INCOMING,
184    BTHF_CALL_STATE_WAITING,
185    BTHF_CALL_STATE_IDLE
186} bthf_call_state_t;
187
188typedef enum {
189    BTHF_CALL_DIRECTION_OUTGOING = 0,
190    BTHF_CALL_DIRECTION_INCOMING
191} bthf_call_direction_t;
192
193typedef enum {
194    BTHF_CALL_TYPE_VOICE = 0,
195    BTHF_CALL_TYPE_DATA,
196    BTHF_CALL_TYPE_FAX
197} bthf_call_mode_t;
198
199typedef enum {
200    BTHF_CALL_MPTY_TYPE_SINGLE = 0,
201    BTHF_CALL_MPTY_TYPE_MULTI
202} bthf_call_mpty_type_t;
203
204typedef enum {
205    BTHF_CALL_ADDRTYPE_UNKNOWN = 0x81,
206    BTHF_CALL_ADDRTYPE_INTERNATIONAL = 0x91
207} bthf_call_addrtype_t;
208/** Represents the standard BT-HF interface. */
209typedef struct {
210
211    /** set to sizeof(BtHfInterface) */
212    size_t          size;
213    /**
214     * Register the BtHf callbacks
215     */
216    bt_status_t (*init)( bthf_callbacks_t* callbacks );
217
218    /** connect to headset */
219    bt_status_t (*connect)( bt_bdaddr_t *bd_addr );
220
221    /** dis-connect from headset */
222    bt_status_t (*disconnect)( bt_bdaddr_t *bd_addr );
223
224    /** create an audio connection */
225    bt_status_t (*connect_audio)( bt_bdaddr_t *bd_addr );
226
227    /** close the audio connection */
228    bt_status_t (*disconnect_audio)( bt_bdaddr_t *bd_addr );
229
230    /** start voice recognition */
231    bt_status_t (*start_voice_recognition)();
232
233    /** stop voice recognition */
234    bt_status_t (*stop_voice_recognition)();
235
236    /** volume control */
237    bt_status_t (*volume_control) (bthf_volume_type_t type, int volume);
238
239    /** Combined device status change notification */
240    bt_status_t (*device_status_notification)(bthf_network_state_t ntk_state, bthf_service_type_t svc_type, int signal,
241                           int batt_chg);
242
243    /** Response for COPS command */
244    bt_status_t (*cops_response)(const char *cops);
245
246    /** Response for CIND command */
247    bt_status_t (*cind_response)(int svc, int num_active, int num_held, bthf_call_state_t call_setup_state,
248                                 int signal, int roam, int batt_chg);
249
250    /** Pre-formatted AT response, typically in response to unknown AT cmd */
251    bt_status_t (*formatted_at_response)(const char *rsp);
252
253    /** ok/error response
254     *  ERROR (0)
255     *  OK    (1)
256     */
257    bt_status_t (*at_response) (bthf_at_response_t response_code, int error_code);
258
259    /** response for CLCC command
260     *  Can be iteratively called for each call index
261     *  Call index of 0 will be treated as NULL termination (Completes response)
262     */
263    bt_status_t (*clcc_response) (int index, bthf_call_direction_t dir,
264                                bthf_call_state_t state, bthf_call_mode_t mode,
265                                bthf_call_mpty_type_t mpty, const char *number,
266                                bthf_call_addrtype_t type);
267
268    /** notify of a call state change
269     *  Each update notifies
270     *    1. Number of active/held/ringing calls
271     *    2. call_state: This denotes the state change that triggered this msg
272     *                   This will take one of the values from BtHfCallState
273     *    3. number & type: valid only for incoming & waiting call
274    */
275    bt_status_t (*phone_state_change) (int num_active, int num_held, bthf_call_state_t call_setup_state,
276                                       const char *number, bthf_call_addrtype_t type);
277
278    /** Closes the interface. */
279    void  (*cleanup)( void );
280} bthf_interface_t;
281
282__END_DECLS
283
284#endif /* ANDROID_INCLUDE_BT_HF_H */
285