Explorar el Código

Added USB TMC definitions

 USBTMC (USB Test & Measurement Class) used to remotely control test and
 measurement instruments. This commit adds definitions according to
 USBTMC 1.0 specification.
Alexander Voronov hace 6 años
padre
commit
84df9df4bc
Se han modificado 1 ficheros con 152 adiciones y 0 borrados
  1. 152 0
      inc/usb_tmc.h

+ 152 - 0
inc/usb_tmc.h

@@ -0,0 +1,152 @@
+/* This file is the part of the Lightweight USB device Stack for STM32 microcontrollers
+ *
+ * Copyright ©2020 Alexander Voronov <avv.0@ya.ru>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _USB_TMC_H_
+#define _USB_TMC_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+
+/**@addtogroup USB_MODULE_TMC USB TMC class
+ * @brief This module contains USB Device Test and Measurement Class definitions.
+ * @details This module based on
+ *          [USB Device Test and Measurement Class Specification, Revision 1.0]
+ *          (https://www.usb.org/sites/default/files/USBTMC_1_006a.zip)
+ * @{*/
+
+/**@name USB TMC class, subclass and protocol definitions
+ * @{*/
+#define USB_CLASS_TMC           0xFE
+#define USB_TMC_SUBCLASS_TMC    0x03
+#define USB_TMC_PROTO_NONE      0x00 /**< No subclass specification applies. */
+#define USB_TMC_PROTO_USB488    0x01 /**< USBTMC USB488 subclass interface. */
+/** @}*/
+
+/**@name USBTMC requests
+ * @{*/
+#define USB_TMC_REQ_INITIATE_ABORT_BULK_OUT     1
+#define USB_TMC_REQ_CHECK_ABORT_BULK_OUT_STATUS 2
+#define USB_TMC_REQ_INITIATE_ABORT_BULK_IN      3
+#define USB_TMC_REQ_CHECK_ABORT_BULK_IN_STATUS  4
+#define USB_TMC_REQ_INITIATE_CLEAR              5
+#define USB_TMC_REQ_CHECK_CLEAR_STATUS          6
+#define USB_TMC_REQ_GET_CAPABILITIES            7
+#define USB_TMC_REQ_INDICATOR_PULSE             64
+/**@}*/
+
+/**@name USBTMC status values
+ * @{*/
+#define USB_TMC_STATUS_SUCCESS                  0x01
+#define USB_TMC_STATUS_PENDING                  0x02
+#define USB_TMC_STATUS_FAILED                   0x80
+#define USB_TMC_STATUS_TRANSFER_NOT_IN_PROGRESS 0x81
+#define USB_TMC_STATUS_SPLIT_NOT_IN_PROGRESS    0x82
+#define USB_TMC_STATUS_SPLIT_IN_PROGRESS        0x83
+/**@}*/
+
+/** GET_CAPABILITIES request response */
+struct usb_tmc_get_capabilities_response {
+    uint8_t USBTMC_status;
+    uint8_t Reserved0;
+    uint16_t bcdUSBTMC;
+    uint8_t InterfaceCapabilities;
+    uint8_t DeviceCapabilities;
+    uint8_t Reserved1[18];
+} __attribute__((packed));
+
+/**@name MsgId values
+ * @{*/
+#define USB_TMC_DEV_DEP_MSG_OUT             1
+#define USB_TMC_REQUEST_DEV_DEP_MSG_IN      2
+#define USB_TMC_DEV_DEP_MSG_IN              2
+#define USB_TMC_VENDOR_SPECIFIC_OUT         126
+#define USB_TMC_REQUEST_VENDOR_SPECIFIC_IN  127
+#define USB_TMC_VENDOR_SPECIFIC_IN          127
+/**@}*/
+
+/**@name Transfer Attributes
+ * @{*/
+/** The last USBTMC message data byte in the transfer is the last byte of the
+ * USBTMC message. */
+#define USB_TMC_TRANSFER_ATTR_EOM           0x01
+/** The Bulk-IN transfer must terminate on the specified TermChar. The Host may
+ * only set this bit if the USBTMC interface indicates it supports TermChar in
+ * the GET_CAPABILITIES response packet */
+#define USB_TMC_TRANSFER_ATTR_TERM_CHAR     0x02
+/**@}*/
+
+/** Message specific part of bulk header */
+union usb_tmc_bulk_header_specific {
+    struct {
+        uint32_t TransferSize;
+        uint8_t bmTransferAttributes;
+        uint8_t Reserved[3];
+    } dev_dep_msg_out;
+
+    struct {
+        uint32_t TransferSize;
+        uint8_t bmTransferAttributes;
+        uint8_t TermChar;
+        uint8_t Reserved[2];
+    } request_dev_dep_msg_in;
+
+    struct {
+        uint32_t TransferSize;
+        uint8_t bmTransferAttributes;
+        uint8_t Reserved[3];
+    } dev_dep_msg_in;
+
+    struct {
+        uint32_t TransferSize;
+        uint8_t Reserved[4];
+    } vendor_specific_out;
+
+    struct {
+        uint32_t TransferSize;
+        uint8_t Reserved[4];
+    } request_vendor_specific_in;
+
+    struct {
+        uint32_t TransferSize;
+        uint8_t Reserved[4];
+    } vendor_specific_in;
+};
+
+/** Host must begin the first USB transaction in each Bulk transfer of
+ * command message content with a Bulk Header. */
+struct usb_tmc_bulk_header {
+    /** Specifies the USBTMC message and the type of the USBTMC message. */
+    uint8_t MsgId;
+    /** A transfer identifier. The Host must set bTag different than the
+     * bTag used in the previous Bulk-OUT Header. The Host should increment
+     * the bTag by 1 each time it sends a new Bulk-OUT Header. */
+    uint8_t bTag;
+    /** The inverse (one's complement) of the bTag */
+    uint8_t bTagInverse;
+    uint8_t Reserved;
+    /** USBTMC command message specific */
+    union usb_tmc_bulk_header_specific MsgSpecific;
+} __attribute__((packed));
+
+/** @}*/
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* _USB_TMC_H_ */