bt_hf_client.h 13 KB

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