/** ****************************************************************************** * @file usb_sil.c * @author MCD Application Team * @version V3.4.0 * @date 29-June-2012 * @brief Simplified Interface Layer for Global Initialization and Endpoint * Rea/Write operations. ****************************************************************************** * @attention * *

© COPYRIGHT 2012 STMicroelectronics

* * 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) { //#ifndef STM32F10X_CL /* USB interrupts initialization */ /* clear pending interrupts */ _SetISTR(0); wInterrupt_Mask = IMR_MSK; /* set interrupts mask */ _SetCNTR(wInterrupt_Mask); //#else // /* Perform OTG Device initialization procedure (including EP0 init) */ // OTG_DEV_Init(); // //#endif /* STM32F10X_CL */ 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) { #ifndef STM32F10X_CL /* 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); #else /* Use the PCD interface layer function to write to the selected endpoint */ PCD_EP_Write (bEpAddr, pBufferPointer, wBufferSize); #endif /* STM32F10X_CL */ 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; #ifndef STM32F10X_CL /* 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); #else USB_OTG_EP *ep; /* Get the structure pointer of the selected Endpoint */ ep = PCD_GetOutEP(bEpAddr); /* Get the number of received data */ DataLength = ep->xfer_len; /* Use the PCD interface layer function to read the selected endpoint */ PCD_EP_Read (bEpAddr, pBufferPointer, DataLength); #endif /* STM32F10X_CL */ /* Return the number of received data */ return DataLength; } /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/