mirror of
https://github.com/esphome/esphome.git
synced 2026-09-08 05:56:02 +00:00
[i2s_audio] Keep a start request that arrives while the speaker task stops (#19027)
Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
This commit is contained in:
co-authored by
Claude
pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
parent
89a56298c2
commit
50ca381198
@@ -91,7 +91,14 @@ void I2SAudioSpeakerBase::loop() {
|
||||
this->speaker_task_handle_ = nullptr;
|
||||
|
||||
this->stop_i2s_driver_();
|
||||
xEventGroupClearBits(this->event_group_, SpeakerEventGroupBits::ALL_BITS);
|
||||
// ALL_BITS includes COMMAND_START. Take the bits from the clear itself, not from the snapshot at
|
||||
// the top of loop(): the audio source's task can raise a start at any point above, including
|
||||
// during stop_i2s_driver_(), and nothing would ever re-issue it.
|
||||
const EventBits_t bits_before_clear = xEventGroupClearBits(this->event_group_, SpeakerEventGroupBits::ALL_BITS);
|
||||
if (bits_before_clear & SpeakerEventGroupBits::COMMAND_START) {
|
||||
ESP_LOGD(TAG, "Start requested while stopping; keeping the request");
|
||||
xEventGroupSetBits(this->event_group_, SpeakerEventGroupBits::COMMAND_START);
|
||||
}
|
||||
this->status_clear_error();
|
||||
|
||||
this->on_task_stopped();
|
||||
|
||||
Reference in New Issue
Block a user