| /* |
| * Copyright (C) 2012-2014 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #ifndef ANDROID_INCLUDE_BT_HF_CLIENT_H |
| #define ANDROID_INCLUDE_BT_HF_CLIENT_H |
| |
| __BEGIN_DECLS |
| |
| typedef enum { |
| BTHF_CLIENT_CONNECTION_STATE_DISCONNECTED = 0, |
| BTHF_CLIENT_CONNECTION_STATE_CONNECTING, |
| BTHF_CLIENT_CONNECTION_STATE_CONNECTED, |
| BTHF_CLIENT_CONNECTION_STATE_SLC_CONNECTED, |
| BTHF_CLIENT_CONNECTION_STATE_DISCONNECTING |
| } bthf_client_connection_state_t; |
| |
| typedef enum { |
| BTHF_CLIENT_AUDIO_STATE_DISCONNECTED = 0, |
| BTHF_CLIENT_AUDIO_STATE_CONNECTING, |
| BTHF_CLIENT_AUDIO_STATE_CONNECTED, |
| BTHF_CLIENT_AUDIO_STATE_CONNECTED_MSBC, |
| } bthf_client_audio_state_t; |
| |
| typedef enum { |
| BTHF_CLIENT_VR_STATE_STOPPED = 0, |
| BTHF_CLIENT_VR_STATE_STARTED |
| } bthf_client_vr_state_t; |
| |
| typedef enum { |
| BTHF_CLIENT_VOLUME_TYPE_SPK = 0, |
| BTHF_CLIENT_VOLUME_TYPE_MIC |
| } bthf_client_volume_type_t; |
| |
| typedef enum { |
| BTHF_CLIENT_NETWORK_STATE_NOT_AVAILABLE = 0, |
| BTHF_CLIENT_NETWORK_STATE_AVAILABLE |
| } bthf_client_network_state_t; |
| |
| typedef enum { |
| BTHF_CLIENT_SERVICE_TYPE_HOME = 0, |
| BTHF_CLIENT_SERVICE_TYPE_ROAMING |
| } bthf_client_service_type_t; |
| |
| typedef enum { |
| BTHF_CLIENT_CALL_STATE_ACTIVE = 0, |
| BTHF_CLIENT_CALL_STATE_HELD, |
| BTHF_CLIENT_CALL_STATE_DIALING, |
| BTHF_CLIENT_CALL_STATE_ALERTING, |
| BTHF_CLIENT_CALL_STATE_INCOMING, |
| BTHF_CLIENT_CALL_STATE_WAITING, |
| BTHF_CLIENT_CALL_STATE_HELD_BY_RESP_HOLD, |
| } bthf_client_call_state_t; |
| |
| typedef enum { |
| BTHF_CLIENT_CALL_NO_CALLS_IN_PROGRESS = 0, |
| BTHF_CLIENT_CALL_CALLS_IN_PROGRESS |
| } bthf_client_call_t; |
| |
| typedef enum { |
| BTHF_CLIENT_CALLSETUP_NONE = 0, |
| BTHF_CLIENT_CALLSETUP_INCOMING, |
| BTHF_CLIENT_CALLSETUP_OUTGOING, |
| BTHF_CLIENT_CALLSETUP_ALERTING |
| |
| } bthf_client_callsetup_t; |
| |
| typedef enum { |
| BTHF_CLIENT_CALLHELD_NONE = 0, |
| BTHF_CLIENT_CALLHELD_HOLD_AND_ACTIVE, |
| BTHF_CLIENT_CALLHELD_HOLD, |
| } bthf_client_callheld_t; |
| |
| typedef enum { |
| BTHF_CLIENT_RESP_AND_HOLD_HELD = 0, |
| BTRH_CLIENT_RESP_AND_HOLD_ACCEPT, |
| BTRH_CLIENT_RESP_AND_HOLD_REJECT, |
| } bthf_client_resp_and_hold_t; |
| |
| typedef enum { |
| BTHF_CLIENT_CALL_DIRECTION_OUTGOING = 0, |
| BTHF_CLIENT_CALL_DIRECTION_INCOMING |
| } bthf_client_call_direction_t; |
| |
| typedef enum { |
| BTHF_CLIENT_CALL_MPTY_TYPE_SINGLE = 0, |
| BTHF_CLIENT_CALL_MPTY_TYPE_MULTI |
| } bthf_client_call_mpty_type_t; |
| |
| typedef enum { |
| BTHF_CLIENT_CMD_COMPLETE_OK = 0, |
| BTHF_CLIENT_CMD_COMPLETE_ERROR, |
| BTHF_CLIENT_CMD_COMPLETE_ERROR_NO_CARRIER, |
| BTHF_CLIENT_CMD_COMPLETE_ERROR_BUSY, |
| BTHF_CLIENT_CMD_COMPLETE_ERROR_NO_ANSWER, |
| BTHF_CLIENT_CMD_COMPLETE_ERROR_DELAYED, |
| BTHF_CLIENT_CMD_COMPLETE_ERROR_BLACKLISTED, |
| BTHF_CLIENT_CMD_COMPLETE_ERROR_CME |
| } bthf_client_cmd_complete_t; |
| |
| typedef enum { |
| BTHF_CLIENT_CALL_ACTION_CHLD_0 = 0, |
| BTHF_CLIENT_CALL_ACTION_CHLD_1, |
| BTHF_CLIENT_CALL_ACTION_CHLD_2, |
| BTHF_CLIENT_CALL_ACTION_CHLD_3, |
| BTHF_CLIENT_CALL_ACTION_CHLD_4, |
| BTHF_CLIENT_CALL_ACTION_CHLD_1x, |
| BTHF_CLIENT_CALL_ACTION_CHLD_2x, |
| BTHF_CLIENT_CALL_ACTION_ATA, |
| BTHF_CLIENT_CALL_ACTION_CHUP, |
| BTHF_CLIENT_CALL_ACTION_BTRH_0, |
| BTHF_CLIENT_CALL_ACTION_BTRH_1, |
| BTHF_CLIENT_CALL_ACTION_BTRH_2, |
| } bthf_client_call_action_t; |
| |
| typedef enum { |
| BTHF_CLIENT_SERVICE_UNKNOWN = 0, |
| BTHF_CLIENT_SERVICE_VOICE, |
| BTHF_CLIENT_SERVICE_FAX |
| } bthf_client_subscriber_service_type_t; |
| |
| typedef enum { |
| BTHF_CLIENT_IN_BAND_RINGTONE_NOT_PROVIDED = 0, |
| BTHF_CLIENT_IN_BAND_RINGTONE_PROVIDED, |
| } bthf_client_in_band_ring_state_t; |
| |
| /* Peer features masks */ |
| #define BTHF_CLIENT_PEER_FEAT_3WAY 0x00000001 /* Three-way calling */ |
| #define BTHF_CLIENT_PEER_FEAT_ECNR \ |
| 0x00000002 /* Echo cancellation and/or noise reduction */ |
| #define BTHF_CLIENT_PEER_FEAT_VREC 0x00000004 /* Voice recognition */ |
| #define BTHF_CLIENT_PEER_FEAT_INBAND 0x00000008 /* In-band ring tone */ |
| #define BTHF_CLIENT_PEER_FEAT_VTAG \ |
| 0x00000010 /* Attach a phone number to a voice tag */ |
| #define BTHF_CLIENT_PEER_FEAT_REJECT \ |
| 0x00000020 /* Ability to reject incoming call */ |
| #define BTHF_CLIENT_PEER_FEAT_ECS 0x00000040 /* Enhanced Call Status */ |
| #define BTHF_CLIENT_PEER_FEAT_ECC 0x00000080 /* Enhanced Call Control */ |
| #define BTHF_CLIENT_PEER_FEAT_EXTERR 0x00000100 /* Extended error codes */ |
| #define BTHF_CLIENT_PEER_FEAT_CODEC 0x00000200 /* Codec Negotiation */ |
| |
| /* Peer call handling features masks */ |
| #define BTHF_CLIENT_CHLD_FEAT_REL \ |
| 0x00000001 /* 0 Release waiting call or held calls */ |
| #define BTHF_CLIENT_CHLD_FEAT_REL_ACC \ |
| 0x00000002 /* 1 Release active calls and accept other \ |
| (waiting or held) cal */ |
| #define BTHF_CLIENT_CHLD_FEAT_REL_X \ |
| 0x00000004 /* 1x Release specified active call only */ |
| #define BTHF_CLIENT_CHLD_FEAT_HOLD_ACC \ |
| 0x00000008 /* 2 Active calls on hold and accept other \ |
| (waiting or held) call */ |
| #define BTHF_CLIENT_CHLD_FEAT_PRIV_X \ |
| 0x00000010 /* 2x Request private mode with specified \ |
| call (put the rest on hold) */ |
| #define BTHF_CLIENT_CHLD_FEAT_MERGE \ |
| 0x00000020 /* 3 Add held call to multiparty */ |
| #define BTHF_CLIENT_CHLD_FEAT_MERGE_DETACH \ |
| 0x00000040 /* 4 Connect two calls and leave \ |
| (disconnect from) multiparty */ |
| |
| /** Callback for connection state change. |
| * state will have one of the values from BtHfConnectionState |
| * peer/chld_features are valid only for |
| * BTHF_CLIENT_CONNECTION_STATE_SLC_CONNECTED state |
| */ |
| typedef void (*bthf_client_connection_state_callback)( |
| const RawAddress* bd_addr, bthf_client_connection_state_t state, |
| unsigned int peer_feat, unsigned int chld_feat); |
| |
| /** Callback for audio connection state change. |
| * state will have one of the values from BtHfAudioState |
| */ |
| typedef void (*bthf_client_audio_state_callback)( |
| const RawAddress* bd_addr, bthf_client_audio_state_t state); |
| |
| /** Callback for VR connection state change. |
| * state will have one of the values from BtHfVRState |
| */ |
| typedef void (*bthf_client_vr_cmd_callback)(const RawAddress* bd_addr, |
| bthf_client_vr_state_t state); |
| |
| /** Callback for network state change |
| */ |
| typedef void (*bthf_client_network_state_callback)( |
| const RawAddress* bd_addr, bthf_client_network_state_t state); |
| |
| /** Callback for network roaming status change |
| */ |
| typedef void (*bthf_client_network_roaming_callback)( |
| const RawAddress* bd_addr, bthf_client_service_type_t type); |
| |
| /** Callback for signal strength indication |
| */ |
| typedef void (*bthf_client_network_signal_callback)(const RawAddress* bd_addr, |
| int signal_strength); |
| |
| /** Callback for battery level indication |
| */ |
| typedef void (*bthf_client_battery_level_callback)(const RawAddress* bd_addr, |
| int battery_level); |
| |
| /** Callback for current operator name |
| */ |
| typedef void (*bthf_client_current_operator_callback)(const RawAddress* bd_addr, |
| const char* name); |
| |
| /** Callback for call indicator |
| */ |
| typedef void (*bthf_client_call_callback)(const RawAddress* bd_addr, |
| bthf_client_call_t call); |
| |
| /** Callback for callsetup indicator |
| */ |
| typedef void (*bthf_client_callsetup_callback)( |
| const RawAddress* bd_addr, bthf_client_callsetup_t callsetup); |
| |
| /** Callback for callheld indicator |
| */ |
| typedef void (*bthf_client_callheld_callback)(const RawAddress* bd_addr, |
| bthf_client_callheld_t callheld); |
| |
| /** Callback for response and hold |
| */ |
| typedef void (*bthf_client_resp_and_hold_callback)( |
| const RawAddress* bd_addr, bthf_client_resp_and_hold_t resp_and_hold); |
| |
| /** Callback for Calling Line Identification notification |
| * Will be called only when there is an incoming call and number is provided. |
| */ |
| typedef void (*bthf_client_clip_callback)(const RawAddress* bd_addr, |
| const char* number); |
| |
| /** |
| * Callback for Call Waiting notification |
| */ |
| typedef void (*bthf_client_call_waiting_callback)(const RawAddress* bd_addr, |
| const char* number); |
| |
| /** |
| * Callback for listing current calls. Can be called multiple time. |
| * If number is unknown NULL is passed. |
| */ |
| typedef void (*bthf_client_current_calls)(const RawAddress* bd_addr, int index, |
| bthf_client_call_direction_t dir, |
| bthf_client_call_state_t state, |
| bthf_client_call_mpty_type_t mpty, |
| const char* number); |
| |
| /** Callback for audio volume change |
| */ |
| typedef void (*bthf_client_volume_change_callback)( |
| const RawAddress* bd_addr, bthf_client_volume_type_t type, int volume); |
| |
| /** Callback for command complete event |
| * cme is valid only for BTHF_CLIENT_CMD_COMPLETE_ERROR_CME type |
| */ |
| typedef void (*bthf_client_cmd_complete_callback)( |
| const RawAddress* bd_addr, bthf_client_cmd_complete_t type, int cme); |
| |
| /** Callback for subscriber information |
| */ |
| typedef void (*bthf_client_subscriber_info_callback)( |
| const RawAddress* bd_addr, const char* name, |
| bthf_client_subscriber_service_type_t type); |
| |
| /** Callback for in-band ring tone settings |
| */ |
| typedef void (*bthf_client_in_band_ring_tone_callback)( |
| const RawAddress* bd_addr, bthf_client_in_band_ring_state_t state); |
| |
| /** |
| * Callback for requested number from AG |
| */ |
| typedef void (*bthf_client_last_voice_tag_number_callback)( |
| const RawAddress* bd_addr, const char* number); |
| |
| /** |
| * Callback for sending ring indication to app |
| */ |
| typedef void (*bthf_client_ring_indication_callback)(const RawAddress* bd_addr); |
| |
| /** BT-HF callback structure. */ |
| typedef struct { |
| /** set to sizeof(BtHfClientCallbacks) */ |
| size_t size; |
| bthf_client_connection_state_callback connection_state_cb; |
| bthf_client_audio_state_callback audio_state_cb; |
| bthf_client_vr_cmd_callback vr_cmd_cb; |
| bthf_client_network_state_callback network_state_cb; |
| bthf_client_network_roaming_callback network_roaming_cb; |
| bthf_client_network_signal_callback network_signal_cb; |
| bthf_client_battery_level_callback battery_level_cb; |
| bthf_client_current_operator_callback current_operator_cb; |
| bthf_client_call_callback call_cb; |
| bthf_client_callsetup_callback callsetup_cb; |
| bthf_client_callheld_callback callheld_cb; |
| bthf_client_resp_and_hold_callback resp_and_hold_cb; |
| bthf_client_clip_callback clip_cb; |
| bthf_client_call_waiting_callback call_waiting_cb; |
| bthf_client_current_calls current_calls_cb; |
| bthf_client_volume_change_callback volume_change_cb; |
| bthf_client_cmd_complete_callback cmd_complete_cb; |
| bthf_client_subscriber_info_callback subscriber_info_cb; |
| bthf_client_in_band_ring_tone_callback in_band_ring_tone_cb; |
| bthf_client_last_voice_tag_number_callback last_voice_tag_number_callback; |
| bthf_client_ring_indication_callback ring_indication_cb; |
| } bthf_client_callbacks_t; |
| |
| /** Represents the standard BT-HF interface. */ |
| typedef struct { |
| /** set to sizeof(BtHfClientInterface) */ |
| size_t size; |
| /** |
| * Register the BtHf callbacks |
| */ |
| bt_status_t (*init)(bthf_client_callbacks_t* callbacks); |
| |
| /** connect to audio gateway */ |
| bt_status_t (*connect)(RawAddress* bd_addr); |
| |
| /** disconnect from audio gateway */ |
| bt_status_t (*disconnect)(const RawAddress* bd_addr); |
| |
| /** create an audio connection */ |
| bt_status_t (*connect_audio)(const RawAddress* bd_addr); |
| |
| /** close the audio connection */ |
| bt_status_t (*disconnect_audio)(const RawAddress* bd_addr); |
| |
| /** start voice recognition */ |
| bt_status_t (*start_voice_recognition)(const RawAddress* bd_addr); |
| |
| /** stop voice recognition */ |
| bt_status_t (*stop_voice_recognition)(const RawAddress* bd_addr); |
| |
| /** volume control */ |
| bt_status_t (*volume_control)(const RawAddress* bd_addr, |
| bthf_client_volume_type_t type, int volume); |
| |
| /** place a call with number a number |
| * if number is NULL last called number is called (aka re-dial)*/ |
| bt_status_t (*dial)(const RawAddress* bd_addr, const char* number); |
| |
| /** place a call with number specified by location (speed dial) */ |
| bt_status_t (*dial_memory)(const RawAddress* bd_addr, int location); |
| |
| /** perform specified call related action |
| * idx is limited only for enhanced call control related action |
| */ |
| bt_status_t (*handle_call_action)(const RawAddress* bd_addr, |
| bthf_client_call_action_t action, int idx); |
| |
| /** query list of current calls */ |
| bt_status_t (*query_current_calls)(const RawAddress* bd_addr); |
| |
| /** query name of current selected operator */ |
| bt_status_t (*query_current_operator_name)(const RawAddress* bd_addr); |
| |
| /** Retrieve subscriber information */ |
| bt_status_t (*retrieve_subscriber_info)(const RawAddress* bd_addr); |
| |
| /** Send DTMF code*/ |
| bt_status_t (*send_dtmf)(const RawAddress* bd_addr, char code); |
| |
| /** Request a phone number from AG corresponding to last voice tag recorded */ |
| bt_status_t (*request_last_voice_tag_number)(const RawAddress* bd_addr); |
| |
| /** Closes the interface. */ |
| void (*cleanup)(void); |
| |
| /** Send AT Command. */ |
| bt_status_t (*send_at_cmd)(const RawAddress* bd_addr, int cmd, int val1, |
| int val2, const char* arg); |
| } bthf_client_interface_t; |
| |
| __END_DECLS |
| |
| #endif /* ANDROID_INCLUDE_BT_HF_CLIENT_H */ |