fix bt_hfp to idf 5

This commit is contained in:
duffy 2026-01-29 22:10:10 +01:00
parent 0f3f04054c
commit 64dff2dc05
1 changed files with 43 additions and 22 deletions

View File

@ -3,6 +3,8 @@
* *
* ESP32 agiert als Audio Gateway (AG) - die Rolle einer Telefonanlage * ESP32 agiert als Audio Gateway (AG) - die Rolle einer Telefonanlage
* Headset ist das HF (Hands-Free) Device * Headset ist das HF (Hands-Free) Device
*
* Angepasst für ESP-IDF 5.x
*/ */
#include <string.h> #include <string.h>
@ -62,15 +64,9 @@ static void hf_ag_callback(esp_hf_cb_event_t event, esp_hf_cb_param_t *param)
} }
break; break;
case ESP_HF_BVRA_EVT:
// Voice Recognition aktiviert/deaktiviert
ESP_LOGI(TAG, "Voice Recognition: %s",
param->vra_rep.value ? "aktiviert" : "deaktiviert");
break;
case ESP_HF_VOLUME_CONTROL_EVT: case ESP_HF_VOLUME_CONTROL_EVT:
ESP_LOGI(TAG, "Volume %s: %d", ESP_LOGI(TAG, "Volume %s: %d",
param->volume_control.type == ESP_HF_VOLUME_CONTROL_TARGET_SPK ? param->volume_control.type == ESP_HF_VOLUME_TYPE_SPK ?
"Speaker" : "Mic", "Speaker" : "Mic",
param->volume_control.volume); param->volume_control.volume);
break; break;
@ -97,7 +93,13 @@ static void hf_ag_callback(esp_hf_cb_event_t event, esp_hf_cb_param_t *param)
case ESP_HF_CLCC_RESPONSE_EVT: case ESP_HF_CLCC_RESPONSE_EVT:
// Call List Request - keine aktiven Anrufe melden // Call List Request - keine aktiven Anrufe melden
ESP_LOGD(TAG, "CLCC Request"); ESP_LOGD(TAG, "CLCC Request");
esp_hf_ag_clcc_response(s_connected_peer, 0, 0, 0, 0, 0, NULL); // ESP-IDF 5: esp_hf_ag_clcc_response hat mehr Parameter
esp_hf_ag_clcc_response(s_connected_peer, 0,
ESP_HF_CURRENT_CALL_DIRECTION_INCOMING,
ESP_HF_CURRENT_CALL_STATUS_ACTIVE,
ESP_HF_CURRENT_CALL_MODE_VOICE,
ESP_HF_CURRENT_CALL_MPTY_TYPE_SINGLE,
NULL, ESP_HF_CALL_ADDR_TYPE_UNKNOWN);
break; break;
case ESP_HF_COPS_RESPONSE_EVT: case ESP_HF_COPS_RESPONSE_EVT:
@ -109,7 +111,10 @@ static void hf_ag_callback(esp_hf_cb_event_t event, esp_hf_cb_param_t *param)
case ESP_HF_CNUM_RESPONSE_EVT: case ESP_HF_CNUM_RESPONSE_EVT:
// Subscriber Number Request // Subscriber Number Request
ESP_LOGD(TAG, "CNUM Request"); ESP_LOGD(TAG, "CNUM Request");
esp_hf_ag_cnum_response(s_connected_peer, NULL, 0); // ESP-IDF 5: esp_hf_ag_cnum_response hat mehr Parameter
esp_hf_ag_cnum_response(s_connected_peer, NULL,
ESP_HF_CALL_ADDR_TYPE_UNKNOWN,
ESP_HF_SUBSCRIBER_SERVICE_TYPE_VOICE);
break; break;
case ESP_HF_VTS_RESPONSE_EVT: case ESP_HF_VTS_RESPONSE_EVT:
@ -137,8 +142,8 @@ static void hf_ag_callback(esp_hf_cb_event_t event, esp_hf_cb_param_t *param)
case ESP_HF_DIAL_EVT: case ESP_HF_DIAL_EVT:
// Dial (ATD, ATD>, ATD>mem) // Dial (ATD, ATD>, ATD>mem)
if (param->out_call.type == ESP_HF_DIAL_MEM) { if (param->out_call.type == ESP_HF_DIAL_MEM) {
ESP_LOGI(TAG, "Headset: Wähle Speicher %d", param->out_call.num_or_loc); ESP_LOGI(TAG, "Headset: Wähle Speicher %s", param->out_call.num_or_loc);
} else if (param->out_call.type == ESP_HF_DIAL_VOIP) { } else if (param->out_call.type == ESP_HF_DIAL_NUM) {
ESP_LOGI(TAG, "Headset: Wähle %s", param->out_call.num_or_loc); ESP_LOGI(TAG, "Headset: Wähle %s", param->out_call.num_or_loc);
} else { } else {
ESP_LOGI(TAG, "Headset: Wahlwiederholung"); ESP_LOGI(TAG, "Headset: Wahlwiederholung");
@ -149,7 +154,7 @@ static void hf_ag_callback(esp_hf_cb_event_t event, esp_hf_cb_param_t *param)
case ESP_HF_WBS_RESPONSE_EVT: case ESP_HF_WBS_RESPONSE_EVT:
// Wide Band Speech (mSBC Codec) // Wide Band Speech (mSBC Codec)
ESP_LOGI(TAG, "WBS Codec: %s", ESP_LOGI(TAG, "WBS Codec: %s",
param->wbs_rep.codec == ESP_HF_WBS_PLCM ? "mSBC" : "CVSD"); param->wbs_rep.codec == ESP_HF_WBS_YES ? "mSBC" : "CVSD");
break; break;
case ESP_HF_BCS_RESPONSE_EVT: case ESP_HF_BCS_RESPONSE_EVT:
@ -164,15 +169,16 @@ static void hf_ag_callback(esp_hf_cb_event_t event, esp_hf_cb_param_t *param)
} }
// Audio Data Callback (eingehend vom Headset - Mikrofon) // Audio Data Callback (eingehend vom Headset - Mikrofon)
static uint32_t hf_ag_incoming_data_callback(uint8_t *buf, uint32_t len) // ESP-IDF 5: Signatur geändert zu void
static void hf_ag_incoming_data_callback(const uint8_t *buf, uint32_t len)
{ {
// Audio-Daten vom Headset-Mikrofon weiterleiten // Audio-Daten vom Headset-Mikrofon weiterleiten
bt_manager_notify_audio_data(buf, len); bt_manager_notify_audio_data(buf, len);
return len;
} }
// Audio Data Request (ausgehend zum Headset - Speaker) // Audio Data Request (ausgehend zum Headset - Speaker)
static void hf_ag_outgoing_data_callback(uint8_t *buf, uint32_t len) // ESP-IDF 5: Signatur geändert zu uint32_t return
static uint32_t hf_ag_outgoing_data_callback(uint8_t *buf, uint32_t len)
{ {
if (s_audio_out_ringbuf) { if (s_audio_out_ringbuf) {
size_t item_size; size_t item_size;
@ -185,13 +191,12 @@ static void hf_ag_outgoing_data_callback(uint8_t *buf, uint32_t len)
if (item_size < len) { if (item_size < len) {
memset(buf + item_size, 0, len - item_size); memset(buf + item_size, 0, len - item_size);
} }
} else { return len;
// Keine Daten - Stille senden
memset(buf, 0, len);
} }
} else {
memset(buf, 0, len);
} }
// Keine Daten - Stille senden
memset(buf, 0, len);
return len;
} }
esp_err_t bt_hfp_init(void) esp_err_t bt_hfp_init(void)
@ -267,7 +272,10 @@ esp_err_t bt_hfp_connect(const esp_bd_addr_t address)
bt_addr_to_str(address, addr_str, sizeof(addr_str)); bt_addr_to_str(address, addr_str, sizeof(addr_str));
ESP_LOGI(TAG, "HFP Connect: %s", addr_str); ESP_LOGI(TAG, "HFP Connect: %s", addr_str);
return esp_hf_ag_slc_connect(address); // Cast um const zu entfernen (ESP-IDF API erwartet non-const)
esp_bd_addr_t addr_copy;
memcpy(addr_copy, address, ESP_BD_ADDR_LEN);
return esp_hf_ag_slc_connect(addr_copy);
} }
esp_err_t bt_hfp_disconnect(const esp_bd_addr_t address) esp_err_t bt_hfp_disconnect(const esp_bd_addr_t address)
@ -280,7 +288,10 @@ esp_err_t bt_hfp_disconnect(const esp_bd_addr_t address)
bt_hfp_audio_disconnect(); bt_hfp_audio_disconnect();
} }
return esp_hf_ag_slc_disconnect(address); // Cast um const zu entfernen
esp_bd_addr_t addr_copy;
memcpy(addr_copy, address, ESP_BD_ADDR_LEN);
return esp_hf_ag_slc_disconnect(addr_copy);
} }
esp_err_t bt_hfp_audio_connect(void) esp_err_t bt_hfp_audio_connect(void)
@ -322,3 +333,13 @@ esp_err_t bt_hfp_send_audio(const uint8_t* data, size_t len)
return ESP_OK; return ESP_OK;
} }
bool bt_hfp_is_connected(void)
{
return s_service_connected;
}
bool bt_hfp_is_audio_connected(void)
{
return s_audio_connected;
}