aboutsummaryrefslogtreecommitdiff
path: root/thirdparty/nRF5_SDK_15.0.0_a53641a/components/libraries/usbd/app_usbd_request.h
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparty/nRF5_SDK_15.0.0_a53641a/components/libraries/usbd/app_usbd_request.h')
-rw-r--r--thirdparty/nRF5_SDK_15.0.0_a53641a/components/libraries/usbd/app_usbd_request.h356
1 files changed, 356 insertions, 0 deletions
diff --git a/thirdparty/nRF5_SDK_15.0.0_a53641a/components/libraries/usbd/app_usbd_request.h b/thirdparty/nRF5_SDK_15.0.0_a53641a/components/libraries/usbd/app_usbd_request.h
new file mode 100644
index 0000000..d2f6f14
--- /dev/null
+++ b/thirdparty/nRF5_SDK_15.0.0_a53641a/components/libraries/usbd/app_usbd_request.h
@@ -0,0 +1,356 @@
+/**
+ * Copyright (c) 2016 - 2018, Nordic Semiconductor ASA
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form, except as embedded into a Nordic
+ * Semiconductor ASA integrated circuit in a product or a software update for
+ * such product, must reproduce the above copyright notice, this list of
+ * conditions and the following disclaimer in the documentation and/or other
+ * materials provided with the distribution.
+ *
+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * 4. This software, with or without modification, must only be used with a
+ * Nordic Semiconductor ASA integrated circuit.
+ *
+ * 5. Any software provided in binary form under this license must not be reverse
+ * engineered, decompiled, modified and/or disassembled.
+ *
+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#ifndef APP_USBD_REQUEST_H__
+#define APP_USBD_REQUEST_H__
+
+#include "sdk_common.h"
+#include "nrf.h"
+#include "nrf_drv_usbd.h"
+#include "app_usbd_descriptor.h"
+#include "app_util_platform.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Compiler support for anonymous unions */
+ANON_UNIONS_ENABLE;
+
+#pragma pack(push, 1)
+
+/**
+ * @defgroup app_usbd_request USB standard requests
+ * @ingroup app_usbd
+ *
+ * @brief @tagAPI52840 Module with types definitions used for standard requests processing.
+ * @{
+ */
+
+/**
+ * @brief Recipient bit-field in request type
+ *
+ * Bits 4...0
+ */
+#define APP_USBD_SETUP_REQ_BF_REC BF_CX(5, 0)
+
+/**
+ * @brief Type bit-field in request type
+ *
+ * Bits 6...5
+ */
+#define APP_USBD_SETUP_REQ_BF_TYP BF_CX(2, 5)
+
+/**
+ * @brief Direction bit-field in request type
+ *
+ * Bit 7
+ */
+#define APP_USBD_SETUP_REQ_BF_DIR BF_CX(1, 7)
+
+/**
+ * @brief Recipient enumerator.
+ *
+ * @note It is part of @ref app_usbd_setup_reqtype_t variable type.
+ */
+typedef enum {
+ APP_USBD_SETUP_REQREC_DEVICE = 0x0, /**< The whole device is a request target */
+ APP_USBD_SETUP_REQREC_INTERFACE = 0x1, /**< Selected interface is a request target */
+ APP_USBD_SETUP_REQREC_ENDPOINT = 0x2, /**< Selected endpoint is a request target */
+ APP_USBD_SETUP_REQREC_OTHER = 0x3 /**< Other element is a request target */
+} app_usbd_setup_reqrec_t;
+
+/**
+ * @brief Request type enumerator.
+ *
+ * @note It is part of @ref app_usbd_setup_reqtype_t variable type.
+ */
+typedef enum {
+ APP_USBD_SETUP_REQTYPE_STD = 0x0, /**< Standard request */
+ APP_USBD_SETUP_REQTYPE_CLASS = 0x1, /**< Class specific request */
+ APP_USBD_SETUP_REQTYPE_VENDOR = 0x2 /**< Vendor specific request */
+} app_usbd_setup_reqtype_t;
+
+/**
+ * @brief Direction of setup command
+ *
+ * @note It is part of @ref app_usbd_setup_reqtype_t variable type.
+ */
+typedef enum {
+ APP_USBD_SETUP_REQDIR_OUT = 0x0, /**< Host to device */
+ APP_USBD_SETUP_REQDIR_IN = 0x1, /**< Device to host */
+} app_usbd_setup_reqdir_t;
+
+
+/**
+ * @brief Standard requests
+ *
+ * Enumerator for standard requests values
+ */
+typedef enum {
+ APP_USBD_SETUP_STDREQ_GET_STATUS = 0x00, /**<
+ * Targets: Device, Interface, Endpoint
+ * Expected SETUP frame format:
+ * - wValue: Zero
+ * - wIndex: Zero, (lb): Interface or Endpoint
+ * - wLength: 2
+ * - Data:2 bytes of data, depending on targets
+ * - Device:
+ * - D15..D2: Reserved (Reset to zero)
+ * - D1: Remove Wakeup
+ * - D0: Self Powered
+ * - Interface:
+ * - D15..D0: Reserved (Reset to zero)
+ * - Endpoint:
+ * - D15..D1: Reserved (Reset to zero)
+ * - D0: Halt
+ */
+ APP_USBD_SETUP_STDREQ_CLEAR_FEATURE = 0x01, /**<
+ * Targets: Device, Interface, Endpoint
+ * Expected SETUP frame format:
+ * - wValue: Feature selector (@ref app_usbd_setup_stdfeature_t)
+ * - wIndex: Zero, Interface or Endpoint
+ * - wLength: 0
+ * - Data: None
+ */
+ APP_USBD_SETUP_STDREQ_SET_FEATURE = 0x03, /**<
+ * Targets: Device, Interface, Endpoint
+ * Expected SETUP frame format:
+ * - wValue: Feature selector (@ref app_usbd_setup_stdfeature_t)
+ * - wIndex: Zero, Interface or Endpoint
+ * - wLength: 0
+ * - Data: None
+ */
+ APP_USBD_SETUP_STDREQ_SET_ADDRESS = 0x05, /**<
+ * @note This SETUP request is processed in hardware.
+ * Use it only to mark current USB state.
+ *
+ * Targets: Device
+ * Expected SETUP frame format:
+ * - wValue: New device address
+ * - wIndex: 0
+ * - wLength: 0
+ * - Data: None
+ */
+ APP_USBD_SETUP_STDREQ_GET_DESCRIPTOR = 0x06, /**<
+ * Targets: Device
+ * - wValue: (hb): Descriptor Type and (lb): Descriptor Index
+ * - wIndex: Zero of Language ID
+ * - wLength: Descriptor Length
+ * - Data: Descriptor
+ */
+ APP_USBD_SETUP_STDREQ_SET_DESCRIPTOR = 0x07, /**<
+ * Not supported - Stall when called.
+ */
+ APP_USBD_SETUP_STDREQ_GET_CONFIGURATION = 0x08, /**<
+ * Target: Device
+ * Expected SETUP frame format:
+ * - wValue: 0
+ * - wIndex: 0
+ * - wLength: 1
+ * - Data: Configuration value
+ */
+ APP_USBD_SETUP_STDREQ_SET_CONFIGURATION = 0x09, /**<
+ * Target: Device
+ * Expected SETUP frame format:
+ * - wValue: (lb): Configuration value
+ * - wIndex: 0
+ * - wLength: 0
+ * - Data: None
+ */
+ APP_USBD_SETUP_STDREQ_GET_INTERFACE = 0x0A, /**<
+ * Target: Interface
+ * Expected SETUP frame format:
+ * - wValue: 0
+ * - wIndex: Interface
+ * - wLength: 1
+ * - Data: Alternate setting
+ */
+ APP_USBD_SETUP_STDREQ_SET_INTERFACE = 0x0B, /**<
+ * Target: Interface
+ * Expected SETUP frame format:
+ * - wValue: Alternate setting
+ * - wIndex: Interface
+ * - wLength: 0
+ * - Data: None
+ */
+ APP_USBD_SETUP_STDREQ_SYNCH_FRAME = 0x0C /**<
+ * Target: Endpoint
+ * Expected SETUP frame format:
+ * - wValue: 0
+ * - wIndex: Endpoint
+ * - wLength: 2
+ * - Data: Frame Number
+ *
+ * @note
+ * This request is used only in connection with isochronous endpoints.
+ * This is rarely used and probably we would not need to support it.
+ */
+} app_usbd_setup_stdrequest_t;
+
+/**
+ * @brief Standard feature selectors
+ *
+ * Standard features that may be disabled or enabled by
+ * @ref APP_USBD_SETUP_STDREQ_CLEAR_FEATURE or @ref APP_USBD_SETUP_STDREQ_SET_FEATURE
+ */
+typedef enum {
+ APP_USBD_SETUP_STDFEATURE_DEVICE_REMOTE_WAKEUP = 1, /**<
+ * Remote wakeup feature.
+ * Target: Device only
+ */
+ APP_USBD_SETUP_STDFEATURE_ENDPOINT_HALT = 0, /**<
+ * Stall or clear the endpoint.
+ * Target: Endpoint different than default (0)
+ */
+ APP_USBD_SETUP_STDFEATURE_TEST_MODE = 2 /**<
+ * Upstream port test mode.
+ * Power has to be cycled to exit test mode.
+ * This feature cannot be cleared.
+ *
+ * Target: Device only
+ *
+ * @note
+ * It should only be supported by HighSpeed capable devices.
+ * Not supported in this library.
+ */
+} app_usbd_setup_stdfeature_t;
+
+
+/**
+ * @brief Universal way to access 16 bit values and its parts
+ */
+typedef union {
+ uint16_t w; //!< 16 bit access
+ struct
+ {
+ uint8_t lb; //!< Low byte access
+ uint8_t hb; //!< High byte access
+ };
+} app_usbd_setup_w_t;
+
+/**
+ * @brief Internal redefinition of setup structure
+ *
+ * Redefinition of the structure to simplify changes in the future
+ * if required - app_usbd API would present setup data using app_usbd_setup_t.
+ *
+ * The structure layout is always the same like @ref nrf_drv_usbd_setup_t
+ */
+typedef struct {
+ uint8_t bmRequestType; //!< Setup type bitfield
+ uint8_t bmRequest; //!< One of @ref app_usbd_setup_stdrequest_t values or class dependent one.
+ app_usbd_setup_w_t wValue; //!< byte 2, 3
+ app_usbd_setup_w_t wIndex; //!< byte 4, 5
+ app_usbd_setup_w_t wLength; //!< byte 6, 7
+} app_usbd_setup_t;
+
+#pragma pack(pop)
+
+
+/**
+ * @brief Extract recipient from request type
+ *
+ * @param[in] bmRequestType
+ *
+ * @return Extracted recipient field from request type value
+ */
+static inline app_usbd_setup_reqrec_t app_usbd_setup_req_rec(uint8_t bmRequestType)
+{
+ return (app_usbd_setup_reqrec_t)BF_CX_GET(bmRequestType, APP_USBD_SETUP_REQ_BF_REC);
+}
+
+/**
+ * @brief Extract type from request type
+ *
+ * @param[in] bmRequestType
+ *
+ * @return Extracted type field from request type value
+ */
+static inline app_usbd_setup_reqtype_t app_usbd_setup_req_typ(uint8_t bmRequestType)
+{
+ return (app_usbd_setup_reqtype_t)BF_CX_GET(bmRequestType, APP_USBD_SETUP_REQ_BF_TYP);
+}
+
+
+/**
+ * @brief Extract direction from request type
+ *
+ * @param[in] bmRequestType
+ *
+ * @return Extracted direction field from request type value
+ */
+static inline app_usbd_setup_reqdir_t app_usbd_setup_req_dir(uint8_t bmRequestType)
+{
+ return (app_usbd_setup_reqdir_t)BF_CX_GET(bmRequestType, APP_USBD_SETUP_REQ_BF_DIR);
+}
+
+/**
+ * @brief Make request type value
+ *
+ * @param[in] rec Recipient
+ * @param[in] typ Request type
+ * @param[in] dir Direction
+ *
+ * @return Assembled request type value
+ */
+static inline uint8_t app_usbd_setup_req_val(app_usbd_setup_reqrec_t rec,
+ app_usbd_setup_reqtype_t typ,
+ app_usbd_setup_reqdir_t dir)
+{
+ uint32_t bmRequestType = (
+ BF_CX_VAL(rec, APP_USBD_SETUP_REQ_BF_REC) |
+ BF_CX_VAL(typ, APP_USBD_SETUP_REQ_BF_TYP) |
+ BF_CX_VAL(dir, APP_USBD_SETUP_REQ_BF_DIR)
+ );
+
+ ASSERT(bmRequestType < 256U);
+ return (uint8_t)bmRequestType;
+}
+
+
+ANON_UNIONS_DISABLE;
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* APP_USBD_REQUEST_H__ */