294 lines
12 KiB
C
294 lines
12 KiB
C
/*------------------------------------------------------------
|
|
(C) Copyright [2006-2008] Marvell International Ltd.
|
|
All Rights Reserved
|
|
------------------------------------------------------------*/
|
|
|
|
/*******************************************************************************
|
|
* M O D U L E B O D Y
|
|
*******************************************************************************
|
|
* COPYRIGHT (C) 2003, 2004 Intel Corporation.
|
|
*
|
|
* This software as well as the software described in it is furnished under
|
|
* license and may only be used or copied in accordance with the terms of the
|
|
* license. The information in this file is furnished for informational use
|
|
* only, is subject to change without notice, and should not be construed as
|
|
* a commitment by Intel Corporation. Intel Corporation assumes no
|
|
* responsibility or liability for any errors or inaccuracies that may appear
|
|
* in this document or any software that may be provided in association with
|
|
* this document.
|
|
* Except as permitted by such license, no part of this document may be
|
|
* reproduced, stored in a retrieval system, or transmitted in any form or by
|
|
* any means without the express written consent of Intel Corporation.
|
|
*
|
|
*******************************************************************************
|
|
*
|
|
* Title: USB DEVICE - USB Device API
|
|
*
|
|
* Filename: udc_device.h
|
|
*
|
|
* Author: Yossi Gabay
|
|
*
|
|
* Description: This is the header file for the USB Device Stack & API
|
|
*
|
|
* Notes:
|
|
******************************************************************************/
|
|
|
|
#if !defined(_UDC_DEVICE_H_)
|
|
#define _UDC_DEVICE_H_
|
|
|
|
#include "global_types.h"
|
|
#include "usb_def.h"
|
|
|
|
/*******************************************************************************
|
|
* T Y P E S
|
|
******************************************************************************/
|
|
|
|
/* Available endpoints in configuration - total is 15 */
|
|
typedef enum
|
|
{
|
|
USB_DEVICE_ENDPOINT_0 = 0, /* Control Endpoint */
|
|
USB_DEVICE_ENDPOINT_1 = 1,
|
|
USB_DEVICE_ENDPOINT_2,
|
|
USB_DEVICE_ENDPOINT_3,
|
|
USB_DEVICE_ENDPOINT_4,
|
|
USB_DEVICE_ENDPOINT_5,
|
|
USB_DEVICE_ENDPOINT_6,
|
|
USB_DEVICE_ENDPOINT_7,
|
|
USB_DEVICE_ENDPOINT_8,
|
|
USB_DEVICE_ENDPOINT_9,
|
|
USB_DEVICE_ENDPOINT_10,
|
|
USB_DEVICE_ENDPOINT_11,
|
|
USB_DEVICE_ENDPOINT_12,
|
|
USB_DEVICE_ENDPOINT_13,
|
|
USB_DEVICE_ENDPOINT_14,
|
|
USB_DEVICE_ENDPOINT_15,
|
|
USB_DEVICE_TOTAL_ENDPOINTS
|
|
}USBDevice_EndpointE;
|
|
|
|
/* Device status */
|
|
typedef enum
|
|
{
|
|
USB_DEVICE_STATUS_NOT_CONNECTED = 0,
|
|
USB_DEVICE_STATUS_RESET,
|
|
USB_DEVICE_STATUS_ENUM_IN_PROCESS,
|
|
USB_DEVICE_STATUS_CONNECTED,
|
|
USB_DEVICE_STATUS_SUSPEND //YG - does the user need this?
|
|
}USBDevice_StatusE;
|
|
|
|
/* Device status */
|
|
typedef enum
|
|
{
|
|
USBD_SimulatePlugE_IN = 0,
|
|
USBD_SimulatePlugE_OUT = 1,
|
|
USBD_SimulatePlugE_OUT_AND_IN=2
|
|
}USBD_SimulatePlugE;
|
|
|
|
/* Endpoint usage type */
|
|
typedef enum
|
|
{
|
|
USB_DEVICE_NO_NEED_ZLP = 0,
|
|
USB_DEVICE_NEED_ZLP = 2,
|
|
USB_DEVICE_USAGE_INTERRUPT = 4,
|
|
USB_DEVICE_USAGE_DMA = 8
|
|
}USBDevice_UsageTypeE;
|
|
|
|
typedef enum
|
|
{
|
|
USBCDevice_DataStageDirectionH2D = 0, //OUT
|
|
USBCDevice_DataStageDirectionD2H //IN
|
|
}USBCDevice_DataStageDirectionE;
|
|
|
|
/* Multi-Transmit list */
|
|
typedef struct
|
|
{
|
|
CHAR *pTxBuff;
|
|
UINT32 bufferLength;
|
|
}USBDevice_MultiTransmitListS;
|
|
|
|
/* Return codes */
|
|
typedef enum
|
|
{
|
|
USB_DEVICE_RC_OK = 1,
|
|
USB_DEVICE_RC_ERROR = -100,
|
|
USB_DEVICE_RC_NOT_CONNECTED,
|
|
USB_DEVICE_RC_ENDPOINT_IN_USE,
|
|
USB_DEVICE_RC_ENDPOINT_NOT_OPENED,
|
|
USB_DEVICE_RC_ENDPOINT_BUSY,
|
|
USB_DEVICE_RC_ENDPOINT_STALLED,
|
|
USB_DEVICE_RC_ENDPOINT_NOT_IN_CONFIG,
|
|
USB_DEVICE_RC_TRANSFER_ABORTED,
|
|
USB_DEVICE_RC_OPEN_ERROR,
|
|
USB_DEVICE_RC_BUFFER_ERROR,
|
|
USB_DEVICE_RC_DMA_ERROR
|
|
}USBCDevice_ReturnCodeE;
|
|
|
|
/* USB2.0 Additions Begin */
|
|
typedef enum
|
|
{
|
|
USB_VER_1_1,
|
|
USB_VER_2_0
|
|
}USBDevice_USBVersionE;
|
|
|
|
typedef enum
|
|
{
|
|
USB_SPEED_LS,
|
|
USB_SPEED_FS,
|
|
USB_SPEED_HS
|
|
}USBDevice_USBSpeedE;
|
|
|
|
typedef enum
|
|
{
|
|
AT_MODEM_SINGLE = 1,
|
|
AT_MODEM_DUAL = 2,
|
|
}AT_MODEM_COUNT;
|
|
|
|
|
|
/* USB2.0 Additions end */
|
|
|
|
/*******************************************************************************
|
|
* C A L L B A C K F U N C T I O N S
|
|
******************************************************************************/
|
|
|
|
/* This is a general transaction completed notify function. It is used for
|
|
* 3 different notifications. Each parameter may slightly changes it's function
|
|
* according to the notification type:
|
|
*
|
|
* USBDevice_EndpointE - endpoint: common to all notifications
|
|
*
|
|
* Transmit Completion Notification:
|
|
* UINT8 * - pointer to transmitted buffer
|
|
* UINT32 - length of transmitted buffer
|
|
* BOOL - not in use (dummy)
|
|
*
|
|
* Data Received Notification:
|
|
* UINT8 * - pointer to received buffer
|
|
* UINT32 - length of received buffer
|
|
* BOOL - End-Of-Message
|
|
*
|
|
* Multi Transmit Completion Notification:
|
|
* UINT8 * - NULL (not in use)
|
|
* UINT32 - number of items transmitted in chunk
|
|
* BOOL - End of Multi List
|
|
*/
|
|
typedef void (*USBDeviceTransactionCompletedNotifyFn)(USBDevice_EndpointE,
|
|
UINT8 *,
|
|
UINT32,
|
|
BOOL);
|
|
|
|
/* Notify when the USB Device status changes:
|
|
* USBDevice_StatusE - new USB device status
|
|
*/
|
|
typedef void (*USBDeviceStatusNotifyFn)(USBDevice_StatusE);
|
|
|
|
/* Notify when Vendor or Class Request received from the host (both directions):
|
|
* USB_SetupCmdS * - pointer to the SETUP command
|
|
* USBCDevice_DataStageDirection - data stage direction (0 if no data stage)
|
|
* UINT32 - data stage length (0 if no data stage)
|
|
*/
|
|
typedef void (*USBDeviceVendorClassRequestNotifyFn)(USB_SetupCmdS *);
|
|
|
|
/* Notify when Endpoint ZERO finished it's last operation requested (both directions):
|
|
* USBCDevice_DataStageDirection - data stage direction
|
|
* UINT8 * - pointer to buffer
|
|
* UINT32 - data stage length
|
|
*/
|
|
typedef void (*USBDeviceEndpointZeroNotifyFn)(USB_SetupCmdS *);
|
|
|
|
/*******************************************************************************
|
|
* A P I ' S
|
|
******************************************************************************/
|
|
|
|
USBDevice_USBVersionE USBDeviceGetUSBVersionInUse(void);
|
|
USBDevice_USBSpeedE USBDeviceGetUSBSpeedInUse(void);
|
|
|
|
/* General Transmit/Receive services */
|
|
typedef USBCDevice_ReturnCodeE (*fpUSBDeviceEndpointMultiTransmit)(USBDevice_EndpointE endpoint,
|
|
UINT32 numOfBuffers,
|
|
USBDevice_MultiTransmitListS *pMultiList);
|
|
|
|
typedef USBCDevice_ReturnCodeE (*fpUSBDeviceEndpointTransmit)(USBDevice_EndpointE endpoint,
|
|
UINT8 *pTxBuffer,
|
|
UINT32 txLength,
|
|
BOOL autoZLP);
|
|
|
|
typedef USBCDevice_ReturnCodeE (*fpUSBDeviceEndpointCancelTransmit)(USBDevice_EndpointE endpoint);
|
|
typedef USBCDevice_ReturnCodeE (*fpUSBDeviceEndpointCancelReceive)(USBDevice_EndpointE endpoint);
|
|
|
|
typedef USBCDevice_ReturnCodeE (*fpUSBDeviceEndpointReceiveCompleted)(USBDevice_EndpointE endpoint);
|
|
typedef USBCDevice_ReturnCodeE (*fpUSBDeviceEndpointReceiveCompletedExt)(USBDevice_EndpointE endpoint,
|
|
UINT8 *pRxBuffer,
|
|
UINT32 next_packet_expected_length,
|
|
BOOL expect_zlp);
|
|
|
|
typedef USBCDevice_ReturnCodeE (*fpUSBDeviceEndpointReceive)(USBDevice_EndpointE endpoint,
|
|
UINT8 *pRxBuffer,
|
|
UINT32 length,
|
|
BOOL expect_zlp);
|
|
|
|
/* Status/Endpoint0 services */
|
|
typedef void (*fpUSBDeviceVendorClassResponse)(UINT8 *pBuffer,
|
|
UINT16 bufferLength);
|
|
|
|
/* Configuration/System services */
|
|
typedef USBCDevice_ReturnCodeE (*fpUSBDeviceEndpointAbort)(USBDevice_EndpointE endpoint);
|
|
|
|
typedef USBCDevice_ReturnCodeE (*fpUSBDeviceEndpointClose)(USBDevice_EndpointE endpoint);
|
|
|
|
typedef USBCDevice_ReturnCodeE (*fpUSBDeviceEndpointOpen)(USBDevice_EndpointE endpoint,
|
|
USBDevice_UsageTypeE usageType,
|
|
UINT8 dmaChannel,
|
|
UINT8 *pDescBuffer,
|
|
UINT16 descBufferLength,
|
|
USBDeviceTransactionCompletedNotifyFn transactionCompletedNotifyFn);
|
|
|
|
typedef USBCDevice_ReturnCodeE (*fpUSBDeviceEndpointStall)(USBDevice_EndpointE endpoint);
|
|
/*USBCDevice_ReturnCodeE USBDeviceEndpointClearStall(USBDevice_EndpointE endpoint);*/
|
|
|
|
USBCDevice_ReturnCodeE USBDeviceRegister(USBDeviceStatusNotifyFn statusNotifyFn,
|
|
USBDeviceVendorClassRequestNotifyFn vendorClassRequestNotifyFn,
|
|
USBDeviceEndpointZeroNotifyFn endpointZeroNotifyFn);
|
|
|
|
USBCDevice_ReturnCodeE USBDeviceRegisterPatchTempFunc(USBDeviceStatusNotifyFn statusNotifyFn,
|
|
USBDeviceVendorClassRequestNotifyFn vendorClassRequestNotifyFn,
|
|
USBDeviceEndpointZeroNotifyFn endpointZeroNotifyFn);
|
|
|
|
#ifndef CRANE_MCU_DONGLE
|
|
USBDevice_StatusE USBDeviceStatusGet(void);
|
|
#endif
|
|
|
|
typedef void (*fpUSBDevicePhase2Init)(void);
|
|
void USBDevicePhase1Init(void);
|
|
|
|
void USBDeviceSimulatePlug(USBD_SimulatePlugE plug_operation);
|
|
|
|
#ifdef CRANE_MCU_DONGLE
|
|
void USBDeviceSetDescriptor( USB_DescriptorTypesE descType, UINT8 *pDesc, UINT16 descLength, UINT8 id);
|
|
#else
|
|
void USBDeviceSetDescriptor( USB_DescriptorTypesE descType, UINT8 *pDesc, UINT8 descLength, UINT8 id);
|
|
#endif
|
|
|
|
typedef BOOL (*fpUSBDeviceIsControllerEnabled)(void);
|
|
|
|
//using struct tag to avoid include
|
|
typedef struct UDC_EndpointConfigS_tag * (*fpUSBDeviceEndpointGetHWCfg)(USBDevice_EndpointE endpoint);
|
|
|
|
/* Function Pointers to simplify single interface both USB1.1 & USB2.0 using runtime selection */
|
|
extern fpUSBDevicePhase2Init USBDevicePhase2Init;
|
|
extern fpUSBDeviceIsControllerEnabled USBDeviceIsControllerEnabled;
|
|
extern fpUSBDeviceEndpointGetHWCfg USBDeviceEndpointGetHWCfg;
|
|
extern fpUSBDeviceEndpointStall USBDeviceEndpointStall;
|
|
extern fpUSBDeviceEndpointOpen USBDeviceEndpointOpen;
|
|
extern fpUSBDeviceEndpointClose USBDeviceEndpointClose;
|
|
extern fpUSBDeviceEndpointAbort USBDeviceEndpointAbort;
|
|
extern fpUSBDeviceVendorClassResponse USBDeviceVendorClassResponse;
|
|
extern fpUSBDeviceEndpointReceive USBDeviceEndpointReceive;
|
|
extern fpUSBDeviceEndpointReceiveCompletedExt USBDeviceEndpointReceiveCompletedExt;
|
|
extern fpUSBDeviceEndpointReceiveCompleted USBDeviceEndpointReceiveCompleted;
|
|
extern fpUSBDeviceEndpointTransmit USBDeviceEndpointTransmit;
|
|
extern fpUSBDeviceEndpointCancelTransmit USBDeviceEndpointCancelTransmit;
|
|
extern fpUSBDeviceEndpointCancelReceive USBDeviceEndpointCancelReceive;
|
|
|
|
extern fpUSBDeviceEndpointMultiTransmit USBDeviceEndpointMultiTransmit;
|
|
|
|
#endif /*_UDC_DEVICE_H_*/
|