text: /**
    ******************************************************************************
    * @file    stm32l1xx_hal_pcd_ex.c
    * @author  MCD Application Team
    * @version V1.1.1
    * @date    31-March-2015
    * @brief   Extended PCD HAL module driver.
    *          This file provides firmware functions to manage the following 
    *          functionalities of the USB Peripheral Controller:
    *           + Configururation of the PMA for EP
    *         
    ******************************************************************************
    * @attention
    *
    * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
    *
    * Redistribution and use in source and binary forms, with or without modification,
    * are permitted provided that the following conditions are met:
    *   1. Redistributions 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 its contributors
    *      may be used to endorse or promote products derived from this software
    *      without specific prior written permission.
    *
    * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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 ------------------------------------------------------------------*/
  #include "stm32l1xx_hal.h"
  
  /** @addtogroup STM32L1xx_HAL_Driver
    * @{
    */
  
  /** @defgroup PCDEx PCDEx
    * @brief PCDEx HAL module driver
    * @{
    */
  
  #ifdef HAL_PCD_MODULE_ENABLED
  
  /* Private typedef -----------------------------------------------------------*/
  /* Private define ------------------------------------------------------------*/
  /* Private macro -------------------------------------------------------------*/
  /* Private variables ---------------------------------------------------------*/
  /* Private function prototypes -----------------------------------------------*/
  /* Private functions ---------------------------------------------------------*/
  
  
  /** @defgroup PCDEx_Exported_Functions PCDEx Exported Functions
    * @{
    */
  
  /** @defgroup PCDEx_Exported_Functions_Group2 Extended Peripheral Control functions
    * @brief    Extended Peripheral Control functions
    *
  @verbatim   
   ===============================================================================
               ##### Peripheral Control functions #####
   ===============================================================================  
      [..]  This section provides functions allowing to:
        (+) Configure PMA for the EndPoint
        
  @endverbatim
    * @{
    */
    
  /**
    * @brief Configure PMA for EP
    * @param  hpcd : Device instance
    * @param  ep_addr: endpoint address
    * @param  ep_kind: endpoint Kind
    *                  USB_SNG_BUF: Single Buffer used
    *                  USB_DBL_BUF: Double Buffer used
    * @param  pmaadress: EP address in The PMA: In case of single buffer endpoint
    *                   this parameter is 16-bit value providing the address
    *                   in PMA allocated to endpoint.
    *                   In case of double buffer endpoint this parameter
    *                   is a 32-bit value providing the endpoint buffer 0 address
    *                   in the LSB part of 32-bit value and endpoint buffer 1 address
    *                   in the MSB part of 32-bit value.
    * @retval : status
    */
  
  HAL_StatusTypeDef  HAL_PCDEx_PMAConfig(PCD_HandleTypeDef *hpcd, 
                          uint16_t ep_addr,
                          uint16_t ep_kind,
                          uint32_t pmaadress)
  
  {
    PCD_EPTypeDef *ep;
    
    /* initialize ep structure*/
    if ((0x80 & ep_addr) == 0x80)
    {
      ep = &hpcd->IN_ep[ep_addr & 0x7F];
    }
    else
    {
      ep = &hpcd->OUT_ep[ep_addr];
    }
    
    /* Here we check if the endpoint is single or double Buffer*/
    if (ep_kind == PCD_SNG_BUF)
    {
      /*Single Buffer*/
      ep->doublebuffer = 0;
      /*Configure te PMA*/
      ep->pmaadress = (uint16_t)pmaadress;
    }
    else /*USB_DBL_BUF*/
    {
      /*Double Buffer Endpoint*/
      ep->doublebuffer = 1;
      /*Configure the PMA*/
      ep->pmaaddr0 =  pmaadress & 0xFFFF;
      ep->pmaaddr1 =  (pmaadress & 0xFFFF0000) >> 16;
    }
    
    return HAL_OK; 
  }
  
  /**
    * @}
    */
  
  /**
    * @}
    */
  
  #endif /* HAL_PCD_MODULE_ENABLED */
  /**
    * @}
    */
  
  /**
    * @}
    */
  
  /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
  