mirror of
https://github.com/wiiu-env/wut.git
synced 2024-12-05 02:24:16 +01:00
117 lines
3.9 KiB
C
117 lines
3.9 KiB
C
#pragma once
|
|
#include <wut.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* USB class codes */
|
|
#define USBCLASS_DEVICE 0x00
|
|
#define USBCLASS_AUDIO 0x01
|
|
#define USBCLASS_HID 0x03
|
|
#define USBCLASS_STORAGE 0x08
|
|
|
|
typedef struct UhsDeviceDescriptor UhsDeviceDescriptor;
|
|
typedef struct UhsConfigDescriptor UhsConfigDescriptor;
|
|
typedef struct UhsInterfaceDescriptor UhsInterfaceDescriptor;
|
|
typedef struct UhsSetupPacket UhsSetupPacket;
|
|
|
|
/* USB device descriptor */
|
|
struct WUT_PACKED UhsDeviceDescriptor
|
|
{
|
|
uint8_t bLength;
|
|
uint8_t bDescriptorType;
|
|
uint16_t bcdUsb;
|
|
uint8_t bDeviceClass;
|
|
uint8_t bDeviceSubclass;
|
|
uint8_t bDeviceProtocol;
|
|
uint8_t bMaxPacketSize;
|
|
uint16_t idVendor;
|
|
uint16_t idProduct;
|
|
uint16_t bcdDevice;
|
|
uint8_t iManufacturer;
|
|
uint8_t iProduct;
|
|
uint8_t iSerialNumber;
|
|
uint8_t bNumConfigurations;
|
|
};
|
|
WUT_CHECK_OFFSET(UhsDeviceDescriptor, 0x00, bLength);
|
|
WUT_CHECK_OFFSET(UhsDeviceDescriptor, 0x01, bDescriptorType);
|
|
WUT_CHECK_OFFSET(UhsDeviceDescriptor, 0x02, bcdUsb);
|
|
WUT_CHECK_OFFSET(UhsDeviceDescriptor, 0x04, bDeviceClass);
|
|
WUT_CHECK_OFFSET(UhsDeviceDescriptor, 0x05, bDeviceSubclass);
|
|
WUT_CHECK_OFFSET(UhsDeviceDescriptor, 0x06, bDeviceProtocol);
|
|
WUT_CHECK_OFFSET(UhsDeviceDescriptor, 0x07, bMaxPacketSize);
|
|
WUT_CHECK_OFFSET(UhsDeviceDescriptor, 0x08, idVendor);
|
|
WUT_CHECK_OFFSET(UhsDeviceDescriptor, 0x0A, idProduct);
|
|
WUT_CHECK_OFFSET(UhsDeviceDescriptor, 0x0C, bcdDevice);
|
|
WUT_CHECK_OFFSET(UhsDeviceDescriptor, 0x0E, iManufacturer);
|
|
WUT_CHECK_OFFSET(UhsDeviceDescriptor, 0x0F, iProduct);
|
|
WUT_CHECK_OFFSET(UhsDeviceDescriptor, 0x10, iSerialNumber);
|
|
WUT_CHECK_OFFSET(UhsDeviceDescriptor, 0x11, bNumConfigurations);
|
|
WUT_CHECK_SIZE(UhsDeviceDescriptor, 0x12);
|
|
|
|
/* USB configuration descriptor */
|
|
struct WUT_PACKED UhsConfigDescriptor
|
|
{
|
|
uint8_t bLength;
|
|
uint8_t bDescriptorType;
|
|
uint16_t wTotalLength;
|
|
uint8_t bNumInterfaces;
|
|
uint8_t bConfigurationValue;
|
|
uint8_t iConfiguration;
|
|
uint8_t bmAttributes;
|
|
uint8_t bMaxPower;
|
|
};
|
|
WUT_CHECK_OFFSET(UhsConfigDescriptor, 0x00, bLength);
|
|
WUT_CHECK_OFFSET(UhsConfigDescriptor, 0x01, bDescriptorType);
|
|
WUT_CHECK_OFFSET(UhsConfigDescriptor, 0x02, wTotalLength);
|
|
WUT_CHECK_OFFSET(UhsConfigDescriptor, 0x04, bNumInterfaces);
|
|
WUT_CHECK_OFFSET(UhsConfigDescriptor, 0x05, bConfigurationValue);
|
|
WUT_CHECK_OFFSET(UhsConfigDescriptor, 0x06, iConfiguration);
|
|
WUT_CHECK_OFFSET(UhsConfigDescriptor, 0x07, bmAttributes);
|
|
WUT_CHECK_OFFSET(UhsConfigDescriptor, 0x08, bMaxPower);
|
|
WUT_CHECK_SIZE(UhsConfigDescriptor, 0x09);
|
|
|
|
/* USB interface descriptor */
|
|
struct WUT_PACKED UhsInterfaceDescriptor
|
|
{
|
|
uint8_t bLength;
|
|
uint8_t bDescriptorType;
|
|
uint8_t bInterfaceNumber;
|
|
uint8_t bAlternateSetting;
|
|
uint8_t bNumEndpoints;
|
|
uint8_t bInterfaceClass;
|
|
uint8_t bInterfaceSubClass;
|
|
uint8_t bInterfaceProtocol;
|
|
uint8_t iInterface;
|
|
};
|
|
WUT_CHECK_OFFSET(UhsInterfaceDescriptor, 0x00, bLength);
|
|
WUT_CHECK_OFFSET(UhsInterfaceDescriptor, 0x01, bDescriptorType);
|
|
WUT_CHECK_OFFSET(UhsInterfaceDescriptor, 0x02, bInterfaceNumber);
|
|
WUT_CHECK_OFFSET(UhsInterfaceDescriptor, 0x03, bAlternateSetting);
|
|
WUT_CHECK_OFFSET(UhsInterfaceDescriptor, 0x04, bNumEndpoints);
|
|
WUT_CHECK_OFFSET(UhsInterfaceDescriptor, 0x05, bInterfaceClass);
|
|
WUT_CHECK_OFFSET(UhsInterfaceDescriptor, 0x06, bInterfaceSubClass);
|
|
WUT_CHECK_OFFSET(UhsInterfaceDescriptor, 0x07, bInterfaceProtocol);
|
|
WUT_CHECK_OFFSET(UhsInterfaceDescriptor, 0x08, iInterface);
|
|
WUT_CHECK_SIZE(UhsInterfaceDescriptor, 0x09);
|
|
|
|
/* USB setup packet */
|
|
struct WUT_PACKED UhsSetupPacket
|
|
{
|
|
uint8_t bmRequestType;
|
|
uint8_t bRequest;
|
|
uint16_t wValue;
|
|
uint16_t wIndex;
|
|
uint16_t wLength;
|
|
};
|
|
WUT_CHECK_OFFSET(UhsSetupPacket, 0x00, bmRequestType);
|
|
WUT_CHECK_OFFSET(UhsSetupPacket, 0x01, bRequest);
|
|
WUT_CHECK_OFFSET(UhsSetupPacket, 0x02, wValue);
|
|
WUT_CHECK_OFFSET(UhsSetupPacket, 0x04, wIndex);
|
|
WUT_CHECK_OFFSET(UhsSetupPacket, 0x06, wLength);
|
|
WUT_CHECK_SIZE(UhsSetupPacket, 0x08);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif |