#ifndef USB_DEVICE_H #define USB_DEVICE_H // #include typedef enum { // error states first so they are lowest CONTROL_ERROR = -4, ERROR = -3, UNKNOWN_INTERRUPT = -2, OTG_ERROR = -1, // shouldn't happen, since otg is not used INIT = 0, RESET = 1, RESET_DONE = 2, SET_ADDRESS_RCVD = 3, SET_CONFIG_RCVD = 4, ENUMERATED = 5, } usb_device_state_t; typedef struct { USB_OTG_GlobalTypeDef *core; USB_OTG_DeviceTypeDef *device; USB_OTG_OUTEndpointTypeDef *out; USB_OTG_INEndpointTypeDef *in; uint8_t endpoint_count; usb_device_state_t state; } usb_device_t; struct usb_configuration_t; typedef struct { } usb_class_t; // has configuration etc #define USB_DEVICE_SIZE sizeof(usb_device_t) extern usb_device_t* usb1_device; void* usb_device_init(void* peripheral_address, usb_class_t* class, void* buffer); void usb_device_setup(void* device); void usb_device_wait_for_handshake(void* device); #endif // USB_DEVICE_H