#ifndef USBTMCLIB_REQUESTS_H
#define USBTMCLIB_REQUESTS_H

    #include <stddef.h>
    #include <stdint.h>
    #include "usbd_def.h"

    //----------------------------------------------------------------
    // Refer to:
    // [1] USBTMC Standard, rev. 1.0, 14/04/2003
    //     "Universal Serial Bus Test and Measurement Class Specification (USBTMC)"
    // [2] USBTMC-USB488 Standard, rev. 1.0, 14/04/2003
    //     "Universal Serial Bus Test and Measurement Class, Subclass USB488 Specification (USBTMC-USB488)
    //----------------------------------------------------------------

    // @eUSBTMCControlRequests_t
    // USBTMC specific requests via USB-Control protocol
    // see section 4.2.1 [1]
    typedef enum
    {
       // @eUSBTMC_INITIATE_ABORT_BULK_OUT
       // Macro: INITIATE_ABORT_BULK_OUT
       // Aborts a Bulk-OUT transfer.
       eUSBTMC_INITIATE_ABORT_BULK_OUT = 0x01,

       // @eUSBTMC_CHECK_ABORT_BULK_OUT_STATUS
       // Macro: CHECK_ABORT_BULK_OUT_STATUS
       // Returns the status of the previously sent INITIATE_ABORT_BULK_OUT request.
       eUSBTMC_CHECK_ABORT_BULK_OUT_STATUS = 0x02,

       // @eUSBTMC_INITIATE_ABORT_BULK_IN
       // Macro: INITIATE_ABORT_BULK_IN
       // Aborts a Bulk-IN transfer.
       eUSBTMC_INITIATE_ABORT_BULK_IN = 0x03,

       // @eUSBTMC_CHECK_ABORT_BULK_IN_STATUS
       // Macro: CHECK_ABORT_BULK_IN_STATUS
       // Returns the status of the previously sent INITIATE_ABORT_BULK_IN request.
       eUSBTMC_CHECK_ABORT_BULK_IN_STATUS = 0x04,

       // @eUSBTMC_INITIATE_CLEAR
       // Macro: INITIATE_CLEAR
       // Clears all previously sent pending and
       // unprocessed Bulk-OUT USBTMC message
       // content and clears all pending Bulk-IN transfers
       // from the USBTMC interface.
       eUSBTMC_INITIATE_CLEAR = 0x05,

       // @eUSBTMC_CHECK_CLEAR_STATUS
       // Macro: CHECK_CLEAR_STATUS
       // Returns the status of the previously sent INITIATE_CLEAR request.
       eUSBTMC_CHECK_CLEAR_STATUS = 0x06,

       // @eUSBTMC_GET_CAPABILITIES
       // Macro: GET_CAPABILITIES
       // Returns attributes and capabilities of the USBTMC interface.
       eUSBTMC_GET_CAPABILITIES = 0x07,

       // @eUSBTMC_INDICATOR_PULSE
       // Macro: INDICATOR_PULSE
       // A mechanism to turn on an activity indicator for
       // identification purposes. The device indicates
       // whether or not it supports this request in the
       // GET_CAPABILITIES response packet.
       eUSBTMC_INDICATOR_PULSE = 0x40,

       // @eUSBTMC_USB488_READ_STATUS_BYTE
       // Macro: READ_STATUS_BYTE
       // Allows to read the status byte using class request       
       eUSBTMC_USB488_READ_STATUS_BYTE = 0x80,
    }
    eUSBTMCControlRequests_t;
    
#endif