/** ****************************************************************************** * @file : usbd_desc.c * @version : v2.0_Cube * @brief : This file implements the USB Device descriptors ****************************************************************************** * This notice applies to any and all portions of this file * that are not between comment pairs USER CODE BEGIN and * USER CODE END. Other portions of this file, whether * inserted by the user or by software development tools * are owned by their respective copyright owners. * * Copyright (c) 2017 STMicroelectronics International N.V. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted, provided that the following conditions are met: * * 1. Redistribution of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * 3. Neither the name of STMicroelectronics nor the names of other * contributors to this software may be used to endorse or promote products * derived from this software without specific written permission. * 4. This software, including modifications and/or derivative works of this * software, must execute solely and exclusively on microcontroller or * microprocessor devices manufactured by or for STMicroelectronics. * 5. Redistribution and use of this software other than as permitted under * this license is void and will automatically terminate your rights under * this license. * * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "platform.h" #include "usbd_core.h" #include "usbd_desc.h" #include "usbd_conf.h" /** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY * @{ */ /** @defgroup USBD_DESC * @brief USBD descriptors module * @{ */ /** @defgroup USBD_DESC_Private_TypesDefinitions * @{ */ /** * @} */ /** @defgroup USBD_DESC_Private_Defines * @{ */ #define USBD_VID 0x1209 #define USBD_PID_FS 0x4c60 #define USBD_LANGID_NUM 1033 #define USBD_MANUFACTURER_STRING "MightyPork" #define USBD_PRODUCT_STRING_FS "GEX USB module" #define USBD_VERSION_NUM 0x0001 // 0xMMmp //#define USBD_SERIALNUMBER_STRING_FS "00000000001A" //#define USBD_CONFIGURATION_STRING_FS "MSC Config" //#define USBD_INTERFACE_STRING_FS "MSC Interface" /* USER CODE BEGIN 0 */ /* USER CODE END 0*/ /** * @} */ /** @defgroup USBD_DESC_Private_Macros * @{ */ /** * @} */ /** @defgroup USBD_DESC_Private_Variables * @{ */ uint8_t * USBD_FS_DeviceDescriptor( USBD_SpeedTypeDef speed , uint16_t *length); uint8_t * USBD_FS_LangIDStrDescriptor( USBD_SpeedTypeDef speed , uint16_t *length); uint8_t * USBD_FS_ManufacturerStrDescriptor ( USBD_SpeedTypeDef speed , uint16_t *length); uint8_t * USBD_FS_ProductStrDescriptor ( USBD_SpeedTypeDef speed , uint16_t *length); uint8_t * USBD_FS_SerialStrDescriptor( USBD_SpeedTypeDef speed , uint16_t *length); //uint8_t * USBD_FS_ConfigStrDescriptor( USBD_SpeedTypeDef speed , uint16_t *length); //uint8_t * USBD_FS_InterfaceStrDescriptor( USBD_SpeedTypeDef speed , uint16_t *length); #ifdef USB_SUPPORT_USER_STRING_DESC uint8_t * USBD_FS_USRStringDesc (USBD_SpeedTypeDef speed, uint8_t idx , uint16_t *length); #endif /* USB_SUPPORT_USER_STRING_DESC */ USBD_DescriptorsTypeDef FS_Desc = { USBD_FS_DeviceDescriptor, USBD_FS_LangIDStrDescriptor, USBD_FS_ManufacturerStrDescriptor, USBD_FS_ProductStrDescriptor, USBD_FS_SerialStrDescriptor, NULL, NULL, // USBD_FS_ConfigStrDescriptor, // USBD_FS_InterfaceStrDescriptor, }; #if defined ( __ICCARM__ ) /*!< IAR Compiler */ #pragma data_alignment=4 #endif /* USB Standard Device Descriptor */ __ALIGN_BEGIN uint8_t USBD_FS_DeviceDesc[USB_LEN_DEV_DESC] __ALIGN_END = { USB_LEN_DEV_DESC, /*bLength */ USB_DESC_TYPE_DEVICE, /*bDescriptorType*/ 0x00, /* bcdUSB 2.0 */ 0x02, // magic triplet to allow use of the association descriptor 0xEF, /*bDeviceClass*/ 0x02, /*bDeviceSubClass*/ 0x01, /*bDeviceProtocol*/ USB_MAX_EP0_SIZE, /*bMaxPacketSize*/ LOBYTE(USBD_VID), /*idVendor*/ HIBYTE(USBD_VID), /*idVendor*/ LOBYTE(USBD_PID_FS), /*idVendor*/ HIBYTE(USBD_PID_FS), /*idVendor*/ LOBYTE(USBD_VERSION_NUM), /*bcdDevice rel. 2.00*/ HIBYTE(USBD_VERSION_NUM), USBD_IDX_MFC_STR, /*Index of manufacturer string*/ USBD_IDX_PRODUCT_STR, /*Index of product string*/ USBD_IDX_SERIAL_STR, /*Index of serial number string*/ USBD_MAX_NUM_CONFIGURATION /*bNumConfigurations*/ } ; /* USB_DeviceDescriptor */ #if defined ( __ICCARM__ ) /*!< IAR Compiler */ #pragma data_alignment=4 #endif /* USB Standard Device Descriptor */ __ALIGN_BEGIN uint8_t USBD_LangIDDesc[USB_LEN_LANGID_STR_DESC] __ALIGN_END = { USB_LEN_LANGID_STR_DESC, USB_DESC_TYPE_STRING, LOBYTE(USBD_LANGID_NUM), HIBYTE(USBD_LANGID_NUM), }; #if defined ( __ICCARM__ ) /*!< IAR Compiler */ #pragma data_alignment=4 #endif __ALIGN_BEGIN uint8_t USBD_StrDesc[USBD_MAX_STR_DESC_SIZ] __ALIGN_END; /** * @} */ /** @defgroup USBD_DESC_Private_FunctionPrototypes * @{ */ /** * @} */ /** @defgroup USBD_DESC_Private_Functions * @{ */ /** * @brief USBD_FS_DeviceDescriptor * return the device descriptor * @param speed : current device speed * @param length : pointer to data length variable * @retval pointer to descriptor buffer */ uint8_t * USBD_FS_DeviceDescriptor( USBD_SpeedTypeDef speed , uint16_t *length) { *length = sizeof(USBD_FS_DeviceDesc); return USBD_FS_DeviceDesc; } /** * @brief USBD_FS_LangIDStrDescriptor * return the LangID string descriptor * @param speed : current device speed * @param length : pointer to data length variable * @retval pointer to descriptor buffer */ uint8_t * USBD_FS_LangIDStrDescriptor( USBD_SpeedTypeDef speed , uint16_t *length) { *length = sizeof(USBD_LangIDDesc); return USBD_LangIDDesc; } /** * @brief USBD_FS_ProductStrDescriptor * return the product string descriptor * @param speed : current device speed * @param length : pointer to data length variable * @retval pointer to descriptor buffer */ uint8_t * USBD_FS_ProductStrDescriptor( USBD_SpeedTypeDef speed , uint16_t *length) { USBD_GetString ((uint8_t *) USBD_PRODUCT_STRING_FS, USBD_StrDesc, length); return USBD_StrDesc; } /** * @brief USBD_FS_ManufacturerStrDescriptor * return the manufacturer string descriptor * @param speed : current device speed * @param length : pointer to data length variable * @retval pointer to descriptor buffer */ uint8_t * USBD_FS_ManufacturerStrDescriptor( USBD_SpeedTypeDef speed , uint16_t *length) { USBD_GetString ((uint8_t *) USBD_MANUFACTURER_STRING, USBD_StrDesc, length); return USBD_StrDesc; } /** * @brief USBD_FS_SerialStrDescriptor * return the serial number string descriptor * @param speed : current device speed * @param length : pointer to data length variable * @retval pointer to descriptor buffer */ uint8_t * USBD_FS_SerialStrDescriptor( USBD_SpeedTypeDef speed , uint16_t *length) { char buff[26]; fixup_sprintf(buff, "%08"PRIX32"-%08"PRIX32"-%08"PRIX32, LL_GetUID_Word0(), LL_GetUID_Word1(), LL_GetUID_Word2() ); USBD_GetString ((uint8_t *) &buff[0], USBD_StrDesc, length); return USBD_StrDesc; } // ///** //* @brief USBD_FS_ConfigStrDescriptor //* return the configuration string descriptor //* @param speed : current device speed //* @param length : pointer to data length variable //* @retval pointer to descriptor buffer //*/ //uint8_t * USBD_FS_ConfigStrDescriptor( USBD_SpeedTypeDef speed , uint16_t *length) //{ // USBD_GetString (USBD_CONFIGURATION_STRING_FS, USBD_StrDesc, length); // return USBD_StrDesc; //} // ///** //* @brief USBD_HS_InterfaceStrDescriptor //* return the interface string descriptor //* @param speed : current device speed //* @param length : pointer to data length variable //* @retval pointer to descriptor buffer //*/ //uint8_t * USBD_FS_InterfaceStrDescriptor( USBD_SpeedTypeDef speed , uint16_t *length) //{ // USBD_GetString (USBD_INTERFACE_STRING_FS, USBD_StrDesc, length); // return USBD_StrDesc; //} /** * @} */ /** * @} */ /** * @} */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/