32static const char*
s_tag =
"USBPVND";
210 if (desc_len == 0U) {
228 if ((data ==
nullptr) && (len != 0U)) {
231 if ((len == 0U) || (len >
s_state.bulk_max_packet)) {
247 uint16_t inout_len = max_len;
251 *got_len = inout_len;
287 if (
s_state.setup_cb ==
nullptr) {
static const char * s_tag
Logging / check tag.
Annotation-attribute framework macros for ra8-firmware.
#define RA8_INTERNAL
Marker that a function is intended to be static (file-local).
Validation and Error-Checking Macros for ra8-firmware.
#define RA8_CHECK_NULL_PTR(ptr, tag, message)
Reject nullptr pointer, returning k_ra8_err_null_ptr.
Error Code Definitions for ra8-firmware.
@ k_ra8_err_hw_init_failed
Hardware peripheral failed to initialise.
@ k_ra8_err_not_supported
Requested feature not compiled in, not wired, or not supported by this MCU variant.
@ k_ra8_err_invalid_arg
Invalid function argument.
@ k_ra8_err_invalid_state
Module in wrong state for requested operation.
@ k_ra8_ok
Success – operation completed with all postconditions satisfied.
@ k_ra8_err_null_ptr
Pointer was NULL where a valid pointer was required.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Lightweight Logging Interface for ra8-firmware.
#define ra8_log_info_val(tag, message, value)
RA8 log info val.
#define ra8_log_error_val(tag, message, value)
RA8 log error val.
Native USB controller driver public API (device + host modes).
ra8_err_t ra8_usb_queue_out(ra8_usb_speed_t speed, uint8_t pipe_num, uint8_t *out_buf, uint16_t *inout_len, bool rearm)
Drain an OUT transfer (host -> device) from pipe_num.
@ k_ra8_usb_ep_type_bulk
Bulk transfer.
ra8_err_t ra8_usb_device_init(ra8_usb_speed_t speed)
Bring up a USB controller in device mode.
ra8_err_t ra8_usb_control_response(ra8_usb_speed_t speed, bool accept)
Issue a control-transfer status response on EP0.
ra8_err_t ra8_usb_device_deinit(ra8_usb_speed_t speed)
Tear down a USB controller and drop its MSTP reference.
ra8_err_t ra8_usb_configure_endpoint(ra8_usb_speed_t speed, uint8_t pipe_num, uint8_t ep_addr, ra8_usb_ep_dir_t dir, ra8_usb_ep_type_t type, uint16_t max_packet)
Configure a non-control PIPE for IN or OUT bulk / interrupt / iso transfers.
ra8_err_t ra8_usb_device_attach(ra8_usb_speed_t speed, bool attached)
Raise / drop the D+ pull-up to advertise the device to the host.
@ k_ra8_usb_ep_dir_in
Device -> host.
@ k_ra8_usb_ep_dir_out
Host -> device.
ra8_usb_speed_t
Selects which controller instance the call targets.
@ k_ra8_usb_speed_hs
High-Speed controller (USBHS @ 0x40351000).
@ k_ra8_usb_speed_fs
Full-Speed controller (USBFS @ 0x40250000).
ra8_err_t ra8_usb_queue_in(ra8_usb_speed_t speed, uint8_t pipe_num, const uint8_t *data, uint16_t len)
Queue an IN transfer (device -> host) on pipe_num.
static ra8_err_t internal_configure_pipes(void)
Configure the host-Audio iso pipes against the attached device's endpoints.
static bool internal_is_vendor_envelope(uint8_t bm)
Recognise a vendor-recipient SETUP envelope.
ra8_err_t ra8_usb_pvnd_set_descriptors(const uint8_t *desc, uint16_t desc_len)
Install the caller-supplied descriptor blob.
ra8_err_t ra8_usb_pvnd_recv(uint8_t *buf, uint16_t max_len, uint16_t *got_len)
Drain a payload from the vendor bulk-OUT endpoint.
ra8_err_t ra8_usb_pvnd_handle_setup(const ra8_usb_setup_t *setup)
Process a vendor-specific SETUP packet on EP0.
ra8_err_t ra8_usb_pvnd_init(ra8_usb_speed_t speed)
Bring up the device-Vendor function on a chosen USB controller.
ra8_err_t ra8_usb_pvnd_attach_setup_handler(ra8_usb_pvnd_setup_fn_t setup_fn, void *ctx)
Register the application's vendor setup handler.
static void internal_reset_shadow(ra8_usb_speed_t speed)
Reset shadow state to spec defaults.
ra8_err_t ra8_usb_pvnd_close(void)
Tear down the device-Vendor function and release the controller.
static uint16_t internal_bulk_max_packet(ra8_usb_speed_t speed)
Pick the bulk-max-packet ceiling matching the negotiated speed.
ra8_err_t ra8_usb_pvnd_send(const uint8_t *data, uint16_t len)
Push a payload on the vendor bulk-IN endpoint.
Native USB device-side Vendor-defined class layer.
ra8_err_t(* ra8_usb_pvnd_setup_fn_t)(void *ctx, const ra8_usb_setup_t *setup)
Caller-supplied vendor class-setup handler signature.
@ k_ra8_pvnd_bm_vendor_iface_in
Vendor | Interface | In.
@ k_ra8_pvnd_bm_vendor_ep_out
Vendor | Endpoint | Out.
@ k_ra8_pvnd_bm_vendor_dev_in
Vendor | Device | In.
@ k_ra8_pvnd_bm_vendor_iface_out
Vendor | Interface | Out.
@ k_ra8_pvnd_bm_vendor_dev_out
Vendor | Device | Out.
@ k_ra8_pvnd_bm_vendor_ep_in
Vendor | Endpoint | In.
@ k_ra8_pvnd_pipe_bulk_out
PIPE1 -> EP2 OUT (vendor OUT).
@ k_ra8_pvnd_pipe_bulk_in
PIPE5 -> EP1 IN (vendor IN).
@ k_ra8_pvnd_ep_bulk_in_addr
EP1 IN address.
@ k_ra8_pvnd_ep_bulk_out_addr
EP2 OUT address.
@ k_ra8_pvnd_bulk_max_packet_hs
Bulk size at HS.
@ k_ra8_pvnd_bulk_max_packet_fs
Bulk size at FS.
Singleton shadow state for the device-Vendor function.
ra8_usb_pvnd_setup_fn_t setup_cb
Application class handler.
const uint8_t * desc
Cached descriptor blob.
void * setup_ctx
Class handler context.
uint16_t bulk_max_packet
Pipe max-packet size.
uint16_t desc_len
Descriptor blob byte len.
ra8_usb_speed_t speed
Underlying controller.
bool initialized
True after init.
Decoded 8-byte USB SETUP packet.
uint8_t bm_request_type
Request direction / type / recipient.