28 void setup()
override;
33 void start()
override;
37 size_t play(
const uint8_t *data,
size_t length, TickType_t ticks_to_wait)
override;
38 size_t play(
const uint8_t *data,
size_t length)
override;
53 void request_(uint8_t set, uint8_t clear);
Helper class to easily give an object a parent of type T.
audio::AudioStreamInfo audio_stream_info_
USBAudioSpeaker(const audio::AudioStreamInfo &stream_info, uint32_t buffer_size, uint32_t write_timeout_ms)
void request_(uint8_t set, uint8_t clear)
std::atomic< uint8_t > writes_in_flight_
void on_transfer_taken() override
void set_mute_state(bool mute_state) override
static constexpr uint8_t COMMAND_START
static constexpr uint8_t COMMAND_STOP
uint32_t write_timeout_ms_
std::atomic< uint32_t > ring_padding_
size_t play(const uint8_t *data, size_t length, TickType_t ticks_to_wait) override
void pad_with_silence_()
Write silence until a whole USB transfer is padded, so the driver sends a final partial transfer.
audio::AudioStreamInfo get_usb_stream_info() override
size_t play_internal_(const uint8_t *data, size_t length, uint32_t budget_ms)
static constexpr uint8_t COMMAND_FINISH
bool has_buffered_data() const override
void set_volume(float volume) override
std::atomic< bool > format_mismatch_
const audio::AudioStreamInfo usb_stream_info_
void on_stream_state(StreamEvent event) override
uint32_t packet_frac_accum_
std::atomic< uint8_t > commands_
std::atomic< uint32_t > ring_bytes_
bool has_buffered_data_(int64_t now_us) const
esp_err_t write_(const uint8_t *data, size_t length, uint32_t timeout_ms, bool padding)
Write to the driver, counting the bytes in ring_bytes_ (and in ring_padding_ for silence padding).
uint32_t report_frames_pending_
std::atomic< uint32_t > last_taken_us_
void dump_config() override
bool stream_idle() const override
int64_t report_finish_us_
size_t ring_room_() const
Bytes that can be written without filling the driver's ring buffer past buffer_size_.
uint32_t unreported_frames_
A speaker or microphone platform that streams through the hub. The hub calls it on the main loop only...
StreamEvent
What the hub reports to a platform about its stream.