161 lines
7.5 KiB
C
161 lines
7.5 KiB
C
/*
|
|
* SPDX-FileCopyrightText: 2024-2026 Espressif Systems (Shanghai) CO LTD
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
#include "control_plane.h"
|
|
#include "domain.h"
|
|
#include "esp_err.h"
|
|
#include "control_plane_events.h"
|
|
|
|
control_plane_direction_command_t control_plane_direction_parse_command_internal(
|
|
const char *input,
|
|
size_t *out_direction_index);
|
|
bool control_plane_extract_model_command(const char *text,
|
|
control_plane_model_command_type_t *out_command_type,
|
|
char *out_value,
|
|
size_t out_value_capacity,
|
|
size_t *out_value_index,
|
|
bool *out_value_index_valid);
|
|
const char *control_plane_multimodal_resolve_upstream_mode(void);
|
|
bool control_plane_multimodal_is_push2talk_mode(void);
|
|
const char *control_plane_multimodal_resolve_voice_id(const char *auth_voice_id);
|
|
uint32_t control_plane_multimodal_resolve_downstream_transmit_rate_limit(
|
|
uint32_t configured_limit);
|
|
uint32_t control_plane_multimodal_resolve_opus_frame_duration_ms(void);
|
|
void control_plane_multimodal_generate_uuid(char *out, size_t out_len);
|
|
esp_err_t control_plane_direction_calibrate_internal(
|
|
const domain_direction_calibration_t *config,
|
|
int timeout_ms);
|
|
|
|
/* Daily fortune fetch/apply policy (control_plane-owned). */
|
|
esp_err_t control_plane_fortune_fetch(const char *target_date, domain_fortune_result_t *out_result);
|
|
|
|
typedef void (*control_plane_multimodal_responding_text_callback_t)(const char *text,
|
|
bool finished,
|
|
void *user_data);
|
|
|
|
typedef enum {
|
|
CONTROL_PLANE_MULTIMODAL_EVENT_TRANSPORT_CONNECTED = 0,
|
|
CONTROL_PLANE_MULTIMODAL_EVENT_TRANSPORT_DISCONNECTED,
|
|
CONTROL_PLANE_MULTIMODAL_EVENT_TRANSPORT_ERROR,
|
|
CONTROL_PLANE_MULTIMODAL_EVENT_TASK_STARTED,
|
|
CONTROL_PLANE_MULTIMODAL_EVENT_TASK_FAILED,
|
|
CONTROL_PLANE_MULTIMODAL_EVENT_SERVER_LISTENING,
|
|
CONTROL_PLANE_MULTIMODAL_EVENT_SERVER_NOT_LISTENING,
|
|
CONTROL_PLANE_MULTIMODAL_EVENT_RESPONDING_STARTED,
|
|
CONTROL_PLANE_MULTIMODAL_EVENT_RESPONDING_CONTENT,
|
|
CONTROL_PLANE_MULTIMODAL_EVENT_RESPONDING_ENDED,
|
|
CONTROL_PLANE_MULTIMODAL_EVENT_SPEECH_STARTED,
|
|
CONTROL_PLANE_MULTIMODAL_EVENT_SPEECH_CONTENT,
|
|
CONTROL_PLANE_MULTIMODAL_EVENT_SPEECH_ENDED,
|
|
CONTROL_PLANE_MULTIMODAL_EVENT_OUTPUT_ERROR,
|
|
CONTROL_PLANE_MULTIMODAL_EVENT_DOWNSTREAM_AUDIO
|
|
} control_plane_multimodal_event_t;
|
|
|
|
typedef void (*control_plane_multimodal_event_callback_t)(control_plane_multimodal_event_t event,
|
|
void *user_data);
|
|
|
|
typedef void (*control_plane_multimodal_downstream_audio_callback_t)(const uint8_t *data,
|
|
size_t len,
|
|
void *user_data);
|
|
|
|
typedef struct {
|
|
bool connected;
|
|
bool starting;
|
|
bool stopping;
|
|
bool has_active_task;
|
|
bool server_listening;
|
|
bool remote_responding;
|
|
bool request_to_speak_pending;
|
|
bool client_speech_active;
|
|
bool ptt_release_required;
|
|
bool local_responding_started;
|
|
bool received_downstream_audio;
|
|
uint32_t last_heartbeat_ms;
|
|
uint32_t last_downstream_ms;
|
|
uint32_t last_downstream_audio_ms;
|
|
} control_plane_multimodal_runtime_state_t;
|
|
|
|
typedef enum {
|
|
CONTROL_PLANE_TRANSPORT_LOSS_WS_ERROR = 0,
|
|
CONTROL_PLANE_TRANSPORT_LOSS_WS_DISCONNECTED,
|
|
CONTROL_PLANE_TRANSPORT_LOSS_SEND_TEXT_FAILURE,
|
|
CONTROL_PLANE_TRANSPORT_LOSS_SEND_BINARY_FAILURE,
|
|
CONTROL_PLANE_TRANSPORT_LOSS_LISTENING_TIMEOUT,
|
|
CONTROL_PLANE_TRANSPORT_LOSS_NO_RESPONSE_TIMEOUT,
|
|
CONTROL_PLANE_TRANSPORT_LOSS_PROTOCOL_ERROR,
|
|
} control_plane_transport_loss_reason_t;
|
|
|
|
esp_err_t control_plane_multimodal_start(void);
|
|
void control_plane_multimodal_stop(void);
|
|
bool control_plane_multimodal_is_connected(void);
|
|
esp_err_t control_plane_multimodal_send_start(void);
|
|
esp_err_t control_plane_multimodal_send_stop(const char *reason);
|
|
esp_err_t control_plane_multimodal_send_request_to_speak(void);
|
|
esp_err_t control_plane_multimodal_send_speech_start(void);
|
|
esp_err_t control_plane_multimodal_send_speech_stop(void);
|
|
esp_err_t control_plane_multimodal_send_cancel_speech(void);
|
|
esp_err_t control_plane_multimodal_send_request_to_respond(
|
|
const control_plane_multimodal_respond_request_t *request);
|
|
esp_err_t control_plane_request_cloud_chouqian(void);
|
|
esp_err_t control_plane_multimodal_send_update_info(
|
|
const control_plane_multimodal_update_info_request_t *request);
|
|
esp_err_t control_plane_multimodal_send_local_responding_started(void);
|
|
esp_err_t control_plane_multimodal_send_local_responding_ended(void);
|
|
esp_err_t control_plane_multimodal_send_heartbeat(void);
|
|
esp_err_t control_plane_multimodal_send_audio_realtime(const uint8_t *data, size_t len);
|
|
void control_plane_multimodal_mark_transport_unavailable(
|
|
control_plane_transport_loss_reason_t reason,
|
|
const char *caller);
|
|
esp_err_t control_plane_multimodal_get_runtime_state(
|
|
control_plane_multimodal_runtime_state_t *out_state);
|
|
esp_err_t control_plane_multimodal_register_event_callback(
|
|
control_plane_multimodal_event_callback_t cb,
|
|
void *user_data);
|
|
esp_err_t control_plane_multimodal_register_downstream_audio_callback(
|
|
control_plane_multimodal_downstream_audio_callback_t cb,
|
|
void *user_data);
|
|
esp_err_t control_plane_multimodal_register_responding_text_callback(
|
|
control_plane_multimodal_responding_text_callback_t cb,
|
|
void *user_data);
|
|
esp_err_t control_plane_multimodal_start_capture(void);
|
|
esp_err_t control_plane_multimodal_start_uplink(void);
|
|
void control_plane_multimodal_stop_uplink(void);
|
|
bool control_plane_multimodal_is_uplink_running(void);
|
|
esp_err_t control_plane_multimodal_play_downstream_audio(const uint8_t *data, size_t len);
|
|
esp_err_t control_plane_multimodal_handle_ptt_press_step(void);
|
|
esp_err_t control_plane_multimodal_handle_ptt_release(void);
|
|
void control_plane_multimodal_reset_uplink_failure_window(void);
|
|
esp_err_t control_plane_local_wake_start(void);
|
|
esp_err_t control_plane_local_wake_stop(int timeout_ms);
|
|
void control_plane_local_wake_pause_for_foreground(void);
|
|
void control_plane_local_wake_resume_after_foreground(void);
|
|
bool control_plane_local_wake_prompt_gate_active(void);
|
|
void control_plane_ptt_reset_capture_window(void);
|
|
bool control_plane_voice_turn_is_idle(void);
|
|
|
|
esp_err_t control_plane_start_system_event_task(void);
|
|
void control_plane_stop_system_event_task(void);
|
|
esp_err_t control_plane_post_system_event(const control_plane_system_event_t *event, uint32_t timeout_ms);
|
|
int64_t control_plane_event_timestamp_ms(void);
|
|
const char *control_plane_key_id_name(control_plane_key_id_t key_id);
|
|
const char *control_plane_key_event_type_name(control_plane_key_event_type_t type);
|
|
|
|
esp_err_t control_plane_start_key_input_task(void);
|
|
void control_plane_stop_key_input_task(void);
|
|
esp_err_t control_plane_schedule_websocket_wait_task(void);
|
|
void control_plane_set_ptt_active(bool active);
|
|
|
|
esp_err_t control_plane_remote_log_start(void);
|
|
void control_plane_remote_log_stop(int timeout_ms);
|
|
esp_err_t control_plane_remote_log_flush_now(void);
|
|
esp_err_t control_plane_remote_log_clear(void);
|
|
esp_err_t control_plane_remote_log_format_status(char *out, size_t out_len);
|