mirror of
https://github.com/sakumisu/CherryUSB.git
synced 2025-05-09 00:21:44 +08:00
130 lines
3.9 KiB
C
130 lines
3.9 KiB
C
/*
|
|
* Copyright (c) 2022, sakumisu
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
#ifndef USB_TMC_H
|
|
#define USB_TMC_H
|
|
|
|
/**@addtogroup 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 TMC_SUBCLASS_TMC 0x03
|
|
#define TMC_PROTOCOL_NONE 0x00 /**< No subclass specification applies. */
|
|
#define TMC_PROTOCOL_USB488 0x01 /**< USBTMC USB488 subclass interface. */
|
|
/** @}*/
|
|
|
|
/**@name USBTMC requests
|
|
* @{*/
|
|
#define TMC_REQUEST_INITIATE_ABORT_BULK_OUT 1
|
|
#define TMC_REQUEST_CHECK_ABORT_BULK_OUT_STATUS 2
|
|
#define TMC_REQUEST_INITIATE_ABORT_BULK_IN 3
|
|
#define TMC_REQUEST_CHECK_ABORT_BULK_IN_STATUS 4
|
|
#define TMC_REQUEST_INITIATE_CLEAR 5
|
|
#define TMC_REQUEST_CHECK_CLEAR_STATUS 6
|
|
#define TMC_REQUEST_GET_CAPABILITIES 7
|
|
#define TMC_REQUEST_INDICATOR_PULSE 64
|
|
/**@}*/
|
|
|
|
/**@name USBTMC status values
|
|
* @{*/
|
|
#define TMC_STATUS_SUCCESS 0x01
|
|
#define TMC_STATUS_PENDING 0x02
|
|
#define TMC_STATUS_FAILED 0x80
|
|
#define TMC_STATUS_TRANSFER_NOT_IN_PROGRESS 0x81
|
|
#define TMC_STATUS_SPLIT_NOT_IN_PROGRESS 0x82
|
|
#define TMC_STATUS_SPLIT_IN_PROGRESS 0x83
|
|
/**@}*/
|
|
|
|
/** GET_CAPABILITIES request response */
|
|
struct tmc_get_capabilities_response {
|
|
uint8_t USBTMC_status;
|
|
uint8_t Reserved0;
|
|
uint16_t bcdUSBTMC;
|
|
uint8_t InterfaceCapabilities;
|
|
uint8_t DeviceCapabilities;
|
|
uint8_t Reserved1[18];
|
|
} __PACKED;
|
|
|
|
/**@name MsgId values
|
|
* @{*/
|
|
#define TMC_DEV_DEP_MSG_OUT 1
|
|
#define TMC_REQUEST_DEV_DEP_MSG_IN 2
|
|
#define TMC_DEV_DEP_MSG_IN 2
|
|
#define TMC_VENDOR_SPECIFIC_OUT 126
|
|
#define TMC_REQUEST_VENDOR_SPECIFIC_IN 127
|
|
#define 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 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 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;
|
|
} __PACKED;
|
|
|
|
#endif /* USB_TMC_H */
|