Home | History | Annotate | Download | only in hardware
      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 */
    285