1 /* 2 * Copyright (C) 2012-2014 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_CLIENT_H 18 #define ANDROID_INCLUDE_BT_HF_CLIENT_H 19 20 __BEGIN_DECLS 21 22 typedef enum { 23 BTHF_CLIENT_CONNECTION_STATE_DISCONNECTED = 0, 24 BTHF_CLIENT_CONNECTION_STATE_CONNECTING, 25 BTHF_CLIENT_CONNECTION_STATE_CONNECTED, 26 BTHF_CLIENT_CONNECTION_STATE_SLC_CONNECTED, 27 BTHF_CLIENT_CONNECTION_STATE_DISCONNECTING 28 } bthf_client_connection_state_t; 29 30 typedef enum { 31 BTHF_CLIENT_AUDIO_STATE_DISCONNECTED = 0, 32 BTHF_CLIENT_AUDIO_STATE_CONNECTING, 33 BTHF_CLIENT_AUDIO_STATE_CONNECTED, 34 BTHF_CLIENT_AUDIO_STATE_CONNECTED_MSBC, 35 } bthf_client_audio_state_t; 36 37 typedef enum { 38 BTHF_CLIENT_VR_STATE_STOPPED = 0, 39 BTHF_CLIENT_VR_STATE_STARTED 40 } bthf_client_vr_state_t; 41 42 typedef enum { 43 BTHF_CLIENT_VOLUME_TYPE_SPK = 0, 44 BTHF_CLIENT_VOLUME_TYPE_MIC 45 } bthf_client_volume_type_t; 46 47 typedef enum 48 { 49 BTHF_CLIENT_NETWORK_STATE_NOT_AVAILABLE = 0, 50 BTHF_CLIENT_NETWORK_STATE_AVAILABLE 51 } bthf_client_network_state_t; 52 53 typedef enum 54 { 55 BTHF_CLIENT_SERVICE_TYPE_HOME = 0, 56 BTHF_CLIENT_SERVICE_TYPE_ROAMING 57 } bthf_client_service_type_t; 58 59 typedef enum { 60 BTHF_CLIENT_CALL_STATE_ACTIVE = 0, 61 BTHF_CLIENT_CALL_STATE_HELD, 62 BTHF_CLIENT_CALL_STATE_DIALING, 63 BTHF_CLIENT_CALL_STATE_ALERTING, 64 BTHF_CLIENT_CALL_STATE_INCOMING, 65 BTHF_CLIENT_CALL_STATE_WAITING, 66 BTHF_CLIENT_CALL_STATE_HELD_BY_RESP_HOLD, 67 } bthf_client_call_state_t; 68 69 typedef enum { 70 BTHF_CLIENT_CALL_NO_CALLS_IN_PROGRESS = 0, 71 BTHF_CLIENT_CALL_CALLS_IN_PROGRESS 72 } bthf_client_call_t; 73 74 typedef enum { 75 BTHF_CLIENT_CALLSETUP_NONE = 0, 76 BTHF_CLIENT_CALLSETUP_INCOMING, 77 BTHF_CLIENT_CALLSETUP_OUTGOING, 78 BTHF_CLIENT_CALLSETUP_ALERTING 79 80 } bthf_client_callsetup_t; 81 82 typedef enum { 83 BTHF_CLIENT_CALLHELD_NONE = 0, 84 BTHF_CLIENT_CALLHELD_HOLD_AND_ACTIVE, 85 BTHF_CLIENT_CALLHELD_HOLD, 86 } bthf_client_callheld_t; 87 88 typedef enum { 89 BTHF_CLIENT_RESP_AND_HOLD_HELD = 0, 90 BTRH_CLIENT_RESP_AND_HOLD_ACCEPT, 91 BTRH_CLIENT_RESP_AND_HOLD_REJECT, 92 } bthf_client_resp_and_hold_t; 93 94 typedef enum { 95 BTHF_CLIENT_CALL_DIRECTION_OUTGOING = 0, 96 BTHF_CLIENT_CALL_DIRECTION_INCOMING 97 } bthf_client_call_direction_t; 98 99 typedef enum { 100 BTHF_CLIENT_CALL_MPTY_TYPE_SINGLE = 0, 101 BTHF_CLIENT_CALL_MPTY_TYPE_MULTI 102 } bthf_client_call_mpty_type_t; 103 104 typedef enum { 105 BTHF_CLIENT_CMD_COMPLETE_OK = 0, 106 BTHF_CLIENT_CMD_COMPLETE_ERROR, 107 BTHF_CLIENT_CMD_COMPLETE_ERROR_NO_CARRIER, 108 BTHF_CLIENT_CMD_COMPLETE_ERROR_BUSY, 109 BTHF_CLIENT_CMD_COMPLETE_ERROR_NO_ANSWER, 110 BTHF_CLIENT_CMD_COMPLETE_ERROR_DELAYED, 111 BTHF_CLIENT_CMD_COMPLETE_ERROR_BLACKLISTED, 112 BTHF_CLIENT_CMD_COMPLETE_ERROR_CME 113 } bthf_client_cmd_complete_t; 114 115 typedef enum { 116 BTHF_CLIENT_CALL_ACTION_CHLD_0 = 0, 117 BTHF_CLIENT_CALL_ACTION_CHLD_1, 118 BTHF_CLIENT_CALL_ACTION_CHLD_2, 119 BTHF_CLIENT_CALL_ACTION_CHLD_3, 120 BTHF_CLIENT_CALL_ACTION_CHLD_4, 121 BTHF_CLIENT_CALL_ACTION_CHLD_1x, 122 BTHF_CLIENT_CALL_ACTION_CHLD_2x, 123 BTHF_CLIENT_CALL_ACTION_ATA, 124 BTHF_CLIENT_CALL_ACTION_CHUP, 125 BTHF_CLIENT_CALL_ACTION_BTRH_0, 126 BTHF_CLIENT_CALL_ACTION_BTRH_1, 127 BTHF_CLIENT_CALL_ACTION_BTRH_2, 128 } bthf_client_call_action_t; 129 130 typedef enum { 131 BTHF_CLIENT_SERVICE_UNKNOWN = 0, 132 BTHF_CLIENT_SERVICE_VOICE, 133 BTHF_CLIENT_SERVICE_FAX 134 } bthf_client_subscriber_service_type_t; 135 136 typedef enum { 137 BTHF_CLIENT_IN_BAND_RINGTONE_NOT_PROVIDED = 0, 138 BTHF_CLIENT_IN_BAND_RINGTONE_PROVIDED, 139 } bthf_client_in_band_ring_state_t; 140 141 /* Peer features masks */ 142 #define BTHF_CLIENT_PEER_FEAT_3WAY 0x00000001 /* Three-way calling */ 143 #define BTHF_CLIENT_PEER_FEAT_ECNR 0x00000002 /* Echo cancellation and/or noise reduction */ 144 #define BTHF_CLIENT_PEER_FEAT_VREC 0x00000004 /* Voice recognition */ 145 #define BTHF_CLIENT_PEER_FEAT_INBAND 0x00000008 /* In-band ring tone */ 146 #define BTHF_CLIENT_PEER_FEAT_VTAG 0x00000010 /* Attach a phone number to a voice tag */ 147 #define BTHF_CLIENT_PEER_FEAT_REJECT 0x00000020 /* Ability to reject incoming call */ 148 #define BTHF_CLIENT_PEER_FEAT_ECS 0x00000040 /* Enhanced Call Status */ 149 #define BTHF_CLIENT_PEER_FEAT_ECC 0x00000080 /* Enhanced Call Control */ 150 #define BTHF_CLIENT_PEER_FEAT_EXTERR 0x00000100 /* Extended error codes */ 151 #define BTHF_CLIENT_PEER_FEAT_CODEC 0x00000200 /* Codec Negotiation */ 152 153 /* Peer call handling features masks */ 154 #define BTHF_CLIENT_CHLD_FEAT_REL 0x00000001 /* 0 Release waiting call or held calls */ 155 #define BTHF_CLIENT_CHLD_FEAT_REL_ACC 0x00000002 /* 1 Release active calls and accept other 156 (waiting or held) cal */ 157 #define BTHF_CLIENT_CHLD_FEAT_REL_X 0x00000004 /* 1x Release specified active call only */ 158 #define BTHF_CLIENT_CHLD_FEAT_HOLD_ACC 0x00000008 /* 2 Active calls on hold and accept other 159 (waiting or held) call */ 160 #define BTHF_CLIENT_CHLD_FEAT_PRIV_X 0x00000010 /* 2x Request private mode with specified 161 call (put the rest on hold) */ 162 #define BTHF_CLIENT_CHLD_FEAT_MERGE 0x00000020 /* 3 Add held call to multiparty */ 163 #define BTHF_CLIENT_CHLD_FEAT_MERGE_DETACH 0x00000040 /* 4 Connect two calls and leave 164 (disconnect from) multiparty */ 165 166 /** Callback for connection state change. 167 * state will have one of the values from BtHfConnectionState 168 * peer/chld_features are valid only for BTHF_CLIENT_CONNECTION_STATE_SLC_CONNECTED state 169 */ 170 typedef void (* bthf_client_connection_state_callback)(bthf_client_connection_state_t state, 171 unsigned int peer_feat, 172 unsigned int chld_feat, 173 bt_bdaddr_t *bd_addr); 174 175 /** Callback for audio connection state change. 176 * state will have one of the values from BtHfAudioState 177 */ 178 typedef void (* bthf_client_audio_state_callback)(bthf_client_audio_state_t state, 179 bt_bdaddr_t *bd_addr); 180 181 /** Callback for VR connection state change. 182 * state will have one of the values from BtHfVRState 183 */ 184 typedef void (* bthf_client_vr_cmd_callback)(bthf_client_vr_state_t state); 185 186 /** Callback for network state change 187 */ 188 typedef void (* bthf_client_network_state_callback) (bthf_client_network_state_t state); 189 190 /** Callback for network roaming status change 191 */ 192 typedef void (* bthf_client_network_roaming_callback) (bthf_client_service_type_t type); 193 194 /** Callback for signal strength indication 195 */ 196 typedef void (* bthf_client_network_signal_callback) (int signal_strength); 197 198 /** Callback for battery level indication 199 */ 200 typedef void (* bthf_client_battery_level_callback) (int battery_level); 201 202 /** Callback for current operator name 203 */ 204 typedef void (* bthf_client_current_operator_callback) (const char *name); 205 206 /** Callback for call indicator 207 */ 208 typedef void (* bthf_client_call_callback) (bthf_client_call_t call); 209 210 /** Callback for callsetup indicator 211 */ 212 typedef void (* bthf_client_callsetup_callback) (bthf_client_callsetup_t callsetup); 213 214 /** Callback for callheld indicator 215 */ 216 typedef void (* bthf_client_callheld_callback) (bthf_client_callheld_t callheld); 217 218 /** Callback for response and hold 219 */ 220 typedef void (* bthf_client_resp_and_hold_callback) (bthf_client_resp_and_hold_t resp_and_hold); 221 222 /** Callback for Calling Line Identification notification 223 * Will be called only when there is an incoming call and number is provided. 224 */ 225 typedef void (* bthf_client_clip_callback) (const char *number); 226 227 /** 228 * Callback for Call Waiting notification 229 */ 230 typedef void (* bthf_client_call_waiting_callback) (const char *number); 231 232 /** 233 * Callback for listing current calls. Can be called multiple time. 234 * If number is unknown NULL is passed. 235 */ 236 typedef void (*bthf_client_current_calls) (int index, bthf_client_call_direction_t dir, 237 bthf_client_call_state_t state, 238 bthf_client_call_mpty_type_t mpty, 239 const char *number); 240 241 /** Callback for audio volume change 242 */ 243 typedef void (*bthf_client_volume_change_callback) (bthf_client_volume_type_t type, int volume); 244 245 /** Callback for command complete event 246 * cme is valid only for BTHF_CLIENT_CMD_COMPLETE_ERROR_CME type 247 */ 248 typedef void (*bthf_client_cmd_complete_callback) (bthf_client_cmd_complete_t type, int cme); 249 250 /** Callback for subscriber information 251 */ 252 typedef void (* bthf_client_subscriber_info_callback) (const char *name, 253 bthf_client_subscriber_service_type_t type); 254 255 /** Callback for in-band ring tone settings 256 */ 257 typedef void (* bthf_client_in_band_ring_tone_callback) (bthf_client_in_band_ring_state_t state); 258 259 /** 260 * Callback for requested number from AG 261 */ 262 typedef void (* bthf_client_last_voice_tag_number_callback) (const char *number); 263 264 /** 265 * Callback for sending ring indication to app 266 */ 267 typedef void (* bthf_client_ring_indication_callback) (void); 268 269 /** BT-HF callback structure. */ 270 typedef struct { 271 /** set to sizeof(BtHfClientCallbacks) */ 272 size_t size; 273 bthf_client_connection_state_callback connection_state_cb; 274 bthf_client_audio_state_callback audio_state_cb; 275 bthf_client_vr_cmd_callback vr_cmd_cb; 276 bthf_client_network_state_callback network_state_cb; 277 bthf_client_network_roaming_callback network_roaming_cb; 278 bthf_client_network_signal_callback network_signal_cb; 279 bthf_client_battery_level_callback battery_level_cb; 280 bthf_client_current_operator_callback current_operator_cb; 281 bthf_client_call_callback call_cb; 282 bthf_client_callsetup_callback callsetup_cb; 283 bthf_client_callheld_callback callheld_cb; 284 bthf_client_resp_and_hold_callback resp_and_hold_cb; 285 bthf_client_clip_callback clip_cb; 286 bthf_client_call_waiting_callback call_waiting_cb; 287 bthf_client_current_calls current_calls_cb; 288 bthf_client_volume_change_callback volume_change_cb; 289 bthf_client_cmd_complete_callback cmd_complete_cb; 290 bthf_client_subscriber_info_callback subscriber_info_cb; 291 bthf_client_in_band_ring_tone_callback in_band_ring_tone_cb; 292 bthf_client_last_voice_tag_number_callback last_voice_tag_number_callback; 293 bthf_client_ring_indication_callback ring_indication_cb; 294 } bthf_client_callbacks_t; 295 296 /** Represents the standard BT-HF interface. */ 297 typedef struct { 298 299 /** set to sizeof(BtHfClientInterface) */ 300 size_t size; 301 /** 302 * Register the BtHf callbacks 303 */ 304 bt_status_t (*init)(bthf_client_callbacks_t* callbacks); 305 306 /** connect to audio gateway */ 307 bt_status_t (*connect)(bt_bdaddr_t *bd_addr); 308 309 /** disconnect from audio gateway */ 310 bt_status_t (*disconnect)(bt_bdaddr_t *bd_addr); 311 312 /** create an audio connection */ 313 bt_status_t (*connect_audio)(bt_bdaddr_t *bd_addr); 314 315 /** close the audio connection */ 316 bt_status_t (*disconnect_audio)(bt_bdaddr_t *bd_addr); 317 318 /** start voice recognition */ 319 bt_status_t (*start_voice_recognition)(void); 320 321 /** stop voice recognition */ 322 bt_status_t (*stop_voice_recognition)(void); 323 324 /** volume control */ 325 bt_status_t (*volume_control) (bthf_client_volume_type_t type, int volume); 326 327 /** place a call with number a number 328 * if number is NULL last called number is called (aka re-dial)*/ 329 bt_status_t (*dial) (const char *number); 330 331 /** place a call with number specified by location (speed dial) */ 332 bt_status_t (*dial_memory) (int location); 333 334 /** perform specified call related action 335 * idx is limited only for enhanced call control related action 336 */ 337 bt_status_t (*handle_call_action) (bthf_client_call_action_t action, int idx); 338 339 /** query list of current calls */ 340 bt_status_t (*query_current_calls) (void); 341 342 /** query name of current selected operator */ 343 bt_status_t (*query_current_operator_name) (void); 344 345 /** Retrieve subscriber information */ 346 bt_status_t (*retrieve_subscriber_info) (void); 347 348 /** Send DTMF code*/ 349 bt_status_t (*send_dtmf) (char code); 350 351 /** Request a phone number from AG corresponding to last voice tag recorded */ 352 bt_status_t (*request_last_voice_tag_number) (void); 353 354 /** Closes the interface. */ 355 void (*cleanup)(void); 356 357 /** Send AT Command. */ 358 bt_status_t (*send_at_cmd) (int cmd, int val1, int val2, const char *arg); 359 } bthf_client_interface_t; 360 361 __END_DECLS 362 363 #endif /* ANDROID_INCLUDE_BT_HF_CLIENT_H */ 364