refactor, mostly removing st bloat

This commit is contained in:
Conor Patrick 2018-10-24 18:42:50 -04:00
parent 4f02db3f1e
commit fb93891685
11 changed files with 106 additions and 557 deletions

View File

@ -1489,13 +1489,11 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
*/ */
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)) if (__HAL_PCD_GET_FLAG(hpcd, USB_ISTR_CTR))
{ {
/* servicing of the endpoint correct transfer interrupt */ /* servicing of the endpoint correct transfer interrupt */
/* clear of the CTR flag into the sub */ /* clear of the CTR flag into the sub */
(void)PCD_EP_ISR_Handler(hpcd); (void)PCD_EP_ISR_Handler(hpcd);
skip = 1;
} }
if (__HAL_PCD_GET_FLAG(hpcd, USB_ISTR_RESET)) 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); __HAL_PCD_CLEAR_FLAG(hpcd, USB_ISTR_SOF);
skip = 1;
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
hpcd->SOFCallback(hpcd); hpcd->SOFCallback(hpcd);
#else #else
@ -1608,7 +1605,6 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
if (__HAL_PCD_GET_FLAG(hpcd, USB_ISTR_ESOF)) if (__HAL_PCD_GET_FLAG(hpcd, USB_ISTR_ESOF))
{ {
// probably something to do here // probably something to do here
skip = 1;
/* clear ESOF flag in ISTR */ /* clear ESOF flag in ISTR */
__HAL_PCD_CLEAR_FLAG(hpcd, USB_ISTR_ESOF); __HAL_PCD_CLEAR_FLAG(hpcd, USB_ISTR_ESOF);
} }

View File

@ -53,21 +53,9 @@
void SystemClock_Config(void); void SystemClock_Config(void);
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
PCD_HandleTypeDef hpcd; 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. * @brief Initializes the PCD MSP.
@ -76,37 +64,23 @@ static void SystemClockConfig_STOP(void);
*/ */
void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd) 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);*/ /*LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);*/
SET_BIT(RCC->APB1ENR1, RCC_APB1ENR1_USBFSEN); // SET_BIT(RCC->APB1ENR1, RCC_APB1ENR1_USBFSEN);
//
if(hpcd->Init.low_power_enable == 1) // if(hpcd->Init.low_power_enable == 1)
{ // {
/* Enable EXTI Line 17 for USB wakeup */ // /* Enable EXTI Line 17 for USB wakeup */
__HAL_USB_WAKEUP_EXTI_ENABLE_IT(); // __HAL_USB_WAKEUP_EXTI_ENABLE_IT();
} // }
//
/*[> Set USB FS Interrupt priority <]*/ // /*[> Set USB FS Interrupt priority <]*/
/*HAL_NVIC_SetPriority(USB_IRQn, 0x0F, 0);*/ // /*HAL_NVIC_SetPriority(USB_IRQn, 0x0F, 0);*/
NVIC_SetPriority(USB_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 0x0f, 0)); // NVIC_SetPriority(USB_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 0x0f, 0));
//
/*[> Enable USB FS Interrupt <]*/ // /*[> Enable USB FS Interrupt <]*/
NVIC_EnableIRQ(USB_IRQn); // NVIC_EnableIRQ(USB_IRQn);
} }
/** /**
@ -141,20 +115,16 @@ void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd)
* @param epnum: Endpoint Number * @param epnum: Endpoint Number
* @retval None * @retval None
*/ */
// From host --> device
void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
{ {
USBD_LL_DataOutStage((USBD_HandleTypeDef*)hpcd->pData, epnum, hpcd->OUT_ep[epnum].xfer_buff); USBD_LL_DataOutStage((USBD_HandleTypeDef*)hpcd->pData, epnum, hpcd->OUT_ep[epnum].xfer_buff);
switch(epnum) switch(epnum)
{ {
case HID_ENDPOINT: case HID_ENDPOINT:
printf("HID\r\n");
usb_hid_recieve_callback(epnum); usb_hid_recieve_callback(epnum);
break; 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 * @param epnum: Endpoint Number
* @retval None * @retval None
*/ */
// From device --> host
void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
{ {
USBD_LL_DataInStage((USBD_HandleTypeDef*)hpcd->pData, epnum, hpcd->IN_ep[epnum].xfer_buff); 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) void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd)
{ {
/* Inform USB library that core enters in suspend Mode */ /* 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) void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd)
{ {
if ((hpcd->Init.low_power_enable)&&(remotewakeupon == 0)) // Go to sleep ?
{
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;
} }
/** /**
@ -484,75 +444,6 @@ void USBD_LL_Delay(uint32_t Delay)
HAL_Delay(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****/ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

View File

@ -42,67 +42,18 @@
* *
****************************************************************************** ******************************************************************************
*/ */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __USBD_CONF_H #ifndef __USBD_CONF_H
#define __USBD_CONF_H #define __USBD_CONF_H
/* Includes ------------------------------------------------------------------*/
#include "stm32l4xx_hal.h" #include "stm32l4xx_hal.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#define USBD_MAX_NUM_INTERFACES 1 #define USBD_MAX_NUM_INTERFACES 1
#define USBD_MAX_NUM_CONFIGURATION 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_SELF_POWERED 0
#define USBD_DEBUG_LEVEL 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 #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****/

View File

@ -173,14 +173,6 @@
#define USBD_EP_TYPE_INTR 3U #define USBD_EP_TYPE_INTR 3U
/**
* @}
*/
/** @defgroup USBD_DEF_Exported_TypesDefinitions
* @{
*/
typedef struct usb_setup_req typedef struct usb_setup_req
{ {
@ -329,37 +321,10 @@ extern USBD_HandleTypeDef Solo_USBD_Device; // top level USB obj
#endif /* __GNUC__ */ #endif /* __GNUC__ */
/**
* @}
*/
/** @defgroup USBD_DEF_Exported_Variables
* @{
*/
/**
* @}
*/
/** @defgroup USBD_DEF_Exported_FunctionsPrototype
* @{
*/
/**
* @}
*/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif /* __USBD_DEF_H */ #endif /* __USBD_DEF_H */
/**
* @}
*/
/**
* @}
*/
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

View File

@ -48,38 +48,31 @@
#include "usbd_desc.h" #include "usbd_desc.h"
#include "usbd_conf.h" #include "usbd_conf.h"
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
#define USBD_VID 0x0483 #define USBD_VID 0x0483
#define USBD_PID 0x5710 #define USBD_PID 0x5710
#define USBD_LANGID_STRING 0x409 #define USBD_LANGID_STRING 0x409
#define USBD_MANUFACTURER_STRING "STMicroelectronics" #define USBD_MANUFACTURER_STRING "Solo Keys"
#define USBD_PRODUCT_FS_STRING "HID Joystick in FS Mode" #define USBD_PRODUCT_FS_STRING "Solo"
#define USBD_CONFIGURATION_FS_STRING "HID Config" #define USBD_SERIAL_NUM "solocafebabe"
#define USBD_INTERFACE_FS_STRING "HID Interface"
/* Private macro -------------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
uint8_t *USBD_HID_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); 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_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
uint8_t *USBD_HID_ManufacturerStrDescriptor (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_ProductStrDescriptor (USBD_SpeedTypeDef speed, uint16_t *length);
uint8_t *USBD_HID_SerialStrDescriptor(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 #ifdef USB_SUPPORT_USER_STRING_DESC
uint8_t *USBD_HID_USRStringDesc (USBD_SpeedTypeDef speed, uint8_t idx, uint16_t *length); uint8_t *USBD_HID_USRStringDesc (USBD_SpeedTypeDef speed, uint8_t idx, uint16_t *length);
#endif /* USB_SUPPORT_USER_STRING_DESC */ #endif
/* Private variables ---------------------------------------------------------*/ USBD_DescriptorsTypeDef Solo_Desc = {
USBD_DescriptorsTypeDef HID_Desc = {
USBD_HID_DeviceDescriptor, USBD_HID_DeviceDescriptor,
USBD_HID_LangIDStrDescriptor, USBD_HID_LangIDStrDescriptor,
USBD_HID_ManufacturerStrDescriptor, USBD_HID_ManufacturerStrDescriptor,
USBD_HID_ProductStrDescriptor, USBD_HID_ProductStrDescriptor,
USBD_HID_SerialStrDescriptor, USBD_HID_SerialStrDescriptor,
USBD_HID_ConfigStrDescriptor,
USBD_HID_InterfaceStrDescriptor,
}; };
/* USB Standard Device Descriptor */ /* USB Standard Device Descriptor */
@ -113,17 +106,8 @@ const uint8_t USBD_LangIDDesc[USB_LEN_LANGID_STR_DESC]=
HIBYTE(USBD_LANGID_STRING), HIBYTE(USBD_LANGID_STRING),
}; };
uint8_t USBD_StringSerial[USB_SIZ_STRING_SERIAL] = uint8_t USBD_StrDesc[32];
{
USB_SIZ_STRING_SERIAL,
USB_DESC_TYPE_STRING,
};
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 speed: Current device speed
@ -180,86 +164,6 @@ uint8_t *USBD_HID_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *l
*/ */
uint8_t *USBD_HID_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) uint8_t *USBD_HID_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
{ {
*length = USB_SIZ_STRING_SERIAL; USBD_GetString((uint8_t *)USBD_SERIAL_NUM, USBD_StrDesc, length);
/* Update the serial number string descriptor with the data from the unique ID*/
Get_SerialNum();
return USBD_StringSerial;
}
/**
* @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; 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****/

View File

@ -50,17 +50,10 @@
/* Includes ------------------------------------------------------------------*/ /* Includes ------------------------------------------------------------------*/
#include "usbd_def.h" #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_BOS_DESC 0x0C
#define USB_SIZ_STRING_SERIAL 0x1A #define USB_SIZ_STRING_SERIAL 0x1A
/* Exported macro ------------------------------------------------------------*/
/* Exported functions ------------------------------------------------------- */ extern USBD_DescriptorsTypeDef Solo_Desc;
extern USBD_DescriptorsTypeDef HID_Desc;
#endif /* __USBD_DESC_H */ #endif /* __USBD_DESC_H */

View File

@ -46,61 +46,6 @@
/* Includes ------------------------------------------------------------------*/ /* Includes ------------------------------------------------------------------*/
#include "usbd_ioreq.h" #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 * @brief USBD_CtlSendData
@ -212,31 +157,3 @@ USBD_StatusTypeDef USBD_CtlReceiveStatus (USBD_HandleTypeDef *pdev)
return USBD_OK; 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****/

View File

@ -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_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_GetDeviceQualifierDesc (uint16_t *length);
static uint8_t USBD_HID_DataIn (USBD_HandleTypeDef *pdev, uint8_t epnum); static uint8_t USBD_HID_DataIn (USBD_HandleTypeDef *pdev, uint8_t epnum);
@ -112,9 +108,9 @@ USBD_ClassTypeDef USBD_HID =
NULL, /*SOF */ NULL, /*SOF */
NULL, NULL,
NULL, NULL,
USBD_HID_GetHSCfgDesc,
USBD_HID_GetFSCfgDesc, USBD_HID_GetFSCfgDesc,
USBD_HID_GetOtherSpeedCfgDesc, USBD_HID_GetFSCfgDesc,
USBD_HID_GetFSCfgDesc,
USBD_HID_GetDeviceQualifierDesc, USBD_HID_GetDeviceQualifierDesc,
}; };
@ -156,7 +152,7 @@ __ALIGN_BEGIN static uint8_t USBD_HID_OtherSpeedCfgDesc[] __ALIGN_END =
0x00, /*bCountryCode: Hardware target country*/ 0x00, /*bCountryCode: Hardware target country*/
0x01, /*bNumDescriptors: Number of HID class descriptors to follow*/ 0x01, /*bNumDescriptors: Number of HID class descriptors to follow*/
0x22, /*bDescriptorType*/ 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, 0x00,
/******************** Descriptor of Mouse endpoint ********************/ /******************** Descriptor of Mouse endpoint ********************/
0x07, /*bLength: Endpoint Descriptor size*/ 0x07, /*bLength: Endpoint Descriptor size*/
@ -165,7 +161,7 @@ __ALIGN_BEGIN static uint8_t USBD_HID_OtherSpeedCfgDesc[] __ALIGN_END =
0x03, /*bmAttributes: Interrupt endpoint*/ 0x03, /*bmAttributes: Interrupt endpoint*/
HID_EPIN_SIZE, /*wMaxPacketSize: 4 Byte max */ HID_EPIN_SIZE, /*wMaxPacketSize: 4 Byte max */
0x00, 0x00,
HID_FS_BINTERVAL, /*bInterval: Polling Interval */ HID_BINTERVAL, /*bInterval: Polling Interval */
0x07, /*bLength: Endpoint Descriptor size*/ 0x07, /*bLength: Endpoint Descriptor size*/
@ -174,7 +170,7 @@ __ALIGN_BEGIN static uint8_t USBD_HID_OtherSpeedCfgDesc[] __ALIGN_END =
0x03, /*bmAttributes: Interrupt endpoint*/ 0x03, /*bmAttributes: Interrupt endpoint*/
HID_EPOUT_SIZE, /*wMaxPacketSize: 4 Byte max */ HID_EPOUT_SIZE, /*wMaxPacketSize: 4 Byte max */
0x00, 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*/ 0x00, /*bCountryCode: Hardware target country*/
0x01, /*bNumDescriptors: Number of HID class descriptors to follow*/ 0x01, /*bNumDescriptors: Number of HID class descriptors to follow*/
0x22, /*bDescriptorType*/ 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, 0x00,
}; };
@ -207,7 +203,7 @@ __ALIGN_BEGIN static uint8_t USBD_HID_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_
0x01, 0x01,
0x00, 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) 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 */ /* Open EP IN */
USBD_LL_OpenEP(pdev, HID_EPIN_ADDR, USBD_EP_TYPE_INTR, HID_EPIN_SIZE); 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); 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_in[HID_EPIN_ADDR & 0xFU].is_used = 1U;
pdev->ep_out[HID_EPOUT_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) 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_in[HID_EPIN_ADDR & 0xFU].is_used = 0U;
pdev->ep_out[HID_EPOUT_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; return USBD_OK;
} }
@ -364,8 +354,7 @@ static uint8_t USBD_HID_Setup (USBD_HandleTypeDef *pdev,
case USB_REQ_GET_DESCRIPTOR: case USB_REQ_GET_DESCRIPTOR:
if(req->wValue >> 8 == HID_REPORT_DESC) if(req->wValue >> 8 == HID_REPORT_DESC)
{ {
/*len = MIN(HID_MOUSE_REPORT_DESC_SIZE , req->wLength);*/ len = MIN(HID_FIDO_REPORT_DESC_SIZE , req->wLength);
len = HID_MOUSE_REPORT_DESC_SIZE;
pbuf = HID_MOUSE_ReportDesc; pbuf = HID_MOUSE_ReportDesc;
} }
else if(req->wValue >> 8 == HID_DESCRIPTOR_TYPE) 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. /* Sets the data transfer polling interval for high speed transfers.
Values between 1..16 are allowed. Values correspond to interval Values between 1..16 are allowed. Values correspond to interval
of 2 ^ (bInterval-1). This option (8 ms, corresponds to HID_HS_BINTERVAL */ 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 */ else /* LOW and FULL-speed endpoints */
{ {
/* Sets the data transfer polling interval for low and full /* Sets the data transfer polling interval for low and full
speed transfers */ speed transfers */
polling_interval = HID_FS_BINTERVAL; polling_interval = HID_BINTERVAL;
} }
return ((uint32_t)(polling_interval)); return ((uint32_t)(polling_interval));
@ -490,32 +479,6 @@ static uint8_t *USBD_HID_GetFSCfgDesc (uint16_t *length)
return USBD_HID_CfgFSDesc; 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 * @brief USBD_HID_DataIn
* handle data IN Stage * handle data IN Stage
@ -544,19 +507,3 @@ static uint8_t *USBD_HID_GetDeviceQualifierDesc (uint16_t *length)
*length = sizeof (USBD_HID_DeviceQualifierDesc); *length = sizeof (USBD_HID_DeviceQualifierDesc);
return USBD_HID_DeviceQualifierDesc; return USBD_HID_DeviceQualifierDesc;
} }
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

View File

@ -61,18 +61,12 @@
#define HID_EPOUT_SIZE HID_PACKET_SIZE #define HID_EPOUT_SIZE HID_PACKET_SIZE
#define USB_HID_DESC_SIZ 9U #define USB_HID_DESC_SIZ 9U
#define HID_MOUSE_REPORT_DESC_SIZE 34U #define HID_FIDO_REPORT_DESC_SIZE 34U
#define HID_DESCRIPTOR_TYPE 0x21U #define HID_DESCRIPTOR_TYPE 0x21U
#define HID_REPORT_DESC 0x22U #define HID_REPORT_DESC 0x22U
#ifndef HID_HS_BINTERVAL #define HID_BINTERVAL 10
#define HID_HS_BINTERVAL 0x07U
#endif
#ifndef HID_FS_BINTERVAL
#define HID_FS_BINTERVAL 0x0AU
#endif
#define HID_REQ_SET_PROTOCOL 0x0BU #define HID_REQ_SET_PROTOCOL 0x0BU
#define HID_REQ_GET_PROTOCOL 0x03U #define HID_REQ_GET_PROTOCOL 0x03U
@ -90,7 +84,6 @@ typedef enum
} }
HID_StateTypeDef; HID_StateTypeDef;
typedef struct typedef struct
{ {
uint32_t Protocol; uint32_t Protocol;
@ -100,15 +93,8 @@ typedef struct
} }
USBD_HID_HandleTypeDef; USBD_HID_HandleTypeDef;
extern USBD_ClassTypeDef USBD_HID; 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); void usb_hid_recieve_callback(uint8_t ep);

View File

@ -14,7 +14,6 @@ extern PCD_HandleTypeDef hpcd;
// Global USB interrupt handler // Global USB interrupt handler
void USB_IRQHandler(void) void USB_IRQHandler(void)
{ {
/*printf("USB int !\r\n");*/
HAL_PCD_IRQHandler(&hpcd); HAL_PCD_IRQHandler(&hpcd);
} }

View File

@ -199,7 +199,7 @@ void SystemClock_Config(void)
static void usb_init() 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_RegisterClass(&Solo_USBD_Device, &USBD_HID);
USBD_Start(&Solo_USBD_Device); USBD_Start(&Solo_USBD_Device);
} }