WS刚连接成功可以进行 对话,超过30sWS断开后,语音上行停止,需要修复
This commit is contained in:
@@ -46,6 +46,7 @@
|
||||
#define CONTROL_PLANE_DOWNSTREAM_PLAYBACK_GUARD_MS 220
|
||||
#define CONTROL_PLANE_IDLE_TRANSPORT_SHUTDOWN_MS 30000
|
||||
#define CONTROL_PLANE_WATCHDOG_TASK_STACK_SIZE 6144
|
||||
#define CONTROL_PLANE_SERVER_SUCCESS_PROMPT_FILE "/littlefs/audio_prompts/server_connect_success.opus"
|
||||
|
||||
#ifndef CONFIG_TQ_NETWORK_TASK_CORE
|
||||
#define CONFIG_TQ_NETWORK_TASK_CORE 0
|
||||
@@ -295,6 +296,13 @@ static esp_err_t control_plane_start_uplink_if_ready(void)
|
||||
|
||||
esp_err_t control_plane_multimodal_handle_ptt_press_step(void)
|
||||
{
|
||||
esp_err_t capture_err = control_plane_multimodal_start_capture();
|
||||
if (capture_err != ESP_OK &&
|
||||
capture_err != ESP_ERR_INVALID_STATE &&
|
||||
capture_err != ESP_ERR_NOT_SUPPORTED) {
|
||||
ESP_LOGW(TAG, "PTT capture start failed: %s", esp_err_to_name(capture_err));
|
||||
}
|
||||
|
||||
control_plane_multimodal_runtime_state_t state = {0};
|
||||
esp_err_t state_err = control_plane_multimodal_get_runtime_state(&state);
|
||||
if (state_err != ESP_OK) {
|
||||
@@ -580,6 +588,7 @@ static void control_plane_multimodal_event_bridge(control_plane_multimodal_event
|
||||
|
||||
switch (event) {
|
||||
case CONTROL_PLANE_MULTIMODAL_EVENT_TRANSPORT_CONNECTED:
|
||||
(void)domain_runtime_behavior_play_prompt_file(CONTROL_PLANE_SERVER_SUCCESS_PROMPT_FILE);
|
||||
if (CONTROL_PLANE_MULTIMODAL_AUTO_START_FLAG) {
|
||||
schedule_autostart_if_enabled();
|
||||
}
|
||||
|
||||
@@ -83,6 +83,8 @@
|
||||
#define CONTROL_PLANE_LOCAL_RESPONDING_EVENT_TASK_PRIORITY 5U
|
||||
#define CONTROL_PLANE_LOCAL_RESPONDING_EVENT_QUEUE_LEN 4U
|
||||
#define CONTROL_PLANE_MULTIMODAL_BINARY_SUMMARY_INTERVAL 200U
|
||||
#define CONTROL_PLANE_UPLINK_READY_WAIT_MS 6000U
|
||||
#define CONTROL_PLANE_UPLINK_READY_POLL_MS 20U
|
||||
|
||||
#ifndef CONFIG_TQ_LOCAL_TASK_CORE
|
||||
#define CONFIG_TQ_LOCAL_TASK_CORE 1
|
||||
@@ -1322,7 +1324,12 @@ static void transport_event_bridge(const domain_multimodal_transport_event_t *ev
|
||||
break;
|
||||
|
||||
case DOMAIN_MULTIMODAL_TRANSPORT_EVENT_DISCONNECTED:
|
||||
reset_session_state();
|
||||
if (lock_state()) {
|
||||
s_started = false;
|
||||
memset(&s_auth, 0, sizeof(s_auth));
|
||||
reset_session_state_locked();
|
||||
unlock_state();
|
||||
}
|
||||
notify_event(CONTROL_PLANE_MULTIMODAL_EVENT_TRANSPORT_DISCONNECTED);
|
||||
break;
|
||||
|
||||
@@ -1426,6 +1433,30 @@ static void downstream_playback_event_bridge(
|
||||
static esp_err_t control_plane_audio_uplink_send_cb(const uint8_t *data, size_t len, void *ctx)
|
||||
{
|
||||
(void)ctx;
|
||||
uint32_t waited_ms = 0U;
|
||||
while (waited_ms < CONTROL_PLANE_UPLINK_READY_WAIT_MS) {
|
||||
esp_err_t err = control_plane_multimodal_send_audio_realtime(data, len);
|
||||
if (err != ESP_ERR_INVALID_STATE) {
|
||||
return err;
|
||||
}
|
||||
|
||||
control_plane_multimodal_runtime_state_t state = {0};
|
||||
if (control_plane_multimodal_get_runtime_state(&state) == ESP_OK &&
|
||||
state.connected) {
|
||||
if (!state.has_active_task) {
|
||||
(void)control_plane_multimodal_send_start();
|
||||
} else if (state.server_listening &&
|
||||
!state.client_speech_active &&
|
||||
!state.ptt_release_required &&
|
||||
!state.remote_responding) {
|
||||
(void)control_plane_multimodal_send_speech_start();
|
||||
}
|
||||
}
|
||||
|
||||
vTaskDelay(pdMS_TO_TICKS(CONTROL_PLANE_UPLINK_READY_POLL_MS));
|
||||
waited_ms += CONTROL_PLANE_UPLINK_READY_POLL_MS;
|
||||
}
|
||||
|
||||
return control_plane_multimodal_send_audio_realtime(data, len);
|
||||
}
|
||||
|
||||
@@ -1439,7 +1470,7 @@ esp_err_t control_plane_multimodal_start(void)
|
||||
if (lock_state()) {
|
||||
bool already_started = s_started;
|
||||
unlock_state();
|
||||
if (already_started && domain_runtime_multimodal_transport_is_connected()) {
|
||||
if (already_started) {
|
||||
return ESP_OK;
|
||||
}
|
||||
}
|
||||
@@ -2056,6 +2087,22 @@ static esp_err_t control_plane_multimodal_prepare_audio_runtime(void)
|
||||
return domain_runtime_multimodal_audio_init();
|
||||
}
|
||||
|
||||
esp_err_t control_plane_multimodal_start_capture(void)
|
||||
{
|
||||
if (!domain_runtime_multimodal_audio_is_initialized()) {
|
||||
esp_err_t init_err = domain_runtime_multimodal_audio_init();
|
||||
if (init_err != ESP_OK) {
|
||||
return init_err;
|
||||
}
|
||||
}
|
||||
|
||||
if (domain_runtime_multimodal_audio_is_uplink_running()) {
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
return domain_runtime_multimodal_audio_start_uplink(control_plane_audio_uplink_send_cb, NULL);
|
||||
}
|
||||
|
||||
esp_err_t control_plane_multimodal_start_uplink(void)
|
||||
{
|
||||
esp_err_t ready_err = control_plane_multimodal_prepare_audio_runtime();
|
||||
@@ -2072,7 +2119,7 @@ esp_err_t control_plane_multimodal_start_uplink(void)
|
||||
|
||||
void control_plane_multimodal_stop_uplink(void)
|
||||
{
|
||||
esp_err_t err = domain_runtime_multimodal_audio_stop_uplink(2000);
|
||||
esp_err_t err = domain_runtime_multimodal_audio_stop_uplink(CONTROL_PLANE_UPLINK_READY_WAIT_MS);
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGW(TAG, "Mic uplink stop ended with %s", esp_err_to_name(err));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user