/******************** (C) COPYRIGHT 2011 STMicroelectronics ********************
|
* File Name : otgd_fs_dev.c
|
* Author : STMicroelectronics
|
* Version : V3.3.0
|
* Date : 21-March-2011
|
* Description : High Layer device mode interface and wrapping layer.
|
********************************************************************************
|
* THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
*******************************************************************************/
|
|
#ifdef STM32F10X_CL
|
|
/* Includes ------------------------------------------------------------------*/
|
#include "otgd_fs_dev.h"
|
#include "usb_regs.h"
|
#include "otgd_fs_cal.h"
|
#include "otgd_fs_pcd.h"
|
|
/* Private typedef -----------------------------------------------------------*/
|
/* Private define ------------------------------------------------------------*/
|
/* Private macro -------------------------------------------------------------*/
|
/* Private variables ---------------------------------------------------------*/
|
/* Extern variables ----------------------------------------------------------*/
|
/* Private function prototypes -----------------------------------------------*/
|
|
/* Private functions ---------------------------------------------------------*/
|
|
/*******************************************************************************
|
* Function Name : OTG_DEV_Init
|
* Description : Initialize the OTG Device IP and EP0.
|
* Input : None.
|
* Output : None.
|
* Return : None.
|
*******************************************************************************/
|
void OTG_DEV_Init(void)
|
{
|
EP_DESCRIPTOR ep_descriptor;
|
|
/* Init peripheral driver */
|
PCD_Init();
|
|
/* Configure and open the IN control EP0 */
|
ep_descriptor.bEndpointAddress = 0x80;
|
ep_descriptor.wMaxPacketSize = 64;
|
ep_descriptor.bmAttributes = USB_ENDPOINT_XFER_CONTROL;
|
PCD_EP_Open(&ep_descriptor);
|
|
/* Configure and open the OUT control EP0 */
|
ep_descriptor.bEndpointAddress = 0x00;
|
PCD_EP_Open(&ep_descriptor);
|
|
OTGD_FS_EPStartXfer(PCD_GetOutEP(0));
|
|
/* Enable EP0 to start receiving setup packets */
|
PCD_EP0_OutStart();
|
|
/* Enable USB Global interrupt */
|
OTGD_FS_EnableGlobalInt();
|
}
|
|
|
/*******************************************************************************
|
* Function Name : OTG_DEV_EP_Init
|
* Description : Initialize the selected endpoint parameters
|
* Input : - bEpAdd: address of the endpoint (epnum|epdir)
|
* example: EP1 OUT -> 0x01 and EP1 IN 0x81.
|
* - bEpType: OTG_DEV_EP_TYPE_CONTROL, OTG_DEV_EP_TYPE_ISOC,
|
* OTG_DEV_EP_TYPE_BULK, OTG_DEV_EP_TYPE_INT
|
* - wEpMaxPackSize: The EP max packet size.
|
* Output : None.
|
* Return : Status: New status to be set for the endpoint:
|
*******************************************************************************/
|
void OTG_DEV_EP_Init(uint8_t bEpAdd, uint8_t bEpType, uint16_t wEpMaxPackSize)
|
{
|
EP_DESCRIPTOR ep_descriptor;
|
USB_OTG_EP *ep;
|
|
/* Set the EP parameters in a structure */
|
ep_descriptor.bEndpointAddress = bEpAdd;
|
ep_descriptor.bmAttributes = bEpType;
|
ep_descriptor.wMaxPacketSize = wEpMaxPackSize;
|
|
PCD_EP_Flush(bEpAdd);
|
|
/* Open the EP with entered parameters */
|
PCD_EP_Open(&ep_descriptor);
|
|
/* Activate the EP if it is an OUT EP */
|
if ((bEpAdd & 0x80) == 0)
|
{
|
ep = PCD_GetOutEP(bEpAdd & 0x7F);
|
OTGD_FS_EPStartXfer(ep);
|
}
|
else
|
{
|
ep = PCD_GetInEP(bEpAdd & 0x7F);
|
ep->even_odd_frame = 0;
|
OTG_DEV_SetEPTxStatus(bEpAdd, DEV_EP_TX_NAK);
|
}
|
|
}
|
|
/*******************************************************************************
|
* Function Name : OTG_DEV_GetEPTxStatus
|
* Description : Set the related endpoint status.
|
* Input : Number of the endpoint.
|
* Output : None.
|
* Return : Status: New status to be set for the endpoint:
|
*******************************************************************************/
|
uint32_t OTG_DEV_GetEPTxStatus(uint8_t bEpnum)
|
{
|
USB_OTG_EP *ep;
|
uint32_t status = 0;
|
|
ep = PCD_GetInEP(bEpnum & 0x7F);
|
|
status = OTGD_FS_GetEPStatus(ep);
|
|
return status;
|
}
|
|
/*******************************************************************************
|
* Function Name : OTG_DEV_GetEPRxStatus
|
* Description : returns the related endpoint status.
|
* Input : Number of the endpoint.
|
* Output : None.
|
* Return : Status: New status to be set for the endpoint:
|
*******************************************************************************/
|
uint32_t OTG_DEV_GetEPRxStatus(uint8_t bEpnum)
|
{
|
USB_OTG_EP *ep;
|
uint32_t status = 0;
|
|
ep = PCD_GetOutEP(bEpnum & 0x7F);
|
|
status = OTGD_FS_GetEPStatus(ep);
|
|
return status;
|
}
|
|
/*******************************************************************************
|
* Function Name : OTG_DEV_SetEPTxStatus
|
* Description : Sets the related endpoint status.
|
* Input : - bEpnum: Number of the endpoint.
|
* - Status: New status to be set for the endpoint. It can be
|
* DEV_EP_TX_VALID, DEV_EP_TX_STALL, DEV_EP_TX_NAK or
|
* DEV_EP_TX_DISABLE.
|
* Output : None.
|
* Return : None.
|
*******************************************************************************/
|
void OTG_DEV_SetEPTxStatus(uint8_t bEpnum, uint32_t Status)
|
{
|
USB_OTG_EP *ep;
|
|
ep = PCD_GetInEP(bEpnum & 0x7F);
|
|
if ((bEpnum == 0x80) && (Status == DEV_EP_TX_STALL))
|
{
|
ep->is_in = 1;
|
}
|
|
OTGD_FS_SetEPStatus(ep, Status);
|
}
|
|
/*******************************************************************************
|
* Function Name : OTG_DEV_SetEPRxStatus
|
* Description : Sets the related endpoint status.
|
* Input : - bEpnum: Number of the endpoint.
|
* - Status: New status to be set for the endpoint. It can be
|
* DEV_EP_RX_VALID, DEV_EP_RX_STALL, DEV_EP_RX_NAK or
|
* DEV_EP_RX_DISABLE.
|
* Output : None.
|
* Return : None.
|
*******************************************************************************/
|
void OTG_DEV_SetEPRxStatus(uint8_t bEpnum, uint32_t Status)
|
{
|
USB_OTG_EP *ep;
|
|
ep = PCD_GetOutEP(bEpnum & 0x7F);
|
|
OTGD_FS_SetEPStatus(ep, Status);
|
}
|
|
/*******************************************************************************
|
* Function Name : USB_DevDisconnect
|
* Description : Disconnect the Pull-up resist.
|
* Input : bEpNum: Endpoint Number.
|
* wState: new state.
|
* Output : None.
|
* Return : None.
|
*******************************************************************************/
|
void USB_DevDisconnect(void)
|
{
|
PCD_DevDisconnect();
|
}
|
|
/*******************************************************************************
|
* Function Name : USB_DevConnect
|
* Description : Disconnect the .
|
* Input : bEpNum: Endpoint Number.
|
* wState: new state.
|
* Output : None.
|
* Return : None.
|
*******************************************************************************/
|
void USB_DevConnect(void)
|
{
|
PCD_DevConnect();
|
}
|
|
/*-*-*-*-*-*-*-*-*-* Replace the usb_regs.h defines -*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
/*******************************************************************************
|
* Function Name : SetEPTxStatus
|
* Description : Set the status of Tx endpoint.
|
* Input : bEpNum: Endpoint Number.
|
* wState: new state.
|
* Output : None.
|
* Return : None.
|
*******************************************************************************/
|
void SetEPTxStatus(uint8_t bEpNum, uint16_t wState)
|
{
|
_SetEPTxStatus(bEpNum, wState);
|
}
|
|
/*******************************************************************************
|
* Function Name : SetEPRxStatus
|
* Description : Set the status of Rx endpoint.
|
* Input : bEpNum: Endpoint Number.
|
* wState: new state.
|
* Output : None.
|
* Return : None.
|
*******************************************************************************/
|
void SetEPRxStatus(uint8_t bEpNum, uint16_t wState)
|
{
|
_SetEPRxStatus(bEpNum, wState);
|
}
|
|
/*******************************************************************************
|
* Function Name : GetEPTxStatus
|
* Description : Returns the endpoint Tx status.
|
* Input : bEpNum: Endpoint Number.
|
* Output : None.
|
* Return : Endpoint TX Status
|
*******************************************************************************/
|
uint16_t GetEPTxStatus(uint8_t bEpNum)
|
{
|
return(_GetEPTxStatus(bEpNum));
|
}
|
|
/*******************************************************************************
|
* Function Name : GetEPRxStatus
|
* Description : Returns the endpoint Rx status.
|
* Input : bEpNum: Endpoint Number.
|
* Output : None.
|
* Return : Endpoint RX Status
|
*******************************************************************************/
|
uint16_t GetEPRxStatus(uint8_t bEpNum)
|
{
|
return(_GetEPRxStatus(bEpNum));
|
}
|
|
/*******************************************************************************
|
* Function Name : SetEPTxValid
|
* Description : Valid the endpoint Tx Status.
|
* Input : bEpNum: Endpoint Number.
|
* Output : None.
|
* Return : None.
|
*******************************************************************************/
|
void SetEPTxValid(uint8_t bEpNum)
|
{
|
_SetEPTxStatus(bEpNum, EP_TX_VALID);
|
}
|
|
/*******************************************************************************
|
* Function Name : SetEPRxValid
|
* Description : Valid the endpoint Rx Status.
|
* Input : bEpNum: Endpoint Number.
|
* Output : None.
|
* Return : None.
|
*******************************************************************************/
|
void SetEPRxValid(uint8_t bEpNum)
|
{
|
_SetEPRxStatus(bEpNum, EP_RX_VALID);
|
}
|
|
/*******************************************************************************
|
* Function Name : GetTxStallStatus
|
* Description : Returns the Stall status of the Tx endpoint.
|
* Input : bEpNum: Endpoint Number.
|
* Output : None.
|
* Return : Tx Stall status.
|
*******************************************************************************/
|
uint16_t GetTxStallStatus(uint8_t bEpNum)
|
{
|
return(_GetTxStallStatus(bEpNum));
|
}
|
|
/*******************************************************************************
|
* Function Name : GetRxStallStatus
|
* Description : Returns the Stall status of the Rx endpoint.
|
* Input : bEpNum: Endpoint Number.
|
* Output : None.
|
* Return : Rx Stall status.
|
*******************************************************************************/
|
uint16_t GetRxStallStatus(uint8_t bEpNum)
|
{
|
return(_GetRxStallStatus(bEpNum));
|
}
|
|
/*******************************************************************************
|
* Function Name : SetEPTxCount.
|
* Description : Set the Tx count.
|
* Input : bEpNum: Endpoint Number.
|
* wCount: new count value.
|
* Output : None.
|
* Return : None.
|
*******************************************************************************/
|
void SetEPTxCount(uint8_t bEpNum, uint16_t wCount)
|
{
|
}
|
|
/*******************************************************************************
|
* Function Name : SetEPRxCount
|
* Description : Set the Rx count.
|
* Input : bEpNum: Endpoint Number.
|
* wCount: the new count value.
|
* Output : None.
|
* Return : None.
|
*******************************************************************************/
|
void SetEPRxCount(uint8_t bEpNum, uint16_t wCount)
|
{
|
}
|
|
/*******************************************************************************
|
* Function Name : ToWord
|
* Description : merge two byte in a word.
|
* Input : bh: byte high, bl: bytes low.
|
* Output : None.
|
* Return : resulted word.
|
*******************************************************************************/
|
uint16_t ToWord(uint8_t bh, uint8_t bl)
|
{
|
uint16_t wRet = 0;
|
wRet = (uint16_t)bl | ((uint16_t)bh << 8);
|
return(wRet);
|
}
|
|
/*******************************************************************************
|
* Function Name : ByteSwap
|
* Description : Swap two byte in a word.
|
* Input : wSwW: word to Swap.
|
* Output : None.
|
* Return : resulted word.
|
*******************************************************************************/
|
uint16_t ByteSwap(uint16_t wSwW)
|
{
|
uint8_t bTemp = 0;
|
uint16_t wRet = 0;
|
|
bTemp = (uint8_t)(wSwW & 0xff);
|
wRet = (wSwW >> 8) | ((uint16_t)bTemp << 8);
|
return(wRet);
|
}
|
|
#endif /* STM32F10X_CL */
|
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|