fix bt_hfp to idf 5
This commit is contained in:
parent
0f3f04054c
commit
64dff2dc05
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue