#include "usbd_core.h" #include "usbd_desc.h" #include "usbd_conf.h" #define USBD_VID 0x0483 /* STMicroelectronics */ #define USBD_PID_FS 0x5740 /* CDC Virtual COM Port */ #define USBD_LANGID_STRING 0x0409 /* English US */ #define USBD_MFR_STRING "SaltyLab" #define USBD_PRODUCT_STRING "SaltyLab IMU" #define USBD_SERIAL_STRING "SALTY001" static uint8_t *USBD_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); static uint8_t *USBD_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); static uint8_t *USBD_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); static uint8_t *USBD_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); static uint8_t *USBD_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); static uint8_t *USBD_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); static uint8_t *USBD_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); USBD_DescriptorsTypeDef SaltyLab_Desc = { USBD_DeviceDescriptor, USBD_LangIDStrDescriptor, USBD_ManufacturerStrDescriptor, USBD_ProductStrDescriptor, USBD_SerialStrDescriptor, USBD_ConfigStrDescriptor, USBD_InterfaceStrDescriptor, }; static uint8_t USBD_DeviceDesc[USB_LEN_DEV_DESC] = { 0x12, USB_DESC_TYPE_DEVICE, 0x00, 0x02, 0x02, 0x02, 0x00, 64, LOBYTE(USBD_VID), HIBYTE(USBD_VID), LOBYTE(USBD_PID_FS), HIBYTE(USBD_PID_FS), 0x00, 0x02, 1, 2, 3, 1 }; static uint8_t USBD_LangIDDesc[USB_LEN_LANGID_STR_DESC] = { USB_LEN_LANGID_STR_DESC, USB_DESC_TYPE_STRING, LOBYTE(USBD_LANGID_STRING), HIBYTE(USBD_LANGID_STRING) }; static uint8_t USBD_StrDesc[USBD_MAX_STR_DESC_SIZ]; static uint8_t *USBD_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) { (void)speed; *length = sizeof(USBD_DeviceDesc); return USBD_DeviceDesc; } static uint8_t *USBD_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) { (void)speed; *length = sizeof(USBD_LangIDDesc); return USBD_LangIDDesc; } static uint8_t *USBD_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) { USBD_GetString((uint8_t *)USBD_MFR_STRING, USBD_StrDesc, length); return USBD_StrDesc; } static uint8_t *USBD_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) { USBD_GetString((uint8_t *)USBD_PRODUCT_STRING, USBD_StrDesc, length); return USBD_StrDesc; } static uint8_t *USBD_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) { USBD_GetString((uint8_t *)USBD_SERIAL_STRING, USBD_StrDesc, length); return USBD_StrDesc; } static uint8_t *USBD_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) { USBD_GetString((uint8_t *)"CDC Config", USBD_StrDesc, length); return USBD_StrDesc; } static uint8_t *USBD_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) { USBD_GetString((uint8_t *)"CDC Interface", USBD_StrDesc, length); return USBD_StrDesc; }