diff --git a/targets/stm32l442/lib/stm32l4xx_hal_pcd.c b/targets/stm32l442/lib/stm32l4xx_hal_pcd.c index d4ee36b..69c3c9c 100644 --- a/targets/stm32l442/lib/stm32l4xx_hal_pcd.c +++ b/targets/stm32l442/lib/stm32l4xx_hal_pcd.c @@ -1489,13 +1489,11 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd) */ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd) { - int skip = 0; if (__HAL_PCD_GET_FLAG(hpcd, USB_ISTR_CTR)) { /* servicing of the endpoint correct transfer interrupt */ /* clear of the CTR flag into the sub */ (void)PCD_EP_ISR_Handler(hpcd); - skip = 1; } if (__HAL_PCD_GET_FLAG(hpcd, USB_ISTR_RESET)) @@ -1597,7 +1595,6 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd) { __HAL_PCD_CLEAR_FLAG(hpcd, USB_ISTR_SOF); - skip = 1; #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) hpcd->SOFCallback(hpcd); #else @@ -1608,7 +1605,6 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd) if (__HAL_PCD_GET_FLAG(hpcd, USB_ISTR_ESOF)) { // probably something to do here - skip = 1; /* clear ESOF flag in ISTR */ __HAL_PCD_CLEAR_FLAG(hpcd, USB_ISTR_ESOF); } diff --git a/targets/stm32l442/lib/usbd/usbd_conf.c b/targets/stm32l442/lib/usbd/usbd_conf.c index 254b056..87dabca 100644 --- a/targets/stm32l442/lib/usbd/usbd_conf.c +++ b/targets/stm32l442/lib/usbd/usbd_conf.c @@ -53,21 +53,9 @@ void SystemClock_Config(void); -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ + PCD_HandleTypeDef hpcd; -__IO uint32_t remotewakeupon=0; -/* Private function prototypes -----------------------------------------------*/ -static void SystemClockConfig_STOP(void); - -/* Private functions ---------------------------------------------------------*/ - -/******************************************************************************* - PCD BSP Routines -*******************************************************************************/ /** * @brief Initializes the PCD MSP. @@ -76,37 +64,23 @@ static void SystemClockConfig_STOP(void); */ void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd) { - /*GPIO_InitTypeDef GPIO_InitStruct;*/ - /*[> Enable the GPIOA clock <]*/ - /*__HAL_RCC_GPIOA_CLK_ENABLE();*/ - - /* Configure USB DM and DP pins.*/ - /*This is optional, and maintained only for user guidance. */ - /*GPIO_InitStruct.Pin = (GPIO_PIN_11 | GPIO_PIN_12);*/ - /*GPIO_InitStruct.Mode = GPIO_MODE_INPUT;*/ - /*GPIO_InitStruct.Pull = GPIO_NOPULL;*/ - /*GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;*/ - /*HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);*/ - - /*[> Enable USB FS Clock <]*/ - /*__HAL_RCC_USB_CLK_ENABLE();*/ /*LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);*/ - SET_BIT(RCC->APB1ENR1, RCC_APB1ENR1_USBFSEN); - - if(hpcd->Init.low_power_enable == 1) - { - /* Enable EXTI Line 17 for USB wakeup */ - __HAL_USB_WAKEUP_EXTI_ENABLE_IT(); - } - - /*[> Set USB FS Interrupt priority <]*/ - /*HAL_NVIC_SetPriority(USB_IRQn, 0x0F, 0);*/ - NVIC_SetPriority(USB_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 0x0f, 0)); - - /*[> Enable USB FS Interrupt <]*/ - NVIC_EnableIRQ(USB_IRQn); + // SET_BIT(RCC->APB1ENR1, RCC_APB1ENR1_USBFSEN); + // + // if(hpcd->Init.low_power_enable == 1) + // { + // /* Enable EXTI Line 17 for USB wakeup */ + // __HAL_USB_WAKEUP_EXTI_ENABLE_IT(); + // } + // + // /*[> Set USB FS Interrupt priority <]*/ + // /*HAL_NVIC_SetPriority(USB_IRQn, 0x0F, 0);*/ + // NVIC_SetPriority(USB_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 0x0f, 0)); + // + // /*[> Enable USB FS Interrupt <]*/ + // NVIC_EnableIRQ(USB_IRQn); } /** @@ -141,20 +115,16 @@ void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd) * @param epnum: Endpoint Number * @retval None */ +// From host --> device void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) { USBD_LL_DataOutStage((USBD_HandleTypeDef*)hpcd->pData, epnum, hpcd->OUT_ep[epnum].xfer_buff); switch(epnum) { case HID_ENDPOINT: - printf("HID\r\n"); usb_hid_recieve_callback(epnum); break; } - if (epnum) - { - printf("HID\r\n"); - } } /** @@ -163,11 +133,10 @@ void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) * @param epnum: Endpoint Number * @retval None */ + // From device --> host void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) { USBD_LL_DataInStage((USBD_HandleTypeDef*)hpcd->pData, epnum, hpcd->IN_ep[epnum].xfer_buff); - - } /** @@ -200,7 +169,6 @@ void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd) void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd) { /* Inform USB library that core enters in suspend Mode */ - printf("suspend\r\n"); } /** @@ -210,15 +178,7 @@ void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd) */ void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd) { - if ((hpcd->Init.low_power_enable)&&(remotewakeupon == 0)) - { - SystemClockConfig_STOP(); - - /* Reset SLEEPDEEP bit of Cortex System Control Register */ - SCB->SCR &= (uint32_t)~((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk)); - } - USBD_LL_Resume((USBD_HandleTypeDef*)hpcd->pData); - remotewakeupon=0; + // Go to sleep ? } /** @@ -484,75 +444,6 @@ void USBD_LL_Delay(uint32_t Delay) HAL_Delay(Delay); } -/** - * @brief static single allocation. - * @param size: size of allocated memory - * @retval None - */ -void *USBD_static_malloc(uint32_t size) -{ - static uint32_t mem[MAX_STATIC_ALLOC_SIZE]; - return mem; -} -/** - * @brief Dummy memory free - * @param *p pointer to allocated memory address - * @retval None - */ -void USBD_static_free(void *p) -{ - -} - -/** - * @brief Configures system clock after wakeup from STOP mode. - * @param None - * @retval None - */ -static void SystemClockConfig_STOP(void) -{ - SystemClock_Config(); -} - -/** - * @brief GPIO EXTI Callback function - * Handle remote-wakeup through Tamper button - * @param GPIO_Pin - * @retval None - */ -void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) -{ - if (GPIO_Pin == LL_GPIO_PIN_0) - { - if ((((USBD_HandleTypeDef *)hpcd.pData)->dev_remote_wakeup == 1)&& - (((USBD_HandleTypeDef *)hpcd.pData)->dev_state == USBD_STATE_SUSPENDED)) - { - if ((&hpcd)->Init.low_power_enable) - { - /* Reset SLEEPDEEP bit of Cortex System Control Register */ - SCB->SCR &= (uint32_t)~((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk)); - - SystemClockConfig_STOP(); - } - - /* Activate Remote wakeup */ - HAL_PCD_ActivateRemoteWakeup((&hpcd)); - - /* remote wakeup delay */ - HAL_Delay(10); - - /* Disable Remote wakeup */ - HAL_PCD_DeActivateRemoteWakeup((&hpcd)); - - /* change state to configured */ - ((USBD_HandleTypeDef *)hpcd.pData)->dev_state = USBD_STATE_CONFIGURED; - - /* change remote_wakeup feature to 0*/ - ((USBD_HandleTypeDef *)hpcd.pData)->dev_remote_wakeup=0; - remotewakeupon = 1; - } - } -} /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/stm32l442/lib/usbd/usbd_conf.h b/targets/stm32l442/lib/usbd/usbd_conf.h index 4ac5067..4434fc9 100644 --- a/targets/stm32l442/lib/usbd/usbd_conf.h +++ b/targets/stm32l442/lib/usbd/usbd_conf.h @@ -42,67 +42,18 @@ * ****************************************************************************** */ - -/* Define to prevent recursive inclusion -------------------------------------*/ #ifndef __USBD_CONF_H #define __USBD_CONF_H -/* Includes ------------------------------------------------------------------*/ #include "stm32l4xx_hal.h" #include #include #include - #define USBD_MAX_NUM_INTERFACES 1 #define USBD_MAX_NUM_CONFIGURATION 1 -#define USBD_MAX_STR_DESC_SIZ 0x100 -#define USBD_SUPPORT_USER_STRING 0 #define USBD_SELF_POWERED 0 #define USBD_DEBUG_LEVEL 0 - - -// TODO why do you do this ST... -void *USBD_static_malloc(uint32_t size); -void USBD_static_free(void *p); - -#define MAX_STATIC_ALLOC_SIZE 4 /*HID Class Driver Structure size*/ - -#define USBD_malloc (uint32_t *)USBD_static_malloc -#define USBD_free USBD_static_free -#define USBD_memset /* Not used */ -#define USBD_memcpy /* Not used */ - - -/* DEBUG macros */ -#if (USBD_DEBUG_LEVEL > 0) -#define USBD_UsrLog(...) printf(__VA_ARGS__);\ - printf("\n"); -#else -#define USBD_UsrLog(...) #endif - -#if (USBD_DEBUG_LEVEL > 1) - -#define USBD_ErrLog(...) printf("ERROR: ") ;\ - printf(__VA_ARGS__);\ - printf("\n"); -#else -#define USBD_ErrLog(...) -#endif - -#if (USBD_DEBUG_LEVEL > 2) -#define USBD_DbgLog(...) printf("DEBUG : ") ;\ - printf(__VA_ARGS__);\ - printf("\n"); -#else -#define USBD_DbgLog(...) -#endif - -/* Exported functions ------------------------------------------------------- */ - -#endif /* __USBD_CONF_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/stm32l442/lib/usbd/usbd_def.h b/targets/stm32l442/lib/usbd/usbd_def.h index ab37c1d..263834c 100644 --- a/targets/stm32l442/lib/usbd/usbd_def.h +++ b/targets/stm32l442/lib/usbd/usbd_def.h @@ -173,14 +173,6 @@ #define USBD_EP_TYPE_INTR 3U -/** - * @} - */ - - -/** @defgroup USBD_DEF_Exported_TypesDefinitions - * @{ - */ typedef struct usb_setup_req { @@ -329,37 +321,10 @@ extern USBD_HandleTypeDef Solo_USBD_Device; // top level USB obj #endif /* __GNUC__ */ -/** - * @} - */ -/** @defgroup USBD_DEF_Exported_Variables - * @{ - */ - -/** - * @} - */ - -/** @defgroup USBD_DEF_Exported_FunctionsPrototype - * @{ - */ - -/** - * @} - */ #ifdef __cplusplus } #endif #endif /* __USBD_DEF_H */ - -/** - * @} - */ - -/** -* @} -*/ -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/stm32l442/lib/usbd/usbd_desc.c b/targets/stm32l442/lib/usbd/usbd_desc.c index e1b9d06..bf01af5 100644 --- a/targets/stm32l442/lib/usbd/usbd_desc.c +++ b/targets/stm32l442/lib/usbd/usbd_desc.c @@ -6,37 +6,37 @@ ****************************************************************************** * @attention * - *

© Copyright (c) 2017 STMicroelectronics International N.V. + *

© Copyright (c) 2017 STMicroelectronics International N.V. * All rights reserved.

* - * Redistribution and use in source and binary forms, with or without + * 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, + * 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 + * 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 + * 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. + * 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 + * 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 + * 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 + * 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. * @@ -48,38 +48,31 @@ #include "usbd_desc.h" #include "usbd_conf.h" -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -#define USBD_VID 0x0483 -#define USBD_PID 0x5710 -#define USBD_LANGID_STRING 0x409 -#define USBD_MANUFACTURER_STRING "STMicroelectronics" -#define USBD_PRODUCT_FS_STRING "HID Joystick in FS Mode" -#define USBD_CONFIGURATION_FS_STRING "HID Config" -#define USBD_INTERFACE_FS_STRING "HID Interface" -/* Private macro -------------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ +#define USBD_VID 0x0483 +#define USBD_PID 0x5710 +#define USBD_LANGID_STRING 0x409 +#define USBD_MANUFACTURER_STRING "Solo Keys" +#define USBD_PRODUCT_FS_STRING "Solo" +#define USBD_SERIAL_NUM "solocafebabe" + + uint8_t *USBD_HID_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); uint8_t *USBD_HID_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); uint8_t *USBD_HID_ManufacturerStrDescriptor (USBD_SpeedTypeDef speed, uint16_t *length); uint8_t *USBD_HID_ProductStrDescriptor (USBD_SpeedTypeDef speed, uint16_t *length); uint8_t *USBD_HID_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); -uint8_t *USBD_HID_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); -uint8_t *USBD_HID_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); -#ifdef USB_SUPPORT_USER_STRING_DESC -uint8_t *USBD_HID_USRStringDesc (USBD_SpeedTypeDef speed, uint8_t idx, uint16_t *length); -#endif /* USB_SUPPORT_USER_STRING_DESC */ -/* Private variables ---------------------------------------------------------*/ -USBD_DescriptorsTypeDef HID_Desc = { +#ifdef USB_SUPPORT_USER_STRING_DESC +uint8_t *USBD_HID_USRStringDesc (USBD_SpeedTypeDef speed, uint8_t idx, uint16_t *length); +#endif + +USBD_DescriptorsTypeDef Solo_Desc = { USBD_HID_DeviceDescriptor, - USBD_HID_LangIDStrDescriptor, + USBD_HID_LangIDStrDescriptor, USBD_HID_ManufacturerStrDescriptor, USBD_HID_ProductStrDescriptor, USBD_HID_SerialStrDescriptor, - USBD_HID_ConfigStrDescriptor, - USBD_HID_InterfaceStrDescriptor, }; /* USB Standard Device Descriptor */ @@ -105,27 +98,18 @@ const uint8_t USBD_DeviceDesc[USB_LEN_DEV_DESC]= { }; /* USB_DeviceDescriptor */ /* USB Standard Device Descriptor */ -const uint8_t USBD_LangIDDesc[USB_LEN_LANGID_STR_DESC]= +const uint8_t USBD_LangIDDesc[USB_LEN_LANGID_STR_DESC]= { - USB_LEN_LANGID_STR_DESC, - USB_DESC_TYPE_STRING, + USB_LEN_LANGID_STR_DESC, + USB_DESC_TYPE_STRING, LOBYTE(USBD_LANGID_STRING), - HIBYTE(USBD_LANGID_STRING), + HIBYTE(USBD_LANGID_STRING), }; -uint8_t USBD_StringSerial[USB_SIZ_STRING_SERIAL] = -{ - USB_SIZ_STRING_SERIAL, - USB_DESC_TYPE_STRING, -}; +uint8_t USBD_StrDesc[32]; -uint8_t USBD_StrDesc[USBD_MAX_STR_DESC_SIZ]; - -/* Private functions ---------------------------------------------------------*/ -static void IntToUnicode (uint32_t value , uint8_t *pbuf , uint8_t len); -static void Get_SerialNum(void); /** - * @brief Returns the device descriptor. + * @brief Returns the device descriptor. * @param speed: Current device speed * @param length: Pointer to data length variable * @retval Pointer to descriptor buffer @@ -137,31 +121,31 @@ uint8_t *USBD_HID_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) } /** - * @brief Returns the LangID string descriptor. + * @brief Returns the LangID string descriptor. * @param speed: Current device speed * @param length: Pointer to data length variable * @retval Pointer to descriptor buffer */ uint8_t *USBD_HID_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) { - *length = sizeof(USBD_LangIDDesc); + *length = sizeof(USBD_LangIDDesc); return (uint8_t*)USBD_LangIDDesc; } /** - * @brief Returns the product string descriptor. + * @brief Returns the product string descriptor. * @param speed: Current device speed * @param length: Pointer to data length variable * @retval Pointer to descriptor buffer */ uint8_t *USBD_HID_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) { - USBD_GetString((uint8_t *)USBD_PRODUCT_FS_STRING, USBD_StrDesc, length); + USBD_GetString((uint8_t *)USBD_PRODUCT_FS_STRING, USBD_StrDesc, length); return USBD_StrDesc; } /** - * @brief Returns the manufacturer string descriptor. + * @brief Returns the manufacturer string descriptor. * @param speed: Current device speed * @param length: Pointer to data length variable * @retval Pointer to descriptor buffer @@ -173,93 +157,13 @@ uint8_t *USBD_HID_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *l } /** - * @brief Returns the serial number string descriptor. + * @brief Returns 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_HID_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) { - *length = USB_SIZ_STRING_SERIAL; - - /* Update the serial number string descriptor with the data from the unique ID*/ - Get_SerialNum(); - - return USBD_StringSerial; + USBD_GetString((uint8_t *)USBD_SERIAL_NUM, USBD_StrDesc, length); + return USBD_StrDesc; } - -/** - * @brief Returns the configuration string descriptor. - * @param speed: Current device speed - * @param length: Pointer to data length variable - * @retval Pointer to descriptor buffer - */ -uint8_t *USBD_HID_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) -{ - USBD_GetString((uint8_t *)USBD_CONFIGURATION_FS_STRING, USBD_StrDesc, length); - return USBD_StrDesc; -} - -/** - * @brief Returns the interface string descriptor. - * @param speed: Current device speed - * @param length: Pointer to data length variable - * @retval Pointer to descriptor buffer - */ -uint8_t *USBD_HID_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) -{ - USBD_GetString((uint8_t *)USBD_INTERFACE_FS_STRING, USBD_StrDesc, length); - return USBD_StrDesc; -} - -/** - * @brief Create the serial number string descriptor - * @param None - * @retval None - */ -static void Get_SerialNum(void) -{ - uint32_t deviceserial0, deviceserial1, deviceserial2; - - deviceserial0 = *(uint32_t*)DEVICE_ID1; - deviceserial1 = *(uint32_t*)DEVICE_ID2; - deviceserial2 = *(uint32_t*)DEVICE_ID3; - - deviceserial0 += deviceserial2; - - if (deviceserial0 != 0) - { - IntToUnicode (deviceserial0, &USBD_StringSerial[2] ,8); - IntToUnicode (deviceserial1, &USBD_StringSerial[18] ,4); - } -} - -/** - * @brief Convert Hex 32Bits value into char - * @param value: value to convert - * @param pbuf: pointer to the buffer - * @param len: buffer length - * @retval None - */ -static void IntToUnicode (uint32_t value , uint8_t *pbuf , uint8_t len) -{ - uint8_t idx = 0; - - for( idx = 0 ; idx < len ; idx ++) - { - if( ((value >> 28)) < 0xA ) - { - pbuf[ 2* idx] = (value >> 28) + '0'; - } - else - { - pbuf[2* idx] = (value >> 28) + 'A' - 10; - } - - value = value << 4; - - pbuf[ 2* idx + 1] = 0; - } -} - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/stm32l442/lib/usbd/usbd_desc.h b/targets/stm32l442/lib/usbd/usbd_desc.h index 7e6b28b..32548fc 100644 --- a/targets/stm32l442/lib/usbd/usbd_desc.h +++ b/targets/stm32l442/lib/usbd/usbd_desc.h @@ -6,37 +6,37 @@ ****************************************************************************** * @attention * - *

© Copyright (c) 2017 STMicroelectronics International N.V. + *

© Copyright (c) 2017 STMicroelectronics International N.V. * All rights reserved.

* - * Redistribution and use in source and binary forms, with or without + * 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, + * 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 + * 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 + * 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. + * 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 + * 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 + * 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 + * 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. * @@ -50,18 +50,11 @@ /* Includes ------------------------------------------------------------------*/ #include "usbd_def.h" -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ -#define DEVICE_ID1 (UID_BASE) -#define DEVICE_ID2 (UID_BASE+0x4) -#define DEVICE_ID3 (UID_BASE+0x8) - #define USB_SIZ_BOS_DESC 0x0C #define USB_SIZ_STRING_SERIAL 0x1A -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions ------------------------------------------------------- */ -extern USBD_DescriptorsTypeDef HID_Desc; + +extern USBD_DescriptorsTypeDef Solo_Desc; #endif /* __USBD_DESC_H */ - + /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/stm32l442/lib/usbd/usbd_ioreq.c b/targets/stm32l442/lib/usbd/usbd_ioreq.c index 920f98c..d38683a 100644 --- a/targets/stm32l442/lib/usbd/usbd_ioreq.c +++ b/targets/stm32l442/lib/usbd/usbd_ioreq.c @@ -46,61 +46,6 @@ /* Includes ------------------------------------------------------------------*/ #include "usbd_ioreq.h" -/** @addtogroup STM32_USB_DEVICE_LIBRARY - * @{ - */ - - -/** @defgroup USBD_IOREQ - * @brief control I/O requests module - * @{ - */ - -/** @defgroup USBD_IOREQ_Private_TypesDefinitions - * @{ - */ -/** - * @} - */ - - -/** @defgroup USBD_IOREQ_Private_Defines - * @{ - */ - -/** - * @} - */ - - -/** @defgroup USBD_IOREQ_Private_Macros - * @{ - */ -/** - * @} - */ - - -/** @defgroup USBD_IOREQ_Private_Variables - * @{ - */ - -/** - * @} - */ - - -/** @defgroup USBD_IOREQ_Private_FunctionPrototypes - * @{ - */ -/** - * @} - */ - - -/** @defgroup USBD_IOREQ_Private_Functions - * @{ - */ /** * @brief USBD_CtlSendData @@ -212,31 +157,3 @@ USBD_StatusTypeDef USBD_CtlReceiveStatus (USBD_HandleTypeDef *pdev) return USBD_OK; } - -/** -* @brief USBD_GetRxCount -* returns the received data length -* @param pdev: device instance -* @param ep_addr: endpoint address -* @retval Rx Data blength -*/ -uint32_t USBD_GetRxCount (USBD_HandleTypeDef *pdev, uint8_t ep_addr) -{ - return USBD_LL_GetRxDataSize(pdev, ep_addr); -} - -/** - * @} - */ - - -/** - * @} - */ - - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/stm32l442/lib/usbd_hid.c b/targets/stm32l442/lib/usbd_hid.c index 74c4f64..c28d013 100644 --- a/targets/stm32l442/lib/usbd_hid.c +++ b/targets/stm32l442/lib/usbd_hid.c @@ -91,10 +91,6 @@ static uint8_t USBD_HID_Setup (USBD_HandleTypeDef *pdev, static uint8_t *USBD_HID_GetFSCfgDesc (uint16_t *length); -static uint8_t *USBD_HID_GetHSCfgDesc (uint16_t *length); - -static uint8_t *USBD_HID_GetOtherSpeedCfgDesc (uint16_t *length); - static uint8_t *USBD_HID_GetDeviceQualifierDesc (uint16_t *length); static uint8_t USBD_HID_DataIn (USBD_HandleTypeDef *pdev, uint8_t epnum); @@ -112,9 +108,9 @@ USBD_ClassTypeDef USBD_HID = NULL, /*SOF */ NULL, NULL, - USBD_HID_GetHSCfgDesc, USBD_HID_GetFSCfgDesc, - USBD_HID_GetOtherSpeedCfgDesc, + USBD_HID_GetFSCfgDesc, + USBD_HID_GetFSCfgDesc, USBD_HID_GetDeviceQualifierDesc, }; @@ -156,7 +152,7 @@ __ALIGN_BEGIN static uint8_t USBD_HID_OtherSpeedCfgDesc[] __ALIGN_END = 0x00, /*bCountryCode: Hardware target country*/ 0x01, /*bNumDescriptors: Number of HID class descriptors to follow*/ 0x22, /*bDescriptorType*/ - HID_MOUSE_REPORT_DESC_SIZE,/*wItemLength: Total length of Report descriptor*/ + HID_FIDO_REPORT_DESC_SIZE,/*wItemLength: Total length of Report descriptor*/ 0x00, /******************** Descriptor of Mouse endpoint ********************/ 0x07, /*bLength: Endpoint Descriptor size*/ @@ -165,7 +161,7 @@ __ALIGN_BEGIN static uint8_t USBD_HID_OtherSpeedCfgDesc[] __ALIGN_END = 0x03, /*bmAttributes: Interrupt endpoint*/ HID_EPIN_SIZE, /*wMaxPacketSize: 4 Byte max */ 0x00, - HID_FS_BINTERVAL, /*bInterval: Polling Interval */ + HID_BINTERVAL, /*bInterval: Polling Interval */ 0x07, /*bLength: Endpoint Descriptor size*/ @@ -174,7 +170,7 @@ __ALIGN_BEGIN static uint8_t USBD_HID_OtherSpeedCfgDesc[] __ALIGN_END = 0x03, /*bmAttributes: Interrupt endpoint*/ HID_EPOUT_SIZE, /*wMaxPacketSize: 4 Byte max */ 0x00, - HID_FS_BINTERVAL, /*bInterval: Polling Interval */ + HID_BINTERVAL, /*bInterval: Polling Interval */ }; @@ -189,7 +185,7 @@ __ALIGN_BEGIN static uint8_t USBD_HID_Desc[USB_HID_DESC_SIZ] __ALIGN_END = 0x00, /*bCountryCode: Hardware target country*/ 0x01, /*bNumDescriptors: Number of HID class descriptors to follow*/ 0x22, /*bDescriptorType*/ - HID_MOUSE_REPORT_DESC_SIZE,/*wItemLength: Total length of Report descriptor*/ + HID_FIDO_REPORT_DESC_SIZE,/*wItemLength: Total length of Report descriptor*/ 0x00, }; @@ -207,7 +203,7 @@ __ALIGN_BEGIN static uint8_t USBD_HID_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_ 0x01, 0x00, }; -__ALIGN_BEGIN static uint8_t HID_MOUSE_ReportDesc[HID_MOUSE_REPORT_DESC_SIZE] __ALIGN_END = +__ALIGN_BEGIN static uint8_t HID_MOUSE_ReportDesc[HID_FIDO_REPORT_DESC_SIZE] __ALIGN_END = { 0x06, 0xd0, 0xf1,// USAGE_PAGE (FIDO Alliance) @@ -256,10 +252,11 @@ static uint8_t USBD_HID_Init (USBD_HandleTypeDef *pdev, uint8_t cfgidx) /* Open EP IN */ USBD_LL_OpenEP(pdev, HID_EPIN_ADDR, USBD_EP_TYPE_INTR, HID_EPIN_SIZE); USBD_LL_OpenEP(pdev, HID_EPOUT_ADDR, USBD_EP_TYPE_INTR, HID_EPOUT_SIZE); + static uint8_t mem[4]; pdev->ep_in[HID_EPIN_ADDR & 0xFU].is_used = 1U; pdev->ep_out[HID_EPOUT_ADDR & 0xFU].is_used = 1U; - pdev->pClassData = USBD_malloc(sizeof (USBD_HID_HandleTypeDef)); + pdev->pClassData = mem; if (pdev->pClassData == NULL) { @@ -293,13 +290,6 @@ static uint8_t USBD_HID_DeInit (USBD_HandleTypeDef *pdev, pdev->ep_in[HID_EPIN_ADDR & 0xFU].is_used = 0U; pdev->ep_out[HID_EPOUT_ADDR & 0xFU].is_used = 0U; - /* FRee allocated memory */ - if(pdev->pClassData != NULL) - { - USBD_free(pdev->pClassData); - pdev->pClassData = NULL; - } - return USBD_OK; } @@ -364,8 +354,7 @@ static uint8_t USBD_HID_Setup (USBD_HandleTypeDef *pdev, case USB_REQ_GET_DESCRIPTOR: if(req->wValue >> 8 == HID_REPORT_DESC) { - /*len = MIN(HID_MOUSE_REPORT_DESC_SIZE , req->wLength);*/ - len = HID_MOUSE_REPORT_DESC_SIZE; + len = MIN(HID_FIDO_REPORT_DESC_SIZE , req->wLength); pbuf = HID_MOUSE_ReportDesc; } else if(req->wValue >> 8 == HID_DESCRIPTOR_TYPE) @@ -465,13 +454,13 @@ uint32_t USBD_HID_GetPollingInterval (USBD_HandleTypeDef *pdev) /* Sets the data transfer polling interval for high speed transfers. Values between 1..16 are allowed. Values correspond to interval of 2 ^ (bInterval-1). This option (8 ms, corresponds to HID_HS_BINTERVAL */ - polling_interval = (((1U <<(HID_HS_BINTERVAL - 1U))) / 8U); + polling_interval = (((1U <<(HID_BINTERVAL - 1U))) / 8U); } else /* LOW and FULL-speed endpoints */ { /* Sets the data transfer polling interval for low and full speed transfers */ - polling_interval = HID_FS_BINTERVAL; + polling_interval = HID_BINTERVAL; } return ((uint32_t)(polling_interval)); @@ -490,32 +479,6 @@ static uint8_t *USBD_HID_GetFSCfgDesc (uint16_t *length) return USBD_HID_CfgFSDesc; } -/** - * @brief USBD_HID_GetCfgHSDesc - * return HS configuration descriptor - * @param speed : current device speed - * @param length : pointer data length - * @retval pointer to descriptor buffer - */ -static uint8_t *USBD_HID_GetHSCfgDesc (uint16_t *length) -{ - *length = sizeof (USBD_HID_CfgHSDesc); - return USBD_HID_CfgHSDesc; -} - -/** - * @brief USBD_HID_GetOtherSpeedCfgDesc - * return other speed configuration descriptor - * @param speed : current device speed - * @param length : pointer data length - * @retval pointer to descriptor buffer - */ -static uint8_t *USBD_HID_GetOtherSpeedCfgDesc (uint16_t *length) -{ - *length = sizeof (USBD_HID_OtherSpeedCfgDesc); - return USBD_HID_OtherSpeedCfgDesc; -} - /** * @brief USBD_HID_DataIn * handle data IN Stage @@ -527,7 +490,7 @@ static uint8_t USBD_HID_DataIn (USBD_HandleTypeDef *pdev, uint8_t epnum) { /* Ensure that the FIFO is empty before a new transfer, this condition could - be caused by a new transfer before the end of the previous transfer */ + be caused by a new transfer before the end of the previous transfer */ ((USBD_HID_HandleTypeDef *)pdev->pClassData)->state = HID_IDLE; return USBD_OK; } @@ -544,19 +507,3 @@ static uint8_t *USBD_HID_GetDeviceQualifierDesc (uint16_t *length) *length = sizeof (USBD_HID_DeviceQualifierDesc); return USBD_HID_DeviceQualifierDesc; } - -/** - * @} - */ - - -/** - * @} - */ - - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/stm32l442/lib/usbd_hid.h b/targets/stm32l442/lib/usbd_hid.h index f9531c5..4d61cb6 100644 --- a/targets/stm32l442/lib/usbd_hid.h +++ b/targets/stm32l442/lib/usbd_hid.h @@ -60,28 +60,22 @@ #define HID_EPOUT_ADDR 0x01U #define HID_EPOUT_SIZE HID_PACKET_SIZE -#define USB_HID_DESC_SIZ 9U -#define HID_MOUSE_REPORT_DESC_SIZE 34U +#define USB_HID_DESC_SIZ 9U +#define HID_FIDO_REPORT_DESC_SIZE 34U -#define HID_DESCRIPTOR_TYPE 0x21U -#define HID_REPORT_DESC 0x22U +#define HID_DESCRIPTOR_TYPE 0x21U +#define HID_REPORT_DESC 0x22U -#ifndef HID_HS_BINTERVAL - #define HID_HS_BINTERVAL 0x07U -#endif +#define HID_BINTERVAL 10 -#ifndef HID_FS_BINTERVAL - #define HID_FS_BINTERVAL 0x0AU -#endif +#define HID_REQ_SET_PROTOCOL 0x0BU +#define HID_REQ_GET_PROTOCOL 0x03U -#define HID_REQ_SET_PROTOCOL 0x0BU -#define HID_REQ_GET_PROTOCOL 0x03U +#define HID_REQ_SET_IDLE 0x0AU +#define HID_REQ_GET_IDLE 0x02U -#define HID_REQ_SET_IDLE 0x0AU -#define HID_REQ_GET_IDLE 0x02U - -#define HID_REQ_SET_REPORT 0x09U -#define HID_REQ_GET_REPORT 0x01U +#define HID_REQ_SET_REPORT 0x09U +#define HID_REQ_GET_REPORT 0x01U typedef enum { @@ -90,7 +84,6 @@ typedef enum } HID_StateTypeDef; - typedef struct { uint32_t Protocol; @@ -100,15 +93,8 @@ typedef struct } USBD_HID_HandleTypeDef; - extern USBD_ClassTypeDef USBD_HID; -#define USBD_HID_CLASS &USBD_HID -uint8_t USBD_HID_SendReport (USBD_HandleTypeDef *pdev, - uint8_t *report, - uint16_t len); - -uint32_t USBD_HID_GetPollingInterval (USBD_HandleTypeDef *pdev); void usb_hid_recieve_callback(uint8_t ep); diff --git a/targets/stm32l442/src/device.c b/targets/stm32l442/src/device.c index 91f2281..6074230 100644 --- a/targets/stm32l442/src/device.c +++ b/targets/stm32l442/src/device.c @@ -14,7 +14,6 @@ extern PCD_HandleTypeDef hpcd; // Global USB interrupt handler void USB_IRQHandler(void) { - /*printf("USB int !\r\n");*/ HAL_PCD_IRQHandler(&hpcd); } diff --git a/targets/stm32l442/src/init.c b/targets/stm32l442/src/init.c index 1b3b48a..e669e91 100644 --- a/targets/stm32l442/src/init.c +++ b/targets/stm32l442/src/init.c @@ -199,7 +199,7 @@ void SystemClock_Config(void) static void usb_init() { - USBD_Init(&Solo_USBD_Device, &HID_Desc, 0); + USBD_Init(&Solo_USBD_Device, &Solo_Desc, 0); USBD_RegisterClass(&Solo_USBD_Device, &USBD_HID); USBD_Start(&Solo_USBD_Device); }