mayhem-firmware/firmware/baseband/sd_over_usb/sd_over_usb.c
2023-03-29 17:05:11 +02:00

78 lines
1.5 KiB
C

#include "sd_over_usb.h"
//extern usb_request_handlers_t usb_request_handlers;
usb_request_status_t dummy(
usb_endpoint_t* const endpoint,
const usb_transfer_stage_t stage)
{
(void)(endpoint);
(void)(stage);
return USB_REQUEST_STATUS_OK;
}
static usb_request_handler_fn vendor_request_handler[] = {
NULL,
dummy // USB_WCID_VENDOR_REQ
};
static const uint32_t vendor_request_handler_count =
sizeof(vendor_request_handler) / sizeof(vendor_request_handler[0]);
usb_request_status_t usb_vendor_request(
usb_endpoint_t* const endpoint,
const usb_transfer_stage_t stage)
{
usb_request_status_t status = USB_REQUEST_STATUS_STALL;
if (endpoint->setup.request < vendor_request_handler_count) {
usb_request_handler_fn handler =
vendor_request_handler[endpoint->setup.request];
if (handler) {
status = handler(endpoint, stage);
}
}
return status;
}
const usb_request_handlers_t usb_request_handlers = {
.standard = usb_standard_request,
.class = 0,
.vendor = usb_vendor_request,
.reserved = 0,
};
void start_usb(void) {
usb_peripheral_reset();
usb_device_init(0, &usb_device);
usb_queue_init(&usb_endpoint_control_out_queue);
usb_queue_init(&usb_endpoint_control_in_queue);
usb_queue_init(&usb_endpoint_bulk_out_queue);
usb_queue_init(&usb_endpoint_bulk_in_queue);
usb_endpoint_init(&usb_endpoint_control_out);
usb_endpoint_init(&usb_endpoint_control_in);
nvic_set_priority(NVIC_USB0_IRQ, 255);
usb_run(&usb_device);
}
void stop_usb(void) {
usb_peripheral_reset();
}
void irq_usb(void) {
usb0_isr();
}