1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-07-04 22:02:34 +00:00

core/embed: import USB code changes from STM32CubeF4 into trezorhal

This commit is contained in:
Pavol Rusnak 2019-12-23 23:41:42 +01:00
parent 516edbe825
commit e4ba1aeb1b
No known key found for this signature in database
GPG Key ID: 91F3B339B9A02A3D
9 changed files with 390 additions and 451 deletions

View File

@ -1,55 +1,26 @@
// clang-format off // clang-format off
/*
* This file is part of the Micro Python project, http://micropython.org/
*/
/** /**
****************************************************************************** ******************************************************************************
* @file USB_Device/CDC_Standalone/Src/usbd_conf.c * @file usbd_conf_template.c
* @author MCD Application Team * @author MCD Application Team
* @version V1.4.0 * @brief USB Device configuration and interface file
* @date 17-February-2017 * This template should be copied to the user folder, renamed and customized
* @brief This file implements the USB Device library callbacks and MSP * following user needs.
****************************************************************************** ******************************************************************************
* @attention * @attention
* *
* <h2><center>&copy; Copyright (c) 2017 STMicroelectronics International N.V. * <h2><center>&copy; Copyright (c) 2015 STMicroelectronics.
* All rights reserved.</center></h2> * All rights reserved.</center></h2>
* *
* Redistribution and use in source and binary forms, with or without * This software component is licensed by ST under Ultimate Liberty license
* modification, are permitted, provided that the following conditions are met: * SLA0044, the "License"; You may not use this file except in compliance with
* * the License. You may obtain a copy of the License at:
* 1. Redistribution of source code must retain the above copyright notice, * http://www.st.com/SLA0044
* 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 ------------------------------------------------------------------*/ /* Includes ------------------------------------------------------------------*/
#include STM32_HAL_H #include STM32_HAL_H
#include "usbd_core.h" #include "usbd_core.h"
@ -403,7 +374,7 @@ void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd)
* @param pdev: Device handle * @param pdev: Device handle
* @retval USBD Status * @retval USBD Status
*/ */
USBD_StatusTypeDef USBD_LL_Init (USBD_HandleTypeDef *pdev) USBD_StatusTypeDef USBD_LL_Init(USBD_HandleTypeDef *pdev)
{ {
#if defined(USE_USB_FS) #if defined(USE_USB_FS)
if (pdev->id == USB_PHY_FS_ID) if (pdev->id == USB_PHY_FS_ID)
@ -547,8 +518,8 @@ USBD_StatusTypeDef USBD_LL_Stop(USBD_HandleTypeDef *pdev)
* @retval USBD Status * @retval USBD Status
*/ */
USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef *pdev, USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef *pdev,
uint8_t ep_addr, uint8_t ep_addr,
uint8_t ep_type, uint8_t ep_type,
uint16_t ep_mps) uint16_t ep_mps)
{ {
HAL_PCD_EP_Open(pdev->pData, ep_addr, ep_mps, ep_type); HAL_PCD_EP_Open(pdev->pData, ep_addr, ep_mps, ep_type);
@ -607,7 +578,7 @@ USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_add
* @brief Returns Stall condition. * @brief Returns Stall condition.
* @param pdev: Device handle * @param pdev: Device handle
* @param ep_addr: Endpoint Number * @param ep_addr: Endpoint Number
* @retval Stall (1: yes, 0: No) * @retval Stall (1: Yes, 0: No)
*/ */
uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
{ {
@ -624,9 +595,9 @@ uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
} }
/** /**
* @brief Assigns an USB address to the device * @brief Assigns a USB address to the device.
* @param pdev: Device handle * @param pdev: Device handle
* @param dev_addr: USB address * @param ep_addr: Endpoint Number
* @retval USBD Status * @retval USBD Status
*/ */
USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_addr) USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_addr)
@ -636,7 +607,7 @@ USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_a
} }
/** /**
* @brief Transmits data over an endpoint * @brief Transmits data over an endpoint.
* @param pdev: Device handle * @param pdev: Device handle
* @param ep_addr: Endpoint Number * @param ep_addr: Endpoint Number
* @param pbuf: Pointer to data to be sent * @param pbuf: Pointer to data to be sent
@ -644,48 +615,48 @@ USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_a
* @retval USBD Status * @retval USBD Status
*/ */
USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev,
uint8_t ep_addr, uint8_t ep_addr,
uint8_t *pbuf, uint8_t *pbuf,
uint16_t size) uint16_t size)
{ {
HAL_PCD_EP_Transmit(pdev->pData, ep_addr, pbuf, size); HAL_PCD_EP_Transmit(pdev->pData, ep_addr, pbuf, size);
return USBD_OK; return USBD_OK;
} }
/** /**
* @brief Prepares an endpoint for reception * @brief Prepares an endpoint for reception.
* @param pdev: Device handle * @param pdev: Device handle
* @param ep_addr: Endpoint Number * @param ep_addr: Endpoint Number
* @param pbuf:pointer to data to be received * @param pbuf: Pointer to data to be received
* @param size: data size * @param size: Data size
* @retval USBD Status * @retval USBD Status
*/ */
USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev,
uint8_t ep_addr, uint8_t ep_addr,
uint8_t *pbuf, uint8_t *pbuf,
uint16_t size) uint16_t size)
{ {
HAL_PCD_EP_Receive(pdev->pData, ep_addr, pbuf, size); HAL_PCD_EP_Receive(pdev->pData, ep_addr, pbuf, size);
return USBD_OK; return USBD_OK;
} }
/** /**
* @brief Returns the last transfered packet size. * @brief Returns the last transferred packet size.
* @param pdev: Device handle * @param pdev: Device handle
* @param ep_addr: Endpoint Number * @param ep_addr: Endpoint Number
* @retval Recived Data Size * @retval Recived Data Size
*/ */
uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef *pdev, uint8_t ep_addr) uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
{ {
return HAL_PCD_EP_GetRxCount(pdev->pData, ep_addr); return HAL_PCD_EP_GetRxCount(pdev->pData, ep_addr);
} }
/** /**
* @brief Delay routine for the USB Device Library * @brief Delays routine for the USB Device Library.
* @param Delay: Delay in ms * @param Delay: Delay in ms
* @retval None * @retval None
*/ */
void USBD_LL_Delay(uint32_t Delay) void USBD_LL_Delay(uint32_t Delay)
{ {
HAL_Delay(Delay); HAL_Delay(Delay);
} }
@ -785,3 +756,4 @@ void OTG_HS_WKUP_IRQHandler(void) {
#endif #endif
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

View File

@ -1,55 +1,24 @@
// clang-format off // clang-format off
/*
* This file is part of the Micro Python project, http://micropython.org/
*/
/** /**
****************************************************************************** ******************************************************************************
* @file USB_Device/CDC_Standalone/Inc/usbd_conf.h * @file usbd_conf_template.h
* @author MCD Application Team * @author MCD Application Team
* @version V1.4.0 * @brief Header file for the usbd_conf_template.c file
* @date 17-February-2017
* @brief General low level driver configuration
****************************************************************************** ******************************************************************************
* @attention * @attention
* *
* <h2><center>&copy; Copyright (c) 2017 STMicroelectronics International N.V. * <h2><center>&copy; Copyright (c) 2015 STMicroelectronics.
* All rights reserved.</center></h2> * All rights reserved.</center></h2>
* *
* Redistribution and use in source and binary forms, with or without * This software component is licensed by ST under Ultimate Liberty license
* modification, are permitted, provided that the following conditions are met: * SLA0044, the "License"; You may not use this file except in compliance with
* * the License. You may obtain a copy of the License at:
* 1. Redistribution of source code must retain the above copyright notice, * http://www.st.com/SLA0044
* 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.
* *
****************************************************************************** ******************************************************************************
*/ */
/* Define to prevent recursive inclusion -------------------------------------*/ /* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __USBD_CONF_H #ifndef __USBD_CONF_H
#define __USBD_CONF_H #define __USBD_CONF_H
@ -84,28 +53,34 @@ these should not be used because the GC is reset on a soft reset but the usb is
*/ */
/* DEBUG macros */ /* DEBUG macros */
#if (USBD_DEBUG_LEVEL > 0) #if (USBD_DEBUG_LEVEL > 0U)
#define USBD_UsrLog(...) printf(__VA_ARGS__);\ #define USBD_UsrLog(...) do { \
printf("\n"); printf(__VA_ARGS__); \
printf("\n"); \
} while (0)
#else #else
#define USBD_UsrLog(...) #define USBD_UsrLog(...) do {} while (0)
#endif #endif
#if (USBD_DEBUG_LEVEL > 1) #if (USBD_DEBUG_LEVEL > 1U)
#define USBD_ErrLog(...) printf("ERROR: ") ;\ #define USBD_ErrLog(...) do { \
printf(__VA_ARGS__);\ printf("ERROR: ") ; \
printf("\n"); printf(__VA_ARGS__); \
printf("\n"); \
} while (0)
#else #else
#define USBD_ErrLog(...) #define USBD_ErrLog(...) do {} while (0)
#endif #endif
#if (USBD_DEBUG_LEVEL > 2) #if (USBD_DEBUG_LEVEL > 2U)
#define USBD_DbgLog(...) printf("DEBUG : ") ;\ #define USBD_DbgLog(...) do { \
printf(__VA_ARGS__);\ printf("DEBUG : ") ; \
printf("\n"); printf(__VA_ARGS__); \
printf("\n"); \
} while (0)
#else #else
#define USBD_DbgLog(...) #define USBD_DbgLog(...) do {} while (0)
#endif #endif
/* Exported functions ------------------------------------------------------- */ /* Exported functions ------------------------------------------------------- */

View File

@ -4,25 +4,17 @@
****************************************************************************** ******************************************************************************
* @file usbd_core.c * @file usbd_core.c
* @author MCD Application Team * @author MCD Application Team
* @version V2.4.2
* @date 11-December-2015
* @brief This file provides all the USBD core functions. * @brief This file provides all the USBD core functions.
****************************************************************************** ******************************************************************************
* @attention * @attention
* *
* <h2><center>&copy; COPYRIGHT 2015 STMicroelectronics</center></h2> * <h2><center>&copy; Copyright (c) 2015 STMicroelectronics.
* All rights reserved.</center></h2>
* *
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); * This software component is licensed by ST under Ultimate Liberty license
* You may not use this file except in compliance with the License. * SLA0044, the "License"; You may not use this file except in compliance with
* You may obtain a copy of the License at: * the License. You may obtain a copy of the License at:
* * http://www.st.com/SLA0044
* http://www.st.com/software_license_agreement_liberty_v2
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* *
****************************************************************************** ******************************************************************************
*/ */
@ -100,7 +92,9 @@ USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev, USBD_DescriptorsTypeDef *
/* Check whether the USB Host handle is valid */ /* Check whether the USB Host handle is valid */
if(pdev == NULL) if(pdev == NULL)
{ {
#if (USBD_DEBUG_LEVEL > 1U)
USBD_ErrLog("Invalid Device handle"); USBD_ErrLog("Invalid Device handle");
#endif
return USBD_FAIL; return USBD_FAIL;
} }
@ -137,7 +131,7 @@ USBD_StatusTypeDef USBD_DeInit(USBD_HandleTypeDef *pdev)
pdev->dev_state = USBD_STATE_DEFAULT; pdev->dev_state = USBD_STATE_DEFAULT;
/* Free Class Resources */ /* Free Class Resources */
pdev->pClass->DeInit(pdev, pdev->dev_config); pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
/* Stop the low level driver */ /* Stop the low level driver */
USBD_LL_Stop(pdev); USBD_LL_Stop(pdev);
@ -148,7 +142,6 @@ USBD_StatusTypeDef USBD_DeInit(USBD_HandleTypeDef *pdev)
return USBD_OK; return USBD_OK;
} }
/** /**
* @brief USBD_RegisterClass * @brief USBD_RegisterClass
* Link class driver to Device Core. * Link class driver to Device Core.
@ -167,7 +160,9 @@ USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeD
} }
else else
{ {
#if (USBD_DEBUG_LEVEL > 1U)
USBD_ErrLog("Invalid Class handle"); USBD_ErrLog("Invalid Class handle");
#endif
status = USBD_FAIL; status = USBD_FAIL;
} }
@ -198,7 +193,7 @@ USBD_StatusTypeDef USBD_Start (USBD_HandleTypeDef *pdev)
USBD_StatusTypeDef USBD_Stop (USBD_HandleTypeDef *pdev) USBD_StatusTypeDef USBD_Stop (USBD_HandleTypeDef *pdev)
{ {
/* Free Class Resources */ /* Free Class Resources */
pdev->pClass->DeInit(pdev, pdev->dev_config); pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
/* Stop the low level driver */ /* Stop the low level driver */
USBD_LL_Stop(pdev); USBD_LL_Stop(pdev);
@ -214,10 +209,12 @@ USBD_StatusTypeDef USBD_Stop (USBD_HandleTypeDef *pdev)
*/ */
USBD_StatusTypeDef USBD_RunTestMode (USBD_HandleTypeDef *pdev) USBD_StatusTypeDef USBD_RunTestMode (USBD_HandleTypeDef *pdev)
{ {
/* Prevent unused argument compilation warning */
UNUSED(pdev);
return USBD_OK; return USBD_OK;
} }
/** /**
* @brief USBD_SetClassConfig * @brief USBD_SetClassConfig
* Configure device and start the interface * Configure device and start the interface
@ -233,11 +230,12 @@ USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx
if(pdev->pClass != NULL) if(pdev->pClass != NULL)
{ {
/* Set configuration and Start the Class*/ /* Set configuration and Start the Class*/
if(pdev->pClass->Init(pdev, cfgidx) == 0) if(pdev->pClass->Init(pdev, cfgidx) == 0U)
{ {
ret = USBD_OK; ret = USBD_OK;
} }
} }
return ret; return ret;
} }
@ -264,10 +262,10 @@ USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx
*/ */
USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup) USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup)
{ {
USBD_ParseSetupRequest(&pdev->request, psetup); USBD_ParseSetupRequest(&pdev->request, psetup);
pdev->ep0_state = USBD_EP0_SETUP; pdev->ep0_state = USBD_EP0_SETUP;
pdev->ep0_data_len = pdev->request.wLength; pdev->ep0_data_len = pdev->request.wLength;
switch (pdev->request.bmRequest & USB_REQ_TYPE_MASK) switch (pdev->request.bmRequest & USB_REQ_TYPE_MASK)
@ -286,7 +284,7 @@ USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup)
USBD_StdEPReq(pdev, &pdev->request); USBD_StdEPReq(pdev, &pdev->request);
break; break;
default: default:
USBD_LL_StallEP(pdev, pdev->request.bmRequest & 0x80); USBD_LL_StallEP(pdev, (pdev->request.bmRequest & 0x80U));
break; break;
} }
break; break;
@ -311,11 +309,12 @@ USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup)
* @param epnum: endpoint index * @param epnum: endpoint index
* @retval status * @retval status
*/ */
USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev , uint8_t epnum, uint8_t *pdata) USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev,
uint8_t epnum, uint8_t *pdata)
{ {
USBD_EndpointTypeDef *pep; USBD_EndpointTypeDef *pep;
if(epnum == 0) if(epnum == 0U)
{ {
pep = &pdev->ep_out[0]; pep = &pdev->ep_out[0];
@ -327,7 +326,7 @@ USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev , uint8_t epnum
USBD_CtlContinueRx (pdev, USBD_CtlContinueRx (pdev,
pdata, pdata,
MIN(pep->rem_length ,pep->maxpacket)); (uint16_t)MIN(pep->rem_length, pep->maxpacket));
} }
else else
{ {
@ -339,12 +338,29 @@ USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev , uint8_t epnum
USBD_CtlSendStatus(pdev); USBD_CtlSendStatus(pdev);
} }
} }
else
{
if (pdev->ep0_state == USBD_EP0_STATUS_OUT)
{
/*
* STATUS PHASE completed, update ep0_state to idle
*/
pdev->ep0_state = USBD_EP0_IDLE;
USBD_LL_StallEP(pdev, 0U);
}
}
} }
else if((pdev->pClass->DataOut != NULL)&& else if((pdev->pClass->DataOut != NULL) &&
(pdev->dev_state == USBD_STATE_CONFIGURED)) (pdev->dev_state == USBD_STATE_CONFIGURED))
{ {
pdev->pClass->DataOut(pdev, epnum); pdev->pClass->DataOut(pdev, epnum);
} }
else
{
/* should never be in this condition */
return USBD_FAIL;
}
return USBD_OK; return USBD_OK;
} }
@ -355,11 +371,12 @@ USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev , uint8_t epnum
* @param epnum: endpoint index * @param epnum: endpoint index
* @retval status * @retval status
*/ */
USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev ,uint8_t epnum, uint8_t *pdata) USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev, uint8_t epnum,
uint8_t *pdata)
{ {
USBD_EndpointTypeDef *pep; USBD_EndpointTypeDef *pep;
if(epnum == 0) if(epnum == 0U)
{ {
pep = &pdev->ep_in[0]; pep = &pdev->ep_in[0];
@ -367,33 +384,24 @@ USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev ,uint8_t epnum,
{ {
if(pep->rem_length > pep->maxpacket) if(pep->rem_length > pep->maxpacket)
{ {
pep->rem_length -= pep->maxpacket; pep->rem_length -= pep->maxpacket;
USBD_CtlContinueSendData (pdev, USBD_CtlContinueSendData (pdev, pdata, (uint16_t)pep->rem_length);
pdata,
pep->rem_length);
/* Prepare endpoint for premature end of transfer */ /* Prepare endpoint for premature end of transfer */
USBD_LL_PrepareReceive (pdev, USBD_LL_PrepareReceive (pdev, 0U, NULL, 0U);
0,
NULL,
0);
} }
else else
{ /* last packet is MPS multiple, so send ZLP packet */ { /* last packet is MPS multiple, so send ZLP packet */
if((pep->total_length % pep->maxpacket == 0) && if((pep->total_length % pep->maxpacket == 0U) &&
(pep->total_length >= pep->maxpacket) && (pep->total_length >= pep->maxpacket) &&
(pep->total_length < pdev->ep0_data_len )) (pep->total_length < pdev->ep0_data_len))
{ {
USBD_CtlContinueSendData(pdev, NULL, 0U);
pdev->ep0_data_len = 0U;
USBD_CtlContinueSendData(pdev , NULL, 0); /* Prepare endpoint for premature end of transfer */
pdev->ep0_data_len = 0; USBD_LL_PrepareReceive (pdev, 0U, NULL, 0U);
/* Prepare endpoint for premature end of transfer */
USBD_LL_PrepareReceive (pdev,
0,
NULL,
0);
} }
else else
{ {
@ -402,21 +410,37 @@ USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev ,uint8_t epnum,
{ {
pdev->pClass->EP0_TxSent(pdev); pdev->pClass->EP0_TxSent(pdev);
} }
USBD_LL_StallEP(pdev, 0x80U);
USBD_CtlReceiveStatus(pdev); USBD_CtlReceiveStatus(pdev);
} }
} }
} }
if (pdev->dev_test_mode == 1) else
{
if ((pdev->ep0_state == USBD_EP0_STATUS_IN) ||
(pdev->ep0_state == USBD_EP0_IDLE))
{
USBD_LL_StallEP(pdev, 0x80U);
}
}
if (pdev->dev_test_mode == 1U)
{ {
USBD_RunTestMode(pdev); USBD_RunTestMode(pdev);
pdev->dev_test_mode = 0; pdev->dev_test_mode = 0U;
} }
} }
else if((pdev->pClass->DataIn != NULL)&& else if((pdev->pClass->DataIn != NULL) &&
(pdev->dev_state == USBD_STATE_CONFIGURED)) (pdev->dev_state == USBD_STATE_CONFIGURED))
{ {
pdev->pClass->DataIn(pdev, epnum); pdev->pClass->DataIn(pdev, epnum);
} }
else
{
/* should never be in this condition */
return USBD_FAIL;
}
return USBD_OK; return USBD_OK;
} }
@ -430,33 +454,30 @@ USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev ,uint8_t epnum,
USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev) USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev)
{ {
/* Open EP0 OUT */ /* Open EP0 OUT */
USBD_LL_OpenEP(pdev, USBD_LL_OpenEP(pdev, 0x00U, USBD_EP_TYPE_CTRL, USB_MAX_EP0_SIZE);
0x00, pdev->ep_out[0x00U & 0xFU].is_used = 1U;
USBD_EP_TYPE_CTRL,
USB_MAX_EP0_SIZE);
pdev->ep_out[0].maxpacket = USB_MAX_EP0_SIZE; pdev->ep_out[0].maxpacket = USB_MAX_EP0_SIZE;
/* Open EP0 IN */ /* Open EP0 IN */
USBD_LL_OpenEP(pdev, USBD_LL_OpenEP(pdev, 0x80U, USBD_EP_TYPE_CTRL, USB_MAX_EP0_SIZE);
0x80, pdev->ep_in[0x80U & 0xFU].is_used = 1U;
USBD_EP_TYPE_CTRL,
USB_MAX_EP0_SIZE);
pdev->ep_in[0].maxpacket = USB_MAX_EP0_SIZE; pdev->ep_in[0].maxpacket = USB_MAX_EP0_SIZE;
/* Upon Reset call user call back */ /* Upon Reset call user call back */
pdev->dev_state = USBD_STATE_DEFAULT; pdev->dev_state = USBD_STATE_DEFAULT;
pdev->ep0_state = USBD_EP0_IDLE;
pdev->dev_config= 0U;
pdev->dev_remote_wakeup = 0U;
if (pdev->pClassData) if (pdev->pClassData)
pdev->pClass->DeInit(pdev, pdev->dev_config); {
pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
}
return USBD_OK; return USBD_OK;
} }
/** /**
* @brief USBD_LL_Reset * @brief USBD_LL_Reset
* Handle Reset event * Handle Reset event
@ -523,6 +544,10 @@ USBD_StatusTypeDef USBD_LL_SOF(USBD_HandleTypeDef *pdev)
*/ */
USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum) USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum)
{ {
/* Prevent unused arguments compilation warning */
UNUSED(pdev);
UNUSED(epnum);
return USBD_OK; return USBD_OK;
} }
@ -534,6 +559,10 @@ USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev, uint8_t ep
*/ */
USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum) USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum)
{ {
/* Prevent unused arguments compilation warning */
UNUSED(pdev);
UNUSED(epnum);
return USBD_OK; return USBD_OK;
} }
@ -545,6 +574,9 @@ USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev, uint8_t e
*/ */
USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev) USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev)
{ {
/* Prevent unused argument compilation warning */
UNUSED(pdev);
return USBD_OK; return USBD_OK;
} }
@ -558,7 +590,7 @@ USBD_StatusTypeDef USBD_LL_DevDisconnected(USBD_HandleTypeDef *pdev)
{ {
/* Free Class Resources */ /* Free Class Resources */
pdev->dev_state = USBD_STATE_DEFAULT; pdev->dev_state = USBD_STATE_DEFAULT;
pdev->pClass->DeInit(pdev, pdev->dev_config); pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
return USBD_OK; return USBD_OK;
} }

View File

@ -4,25 +4,17 @@
****************************************************************************** ******************************************************************************
* @file usbd_core.h * @file usbd_core.h
* @author MCD Application Team * @author MCD Application Team
* @version V2.4.2
* @date 11-December-2015
* @brief Header file for usbd_core.c file * @brief Header file for usbd_core.c file
****************************************************************************** ******************************************************************************
* @attention * @attention
* *
* <h2><center>&copy; COPYRIGHT 2015 STMicroelectronics</center></h2> * <h2><center>&copy; Copyright (c) 2015 STMicroelectronics.
* All rights reserved.</center></h2>
* *
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); * This software component is licensed by ST under Ultimate Liberty license
* You may not use this file except in compliance with the License. * SLA0044, the "License"; You may not use this file except in compliance with
* You may obtain a copy of the License at: * the License. You may obtain a copy of the License at:
* * http://www.st.com/SLA0044
* http://www.st.com/software_license_agreement_liberty_v2
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* *
****************************************************************************** ******************************************************************************
*/ */
@ -54,7 +46,9 @@
/** @defgroup USBD_CORE_Exported_Defines /** @defgroup USBD_CORE_Exported_Defines
* @{ * @{
*/ */
#ifndef USBD_DEBUG_LEVEL
#define USBD_DEBUG_LEVEL 0U
#endif /* USBD_DEBUG_LEVEL */
/** /**
* @} * @}
*/ */

View File

@ -4,25 +4,17 @@
****************************************************************************** ******************************************************************************
* @file usbd_req.c * @file usbd_req.c
* @author MCD Application Team * @author MCD Application Team
* @version V2.4.2
* @date 11-December-2015
* @brief This file provides the standard USB requests following chapter 9. * @brief This file provides the standard USB requests following chapter 9.
****************************************************************************** ******************************************************************************
* @attention * @attention
* *
* <h2><center>&copy; COPYRIGHT 2015 STMicroelectronics</center></h2> * <h2><center>&copy; Copyright (c) 2015 STMicroelectronics.
* All rights reserved.</center></h2>
* *
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); * This software component is licensed by ST under Ultimate Liberty license
* You may not use this file except in compliance with the License. * SLA0044, the "License"; You may not use this file except in compliance with
* You may obtain a copy of the License at: * the License. You may obtain a copy of the License at:
* * http://www.st.com/SLA0044
* http://www.st.com/software_license_agreement_liberty_v2
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* *
****************************************************************************** ******************************************************************************
*/ */
@ -296,31 +288,53 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
break; break;
case USBD_STATE_CONFIGURED: case USBD_STATE_CONFIGURED:
pep = ((ep_addr & 0x80) == 0x80) ? &pdev->ep_in[ep_addr & 0x7F]:\ if((ep_addr & 0x80U) == 0x80U)
&pdev->ep_out[ep_addr & 0x7F];
if(USBD_LL_IsStallEP(pdev, ep_addr))
{ {
pep->status = 0x0001; if (pdev->ep_in[ep_addr & 0xFU].is_used == 0U)
{
USBD_CtlError(pdev, req);
break;
}
} }
else else
{ {
pep->status = 0x0000; if (pdev->ep_out[ep_addr & 0xFU].is_used == 0U)
{
USBD_CtlError(pdev, req);
break;
}
} }
USBD_CtlSendData (pdev, pep = ((ep_addr & 0x80U) == 0x80U) ? &pdev->ep_in[ep_addr & 0x7FU]:\
(uint8_t *)&pep->status, &pdev->ep_out[ep_addr & 0x7FU];
2);
break; if ((ep_addr == 0x00U) || (ep_addr == 0x80U))
{
pep->status = 0x0000U;
}
else if(USBD_LL_IsStallEP(pdev, ep_addr))
{
pep->status = 0x0001U;
}
else
{
pep->status = 0x0000U;
}
USBD_CtlSendData (pdev, (uint8_t *)(void *)&pep->status, 2U);
break;
default: default:
USBD_CtlError(pdev , req); USBD_CtlError(pdev, req);
break; break;
} }
break; break;
default: default:
USBD_CtlError(pdev, req);
break; break;
} }
return ret; return ret;
} }
/** /**
@ -339,7 +353,7 @@ static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
switch (req->wValue >> 8) switch (req->wValue >> 8)
{ {
#if (USBD_LPM_ENABLED == 1) #if (USBD_LPM_ENABLED == 1U)
case USB_DESC_TYPE_BOS: case USB_DESC_TYPE_BOS:
pbuf = pdev->pDesc->GetBOSDescriptor(pdev->dev_speed, &len); pbuf = pdev->pDesc->GetBOSDescriptor(pdev->dev_speed, &len);
if (!pbuf) { if (!pbuf) {
@ -392,7 +406,7 @@ static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
break; break;
default: default:
#if (USBD_SUPPORT_USER_STRING == 1) #if (USBD_SUPPORT_USER_STRING == 1U)
pbuf = pdev->pClass->GetUsrStrDescriptor(pdev, (req->wValue) , &len); pbuf = pdev->pClass->GetUsrStrDescriptor(pdev, (req->wValue) , &len);
break; break;
#else #else
@ -403,9 +417,9 @@ static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
break; break;
case USB_DESC_TYPE_DEVICE_QUALIFIER: case USB_DESC_TYPE_DEVICE_QUALIFIER:
if(pdev->dev_speed == USBD_SPEED_HIGH ) if(pdev->dev_speed == USBD_SPEED_HIGH)
{ {
pbuf = (uint8_t *)pdev->pClass->GetDeviceQualifierDescriptor(&len); pbuf = (uint8_t *)pdev->pClass->GetDeviceQualifierDescriptor(&len);
break; break;
} }
else else
@ -432,16 +446,18 @@ static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
return; return;
} }
if((len != 0)&& (req->wLength != 0)) if((len != 0U) && (req->wLength != 0U))
{ {
len = MIN(len , req->wLength); len = MIN(len, req->wLength);
USBD_CtlSendData (pdev, USBD_CtlSendData (pdev, pbuf, len);
pbuf,
len);
} }
if(req->wLength == 0U)
{
USBD_CtlSendStatus(pdev);
}
} }
/** /**
@ -456,9 +472,9 @@ static void USBD_SetAddress(USBD_HandleTypeDef *pdev ,
{ {
uint8_t dev_addr; uint8_t dev_addr;
if ((req->wIndex == 0) && (req->wLength == 0)) if ((req->wIndex == 0U) && (req->wLength == 0U) && (req->wValue < 128U))
{ {
dev_addr = (uint8_t)(req->wValue) & 0x7F; dev_addr = (uint8_t)(req->wValue) & 0x7FU;
if (pdev->dev_state == USBD_STATE_CONFIGURED) if (pdev->dev_state == USBD_STATE_CONFIGURED)
{ {
@ -470,19 +486,19 @@ static void USBD_SetAddress(USBD_HandleTypeDef *pdev ,
USBD_LL_SetUSBAddress(pdev, dev_addr); USBD_LL_SetUSBAddress(pdev, dev_addr);
USBD_CtlSendStatus(pdev); USBD_CtlSendStatus(pdev);
if (dev_addr != 0) if (dev_addr != 0U)
{ {
pdev->dev_state = USBD_STATE_ADDRESSED; pdev->dev_state = USBD_STATE_ADDRESSED;
} }
else else
{ {
pdev->dev_state = USBD_STATE_DEFAULT; pdev->dev_state = USBD_STATE_DEFAULT;
} }
} }
} }
else else
{ {
USBD_CtlError(pdev , req); USBD_CtlError(pdev, req);
} }
} }
@ -493,17 +509,15 @@ static void USBD_SetAddress(USBD_HandleTypeDef *pdev ,
* @param req: usb request * @param req: usb request
* @retval status * @retval status
*/ */
static void USBD_SetConfig(USBD_HandleTypeDef *pdev , static void USBD_SetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
USBD_SetupReqTypedef *req)
{ {
static uint8_t cfgidx;
static uint8_t cfgidx;
cfgidx = (uint8_t)(req->wValue); cfgidx = (uint8_t)(req->wValue);
if (cfgidx > USBD_MAX_NUM_CONFIGURATION ) if (cfgidx > USBD_MAX_NUM_CONFIGURATION)
{ {
USBD_CtlError(pdev , req); USBD_CtlError(pdev, req);
} }
else else
{ {
@ -514,38 +528,37 @@ static void USBD_SetConfig(USBD_HandleTypeDef *pdev ,
{ {
pdev->dev_config = cfgidx; pdev->dev_config = cfgidx;
pdev->dev_state = USBD_STATE_CONFIGURED; pdev->dev_state = USBD_STATE_CONFIGURED;
if(USBD_SetClassConfig(pdev , cfgidx) == USBD_FAIL) if(USBD_SetClassConfig(pdev, cfgidx) == USBD_FAIL)
{ {
USBD_CtlError(pdev , req); USBD_CtlError(pdev, req);
return; return;
} }
USBD_CtlSendStatus(pdev); USBD_CtlSendStatus(pdev);
} }
else else
{ {
USBD_CtlSendStatus(pdev); USBD_CtlSendStatus(pdev);
} }
break; break;
case USBD_STATE_CONFIGURED: case USBD_STATE_CONFIGURED:
if (cfgidx == 0) if (cfgidx == 0U)
{ {
pdev->dev_state = USBD_STATE_ADDRESSED; pdev->dev_state = USBD_STATE_ADDRESSED;
pdev->dev_config = cfgidx; pdev->dev_config = cfgidx;
USBD_ClrClassConfig(pdev , cfgidx); USBD_ClrClassConfig(pdev, cfgidx);
USBD_CtlSendStatus(pdev); USBD_CtlSendStatus(pdev);
} }
else if (cfgidx != pdev->dev_config) else if (cfgidx != pdev->dev_config)
{ {
/* Clear old configuration */ /* Clear old configuration */
USBD_ClrClassConfig(pdev , pdev->dev_config); USBD_ClrClassConfig(pdev, (uint8_t)pdev->dev_config);
/* set new configuration */ /* set new configuration */
pdev->dev_config = cfgidx; pdev->dev_config = cfgidx;
if(USBD_SetClassConfig(pdev , cfgidx) == USBD_FAIL) if(USBD_SetClassConfig(pdev, cfgidx) == USBD_FAIL)
{ {
USBD_CtlError(pdev , req); USBD_CtlError(pdev, req);
return; return;
} }
USBD_CtlSendStatus(pdev); USBD_CtlSendStatus(pdev);
@ -557,7 +570,7 @@ static void USBD_SetConfig(USBD_HandleTypeDef *pdev ,
break; break;
default: default:
USBD_CtlError(pdev , req); USBD_CtlError(pdev, req);
break; break;
} }
} }
@ -570,34 +583,28 @@ static void USBD_SetConfig(USBD_HandleTypeDef *pdev ,
* @param req: usb request * @param req: usb request
* @retval status * @retval status
*/ */
static void USBD_GetConfig(USBD_HandleTypeDef *pdev , static void USBD_GetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
USBD_SetupReqTypedef *req)
{ {
if (req->wLength != 1U)
if (req->wLength != 1)
{ {
USBD_CtlError(pdev , req); USBD_CtlError(pdev , req);
} }
else else
{ {
switch (pdev->dev_state ) switch (pdev->dev_state)
{ {
case USBD_STATE_DEFAULT:
case USBD_STATE_ADDRESSED: case USBD_STATE_ADDRESSED:
pdev->dev_default_config = 0; pdev->dev_default_config = 0U;
USBD_CtlSendData (pdev, USBD_CtlSendData (pdev, (uint8_t *)(void *)&pdev->dev_default_config, 1U);
(uint8_t *)&pdev->dev_default_config,
1);
break; break;
case USBD_STATE_CONFIGURED: case USBD_STATE_CONFIGURED:
USBD_CtlSendData (pdev, (uint8_t *)(void *)&pdev->dev_config, 1U);
USBD_CtlSendData (pdev,
(uint8_t *)&pdev->dev_config,
1);
break; break;
default: default:
USBD_CtlError(pdev , req); USBD_CtlError(pdev , req);
break; break;
} }
} }
@ -610,30 +617,31 @@ static void USBD_GetConfig(USBD_HandleTypeDef *pdev ,
* @param req: usb request * @param req: usb request
* @retval status * @retval status
*/ */
static void USBD_GetStatus(USBD_HandleTypeDef *pdev , static void USBD_GetStatus(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
USBD_SetupReqTypedef *req)
{ {
switch (pdev->dev_state) switch (pdev->dev_state)
{ {
case USBD_STATE_DEFAULT:
case USBD_STATE_ADDRESSED: case USBD_STATE_ADDRESSED:
case USBD_STATE_CONFIGURED: case USBD_STATE_CONFIGURED:
if(req->wLength != 0x2U)
{
USBD_CtlError(pdev, req);
break;
}
#if ( USBD_SELF_POWERED == 1) #if ( USBD_SELF_POWERED == 1U)
pdev->dev_config_status = USB_CONFIG_SELF_POWERED; pdev->dev_config_status = USB_CONFIG_SELF_POWERED;
#else #else
pdev->dev_config_status = 0; pdev->dev_config_status = 0U;
#endif #endif
if (pdev->dev_remote_wakeup) if (pdev->dev_remote_wakeup)
{ {
pdev->dev_config_status |= USB_CONFIG_REMOTE_WAKEUP; pdev->dev_config_status |= USB_CONFIG_REMOTE_WAKEUP;
} }
USBD_CtlSendData (pdev, USBD_CtlSendData (pdev, (uint8_t *)(void *)&pdev->dev_config_status, 2U);
(uint8_t *)& pdev->dev_config_status,
2);
break; break;
default : default :
@ -656,7 +664,7 @@ static void USBD_SetFeature(USBD_HandleTypeDef *pdev ,
if (req->wValue == USB_FEATURE_REMOTE_WAKEUP) if (req->wValue == USB_FEATURE_REMOTE_WAKEUP)
{ {
pdev->dev_remote_wakeup = 1; pdev->dev_remote_wakeup = 1U;
pdev->pClass->Setup (pdev, req); pdev->pClass->Setup (pdev, req);
USBD_CtlSendStatus(pdev); USBD_CtlSendStatus(pdev);
} }
@ -676,11 +684,12 @@ static void USBD_ClrFeature(USBD_HandleTypeDef *pdev ,
{ {
switch (pdev->dev_state) switch (pdev->dev_state)
{ {
case USBD_STATE_DEFAULT:
case USBD_STATE_ADDRESSED: case USBD_STATE_ADDRESSED:
case USBD_STATE_CONFIGURED: case USBD_STATE_CONFIGURED:
if (req->wValue == USB_FEATURE_REMOTE_WAKEUP) if (req->wValue == USB_FEATURE_REMOTE_WAKEUP)
{ {
pdev->dev_remote_wakeup = 0; pdev->dev_remote_wakeup = 0U;
pdev->pClass->Setup (pdev, req); pdev->pClass->Setup (pdev, req);
USBD_CtlSendStatus(pdev); USBD_CtlSendStatus(pdev);
} }
@ -721,8 +730,8 @@ void USBD_ParseSetupRequest(USBD_SetupReqTypedef *req, uint8_t *pdata)
void USBD_CtlError( USBD_HandleTypeDef *pdev , void USBD_CtlError( USBD_HandleTypeDef *pdev ,
USBD_SetupReqTypedef *req) USBD_SetupReqTypedef *req)
{ {
USBD_LL_StallEP(pdev , 0x80); USBD_LL_StallEP(pdev , 0x80U);
USBD_LL_StallEP(pdev , 0); USBD_LL_StallEP(pdev , 0U);
} }
@ -736,18 +745,18 @@ void USBD_CtlError( USBD_HandleTypeDef *pdev ,
*/ */
void USBD_GetString(const uint8_t *desc, uint8_t *unicode, uint16_t *len) void USBD_GetString(const uint8_t *desc, uint8_t *unicode, uint16_t *len)
{ {
uint8_t idx = 0; uint8_t idx = 0U;
if (desc != NULL) if (desc != NULL)
{ {
*len = USBD_GetLen(desc) * 2 + 2; *len = (uint16_t)USBD_GetLen(desc) * 2U + 2U;
unicode[idx++] = *len; unicode[idx++] = *(uint8_t *)(void *)len;
unicode[idx++] = USB_DESC_TYPE_STRING; unicode[idx++] = USB_DESC_TYPE_STRING;
while (*desc != '\0') while (*desc != '\0')
{ {
unicode[idx++] = *desc++; unicode[idx++] = *desc++;
unicode[idx++] = 0x00; unicode[idx++] = 0U;
} }
} }
} }
@ -760,7 +769,7 @@ void USBD_GetString(const uint8_t *desc, uint8_t *unicode, uint16_t *len)
*/ */
static uint8_t USBD_GetLen(const uint8_t *buf) static uint8_t USBD_GetLen(const uint8_t *buf)
{ {
uint8_t len = 0; uint8_t len = 0U;
while (*buf != '\0') while (*buf != '\0')
{ {

View File

@ -4,25 +4,17 @@
****************************************************************************** ******************************************************************************
* @file usbd_req.h * @file usbd_req.h
* @author MCD Application Team * @author MCD Application Team
* @version V2.4.2
* @date 11-December-2015
* @brief Header file for the usbd_req.c file * @brief Header file for the usbd_req.c file
****************************************************************************** ******************************************************************************
* @attention * @attention
* *
* <h2><center>&copy; COPYRIGHT 2015 STMicroelectronics</center></h2> * <h2><center>&copy; Copyright (c) 2015 STMicroelectronics.
* All rights reserved.</center></h2>
* *
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); * This software component is licensed by ST under Ultimate Liberty license
* You may not use this file except in compliance with the License. * SLA0044, the "License"; You may not use this file except in compliance with
* You may obtain a copy of the License at: * the License. You may obtain a copy of the License at:
* * http://www.st.com/SLA0044
* http://www.st.com/software_license_agreement_liberty_v2
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* *
****************************************************************************** ******************************************************************************
*/ */

View File

@ -4,25 +4,17 @@
****************************************************************************** ******************************************************************************
* @file usbd_def.h * @file usbd_def.h
* @author MCD Application Team * @author MCD Application Team
* @version V2.4.2
* @date 11-December-2015
* @brief General defines for the usb device library * @brief General defines for the usb device library
****************************************************************************** ******************************************************************************
* @attention * @attention
* *
* <h2><center>&copy; COPYRIGHT 2015 STMicroelectronics</center></h2> * <h2><center>&copy; Copyright (c) 2015 STMicroelectronics.
* All rights reserved.</center></h2>
* *
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); * This software component is licensed by ST under Ultimate Liberty license
* You may not use this file except in compliance with the License. * SLA0044, the "License"; You may not use this file except in compliance with
* You may obtain a copy of the License at: * the License. You may obtain a copy of the License at:
* * http://www.st.com/SLA0044
* http://www.st.com/software_license_agreement_liberty_v2
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* *
****************************************************************************** ******************************************************************************
*/ */
@ -52,91 +44,91 @@
*/ */
#ifndef NULL #ifndef NULL
#define NULL 0 #define NULL 0U
#endif #endif
#define USB_LEN_DEV_QUALIFIER_DESC 0x0A #define USB_LEN_DEV_QUALIFIER_DESC 0x0AU
#define USB_LEN_DEV_DESC 0x12 #define USB_LEN_DEV_DESC 0x12U
#define USB_LEN_CFG_DESC 0x09 #define USB_LEN_CFG_DESC 0x09U
#define USB_LEN_IF_DESC 0x09 #define USB_LEN_IF_DESC 0x09U
#define USB_LEN_EP_DESC 0x07 #define USB_LEN_EP_DESC 0x07U
#define USB_LEN_OTG_DESC 0x03 #define USB_LEN_OTG_DESC 0x03U
#define USB_LEN_LANGID_STR_DESC 0x04 #define USB_LEN_LANGID_STR_DESC 0x04U
#define USB_LEN_OTHER_SPEED_DESC_SIZ 0x09 #define USB_LEN_OTHER_SPEED_DESC_SIZ 0x09U
#define USBD_IDX_LANGID_STR 0x00 #define USBD_IDX_LANGID_STR 0x00U
#define USBD_IDX_MFC_STR 0x01 #define USBD_IDX_MFC_STR 0x01U
#define USBD_IDX_PRODUCT_STR 0x02 #define USBD_IDX_PRODUCT_STR 0x02U
#define USBD_IDX_SERIAL_STR 0x03 #define USBD_IDX_SERIAL_STR 0x03U
#define USBD_IDX_CONFIG_STR 0x04 #define USBD_IDX_CONFIG_STR 0x04U
#define USBD_IDX_INTERFACE_STR 0x05 #define USBD_IDX_INTERFACE_STR 0x05U
#define USB_REQ_TYPE_STANDARD 0x00 #define USB_REQ_TYPE_STANDARD 0x00U
#define USB_REQ_TYPE_CLASS 0x20 #define USB_REQ_TYPE_CLASS 0x20U
#define USB_REQ_TYPE_VENDOR 0x40 #define USB_REQ_TYPE_VENDOR 0x40U
#define USB_REQ_TYPE_MASK 0x60 #define USB_REQ_TYPE_MASK 0x60U
#define USB_REQ_RECIPIENT_DEVICE 0x00 #define USB_REQ_RECIPIENT_DEVICE 0x00U
#define USB_REQ_RECIPIENT_INTERFACE 0x01 #define USB_REQ_RECIPIENT_INTERFACE 0x01U
#define USB_REQ_RECIPIENT_ENDPOINT 0x02 #define USB_REQ_RECIPIENT_ENDPOINT 0x02U
#define USB_REQ_RECIPIENT_MASK 0x1F #define USB_REQ_RECIPIENT_MASK 0x1FU
#define USB_REQ_GET_STATUS 0x00 #define USB_REQ_GET_STATUS 0x00U
#define USB_REQ_CLEAR_FEATURE 0x01 #define USB_REQ_CLEAR_FEATURE 0x01U
#define USB_REQ_SET_FEATURE 0x03 #define USB_REQ_SET_FEATURE 0x03U
#define USB_REQ_SET_ADDRESS 0x05 #define USB_REQ_SET_ADDRESS 0x05U
#define USB_REQ_GET_DESCRIPTOR 0x06 #define USB_REQ_GET_DESCRIPTOR 0x06U
#define USB_REQ_SET_DESCRIPTOR 0x07 #define USB_REQ_SET_DESCRIPTOR 0x07U
#define USB_REQ_GET_CONFIGURATION 0x08 #define USB_REQ_GET_CONFIGURATION 0x08U
#define USB_REQ_SET_CONFIGURATION 0x09 #define USB_REQ_SET_CONFIGURATION 0x09U
#define USB_REQ_GET_INTERFACE 0x0A #define USB_REQ_GET_INTERFACE 0x0AU
#define USB_REQ_SET_INTERFACE 0x0B #define USB_REQ_SET_INTERFACE 0x0BU
#define USB_REQ_SYNCH_FRAME 0x0C #define USB_REQ_SYNCH_FRAME 0x0CU
#define USB_DESC_TYPE_DEVICE 1 #define USB_DESC_TYPE_DEVICE 0x01U
#define USB_DESC_TYPE_CONFIGURATION 2 #define USB_DESC_TYPE_CONFIGURATION 0x02U
#define USB_DESC_TYPE_STRING 3 #define USB_DESC_TYPE_STRING 0x03U
#define USB_DESC_TYPE_INTERFACE 4 #define USB_DESC_TYPE_INTERFACE 0x04U
#define USB_DESC_TYPE_ENDPOINT 5 #define USB_DESC_TYPE_ENDPOINT 0x05U
#define USB_DESC_TYPE_DEVICE_QUALIFIER 6 #define USB_DESC_TYPE_DEVICE_QUALIFIER 0x06U
#define USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION 7 #define USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION 0x07U
#define USB_DESC_TYPE_BOS 15 #define USB_DESC_TYPE_BOS 0x0FU
#define USB_DESC_TYPE_DEVICE_CAPABILITY 16 #define USB_DESC_TYPE_DEVICE_CAPABILITY 0x10U
#define USB_DEVICE_CAPABILITY_PLATFORM 5 #define USB_DEVICE_CAPABILITY_PLATFORM 0x05U
#define USB_CONFIG_REMOTE_WAKEUP 2 #define USB_CONFIG_REMOTE_WAKEUP 0x02U
#define USB_CONFIG_SELF_POWERED 1 #define USB_CONFIG_SELF_POWERED 0x01U
#define USB_FEATURE_EP_HALT 0 #define USB_FEATURE_EP_HALT 0x00U
#define USB_FEATURE_REMOTE_WAKEUP 1 #define USB_FEATURE_REMOTE_WAKEUP 0x01U
#define USB_FEATURE_TEST_MODE 2 #define USB_FEATURE_TEST_MODE 0x02U
#define USB_HS_MAX_PACKET_SIZE 512 #define USB_HS_MAX_PACKET_SIZE 512U
#define USB_FS_MAX_PACKET_SIZE 64 #define USB_FS_MAX_PACKET_SIZE 64U
#define USB_MAX_EP0_SIZE 64 #define USB_MAX_EP0_SIZE 64U
/* Device Status */ /* Device Status */
#define USBD_STATE_DEFAULT 1 #define USBD_STATE_DEFAULT 0x01U
#define USBD_STATE_ADDRESSED 2 #define USBD_STATE_ADDRESSED 0x02U
#define USBD_STATE_CONFIGURED 3 #define USBD_STATE_CONFIGURED 0x03U
#define USBD_STATE_SUSPENDED 4 #define USBD_STATE_SUSPENDED 0x04U
/* EP0 State */ /* EP0 State */
#define USBD_EP0_IDLE 0 #define USBD_EP0_IDLE 0x00U
#define USBD_EP0_SETUP 1 #define USBD_EP0_SETUP 0x01U
#define USBD_EP0_DATA_IN 2 #define USBD_EP0_DATA_IN 0x02U
#define USBD_EP0_DATA_OUT 3 #define USBD_EP0_DATA_OUT 0x03U
#define USBD_EP0_STATUS_IN 4 #define USBD_EP0_STATUS_IN 0x04U
#define USBD_EP0_STATUS_OUT 5 #define USBD_EP0_STATUS_OUT 0x05U
#define USBD_EP0_STALL 6 #define USBD_EP0_STALL 0x06U
#define USBD_EP_TYPE_CTRL 0 #define USBD_EP_TYPE_CTRL 0x00U
#define USBD_EP_TYPE_ISOC 1 #define USBD_EP_TYPE_ISOC 0x01U
#define USBD_EP_TYPE_BULK 2 #define USBD_EP_TYPE_BULK 0x02U
#define USBD_EP_TYPE_INTR 3 #define USBD_EP_TYPE_INTR 0x03U
/** /**
@ -179,7 +171,7 @@ typedef struct _Device_cb
uint8_t *(*GetFSConfigDescriptor)(uint16_t *length); uint8_t *(*GetFSConfigDescriptor)(uint16_t *length);
uint8_t *(*GetOtherSpeedConfigDescriptor)(uint16_t *length); uint8_t *(*GetOtherSpeedConfigDescriptor)(uint16_t *length);
uint8_t *(*GetDeviceQualifierDescriptor)(uint16_t *length); uint8_t *(*GetDeviceQualifierDescriptor)(uint16_t *length);
#if (USBD_SUPPORT_USER_STRING == 1) #if (USBD_SUPPORT_USER_STRING == 1U)
uint8_t *(*GetUsrStrDescriptor)(struct _USBD_HandleTypeDef *pdev ,uint8_t index, uint16_t *length); uint8_t *(*GetUsrStrDescriptor)(struct _USBD_HandleTypeDef *pdev ,uint8_t index, uint16_t *length);
#endif #endif
@ -188,14 +180,14 @@ typedef struct _Device_cb
/* Following USB Device Speed */ /* Following USB Device Speed */
typedef enum typedef enum
{ {
USBD_SPEED_HIGH = 0, USBD_SPEED_HIGH = 0U,
USBD_SPEED_FULL = 1, USBD_SPEED_FULL = 1U,
USBD_SPEED_LOW = 2, USBD_SPEED_LOW = 2U,
}USBD_SpeedTypeDef; }USBD_SpeedTypeDef;
/* Following USB Device status */ /* Following USB Device status */
typedef enum { typedef enum {
USBD_OK = 0, USBD_OK = 0U,
USBD_BUSY, USBD_BUSY,
USBD_FAIL, USBD_FAIL,
}USBD_StatusTypeDef; }USBD_StatusTypeDef;
@ -210,7 +202,7 @@ typedef struct
uint8_t *(*GetSerialStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length); uint8_t *(*GetSerialStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
uint8_t *(*GetConfigurationStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length); uint8_t *(*GetConfigurationStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
uint8_t *(*GetInterfaceStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length); uint8_t *(*GetInterfaceStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
#if (USBD_LPM_ENABLED == 1) #if (USBD_LPM_ENABLED == 1U)
uint8_t *(*GetBOSDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length); uint8_t *(*GetBOSDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
#endif #endif
} USBD_DescriptorsTypeDef; } USBD_DescriptorsTypeDef;
@ -219,6 +211,7 @@ typedef struct
typedef struct typedef struct
{ {
uint32_t status; uint32_t status;
uint32_t is_used;
uint32_t total_length; uint32_t total_length;
uint32_t rem_length; uint32_t rem_length;
uint32_t maxpacket; uint32_t maxpacket;
@ -261,10 +254,10 @@ typedef struct _USBD_HandleTypeDef
* @{ * @{
*/ */
#define SWAPBYTE(addr) (((uint16_t)(*((uint8_t *)(addr)))) + \ #define SWAPBYTE(addr) (((uint16_t)(*((uint8_t *)(addr)))) + \
(((uint16_t)(*(((uint8_t *)(addr)) + 1))) << 8)) (((uint16_t)(*(((uint8_t *)(addr)) + 1U))) << 8U))
#define LOBYTE(x) ((uint8_t)(x & 0x00FF)) #define LOBYTE(x) ((uint8_t)(x & 0x00FFU))
#define HIBYTE(x) ((uint8_t)((x & 0xFF00) >>8)) #define HIBYTE(x) ((uint8_t)((x & 0xFF00U) >> 8U))
#ifndef MIN #ifndef MIN
#define MIN(a, b) (((a) < (b)) ? (a) : (b)) #define MIN(a, b) (((a) < (b)) ? (a) : (b))
#endif #endif
@ -272,6 +265,7 @@ typedef struct _USBD_HandleTypeDef
#define MAX(a, b) (((a) > (b)) ? (a) : (b)) #define MAX(a, b) (((a) > (b)) ? (a) : (b))
#endif #endif
#if defined ( __GNUC__ ) #if defined ( __GNUC__ )
#ifndef __weak #ifndef __weak
#define __weak __attribute__((weak)) #define __weak __attribute__((weak))

View File

@ -4,25 +4,17 @@
****************************************************************************** ******************************************************************************
* @file usbd_ioreq.c * @file usbd_ioreq.c
* @author MCD Application Team * @author MCD Application Team
* @version V2.4.2
* @date 11-December-2015
* @brief This file provides the IO requests APIs for control endpoints. * @brief This file provides the IO requests APIs for control endpoints.
****************************************************************************** ******************************************************************************
* @attention * @attention
* *
* <h2><center>&copy; COPYRIGHT 2015 STMicroelectronics</center></h2> * <h2><center>&copy; Copyright (c) 2015 STMicroelectronics.
* All rights reserved.</center></h2>
* *
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); * This software component is licensed by ST under Ultimate Liberty license
* You may not use this file except in compliance with the License. * SLA0044, the "License"; You may not use this file except in compliance with
* You may obtain a copy of the License at: * the License. You may obtain a copy of the License at:
* * http://www.st.com/SLA0044
* http://www.st.com/software_license_agreement_liberty_v2
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* *
****************************************************************************** ******************************************************************************
*/ */
@ -94,16 +86,16 @@
* @param len: length of data to be sent * @param len: length of data to be sent
* @retval status * @retval status
*/ */
USBD_StatusTypeDef USBD_CtlSendData (USBD_HandleTypeDef *pdev, USBD_StatusTypeDef USBD_CtlSendData (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
uint8_t *pbuf, uint16_t len)
uint16_t len)
{ {
/* Set EP0 State */ /* Set EP0 State */
pdev->ep0_state = USBD_EP0_DATA_IN; pdev->ep0_state = USBD_EP0_DATA_IN;
pdev->ep_in[0].total_length = len; pdev->ep_in[0].total_length = len;
pdev->ep_in[0].rem_length = len; pdev->ep_in[0].rem_length = len;
/* Start the transfer */ /* Start the transfer */
USBD_LL_Transmit (pdev, 0x00, pbuf, len); USBD_LL_Transmit (pdev, 0x00U, pbuf, len);
return USBD_OK; return USBD_OK;
} }
@ -116,12 +108,11 @@ USBD_StatusTypeDef USBD_CtlSendData (USBD_HandleTypeDef *pdev,
* @param len: length of data to be sent * @param len: length of data to be sent
* @retval status * @retval status
*/ */
USBD_StatusTypeDef USBD_CtlContinueSendData (USBD_HandleTypeDef *pdev, USBD_StatusTypeDef USBD_CtlContinueSendData (USBD_HandleTypeDef *pdev,
uint8_t *pbuf, uint8_t *pbuf, uint16_t len)
uint16_t len)
{ {
/* Start the next transfer */ /* Start the next transfer */
USBD_LL_Transmit (pdev, 0x00, pbuf, len); USBD_LL_Transmit (pdev, 0x00U, pbuf, len);
return USBD_OK; return USBD_OK;
} }
@ -134,19 +125,16 @@ USBD_StatusTypeDef USBD_CtlContinueSendData (USBD_HandleTypeDef *pdev,
* @param len: length of data to be received * @param len: length of data to be received
* @retval status * @retval status
*/ */
USBD_StatusTypeDef USBD_CtlPrepareRx (USBD_HandleTypeDef *pdev, USBD_StatusTypeDef USBD_CtlPrepareRx (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
uint8_t *pbuf, uint16_t len)
uint16_t len)
{ {
/* Set EP0 State */ /* Set EP0 State */
pdev->ep0_state = USBD_EP0_DATA_OUT; pdev->ep0_state = USBD_EP0_DATA_OUT;
pdev->ep_out[0].total_length = len; pdev->ep_out[0].total_length = len;
pdev->ep_out[0].rem_length = len; pdev->ep_out[0].rem_length = len;
/* Start the transfer */ /* Start the transfer */
USBD_LL_PrepareReceive (pdev, USBD_LL_PrepareReceive (pdev, 0U, pbuf, len);
0,
pbuf,
len);
return USBD_OK; return USBD_OK;
} }
@ -159,31 +147,27 @@ USBD_StatusTypeDef USBD_CtlPrepareRx (USBD_HandleTypeDef *pdev,
* @param len: length of data to be received * @param len: length of data to be received
* @retval status * @retval status
*/ */
USBD_StatusTypeDef USBD_CtlContinueRx (USBD_HandleTypeDef *pdev, USBD_StatusTypeDef USBD_CtlContinueRx (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
uint8_t *pbuf, uint16_t len)
uint16_t len)
{ {
USBD_LL_PrepareReceive(pdev, 0U, pbuf, len);
USBD_LL_PrepareReceive (pdev,
0,
pbuf,
len);
return USBD_OK; return USBD_OK;
} }
/** /**
* @brief USBD_CtlSendStatus * @brief USBD_CtlSendStatus
* send zero lzngth packet on the ctl pipe * send zero lzngth packet on the ctl pipe
* @param pdev: device instance * @param pdev: device instance
* @retval status * @retval status
*/ */
USBD_StatusTypeDef USBD_CtlSendStatus (USBD_HandleTypeDef *pdev) USBD_StatusTypeDef USBD_CtlSendStatus (USBD_HandleTypeDef *pdev)
{ {
/* Set EP0 State */ /* Set EP0 State */
pdev->ep0_state = USBD_EP0_STATUS_IN; pdev->ep0_state = USBD_EP0_STATUS_IN;
/* Start the transfer */ /* Start the transfer */
USBD_LL_Transmit (pdev, 0x00, NULL, 0); USBD_LL_Transmit(pdev, 0x00U, NULL, 0U);
return USBD_OK; return USBD_OK;
} }
@ -194,21 +178,17 @@ USBD_StatusTypeDef USBD_CtlSendStatus (USBD_HandleTypeDef *pdev)
* @param pdev: device instance * @param pdev: device instance
* @retval status * @retval status
*/ */
USBD_StatusTypeDef USBD_CtlReceiveStatus (USBD_HandleTypeDef *pdev) USBD_StatusTypeDef USBD_CtlReceiveStatus (USBD_HandleTypeDef *pdev)
{ {
/* Set EP0 State */ /* Set EP0 State */
pdev->ep0_state = USBD_EP0_STATUS_OUT; pdev->ep0_state = USBD_EP0_STATUS_OUT;
/* Start the transfer */ /* Start the transfer */
USBD_LL_PrepareReceive ( pdev, USBD_LL_PrepareReceive (pdev, 0U, NULL, 0U);
0,
NULL,
0);
return USBD_OK; return USBD_OK;
} }
/** /**
* @brief USBD_GetRxCount * @brief USBD_GetRxCount
* returns the received data length * returns the received data length
@ -216,7 +196,7 @@ USBD_StatusTypeDef USBD_CtlReceiveStatus (USBD_HandleTypeDef *pdev)
* @param ep_addr: endpoint address * @param ep_addr: endpoint address
* @retval Rx Data blength * @retval Rx Data blength
*/ */
uint16_t USBD_GetRxCount (USBD_HandleTypeDef *pdev , uint8_t ep_addr) uint32_t USBD_GetRxCount (USBD_HandleTypeDef *pdev, uint8_t ep_addr)
{ {
return USBD_LL_GetRxDataSize(pdev, ep_addr); return USBD_LL_GetRxDataSize(pdev, ep_addr);
} }

View File

@ -4,25 +4,17 @@
****************************************************************************** ******************************************************************************
* @file usbd_ioreq.h * @file usbd_ioreq.h
* @author MCD Application Team * @author MCD Application Team
* @version V2.4.2
* @date 11-December-2015
* @brief Header file for the usbd_ioreq.c file * @brief Header file for the usbd_ioreq.c file
****************************************************************************** ******************************************************************************
* @attention * @attention
* *
* <h2><center>&copy; COPYRIGHT 2015 STMicroelectronics</center></h2> * <h2><center>&copy; Copyright (c) 2015 STMicroelectronics.
* All rights reserved.</center></h2>
* *
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); * This software component is licensed by ST under Ultimate Liberty license
* You may not use this file except in compliance with the License. * SLA0044, the "License"; You may not use this file except in compliance with
* You may obtain a copy of the License at: * the License. You may obtain a copy of the License at:
* * http://www.st.com/SLA0044
* http://www.st.com/software_license_agreement_liberty_v2
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* *
****************************************************************************** ******************************************************************************
*/ */
@ -87,8 +79,8 @@
* @{ * @{
*/ */
USBD_StatusTypeDef USBD_CtlSendData (USBD_HandleTypeDef *pdev, USBD_StatusTypeDef USBD_CtlSendData (USBD_HandleTypeDef *pdev,
uint8_t *buf, uint8_t *pbuf,
uint16_t len); uint16_t len);
USBD_StatusTypeDef USBD_CtlContinueSendData (USBD_HandleTypeDef *pdev, USBD_StatusTypeDef USBD_CtlContinueSendData (USBD_HandleTypeDef *pdev,
@ -107,8 +99,7 @@ USBD_StatusTypeDef USBD_CtlSendStatus (USBD_HandleTypeDef *pdev);
USBD_StatusTypeDef USBD_CtlReceiveStatus (USBD_HandleTypeDef *pdev); USBD_StatusTypeDef USBD_CtlReceiveStatus (USBD_HandleTypeDef *pdev);
uint16_t USBD_GetRxCount (USBD_HandleTypeDef *pdev , uint32_t USBD_GetRxCount (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
uint8_t epnum);
/** /**
* @} * @}