diff --git a/core/embed/trezorhal/usbd_conf.c b/core/embed/trezorhal/usbd_conf.c
index 65e5b430d..f0e93c582 100644
--- a/core/embed/trezorhal/usbd_conf.c
+++ b/core/embed/trezorhal/usbd_conf.c
@@ -1,55 +1,26 @@
// 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
- * @version V1.4.0
- * @date 17-February-2017
- * @brief This file implements the USB Device library callbacks and MSP
+ * @brief USB Device configuration and interface file
+ * This template should be copied to the user folder, renamed and customized
+ * following user needs.
******************************************************************************
* @attention
*
- *
© Copyright (c) 2017 STMicroelectronics International N.V.
+ * © Copyright (c) 2015 STMicroelectronics.
* All rights reserved.
*
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted, provided that the following conditions are met:
- *
- * 1. Redistribution of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of other
- * contributors to this software may be used to endorse or promote products
- * derived from this software without specific written permission.
- * 4. This software, including modifications and/or derivative works of this
- * software, must execute solely and exclusively on microcontroller or
- * microprocessor devices manufactured by or for STMicroelectronics.
- * 5. Redistribution and use of this software other than as permitted under
- * this license is void and will automatically terminate your rights under
- * this license.
- *
- * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
- * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
- * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * http://www.st.com/SLA0044
*
******************************************************************************
*/
+
/* Includes ------------------------------------------------------------------*/
#include STM32_HAL_H
#include "usbd_core.h"
@@ -403,7 +374,7 @@ void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd)
* @param pdev: Device handle
* @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 (pdev->id == USB_PHY_FS_ID)
@@ -547,8 +518,8 @@ USBD_StatusTypeDef USBD_LL_Stop(USBD_HandleTypeDef *pdev)
* @retval USBD Status
*/
USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef *pdev,
- uint8_t ep_addr,
- uint8_t ep_type,
+ uint8_t ep_addr,
+ uint8_t ep_type,
uint16_t ep_mps)
{
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.
* @param pdev: Device handle
* @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)
{
@@ -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 dev_addr: USB address
+ * @param ep_addr: Endpoint Number
* @retval USBD Status
*/
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 ep_addr: Endpoint Number
* @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
*/
USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev,
- uint8_t ep_addr,
- uint8_t *pbuf,
- uint16_t size)
+ uint8_t ep_addr,
+ uint8_t *pbuf,
+ uint16_t size)
{
HAL_PCD_EP_Transmit(pdev->pData, ep_addr, pbuf, size);
return USBD_OK;
}
/**
- * @brief Prepares an endpoint for reception
+ * @brief Prepares an endpoint for reception.
* @param pdev: Device handle
* @param ep_addr: Endpoint Number
- * @param pbuf:pointer to data to be received
- * @param size: data size
+ * @param pbuf: Pointer to data to be received
+ * @param size: Data size
* @retval USBD Status
*/
USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev,
- uint8_t ep_addr,
- uint8_t *pbuf,
- uint16_t size)
+ uint8_t ep_addr,
+ uint8_t *pbuf,
+ uint16_t size)
{
HAL_PCD_EP_Receive(pdev->pData, ep_addr, pbuf, size);
return USBD_OK;
}
/**
- * @brief Returns the last transfered packet size.
+ * @brief Returns the last transferred packet size.
* @param pdev: Device handle
* @param ep_addr: Endpoint Number
* @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);
}
/**
- * @brief Delay routine for the USB Device Library
+ * @brief Delays routine for the USB Device Library.
* @param Delay: Delay in ms
* @retval None
*/
-void USBD_LL_Delay(uint32_t Delay)
+void USBD_LL_Delay(uint32_t Delay)
{
HAL_Delay(Delay);
}
@@ -785,3 +756,4 @@ void OTG_HS_WKUP_IRQHandler(void) {
#endif
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
diff --git a/core/embed/trezorhal/usbd_conf.h b/core/embed/trezorhal/usbd_conf.h
index 6ff2c71c8..474ab4b69 100644
--- a/core/embed/trezorhal/usbd_conf.h
+++ b/core/embed/trezorhal/usbd_conf.h
@@ -1,55 +1,24 @@
// 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
- * @version V1.4.0
- * @date 17-February-2017
- * @brief General low level driver configuration
+ * @brief Header file for the usbd_conf_template.c file
******************************************************************************
* @attention
*
- * © Copyright (c) 2017 STMicroelectronics International N.V.
+ * © Copyright (c) 2015 STMicroelectronics.
* All rights reserved.
*
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted, provided that the following conditions are met:
- *
- * 1. Redistribution of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of other
- * contributors to this software may be used to endorse or promote products
- * derived from this software without specific written permission.
- * 4. This software, including modifications and/or derivative works of this
- * software, must execute solely and exclusively on microcontroller or
- * microprocessor devices manufactured by or for STMicroelectronics.
- * 5. Redistribution and use of this software other than as permitted under
- * this license is void and will automatically terminate your rights under
- * this license.
- *
- * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
- * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
- * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * http://www.st.com/SLA0044
*
******************************************************************************
*/
+
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __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 */
-#if (USBD_DEBUG_LEVEL > 0)
-#define USBD_UsrLog(...) printf(__VA_ARGS__);\
- printf("\n");
+#if (USBD_DEBUG_LEVEL > 0U)
+#define USBD_UsrLog(...) do { \
+ printf(__VA_ARGS__); \
+ printf("\n"); \
+} while (0)
#else
-#define USBD_UsrLog(...)
+#define USBD_UsrLog(...) do {} while (0)
#endif
-#if (USBD_DEBUG_LEVEL > 1)
+#if (USBD_DEBUG_LEVEL > 1U)
-#define USBD_ErrLog(...) printf("ERROR: ") ;\
- printf(__VA_ARGS__);\
- printf("\n");
+#define USBD_ErrLog(...) do { \
+ printf("ERROR: ") ; \
+ printf(__VA_ARGS__); \
+ printf("\n"); \
+} while (0)
#else
-#define USBD_ErrLog(...)
+#define USBD_ErrLog(...) do {} while (0)
#endif
-#if (USBD_DEBUG_LEVEL > 2)
-#define USBD_DbgLog(...) printf("DEBUG : ") ;\
- printf(__VA_ARGS__);\
- printf("\n");
+#if (USBD_DEBUG_LEVEL > 2U)
+#define USBD_DbgLog(...) do { \
+ printf("DEBUG : ") ; \
+ printf(__VA_ARGS__); \
+ printf("\n"); \
+} while (0)
#else
-#define USBD_DbgLog(...)
+#define USBD_DbgLog(...) do {} while (0)
#endif
/* Exported functions ------------------------------------------------------- */
diff --git a/core/embed/trezorhal/usbd_core.c b/core/embed/trezorhal/usbd_core.c
index 2663a6d88..9522b9bbb 100644
--- a/core/embed/trezorhal/usbd_core.c
+++ b/core/embed/trezorhal/usbd_core.c
@@ -4,25 +4,17 @@
******************************************************************************
* @file usbd_core.c
* @author MCD Application Team
- * @version V2.4.2
- * @date 11-December-2015
* @brief This file provides all the USBD core functions.
******************************************************************************
* @attention
*
- * © COPYRIGHT 2015 STMicroelectronics
+ * © Copyright (c) 2015 STMicroelectronics.
+ * All rights reserved.
*
- * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * 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.
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * http://www.st.com/SLA0044
*
******************************************************************************
*/
@@ -100,7 +92,9 @@ USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev, USBD_DescriptorsTypeDef *
/* Check whether the USB Host handle is valid */
if(pdev == NULL)
{
+#if (USBD_DEBUG_LEVEL > 1U)
USBD_ErrLog("Invalid Device handle");
+#endif
return USBD_FAIL;
}
@@ -137,7 +131,7 @@ USBD_StatusTypeDef USBD_DeInit(USBD_HandleTypeDef *pdev)
pdev->dev_state = USBD_STATE_DEFAULT;
/* Free Class Resources */
- pdev->pClass->DeInit(pdev, pdev->dev_config);
+ pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
/* Stop the low level driver */
USBD_LL_Stop(pdev);
@@ -148,7 +142,6 @@ USBD_StatusTypeDef USBD_DeInit(USBD_HandleTypeDef *pdev)
return USBD_OK;
}
-
/**
* @brief USBD_RegisterClass
* Link class driver to Device Core.
@@ -167,7 +160,9 @@ USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeD
}
else
{
+#if (USBD_DEBUG_LEVEL > 1U)
USBD_ErrLog("Invalid Class handle");
+#endif
status = USBD_FAIL;
}
@@ -198,7 +193,7 @@ USBD_StatusTypeDef USBD_Start (USBD_HandleTypeDef *pdev)
USBD_StatusTypeDef USBD_Stop (USBD_HandleTypeDef *pdev)
{
/* Free Class Resources */
- pdev->pClass->DeInit(pdev, pdev->dev_config);
+ pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
/* Stop the low level driver */
USBD_LL_Stop(pdev);
@@ -214,10 +209,12 @@ USBD_StatusTypeDef USBD_Stop (USBD_HandleTypeDef *pdev)
*/
USBD_StatusTypeDef USBD_RunTestMode (USBD_HandleTypeDef *pdev)
{
+ /* Prevent unused argument compilation warning */
+ UNUSED(pdev);
+
return USBD_OK;
}
-
/**
* @brief USBD_SetClassConfig
* Configure device and start the interface
@@ -233,11 +230,12 @@ USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx
if(pdev->pClass != NULL)
{
/* Set configuration and Start the Class*/
- if(pdev->pClass->Init(pdev, cfgidx) == 0)
+ if(pdev->pClass->Init(pdev, cfgidx) == 0U)
{
ret = USBD_OK;
}
}
+
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_ParseSetupRequest(&pdev->request, psetup);
pdev->ep0_state = USBD_EP0_SETUP;
+
pdev->ep0_data_len = pdev->request.wLength;
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);
break;
default:
- USBD_LL_StallEP(pdev, pdev->request.bmRequest & 0x80);
+ USBD_LL_StallEP(pdev, (pdev->request.bmRequest & 0x80U));
break;
}
break;
@@ -311,11 +309,12 @@ USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup)
* @param epnum: endpoint index
* @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;
- if(epnum == 0)
+ if(epnum == 0U)
{
pep = &pdev->ep_out[0];
@@ -327,7 +326,7 @@ USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev , uint8_t epnum
USBD_CtlContinueRx (pdev,
pdata,
- MIN(pep->rem_length ,pep->maxpacket));
+ (uint16_t)MIN(pep->rem_length, pep->maxpacket));
}
else
{
@@ -339,12 +338,29 @@ USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev , uint8_t epnum
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->pClass->DataOut(pdev, epnum);
}
+ else
+ {
+ /* should never be in this condition */
+ return USBD_FAIL;
+ }
+
return USBD_OK;
}
@@ -355,11 +371,12 @@ USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev , uint8_t epnum
* @param epnum: endpoint index
* @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];
@@ -367,33 +384,24 @@ USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev ,uint8_t epnum,
{
if(pep->rem_length > pep->maxpacket)
{
- pep->rem_length -= pep->maxpacket;
+ pep->rem_length -= pep->maxpacket;
- USBD_CtlContinueSendData (pdev,
- pdata,
- pep->rem_length);
+ USBD_CtlContinueSendData (pdev, pdata, (uint16_t)pep->rem_length);
/* Prepare endpoint for premature end of transfer */
- USBD_LL_PrepareReceive (pdev,
- 0,
- NULL,
- 0);
+ USBD_LL_PrepareReceive (pdev, 0U, NULL, 0U);
}
else
{ /* 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 < 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);
- pdev->ep0_data_len = 0;
-
- /* Prepare endpoint for premature end of transfer */
- USBD_LL_PrepareReceive (pdev,
- 0,
- NULL,
- 0);
+ /* Prepare endpoint for premature end of transfer */
+ USBD_LL_PrepareReceive (pdev, 0U, NULL, 0U);
}
else
{
@@ -402,21 +410,37 @@ USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev ,uint8_t epnum,
{
pdev->pClass->EP0_TxSent(pdev);
}
+ USBD_LL_StallEP(pdev, 0x80U);
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);
- 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->pClass->DataIn(pdev, epnum);
}
+ else
+ {
+ /* should never be in this condition */
+ return USBD_FAIL;
+ }
+
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)
{
/* Open EP0 OUT */
- USBD_LL_OpenEP(pdev,
- 0x00,
- USBD_EP_TYPE_CTRL,
- USB_MAX_EP0_SIZE);
+ USBD_LL_OpenEP(pdev, 0x00U, USBD_EP_TYPE_CTRL, USB_MAX_EP0_SIZE);
+ pdev->ep_out[0x00U & 0xFU].is_used = 1U;
pdev->ep_out[0].maxpacket = USB_MAX_EP0_SIZE;
/* Open EP0 IN */
- USBD_LL_OpenEP(pdev,
- 0x80,
- USBD_EP_TYPE_CTRL,
- USB_MAX_EP0_SIZE);
+ USBD_LL_OpenEP(pdev, 0x80U, USBD_EP_TYPE_CTRL, USB_MAX_EP0_SIZE);
+ pdev->ep_in[0x80U & 0xFU].is_used = 1U;
pdev->ep_in[0].maxpacket = USB_MAX_EP0_SIZE;
/* Upon Reset call user call back */
pdev->dev_state = USBD_STATE_DEFAULT;
+ pdev->ep0_state = USBD_EP0_IDLE;
+ pdev->dev_config= 0U;
+ pdev->dev_remote_wakeup = 0U;
if (pdev->pClassData)
- pdev->pClass->DeInit(pdev, pdev->dev_config);
-
+ {
+ pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+ }
return USBD_OK;
}
-
-
-
/**
* @brief USBD_LL_Reset
* 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)
{
+ /* Prevent unused arguments compilation warning */
+ UNUSED(pdev);
+ UNUSED(epnum);
+
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)
{
+ /* Prevent unused arguments compilation warning */
+ UNUSED(pdev);
+ UNUSED(epnum);
+
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)
{
+ /* Prevent unused argument compilation warning */
+ UNUSED(pdev);
+
return USBD_OK;
}
@@ -558,7 +590,7 @@ USBD_StatusTypeDef USBD_LL_DevDisconnected(USBD_HandleTypeDef *pdev)
{
/* Free Class Resources */
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;
}
diff --git a/core/embed/trezorhal/usbd_core.h b/core/embed/trezorhal/usbd_core.h
index 960d73b0d..0930ec80d 100644
--- a/core/embed/trezorhal/usbd_core.h
+++ b/core/embed/trezorhal/usbd_core.h
@@ -4,25 +4,17 @@
******************************************************************************
* @file usbd_core.h
* @author MCD Application Team
- * @version V2.4.2
- * @date 11-December-2015
* @brief Header file for usbd_core.c file
******************************************************************************
* @attention
*
- * © COPYRIGHT 2015 STMicroelectronics
+ * © Copyright (c) 2015 STMicroelectronics.
+ * All rights reserved.
*
- * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * 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.
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * http://www.st.com/SLA0044
*
******************************************************************************
*/
@@ -54,7 +46,9 @@
/** @defgroup USBD_CORE_Exported_Defines
* @{
*/
-
+#ifndef USBD_DEBUG_LEVEL
+#define USBD_DEBUG_LEVEL 0U
+#endif /* USBD_DEBUG_LEVEL */
/**
* @}
*/
diff --git a/core/embed/trezorhal/usbd_ctlreq.c b/core/embed/trezorhal/usbd_ctlreq.c
index 31c97e5f6..d9712f366 100644
--- a/core/embed/trezorhal/usbd_ctlreq.c
+++ b/core/embed/trezorhal/usbd_ctlreq.c
@@ -4,25 +4,17 @@
******************************************************************************
* @file usbd_req.c
* @author MCD Application Team
- * @version V2.4.2
- * @date 11-December-2015
* @brief This file provides the standard USB requests following chapter 9.
******************************************************************************
* @attention
*
- * © COPYRIGHT 2015 STMicroelectronics
+ * © Copyright (c) 2015 STMicroelectronics.
+ * All rights reserved.
*
- * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * 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.
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * http://www.st.com/SLA0044
*
******************************************************************************
*/
@@ -296,31 +288,53 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
break;
case USBD_STATE_CONFIGURED:
- pep = ((ep_addr & 0x80) == 0x80) ? &pdev->ep_in[ep_addr & 0x7F]:\
- &pdev->ep_out[ep_addr & 0x7F];
- if(USBD_LL_IsStallEP(pdev, ep_addr))
+ if((ep_addr & 0x80U) == 0x80U)
{
- pep->status = 0x0001;
+ if (pdev->ep_in[ep_addr & 0xFU].is_used == 0U)
+ {
+ USBD_CtlError(pdev, req);
+ break;
+ }
}
else
{
- pep->status = 0x0000;
+ if (pdev->ep_out[ep_addr & 0xFU].is_used == 0U)
+ {
+ USBD_CtlError(pdev, req);
+ break;
+ }
}
- USBD_CtlSendData (pdev,
- (uint8_t *)&pep->status,
- 2);
- break;
+ pep = ((ep_addr & 0x80U) == 0x80U) ? &pdev->ep_in[ep_addr & 0x7FU]:\
+ &pdev->ep_out[ep_addr & 0x7FU];
+
+ 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:
- USBD_CtlError(pdev , req);
+ USBD_CtlError(pdev, req);
break;
}
break;
default:
+ USBD_CtlError(pdev, req);
break;
}
+
return ret;
}
/**
@@ -339,7 +353,7 @@ static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
switch (req->wValue >> 8)
{
-#if (USBD_LPM_ENABLED == 1)
+#if (USBD_LPM_ENABLED == 1U)
case USB_DESC_TYPE_BOS:
pbuf = pdev->pDesc->GetBOSDescriptor(pdev->dev_speed, &len);
if (!pbuf) {
@@ -392,7 +406,7 @@ static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
break;
default:
-#if (USBD_SUPPORT_USER_STRING == 1)
+#if (USBD_SUPPORT_USER_STRING == 1U)
pbuf = pdev->pClass->GetUsrStrDescriptor(pdev, (req->wValue) , &len);
break;
#else
@@ -403,9 +417,9 @@ static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
break;
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;
}
else
@@ -432,16 +446,18 @@ static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
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,
- pbuf,
- len);
+ USBD_CtlSendData (pdev, pbuf, len);
}
+ if(req->wLength == 0U)
+ {
+ USBD_CtlSendStatus(pdev);
+ }
}
/**
@@ -456,9 +472,9 @@ static void USBD_SetAddress(USBD_HandleTypeDef *pdev ,
{
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)
{
@@ -470,19 +486,19 @@ static void USBD_SetAddress(USBD_HandleTypeDef *pdev ,
USBD_LL_SetUSBAddress(pdev, dev_addr);
USBD_CtlSendStatus(pdev);
- if (dev_addr != 0)
+ if (dev_addr != 0U)
{
- pdev->dev_state = USBD_STATE_ADDRESSED;
+ pdev->dev_state = USBD_STATE_ADDRESSED;
}
else
{
- pdev->dev_state = USBD_STATE_DEFAULT;
+ pdev->dev_state = USBD_STATE_DEFAULT;
}
}
}
else
{
- USBD_CtlError(pdev , req);
+ USBD_CtlError(pdev, req);
}
}
@@ -493,17 +509,15 @@ static void USBD_SetAddress(USBD_HandleTypeDef *pdev ,
* @param req: usb request
* @retval status
*/
-static void USBD_SetConfig(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req)
+static void USBD_SetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
-
- static uint8_t cfgidx;
+ static uint8_t cfgidx;
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
{
@@ -514,38 +528,37 @@ static void USBD_SetConfig(USBD_HandleTypeDef *pdev ,
{
pdev->dev_config = cfgidx;
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;
}
USBD_CtlSendStatus(pdev);
}
else
{
- USBD_CtlSendStatus(pdev);
+ USBD_CtlSendStatus(pdev);
}
break;
case USBD_STATE_CONFIGURED:
- if (cfgidx == 0)
+ if (cfgidx == 0U)
{
pdev->dev_state = USBD_STATE_ADDRESSED;
pdev->dev_config = cfgidx;
- USBD_ClrClassConfig(pdev , cfgidx);
+ USBD_ClrClassConfig(pdev, cfgidx);
USBD_CtlSendStatus(pdev);
-
}
- else if (cfgidx != pdev->dev_config)
+ else if (cfgidx != pdev->dev_config)
{
/* Clear old configuration */
- USBD_ClrClassConfig(pdev , pdev->dev_config);
+ USBD_ClrClassConfig(pdev, (uint8_t)pdev->dev_config);
/* set new configuration */
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;
}
USBD_CtlSendStatus(pdev);
@@ -557,7 +570,7 @@ static void USBD_SetConfig(USBD_HandleTypeDef *pdev ,
break;
default:
- USBD_CtlError(pdev , req);
+ USBD_CtlError(pdev, req);
break;
}
}
@@ -570,34 +583,28 @@ static void USBD_SetConfig(USBD_HandleTypeDef *pdev ,
* @param req: usb request
* @retval status
*/
-static void USBD_GetConfig(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req)
+static void USBD_GetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
-
- if (req->wLength != 1)
+ if (req->wLength != 1U)
{
- USBD_CtlError(pdev , req);
+ USBD_CtlError(pdev , req);
}
else
{
- switch (pdev->dev_state )
+ switch (pdev->dev_state)
{
+ case USBD_STATE_DEFAULT:
case USBD_STATE_ADDRESSED:
- pdev->dev_default_config = 0;
- USBD_CtlSendData (pdev,
- (uint8_t *)&pdev->dev_default_config,
- 1);
+ pdev->dev_default_config = 0U;
+ USBD_CtlSendData (pdev, (uint8_t *)(void *)&pdev->dev_default_config, 1U);
break;
case USBD_STATE_CONFIGURED:
-
- USBD_CtlSendData (pdev,
- (uint8_t *)&pdev->dev_config,
- 1);
+ USBD_CtlSendData (pdev, (uint8_t *)(void *)&pdev->dev_config, 1U);
break;
default:
- USBD_CtlError(pdev , req);
+ USBD_CtlError(pdev , req);
break;
}
}
@@ -610,30 +617,31 @@ static void USBD_GetConfig(USBD_HandleTypeDef *pdev ,
* @param req: usb request
* @retval status
*/
-static void USBD_GetStatus(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req)
+static void USBD_GetStatus(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
-
-
switch (pdev->dev_state)
{
+ case USBD_STATE_DEFAULT:
case USBD_STATE_ADDRESSED:
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;
#else
- pdev->dev_config_status = 0;
+ pdev->dev_config_status = 0U;
#endif
if (pdev->dev_remote_wakeup)
{
- pdev->dev_config_status |= USB_CONFIG_REMOTE_WAKEUP;
+ pdev->dev_config_status |= USB_CONFIG_REMOTE_WAKEUP;
}
- USBD_CtlSendData (pdev,
- (uint8_t *)& pdev->dev_config_status,
- 2);
+ USBD_CtlSendData (pdev, (uint8_t *)(void *)&pdev->dev_config_status, 2U);
break;
default :
@@ -656,7 +664,7 @@ static void USBD_SetFeature(USBD_HandleTypeDef *pdev ,
if (req->wValue == USB_FEATURE_REMOTE_WAKEUP)
{
- pdev->dev_remote_wakeup = 1;
+ pdev->dev_remote_wakeup = 1U;
pdev->pClass->Setup (pdev, req);
USBD_CtlSendStatus(pdev);
}
@@ -676,11 +684,12 @@ static void USBD_ClrFeature(USBD_HandleTypeDef *pdev ,
{
switch (pdev->dev_state)
{
+ case USBD_STATE_DEFAULT:
case USBD_STATE_ADDRESSED:
case USBD_STATE_CONFIGURED:
if (req->wValue == USB_FEATURE_REMOTE_WAKEUP)
{
- pdev->dev_remote_wakeup = 0;
+ pdev->dev_remote_wakeup = 0U;
pdev->pClass->Setup (pdev, req);
USBD_CtlSendStatus(pdev);
}
@@ -721,8 +730,8 @@ void USBD_ParseSetupRequest(USBD_SetupReqTypedef *req, uint8_t *pdata)
void USBD_CtlError( USBD_HandleTypeDef *pdev ,
USBD_SetupReqTypedef *req)
{
- USBD_LL_StallEP(pdev , 0x80);
- USBD_LL_StallEP(pdev , 0);
+ USBD_LL_StallEP(pdev , 0x80U);
+ 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)
{
- uint8_t idx = 0;
+ uint8_t idx = 0U;
if (desc != NULL)
{
- *len = USBD_GetLen(desc) * 2 + 2;
- unicode[idx++] = *len;
- unicode[idx++] = USB_DESC_TYPE_STRING;
+ *len = (uint16_t)USBD_GetLen(desc) * 2U + 2U;
+ unicode[idx++] = *(uint8_t *)(void *)len;
+ unicode[idx++] = USB_DESC_TYPE_STRING;
while (*desc != '\0')
{
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)
{
- uint8_t len = 0;
+ uint8_t len = 0U;
while (*buf != '\0')
{
diff --git a/core/embed/trezorhal/usbd_ctlreq.h b/core/embed/trezorhal/usbd_ctlreq.h
index 27e29356d..2865bda8a 100644
--- a/core/embed/trezorhal/usbd_ctlreq.h
+++ b/core/embed/trezorhal/usbd_ctlreq.h
@@ -4,25 +4,17 @@
******************************************************************************
* @file usbd_req.h
* @author MCD Application Team
- * @version V2.4.2
- * @date 11-December-2015
* @brief Header file for the usbd_req.c file
******************************************************************************
* @attention
*
- * © COPYRIGHT 2015 STMicroelectronics
+ * © Copyright (c) 2015 STMicroelectronics.
+ * All rights reserved.
*
- * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * 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.
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * http://www.st.com/SLA0044
*
******************************************************************************
*/
diff --git a/core/embed/trezorhal/usbd_def.h b/core/embed/trezorhal/usbd_def.h
index 6f20975a9..1de4cfaca 100644
--- a/core/embed/trezorhal/usbd_def.h
+++ b/core/embed/trezorhal/usbd_def.h
@@ -4,25 +4,17 @@
******************************************************************************
* @file usbd_def.h
* @author MCD Application Team
- * @version V2.4.2
- * @date 11-December-2015
* @brief General defines for the usb device library
******************************************************************************
* @attention
*
- * © COPYRIGHT 2015 STMicroelectronics
+ * © Copyright (c) 2015 STMicroelectronics.
+ * All rights reserved.
*
- * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * 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.
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * http://www.st.com/SLA0044
*
******************************************************************************
*/
@@ -52,91 +44,91 @@
*/
#ifndef NULL
-#define NULL 0
+#define NULL 0U
#endif
-#define USB_LEN_DEV_QUALIFIER_DESC 0x0A
-#define USB_LEN_DEV_DESC 0x12
-#define USB_LEN_CFG_DESC 0x09
-#define USB_LEN_IF_DESC 0x09
-#define USB_LEN_EP_DESC 0x07
-#define USB_LEN_OTG_DESC 0x03
-#define USB_LEN_LANGID_STR_DESC 0x04
-#define USB_LEN_OTHER_SPEED_DESC_SIZ 0x09
-
-#define USBD_IDX_LANGID_STR 0x00
-#define USBD_IDX_MFC_STR 0x01
-#define USBD_IDX_PRODUCT_STR 0x02
-#define USBD_IDX_SERIAL_STR 0x03
-#define USBD_IDX_CONFIG_STR 0x04
-#define USBD_IDX_INTERFACE_STR 0x05
-
-#define USB_REQ_TYPE_STANDARD 0x00
-#define USB_REQ_TYPE_CLASS 0x20
-#define USB_REQ_TYPE_VENDOR 0x40
-#define USB_REQ_TYPE_MASK 0x60
-
-#define USB_REQ_RECIPIENT_DEVICE 0x00
-#define USB_REQ_RECIPIENT_INTERFACE 0x01
-#define USB_REQ_RECIPIENT_ENDPOINT 0x02
-#define USB_REQ_RECIPIENT_MASK 0x1F
-
-#define USB_REQ_GET_STATUS 0x00
-#define USB_REQ_CLEAR_FEATURE 0x01
-#define USB_REQ_SET_FEATURE 0x03
-#define USB_REQ_SET_ADDRESS 0x05
-#define USB_REQ_GET_DESCRIPTOR 0x06
-#define USB_REQ_SET_DESCRIPTOR 0x07
-#define USB_REQ_GET_CONFIGURATION 0x08
-#define USB_REQ_SET_CONFIGURATION 0x09
-#define USB_REQ_GET_INTERFACE 0x0A
-#define USB_REQ_SET_INTERFACE 0x0B
-#define USB_REQ_SYNCH_FRAME 0x0C
-
-#define USB_DESC_TYPE_DEVICE 1
-#define USB_DESC_TYPE_CONFIGURATION 2
-#define USB_DESC_TYPE_STRING 3
-#define USB_DESC_TYPE_INTERFACE 4
-#define USB_DESC_TYPE_ENDPOINT 5
-#define USB_DESC_TYPE_DEVICE_QUALIFIER 6
-#define USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION 7
-#define USB_DESC_TYPE_BOS 15
-#define USB_DESC_TYPE_DEVICE_CAPABILITY 16
-
-#define USB_DEVICE_CAPABILITY_PLATFORM 5
-
-#define USB_CONFIG_REMOTE_WAKEUP 2
-#define USB_CONFIG_SELF_POWERED 1
-
-#define USB_FEATURE_EP_HALT 0
-#define USB_FEATURE_REMOTE_WAKEUP 1
-#define USB_FEATURE_TEST_MODE 2
-
-#define USB_HS_MAX_PACKET_SIZE 512
-#define USB_FS_MAX_PACKET_SIZE 64
-#define USB_MAX_EP0_SIZE 64
+#define USB_LEN_DEV_QUALIFIER_DESC 0x0AU
+#define USB_LEN_DEV_DESC 0x12U
+#define USB_LEN_CFG_DESC 0x09U
+#define USB_LEN_IF_DESC 0x09U
+#define USB_LEN_EP_DESC 0x07U
+#define USB_LEN_OTG_DESC 0x03U
+#define USB_LEN_LANGID_STR_DESC 0x04U
+#define USB_LEN_OTHER_SPEED_DESC_SIZ 0x09U
+
+#define USBD_IDX_LANGID_STR 0x00U
+#define USBD_IDX_MFC_STR 0x01U
+#define USBD_IDX_PRODUCT_STR 0x02U
+#define USBD_IDX_SERIAL_STR 0x03U
+#define USBD_IDX_CONFIG_STR 0x04U
+#define USBD_IDX_INTERFACE_STR 0x05U
+
+#define USB_REQ_TYPE_STANDARD 0x00U
+#define USB_REQ_TYPE_CLASS 0x20U
+#define USB_REQ_TYPE_VENDOR 0x40U
+#define USB_REQ_TYPE_MASK 0x60U
+
+#define USB_REQ_RECIPIENT_DEVICE 0x00U
+#define USB_REQ_RECIPIENT_INTERFACE 0x01U
+#define USB_REQ_RECIPIENT_ENDPOINT 0x02U
+#define USB_REQ_RECIPIENT_MASK 0x1FU
+
+#define USB_REQ_GET_STATUS 0x00U
+#define USB_REQ_CLEAR_FEATURE 0x01U
+#define USB_REQ_SET_FEATURE 0x03U
+#define USB_REQ_SET_ADDRESS 0x05U
+#define USB_REQ_GET_DESCRIPTOR 0x06U
+#define USB_REQ_SET_DESCRIPTOR 0x07U
+#define USB_REQ_GET_CONFIGURATION 0x08U
+#define USB_REQ_SET_CONFIGURATION 0x09U
+#define USB_REQ_GET_INTERFACE 0x0AU
+#define USB_REQ_SET_INTERFACE 0x0BU
+#define USB_REQ_SYNCH_FRAME 0x0CU
+
+#define USB_DESC_TYPE_DEVICE 0x01U
+#define USB_DESC_TYPE_CONFIGURATION 0x02U
+#define USB_DESC_TYPE_STRING 0x03U
+#define USB_DESC_TYPE_INTERFACE 0x04U
+#define USB_DESC_TYPE_ENDPOINT 0x05U
+#define USB_DESC_TYPE_DEVICE_QUALIFIER 0x06U
+#define USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION 0x07U
+#define USB_DESC_TYPE_BOS 0x0FU
+#define USB_DESC_TYPE_DEVICE_CAPABILITY 0x10U
+
+#define USB_DEVICE_CAPABILITY_PLATFORM 0x05U
+
+#define USB_CONFIG_REMOTE_WAKEUP 0x02U
+#define USB_CONFIG_SELF_POWERED 0x01U
+
+#define USB_FEATURE_EP_HALT 0x00U
+#define USB_FEATURE_REMOTE_WAKEUP 0x01U
+#define USB_FEATURE_TEST_MODE 0x02U
+
+#define USB_HS_MAX_PACKET_SIZE 512U
+#define USB_FS_MAX_PACKET_SIZE 64U
+#define USB_MAX_EP0_SIZE 64U
/* Device Status */
-#define USBD_STATE_DEFAULT 1
-#define USBD_STATE_ADDRESSED 2
-#define USBD_STATE_CONFIGURED 3
-#define USBD_STATE_SUSPENDED 4
+#define USBD_STATE_DEFAULT 0x01U
+#define USBD_STATE_ADDRESSED 0x02U
+#define USBD_STATE_CONFIGURED 0x03U
+#define USBD_STATE_SUSPENDED 0x04U
/* EP0 State */
-#define USBD_EP0_IDLE 0
-#define USBD_EP0_SETUP 1
-#define USBD_EP0_DATA_IN 2
-#define USBD_EP0_DATA_OUT 3
-#define USBD_EP0_STATUS_IN 4
-#define USBD_EP0_STATUS_OUT 5
-#define USBD_EP0_STALL 6
+#define USBD_EP0_IDLE 0x00U
+#define USBD_EP0_SETUP 0x01U
+#define USBD_EP0_DATA_IN 0x02U
+#define USBD_EP0_DATA_OUT 0x03U
+#define USBD_EP0_STATUS_IN 0x04U
+#define USBD_EP0_STATUS_OUT 0x05U
+#define USBD_EP0_STALL 0x06U
-#define USBD_EP_TYPE_CTRL 0
-#define USBD_EP_TYPE_ISOC 1
-#define USBD_EP_TYPE_BULK 2
-#define USBD_EP_TYPE_INTR 3
+#define USBD_EP_TYPE_CTRL 0x00U
+#define USBD_EP_TYPE_ISOC 0x01U
+#define USBD_EP_TYPE_BULK 0x02U
+#define USBD_EP_TYPE_INTR 0x03U
/**
@@ -179,7 +171,7 @@ typedef struct _Device_cb
uint8_t *(*GetFSConfigDescriptor)(uint16_t *length);
uint8_t *(*GetOtherSpeedConfigDescriptor)(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);
#endif
@@ -188,14 +180,14 @@ typedef struct _Device_cb
/* Following USB Device Speed */
typedef enum
{
- USBD_SPEED_HIGH = 0,
- USBD_SPEED_FULL = 1,
- USBD_SPEED_LOW = 2,
+ USBD_SPEED_HIGH = 0U,
+ USBD_SPEED_FULL = 1U,
+ USBD_SPEED_LOW = 2U,
}USBD_SpeedTypeDef;
/* Following USB Device status */
typedef enum {
- USBD_OK = 0,
+ USBD_OK = 0U,
USBD_BUSY,
USBD_FAIL,
}USBD_StatusTypeDef;
@@ -210,7 +202,7 @@ typedef struct
uint8_t *(*GetSerialStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
uint8_t *(*GetConfigurationStrDescriptor)( 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);
#endif
} USBD_DescriptorsTypeDef;
@@ -219,6 +211,7 @@ typedef struct
typedef struct
{
uint32_t status;
+ uint32_t is_used;
uint32_t total_length;
uint32_t rem_length;
uint32_t maxpacket;
@@ -261,10 +254,10 @@ typedef struct _USBD_HandleTypeDef
* @{
*/
#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 HIBYTE(x) ((uint8_t)((x & 0xFF00) >>8))
+#define LOBYTE(x) ((uint8_t)(x & 0x00FFU))
+#define HIBYTE(x) ((uint8_t)((x & 0xFF00U) >> 8U))
#ifndef MIN
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#endif
@@ -272,6 +265,7 @@ typedef struct _USBD_HandleTypeDef
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#endif
+
#if defined ( __GNUC__ )
#ifndef __weak
#define __weak __attribute__((weak))
diff --git a/core/embed/trezorhal/usbd_ioreq.c b/core/embed/trezorhal/usbd_ioreq.c
index ebbdd3b15..145798deb 100644
--- a/core/embed/trezorhal/usbd_ioreq.c
+++ b/core/embed/trezorhal/usbd_ioreq.c
@@ -4,25 +4,17 @@
******************************************************************************
* @file usbd_ioreq.c
* @author MCD Application Team
- * @version V2.4.2
- * @date 11-December-2015
* @brief This file provides the IO requests APIs for control endpoints.
******************************************************************************
* @attention
*
- * © COPYRIGHT 2015 STMicroelectronics
+ * © Copyright (c) 2015 STMicroelectronics.
+ * All rights reserved.
*
- * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * 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.
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * http://www.st.com/SLA0044
*
******************************************************************************
*/
@@ -94,16 +86,16 @@
* @param len: length of data to be sent
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlSendData (USBD_HandleTypeDef *pdev,
- uint8_t *pbuf,
- uint16_t len)
+USBD_StatusTypeDef USBD_CtlSendData (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
+ uint16_t len)
{
/* 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].rem_length = len;
+
/* Start the transfer */
- USBD_LL_Transmit (pdev, 0x00, pbuf, len);
+ USBD_LL_Transmit (pdev, 0x00U, pbuf, len);
return USBD_OK;
}
@@ -116,12 +108,11 @@ USBD_StatusTypeDef USBD_CtlSendData (USBD_HandleTypeDef *pdev,
* @param len: length of data to be sent
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlContinueSendData (USBD_HandleTypeDef *pdev,
- uint8_t *pbuf,
- uint16_t len)
+USBD_StatusTypeDef USBD_CtlContinueSendData (USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint16_t len)
{
/* Start the next transfer */
- USBD_LL_Transmit (pdev, 0x00, pbuf, len);
+ USBD_LL_Transmit (pdev, 0x00U, pbuf, len);
return USBD_OK;
}
@@ -134,19 +125,16 @@ USBD_StatusTypeDef USBD_CtlContinueSendData (USBD_HandleTypeDef *pdev,
* @param len: length of data to be received
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlPrepareRx (USBD_HandleTypeDef *pdev,
- uint8_t *pbuf,
- uint16_t len)
+USBD_StatusTypeDef USBD_CtlPrepareRx (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
+ uint16_t len)
{
/* Set EP0 State */
pdev->ep0_state = USBD_EP0_DATA_OUT;
pdev->ep_out[0].total_length = len;
pdev->ep_out[0].rem_length = len;
+
/* Start the transfer */
- USBD_LL_PrepareReceive (pdev,
- 0,
- pbuf,
- len);
+ USBD_LL_PrepareReceive (pdev, 0U, pbuf, len);
return USBD_OK;
}
@@ -159,31 +147,27 @@ USBD_StatusTypeDef USBD_CtlPrepareRx (USBD_HandleTypeDef *pdev,
* @param len: length of data to be received
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlContinueRx (USBD_HandleTypeDef *pdev,
- uint8_t *pbuf,
- uint16_t len)
+USBD_StatusTypeDef USBD_CtlContinueRx (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
+ uint16_t len)
{
+ USBD_LL_PrepareReceive(pdev, 0U, pbuf, len);
- USBD_LL_PrepareReceive (pdev,
- 0,
- pbuf,
- len);
return USBD_OK;
}
+
/**
* @brief USBD_CtlSendStatus
* send zero lzngth packet on the ctl pipe
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlSendStatus (USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_CtlSendStatus (USBD_HandleTypeDef *pdev)
{
-
/* Set EP0 State */
pdev->ep0_state = USBD_EP0_STATUS_IN;
- /* Start the transfer */
- USBD_LL_Transmit (pdev, 0x00, NULL, 0);
+ /* Start the transfer */
+ USBD_LL_Transmit(pdev, 0x00U, NULL, 0U);
return USBD_OK;
}
@@ -194,21 +178,17 @@ USBD_StatusTypeDef USBD_CtlSendStatus (USBD_HandleTypeDef *pdev)
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlReceiveStatus (USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_CtlReceiveStatus (USBD_HandleTypeDef *pdev)
{
/* Set EP0 State */
pdev->ep0_state = USBD_EP0_STATUS_OUT;
/* Start the transfer */
- USBD_LL_PrepareReceive ( pdev,
- 0,
- NULL,
- 0);
+ USBD_LL_PrepareReceive (pdev, 0U, NULL, 0U);
return USBD_OK;
}
-
/**
* @brief USBD_GetRxCount
* returns the received data length
@@ -216,7 +196,7 @@ USBD_StatusTypeDef USBD_CtlReceiveStatus (USBD_HandleTypeDef *pdev)
* @param ep_addr: endpoint address
* @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);
}
diff --git a/core/embed/trezorhal/usbd_ioreq.h b/core/embed/trezorhal/usbd_ioreq.h
index 78e6d2f17..d6f2c5bce 100644
--- a/core/embed/trezorhal/usbd_ioreq.h
+++ b/core/embed/trezorhal/usbd_ioreq.h
@@ -4,25 +4,17 @@
******************************************************************************
* @file usbd_ioreq.h
* @author MCD Application Team
- * @version V2.4.2
- * @date 11-December-2015
* @brief Header file for the usbd_ioreq.c file
******************************************************************************
* @attention
*
- * © COPYRIGHT 2015 STMicroelectronics
+ * © Copyright (c) 2015 STMicroelectronics.
+ * All rights reserved.
*
- * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * 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.
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * http://www.st.com/SLA0044
*
******************************************************************************
*/
@@ -87,8 +79,8 @@
* @{
*/
-USBD_StatusTypeDef USBD_CtlSendData (USBD_HandleTypeDef *pdev,
- uint8_t *buf,
+USBD_StatusTypeDef USBD_CtlSendData (USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf,
uint16_t len);
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);
-uint16_t USBD_GetRxCount (USBD_HandleTypeDef *pdev ,
- uint8_t epnum);
+uint32_t USBD_GetRxCount (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
/**
* @}