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