text: /**
    ******************************************************************************
    * @file    usb_sil.c
    * @author  MCD Application Team
    * @version V4.0.0
    * @date    28-August-2012
    * @brief   Simplified Interface Layer for Global Initialization and Endpoint
    *          Rea/Write operations.
    ******************************************************************************
    * @attention
    *
    * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
    *
    * 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.
    *
    ******************************************************************************
    */
  
  
  /* Includes ------------------------------------------------------------------*/
  #include "usb_lib.h"
  
  /* Private typedef -----------------------------------------------------------*/
  /* Private define ------------------------------------------------------------*/
  /* Private macro -------------------------------------------------------------*/
  /* Private variables ---------------------------------------------------------*/
  /* Extern variables ----------------------------------------------------------*/
  /* Private function prototypes -----------------------------------------------*/
  /* Private functions ---------------------------------------------------------*/
  
  /*******************************************************************************
  * Function Name  : USB_SIL_Init
  * Description    : Initialize the USB Device IP and the Endpoint 0.
  * Input          : None.
  * Output         : None.
  * Return         : Status.
  *******************************************************************************/
  uint32_t USB_SIL_Init(void)
  {
      /* USB interrupts initialization */
      /* clear pending interrupts */
      _SetISTR(0);
      wInterrupt_Mask = IMR_MSK;
      /* set interrupts mask */
      _SetCNTR(wInterrupt_Mask);
      return 0;
  }
  
  /*******************************************************************************
  * Function Name  : USB_SIL_Write
  * Description    : Write a buffer of data to a selected endpoint.
  * Input          : - bEpAddr: The address of the non control endpoint.
  *                  - pBufferPointer: The pointer to the buffer of data to be written
  *                    to the endpoint.
  *                  - wBufferSize: Number of data to be written (in bytes).
  * Output         : None.
  * Return         : Status.
  *******************************************************************************/
  uint32_t USB_SIL_Write(uint8_t bEpAddr, uint8_t *pBufferPointer, uint32_t wBufferSize)
  {
      /* Use the memory interface function to write to the selected endpoint */
      UserToPMABufferCopy(pBufferPointer, GetEPTxAddr(bEpAddr & 0x7F), wBufferSize);
  
      /* Update the data length in the control register */
      SetEPTxCount((bEpAddr & 0x7F), wBufferSize);
  
      return 0;
  }
  
  /*******************************************************************************
  * Function Name  : USB_SIL_Read
  * Description    : Write a buffer of data to a selected endpoint.
  * Input          : - bEpAddr: The address of the non control endpoint.
  *                  - pBufferPointer: The pointer to which will be saved the
  *                     received data buffer.
  * Output         : None.
  * Return         : Number of received data (in Bytes).
  *******************************************************************************/
  uint32_t USB_SIL_Read(uint8_t bEpAddr, uint8_t *pBufferPointer)
  {
      uint32_t DataLength = 0;
  
      /* Get the number of received data on the selected Endpoint */
      DataLength = GetEPRxCount(bEpAddr & 0x7F);
  
      /* Use the memory interface function to write to the selected endpoint */
      PMAToUserBufferCopy(pBufferPointer, GetEPRxAddr(bEpAddr & 0x7F), DataLength);
  
      /* Return the number of received data */
      return DataLength;
  }
  
  /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
  