| 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 */ |
| 23 | typedef enum { |
| 24 | BTHF_AT_RESPONSE_ERROR = 0, |
| 25 | BTHF_AT_RESPONSE_OK |
| 26 | } bthf_at_response_t; |
| 27 | |
| 28 | typedef 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 | |
| 36 | typedef 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 | |
| 43 | typedef enum { |
| 44 | BTHF_VR_STATE_STOPPED = 0, |
| 45 | BTHF_VR_STATE_STARTED |
| 46 | } bthf_vr_state_t; |
| 47 | |
| 48 | typedef enum { |
| 49 | BTHF_VOLUME_TYPE_SPK = 0, |
| 50 | BTHF_VOLUME_TYPE_MIC |
| 51 | } bthf_volume_type_t; |
| 52 | |
| 53 | /* Noise Reduction and Echo Cancellation */ |
| 54 | typedef enum |
| 55 | { |
| 56 | BTHF_NREC_STOP, |
| 57 | BTHF_NREC_START |
| 58 | } bthf_nrec_t; |
| 59 | |
| 60 | /* CHLD - Call held handling */ |
| 61 | typedef 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 | */ |
| 72 | typedef 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 | */ |
| 77 | typedef 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 | */ |
| 82 | typedef void (* bthf_vr_cmd_callback)(bthf_vr_state_t state); |
| 83 | |
| 84 | /** Callback for answer incoming call (ATA) |
| 85 | */ |
| 86 | typedef void (* bthf_answer_call_cmd_callback)(); |
| 87 | |
| 88 | /** Callback for disconnect call (AT+CHUP) |
| 89 | */ |
| 90 | typedef void (* bthf_hangup_call_cmd_callback)(); |
| 91 | |
| 92 | /** Callback for disconnect call (AT+CHUP) |
| 93 | * type will denote Speaker/Mic gain (BtHfVolumeControl). |
| 94 | */ |
| 95 | typedef 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 | */ |
| 100 | typedef 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 | */ |
| 105 | typedef 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 | */ |
| 110 | typedef 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 | */ |
| 115 | typedef void (* bthf_chld_cmd_callback)(bthf_chld_type_t chld); |
| 116 | |
| 117 | /** Callback for CNUM (subscriber number) |
| 118 | */ |
| 119 | typedef void (* bthf_cnum_cmd_callback)(); |
| 120 | |
| 121 | /** Callback for indicators (CIND) |
| 122 | */ |
| 123 | typedef void (* bthf_cind_cmd_callback)(); |
| 124 | |
| 125 | /** Callback for operator selection (COPS) |
| 126 | */ |
| 127 | typedef void (* bthf_cops_cmd_callback)(); |
| 128 | |
| 129 | /** Callback for call list (AT+CLCC) |
| 130 | */ |
| 131 | typedef 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 | */ |
| 136 | typedef void (* bthf_unknown_at_cmd_callback)(char *at_string); |
| 137 | |
| 138 | /** Callback for keypressed (HSP) event. |
| 139 | */ |
| 140 | typedef void (* bthf_key_pressed_cmd_callback)(); |
| 141 | |
| 142 | /** BT-HF callback structure. */ |
| 143 | typedef 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 */ |
| 165 | typedef enum |
| 166 | { |
| 167 | BTHF_NETWORK_STATE_NOT_AVAILABLE = 0, |
| 168 | BTHF_NETWORK_STATE_AVAILABLE |
| 169 | } bthf_network_state_t; |
| 170 | |
| 171 | /** Service type */ |
| 172 | typedef enum |
| 173 | { |
| 174 | BTHF_SERVICE_TYPE_HOME = 0, |
| 175 | BTHF_SERVICE_TYPE_ROAMING |
| 176 | } bthf_service_type_t; |
| 177 | |
| 178 | typedef 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 | |
| 188 | typedef enum { |
| 189 | BTHF_CALL_DIRECTION_OUTGOING = 0, |
| 190 | BTHF_CALL_DIRECTION_INCOMING |
| 191 | } bthf_call_direction_t; |
| 192 | |
| 193 | typedef enum { |
| 194 | BTHF_CALL_TYPE_VOICE = 0, |
| 195 | BTHF_CALL_TYPE_DATA, |
| 196 | BTHF_CALL_TYPE_FAX |
| 197 | } bthf_call_mode_t; |
| 198 | |
| 199 | typedef enum { |
| 200 | BTHF_CALL_MPTY_TYPE_SINGLE = 0, |
| 201 | BTHF_CALL_MPTY_TYPE_MULTI |
| 202 | } bthf_call_mpty_type_t; |
| 203 | |
| 204 | typedef 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. */ |
| 209 | typedef 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 */ |