feat(control_plane): apply light standby hardware policy

This commit is contained in:
chenjintao
2026-08-21 13:55:32 +08:00
parent 6a11aca835
commit baad9dcfa0
15 changed files with 405 additions and 41 deletions
@@ -1369,6 +1369,37 @@ bool multimodal_audio_is_initialized(void)
return s_audio.initialized;
}
esp_err_t multimodal_audio_set_speaker_output_enabled(bool enabled)
{
multimodal_audio_ctx_t *ctx = &s_audio;
if (!ctx->initialized || ctx->codec_dev == NULL || ctx->gpio_if == NULL ||
ctx->gpio_if->set == NULL) {
return ESP_ERR_INVALID_STATE;
}
if (!enabled) {
esp_err_t mute_err = set_downstream_output_mute_if_needed(
ctx,
true,
"Light standby");
if (mute_err != ESP_OK) {
return mute_err;
}
}
int ret = ctx->gpio_if->set(CONFIG_MULTIMODAL_AUDIO_PA_GPIO, enabled);
if (ret != ESP_CODEC_DEV_OK) {
ESP_LOGW(TAG,
"Speaker PA power %s failed: 0x%x",
enabled ? "on" : "off",
ret);
return (esp_err_t)ret;
}
ESP_LOGI(TAG, "Speaker PA power %s", enabled ? "on" : "off");
return ESP_OK;
}
esp_err_t multimodal_audio_register_downstream_playback_callback(
multimodal_audio_downstream_playback_callback_t cb,
void *cb_ctx)
@@ -404,18 +404,21 @@ esp_err_t platform_stepper_driver_rotate_angle_with_accel(float angle,
return err;
}
void platform_stepper_driver_power_off(void)
esp_err_t platform_stepper_driver_release_hold(int timeout_ms)
{
if (timeout_ms < 0) {
return ESP_ERR_INVALID_ARG;
}
if (!ensure_stepper_motion_mutex()) {
return;
return ESP_ERR_INVALID_STATE;
}
TickType_t lock_ticks = pdMS_TO_TICKS(PLATFORM_STEPPER_POWER_OFF_WAIT_MS);
if (lock_ticks == 0) {
TickType_t lock_ticks = pdMS_TO_TICKS(timeout_ms);
if (timeout_ms > 0 && lock_ticks == 0) {
lock_ticks = 1;
}
if (xSemaphoreTake(s_stepper_motion_mutex, lock_ticks) != pdTRUE) {
return;
return ESP_ERR_TIMEOUT;
}
portENTER_CRITICAL(&s_stepper_mux);
@@ -423,4 +426,10 @@ void platform_stepper_driver_power_off(void)
portEXIT_CRITICAL(&s_stepper_mux);
(void)xSemaphoreGive(s_stepper_motion_mutex);
return ESP_OK;
}
void platform_stepper_driver_power_off(void)
{
(void)platform_stepper_driver_release_hold(PLATFORM_STEPPER_POWER_OFF_WAIT_MS);
}
@@ -300,6 +300,18 @@ void platform_stepper_power_off(void)
platform_stepper_driver_power_off();
}
esp_err_t platform_stepper_release_hold(int timeout_ms)
{
if (timeout_ms < 0) {
return ESP_ERR_INVALID_ARG;
}
#if !CONFIG_TQ_STEPPER_ENABLE
return ESP_OK;
#else
return platform_stepper_driver_release_hold(timeout_ms);
#endif
}
esp_err_t platform_configure_digital_input(const platform_digital_input_config_t *config)
{
return platform_digital_input_driver_configure(config);
@@ -210,6 +210,11 @@ bool platform_multimodal_audio_is_initialized(void)
return multimodal_audio_is_initialized();
}
esp_err_t platform_multimodal_audio_set_speaker_output_enabled(bool enabled)
{
return multimodal_audio_set_speaker_output_enabled(enabled);
}
esp_err_t platform_multimodal_audio_register_pcm_observer(
platform_multimodal_audio_pcm_observer_t observer,
void *user_data)