ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_usb_paud.h
Go to the documentation of this file.
1
35
36#pragma once
37
38#ifdef __cplusplus
39extern "C" {
40#endif
41
42#include <stdint.h>
43
44#include "ra8_err.h"
45#include "ra8_usb.h"
46
47/* =============================================================================
48 * Constants
49 * =============================================================================
50 */
51
66
75
90
105
126
140
151typedef struct {
152 uint32_t sample_rate_hz;
153 uint8_t channels;
156
178typedef ra8_err_t (*ra8_usb_paud_setup_fn_t)(void* ctx, const ra8_usb_setup_t* setup);
179
180/* =============================================================================
181 * Lifecycle
182 * =============================================================================
183 */
184
214[[nodiscard]] ra8_err_t ra8_usb_paud_init(ra8_usb_speed_t speed);
215
231[[nodiscard]] ra8_err_t ra8_usb_paud_close(void);
232
233/* =============================================================================
234 * Descriptor handoff
235 * =============================================================================
236 */
237
264[[nodiscard]] ra8_err_t ra8_usb_paud_set_descriptors(const uint8_t* desc, uint16_t desc_len);
265
266/* =============================================================================
267 * Audio data transport
268 * =============================================================================
269 */
270
295[[nodiscard]] ra8_err_t ra8_usb_paud_send_frame(const uint8_t* frame, uint16_t len);
296
318[[nodiscard]] ra8_err_t ra8_usb_paud_recv_frame(uint8_t* buf, uint16_t max_len, uint16_t* got_len);
319
320/* =============================================================================
321 * Format / volume helpers
322 * =============================================================================
323 */
324
348
367
388[[nodiscard]] ra8_err_t ra8_usb_paud_set_volume(int16_t volume_q8_8);
389
407[[nodiscard]] ra8_err_t ra8_usb_paud_get_volume(int16_t* out_volume);
408
409/* =============================================================================
410 * Setup-handler attach
411 * =============================================================================
412 */
413
439 void* ctx);
440
441/* =============================================================================
442 * Class SETUP dispatch
443 * =============================================================================
444 */
445
471[[nodiscard]] ra8_err_t ra8_usb_paud_handle_setup(const ra8_usb_setup_t* setup);
472
473#ifdef __cplusplus
474}
475#endif
Error Code Definitions for ra8-firmware.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Definition ra8_err.h:546
Native USB controller driver public API (device + host modes).
ra8_usb_speed_t
Selects which controller instance the call targets.
ra8_err_t ra8_usb_paud_recv_frame(uint8_t *buf, uint16_t max_len, uint16_t *got_len)
Drain a playback audio frame from the iso-OUT endpoint.
ra8_usb_paud_class_t
Class / subclass / protocol triplet that identifies the local Audio function in the configuration des...
@ k_ra8_paud_class_audio
Audio interface class.
@ k_ra8_paud_protocol_none
No protocol (UAC1).
@ k_ra8_paud_subclass_control
AudioControl Subclass.
@ k_ra8_paud_subclass_streaming
AudioStreaming Subclass.
ra8_err_t ra8_usb_paud_attach_setup_handler(ra8_usb_paud_setup_fn_t setup_fn, void *ctx)
Register the application's audio class-setup handler.
ra8_err_t ra8_usb_paud_set_volume(int16_t volume_q8_8)
Apply a SET_CUR(volume) shadow update on the feature unit.
ra8_err_t ra8_usb_paud_set_descriptors(const uint8_t *desc, uint16_t desc_len)
Install the caller-supplied audio descriptor blob.
ra8_usb_paud_ep_t
USB endpoint addresses used by the device-Audio function.
@ k_ra8_paud_ep_iso_in_addr
EP1 IN address.
@ k_ra8_paud_ep_iso_out_addr
EP2 OUT address.
ra8_err_t ra8_usb_paud_set_format(ra8_usb_paud_format_t format)
Apply a SET_CUR(sampling-frequency) shadow update.
ra8_usb_paud_request_t
Audio class-specific request codes the host issues to the device.
@ k_ra8_paud_req_get_cur
GET_CUR.
@ k_ra8_paud_req_get_stat
GET_STAT.
@ k_ra8_paud_req_get_max
GET_MAX.
@ k_ra8_paud_req_set_res
SET_RES.
@ k_ra8_paud_req_set_cur
SET_CUR.
@ k_ra8_paud_req_set_max
SET_MAX.
@ k_ra8_paud_req_get_res
GET_RES.
@ k_ra8_paud_req_get_min
GET_MIN.
@ k_ra8_paud_req_set_min
SET_MIN.
ra8_usb_paud_control_sel_t
Feature-unit / endpoint control selectors carried in the high byte of wValue.
@ k_ra8_paud_ctl_sample_rate
Sampling Frequency Control.
@ k_ra8_paud_ctl_mute
Mute Control.
@ k_ra8_paud_ctl_volume
Volume Control.
ra8_err_t ra8_usb_paud_get_format(ra8_usb_paud_format_t *out_format)
Read the current iso stream format.
ra8_err_t ra8_usb_paud_close(void)
Tear down the device-Audio function and release the controller.
ra8_err_t ra8_usb_paud_send_frame(const uint8_t *frame, uint16_t len)
Push a captured audio frame on the iso-IN endpoint.
ra8_err_t ra8_usb_paud_handle_setup(const ra8_usb_setup_t *setup)
Process a class-specific SETUP packet on EP0.
ra8_usb_paud_packet_t
Packet sizing for the iso endpoints.
@ k_ra8_paud_iso_max_packet_fs
FS iso ceiling.
@ k_ra8_paud_iso_max_packet_fs_default
48 kHz stereo 16-bit.
@ k_ra8_paud_iso_max_packet_hs
HS iso ceiling.
ra8_err_t ra8_usb_paud_get_volume(int16_t *out_volume)
Read the current feature-unit volume.
ra8_err_t(* ra8_usb_paud_setup_fn_t)(void *ctx, const ra8_usb_setup_t *setup)
Caller-supplied audio class-setup handler signature.
ra8_err_t ra8_usb_paud_init(ra8_usb_speed_t speed)
Bring up the device-Audio function on a chosen USB controller.
ra8_usb_paud_pipe_t
PIPE numbers used by the device-Audio function for the local isochronous endpoints.
@ k_ra8_paud_pipe_iso_out
PIPE2 -> EP2 OUT (playback).
@ k_ra8_paud_pipe_iso_in
PIPE1 -> EP1 IN (capture).
Current iso stream format negotiated with the host.
uint8_t bytes_per_sample
16-bit -> 2, 24-bit -> 3, etc.
uint32_t sample_rate_hz
Current SET_CUR sample rate.
uint8_t channels
1 = mono, 2 = stereo.
Decoded 8-byte USB SETUP packet.