274 lines
12 KiB
C
274 lines
12 KiB
C
/*
|
|
* Copyright (c) 2013-2017 ARM Limited. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the License); you may
|
|
* not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* 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.
|
|
*
|
|
* $Date: 2. Feb 2017
|
|
* $Revision: V2.2
|
|
*
|
|
* Project: USB Device Driver definitions
|
|
*/
|
|
|
|
/* History:
|
|
* Version 2.2
|
|
* ARM_USBD_STATE made volatile
|
|
* Version 2.1
|
|
* Added ARM_USBD_ReadSetupPacket function
|
|
* Version 2.0
|
|
* Removed ARM_USBD_DeviceConfigure function
|
|
* Removed ARM_USBD_SET_ADDRESS_STAGE parameter from ARM_USBD_DeviceSetAddress function
|
|
* Removed ARM_USBD_EndpointReadStart function
|
|
* Replaced ARM_USBD_EndpointRead and ARM_USBD_EndpointWrite functions with ARM_USBD_EndpointTransfer
|
|
* Added ARM_USBD_EndpointTransferGetResult function
|
|
* Renamed ARM_USBD_EndpointAbort function to ARM_USBD_EndpointTransferAbort
|
|
* Changed prefix ARM_DRV -> ARM_DRIVER
|
|
* Changed return values of some functions to int32_t
|
|
* Version 1.10
|
|
* Namespace prefix ARM_ added
|
|
* Version 1.00
|
|
* Initial release
|
|
*/
|
|
|
|
#ifndef DRIVER_USBD_H_
|
|
#define DRIVER_USBD_H_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
#include "Driver_USB.h"
|
|
|
|
#define ARM_USBD_API_VERSION ARM_DRIVER_VERSION_MAJOR_MINOR(2,2) /* API version */
|
|
|
|
|
|
/**
|
|
\brief USB Device State
|
|
*/
|
|
typedef volatile struct _ARM_USBD_STATE {
|
|
uint32_t vbus : 1; ///< USB Device VBUS flag
|
|
uint32_t speed : 2; ///< USB Device speed setting (ARM_USB_SPEED_xxx)
|
|
uint32_t active : 1; ///< USB Device active flag
|
|
uint32_t reserved : 28;
|
|
} ARM_USBD_STATE;
|
|
|
|
|
|
/****** USB Device Event *****/
|
|
#define ARM_USBD_EVENT_VBUS_ON (1UL << 0) ///< USB Device VBUS On
|
|
#define ARM_USBD_EVENT_VBUS_OFF (1UL << 1) ///< USB Device VBUS Off
|
|
#define ARM_USBD_EVENT_RESET (1UL << 2) ///< USB Reset occurred
|
|
#define ARM_USBD_EVENT_HIGH_SPEED (1UL << 3) ///< USB switch to High Speed occurred
|
|
#define ARM_USBD_EVENT_SUSPEND (1UL << 4) ///< USB Suspend occurred
|
|
#define ARM_USBD_EVENT_RESUME (1UL << 5) ///< USB Resume occurred
|
|
|
|
/****** USB Endpoint Event *****/
|
|
#define ARM_USBD_EVENT_SETUP (1UL << 0) ///< SETUP Packet
|
|
#define ARM_USBD_EVENT_OUT (1UL << 1) ///< OUT Packet(s)
|
|
#define ARM_USBD_EVENT_IN (1UL << 2) ///< IN Packet(s)
|
|
|
|
|
|
#ifndef __DOXYGEN_MW__ // exclude from middleware documentation
|
|
|
|
// Function documentation
|
|
/**
|
|
\fn ARM_DRIVER_VERSION ARM_USBD_GetVersion (void)
|
|
\brief Get driver version.
|
|
\return \ref ARM_DRIVER_VERSION
|
|
*/
|
|
/**
|
|
\fn ARM_USBD_CAPABILITIES ARM_USBD_GetCapabilities (void)
|
|
\brief Get driver capabilities.
|
|
\return \ref ARM_USBD_CAPABILITIES
|
|
*/
|
|
/**
|
|
\fn int32_t ARM_USBD_Initialize (ARM_USBD_SignalDeviceEvent_t cb_device_event,
|
|
ARM_USBD_SignalEndpointEvent_t cb_endpoint_event)
|
|
\brief Initialize USB Device Interface.
|
|
\param[in] cb_device_event Pointer to \ref ARM_USBD_SignalDeviceEvent
|
|
\param[in] cb_endpoint_event Pointer to \ref ARM_USBD_SignalEndpointEvent
|
|
\return \ref execution_status
|
|
*/
|
|
/**
|
|
\fn int32_t ARM_USBD_Uninitialize (void)
|
|
\brief De-initialize USB Device Interface.
|
|
\return \ref execution_status
|
|
*/
|
|
/**
|
|
\fn int32_t ARM_USBD_PowerControl (ARM_POWER_STATE state)
|
|
\brief Control USB Device Interface Power.
|
|
\param[in] state Power state
|
|
\return \ref execution_status
|
|
*/
|
|
/**
|
|
\fn int32_t ARM_USBD_DeviceConnect (void)
|
|
\brief Connect USB Device.
|
|
\return \ref execution_status
|
|
*/
|
|
/**
|
|
\fn int32_t ARM_USBD_DeviceDisconnect (void)
|
|
\brief Disconnect USB Device.
|
|
\return \ref execution_status
|
|
*/
|
|
/**
|
|
\fn ARM_USBD_STATE ARM_USBD_DeviceGetState (void)
|
|
\brief Get current USB Device State.
|
|
\return Device State \ref ARM_USBD_STATE
|
|
*/
|
|
/**
|
|
\fn int32_t ARM_USBD_DeviceRemoteWakeup (void)
|
|
\brief Trigger USB Remote Wakeup.
|
|
\return \ref execution_status
|
|
*/
|
|
/**
|
|
\fn int32_t ARM_USBD_DeviceSetAddress (uint8_t dev_addr)
|
|
\brief Set USB Device Address.
|
|
\param[in] dev_addr Device Address
|
|
\return \ref execution_status
|
|
*/
|
|
/**
|
|
\fn int32_t ARM_USBD_ReadSetupPacket (uint8_t *setup)
|
|
\brief Read setup packet received over Control Endpoint.
|
|
\param[out] setup Pointer to buffer for setup packet
|
|
\return \ref execution_status
|
|
*/
|
|
/**
|
|
\fn int32_t ARM_USBD_EndpointConfigure (uint8_t ep_addr,
|
|
uint8_t ep_type,
|
|
uint16_t ep_max_packet_size)
|
|
\brief Configure USB Endpoint.
|
|
\param[in] ep_addr Endpoint Address
|
|
- ep_addr.0..3: Address
|
|
- ep_addr.7: Direction
|
|
\param[in] ep_type Endpoint Type (ARM_USB_ENDPOINT_xxx)
|
|
\param[in] ep_max_packet_size Endpoint Maximum Packet Size
|
|
\return \ref execution_status
|
|
*/
|
|
/**
|
|
\fn int32_t ARM_USBD_EndpointUnconfigure (uint8_t ep_addr)
|
|
\brief Unconfigure USB Endpoint.
|
|
\param[in] ep_addr Endpoint Address
|
|
- ep_addr.0..3: Address
|
|
- ep_addr.7: Direction
|
|
\return \ref execution_status
|
|
*/
|
|
/**
|
|
\fn int32_t ARM_USBD_EndpointStall (uint8_t ep_addr, bool stall)
|
|
\brief Set/Clear Stall for USB Endpoint.
|
|
\param[in] ep_addr Endpoint Address
|
|
- ep_addr.0..3: Address
|
|
- ep_addr.7: Direction
|
|
\param[in] stall Operation
|
|
- \b false Clear
|
|
- \b true Set
|
|
\return \ref execution_status
|
|
*/
|
|
/**
|
|
\fn int32_t ARM_USBD_EndpointTransfer (uint8_t ep_addr, uint8_t *data, uint32_t num)
|
|
\brief Read data from or Write data to USB Endpoint.
|
|
\param[in] ep_addr Endpoint Address
|
|
- ep_addr.0..3: Address
|
|
- ep_addr.7: Direction
|
|
\param[out] data Pointer to buffer for data to read or with data to write
|
|
\param[in] num Number of data bytes to transfer
|
|
\return \ref execution_status
|
|
*/
|
|
/**
|
|
\fn uint32_t ARM_USBD_EndpointTransferGetResult (uint8_t ep_addr)
|
|
\brief Get result of USB Endpoint transfer.
|
|
\param[in] ep_addr Endpoint Address
|
|
- ep_addr.0..3: Address
|
|
- ep_addr.7: Direction
|
|
\return number of successfully transferred data bytes
|
|
*/
|
|
/**
|
|
\fn int32_t ARM_USBD_EndpointTransferAbort (uint8_t ep_addr)
|
|
\brief Abort current USB Endpoint transfer.
|
|
\param[in] ep_addr Endpoint Address
|
|
- ep_addr.0..3: Address
|
|
- ep_addr.7: Direction
|
|
\return \ref execution_status
|
|
*/
|
|
/**
|
|
\fn uint16_t ARM_USBD_GetFrameNumber (void)
|
|
\brief Get current USB Frame Number.
|
|
\return Frame Number
|
|
*/
|
|
|
|
/**
|
|
\fn void ARM_USBD_SignalDeviceEvent (uint32_t event)
|
|
\brief Signal USB Device Event.
|
|
\param[in] event \ref USBD_dev_events
|
|
\return none
|
|
*/
|
|
/**
|
|
\fn void ARM_USBD_SignalEndpointEvent (uint8_t ep_addr, uint32_t event)
|
|
\brief Signal USB Endpoint Event.
|
|
\param[in] ep_addr Endpoint Address
|
|
- ep_addr.0..3: Address
|
|
- ep_addr.7: Direction
|
|
\param[in] event \ref USBD_ep_events
|
|
\return none
|
|
*/
|
|
|
|
typedef void (*ARM_USBD_SignalDeviceEvent_t) (uint32_t event); ///< Pointer to \ref ARM_USBD_SignalDeviceEvent : Signal USB Device Event.
|
|
typedef void (*ARM_USBD_SignalEndpointEvent_t) (uint8_t ep_addr, uint32_t event); ///< Pointer to \ref ARM_USBD_SignalEndpointEvent : Signal USB Endpoint Event.
|
|
|
|
|
|
/**
|
|
\brief USB Device Driver Capabilities.
|
|
*/
|
|
typedef struct _ARM_USBD_CAPABILITIES {
|
|
uint32_t vbus_detection : 1; ///< VBUS detection
|
|
uint32_t event_vbus_on : 1; ///< Signal VBUS On event
|
|
uint32_t event_vbus_off : 1; ///< Signal VBUS Off event
|
|
uint32_t reserved : 29; ///< Reserved (must be zero)
|
|
} ARM_USBD_CAPABILITIES;
|
|
|
|
|
|
/**
|
|
\brief Access structure of the USB Device Driver.
|
|
*/
|
|
typedef struct _ARM_DRIVER_USBD {
|
|
ARM_DRIVER_VERSION (*GetVersion) (void); ///< Pointer to \ref ARM_USBD_GetVersion : Get driver version.
|
|
ARM_USBD_CAPABILITIES (*GetCapabilities) (void); ///< Pointer to \ref ARM_USBD_GetCapabilities : Get driver capabilities.
|
|
int32_t (*Initialize) (ARM_USBD_SignalDeviceEvent_t cb_device_event,
|
|
ARM_USBD_SignalEndpointEvent_t cb_endpoint_event); ///< Pointer to \ref ARM_USBD_Initialize : Initialize USB Device Interface.
|
|
int32_t (*Uninitialize) (void); ///< Pointer to \ref ARM_USBD_Uninitialize : De-initialize USB Device Interface.
|
|
int32_t (*PowerControl) (ARM_POWER_STATE state); ///< Pointer to \ref ARM_USBD_PowerControl : Control USB Device Interface Power.
|
|
int32_t (*DeviceConnect) (void); ///< Pointer to \ref ARM_USBD_DeviceConnect : Connect USB Device.
|
|
int32_t (*DeviceDisconnect) (void); ///< Pointer to \ref ARM_USBD_DeviceDisconnect : Disconnect USB Device.
|
|
ARM_USBD_STATE (*DeviceGetState) (void); ///< Pointer to \ref ARM_USBD_DeviceGetState : Get current USB Device State.
|
|
int32_t (*DeviceRemoteWakeup) (void); ///< Pointer to \ref ARM_USBD_DeviceRemoteWakeup : Trigger USB Remote Wakeup.
|
|
int32_t (*DeviceSetAddress) (uint8_t dev_addr); ///< Pointer to \ref ARM_USBD_DeviceSetAddress : Set USB Device Address.
|
|
int32_t (*ReadSetupPacket) (uint8_t *setup); ///< Pointer to \ref ARM_USBD_ReadSetupPacket : Read setup packet received over Control Endpoint.
|
|
int32_t (*EndpointConfigure) (uint8_t ep_addr,
|
|
uint8_t ep_type,
|
|
uint16_t ep_max_packet_size); ///< Pointer to \ref ARM_USBD_EndpointConfigure : Configure USB Endpoint.
|
|
int32_t (*EndpointUnconfigure) (uint8_t ep_addr); ///< Pointer to \ref ARM_USBD_EndpointUnconfigure : Unconfigure USB Endpoint.
|
|
int32_t (*EndpointStall) (uint8_t ep_addr, bool stall); ///< Pointer to \ref ARM_USBD_EndpointStall : Set/Clear Stall for USB Endpoint.
|
|
int32_t (*EndpointTransfer) (uint8_t ep_addr, uint8_t *data, uint32_t num); ///< Pointer to \ref ARM_USBD_EndpointTransfer : Read data from or Write data to USB Endpoint.
|
|
uint32_t (*EndpointTransferGetResult) (uint8_t ep_addr); ///< Pointer to \ref ARM_USBD_EndpointTransferGetResult : Get result of USB Endpoint transfer.
|
|
int32_t (*EndpointTransferAbort) (uint8_t ep_addr); ///< Pointer to \ref ARM_USBD_EndpointTransferAbort : Abort current USB Endpoint transfer.
|
|
uint16_t (*GetFrameNumber) (void); ///< Pointer to \ref ARM_USBD_GetFrameNumber : Get current USB Frame Number.
|
|
} const ARM_DRIVER_USBD;
|
|
|
|
#endif /* __DOXYGEN_MW__ */
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* DRIVER_USBD_H_ */
|