FreeRTOS: Common I/O
AWS IoT Common I/O library
Return to main page ↑
iot_usb_device.h
Go to the documentation of this file.
1 /*
2  * FreeRTOS Common IO V1.0.0
3  * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a copy of
6  * this software and associated documentation files (the "Software"), to deal in
7  * the Software without restriction, including without limitation the rights to
8  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9  * the Software, and to permit persons to whom the Software is furnished to do so,
10  * subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be included in all
13  * copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17  * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21  *
22  * http://aws.amazon.com/freertos
23  * http://www.FreeRTOS.org
24  */
25 
30 #ifndef _IOT_USB_DEVICE_H_
31 #define _IOT_USB_DEVICE_H_
32 
36 #define IOT_USB_DEVICE_SUCCESS ( 0 )
37 #define IOT_USB_DEVICE_ERROR ( 1 )
38 #define IOT_USB_DEVICE_BUSY ( 2 )
39 #define IOT_USB_DEVICE_INVALID_VALUE ( 3 )
40 #define IOT_USB_DEVICE_WRITE_FAILED ( 4 )
41 #define IOT_USB_DEVICE_READ_FAILED ( 5 )
42 #define IOT_USB_DEVICE_FUNCTION_NOT_SUPPORTED ( 6 )
43 #define IOT_USB_DEVICE_NOTHING_TO_CANCEL ( 7 )
48 #define IOT_USB_CONTROL_ENDPOINT (0U)
49 
53 #define IOT_USB_SETUP_PACKET_SIZE (8U)
54 
58 #define IOT_USB_ENDPOINT_NUMBER_MASK (0x0FU)
59 
63 #define IOT_USB_UNINITIALIZED_VAL_32 (0xFFFFFFFFU)
64 
73 typedef enum
74 {
92 
96 typedef enum
97 {
116 
120 typedef enum
121 {
128 
132 typedef enum
133 {
139 
143 typedef enum
144 {
150 
154 typedef enum
155 {
160 
164 struct IotUsbDevice;
165 
171 typedef struct IotUsbDevice * IotUsbDeviceHandle_t;
172 
189 typedef int32_t (*IotUsbDeviceCallback_t) ( IotUsbDeviceHandle_t const pxUsbDevice, uint32_t ulDeviceEvent, void * pvUserContext );
190 
203 typedef int32_t (* IotUsbDeviceEndpointCallbackFn_t) ( IotUsbDeviceOperationStatus_t xStatus, void * pvUserContext );
204 
208 typedef struct
209 {
210  uint16_t usMaxPacketSize;
228  uint8_t ucTransferType;
230  uint8_t ucZlt;
231  uint8_t ucInterval;
233 
237 typedef struct
238 {
240  uint16_t usEndpointStatus;
242 
254 IotUsbDeviceHandle_t iot_usb_device_open( int32_t lUsbDeviceControllerInstance );
255 
271 int32_t iot_usb_device_connect( IotUsbDeviceHandle_t const pxUsbDevice );
272 
285 int32_t iot_usb_device_disconnect( IotUsbDeviceHandle_t const pxUsbDevice );
286 
300  IotUsbDeviceCallback_t xCallback,
301  void * pvUserContext );
302 
321 int32_t iot_usb_device_endpoint_open( IotUsbDeviceHandle_t const pxUsbDevice,
322  IotUsbDeviceEndpointConfig_t * pxEpConfig);
323 
339  uint8_t ucEndpointAddress, IotUsbDeviceEndpointCallbackFn_t xCallback,
340  void * pvUserContext );
341 
354 int32_t iot_usb_device_endpoint_close( IotUsbDeviceHandle_t const pxUsbDevice,
355  uint8_t ucEndpointAddress );
356 
382 int32_t iot_usb_device_endpoint_stall( IotUsbDeviceHandle_t const pxUsbDevice,
383  uint8_t ucEndpointAddress );
384 
397 int32_t iot_usb_device_endpoint_unstall( IotUsbDeviceHandle_t const pxUsbDevice,
398  uint8_t ucEndpointAddress );
399 
420 int32_t iot_usb_device_read_sync( IotUsbDeviceHandle_t const pxUsbDevice,
421  uint8_t ucEndpointAddress,
422  uint8_t * const pvBuffer,
423  size_t xBytes );
424 
445 int32_t iot_usb_device_write_sync( IotUsbDeviceHandle_t const pxUsbDevice,
446  uint8_t ucEndpointAddress,
447  uint8_t * const pvBuffer,
448  size_t xBytes );
449 
472 int32_t iot_usb_device_read_async( IotUsbDeviceHandle_t const pxUsbDevice,
473  uint8_t ucEndpointAddress,
474  uint8_t * const pvBuffer,
475  size_t xBytes );
476 
499 int32_t iot_usb_device_write_async( IotUsbDeviceHandle_t const pxUsbDevice,
500  uint8_t ucEndpointAddress,
501  uint8_t * const pvBuffer,
502  size_t xBytes );
503 
525 int32_t iot_usb_device_ioctl( IotUsbDeviceHandle_t const pxUsbDevice,
526  IotUsbDeviceIoctlRequest_t xUsbDeviceRequest,
527  void * const pvBuffer );
528 
543 int32_t iot_usb_device_endpoint_cancel_transfer( IotUsbDeviceHandle_t const pxUsbDevice, uint8_t ucEndpointAddress );
544 
556 int32_t iot_usb_device_close( IotUsbDeviceHandle_t const pxUsbDevice );
557 
561 /* end of group iot_usb_device */
562 
563 #endif /* ifndef _IOT_USB_DEVICE_H_ */
Definition: iot_usb_device.h:103
int32_t iot_usb_device_read_sync(IotUsbDeviceHandle_t const pxUsbDevice, uint8_t ucEndpointAddress, uint8_t *const pvBuffer, size_t xBytes)
Starts the USB device read operation in blocking mode.
IotUsbDeviceEvent_t
common notify event types in device callback.
Definition: iot_usb_device.h:73
IotUsbDeviceIoctlRequest_t
Ioctl request types.
Definition: iot_usb_device.h:96
Definition: iot_usb_device.h:111
IotUsbDeviceOperationStatus_t
USB device driver operation status.
Definition: iot_usb_device.h:154
Definition: iot_usb_device.h:82
Definition: iot_usb_device.h:108
int32_t iot_usb_device_endpoint_cancel_transfer(IotUsbDeviceHandle_t const pxUsbDevice, uint8_t ucEndpointAddress)
This function is used to cancel the pending transfer for given endpoint.
Definition: iot_usb_device.h:100
Definition: iot_usb_device.h:124
IotUsbDeviceEndpointStatus_t
Defines endpoint state.
Definition: iot_usb_device.h:132
int32_t iot_usb_device_connect(IotUsbDeviceHandle_t const pxUsbDevice)
Connect the USB device.
Definition: iot_usb_device.h:145
Definition: iot_usb_device.h:135
Definition: iot_usb_device.h:148
Definition: iot_usb_device.h:109
int32_t iot_usb_device_write_async(IotUsbDeviceHandle_t const pxUsbDevice, uint8_t ucEndpointAddress, uint8_t *const pvBuffer, size_t xBytes)
Starts the USB device write operation in non-blocking mode.
Definition: iot_usb_device.h:90
Definition: iot_usb_device.h:98
Definition: iot_usb_device.h:157
int32_t iot_usb_device_write_sync(IotUsbDeviceHandle_t const pxUsbDevice, uint8_t ucEndpointAddress, uint8_t *const pvBuffer, size_t xBytes)
Starts the USB device write operation in blocking mode.
Definition: iot_usb_device.h:125
Definition: iot_usb_device.h:113
int32_t iot_usb_device_close(IotUsbDeviceHandle_t const pxUsbDevice)
Close the USB device peripheral.
Definition: iot_usb_device.h:88
uint16_t usEndpointStatus
Definition: iot_usb_device.h:240
Definition: iot_usb_device.h:110
Definition: iot_usb_device.h:80
Definition: iot_usb_device.h:86
Definition: iot_usb_device.h:75
Endpoint configuration structure.
Definition: iot_usb_device.h:208
int32_t iot_usb_device_ioctl(IotUsbDeviceHandle_t const pxUsbDevice, IotUsbDeviceIoctlRequest_t xUsbDeviceRequest, void *const pvBuffer)
Used for various USB device control function.
Definition: iot_usb_device.h:114
int32_t iot_usb_device_endpoint_stall(IotUsbDeviceHandle_t const pxUsbDevice, uint8_t ucEndpointAddress)
Stall the usb device specific endpoint. This function is to set stall conditions for the specific end...
Definition: iot_usb_device.h:84
uint8_t ucEndpointAddress
Definition: iot_usb_device.h:239
Definition: iot_usb_device.h:158
Definition: iot_usb_device.h:104
Endpoint status structure.
Definition: iot_usb_device.h:237
uint8_t ucZlt
Definition: iot_usb_device.h:230
IotUsbHostController_t
Define device controller ID.
Definition: iot_usb_device.h:143
Definition: iot_usb_device.h:112
Definition: iot_usb_device.h:78
Definition: iot_usb_device.h:147
Definition: iot_usb_device.h:76
uint8_t ucInterval
Definition: iot_usb_device.h:231
Definition: iot_usb_device.h:102
uint8_t ucEndpointAddress
Definition: iot_usb_device.h:227
Definition: iot_usb_device.h:107
Definition: iot_usb_device.h:101
Definition: iot_usb_device.h:136
Definition: iot_usb_device.h:99
Definition: iot_usb_device.h:156
#define IOT_USB_DEVICE_WRITE_FAILED
Definition: iot_usb_device.h:40
struct IotUsbDevice * IotUsbDeviceHandle_t
IotUsbDeviceHandle_t is the handle type returned by calling iot_usb_device_open(). This is initialized in open and returned to caller. The caller must pass this pointer to the rest of APIs.
Definition: iot_usb_device.h:171
Definition: iot_usb_device.h:126
uint8_t ucTransferType
Definition: iot_usb_device.h:228
int32_t iot_usb_device_endpoint_unstall(IotUsbDeviceHandle_t const pxUsbDevice, uint8_t ucEndpointAddress)
Unstall the usb device specific endpoint.
Definition: iot_usb_device.h:137
int32_t iot_usb_device_read_async(IotUsbDeviceHandle_t const pxUsbDevice, uint8_t ucEndpointAddress, uint8_t *const pvBuffer, size_t xBytes)
Starts the USB device read operation in non-blocking mode.
IotUsbDeviceState_t
USB device state.
Definition: iot_usb_device.h:120
#define IOT_USB_DEVICE_SUCCESS
Return values used by this driver.
Definition: iot_usb_device.h:36
uint16_t usMaxPacketSize
Definition: iot_usb_device.h:210
Definition: iot_usb_device.h:122
void iot_usb_device_set_device_callback(IotUsbDeviceHandle_t const pxUsbDevice, IotUsbDeviceCallback_t xCallback, void *pvUserContext)
Sets the application callback to be called on device event.
Definition: iot_usb_device.h:105
int32_t iot_usb_device_endpoint_close(IotUsbDeviceHandle_t const pxUsbDevice, uint8_t ucEndpointAddress)
De-initializes the usb device specific endpoint.
#define IOT_USB_DEVICE_READ_FAILED
Definition: iot_usb_device.h:41
void iot_usb_device_set_endpoint_callback(IotUsbDeviceHandle_t const pxUsbDevice, uint8_t ucEndpointAddress, IotUsbDeviceEndpointCallbackFn_t xCallback, void *pvUserContext)
Sets the endpoint callback to be called on endpoint transfer.
Definition: iot_usb_device.h:89
Definition: iot_usb_device.h:123
int32_t(* IotUsbDeviceCallback_t)(IotUsbDeviceHandle_t const pxUsbDevice, uint32_t ulDeviceEvent, void *pvUserContext)
The callback function for USB device event operation. This callback is passed to driver by using iot_...
Definition: iot_usb_device.h:189
int32_t(* IotUsbDeviceEndpointCallbackFn_t)(IotUsbDeviceOperationStatus_t xStatus, void *pvUserContext)
The callback typedef for USB device endpoint. For each endpoint, it's passed when user set endpoint c...
Definition: iot_usb_device.h:203
Definition: iot_usb_device.h:134
int32_t iot_usb_device_endpoint_open(IotUsbDeviceHandle_t const pxUsbDevice, IotUsbDeviceEndpointConfig_t *pxEpConfig)
Initiates the usb device specific endpoint.
Definition: iot_usb_device.h:146
IotUsbDeviceHandle_t iot_usb_device_open(int32_t lUsbDeviceControllerInstance)
Initiates the usb device controller interface.
int32_t iot_usb_device_disconnect(IotUsbDeviceHandle_t const pxUsbDevice)
Disconnect the USB device.