max4146x_comp
USBDevice/USBDevice/TARGET_Silicon_Labs/inc/em_usb.h@0:0061165683ee, 2020-10-25 (annotated)
- Committer:
- sdivarci
- Date:
- Sun Oct 25 20:10:02 2020 +0000
- Revision:
- 0:0061165683ee
sdivarci
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| sdivarci | 0:0061165683ee | 1 | /***************************************************************************//** |
| sdivarci | 0:0061165683ee | 2 | * @file em_usb.h |
| sdivarci | 0:0061165683ee | 3 | * @brief USB protocol stack library API for EFM32. |
| sdivarci | 0:0061165683ee | 4 | * @version 3.20.14 |
| sdivarci | 0:0061165683ee | 5 | ******************************************************************************* |
| sdivarci | 0:0061165683ee | 6 | * @section License |
| sdivarci | 0:0061165683ee | 7 | * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b> |
| sdivarci | 0:0061165683ee | 8 | ******************************************************************************* |
| sdivarci | 0:0061165683ee | 9 | * |
| sdivarci | 0:0061165683ee | 10 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| sdivarci | 0:0061165683ee | 11 | * you may not use this file except in compliance with the License. |
| sdivarci | 0:0061165683ee | 12 | * You may obtain a copy of the License at |
| sdivarci | 0:0061165683ee | 13 | * |
| sdivarci | 0:0061165683ee | 14 | * http://www.apache.org/licenses/LICENSE-2.0 |
| sdivarci | 0:0061165683ee | 15 | * |
| sdivarci | 0:0061165683ee | 16 | * Unless required by applicable law or agreed to in writing, software |
| sdivarci | 0:0061165683ee | 17 | * distributed under the License is distributed on an "AS IS" BASIS, |
| sdivarci | 0:0061165683ee | 18 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| sdivarci | 0:0061165683ee | 19 | * See the License for the specific language governing permissions and |
| sdivarci | 0:0061165683ee | 20 | * limitations under the License. |
| sdivarci | 0:0061165683ee | 21 | * |
| sdivarci | 0:0061165683ee | 22 | ******************************************************************************/ |
| sdivarci | 0:0061165683ee | 23 | |
| sdivarci | 0:0061165683ee | 24 | #ifndef __EM_USB_H |
| sdivarci | 0:0061165683ee | 25 | #define __EM_USB_H |
| sdivarci | 0:0061165683ee | 26 | |
| sdivarci | 0:0061165683ee | 27 | #include "em_device.h" |
| sdivarci | 0:0061165683ee | 28 | #include "em_assert.h" |
| sdivarci | 0:0061165683ee | 29 | #if defined( USB_PRESENT ) && ( USB_COUNT == 1 ) |
| sdivarci | 0:0061165683ee | 30 | #include "usbconfig.h" |
| sdivarci | 0:0061165683ee | 31 | #if defined( USB_DEVICE ) || defined( USB_HOST ) |
| sdivarci | 0:0061165683ee | 32 | |
| sdivarci | 0:0061165683ee | 33 | #include <string.h> |
| sdivarci | 0:0061165683ee | 34 | #include <stddef.h> |
| sdivarci | 0:0061165683ee | 35 | #include "em_common.h" |
| sdivarci | 0:0061165683ee | 36 | #include "em_int.h" |
| sdivarci | 0:0061165683ee | 37 | |
| sdivarci | 0:0061165683ee | 38 | #if defined( USB_USE_PRINTF ) |
| sdivarci | 0:0061165683ee | 39 | #include <stdio.h> |
| sdivarci | 0:0061165683ee | 40 | #endif |
| sdivarci | 0:0061165683ee | 41 | |
| sdivarci | 0:0061165683ee | 42 | #ifdef __cplusplus |
| sdivarci | 0:0061165683ee | 43 | extern "C" { |
| sdivarci | 0:0061165683ee | 44 | #endif |
| sdivarci | 0:0061165683ee | 45 | |
| sdivarci | 0:0061165683ee | 46 | #ifdef __CC_ARM |
| sdivarci | 0:0061165683ee | 47 | #pragma anon_unions |
| sdivarci | 0:0061165683ee | 48 | #endif |
| sdivarci | 0:0061165683ee | 49 | |
| sdivarci | 0:0061165683ee | 50 | /***************************************************************************//** |
| sdivarci | 0:0061165683ee | 51 | * @addtogroup USB |
| sdivarci | 0:0061165683ee | 52 | * @brief USB HOST and DEVICE protocol stacks. |
| sdivarci | 0:0061165683ee | 53 | * @{ |
| sdivarci | 0:0061165683ee | 54 | ******************************************************************************/ |
| sdivarci | 0:0061165683ee | 55 | |
| sdivarci | 0:0061165683ee | 56 | /***************************************************************************//** |
| sdivarci | 0:0061165683ee | 57 | * @addtogroup USB_COMMON |
| sdivarci | 0:0061165683ee | 58 | * @brief Common parts for both HOST and DEVICE USB stacks, see @ref usb_device |
| sdivarci | 0:0061165683ee | 59 | * and @ref usb_host pages for device and host library documentation. |
| sdivarci | 0:0061165683ee | 60 | * @{ |
| sdivarci | 0:0061165683ee | 61 | ******************************************************************************/ |
| sdivarci | 0:0061165683ee | 62 | |
| sdivarci | 0:0061165683ee | 63 | #define SILABS_USB_VID 0x10C4 /**< Silicon Labs Vendor ID, supplied by USB-IF. */ |
| sdivarci | 0:0061165683ee | 64 | |
| sdivarci | 0:0061165683ee | 65 | /* SETUP request, direction of data stage */ |
| sdivarci | 0:0061165683ee | 66 | #define USB_SETUP_DIR_OUT 0 /**< Setup request data stage OUT direction value. */ |
| sdivarci | 0:0061165683ee | 67 | #define USB_SETUP_DIR_IN 1 /**< Setup request data stage IN direction value. */ |
| sdivarci | 0:0061165683ee | 68 | #define USB_SETUP_DIR_MASK 0x80 /**< Setup request data stage direction mask. */ |
| sdivarci | 0:0061165683ee | 69 | #define USB_SETUP_DIR_D2H 0x80 /**< Setup request data stage IN direction mask. */ |
| sdivarci | 0:0061165683ee | 70 | #define USB_SETUP_DIR_H2D 0x00 /**< Setup request data stage OUT direction mask. */ |
| sdivarci | 0:0061165683ee | 71 | |
| sdivarci | 0:0061165683ee | 72 | /* SETUP request type */ |
| sdivarci | 0:0061165683ee | 73 | #define USB_SETUP_TYPE_STANDARD 0 /**< Standard setup request value. */ |
| sdivarci | 0:0061165683ee | 74 | #define USB_SETUP_TYPE_CLASS 1 /**< Class setup request value. */ |
| sdivarci | 0:0061165683ee | 75 | #define USB_SETUP_TYPE_VENDOR 2 /**< Vendor setup request value. */ |
| sdivarci | 0:0061165683ee | 76 | #define USB_SETUP_TYPE_STANDARD_MASK 0x00 /**< Standard setup request mask. */ |
| sdivarci | 0:0061165683ee | 77 | #define USB_SETUP_TYPE_CLASS_MASK 0x20 /**< Class setup request mask. */ |
| sdivarci | 0:0061165683ee | 78 | #define USB_SETUP_TYPE_VENDOR_MASK 0x40 /**< Vendor setup request mask. */ |
| sdivarci | 0:0061165683ee | 79 | |
| sdivarci | 0:0061165683ee | 80 | /* SETUP request recipient */ |
| sdivarci | 0:0061165683ee | 81 | #define USB_SETUP_RECIPIENT_DEVICE 0 /**< Setup request device recipient value. */ |
| sdivarci | 0:0061165683ee | 82 | #define USB_SETUP_RECIPIENT_INTERFACE 1 /**< Setup request interface recipient value. */ |
| sdivarci | 0:0061165683ee | 83 | #define USB_SETUP_RECIPIENT_ENDPOINT 2 /**< Setup request endpoint recipient value. */ |
| sdivarci | 0:0061165683ee | 84 | #define USB_SETUP_RECIPIENT_OTHER 3 /**< Setup request other recipient value. */ |
| sdivarci | 0:0061165683ee | 85 | |
| sdivarci | 0:0061165683ee | 86 | /* SETUP standard request codes for Full Speed devices */ |
| sdivarci | 0:0061165683ee | 87 | #define GET_STATUS 0 /**< Standard setup request GET_STATUS. */ |
| sdivarci | 0:0061165683ee | 88 | #define CLEAR_FEATURE 1 /**< Standard setup request CLEAR_FEATURE. */ |
| sdivarci | 0:0061165683ee | 89 | #define SET_FEATURE 3 /**< Standard setup request SET_FEATURE. */ |
| sdivarci | 0:0061165683ee | 90 | #define SET_ADDRESS 5 /**< Standard setup request SET_ADDRESS. */ |
| sdivarci | 0:0061165683ee | 91 | #define GET_DESCRIPTOR 6 /**< Standard setup request GET_DESCRIPTOR. */ |
| sdivarci | 0:0061165683ee | 92 | #define SET_DESCRIPTOR 7 /**< Standard setup request SET_DESCRIPTOR. */ |
| sdivarci | 0:0061165683ee | 93 | #define GET_CONFIGURATION 8 /**< Standard setup request GET_CONFIGURATION. */ |
| sdivarci | 0:0061165683ee | 94 | #define SET_CONFIGURATION 9 /**< Standard setup request SET_CONFIGURATION. */ |
| sdivarci | 0:0061165683ee | 95 | #define GET_INTERFACE 10 /**< Standard setup request GET_INTERFACE. */ |
| sdivarci | 0:0061165683ee | 96 | #define SET_INTERFACE 11 /**< Standard setup request SET_INTERFACE. */ |
| sdivarci | 0:0061165683ee | 97 | #define SYNCH_FRAME 12 /**< Standard setup request SYNCH_FRAME. */ |
| sdivarci | 0:0061165683ee | 98 | |
| sdivarci | 0:0061165683ee | 99 | /* SETUP class request codes */ |
| sdivarci | 0:0061165683ee | 100 | #define USB_HID_GET_REPORT 0x01 /**< HID class setup request GET_REPORT. */ |
| sdivarci | 0:0061165683ee | 101 | #define USB_HID_GET_IDLE 0x02 /**< HID class setup request GET_IDLE. */ |
| sdivarci | 0:0061165683ee | 102 | #define USB_HID_SET_REPORT 0x09 /**< HID class setup request SET_REPORT. */ |
| sdivarci | 0:0061165683ee | 103 | #define USB_HID_SET_IDLE 0x0A /**< HID class setup request SET_IDLE. */ |
| sdivarci | 0:0061165683ee | 104 | #define USB_HID_SET_PROTOCOL 0x0B /**< HID class setup request SET_PROTOCOL. */ |
| sdivarci | 0:0061165683ee | 105 | #define USB_CDC_SETLINECODING 0x20 /**< CDC class setup request SET_LINE_CODING. */ |
| sdivarci | 0:0061165683ee | 106 | #define USB_CDC_GETLINECODING 0x21 /**< CDC class setup request GET_LINE_CODING. */ |
| sdivarci | 0:0061165683ee | 107 | #define USB_CDC_SETCTRLLINESTATE 0x22 /**< CDC class setup request SET_CONTROL_LINE_STATE. */ |
| sdivarci | 0:0061165683ee | 108 | #define USB_MSD_BOTRESET 0xFF /**< MSD class setup request Bulk only transfer reset. */ |
| sdivarci | 0:0061165683ee | 109 | #define USB_MSD_GETMAXLUN 0xFE /**< MSD class setup request Get Max LUN. */ |
| sdivarci | 0:0061165683ee | 110 | #define USB_AUDIO_GET_CUR 0x81 /**< Audio class setup request GET_CUR. */ |
| sdivarci | 0:0061165683ee | 111 | #define USB_AUDIO_SET_CUR 0x01 /**< Audio class setup request SET_CUR. */ |
| sdivarci | 0:0061165683ee | 112 | #define USB_AUDIO_GET_CUR 0x81 /**< Audio class setup request GET_CUR. */ |
| sdivarci | 0:0061165683ee | 113 | #define USB_AUDIO_SET_MIN 0x02 /**< Audio class setup request SET_MIN. */ |
| sdivarci | 0:0061165683ee | 114 | #define USB_AUDIO_GET_MIN 0x82 /**< Audio class setup request GET_MIN. */ |
| sdivarci | 0:0061165683ee | 115 | #define USB_AUDIO_SET_MAX 0x03 /**< Audio class setup request SET_MAX. */ |
| sdivarci | 0:0061165683ee | 116 | #define USB_AUDIO_GET_MAX 0x83 /**< Audio class setup request GET_MAX. */ |
| sdivarci | 0:0061165683ee | 117 | #define USB_AUDIO_SET_RES 0x04 /**< Audio class setup request SET_RES. */ |
| sdivarci | 0:0061165683ee | 118 | #define USB_AUDIO_GET_RES 0x84 /**< Audio class setup request GET_RES. */ |
| sdivarci | 0:0061165683ee | 119 | #define USB_AUDIO_SET_MEM 0x05 /**< Audio class setup request SET_MEM. */ |
| sdivarci | 0:0061165683ee | 120 | #define USB_AUDIO_GET_MEM 0x85 /**< Audio class setup request GET_MEM. */ |
| sdivarci | 0:0061165683ee | 121 | #define USB_AUDIO_GET_STAT 0xFF /**< Audio class setup request GET_STAT. */ |
| sdivarci | 0:0061165683ee | 122 | |
| sdivarci | 0:0061165683ee | 123 | /* SETUP command GET/SET_DESCRIPTOR decriptor types */ |
| sdivarci | 0:0061165683ee | 124 | #define USB_DEVICE_DESCRIPTOR 1 /**< DEVICE descriptor value. */ |
| sdivarci | 0:0061165683ee | 125 | #define USB_CONFIG_DESCRIPTOR 2 /**< CONFIGURATION descriptor value. */ |
| sdivarci | 0:0061165683ee | 126 | #define USB_STRING_DESCRIPTOR 3 /**< STRING descriptor value. */ |
| sdivarci | 0:0061165683ee | 127 | #define USB_MAX_STRING_DESCRIPTOR_CHARS 126 /**< Maximum STRING descriptor bString length. */ |
| sdivarci | 0:0061165683ee | 128 | #define USB_INTERFACE_DESCRIPTOR 4 /**< INTERFACE descriptor value. */ |
| sdivarci | 0:0061165683ee | 129 | #define USB_ENDPOINT_DESCRIPTOR 5 /**< ENDPOINT descriptor value. */ |
| sdivarci | 0:0061165683ee | 130 | #define USB_DEVICE_QUALIFIER_DESCRIPTOR 6 /**< DEVICE_QUALIFIER descriptor value. */ |
| sdivarci | 0:0061165683ee | 131 | #define USB_OTHER_SPEED_CONFIG_DESCRIPTOR 7 /**< OTHER_SPEED_CONFIGURATION descriptor value. */ |
| sdivarci | 0:0061165683ee | 132 | #define USB_INTERFACE_POWER_DESCRIPTOR 8 /**< INTERFACE_POWER descriptor value. */ |
| sdivarci | 0:0061165683ee | 133 | #define USB_INTERFACE_ASSOCIATION_DESCRIPTOR 11 /**< INTERFACE_ASSOCIATION descriptor value. */ |
| sdivarci | 0:0061165683ee | 134 | #define USB_HID_DESCRIPTOR 0x21 /**< HID descriptor value. */ |
| sdivarci | 0:0061165683ee | 135 | #define USB_SMARTCARD_DESCRIPTOR 0x21 /**< Smartcard usb-ccid-specific Descriptor Type. */ |
| sdivarci | 0:0061165683ee | 136 | #define USB_HID_REPORT_DESCRIPTOR 0x22 /**< HID REPORT descriptor value. */ |
| sdivarci | 0:0061165683ee | 137 | #define USB_CS_INTERFACE_DESCRIPTOR 0x24 /**< Audio Class-specific interface Descriptor Type. */ |
| sdivarci | 0:0061165683ee | 138 | #define USB_CS_ENDPOINT_DESCRIPTOR 0x25 /**< Audio Class-specific endpoint Descriptor Type. */ |
| sdivarci | 0:0061165683ee | 139 | #define USB_HUB_DESCRIPTOR 0x29 /**< HUB descriptor value. */ |
| sdivarci | 0:0061165683ee | 140 | #define USB_CA_HEADER_DESCRIPTOR 1 /**< Audio Class-Specific AC Interface Header descriptor.*/ |
| sdivarci | 0:0061165683ee | 141 | #define USB_CA_INPUT_TERMINAL_DESCRIPTOR 2 /**< Audio Class-Specific AC Interface Input Terminal desc. */ |
| sdivarci | 0:0061165683ee | 142 | #define USB_CA_OUTPUT_TERMINAL_DESCRIPTOR 3 /**< Audio Class-Specific AC Interface Output Terminal desc.*/ |
| sdivarci | 0:0061165683ee | 143 | #define USB_CA_MIXER_UNIT_DESCRIPTOR 4 /**< Audio Class-Specific AC Interface Mixer descriptor.*/ |
| sdivarci | 0:0061165683ee | 144 | #define USB_CA_SELECTOR_UNIT_DESCRIPTOR 5 /**< Audio Class-Specific AC Interface Selector desc. */ |
| sdivarci | 0:0061165683ee | 145 | #define USB_CA_FEATURE_UNIT_DESCRIPTOR 6 /**< Audio Class-Specific AC Interface Feature desc. */ |
| sdivarci | 0:0061165683ee | 146 | #define USB_CA_PROCESSING_UNIT_DESCRIPTOR 7 /**< Audio Class-Specific AC Interface Processing desc.*/ |
| sdivarci | 0:0061165683ee | 147 | #define USB_CA_EXTENSION_UNIT_DESCRIPTOR 8 /**< Audio Class-Specific AC Interface Extension desc. */ |
| sdivarci | 0:0061165683ee | 148 | #define USB_CA_EP_GENERAL_DESCRIPTOR 1 /**< Audio Class-Specific general descriptor subtype code.*/ |
| sdivarci | 0:0061165683ee | 149 | #define USB_CA_AS_GENERAL_DESCRIPTOR 1 /**< Audio Class-Specific AS Interface General descriptor.*/ |
| sdivarci | 0:0061165683ee | 150 | #define USB_CA_FORMAT_TYPE_DESCRIPTOR 2 /**< Audio Class-Specific AS Interface Format Type desc. */ |
| sdivarci | 0:0061165683ee | 151 | |
| sdivarci | 0:0061165683ee | 152 | #define USB_DEVICE_DESCSIZE 18 /**< Device descriptor size. */ |
| sdivarci | 0:0061165683ee | 153 | #define USB_CONFIG_DESCSIZE 9 /**< Configuration descriptor size. */ |
| sdivarci | 0:0061165683ee | 154 | #define USB_INTERFACE_DESCSIZE 9 /**< Interface descriptor size. */ |
| sdivarci | 0:0061165683ee | 155 | #define USB_ENDPOINT_DESCSIZE 7 /**< Endpoint descriptor size. */ |
| sdivarci | 0:0061165683ee | 156 | #define USB_DEVICE_QUALIFIER_DESCSIZE 10 /**< Device qualifier descriptor size. */ |
| sdivarci | 0:0061165683ee | 157 | #define USB_OTHER_SPEED_CONFIG_DESCSIZE 9 /**< Device other speed configuration descriptor size. */ |
| sdivarci | 0:0061165683ee | 158 | #define USB_INTERFACE_ASSOCIATION_DESCSIZE 8 /**< INTERFACE_ASSOCIATION descriptor size. */ |
| sdivarci | 0:0061165683ee | 159 | #define USB_HID_DESCSIZE 9 /**< HID descriptor size. */ |
| sdivarci | 0:0061165683ee | 160 | #define USB_SMARTCARD_DESCSIZE 54 /**< CCID descriptor size. */ |
| sdivarci | 0:0061165683ee | 161 | #define USB_CDC_HEADER_FND_DESCSIZE 5 /**< CDC Header functional descriptor size. */ |
| sdivarci | 0:0061165683ee | 162 | #define USB_CDC_CALLMNG_FND_DESCSIZE 5 /**< CDC Call Management functional descriptor size. */ |
| sdivarci | 0:0061165683ee | 163 | #define USB_CDC_ACM_FND_DESCSIZE 4 /**< CDC Abstract Control Management functional descriptor size.*/ |
| sdivarci | 0:0061165683ee | 164 | #define USB_CA_INPUT_TERMINAL_DESCSIZE 12 /**< Audio Input Terminal descriptor size. */ |
| sdivarci | 0:0061165683ee | 165 | #define USB_CA_OUTPUT_TERMINAL_DESCSIZE 9 /**< Audio Output Terminal descriptor size. */ |
| sdivarci | 0:0061165683ee | 166 | #define USB_CA_EP_GENERAL_DESCSIZE 7 /**< Audio Class-Specific general descriptor subtype size.*/ |
| sdivarci | 0:0061165683ee | 167 | #define USB_CA_AS_GENERAL_DESCSIZE 7 /**< Audio Class-Specific AS Interface General desc size.*/ |
| sdivarci | 0:0061165683ee | 168 | #define USB_CA_STD_AS_ENDPOINT_DESCSZIE 9 /**< Audio-class standard audio stream descriptor size.*/ |
| sdivarci | 0:0061165683ee | 169 | |
| sdivarci | 0:0061165683ee | 170 | /* Misc. USB definitions */ |
| sdivarci | 0:0061165683ee | 171 | #define USB_LS_CTRL_EP_MAXSIZE 8 /**< The max size of low speed control endpoints. */ |
| sdivarci | 0:0061165683ee | 172 | #define USB_LS_INTR_EP_MAXSIZE 8 /**< The max size of low speed interrupt endpoints. */ |
| sdivarci | 0:0061165683ee | 173 | #define USB_FS_CTRL_EP_MAXSIZE 64 /**< The max size of full speed control endpoints. */ |
| sdivarci | 0:0061165683ee | 174 | #define USB_FS_INTR_EP_MAXSIZE 64 /**< The max size of full speed interrupt endpoints. */ |
| sdivarci | 0:0061165683ee | 175 | #define USB_FS_BULK_EP_MAXSIZE 64 /**< The max size of full speed bulk endpoints. */ |
| sdivarci | 0:0061165683ee | 176 | #define USB_FS_ISOC_EP_MAXSIZE 1023 /**< The max size of full speed isochronous endpoints. */ |
| sdivarci | 0:0061165683ee | 177 | #define USB_EPTYPE_CTRL 0 /**< Endpoint type control. */ |
| sdivarci | 0:0061165683ee | 178 | #define USB_EPTYPE_ISOC 1 /**< Endpoint type isochron. */ |
| sdivarci | 0:0061165683ee | 179 | #define USB_EPTYPE_BULK 2 /**< Endpoint type bulk. */ |
| sdivarci | 0:0061165683ee | 180 | #define USB_EPTYPE_INTR 3 /**< Endpoint type interrupt. */ |
| sdivarci | 0:0061165683ee | 181 | #define USB_EPSYNC_NO (0 << 2) /**< Endpoint synchronization type, none. */ |
| sdivarci | 0:0061165683ee | 182 | #define USB_EPSYNC_ASYNC (1 << 2) /**< Endpoint synchronization type, asynchronous. */ |
| sdivarci | 0:0061165683ee | 183 | #define USB_EPSYNC_ADAPTIVE (2 << 2) /**< Endpoint synchronization type, adaptive. */ |
| sdivarci | 0:0061165683ee | 184 | #define USB_EPSYNC_SYNC (3 << 2) /**< Endpoint synchronization type, synchronous. */ |
| sdivarci | 0:0061165683ee | 185 | #define USB_EP_DIR_IN 0x80 /**< Endpoint direction mask. */ |
| sdivarci | 0:0061165683ee | 186 | #define USB_SETUP_PKT_SIZE 8 /**< Setup request packet size. */ |
| sdivarci | 0:0061165683ee | 187 | #define USB_EPNUM_MASK 0x0F /**< Endpoint number mask. */ |
| sdivarci | 0:0061165683ee | 188 | #define USB_LANGID_ENUS 0x0409 /**< English-United States language id. */ |
| sdivarci | 0:0061165683ee | 189 | #define USB_MAX_DEVICE_ADDRESS 127 /**< Maximum allowable device address. */ |
| sdivarci | 0:0061165683ee | 190 | |
| sdivarci | 0:0061165683ee | 191 | #define CONFIG_DESC_BM_REMOTEWAKEUP 0x20 /**< Configuration descriptor attribute macro. */ |
| sdivarci | 0:0061165683ee | 192 | #define CONFIG_DESC_BM_SELFPOWERED 0x40 /**< Configuration descriptor attribute macro. */ |
| sdivarci | 0:0061165683ee | 193 | #define CONFIG_DESC_BM_RESERVED_D7 0x80 /**< Configuration descriptor attribute macro. */ |
| sdivarci | 0:0061165683ee | 194 | #define CONFIG_DESC_BM_TRANSFERTYPE 0x03 /**< Configuration descriptor transfer type bitmask. */ |
| sdivarci | 0:0061165683ee | 195 | #define CONFIG_DESC_MAXPOWER_mA(x) (((x)+1)/2) /**< Configuration descriptor power macro. */ |
| sdivarci | 0:0061165683ee | 196 | |
| sdivarci | 0:0061165683ee | 197 | #define DEVICE_IS_SELFPOWERED 0x0001 /**< Standard request GET_STATUS bitmask. */ |
| sdivarci | 0:0061165683ee | 198 | #define REMOTE_WAKEUP_ENABLED 0x0002 /**< Standard request GET_STATUS bitmask. */ |
| sdivarci | 0:0061165683ee | 199 | #define USB_FEATURE_ENDPOINT_HALT 0 /**< Standard request CLEAR/SET_FEATURE bitmask. */ |
| sdivarci | 0:0061165683ee | 200 | #define USB_FEATURE_DEVICE_REMOTE_WAKEUP 1 /**< Standard request CLEAR/SET_FEATURE bitmask. */ |
| sdivarci | 0:0061165683ee | 201 | |
| sdivarci | 0:0061165683ee | 202 | #define HUB_FEATURE_PORT_RESET 4 /**< HUB class request CLEAR/SET_PORT_FEATURE feature selector. */ |
| sdivarci | 0:0061165683ee | 203 | #define HUB_FEATURE_PORT_POWER 8 /**< HUB class request CLEAR/SET_PORT_FEATURE feature selector. */ |
| sdivarci | 0:0061165683ee | 204 | #define HUB_FEATURE_C_PORT_CONNECTION 16 /**< HUB class request CLEAR/SET_PORT_FEATURE feature selector. */ |
| sdivarci | 0:0061165683ee | 205 | #define HUB_FEATURE_C_PORT_RESET 20 /**< HUB class request CLEAR/SET_PORT_FEATURE feature selector. */ |
| sdivarci | 0:0061165683ee | 206 | #define HUB_FEATURE_PORT_INDICATOR 22 /**< HUB class request CLEAR/SET_PORT_FEATURE feature selector. */ |
| sdivarci | 0:0061165683ee | 207 | |
| sdivarci | 0:0061165683ee | 208 | #define USB_CLASS_CDC 2 /**< CDC device/interface class code. */ |
| sdivarci | 0:0061165683ee | 209 | #define USB_CLASS_CDC_DATA 0x0A /**< CDC Data interface class code. */ |
| sdivarci | 0:0061165683ee | 210 | #define USB_CLASS_CDC_ACM 2 /**< CDC Abstract Control Model interface subclass code. */ |
| sdivarci | 0:0061165683ee | 211 | #define USB_CLASS_CDC_HFN 0 /**< CDC class Header Functional Descriptor subtype. */ |
| sdivarci | 0:0061165683ee | 212 | #define USB_CLASS_CDC_CMNGFN 1 /**< CDC class Call Management Functional Descriptor subtype.*/ |
| sdivarci | 0:0061165683ee | 213 | #define USB_CLASS_CDC_ACMFN 2 /**< CDC class Abstract Control Management Functional Descriptor subtype.*/ |
| sdivarci | 0:0061165683ee | 214 | #define USB_CLASS_CDC_UNIONFN 6 /**< CDC class Union Functional Descriptor subtype. */ |
| sdivarci | 0:0061165683ee | 215 | |
| sdivarci | 0:0061165683ee | 216 | #define USB_CLASS_HID 3 /**< HID device/interface class code. */ |
| sdivarci | 0:0061165683ee | 217 | #define USB_CLASS_HID_KEYBOARD 1 /**< HID keyboard interface protocol code. */ |
| sdivarci | 0:0061165683ee | 218 | #define USB_CLASS_HID_MOUSE 2 /**< HID mouse interface protocol code. */ |
| sdivarci | 0:0061165683ee | 219 | |
| sdivarci | 0:0061165683ee | 220 | #define USB_CLASS_HUB 9 /**< HUB device/interface class code. */ |
| sdivarci | 0:0061165683ee | 221 | |
| sdivarci | 0:0061165683ee | 222 | #define USB_CLASS_MSD 8 /**< MSD device/interface class code. */ |
| sdivarci | 0:0061165683ee | 223 | #define USB_CLASS_MSD_BOT_TRANSPORT 0x50 /**< MSD Bulk Only Transport protocol. */ |
| sdivarci | 0:0061165683ee | 224 | #define USB_CLASS_MSD_SCSI_CMDSET 6 /**< MSD Subclass SCSI transparent command set. */ |
| sdivarci | 0:0061165683ee | 225 | #define USB_CLASS_MSD_CSW_CMDPASSED 0 /**< MSD BOT Command status wrapper command passed code. */ |
| sdivarci | 0:0061165683ee | 226 | #define USB_CLASS_MSD_CSW_CMDFAILED 1 /**< MSD BOT Command status wrapper command failed code. */ |
| sdivarci | 0:0061165683ee | 227 | #define USB_CLASS_MSD_CSW_PHASEERROR 2 /**< MSD BOT Command status wrapper cmd phase error code.*/ |
| sdivarci | 0:0061165683ee | 228 | |
| sdivarci | 0:0061165683ee | 229 | #define USB_CLASS_AUDIO 1 /**< Audio interface class code. */ |
| sdivarci | 0:0061165683ee | 230 | #define USB_CLASS_AUDIO_CONTROL 1 /**< Audio subclass code for control interface. */ |
| sdivarci | 0:0061165683ee | 231 | #define USB_CLASS_AUDIO_STREAMING 2 /**< Audio subclass code for streaming interface. */ |
| sdivarci | 0:0061165683ee | 232 | #define USB_CLASS_AUDIO_MIDISTREAMING 3 /**< Audio subclass code for midi streaming interface. */ |
| sdivarci | 0:0061165683ee | 233 | |
| sdivarci | 0:0061165683ee | 234 | /*** Triplet for the device descriptor of a composite device using IAD descriptors. ***/ |
| sdivarci | 0:0061165683ee | 235 | #define USB_CLASS_MISCELLANEOUS 0xEF /**< MISCELLANEOUS device class code. */ |
| sdivarci | 0:0061165683ee | 236 | #define USB_CLASS_MISC_COMMON_SUBCLASS 2 /**< MISCELLANEOUS Common sub class code. */ |
| sdivarci | 0:0061165683ee | 237 | #define USB_CLASS_MISC_IAD_PROTOCOL 1 /**< MISCELLANEOUS Interface Association Descriptor protocol code. */ |
| sdivarci | 0:0061165683ee | 238 | |
| sdivarci | 0:0061165683ee | 239 | #define PORT_FULL_SPEED 1 /**< Full speed return value for USBH_GetPortSpeed(). */ |
| sdivarci | 0:0061165683ee | 240 | #define PORT_LOW_SPEED 2 /**< Low speed return value for USBH_GetPortSpeed(). */ |
| sdivarci | 0:0061165683ee | 241 | |
| sdivarci | 0:0061165683ee | 242 | #if defined( __GNUC__ ) /* GCC compilers */ |
| sdivarci | 0:0061165683ee | 243 | #if defined( __CHAR16_TYPE__ ) |
| sdivarci | 0:0061165683ee | 244 | typedef __CHAR16_TYPE__ char16_t; |
| sdivarci | 0:0061165683ee | 245 | #else |
| sdivarci | 0:0061165683ee | 246 | typedef unsigned short char16_t; |
| sdivarci | 0:0061165683ee | 247 | #endif |
| sdivarci | 0:0061165683ee | 248 | |
| sdivarci | 0:0061165683ee | 249 | #elif defined( __ICCARM__ ) /* IAR compiler */ |
| sdivarci | 0:0061165683ee | 250 | #include <uchar.h> |
| sdivarci | 0:0061165683ee | 251 | |
| sdivarci | 0:0061165683ee | 252 | #elif defined( __CC_ARM ) /* MDK-ARM compiler */ |
| sdivarci | 0:0061165683ee | 253 | typedef unsigned short char16_t; |
| sdivarci | 0:0061165683ee | 254 | #endif |
| sdivarci | 0:0061165683ee | 255 | |
| sdivarci | 0:0061165683ee | 256 | /** Macro for creating USB compliant UTF-16LE UNICODE string descriptors. |
| sdivarci | 0:0061165683ee | 257 | * @n Example: STATIC_CONST_STRING_DESC( iManufacturer, 'E','n','e','r','g','y',' ','M','i','c','r','o',' ','A','S' ); |
| sdivarci | 0:0061165683ee | 258 | * @note The size of the resulting struct will be two byte larger than a USB string |
| sdivarci | 0:0061165683ee | 259 | * descriptor. This is to accommodate a terminating null char for the string. |
| sdivarci | 0:0061165683ee | 260 | * The value assigned to the 'len' member does not take this into account |
| sdivarci | 0:0061165683ee | 261 | * and is therefore correct usb wise. |
| sdivarci | 0:0061165683ee | 262 | */ |
| sdivarci | 0:0061165683ee | 263 | #define STATIC_CONST_STRING_DESC( _name, ... ) \ |
| sdivarci | 0:0061165683ee | 264 | EFM32_PACK_START( 1 ) \ |
| sdivarci | 0:0061165683ee | 265 | typedef struct \ |
| sdivarci | 0:0061165683ee | 266 | { \ |
| sdivarci | 0:0061165683ee | 267 | uint8_t len; \ |
| sdivarci | 0:0061165683ee | 268 | uint8_t type; \ |
| sdivarci | 0:0061165683ee | 269 | char16_t name[ 1 + sizeof( (char16_t[]){__VA_ARGS__} ) / 2]; \ |
| sdivarci | 0:0061165683ee | 270 | } __attribute__ ((packed)) _##_name; \ |
| sdivarci | 0:0061165683ee | 271 | EFM32_PACK_END() \ |
| sdivarci | 0:0061165683ee | 272 | EFM32_ALIGN( 4 ) \ |
| sdivarci | 0:0061165683ee | 273 | EFM32_PACK_START( 1 ) \ |
| sdivarci | 0:0061165683ee | 274 | static const _##_name _name __attribute__ ((aligned(4)))= \ |
| sdivarci | 0:0061165683ee | 275 | { \ |
| sdivarci | 0:0061165683ee | 276 | .len = sizeof( _##_name ) - 2, \ |
| sdivarci | 0:0061165683ee | 277 | .type = USB_STRING_DESCRIPTOR, \ |
| sdivarci | 0:0061165683ee | 278 | .name = {__VA_ARGS__}, \ |
| sdivarci | 0:0061165683ee | 279 | .name[ ( ( sizeof( _##_name ) - 2 ) / 2 ) - 1 ] = '\0' \ |
| sdivarci | 0:0061165683ee | 280 | } \ |
| sdivarci | 0:0061165683ee | 281 | EFM32_PACK_END() |
| sdivarci | 0:0061165683ee | 282 | |
| sdivarci | 0:0061165683ee | 283 | /** Macro for creating USB compliant language string descriptors. |
| sdivarci | 0:0061165683ee | 284 | * @n Example: STATIC_CONST_STRING_DESC_LANGID( langID, 0x04, 0x09 ); |
| sdivarci | 0:0061165683ee | 285 | */ |
| sdivarci | 0:0061165683ee | 286 | #define STATIC_CONST_STRING_DESC_LANGID( _name, x, y ) \ |
| sdivarci | 0:0061165683ee | 287 | EFM32_PACK_START( 1 ) \ |
| sdivarci | 0:0061165683ee | 288 | typedef struct \ |
| sdivarci | 0:0061165683ee | 289 | { \ |
| sdivarci | 0:0061165683ee | 290 | uint8_t len; \ |
| sdivarci | 0:0061165683ee | 291 | uint8_t type; \ |
| sdivarci | 0:0061165683ee | 292 | uint8_t name[ 2 ]; \ |
| sdivarci | 0:0061165683ee | 293 | } __attribute__ ((packed)) _##_name; \ |
| sdivarci | 0:0061165683ee | 294 | EFM32_PACK_END() \ |
| sdivarci | 0:0061165683ee | 295 | EFM32_ALIGN( 4 ) \ |
| sdivarci | 0:0061165683ee | 296 | EFM32_PACK_START( 1 ) \ |
| sdivarci | 0:0061165683ee | 297 | static const _##_name _name __attribute__ ((aligned(4)))= \ |
| sdivarci | 0:0061165683ee | 298 | { \ |
| sdivarci | 0:0061165683ee | 299 | .len = 4, \ |
| sdivarci | 0:0061165683ee | 300 | .type = USB_STRING_DESCRIPTOR, \ |
| sdivarci | 0:0061165683ee | 301 | .name = { y, x } \ |
| sdivarci | 0:0061165683ee | 302 | } \ |
| sdivarci | 0:0061165683ee | 303 | EFM32_PACK_END() |
| sdivarci | 0:0061165683ee | 304 | |
| sdivarci | 0:0061165683ee | 305 | /** Macro for creating WORD (4 byte) aligned uint8_t array with size which |
| sdivarci | 0:0061165683ee | 306 | * is a multiple of WORD size. |
| sdivarci | 0:0061165683ee | 307 | * @n Example: @n UBUF( rxBuffer, 37 ); => uint8_t rxBuffer[ 40 ]; |
| sdivarci | 0:0061165683ee | 308 | */ |
| sdivarci | 0:0061165683ee | 309 | #if !defined(__GNUC__) |
| sdivarci | 0:0061165683ee | 310 | #define UBUF( x, y ) EFM32_ALIGN( 4 ) uint8_t x[((y)+3)&~3] |
| sdivarci | 0:0061165683ee | 311 | #define STATIC_UBUF( x, y ) EFM32_ALIGN( 4 ) static uint8_t x[((y)+3)&~3] |
| sdivarci | 0:0061165683ee | 312 | #else |
| sdivarci | 0:0061165683ee | 313 | #define UBUF( x, y ) uint8_t x[((y)+3)&~3] __attribute__ ((aligned(4))) |
| sdivarci | 0:0061165683ee | 314 | |
| sdivarci | 0:0061165683ee | 315 | /** Macro for creating WORD (4 byte) aligned static uint8_t arrays with size which |
| sdivarci | 0:0061165683ee | 316 | * is a multiple of WORD size. |
| sdivarci | 0:0061165683ee | 317 | * @n Example: @n STATIC_UBUF( rxBuffer, 37 ); => static uint8_t rxBuffer[ 40 ]; |
| sdivarci | 0:0061165683ee | 318 | */ |
| sdivarci | 0:0061165683ee | 319 | #define STATIC_UBUF( x, y ) static uint8_t x[((y)+3)&~3] __attribute__ ((aligned(4))) |
| sdivarci | 0:0061165683ee | 320 | #endif |
| sdivarci | 0:0061165683ee | 321 | |
| sdivarci | 0:0061165683ee | 322 | |
| sdivarci | 0:0061165683ee | 323 | /** @brief USB transfer status enumerator. */ |
| sdivarci | 0:0061165683ee | 324 | typedef enum |
| sdivarci | 0:0061165683ee | 325 | { |
| sdivarci | 0:0061165683ee | 326 | /* NOTE: Please keep in sync with table errMsg[] in em_usbhal.c */ |
| sdivarci | 0:0061165683ee | 327 | USB_STATUS_OK = 0, /**< No errors detected. */ |
| sdivarci | 0:0061165683ee | 328 | USB_STATUS_REQ_ERR = -1, /**< Setup request error. */ |
| sdivarci | 0:0061165683ee | 329 | USB_STATUS_EP_BUSY = -2, /**< Endpoint is busy. */ |
| sdivarci | 0:0061165683ee | 330 | USB_STATUS_REQ_UNHANDLED = -3, /**< Setup request not handled. */ |
| sdivarci | 0:0061165683ee | 331 | USB_STATUS_ILLEGAL = -4, /**< Illegal operation attempted. */ |
| sdivarci | 0:0061165683ee | 332 | USB_STATUS_EP_STALLED = -5, /**< Endpoint is stalled. */ |
| sdivarci | 0:0061165683ee | 333 | USB_STATUS_EP_ABORTED = -6, /**< Endpoint transfer was aborted. */ |
| sdivarci | 0:0061165683ee | 334 | USB_STATUS_EP_ERROR = -7, /**< Endpoint transfer error. */ |
| sdivarci | 0:0061165683ee | 335 | USB_STATUS_EP_NAK = -8, /**< Endpoint NAK'ed transfer request. */ |
| sdivarci | 0:0061165683ee | 336 | USB_STATUS_DEVICE_UNCONFIGURED = -9, /**< Device is unconfigured. */ |
| sdivarci | 0:0061165683ee | 337 | USB_STATUS_DEVICE_SUSPENDED = -10, /**< Device is suspended. */ |
| sdivarci | 0:0061165683ee | 338 | USB_STATUS_DEVICE_RESET = -11, /**< Device is/was reset. */ |
| sdivarci | 0:0061165683ee | 339 | USB_STATUS_TIMEOUT = -12, /**< Transfer timeout. */ |
| sdivarci | 0:0061165683ee | 340 | USB_STATUS_DEVICE_REMOVED = -13, /**< Device was removed. */ |
| sdivarci | 0:0061165683ee | 341 | USB_STATUS_HC_BUSY = -14, /**< Host channel is busy. */ |
| sdivarci | 0:0061165683ee | 342 | USB_STATUS_DEVICE_MALFUNCTION = -15, /**< Malfunctioning device attached. */ |
| sdivarci | 0:0061165683ee | 343 | USB_STATUS_PORT_OVERCURRENT = -16, /**< VBUS shortcircuit/overcurrent failure. */ |
| sdivarci | 0:0061165683ee | 344 | } USB_Status_TypeDef; |
| sdivarci | 0:0061165683ee | 345 | /** @} (end addtogroup USB_COMMON) */ |
| sdivarci | 0:0061165683ee | 346 | |
| sdivarci | 0:0061165683ee | 347 | |
| sdivarci | 0:0061165683ee | 348 | #if defined( USB_DEVICE ) |
| sdivarci | 0:0061165683ee | 349 | /***************************************************************************//** |
| sdivarci | 0:0061165683ee | 350 | * @addtogroup USB_DEVICE |
| sdivarci | 0:0061165683ee | 351 | * @brief USB DEVICE protocol stack, see @ref usb_device page for detailed documentation. |
| sdivarci | 0:0061165683ee | 352 | * @{ |
| sdivarci | 0:0061165683ee | 353 | ******************************************************************************/ |
| sdivarci | 0:0061165683ee | 354 | |
| sdivarci | 0:0061165683ee | 355 | #define USB_PWRSAVE_MODE_OFF 0 /**< No energy saving mode selected. */ |
| sdivarci | 0:0061165683ee | 356 | #define USB_PWRSAVE_MODE_ONSUSPEND 1 /**< Enter USB power-save mode on suspend. */ |
| sdivarci | 0:0061165683ee | 357 | #define USB_PWRSAVE_MODE_ONVBUSOFF 2 /**< Enter USB power-save mode when not attached to host. */ |
| sdivarci | 0:0061165683ee | 358 | #define USB_PWRSAVE_MODE_ENTEREM2 4 /**< Enter EM2 while in power-save mode. */ |
| sdivarci | 0:0061165683ee | 359 | |
| sdivarci | 0:0061165683ee | 360 | #define USB_USBC_32kHz_CLK_LFXO 0 /**< Use 32kHz LFXO clock while in powersave mode. */ |
| sdivarci | 0:0061165683ee | 361 | #define USB_USBC_32kHz_CLK_LFRCO 1 /**< Use 32kHz LFRCO clock while in powersave mode. */ |
| sdivarci | 0:0061165683ee | 362 | |
| sdivarci | 0:0061165683ee | 363 | /** @brief USB device state enumerator. */ |
| sdivarci | 0:0061165683ee | 364 | typedef enum |
| sdivarci | 0:0061165683ee | 365 | { |
| sdivarci | 0:0061165683ee | 366 | USBD_STATE_NONE = 0, /**< Device state is undefined/unknown. */ |
| sdivarci | 0:0061165683ee | 367 | USBD_STATE_ATTACHED = 1, /**< Device state is ATTACHED. */ |
| sdivarci | 0:0061165683ee | 368 | USBD_STATE_POWERED = 2, /**< Device state is POWERED. */ |
| sdivarci | 0:0061165683ee | 369 | USBD_STATE_DEFAULT = 3, /**< Device state is DEFAULT. */ |
| sdivarci | 0:0061165683ee | 370 | USBD_STATE_ADDRESSED = 4, /**< Device state is ADDRESSED. */ |
| sdivarci | 0:0061165683ee | 371 | USBD_STATE_CONFIGURED = 5, /**< Device state is CONFIGURED. */ |
| sdivarci | 0:0061165683ee | 372 | USBD_STATE_SUSPENDED = 6, /**< Device state is SUSPENDED. */ |
| sdivarci | 0:0061165683ee | 373 | USBD_STATE_LASTMARKER = 7, /**< Device state enum end marker. */ |
| sdivarci | 0:0061165683ee | 374 | } USBD_State_TypeDef; |
| sdivarci | 0:0061165683ee | 375 | /** @} (end addtogroup USB_DEVICE) */ |
| sdivarci | 0:0061165683ee | 376 | #endif /* defined( USB_DEVICE ) */ |
| sdivarci | 0:0061165683ee | 377 | |
| sdivarci | 0:0061165683ee | 378 | /** @addtogroup USB_COMMON |
| sdivarci | 0:0061165683ee | 379 | * @{*/ |
| sdivarci | 0:0061165683ee | 380 | |
| sdivarci | 0:0061165683ee | 381 | /** @brief USB Setup request package. */ |
| sdivarci | 0:0061165683ee | 382 | EFM32_PACK_START( 1 ) |
| sdivarci | 0:0061165683ee | 383 | typedef struct |
| sdivarci | 0:0061165683ee | 384 | { |
| sdivarci | 0:0061165683ee | 385 | union |
| sdivarci | 0:0061165683ee | 386 | { |
| sdivarci | 0:0061165683ee | 387 | struct |
| sdivarci | 0:0061165683ee | 388 | { |
| sdivarci | 0:0061165683ee | 389 | union |
| sdivarci | 0:0061165683ee | 390 | { |
| sdivarci | 0:0061165683ee | 391 | struct |
| sdivarci | 0:0061165683ee | 392 | { |
| sdivarci | 0:0061165683ee | 393 | uint8_t Recipient : 5; /**< Request recipient (device, interface, endpoint or other).*/ |
| sdivarci | 0:0061165683ee | 394 | uint8_t Type : 2; /**< Request type (standard, class or vendor). */ |
| sdivarci | 0:0061165683ee | 395 | uint8_t Direction : 1; /**< Transfer direction of SETUP data phase. */ |
| sdivarci | 0:0061165683ee | 396 | }; |
| sdivarci | 0:0061165683ee | 397 | uint8_t bmRequestType; /**< Request characteristics. */ |
| sdivarci | 0:0061165683ee | 398 | }; |
| sdivarci | 0:0061165683ee | 399 | uint8_t bRequest; /**< Request code. */ |
| sdivarci | 0:0061165683ee | 400 | uint16_t wValue; /**< Varies according to request. */ |
| sdivarci | 0:0061165683ee | 401 | uint16_t wIndex; /**< Index or offset, varies according to request. */ |
| sdivarci | 0:0061165683ee | 402 | uint16_t wLength; /**< Number of bytes to transfer if there is a data stage.*/ |
| sdivarci | 0:0061165683ee | 403 | }; |
| sdivarci | 0:0061165683ee | 404 | uint32_t dw[2]; |
| sdivarci | 0:0061165683ee | 405 | }; |
| sdivarci | 0:0061165683ee | 406 | } __attribute__ ((packed)) USB_Setup_TypeDef; |
| sdivarci | 0:0061165683ee | 407 | EFM32_PACK_END() |
| sdivarci | 0:0061165683ee | 408 | |
| sdivarci | 0:0061165683ee | 409 | |
| sdivarci | 0:0061165683ee | 410 | /** @brief USB Device Descriptor. */ |
| sdivarci | 0:0061165683ee | 411 | EFM32_PACK_START( 1 ) |
| sdivarci | 0:0061165683ee | 412 | typedef struct |
| sdivarci | 0:0061165683ee | 413 | { |
| sdivarci | 0:0061165683ee | 414 | uint8_t bLength; /**< Size of this descriptor in bytes */ |
| sdivarci | 0:0061165683ee | 415 | uint8_t bDescriptorType; /**< Constant DEVICE Descriptor Type */ |
| sdivarci | 0:0061165683ee | 416 | uint16_t bcdUSB; /**< USB Specification Release Number in Binary-Coded |
| sdivarci | 0:0061165683ee | 417 | Decimal */ |
| sdivarci | 0:0061165683ee | 418 | uint8_t bDeviceClass; /**< Class code (assigned by the USB-IF) */ |
| sdivarci | 0:0061165683ee | 419 | uint8_t bDeviceSubClass; /**< Subclass code (assigned by the USB-IF) */ |
| sdivarci | 0:0061165683ee | 420 | uint8_t bDeviceProtocol; /**< Protocol code (assigned by the USB-IF) */ |
| sdivarci | 0:0061165683ee | 421 | uint8_t bMaxPacketSize0; /**< Maximum packet size for endpoint zero */ |
| sdivarci | 0:0061165683ee | 422 | uint16_t idVendor; /**< Vendor ID (assigned by the USB-IF) */ |
| sdivarci | 0:0061165683ee | 423 | uint16_t idProduct; /**< Product ID (assigned by the manufacturer) */ |
| sdivarci | 0:0061165683ee | 424 | uint16_t bcdDevice; /**< Device release number in binary-coded decimal */ |
| sdivarci | 0:0061165683ee | 425 | uint8_t iManufacturer; /**< Index of string descriptor describing manufacturer*/ |
| sdivarci | 0:0061165683ee | 426 | uint8_t iProduct; /**< Index of string descriptor describing product */ |
| sdivarci | 0:0061165683ee | 427 | uint8_t iSerialNumber; /**< Index of string descriptor describing the device |
| sdivarci | 0:0061165683ee | 428 | serialnumber */ |
| sdivarci | 0:0061165683ee | 429 | uint8_t bNumConfigurations; /**< Number of possible configurations */ |
| sdivarci | 0:0061165683ee | 430 | } __attribute__ ((packed)) USB_DeviceDescriptor_TypeDef; |
| sdivarci | 0:0061165683ee | 431 | EFM32_PACK_END() |
| sdivarci | 0:0061165683ee | 432 | |
| sdivarci | 0:0061165683ee | 433 | |
| sdivarci | 0:0061165683ee | 434 | /** @brief USB Configuration Descriptor. */ |
| sdivarci | 0:0061165683ee | 435 | EFM32_PACK_START( 1 ) |
| sdivarci | 0:0061165683ee | 436 | typedef struct |
| sdivarci | 0:0061165683ee | 437 | { |
| sdivarci | 0:0061165683ee | 438 | uint8_t bLength; /**< Size of this descriptor in bytes */ |
| sdivarci | 0:0061165683ee | 439 | uint8_t bDescriptorType; /**< Constant CONFIGURATION Descriptor Type */ |
| sdivarci | 0:0061165683ee | 440 | uint16_t wTotalLength; /**< Total length of data returned for this |
| sdivarci | 0:0061165683ee | 441 | configuration. Includes the combined length of all |
| sdivarci | 0:0061165683ee | 442 | descriptors (configuration, interface, endpoint, |
| sdivarci | 0:0061165683ee | 443 | and class- or vendor-specific) returned for this |
| sdivarci | 0:0061165683ee | 444 | configuration. */ |
| sdivarci | 0:0061165683ee | 445 | uint8_t bNumInterfaces; /**< Number of interfaces supported by this |
| sdivarci | 0:0061165683ee | 446 | configuration */ |
| sdivarci | 0:0061165683ee | 447 | uint8_t bConfigurationValue; /**< Value to use as an argument to the |
| sdivarci | 0:0061165683ee | 448 | SetConfiguration request to select this |
| sdivarci | 0:0061165683ee | 449 | configuration. */ |
| sdivarci | 0:0061165683ee | 450 | uint8_t iConfiguration; /**< Index of string descriptor describing this |
| sdivarci | 0:0061165683ee | 451 | configuration. */ |
| sdivarci | 0:0061165683ee | 452 | uint8_t bmAttributes; /**< Configuration characteristics. |
| sdivarci | 0:0061165683ee | 453 | @n D7: Reserved (set to one) |
| sdivarci | 0:0061165683ee | 454 | @n D6: Self-powered |
| sdivarci | 0:0061165683ee | 455 | @n D5: Remote Wakeup |
| sdivarci | 0:0061165683ee | 456 | @n D4...0: Reserved (reset to zero) */ |
| sdivarci | 0:0061165683ee | 457 | uint8_t bMaxPower; /**< Maximum power consumption of the USB device, unit |
| sdivarci | 0:0061165683ee | 458 | is 2mA per LSB */ |
| sdivarci | 0:0061165683ee | 459 | } __attribute__ ((packed)) USB_ConfigurationDescriptor_TypeDef; |
| sdivarci | 0:0061165683ee | 460 | EFM32_PACK_END() |
| sdivarci | 0:0061165683ee | 461 | |
| sdivarci | 0:0061165683ee | 462 | |
| sdivarci | 0:0061165683ee | 463 | /** @brief USB Interface Descriptor. */ |
| sdivarci | 0:0061165683ee | 464 | EFM32_PACK_START( 1 ) |
| sdivarci | 0:0061165683ee | 465 | typedef struct |
| sdivarci | 0:0061165683ee | 466 | { |
| sdivarci | 0:0061165683ee | 467 | uint8_t bLength; /**< Size of this descriptor in bytes. */ |
| sdivarci | 0:0061165683ee | 468 | uint8_t bDescriptorType; /**< Constant INTERFACE Descriptor Type. */ |
| sdivarci | 0:0061165683ee | 469 | uint8_t bInterfaceNumber; /**< Number of this interface. Zero-based value |
| sdivarci | 0:0061165683ee | 470 | identifying the index in the array of concurrent |
| sdivarci | 0:0061165683ee | 471 | interfaces supported by this configuration. */ |
| sdivarci | 0:0061165683ee | 472 | uint8_t bAlternateSetting; /**< Value used to select this alternate setting for |
| sdivarci | 0:0061165683ee | 473 | the interface identified in the prior field. */ |
| sdivarci | 0:0061165683ee | 474 | uint8_t bNumEndpoints; /**< Number of endpoints used by this interface |
| sdivarci | 0:0061165683ee | 475 | (excluding endpoint zero). If this value is zero, |
| sdivarci | 0:0061165683ee | 476 | this interface only uses the Default Control Pipe.*/ |
| sdivarci | 0:0061165683ee | 477 | uint8_t bInterfaceClass; /**< Class code (assigned by the USB-IF). A value |
| sdivarci | 0:0061165683ee | 478 | of zero is reserved for future standardization. If |
| sdivarci | 0:0061165683ee | 479 | this field is set to FFH, the interface class is |
| sdivarci | 0:0061165683ee | 480 | vendor-specific. All other values are reserved for |
| sdivarci | 0:0061165683ee | 481 | assignment by the USB-IF. */ |
| sdivarci | 0:0061165683ee | 482 | uint8_t bInterfaceSubClass; /**< Subclass code (assigned by the USB-IF). These codes |
| sdivarci | 0:0061165683ee | 483 | are qualified by the value of the bInterfaceClass |
| sdivarci | 0:0061165683ee | 484 | field. If the bInterfaceClass field is reset to |
| sdivarci | 0:0061165683ee | 485 | zero, this field must also be reset to zero. If |
| sdivarci | 0:0061165683ee | 486 | the bInterfaceClass field is not set to FFH, all |
| sdivarci | 0:0061165683ee | 487 | values are reserved forassignment by the USB-IF. */ |
| sdivarci | 0:0061165683ee | 488 | uint8_t bInterfaceProtocol; /**< Protocol code (assigned by the USB). These codes |
| sdivarci | 0:0061165683ee | 489 | are qualified by the value of the bInterfaceClass |
| sdivarci | 0:0061165683ee | 490 | and the bInterfaceSubClass fields. If an interface |
| sdivarci | 0:0061165683ee | 491 | supports class-specific requests, this code |
| sdivarci | 0:0061165683ee | 492 | identifies the protocols that the device uses as |
| sdivarci | 0:0061165683ee | 493 | defined by the specification of the device class. |
| sdivarci | 0:0061165683ee | 494 | If this field is reset to zero, the device does |
| sdivarci | 0:0061165683ee | 495 | not use a class-specific protocol on this |
| sdivarci | 0:0061165683ee | 496 | interface. If this field is set to FFH, the device |
| sdivarci | 0:0061165683ee | 497 | uses a vendor-specific protocol for this interface*/ |
| sdivarci | 0:0061165683ee | 498 | uint8_t iInterface; /**< Index of string descriptor describing this |
| sdivarci | 0:0061165683ee | 499 | interface. */ |
| sdivarci | 0:0061165683ee | 500 | } __attribute__ ((packed)) USB_InterfaceDescriptor_TypeDef; |
| sdivarci | 0:0061165683ee | 501 | EFM32_PACK_END() |
| sdivarci | 0:0061165683ee | 502 | |
| sdivarci | 0:0061165683ee | 503 | |
| sdivarci | 0:0061165683ee | 504 | /** @brief USB Endpoint Descriptor. */ |
| sdivarci | 0:0061165683ee | 505 | EFM32_PACK_START( 1 ) |
| sdivarci | 0:0061165683ee | 506 | typedef struct |
| sdivarci | 0:0061165683ee | 507 | { |
| sdivarci | 0:0061165683ee | 508 | uint8_t bLength; /**< Size of this descriptor in bytes */ |
| sdivarci | 0:0061165683ee | 509 | uint8_t bDescriptorType; /**< Constant ENDPOINT Descriptor Type */ |
| sdivarci | 0:0061165683ee | 510 | uint8_t bEndpointAddress; /**< The address of the endpoint */ |
| sdivarci | 0:0061165683ee | 511 | uint8_t bmAttributes; /**< This field describes the endpoint attributes */ |
| sdivarci | 0:0061165683ee | 512 | uint16_t wMaxPacketSize; /**< Maximum packet size for the endpoint */ |
| sdivarci | 0:0061165683ee | 513 | uint8_t bInterval; /**< Interval for polling EP for data transfers */ |
| sdivarci | 0:0061165683ee | 514 | } __attribute__ ((packed)) USB_EndpointDescriptor_TypeDef; |
| sdivarci | 0:0061165683ee | 515 | EFM32_PACK_END() |
| sdivarci | 0:0061165683ee | 516 | |
| sdivarci | 0:0061165683ee | 517 | |
| sdivarci | 0:0061165683ee | 518 | /** @brief USB String Descriptor. */ |
| sdivarci | 0:0061165683ee | 519 | EFM32_PACK_START( 1 ) |
| sdivarci | 0:0061165683ee | 520 | typedef struct |
| sdivarci | 0:0061165683ee | 521 | { |
| sdivarci | 0:0061165683ee | 522 | uint8_t len; /**< Size of this descriptor in bytes. */ |
| sdivarci | 0:0061165683ee | 523 | uint8_t type; /**< Constant STRING Descriptor Type. */ |
| sdivarci | 0:0061165683ee | 524 | char16_t name[]; /**< The string encoded with UTF-16LE UNICODE charset. */ |
| sdivarci | 0:0061165683ee | 525 | } __attribute__ ((packed)) USB_StringDescriptor_TypeDef; |
| sdivarci | 0:0061165683ee | 526 | EFM32_PACK_END() |
| sdivarci | 0:0061165683ee | 527 | |
| sdivarci | 0:0061165683ee | 528 | /** @} (end addtogroup USB_COMMON) */ |
| sdivarci | 0:0061165683ee | 529 | |
| sdivarci | 0:0061165683ee | 530 | /*** -------------------- Serial port debug configuration ---------------- ***/ |
| sdivarci | 0:0061165683ee | 531 | |
| sdivarci | 0:0061165683ee | 532 | #if defined( DOXY_DOC_ONLY ) |
| sdivarci | 0:0061165683ee | 533 | /** @addtogroup USB_COMMON |
| sdivarci | 0:0061165683ee | 534 | * @{*/ |
| sdivarci | 0:0061165683ee | 535 | |
| sdivarci | 0:0061165683ee | 536 | /***************************************************************************//** |
| sdivarci | 0:0061165683ee | 537 | * @brief |
| sdivarci | 0:0061165683ee | 538 | * Transmit a single char on the debug serial port. |
| sdivarci | 0:0061165683ee | 539 | * |
| sdivarci | 0:0061165683ee | 540 | * @note |
| sdivarci | 0:0061165683ee | 541 | * This function is enabled with \#define DEBUG_USB_API when configuring the |
| sdivarci | 0:0061165683ee | 542 | * protocol stack in "usbconfig.h". |
| sdivarci | 0:0061165683ee | 543 | * This is convenient when debugging code, no need to remove use of this |
| sdivarci | 0:0061165683ee | 544 | * function when debugging has completed. |
| sdivarci | 0:0061165683ee | 545 | * |
| sdivarci | 0:0061165683ee | 546 | * @param[in] c |
| sdivarci | 0:0061165683ee | 547 | * Char to transmit. |
| sdivarci | 0:0061165683ee | 548 | * |
| sdivarci | 0:0061165683ee | 549 | * @return |
| sdivarci | 0:0061165683ee | 550 | * The char transmitted. |
| sdivarci | 0:0061165683ee | 551 | ******************************************************************************/ |
| sdivarci | 0:0061165683ee | 552 | int USB_PUTCHAR( char c ); |
| sdivarci | 0:0061165683ee | 553 | |
| sdivarci | 0:0061165683ee | 554 | /***************************************************************************//** |
| sdivarci | 0:0061165683ee | 555 | * @brief |
| sdivarci | 0:0061165683ee | 556 | * Transmit a zero terminated string on the debug serial port. |
| sdivarci | 0:0061165683ee | 557 | * |
| sdivarci | 0:0061165683ee | 558 | * @note |
| sdivarci | 0:0061165683ee | 559 | * This function is enabled with \#define DEBUG_USB_API when configuring the |
| sdivarci | 0:0061165683ee | 560 | * protocol stack in "usbconfig.h". |
| sdivarci | 0:0061165683ee | 561 | * This is convenient when debugging code, no need to remove use of this |
| sdivarci | 0:0061165683ee | 562 | * function when debugging has completed. |
| sdivarci | 0:0061165683ee | 563 | * |
| sdivarci | 0:0061165683ee | 564 | * @param[in] p |
| sdivarci | 0:0061165683ee | 565 | * Pointer to string to transmit. |
| sdivarci | 0:0061165683ee | 566 | ******************************************************************************/ |
| sdivarci | 0:0061165683ee | 567 | void USB_PUTS( const char *p ); |
| sdivarci | 0:0061165683ee | 568 | |
| sdivarci | 0:0061165683ee | 569 | /***************************************************************************//** |
| sdivarci | 0:0061165683ee | 570 | * @brief |
| sdivarci | 0:0061165683ee | 571 | * Transmit "printf" formated data on the debug serial port. |
| sdivarci | 0:0061165683ee | 572 | * |
| sdivarci | 0:0061165683ee | 573 | * @note |
| sdivarci | 0:0061165683ee | 574 | * This function is enabled with \#define USB_USE_PRINTF when configuring the |
| sdivarci | 0:0061165683ee | 575 | * protocol stack in "usbconfig.h". |
| sdivarci | 0:0061165683ee | 576 | * This is convenient when debugging code, no need to remove use of this |
| sdivarci | 0:0061165683ee | 577 | * function when debugging has completed. |
| sdivarci | 0:0061165683ee | 578 | * |
| sdivarci | 0:0061165683ee | 579 | * @param[in] format |
| sdivarci | 0:0061165683ee | 580 | * Format string (as in printf). No floating point format support. |
| sdivarci | 0:0061165683ee | 581 | ******************************************************************************/ |
| sdivarci | 0:0061165683ee | 582 | int USB_PRINTF( const char *format, ... ); |
| sdivarci | 0:0061165683ee | 583 | |
| sdivarci | 0:0061165683ee | 584 | /** @} (end addtogroup USB_COMMON) */ |
| sdivarci | 0:0061165683ee | 585 | #endif /* defined( DOXY_DOC_ONLY ) */ |
| sdivarci | 0:0061165683ee | 586 | |
| sdivarci | 0:0061165683ee | 587 | /** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */ |
| sdivarci | 0:0061165683ee | 588 | |
| sdivarci | 0:0061165683ee | 589 | /* Hardware constraint, do not change. */ |
| sdivarci | 0:0061165683ee | 590 | #define MAX_NUM_HOSTCHANNELS 14 |
| sdivarci | 0:0061165683ee | 591 | |
| sdivarci | 0:0061165683ee | 592 | /* The DMA engine use one FIFO ram word for each host channel. */ |
| sdivarci | 0:0061165683ee | 593 | #define MAX_HOST_FIFO_SIZE_INWORDS (512-MAX_NUM_HOSTCHANNELS)/*Unit is 4 bytes*/ |
| sdivarci | 0:0061165683ee | 594 | |
| sdivarci | 0:0061165683ee | 595 | #if defined ( USER_PUTCHAR ) |
| sdivarci | 0:0061165683ee | 596 | void USB_Puts( const char *p ); |
| sdivarci | 0:0061165683ee | 597 | #define USB_PUTS( s ) USB_Puts( s ) |
| sdivarci | 0:0061165683ee | 598 | #define USB_PUTCHAR( c ) USER_PUTCHAR( c ) |
| sdivarci | 0:0061165683ee | 599 | #else |
| sdivarci | 0:0061165683ee | 600 | #define USB_PUTS( s ) |
| sdivarci | 0:0061165683ee | 601 | #define USB_PUTCHAR( c ) |
| sdivarci | 0:0061165683ee | 602 | #endif |
| sdivarci | 0:0061165683ee | 603 | |
| sdivarci | 0:0061165683ee | 604 | #if defined( USB_USE_PRINTF ) |
| sdivarci | 0:0061165683ee | 605 | /* Use a printf which don't support floating point formatting */ |
| sdivarci | 0:0061165683ee | 606 | #if defined(__ICCARM__) || defined (__CC_ARM) || defined (__CROSSWORKS_ARM) |
| sdivarci | 0:0061165683ee | 607 | #define USB_PRINTF printf |
| sdivarci | 0:0061165683ee | 608 | #else |
| sdivarci | 0:0061165683ee | 609 | #define USB_PRINTF iprintf |
| sdivarci | 0:0061165683ee | 610 | #endif |
| sdivarci | 0:0061165683ee | 611 | #else |
| sdivarci | 0:0061165683ee | 612 | #define USB_PRINTF(...) |
| sdivarci | 0:0061165683ee | 613 | #endif /* defined( USB_USE_PRINTF ) */ |
| sdivarci | 0:0061165683ee | 614 | |
| sdivarci | 0:0061165683ee | 615 | #if defined( DEBUG_USB_API ) |
| sdivarci | 0:0061165683ee | 616 | #define DEBUG_USB_API_PUTS( s ) USB_PUTS( s ) |
| sdivarci | 0:0061165683ee | 617 | #define DEBUG_USB_API_PUTCHAR( c ) USB_PUTCHAR( c ) |
| sdivarci | 0:0061165683ee | 618 | #else |
| sdivarci | 0:0061165683ee | 619 | #define DEBUG_USB_API_PUTS( s ) |
| sdivarci | 0:0061165683ee | 620 | #define DEBUG_USB_API_PUTCHAR( c ) |
| sdivarci | 0:0061165683ee | 621 | #endif /* defined( DEBUG_USB_API ) */ |
| sdivarci | 0:0061165683ee | 622 | |
| sdivarci | 0:0061165683ee | 623 | /** @endcond */ |
| sdivarci | 0:0061165683ee | 624 | |
| sdivarci | 0:0061165683ee | 625 | /*** -------------------- Common API definitions ------------------------- ***/ |
| sdivarci | 0:0061165683ee | 626 | |
| sdivarci | 0:0061165683ee | 627 | /** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */ |
| sdivarci | 0:0061165683ee | 628 | |
| sdivarci | 0:0061165683ee | 629 | #if defined( USB_HOST ) |
| sdivarci | 0:0061165683ee | 630 | #if defined( NUM_APP_TIMERS ) |
| sdivarci | 0:0061165683ee | 631 | #define NUM_QTIMERS ( NUM_HC_USED + 2 + NUM_APP_TIMERS + 1 ) |
| sdivarci | 0:0061165683ee | 632 | #else |
| sdivarci | 0:0061165683ee | 633 | #define NUM_QTIMERS ( NUM_HC_USED + 2 + 1 ) |
| sdivarci | 0:0061165683ee | 634 | #endif |
| sdivarci | 0:0061165683ee | 635 | /* + 2 for default ctrl. host ch. 0 & 1, + 1 for host port timer */ |
| sdivarci | 0:0061165683ee | 636 | #else |
| sdivarci | 0:0061165683ee | 637 | #if defined( NUM_APP_TIMERS ) |
| sdivarci | 0:0061165683ee | 638 | #define NUM_QTIMERS ( NUM_APP_TIMERS ) |
| sdivarci | 0:0061165683ee | 639 | #else |
| sdivarci | 0:0061165683ee | 640 | #define NUM_QTIMERS 0 |
| sdivarci | 0:0061165683ee | 641 | #endif |
| sdivarci | 0:0061165683ee | 642 | #endif /* defined( USB_HOST ) */ |
| sdivarci | 0:0061165683ee | 643 | /** @endcond */ |
| sdivarci | 0:0061165683ee | 644 | |
| sdivarci | 0:0061165683ee | 645 | /** @addtogroup USB_COMMON |
| sdivarci | 0:0061165683ee | 646 | * @{*/ |
| sdivarci | 0:0061165683ee | 647 | |
| sdivarci | 0:0061165683ee | 648 | /***************************************************************************//** |
| sdivarci | 0:0061165683ee | 649 | * @brief |
| sdivarci | 0:0061165683ee | 650 | * USB transfer callback function. |
| sdivarci | 0:0061165683ee | 651 | * |
| sdivarci | 0:0061165683ee | 652 | * @details |
| sdivarci | 0:0061165683ee | 653 | * The callback function is called when a transfer has completed. An application |
| sdivarci | 0:0061165683ee | 654 | * should check the status, xferred and optionally the remaining parameters |
| sdivarci | 0:0061165683ee | 655 | * before deciding if the transfer is usable. In the case where the transfer |
| sdivarci | 0:0061165683ee | 656 | * is part of a control request data stage, the callback function should |
| sdivarci | 0:0061165683ee | 657 | * return an appropriate @ref USB_Status_TypeDef status. |
| sdivarci | 0:0061165683ee | 658 | * |
| sdivarci | 0:0061165683ee | 659 | * @param[in] status |
| sdivarci | 0:0061165683ee | 660 | * The transfer status. See @ref USB_Status_TypeDef. |
| sdivarci | 0:0061165683ee | 661 | * |
| sdivarci | 0:0061165683ee | 662 | * @param[in] xferred |
| sdivarci | 0:0061165683ee | 663 | * Number of bytes actually transferred. |
| sdivarci | 0:0061165683ee | 664 | * |
| sdivarci | 0:0061165683ee | 665 | * @param[in] remaining |
| sdivarci | 0:0061165683ee | 666 | * Number of bytes not transferred. |
| sdivarci | 0:0061165683ee | 667 | * |
| sdivarci | 0:0061165683ee | 668 | * @return |
| sdivarci | 0:0061165683ee | 669 | * @ref USB_STATUS_OK on success, else an appropriate error code. |
| sdivarci | 0:0061165683ee | 670 | ******************************************************************************/ |
| sdivarci | 0:0061165683ee | 671 | typedef int (*USB_XferCompleteCb_TypeDef)( USB_Status_TypeDef status, uint32_t xferred, uint32_t remaining ); |
| sdivarci | 0:0061165683ee | 672 | |
| sdivarci | 0:0061165683ee | 673 | /***************************************************************************//** |
| sdivarci | 0:0061165683ee | 674 | * @brief |
| sdivarci | 0:0061165683ee | 675 | * USBTIMER callback function. |
| sdivarci | 0:0061165683ee | 676 | * |
| sdivarci | 0:0061165683ee | 677 | * @details |
| sdivarci | 0:0061165683ee | 678 | * The callback function is called when an USBTIMER has expired. The callback |
| sdivarci | 0:0061165683ee | 679 | * is done with interrupts disabled. |
| sdivarci | 0:0061165683ee | 680 | ******************************************************************************/ |
| sdivarci | 0:0061165683ee | 681 | typedef void (*USBTIMER_Callback_TypeDef)( void ); |
| sdivarci | 0:0061165683ee | 682 | |
| sdivarci | 0:0061165683ee | 683 | char *USB_GetErrorMsgString( int error ); |
| sdivarci | 0:0061165683ee | 684 | |
| sdivarci | 0:0061165683ee | 685 | #if defined( USB_USE_PRINTF ) |
| sdivarci | 0:0061165683ee | 686 | void USB_PrintErrorMsgString( char *pre, int error ); |
| sdivarci | 0:0061165683ee | 687 | #else |
| sdivarci | 0:0061165683ee | 688 | #define USB_PrintErrorMsgString( pre, error ) |
| sdivarci | 0:0061165683ee | 689 | #endif |
| sdivarci | 0:0061165683ee | 690 | |
| sdivarci | 0:0061165683ee | 691 | void USBTIMER_DelayMs( uint32_t msec ); |
| sdivarci | 0:0061165683ee | 692 | void USBTIMER_DelayUs( uint32_t usec ); |
| sdivarci | 0:0061165683ee | 693 | void USBTIMER_Init( void ); |
| sdivarci | 0:0061165683ee | 694 | |
| sdivarci | 0:0061165683ee | 695 | #if ( NUM_QTIMERS > 0 ) |
| sdivarci | 0:0061165683ee | 696 | void USBTIMER_Start( uint32_t id, uint32_t timeout, USBTIMER_Callback_TypeDef callback ); |
| sdivarci | 0:0061165683ee | 697 | void USBTIMER_Stop( uint32_t id ); |
| sdivarci | 0:0061165683ee | 698 | #endif /* ( NUM_QTIMERS > 0 ) */ |
| sdivarci | 0:0061165683ee | 699 | /** @} (end addtogroup USB_COMMON) */ |
| sdivarci | 0:0061165683ee | 700 | |
| sdivarci | 0:0061165683ee | 701 | #if defined( USB_DEVICE ) |
| sdivarci | 0:0061165683ee | 702 | /** @addtogroup USB_DEVICE |
| sdivarci | 0:0061165683ee | 703 | * @{*/ |
| sdivarci | 0:0061165683ee | 704 | /*** -------------------- DEVICE mode API definitions -------------------- ***/ |
| sdivarci | 0:0061165683ee | 705 | |
| sdivarci | 0:0061165683ee | 706 | /***************************************************************************//** |
| sdivarci | 0:0061165683ee | 707 | * @brief |
| sdivarci | 0:0061165683ee | 708 | * USB Reset callback function. |
| sdivarci | 0:0061165683ee | 709 | * @details |
| sdivarci | 0:0061165683ee | 710 | * Called whenever USB reset signalling is detected on the USB port. |
| sdivarci | 0:0061165683ee | 711 | ******************************************************************************/ |
| sdivarci | 0:0061165683ee | 712 | typedef void (*USBD_UsbResetCb_TypeDef)( void ); |
| sdivarci | 0:0061165683ee | 713 | |
| sdivarci | 0:0061165683ee | 714 | /***************************************************************************//** |
| sdivarci | 0:0061165683ee | 715 | * @brief |
| sdivarci | 0:0061165683ee | 716 | * USB Start Of Frame (SOF) interrupt callback function. |
| sdivarci | 0:0061165683ee | 717 | * |
| sdivarci | 0:0061165683ee | 718 | * @details |
| sdivarci | 0:0061165683ee | 719 | * Called at each SOF interrupt (if enabled), |
| sdivarci | 0:0061165683ee | 720 | * |
| sdivarci | 0:0061165683ee | 721 | * @param[in] sofNr |
| sdivarci | 0:0061165683ee | 722 | * Current frame number. The value rolls over to 0 after 16383 (0x3FFF). |
| sdivarci | 0:0061165683ee | 723 | ******************************************************************************/ |
| sdivarci | 0:0061165683ee | 724 | typedef void (*USBD_SofIntCb_TypeDef)( uint16_t sofNr ); |
| sdivarci | 0:0061165683ee | 725 | |
| sdivarci | 0:0061165683ee | 726 | /***************************************************************************//** |
| sdivarci | 0:0061165683ee | 727 | * @brief |
| sdivarci | 0:0061165683ee | 728 | * USB State change callback function. |
| sdivarci | 0:0061165683ee | 729 | * |
| sdivarci | 0:0061165683ee | 730 | * @details |
| sdivarci | 0:0061165683ee | 731 | * Called whenever the device change state. |
| sdivarci | 0:0061165683ee | 732 | * |
| sdivarci | 0:0061165683ee | 733 | * @param[in] oldState |
| sdivarci | 0:0061165683ee | 734 | * The device USB state just leaved. See @ref USBD_State_TypeDef. |
| sdivarci | 0:0061165683ee | 735 | * |
| sdivarci | 0:0061165683ee | 736 | * @param[in] newState |
| sdivarci | 0:0061165683ee | 737 | * New (the current) USB device state. See @ref USBD_State_TypeDef. |
| sdivarci | 0:0061165683ee | 738 | ******************************************************************************/ |
| sdivarci | 0:0061165683ee | 739 | typedef void (*USBD_DeviceStateChangeCb_TypeDef)( USBD_State_TypeDef oldState, USBD_State_TypeDef newState ); |
| sdivarci | 0:0061165683ee | 740 | |
| sdivarci | 0:0061165683ee | 741 | /***************************************************************************//** |
| sdivarci | 0:0061165683ee | 742 | * @brief |
| sdivarci | 0:0061165683ee | 743 | * USB power mode callback function. |
| sdivarci | 0:0061165683ee | 744 | * |
| sdivarci | 0:0061165683ee | 745 | * @details |
| sdivarci | 0:0061165683ee | 746 | * Called whenever the device stack needs to query if the device is currently |
| sdivarci | 0:0061165683ee | 747 | * self- or bus-powered. Typically when host has issued an @ref GET_STATUS |
| sdivarci | 0:0061165683ee | 748 | * setup command. |
| sdivarci | 0:0061165683ee | 749 | * |
| sdivarci | 0:0061165683ee | 750 | * @return |
| sdivarci | 0:0061165683ee | 751 | * True if self-powered, false otherwise. |
| sdivarci | 0:0061165683ee | 752 | ******************************************************************************/ |
| sdivarci | 0:0061165683ee | 753 | typedef bool (*USBD_IsSelfPoweredCb_TypeDef)( void ); |
| sdivarci | 0:0061165683ee | 754 | |
| sdivarci | 0:0061165683ee | 755 | /***************************************************************************//** |
| sdivarci | 0:0061165683ee | 756 | * @brief |
| sdivarci | 0:0061165683ee | 757 | * USB setup request callback function. |
| sdivarci | 0:0061165683ee | 758 | * |
| sdivarci | 0:0061165683ee | 759 | * @details |
| sdivarci | 0:0061165683ee | 760 | * Called on each setup request received from host. This gives the application a |
| sdivarci | 0:0061165683ee | 761 | * possibility to extend or override standard requests, and to implement class |
| sdivarci | 0:0061165683ee | 762 | * or vendor specific requests. Return @ref USB_STATUS_OK if the request is |
| sdivarci | 0:0061165683ee | 763 | * handled, return @ref USB_STATUS_REQ_ERR if it is an illegal request or |
| sdivarci | 0:0061165683ee | 764 | * return @ref USB_STATUS_REQ_UNHANDLED to pass the request on to the default |
| sdivarci | 0:0061165683ee | 765 | * request handler. |
| sdivarci | 0:0061165683ee | 766 | * |
| sdivarci | 0:0061165683ee | 767 | * @param[in] setup |
| sdivarci | 0:0061165683ee | 768 | * Pointer to an USB setup packet. See @ref USB_Setup_TypeDef. |
| sdivarci | 0:0061165683ee | 769 | * |
| sdivarci | 0:0061165683ee | 770 | * @return |
| sdivarci | 0:0061165683ee | 771 | * An appropriate status/error code. See @ref USB_Status_TypeDef. |
| sdivarci | 0:0061165683ee | 772 | ******************************************************************************/ |
| sdivarci | 0:0061165683ee | 773 | typedef int (*USBD_SetupCmdCb_TypeDef)( const USB_Setup_TypeDef *setup ); |
| sdivarci | 0:0061165683ee | 774 | |
| sdivarci | 0:0061165683ee | 775 | /** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */ |
| sdivarci | 0:0061165683ee | 776 | struct USBD_Callbacks_TypeDef; |
| sdivarci | 0:0061165683ee | 777 | typedef struct USBD_Callbacks_TypeDef const *USBD_Callbacks_TypeDef_Pointer; |
| sdivarci | 0:0061165683ee | 778 | /** @endcond */ |
| sdivarci | 0:0061165683ee | 779 | |
| sdivarci | 0:0061165683ee | 780 | |
| sdivarci | 0:0061165683ee | 781 | /** @brief USB Device stack initialization structure. |
| sdivarci | 0:0061165683ee | 782 | * @details This structure is passed to @ref USBD_Init() when starting up |
| sdivarci | 0:0061165683ee | 783 | * the device. */ |
| sdivarci | 0:0061165683ee | 784 | typedef struct |
| sdivarci | 0:0061165683ee | 785 | { |
| sdivarci | 0:0061165683ee | 786 | const USB_DeviceDescriptor_TypeDef *deviceDescriptor; /**< Pointer to a device descriptor. */ |
| sdivarci | 0:0061165683ee | 787 | const uint8_t *configDescriptor; /**< Pointer to a configuration descriptor. */ |
| sdivarci | 0:0061165683ee | 788 | const void * const *stringDescriptors; /**< Pointer to an array of string descriptor pointers.*/ |
| sdivarci | 0:0061165683ee | 789 | const uint8_t numberOfStrings; /**< Number of strings in string descriptor array. */ |
| sdivarci | 0:0061165683ee | 790 | const uint8_t *bufferingMultiplier; /**< Pointer to an array defining the size of the |
| sdivarci | 0:0061165683ee | 791 | endpoint buffers. The size is given in |
| sdivarci | 0:0061165683ee | 792 | multiples of endpoint size. Generally a value |
| sdivarci | 0:0061165683ee | 793 | of 1 (single) or 2 (double) buffering should be |
| sdivarci | 0:0061165683ee | 794 | used. */ |
| sdivarci | 0:0061165683ee | 795 | USBD_Callbacks_TypeDef_Pointer callbacks; /**< Pointer to struct with callbacks |
| sdivarci | 0:0061165683ee | 796 | (@ref USBD_Callbacks_TypeDef). These callbacks |
| sdivarci | 0:0061165683ee | 797 | are used by the device stack to signal events |
| sdivarci | 0:0061165683ee | 798 | to or query the application. */ |
| sdivarci | 0:0061165683ee | 799 | const uint32_t reserved; /**< Reserved for future use. */ |
| sdivarci | 0:0061165683ee | 800 | } USBD_Init_TypeDef; |
| sdivarci | 0:0061165683ee | 801 | |
| sdivarci | 0:0061165683ee | 802 | |
| sdivarci | 0:0061165683ee | 803 | /** @brief USB Device stack callback structure. |
| sdivarci | 0:0061165683ee | 804 | * @details Callback functions used by the device stack to signal events or |
| sdivarci | 0:0061165683ee | 805 | * query status to/from the application. See @ref USBD_Init_TypeDef. Assign |
| sdivarci | 0:0061165683ee | 806 | * members to NULL if your application don't need a specific callback. */ |
| sdivarci | 0:0061165683ee | 807 | typedef struct USBD_Callbacks_TypeDef |
| sdivarci | 0:0061165683ee | 808 | { |
| sdivarci | 0:0061165683ee | 809 | const USBD_UsbResetCb_TypeDef usbReset; /**< Called whenever USB reset signalling is detected |
| sdivarci | 0:0061165683ee | 810 | on the USB port. */ |
| sdivarci | 0:0061165683ee | 811 | const USBD_DeviceStateChangeCb_TypeDef usbStateChange; /**< Called whenever the device change state. */ |
| sdivarci | 0:0061165683ee | 812 | const USBD_SetupCmdCb_TypeDef setupCmd; /**< Called on each setup request received from host.*/ |
| sdivarci | 0:0061165683ee | 813 | const USBD_IsSelfPoweredCb_TypeDef isSelfPowered; /**< Called whenever the device stack needs to query |
| sdivarci | 0:0061165683ee | 814 | if the device is currently self- or bus-powered. |
| sdivarci | 0:0061165683ee | 815 | Applies to devices which can operate in both modes.*/ |
| sdivarci | 0:0061165683ee | 816 | const USBD_SofIntCb_TypeDef sofInt; /**< Called at each SOF interrupt. If NULL, the device |
| sdivarci | 0:0061165683ee | 817 | stack will not enable the SOF interrupt. */ |
| sdivarci | 0:0061165683ee | 818 | } USBD_Callbacks_TypeDef; |
| sdivarci | 0:0061165683ee | 819 | |
| sdivarci | 0:0061165683ee | 820 | |
| sdivarci | 0:0061165683ee | 821 | /*** -------------------- DEVICE mode API -------------------------------- ***/ |
| sdivarci | 0:0061165683ee | 822 | |
| sdivarci | 0:0061165683ee | 823 | void USBD_AbortAllTransfers( void ); |
| sdivarci | 0:0061165683ee | 824 | int USBD_AbortTransfer( int epAddr ); |
| sdivarci | 0:0061165683ee | 825 | void USBD_Connect( void ); |
| sdivarci | 0:0061165683ee | 826 | void USBD_Disconnect( void ); |
| sdivarci | 0:0061165683ee | 827 | bool USBD_EpIsBusy( int epAddr ); |
| sdivarci | 0:0061165683ee | 828 | USBD_State_TypeDef USBD_GetUsbState( void ); |
| sdivarci | 0:0061165683ee | 829 | const char * USBD_GetUsbStateName( USBD_State_TypeDef state ); |
| sdivarci | 0:0061165683ee | 830 | int USBD_Init( const USBD_Init_TypeDef *p ); |
| sdivarci | 0:0061165683ee | 831 | int USBD_Read( int epAddr, void *data, int byteCount, USB_XferCompleteCb_TypeDef callback ); |
| sdivarci | 0:0061165683ee | 832 | int USBD_RemoteWakeup( void ); |
| sdivarci | 0:0061165683ee | 833 | bool USBD_SafeToEnterEM2( void ); |
| sdivarci | 0:0061165683ee | 834 | int USBD_StallEp( int epAddr ); |
| sdivarci | 0:0061165683ee | 835 | void USBD_Stop( void ); |
| sdivarci | 0:0061165683ee | 836 | int USBD_UnStallEp( int epAddr ); |
| sdivarci | 0:0061165683ee | 837 | int USBD_Write( int epAddr, void *data, int byteCount, USB_XferCompleteCb_TypeDef callback ); |
| sdivarci | 0:0061165683ee | 838 | |
| sdivarci | 0:0061165683ee | 839 | #ifdef __MBED__ |
| sdivarci | 0:0061165683ee | 840 | int USBD_SetAddress( uint8_t addr ); |
| sdivarci | 0:0061165683ee | 841 | int USBD_AddEndpoint( int epAddr, int transferType, int maxPacketSize, int bufferMult ); |
| sdivarci | 0:0061165683ee | 842 | int USBD_EpIsStalled( int epAddr ); |
| sdivarci | 0:0061165683ee | 843 | void USBD_StallEp0( void ); |
| sdivarci | 0:0061165683ee | 844 | #endif |
| sdivarci | 0:0061165683ee | 845 | |
| sdivarci | 0:0061165683ee | 846 | /** @} (end addtogroup USB_DEVICE) */ |
| sdivarci | 0:0061165683ee | 847 | #endif /* defined( USB_DEVICE ) */ |
| sdivarci | 0:0061165683ee | 848 | |
| sdivarci | 0:0061165683ee | 849 | |
| sdivarci | 0:0061165683ee | 850 | #if defined( USB_HOST ) |
| sdivarci | 0:0061165683ee | 851 | /***************************************************************************//** |
| sdivarci | 0:0061165683ee | 852 | * @addtogroup USB_HOST |
| sdivarci | 0:0061165683ee | 853 | * @brief USB HOST protocol stack, see @ref usb_host page for detailed documentation. |
| sdivarci | 0:0061165683ee | 854 | * @{ |
| sdivarci | 0:0061165683ee | 855 | ******************************************************************************/ |
| sdivarci | 0:0061165683ee | 856 | /*** -------------------- HOST mode API definitions ---------------------- ***/ |
| sdivarci | 0:0061165683ee | 857 | |
| sdivarci | 0:0061165683ee | 858 | #define USB_VBUSOVRCUR_PORT_NONE -1 /**< No overcurrent flag functionality. */ |
| sdivarci | 0:0061165683ee | 859 | #define USB_VBUSOVRCUR_POLARITY_LOW 0 /**< Overcurrent flag pin polarity is low. */ |
| sdivarci | 0:0061165683ee | 860 | #define USB_VBUSOVRCUR_POLARITY_HIGH 1 /**< Overcurrent flag pin polarity is high. */ |
| sdivarci | 0:0061165683ee | 861 | |
| sdivarci | 0:0061165683ee | 862 | /** USB HOST endpoint status enumerator. */ |
| sdivarci | 0:0061165683ee | 863 | typedef enum |
| sdivarci | 0:0061165683ee | 864 | { |
| sdivarci | 0:0061165683ee | 865 | H_EP_IDLE = 0, /**< The endpoint is idle. */ |
| sdivarci | 0:0061165683ee | 866 | H_EP_SETUP = 1, /**< The endpoint is in SETUP stage. */ |
| sdivarci | 0:0061165683ee | 867 | H_EP_DATA_IN = 2, /**< The endpoint is in DATA IN stage. */ |
| sdivarci | 0:0061165683ee | 868 | H_EP_DATA_OUT = 3, /**< The endpoint is in DATA OUT stage. */ |
| sdivarci | 0:0061165683ee | 869 | H_EP_STATUS_IN = 4, /**< The endpoint is in STATUS IN stage. */ |
| sdivarci | 0:0061165683ee | 870 | H_EP_STATUS_OUT = 5, /**< The endpoint is in STATUS OUT stage. */ |
| sdivarci | 0:0061165683ee | 871 | } USBH_EpState_TypeDef; |
| sdivarci | 0:0061165683ee | 872 | |
| sdivarci | 0:0061165683ee | 873 | |
| sdivarci | 0:0061165683ee | 874 | /** @brief USB HOST endpoint status data. |
| sdivarci | 0:0061165683ee | 875 | * @details A host application should not manipulate the contents of |
| sdivarci | 0:0061165683ee | 876 | * this struct. */ |
| sdivarci | 0:0061165683ee | 877 | typedef struct |
| sdivarci | 0:0061165683ee | 878 | { |
| sdivarci | 0:0061165683ee | 879 | USB_Setup_TypeDef setup; /**< A SETUP package. */ |
| sdivarci | 0:0061165683ee | 880 | uint8_t setupErrCnt; /**< Error counter for SETUP transfers. */ |
| sdivarci | 0:0061165683ee | 881 | USB_EndpointDescriptor_TypeDef epDesc; /**< Endpoint descriptor. */ |
| sdivarci | 0:0061165683ee | 882 | struct USBH_Device_TypeDef *parentDevice; /**< The device the endpoint belongs to. */ |
| sdivarci | 0:0061165683ee | 883 | uint8_t type; /**< Endpoint type. */ |
| sdivarci | 0:0061165683ee | 884 | uint16_t packetSize; /**< Packet size, current transfer. */ |
| sdivarci | 0:0061165683ee | 885 | uint8_t hcOut; /**< Host channel number assigned for OUT transfers. */ |
| sdivarci | 0:0061165683ee | 886 | uint8_t hcIn; /**< Host channel number assigned for IN transfers. */ |
| sdivarci | 0:0061165683ee | 887 | bool in; /**< Endpoint direction. */ |
| sdivarci | 0:0061165683ee | 888 | uint8_t toggle; /**< Endpoint data toggle. */ |
| sdivarci | 0:0061165683ee | 889 | USBH_EpState_TypeDef state; /**< Endpoint state. */ |
| sdivarci | 0:0061165683ee | 890 | uint8_t addr; /**< Endpoint address. */ |
| sdivarci | 0:0061165683ee | 891 | uint8_t *buf; /**< Transfer buffer. */ |
| sdivarci | 0:0061165683ee | 892 | volatile bool xferCompleted; /**< Transfer completion flag. */ |
| sdivarci | 0:0061165683ee | 893 | USB_Status_TypeDef xferStatus; /**< Transfer status. */ |
| sdivarci | 0:0061165683ee | 894 | USB_XferCompleteCb_TypeDef xferCompleteCb; /**< Transfer completion callback function. */ |
| sdivarci | 0:0061165683ee | 895 | uint32_t xferred; /**< Number of bytes transferred. */ |
| sdivarci | 0:0061165683ee | 896 | uint32_t remaining; /**< Number of bytes remaining. */ |
| sdivarci | 0:0061165683ee | 897 | uint32_t timeout; /**< Transfer timeout. */ |
| sdivarci | 0:0061165683ee | 898 | } USBH_Ep_TypeDef; |
| sdivarci | 0:0061165683ee | 899 | |
| sdivarci | 0:0061165683ee | 900 | |
| sdivarci | 0:0061165683ee | 901 | /** @brief USB HOST device definition. |
| sdivarci | 0:0061165683ee | 902 | * @details A host application should not manipulate the contents of |
| sdivarci | 0:0061165683ee | 903 | * this struct. */ |
| sdivarci | 0:0061165683ee | 904 | typedef struct USBH_Device_TypeDef |
| sdivarci | 0:0061165683ee | 905 | { |
| sdivarci | 0:0061165683ee | 906 | USB_DeviceDescriptor_TypeDef devDesc; /**< The device device descriptor. */ |
| sdivarci | 0:0061165683ee | 907 | USB_ConfigurationDescriptor_TypeDef confDesc; /**< The device configuration descriptor. */ |
| sdivarci | 0:0061165683ee | 908 | USB_InterfaceDescriptor_TypeDef itfDesc; /**< The device interface descriptor. */ |
| sdivarci | 0:0061165683ee | 909 | USBH_Ep_TypeDef ep0; /**< Endpoint 0 status data. */ |
| sdivarci | 0:0061165683ee | 910 | USBH_Ep_TypeDef *ep; /**< Array of endpoint status data. */ |
| sdivarci | 0:0061165683ee | 911 | int numEp; /**< Number of endpoints. */ |
| sdivarci | 0:0061165683ee | 912 | uint8_t addr; /**< The device address. */ |
| sdivarci | 0:0061165683ee | 913 | uint8_t speed; /**< The device speed (low or full speed). */ |
| sdivarci | 0:0061165683ee | 914 | } USBH_Device_TypeDef; |
| sdivarci | 0:0061165683ee | 915 | |
| sdivarci | 0:0061165683ee | 916 | |
| sdivarci | 0:0061165683ee | 917 | /** @brief USB Host stack initialization structure. |
| sdivarci | 0:0061165683ee | 918 | * @details This structure is passed to @ref USBH_Init() when starting up the |
| sdivarci | 0:0061165683ee | 919 | * device. Max accumulated FIFO size is 2K bytes. */ |
| sdivarci | 0:0061165683ee | 920 | typedef struct |
| sdivarci | 0:0061165683ee | 921 | { |
| sdivarci | 0:0061165683ee | 922 | uint32_t rxFifoSize; /**< Number of FIFO bytes set aside for IN endpoints. */ |
| sdivarci | 0:0061165683ee | 923 | uint32_t nptxFifoSize; /**< Number of FIFO bytes set aside for OUT CTRL/BULK endoints. */ |
| sdivarci | 0:0061165683ee | 924 | uint32_t ptxFifoSize; /**< Number of FIFO bytes set aside for OUT INTR/ISO endoints. */ |
| sdivarci | 0:0061165683ee | 925 | uint32_t reserved; /**< Reserved for future use. */ |
| sdivarci | 0:0061165683ee | 926 | } USBH_Init_TypeDef; |
| sdivarci | 0:0061165683ee | 927 | |
| sdivarci | 0:0061165683ee | 928 | |
| sdivarci | 0:0061165683ee | 929 | /** Default @ref USBH_Init_TypeDef values, provides reasonable Tx/Rx FIFO |
| sdivarci | 0:0061165683ee | 930 | * partitioning. */ |
| sdivarci | 0:0061165683ee | 931 | /* In DMA mode the total available FIFO space is smaller. */ |
| sdivarci | 0:0061165683ee | 932 | /* The DMA controller use one FIFO word pr. channel for status. */ |
| sdivarci | 0:0061165683ee | 933 | /* The unit in the table is byte. */ |
| sdivarci | 0:0061165683ee | 934 | #define USBH_INIT_DEFAULT \ |
| sdivarci | 0:0061165683ee | 935 | { \ |
| sdivarci | 0:0061165683ee | 936 | MAX_HOST_FIFO_SIZE_INWORDS * 2,/* 1024 bytes Rx FIFO size. */ \ |
| sdivarci | 0:0061165683ee | 937 | MAX_HOST_FIFO_SIZE_INWORDS, /* 512 bytes non-periodic Tx FIFO size. */ \ |
| sdivarci | 0:0061165683ee | 938 | MAX_HOST_FIFO_SIZE_INWORDS, /* 512 bytes periodic Tx FIFO size. */ \ |
| sdivarci | 0:0061165683ee | 939 | 0 /* Reserved. */ \ |
| sdivarci | 0:0061165683ee | 940 | } |
| sdivarci | 0:0061165683ee | 941 | |
| sdivarci | 0:0061165683ee | 942 | /*** -------------------- HOST mode API ---------------------------------- ***/ |
| sdivarci | 0:0061165683ee | 943 | |
| sdivarci | 0:0061165683ee | 944 | int USBH_AssignHostChannel( USBH_Ep_TypeDef *ep, uint8_t hcnum ); |
| sdivarci | 0:0061165683ee | 945 | int USBH_ControlMsg( USBH_Ep_TypeDef *ep, uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, uint16_t wLength, void *data, int timeout, USB_XferCompleteCb_TypeDef callback ); |
| sdivarci | 0:0061165683ee | 946 | int USBH_ControlMsgB( USBH_Ep_TypeDef *ep, uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, uint16_t wLength, void *data, int timeout ); |
| sdivarci | 0:0061165683ee | 947 | bool USBH_DeviceConnected( void ); |
| sdivarci | 0:0061165683ee | 948 | int USBH_GetConfigurationDescriptorB( USBH_Device_TypeDef *device, void *buf, int len, uint8_t configIndex ); |
| sdivarci | 0:0061165683ee | 949 | int USBH_GetDeviceDescriptorB( USBH_Device_TypeDef *device, void *buf, int len ); |
| sdivarci | 0:0061165683ee | 950 | uint8_t USBH_GetPortSpeed( void ); |
| sdivarci | 0:0061165683ee | 951 | int USBH_GetStringB( USBH_Device_TypeDef *device, uint8_t *buf, int bufLen, uint8_t stringIndex, uint16_t langID ); |
| sdivarci | 0:0061165683ee | 952 | int USBH_Init( const USBH_Init_TypeDef *p ); |
| sdivarci | 0:0061165683ee | 953 | int USBH_InitDeviceData( USBH_Device_TypeDef *device, const uint8_t *buf, USBH_Ep_TypeDef *ep, int numEp, uint8_t deviceSpeed ); |
| sdivarci | 0:0061165683ee | 954 | int USBH_PortReset( void ); |
| sdivarci | 0:0061165683ee | 955 | int USBH_PortResume( void ); |
| sdivarci | 0:0061165683ee | 956 | void USBH_PortSuspend( void ); |
| sdivarci | 0:0061165683ee | 957 | void USBH_PrintString( const char *pre, const USB_StringDescriptor_TypeDef *s, const char *post ); |
| sdivarci | 0:0061165683ee | 958 | |
| sdivarci | 0:0061165683ee | 959 | #if defined( USB_USE_PRINTF ) |
| sdivarci | 0:0061165683ee | 960 | int USBH_PrintConfigurationDescriptor( const USB_ConfigurationDescriptor_TypeDef *config, int maxLen ); |
| sdivarci | 0:0061165683ee | 961 | int USBH_PrintDeviceDescriptor( const USB_DeviceDescriptor_TypeDef *device ); |
| sdivarci | 0:0061165683ee | 962 | int USBH_PrintEndpointDescriptor( const USB_EndpointDescriptor_TypeDef *endpoint ); |
| sdivarci | 0:0061165683ee | 963 | int USBH_PrintInterfaceDescriptor( const USB_InterfaceDescriptor_TypeDef *interface ); |
| sdivarci | 0:0061165683ee | 964 | #else |
| sdivarci | 0:0061165683ee | 965 | #define USBH_PrintConfigurationDescriptor( config, maxLen ) |
| sdivarci | 0:0061165683ee | 966 | #define USBH_PrintDeviceDescriptor( device ) |
| sdivarci | 0:0061165683ee | 967 | #define USBH_PrintEndpointDescriptor( endpoint ) |
| sdivarci | 0:0061165683ee | 968 | #define USBH_PrintInterfaceDescriptor( interface ) |
| sdivarci | 0:0061165683ee | 969 | #endif /* defined( USB_USE_PRINTF ) */ |
| sdivarci | 0:0061165683ee | 970 | |
| sdivarci | 0:0061165683ee | 971 | int USBH_QueryDeviceB( uint8_t *buf, size_t bufsize, uint8_t deviceSpeed ); |
| sdivarci | 0:0061165683ee | 972 | USB_ConfigurationDescriptor_TypeDef* USBH_QGetConfigurationDescriptor( const uint8_t *buf, int configIndex ); |
| sdivarci | 0:0061165683ee | 973 | USB_DeviceDescriptor_TypeDef* USBH_QGetDeviceDescriptor( const uint8_t *buf ); |
| sdivarci | 0:0061165683ee | 974 | USB_EndpointDescriptor_TypeDef* USBH_QGetEndpointDescriptor( const uint8_t *buf, int configIndex, int interfaceIndex, int endpointIndex ); |
| sdivarci | 0:0061165683ee | 975 | USB_InterfaceDescriptor_TypeDef* USBH_QGetInterfaceDescriptor( const uint8_t *buf, int configIndex, int interfaceIndex ); |
| sdivarci | 0:0061165683ee | 976 | |
| sdivarci | 0:0061165683ee | 977 | int USBH_Read( USBH_Ep_TypeDef *ep, void *data, int byteCount, int timeout, USB_XferCompleteCb_TypeDef callback ); |
| sdivarci | 0:0061165683ee | 978 | int USBH_ReadB( USBH_Ep_TypeDef *ep, void *data, int byteCount, int timeout ); |
| sdivarci | 0:0061165683ee | 979 | int USBH_SetAddressB( USBH_Device_TypeDef *device, uint8_t deviceAddress ); |
| sdivarci | 0:0061165683ee | 980 | int USBH_SetAltInterfaceB( USBH_Device_TypeDef *device, uint8_t interfaceIndex, uint8_t alternateSetting ); |
| sdivarci | 0:0061165683ee | 981 | int USBH_SetConfigurationB( USBH_Device_TypeDef *device, uint8_t configValue ); |
| sdivarci | 0:0061165683ee | 982 | int USBH_StallEpB( USBH_Ep_TypeDef *ep ); |
| sdivarci | 0:0061165683ee | 983 | void USBH_Stop( void ); |
| sdivarci | 0:0061165683ee | 984 | int USBH_UnStallEpB( USBH_Ep_TypeDef *ep ); |
| sdivarci | 0:0061165683ee | 985 | int USBH_WaitForDeviceConnectionB( uint8_t *buf, int timeoutInSeconds ); |
| sdivarci | 0:0061165683ee | 986 | int USBH_Write( USBH_Ep_TypeDef *ep, void *data, int byteCount, int timeout, USB_XferCompleteCb_TypeDef callback ); |
| sdivarci | 0:0061165683ee | 987 | int USBH_WriteB( USBH_Ep_TypeDef *ep, void *data, int byteCount, int timeout ); |
| sdivarci | 0:0061165683ee | 988 | |
| sdivarci | 0:0061165683ee | 989 | /** @} (end addtogroup USB_HOST) */ |
| sdivarci | 0:0061165683ee | 990 | #endif /* defined( USB_HOST ) */ |
| sdivarci | 0:0061165683ee | 991 | /** @} (end addtogroup USB) */ |
| sdivarci | 0:0061165683ee | 992 | |
| sdivarci | 0:0061165683ee | 993 | #ifdef __cplusplus |
| sdivarci | 0:0061165683ee | 994 | } |
| sdivarci | 0:0061165683ee | 995 | #endif |
| sdivarci | 0:0061165683ee | 996 | |
| sdivarci | 0:0061165683ee | 997 | #endif /* defined( USB_DEVICE ) || defined( USB_HOST ) */ |
| sdivarci | 0:0061165683ee | 998 | #endif /* defined( USB_PRESENT ) && ( USB_COUNT == 1 ) */ |
| sdivarci | 0:0061165683ee | 999 | #endif /* __EM_USB_H */ |