24typedef enum : uintptr_t {
49 for (uint32_t attempt = 0U; attempt < attempts; attempt += 1U) {
50 if (filled == count) {
81 if (state ==
nullptr) {
87 *out_info = state->
info;
108 if (state ==
nullptr) {
114 uint32_t consumed = 0U;
115 while (consumed < count) {
120 const uint32_t available = count - consumed;
121 const uint32_t copy = (available < remaining) ? available : remaining;
165 if (state ==
nullptr) {
179 (int32_t*)buffer->
data,
186 .data = buffer->
data,
190 .timestamp_ms = timestamp_ms,
215 if (state ==
nullptr) {
257 if (state ==
nullptr) {
311 uint32_t* out_frame_bytes)
332 if (frame_bytes > UINT32_MAX) {
335 *out_frame_bytes = (uint32_t)frame_bytes;
388 if (source ==
nullptr) {
391 if (state ==
nullptr) {
394 if (cfg ==
nullptr) {
399 uint32_t frame_bytes = 0U;
411 .frame_bytes = frame_bytes,
#define RA8_INTERNAL
Marker that a function is intended to be static (file-local).
void(* ra8_audio_frame_callback_t)(void *ctx, const ra8_audio_frame_t *frame)
Complete-frame callback for asynchronous audio sources.
@ k_ra8_audio_format_pcm_s32le
Signed 32-bit little-endian PCM.
struct ra8_audio_source_iface ra8_audio_source_iface_t
Opaque source vtable implemented by concrete audio backends.
Private audio-source vtable shared by concrete backends.
static ra8_err_t internal_pdm_capture(void *ctx, const ra8_audio_buffer_t *buffer, ra8_audio_frame_t *out_frame)
Capture one fixed-size PDM frame by polling.
ra8_audio_pdm_alignment_t
@ k_pdm_source_alignment_mask
PCM-S32LE buffer alignment mask.
static ra8_err_t internal_pdm_prepare_hardware(const ra8_audio_source_pdm_cfg_t *cfg)
Initialize, settle, and prime one PDM hardware channel.
static const ra8_audio_source_iface_t s_pdm_source_iface
static ra8_err_t internal_pdm_stream_start(void *ctx, const ra8_audio_buffer_t *buffer, ra8_audio_frame_callback_t callback, void *callback_ctx)
Bind persistent scratch and enable PDM FIFO interrupts.
ra8_err_t ra8_audio_source_pdm_init(ra8_audio_source_t *source, ra8_audio_source_pdm_state_t *state, const ra8_audio_source_pdm_cfg_t *cfg)
Configure, start, settle, and bind one PDM audio source.
static void internal_pdm_stream_data(void *ctx, const int32_t *samples, uint32_t count)
Assemble FIFO chunks into the caller's fixed-size audio frame.
static ra8_err_t internal_pdm_validate_cfg(const ra8_audio_source_pdm_cfg_t *cfg, uint32_t *out_frame_bytes)
Validate PDM source geometry and compute its frame size.
static ra8_err_t internal_pdm_fill(uint8_t channel, int32_t *samples, uint32_t count, uint32_t attempts)
Fill a sample span from the PDM FIFO.
static ra8_err_t internal_pdm_get_info(void *ctx, ra8_audio_source_info_t *out_info)
Report the initialized PDM source geometry.
static ra8_err_t internal_pdm_stop(void *ctx)
Stop and deinitialize the PDM source.
RA8 PDM-IF backend for the transport-neutral audio facade.
@ k_ra8_err_invalid_arg
Invalid function argument.
@ k_ra8_err_exists
Item already exists – cannot create again.
@ k_ra8_err_hw_timeout
Hardware timed out waiting for a flag or handshake.
@ k_ra8_err_not_initialized
Module not initialized – _init() not yet called successfully.
@ k_ra8_ok
Success – operation completed with all postconditions satisfied.
@ k_ra8_err_null_ptr
Pointer was NULL where a valid pointer was required.
@ k_ra8_err_invalid_size
Invalid size parameter (too large, too small, or misaligned).
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
void * memcpy(void *dst, const void *src, size_t n)
Copy memory area between non-overlapping regions.
ra8_err_t ra8_pdm_stop(uint8_t ch)
Stop a channel and wait for its filter to halt.
ra8_err_t ra8_pdm_init(void)
Release the PDM-IF module stop and reset its common bank.
ra8_err_t ra8_pdm_read_enable(uint8_t ch)
Clear status, enable data read and prime the receive FIFO.
ra8_err_t ra8_pdm_configure(uint8_t ch, const ra8_pdm_channel_cfg_t *cfg)
Program a channel's mode, decimation and filter coefficients.
ra8_err_t ra8_pdm_stream_enable(uint8_t ch, ra8_pdm_data_callback_t callback, void *ctx, uint8_t priority)
Enable interrupt-driven FIFO delivery for one running channel.
@ k_ra8_pdm_ch_count
Number of channels (bound).
ra8_err_t ra8_pdm_start(uint8_t ch)
Activate a configured channel's filter (start trigger).
ra8_err_t ra8_pdm_deinit(void)
Put the PDM-IF block back into module stop.
ra8_err_t ra8_pdm_read(uint8_t ch, int32_t *out, uint32_t max, uint32_t *out_count)
Drain up to max PCM samples from a channel's FIFO.
SysTick-based tick counter, delay and timestamp helpers.
void ra8_delay_ms(uint32_t ms)
Busy-wait for at least ms milliseconds.
uint32_t ra8_time_ms(void)
Get the current 1 kHz tick count.
Caller-owned writable byte buffer.
uint32_t capacity
Writable capacity in bytes.
void * data
First writable byte.
Immutable view of one interleaved PCM frame.
Fixed output contract and storage requirement for one source.
uint8_t valid_bits
Significant bits per sample.
uint32_t samples_per_frame
Sample frames returned per call.
ra8_audio_format_t format
PCM container layout.
uint32_t frame_bytes
Required capture-buffer capacity.
uint32_t sample_rate_hz
Sample frames per second.
uint8_t channels
Interleaved channel count.
Complete PDM source initialization and capture policy.
ra8_pdm_channel_cfg_t pdm
HAL filter configuration.
uint8_t channel
ra8_pdm_channel_t selector.
uint32_t sample_rate_hz
Decimated PCM sample rate.
uint32_t discard_samples
Startup samples to discard.
uint8_t irq_priority
Async-stream NVIC priority.
uint8_t valid_bits
Significant bits in PCM-S32LE.
uint32_t poll_attempts
Empty-FIFO retry bound/frame.
uint32_t settle_ms
Mic/filter startup delay.
uint32_t samples_per_frame
Samples returned per capture.
Caller-owned mutable state for one PDM source backend.
uint32_t stream_timestamp_ms
Current frame timestamp.
ra8_audio_source_info_t info
Fixed output contract.
uint32_t poll_attempts
Empty-FIFO retry bound.
void * stream_ctx
Callback context.
void * stream_data
Persistent stream scratch.
bool initialized
Hardware source is running.
ra8_audio_frame_callback_t stream_callback
Complete-frame callback.
uint8_t irq_priority
Async-stream NVIC priority.
uint8_t channel
Bound PDM channel.
bool streaming
Interrupt delivery enabled.
uint32_t stream_filled
Samples currently assembled.
Caller-owned handle binding an audio source backend and its state.