]> git.friedersdorff.com Git - max/tmk_keyboard.git/blob - tmk_core/tool/mbed/mbed-sdk/libraries/mbed/targets/cmsis/TARGET_STM/TARGET_STM32F4/stm32f4xx_hal_pcd_ex.c
Merge commit '22b6e15a179031afb7c3534cf7b109b0668b602c'
[max/tmk_keyboard.git] / tmk_core / tool / mbed / mbed-sdk / libraries / mbed / targets / cmsis / TARGET_STM / TARGET_STM32F4 / stm32f4xx_hal_pcd_ex.c
1 /**
2   ******************************************************************************
3   * @file    stm32f4xx_hal_pcd_ex.c
4   * @author  MCD Application Team
5   * @version V1.1.0
6   * @date    19-June-2014
7   * @brief   PCD HAL module driver.
8   *          This file provides firmware functions to manage the following 
9   *          functionalities of the USB Peripheral Controller:
10   *           + Extended features functions
11   *
12   ******************************************************************************
13   * @attention
14   *
15   * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
16   *
17   * Redistribution and use in source and binary forms, with or without modification,
18   * are permitted provided that the following conditions are met:
19   *   1. Redistributions of source code must retain the above copyright notice,
20   *      this list of conditions and the following disclaimer.
21   *   2. Redistributions in binary form must reproduce the above copyright notice,
22   *      this list of conditions and the following disclaimer in the documentation
23   *      and/or other materials provided with the distribution.
24   *   3. Neither the name of STMicroelectronics nor the names of its contributors
25   *      may be used to endorse or promote products derived from this software
26   *      without specific prior written permission.
27   *
28   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
29   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
30   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
31   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
32   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
33   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
34   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
35   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
36   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38   *
39   ******************************************************************************
40   */ 
41
42 /* Includes ------------------------------------------------------------------*/
43 #include "stm32f4xx_hal.h"
44
45 /** @addtogroup STM32F4xx_HAL_Driver
46   * @{
47   */
48
49 /** @defgroup PCDEx 
50   * @brief PCD Extended HAL module driver
51   * @{
52   */
53
54 #ifdef HAL_PCD_MODULE_ENABLED
55
56 /* Private typedef -----------------------------------------------------------*/
57 /* Private define ------------------------------------------------------------*/
58 /* Private macro -------------------------------------------------------------*/
59 /* Private variables ---------------------------------------------------------*/
60 /* Private function prototypes -----------------------------------------------*/
61 /* Private functions ---------------------------------------------------------*/
62
63 /** @defgroup PCDEx_Private_Functions
64   * @{
65   */
66
67   
68 /** @defgroup PCDEx_Group1 Extended features functions 
69  *  @brief    Extended features functions  
70  *
71 @verbatim   
72  ===============================================================================
73                  ##### Extended features functions #####
74  ===============================================================================  
75     [..]  This section provides functions allowing to:
76       (+) Update FIFO configuration
77
78 @endverbatim
79   * @{
80   */
81
82 /**
83   * @brief  Update FIFO configuration
84   * @param  hpcd: PCD handle
85   * @retval HAL status
86   */
87 HAL_StatusTypeDef HAL_PCDEx_SetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo, uint16_t size)
88 {
89   uint8_t i = 0;
90   uint32_t Tx_Offset = 0;
91
92   /*  TXn min size = 16 words. (n  : Transmit FIFO index)
93       When a TxFIFO is not used, the Configuration should be as follows: 
94           case 1 :  n > m    and Txn is not used    (n,m  : Transmit FIFO indexes)
95          --> Txm can use the space allocated for Txn.
96          case2  :  n < m    and Txn is not used    (n,m  : Transmit FIFO indexes)
97          --> Txn should be configured with the minimum space of 16 words
98      The FIFO is used optimally when used TxFIFOs are allocated in the top 
99          of the FIFO.Ex: use EP1 and EP2 as IN instead of EP1 and EP3 as IN ones.
100      When DMA is used 3n * FIFO locations should be reserved for internal DMA registers */
101   
102   Tx_Offset = hpcd->Instance->GRXFSIZ;
103   
104   if(fifo == 0)
105   {
106     hpcd->Instance->DIEPTXF0_HNPTXFSIZ = (size << 16) | Tx_Offset;
107   }
108   else
109   {
110     Tx_Offset += (hpcd->Instance->DIEPTXF0_HNPTXFSIZ) >> 16;
111     for (i = 0; i < (fifo - 1); i++)
112     {
113       Tx_Offset += (hpcd->Instance->DIEPTXF[i] >> 16);
114     }
115     
116     /* Multiply Tx_Size by 2 to get higher performance */
117     hpcd->Instance->DIEPTXF[fifo - 1] = (size << 16) | Tx_Offset;
118     
119   }
120   
121   return HAL_OK;
122 }
123
124 /**
125   * @brief  Update FIFO configuration
126   * @param  hpcd: PCD handle
127   * @retval HAL status
128   */
129 HAL_StatusTypeDef HAL_PCDEx_SetRxFiFo(PCD_HandleTypeDef *hpcd, uint16_t size)
130 {
131   
132   hpcd->Instance->GRXFSIZ = size;
133   
134   return HAL_OK;
135 }
136
137 /**
138   * @}
139   */
140
141 /**
142   * @}
143   */
144
145 #endif /* HAL_PCD_MODULE_ENABLED */
146 /**
147   * @}
148   */
149
150 /**
151   * @}
152   */
153
154 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/