2 * Copyright (C) 2012 The Android Open Source Project
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 #ifndef ANDROID_INCLUDE_BT_HF_H
18 #define ANDROID_INCLUDE_BT_HF_H
22 /* AT response code - OK/Error */
24 BTHF_AT_RESPONSE_ERROR = 0,
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;
37 BTHF_AUDIO_STATE_DISCONNECTED = 0,
38 BTHF_AUDIO_STATE_CONNECTING,
39 BTHF_AUDIO_STATE_CONNECTED,
40 BTHF_AUDIO_STATE_DISCONNECTING
44 BTHF_VR_STATE_STOPPED = 0,
49 BTHF_VOLUME_TYPE_SPK = 0,
53 /* Noise Reduction and Echo Cancellation */
59 /* WBS codec setting */
66 /* CHLD - Call held handling */
68 BTHF_CHLD_TYPE_RELEASEHELD, // Terminate all held or set UDUB("busy") to a waiting call
69 BTHF_CHLD_TYPE_RELEASEACTIVE_ACCEPTHELD, // Terminate all active calls and accepts a waiting/held call
70 BTHF_CHLD_TYPE_HOLDACTIVE_ACCEPTHELD, // Hold all active calls and accepts a waiting/held call
71 BTHF_CHLD_TYPE_ADDHELDTOCONF, // Add all held calls to a conference
74 /** Callback for connection state change.
75 * state will have one of the values from BtHfConnectionState
77 typedef void (*bthf_connection_state_callback)(bthf_connection_state_t state, bt_bdaddr_t *bd_addr);
79 /** Callback for audio connection state change.
80 * state will have one of the values from BtHfAudioState
82 typedef void (*bthf_audio_state_callback)(bthf_audio_state_t state, bt_bdaddr_t *bd_addr);
84 /** Callback for VR connection state change.
85 * state will have one of the values from BtHfVRState
87 typedef void (*bthf_vr_cmd_callback)(bthf_vr_state_t state, bt_bdaddr_t *bd_addr);
89 /** Callback for answer incoming call (ATA)
91 typedef void (*bthf_answer_call_cmd_callback)(bt_bdaddr_t *bd_addr);
93 /** Callback for disconnect call (AT+CHUP)
95 typedef void (*bthf_hangup_call_cmd_callback)(bt_bdaddr_t *bd_addr);
97 /** Callback for disconnect call (AT+CHUP)
98 * type will denote Speaker/Mic gain (BtHfVolumeControl).
100 typedef void (*bthf_volume_cmd_callback)(bthf_volume_type_t type, int volume, bt_bdaddr_t *bd_addr);
102 /** Callback for dialing an outgoing call
103 * If number is NULL, redial
105 typedef void (*bthf_dial_call_cmd_callback)(char *number, bt_bdaddr_t *bd_addr);
107 /** Callback for sending DTMF tones
108 * tone contains the dtmf character to be sent
110 typedef void (*bthf_dtmf_cmd_callback)(char tone, bt_bdaddr_t *bd_addr);
112 /** Callback for enabling/disabling noise reduction/echo cancellation
113 * value will be 1 to enable, 0 to disable
115 typedef void (*bthf_nrec_cmd_callback)(bthf_nrec_t nrec, bt_bdaddr_t *bd_addr);
117 /** Callback for AT+BCS and event from BAC
118 * WBS enable, WBS disable
120 typedef void (*bthf_wbs_callback)(bthf_wbs_config_t wbs, bt_bdaddr_t *bd_addr);
122 /** Callback for call hold handling (AT+CHLD)
123 * value will contain the call hold command (0, 1, 2, 3)
125 typedef void (*bthf_chld_cmd_callback)(bthf_chld_type_t chld, bt_bdaddr_t *bd_addr);
127 /** Callback for CNUM (subscriber number)
129 typedef void (*bthf_cnum_cmd_callback)(bt_bdaddr_t *bd_addr);
131 /** Callback for indicators (CIND)
133 typedef void (*bthf_cind_cmd_callback)(bt_bdaddr_t *bd_addr);
135 /** Callback for operator selection (COPS)
137 typedef void (*bthf_cops_cmd_callback)(bt_bdaddr_t *bd_addr);
139 /** Callback for call list (AT+CLCC)
141 typedef void (*bthf_clcc_cmd_callback) (bt_bdaddr_t *bd_addr);
143 /** Callback for unknown AT command recd from HF
144 * at_string will contain the unparsed AT string
146 typedef void (*bthf_unknown_at_cmd_callback)(char *at_string, bt_bdaddr_t *bd_addr);
148 /** Callback for keypressed (HSP) event.
150 typedef void (*bthf_key_pressed_cmd_callback)(bt_bdaddr_t *bd_addr);
152 /** BT-HF callback structure. */
154 /** set to sizeof(BtHfCallbacks) */
156 bthf_connection_state_callback connection_state_cb;
157 bthf_audio_state_callback audio_state_cb;
158 bthf_vr_cmd_callback vr_cmd_cb;
159 bthf_answer_call_cmd_callback answer_call_cmd_cb;
160 bthf_hangup_call_cmd_callback hangup_call_cmd_cb;
161 bthf_volume_cmd_callback volume_cmd_cb;
162 bthf_dial_call_cmd_callback dial_call_cmd_cb;
163 bthf_dtmf_cmd_callback dtmf_cmd_cb;
164 bthf_nrec_cmd_callback nrec_cmd_cb;
165 bthf_wbs_callback wbs_cb;
166 bthf_chld_cmd_callback chld_cmd_cb;
167 bthf_cnum_cmd_callback cnum_cmd_cb;
168 bthf_cind_cmd_callback cind_cmd_cb;
169 bthf_cops_cmd_callback cops_cmd_cb;
170 bthf_clcc_cmd_callback clcc_cmd_cb;
171 bthf_unknown_at_cmd_callback unknown_at_cmd_cb;
172 bthf_key_pressed_cmd_callback key_pressed_cmd_cb;
175 /** Network Status */
177 BTHF_NETWORK_STATE_NOT_AVAILABLE = 0,
178 BTHF_NETWORK_STATE_AVAILABLE
179 } bthf_network_state_t;
183 BTHF_SERVICE_TYPE_HOME = 0,
184 BTHF_SERVICE_TYPE_ROAMING
185 } bthf_service_type_t;
188 BTHF_CALL_STATE_ACTIVE = 0,
189 BTHF_CALL_STATE_HELD,
190 BTHF_CALL_STATE_DIALING,
191 BTHF_CALL_STATE_ALERTING,
192 BTHF_CALL_STATE_INCOMING,
193 BTHF_CALL_STATE_WAITING,
198 BTHF_CALL_DIRECTION_OUTGOING = 0,
199 BTHF_CALL_DIRECTION_INCOMING
200 } bthf_call_direction_t;
203 BTHF_CALL_TYPE_VOICE = 0,
209 BTHF_CALL_MPTY_TYPE_SINGLE = 0,
210 BTHF_CALL_MPTY_TYPE_MULTI
211 } bthf_call_mpty_type_t;
214 BTHF_CALL_ADDRTYPE_UNKNOWN = 0x81,
215 BTHF_CALL_ADDRTYPE_INTERNATIONAL = 0x91
216 } bthf_call_addrtype_t;
218 /** Represents the standard BT-HF interface. */
221 /** set to sizeof(BtHfInterface) */
224 * Register the BtHf callbacks
226 bt_status_t (*init)(bthf_callbacks_t* callbacks, int max_hf_clients);
228 /** connect to headset */
229 bt_status_t (*connect)(bt_bdaddr_t *bd_addr);
231 /** dis-connect from headset */
232 bt_status_t (*disconnect)(bt_bdaddr_t *bd_addr);
234 /** create an audio connection */
235 bt_status_t (*connect_audio)(bt_bdaddr_t *bd_addr);
237 /** close the audio connection */
238 bt_status_t (*disconnect_audio)(bt_bdaddr_t *bd_addr);
240 /** start voice recognition */
241 bt_status_t (*start_voice_recognition)(bt_bdaddr_t *bd_addr);
243 /** stop voice recognition */
244 bt_status_t (*stop_voice_recognition)(bt_bdaddr_t *bd_addr);
246 /** volume control */
247 bt_status_t (*volume_control) (bthf_volume_type_t type, int volume, bt_bdaddr_t *bd_addr);
249 /** Combined device status change notification */
250 bt_status_t (*device_status_notification)(bthf_network_state_t ntk_state, bthf_service_type_t svc_type, int signal,
253 /** Response for COPS command */
254 bt_status_t (*cops_response)(const char *cops, bt_bdaddr_t *bd_addr);
256 /** Response for CIND command */
257 bt_status_t (*cind_response)(int svc, int num_active, int num_held, bthf_call_state_t call_setup_state,
258 int signal, int roam, int batt_chg, bt_bdaddr_t *bd_addr);
260 /** Pre-formatted AT response, typically in response to unknown AT cmd */
261 bt_status_t (*formatted_at_response)(const char *rsp, bt_bdaddr_t *bd_addr);
263 /** ok/error response
267 bt_status_t (*at_response) (bthf_at_response_t response_code, int error_code, bt_bdaddr_t *bd_addr);
269 /** response for CLCC command
270 * Can be iteratively called for each call index
271 * Call index of 0 will be treated as NULL termination (Completes response)
273 bt_status_t (*clcc_response) (int index, bthf_call_direction_t dir,
274 bthf_call_state_t state, bthf_call_mode_t mode,
275 bthf_call_mpty_type_t mpty, const char *number,
276 bthf_call_addrtype_t type, bt_bdaddr_t *bd_addr);
278 /** notify of a call state change
279 * Each update notifies
280 * 1. Number of active/held/ringing calls
281 * 2. call_state: This denotes the state change that triggered this msg
282 * This will take one of the values from BtHfCallState
283 * 3. number & type: valid only for incoming & waiting call
285 bt_status_t (*phone_state_change) (int num_active, int num_held, bthf_call_state_t call_setup_state,
286 const char *number, bthf_call_addrtype_t type);
288 /** Closes the interface. */
289 void (*cleanup)(void);
291 /** configureation for the SCO codec */
292 bt_status_t (*configure_wbs)(bt_bdaddr_t *bd_addr , bthf_wbs_config_t config);
297 #endif /* ANDROID_INCLUDE_BT_HF_H */