1 /*
2 * SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7 #include "common/bt_target.h"
8 #include <string.h>
9 #include "esp_err.h"
10 #include "esp_hf_client_api.h"
11 #include "esp_bt_main.h"
12 #include "btc/btc_manage.h"
13 #include "btc_hf_client.h"
14 #include "bta/bta_api.h"
15 #include "bta/bta_hf_client_api.h"
16
17 #if BTC_HF_CLIENT_INCLUDED
esp_hf_client_register_callback(esp_hf_client_cb_t callback)18 esp_err_t esp_hf_client_register_callback(esp_hf_client_cb_t callback)
19 {
20 if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
21 return ESP_ERR_INVALID_STATE;
22 }
23
24 if (callback == NULL) {
25 return ESP_FAIL;
26 }
27
28 btc_profile_cb_set(BTC_PID_HF_CLIENT, callback);
29 return ESP_OK;
30 }
31
esp_hf_client_init(void)32 esp_err_t esp_hf_client_init(void)
33 {
34 if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
35 return ESP_ERR_INVALID_STATE;
36 }
37
38 btc_msg_t msg;
39
40 msg.sig = BTC_SIG_API_CALL;
41 msg.pid = BTC_PID_HF_CLIENT;
42 msg.act = BTC_HF_CLIENT_INIT_EVT;
43
44 /* Switch to BTC context */
45 bt_status_t stat = btc_transfer_context(&msg, NULL, 0, NULL, NULL);
46 return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
47 }
48
esp_hf_client_deinit(void)49 esp_err_t esp_hf_client_deinit(void)
50 {
51 if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
52 return ESP_ERR_INVALID_STATE;
53 }
54
55 btc_msg_t msg;
56
57 msg.sig = BTC_SIG_API_CALL;
58 msg.pid = BTC_PID_HF_CLIENT;
59 msg.act = BTC_HF_CLIENT_DEINIT_EVT;
60
61 /* Switch to BTC context */
62 bt_status_t stat = btc_transfer_context(&msg, NULL, 0, NULL, NULL);
63 return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
64 }
65
esp_hf_client_connect(esp_bd_addr_t remote_bda)66 esp_err_t esp_hf_client_connect(esp_bd_addr_t remote_bda)
67 {
68 if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
69 return ESP_ERR_INVALID_STATE;
70 }
71
72 bt_status_t stat;
73 btc_hf_client_args_t arg;
74 btc_msg_t msg;
75
76 msg.sig = BTC_SIG_API_CALL;
77 msg.pid = BTC_PID_HF_CLIENT;
78 msg.act = BTC_HF_CLIENT_CONNECT_EVT;
79
80 memset(&arg, 0, sizeof(btc_hf_client_args_t));
81
82 /* Switch to BTC context */
83 memcpy(&(arg.connect), remote_bda, sizeof(bt_bdaddr_t));
84 stat = btc_transfer_context(&msg, &arg, sizeof(btc_hf_client_args_t), NULL, NULL);
85 return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
86 }
87
esp_hf_client_disconnect(esp_bd_addr_t remote_bda)88 esp_err_t esp_hf_client_disconnect(esp_bd_addr_t remote_bda)
89 {
90 if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
91 return ESP_ERR_INVALID_STATE;
92 }
93
94 bt_status_t stat;
95 btc_hf_client_args_t arg;
96 btc_msg_t msg;
97
98 msg.sig = BTC_SIG_API_CALL;
99 msg.pid = BTC_PID_HF_CLIENT;
100 msg.act = BTC_HF_CLIENT_DISCONNECT_EVT;
101
102 memset(&arg, 0, sizeof(btc_hf_client_args_t));
103
104 /* Switch to BTC context */
105 memcpy(&(arg.disconnect), remote_bda, sizeof(bt_bdaddr_t));
106 stat = btc_transfer_context(&msg, &arg, sizeof(btc_hf_client_args_t), NULL, NULL);
107 return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
108 }
109
esp_hf_client_connect_audio(esp_bd_addr_t remote_bda)110 esp_err_t esp_hf_client_connect_audio(esp_bd_addr_t remote_bda)
111 {
112 if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
113 return ESP_ERR_INVALID_STATE;
114 }
115
116 bt_status_t stat;
117 btc_hf_client_args_t arg;
118 btc_msg_t msg;
119
120 msg.sig = BTC_SIG_API_CALL;
121 msg.pid = BTC_PID_HF_CLIENT;
122 msg.act = BTC_HF_CLIENT_CONNECT_AUDIO_EVT;
123
124 memset(&arg, 0, sizeof(btc_hf_client_args_t));
125
126 /* Switch to BTC context */
127 memcpy(&(arg.connect_audio), remote_bda, sizeof(bt_bdaddr_t));
128 stat = btc_transfer_context(&msg, &arg, sizeof(btc_hf_client_args_t), NULL, NULL);
129 return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
130 }
131
esp_hf_client_disconnect_audio(esp_bd_addr_t remote_bda)132 esp_err_t esp_hf_client_disconnect_audio(esp_bd_addr_t remote_bda)
133 {
134 if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
135 return ESP_ERR_INVALID_STATE;
136 }
137
138 bt_status_t stat;
139 btc_hf_client_args_t arg;
140 btc_msg_t msg;
141
142 msg.sig = BTC_SIG_API_CALL;
143 msg.pid = BTC_PID_HF_CLIENT;
144 msg.act = BTC_HF_CLIENT_DISCONNECT_AUDIO_EVT;
145
146 memset(&arg, 0, sizeof(btc_hf_client_args_t));
147
148 /* Switch to BTC context */
149 memcpy(&(arg.disconnect_audio), remote_bda, sizeof(bt_bdaddr_t));
150 stat = btc_transfer_context(&msg, &arg, sizeof(btc_hf_client_args_t), NULL, NULL);
151 return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
152 }
153
154
esp_hf_client_start_voice_recognition(void)155 esp_err_t esp_hf_client_start_voice_recognition(void)
156 {
157 if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
158 return ESP_ERR_INVALID_STATE;
159 }
160
161 btc_msg_t msg;
162
163 msg.sig = BTC_SIG_API_CALL;
164 msg.pid = BTC_PID_HF_CLIENT;
165 msg.act = BTC_HF_CLIENT_START_VOICE_RECOGNITION_EVT;
166
167 /* Switch to BTC context */
168 bt_status_t stat = btc_transfer_context(&msg, NULL, 0, NULL, NULL);
169 return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
170 }
171
esp_hf_client_stop_voice_recognition(void)172 esp_err_t esp_hf_client_stop_voice_recognition(void)
173 {
174 if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
175 return ESP_ERR_INVALID_STATE;
176 }
177
178 btc_msg_t msg;
179
180 msg.sig = BTC_SIG_API_CALL;
181 msg.pid = BTC_PID_HF_CLIENT;
182 msg.act = BTC_HF_CLIENT_STOP_VOICE_RECOGNITION_EVT;
183
184 /* Switch to BTC context */
185 bt_status_t stat = btc_transfer_context(&msg, NULL, 0, NULL, NULL);
186 return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
187 }
188
esp_hf_client_volume_update(esp_hf_volume_control_target_t type,int volume)189 esp_err_t esp_hf_client_volume_update(esp_hf_volume_control_target_t type, int volume)
190 {
191 if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
192 return ESP_ERR_INVALID_STATE;
193 }
194
195 btc_msg_t msg;
196 btc_hf_client_args_t arg;
197
198 msg.sig = BTC_SIG_API_CALL;
199 msg.pid = BTC_PID_HF_CLIENT;
200 msg.act = BTC_HF_CLIENT_VOLUME_UPDATE_EVT;
201
202 memset(&arg, 0, sizeof(btc_hf_client_args_t));
203 arg.volume_update.type = type;
204 arg.volume_update.volume = volume;
205
206 /* Switch to BTC context */
207 bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hf_client_args_t), NULL, NULL);
208 return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
209 }
210
esp_hf_client_dial(const char * number)211 esp_err_t esp_hf_client_dial(const char *number)
212 {
213 if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
214 return ESP_ERR_INVALID_STATE;
215 }
216
217 btc_msg_t msg;
218 btc_hf_client_args_t arg;
219
220 if (number != NULL && strlen(number) > ESP_BT_HF_CLIENT_NUMBER_LEN) {
221 return ESP_ERR_INVALID_ARG;
222 }
223
224 msg.sig = BTC_SIG_API_CALL;
225 msg.pid = BTC_PID_HF_CLIENT;
226 msg.act = BTC_HF_CLIENT_DIAL_EVT;
227
228 memset(&arg, 0, sizeof(btc_hf_client_args_t));
229 if (number != NULL) {
230 strcpy(arg.dial.number, number);
231 } else {
232 arg.dial.number[0] = '\0';
233 }
234
235 /* Switch to BTC context */
236 bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hf_client_args_t), NULL, NULL);
237 return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
238 }
239
esp_hf_client_dial_memory(int location)240 esp_err_t esp_hf_client_dial_memory(int location)
241 {
242 if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
243 return ESP_ERR_INVALID_STATE;
244 }
245
246 btc_msg_t msg;
247 btc_hf_client_args_t arg;
248
249 msg.sig = BTC_SIG_API_CALL;
250 msg.pid = BTC_PID_HF_CLIENT;
251 msg.act = BTC_HF_CLIENT_DIAL_MEMORY_EVT;
252
253 memset(&arg, 0, sizeof(btc_hf_client_args_t));
254 arg.dial_memory.location = location;
255
256 /* Switch to BTC context */
257 bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hf_client_args_t), NULL, NULL);
258 return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
259 }
260
esp_hf_client_send_chld_cmd(esp_hf_chld_type_t chld,int idx)261 esp_err_t esp_hf_client_send_chld_cmd(esp_hf_chld_type_t chld, int idx)
262 {
263 if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
264 return ESP_ERR_INVALID_STATE;
265 }
266
267 btc_msg_t msg;
268 btc_hf_client_args_t arg;
269
270 msg.sig = BTC_SIG_API_CALL;
271 msg.pid = BTC_PID_HF_CLIENT;
272 msg.act = BTC_HF_CLIENT_SEND_CHLD_CMD_EVT;
273
274 memset(&arg, 0, sizeof(btc_hf_client_args_t));
275 arg.chld.type = chld;
276 arg.chld.idx = idx;
277
278 /* Switch to BTC context */
279 bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hf_client_args_t), NULL, NULL);
280 return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
281 }
282
esp_hf_client_send_btrh_cmd(esp_hf_btrh_cmd_t btrh)283 esp_err_t esp_hf_client_send_btrh_cmd(esp_hf_btrh_cmd_t btrh)
284 {
285 if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
286 return ESP_ERR_INVALID_STATE;
287 }
288
289 btc_msg_t msg;
290 btc_hf_client_args_t arg;
291
292 msg.sig = BTC_SIG_API_CALL;
293 msg.pid = BTC_PID_HF_CLIENT;
294 msg.act = BTC_HF_CLIENT_SEND_BTRH_CMD_EVT;
295
296 memset(&arg, 0, sizeof(btc_hf_client_args_t));
297 arg.btrh.cmd = btrh;
298
299 /* Switch to BTC context */
300 bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hf_client_args_t), NULL, NULL);
301 return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
302 }
303
esp_hf_client_answer_call(void)304 esp_err_t esp_hf_client_answer_call(void)
305 {
306 if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
307 return ESP_ERR_INVALID_STATE;
308 }
309
310 btc_msg_t msg;
311
312 msg.sig = BTC_SIG_API_CALL;
313 msg.pid = BTC_PID_HF_CLIENT;
314 msg.act = BTC_HF_CLIENT_ANSWER_CALL_EVT;
315
316 /* Switch to BTC context */
317 bt_status_t stat = btc_transfer_context(&msg, NULL, 0, NULL, NULL);
318 return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
319 }
320
esp_hf_client_reject_call(void)321 esp_err_t esp_hf_client_reject_call(void)
322 {
323 if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
324 return ESP_ERR_INVALID_STATE;
325 }
326
327 btc_msg_t msg;
328
329 msg.sig = BTC_SIG_API_CALL;
330 msg.pid = BTC_PID_HF_CLIENT;
331 msg.act = BTC_HF_CLIENT_REJECT_CALL_EVT;
332
333 /* Switch to BTC context */
334 bt_status_t stat = btc_transfer_context(&msg, NULL, 0, NULL, NULL);
335 return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
336 }
337
esp_hf_client_query_current_calls(void)338 esp_err_t esp_hf_client_query_current_calls(void)
339 {
340 if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
341 return ESP_ERR_INVALID_STATE;
342 }
343
344 btc_msg_t msg;
345
346 msg.sig = BTC_SIG_API_CALL;
347 msg.pid = BTC_PID_HF_CLIENT;
348 msg.act = BTC_HF_CLIENT_QUERY_CURRENT_CALLS_EVT;
349
350 /* Switch to BTC context */
351 bt_status_t stat = btc_transfer_context(&msg, NULL, 0, NULL, NULL);
352 return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
353 }
354
esp_hf_client_query_current_operator_name(void)355 esp_err_t esp_hf_client_query_current_operator_name(void)
356 {
357 if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
358 return ESP_ERR_INVALID_STATE;
359 }
360
361 btc_msg_t msg;
362
363 msg.sig = BTC_SIG_API_CALL;
364 msg.pid = BTC_PID_HF_CLIENT;
365 msg.act = BTC_HF_CLIENT_QUERY_CURRENT_OPERATOR_NAME_EVT;
366
367 /* Switch to BTC context */
368 bt_status_t stat = btc_transfer_context(&msg, NULL, 0, NULL, NULL);
369 return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
370 }
371
esp_hf_client_retrieve_subscriber_info(void)372 esp_err_t esp_hf_client_retrieve_subscriber_info(void)
373 {
374 if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
375 return ESP_ERR_INVALID_STATE;
376 }
377
378 btc_msg_t msg;
379
380 msg.sig = BTC_SIG_API_CALL;
381 msg.pid = BTC_PID_HF_CLIENT;
382 msg.act = BTC_HF_CLIENT_RETRIEVE_SUBSCRIBER_INFO_EVT;
383
384 /* Switch to BTC context */
385 bt_status_t stat = btc_transfer_context(&msg, NULL, 0, NULL, NULL);
386 return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
387 }
388
esp_hf_client_send_dtmf(char code)389 esp_err_t esp_hf_client_send_dtmf(char code)
390 {
391 if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
392 return ESP_ERR_INVALID_STATE;
393 }
394
395 btc_msg_t msg;
396 btc_hf_client_args_t arg;
397
398 msg.sig = BTC_SIG_API_CALL;
399 msg.pid = BTC_PID_HF_CLIENT;
400 msg.act = BTC_HF_CLIENT_SEND_DTMF_EVT;
401
402 memset(&arg, 0, sizeof(btc_hf_client_args_t));
403 arg.send_dtmf.code = code;
404
405 /* Switch to BTC context */
406 bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hf_client_args_t), NULL, NULL);
407 return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
408 }
409
esp_hf_client_send_xapl(char * information,uint32_t features)410 esp_err_t esp_hf_client_send_xapl(char *information, uint32_t features)
411 {
412 if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
413 return ESP_ERR_INVALID_STATE;
414 }
415
416 if (information == NULL || strlen(information) != ESP_BT_HF_AT_SEND_XAPL_LEN) {
417 return ESP_ERR_INVALID_ARG;
418 }
419
420 btc_msg_t msg;
421 btc_hf_client_args_t arg;
422
423 msg.sig = BTC_SIG_API_CALL;
424 msg.pid = BTC_PID_HF_CLIENT;
425 msg.act = BTC_HF_CLIENT_SEND_XAPL_EVT;
426
427 memset(&arg, 0, sizeof(btc_hf_client_args_t));
428 strcpy(arg.send_xapl.information, information);
429 arg.send_xapl.features = features;
430
431 /* Switch to BTC context */
432 bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hf_client_args_t), NULL, NULL);
433 return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
434 }
435
esp_hf_client_send_iphoneaccev(uint32_t bat_level,bool docked)436 esp_err_t esp_hf_client_send_iphoneaccev(uint32_t bat_level, bool docked)
437 {
438 if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
439 return ESP_ERR_INVALID_STATE;
440 }
441
442 if (bat_level > 9) {
443 return ESP_ERR_INVALID_ARG;
444 }
445
446 btc_msg_t msg;
447 btc_hf_client_args_t arg;
448
449 msg.sig = BTC_SIG_API_CALL;
450 msg.pid = BTC_PID_HF_CLIENT;
451 msg.act = BTC_HF_CLIENT_SEND_IPHONEACCEV_EVT;
452
453 memset(&arg, 0, sizeof(btc_hf_client_args_t));
454 arg.send_iphoneaccev.bat_level = bat_level;
455 arg.send_iphoneaccev.docked = docked;
456
457 /* Switch to BTC context */
458 bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hf_client_args_t), NULL, NULL);
459 return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
460 }
461
462
esp_hf_client_request_last_voice_tag_number(void)463 esp_err_t esp_hf_client_request_last_voice_tag_number(void)
464 {
465 if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
466 return ESP_ERR_INVALID_STATE;
467 }
468
469 btc_msg_t msg;
470
471 msg.sig = BTC_SIG_API_CALL;
472 msg.pid = BTC_PID_HF_CLIENT;
473 msg.act = BTC_HF_CLIENT_REQUEST_LAST_VOICE_TAG_NUMBER_EVT;
474
475 /* Switch to BTC context */
476 bt_status_t stat = btc_transfer_context(&msg, NULL, 0, NULL, NULL);
477 return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
478 }
479
esp_hf_client_send_nrec(void)480 esp_err_t esp_hf_client_send_nrec(void)
481 {
482 if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
483 return ESP_ERR_INVALID_STATE;
484 }
485
486 btc_msg_t msg;
487 msg.sig = BTC_SIG_API_CALL;
488 msg.pid = BTC_PID_HF_CLIENT;
489 msg.act = BTC_HF_CLIENT_SEND_NREC_EVT;
490
491 /* Switch to BTC context */
492 bt_status_t stat = btc_transfer_context(&msg, NULL, 0, NULL, NULL);
493 return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
494 }
495
esp_hf_client_register_data_callback(esp_hf_client_incoming_data_cb_t recv,esp_hf_client_outgoing_data_cb_t send)496 esp_err_t esp_hf_client_register_data_callback(esp_hf_client_incoming_data_cb_t recv,
497 esp_hf_client_outgoing_data_cb_t send)
498 {
499 if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
500 return ESP_ERR_INVALID_STATE;
501 }
502
503 btc_msg_t msg;
504 msg.sig = BTC_SIG_API_CALL;
505 msg.pid = BTC_PID_HF_CLIENT;
506 msg.act = BTC_HF_CLIENT_REGISTER_DATA_CALLBACK_EVT;
507
508 btc_hf_client_args_t arg;
509 memset(&arg, 0, sizeof(btc_hf_client_args_t));
510 arg.reg_data_cb.recv = recv;
511 arg.reg_data_cb.send = send;
512
513 /* Switch to BTC context */
514 bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hf_client_args_t), NULL, NULL);
515 return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
516 }
517
518 #if (BTM_SCO_HCI_INCLUDED == TRUE)
esp_hf_client_pkt_stat_nums_get(uint16_t sync_conn_handle)519 esp_err_t esp_hf_client_pkt_stat_nums_get(uint16_t sync_conn_handle)
520 {
521 if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
522 return ESP_ERR_INVALID_STATE;
523 }
524
525 btc_msg_t msg;
526 msg.sig = BTC_SIG_API_CALL;
527 msg.pid = BTC_PID_HF_CLIENT;
528 msg.act = BTC_HF_CLIENT_REQUEST_PKT_STAT_EVT;
529
530 btc_hf_client_args_t arg;
531 memset(&arg, 0, sizeof(btc_hf_client_args_t));
532 arg.pkt_sync_hd.sync_conn_handle = sync_conn_handle;
533
534 /* Switch to BTC context */
535 bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hf_client_args_t), NULL, NULL);
536 return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
537 }
538
esp_hf_client_outgoing_data_ready(void)539 void esp_hf_client_outgoing_data_ready(void)
540 {
541 BTA_HfClientCiData();
542 }
543
esp_hf_client_pcm_resample_init(uint32_t src_sps,uint32_t bits,uint32_t channels)544 void esp_hf_client_pcm_resample_init(uint32_t src_sps, uint32_t bits, uint32_t channels)
545 {
546 BTA_DmPcmInitSamples(src_sps, bits, channels);
547 }
548
esp_hf_client_pcm_resample_deinit(void)549 void esp_hf_client_pcm_resample_deinit(void)
550 {
551 BTA_DmPcmDeinitSamples();
552 }
553
esp_hf_client_pcm_resample(void * src,uint32_t in_bytes,void * dst)554 int32_t esp_hf_client_pcm_resample(void *src, uint32_t in_bytes, void *dst)
555 {
556 return BTA_DmPcmResample(src, in_bytes, dst);
557 }
558
559 #endif /* #if (BTM_SCO_HCI_INCLUDED == TRUE) */
560
561 #endif /* BTC_HF_CLIENT_INCLUDED */
562