mirror of
https://gitea.osmocom.org/sim-card/simtrace2.git
synced 2026-03-16 21:28:33 +03:00
355 lines
12 KiB
C
355 lines
12 KiB
C
/* ----------------------------------------------------------------------------
|
|
* ATMEL Microcontroller Software Support
|
|
* ----------------------------------------------------------------------------
|
|
* Copyright (c) 2010, Atmel Corporation
|
|
*
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are met:
|
|
*
|
|
* - Redistributions of source code must retain the above copyright notice,
|
|
* this list of conditions and the disclaimer below.
|
|
*
|
|
* Atmel's name may not be used to endorse or promote products derived from
|
|
* this software without specific prior written permission.
|
|
*
|
|
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
|
* DISCLAIMED. IN NO EVENT SHALL ATMEL 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.
|
|
* ----------------------------------------------------------------------------
|
|
*/
|
|
|
|
/** \file
|
|
* \section Purpose
|
|
*
|
|
* Definitions and methods for USB request structures described by the
|
|
* USB specification.
|
|
*
|
|
* \section Usage
|
|
*
|
|
*/
|
|
|
|
#ifndef _USBREQUESTS_H_
|
|
#define _USBREQUESTS_H_
|
|
/** \addtogroup usb_general
|
|
* @{
|
|
* \addtogroup usb_request USB Requests
|
|
* @{
|
|
*/
|
|
|
|
/*---------------------------------------------------------------------------
|
|
* Headers
|
|
*---------------------------------------------------------------------------*/
|
|
|
|
/* These headers were introduced in C99 by working group
|
|
* ISO/IEC JTC1/SC22/WG14.
|
|
*/
|
|
#include <stdint.h>
|
|
|
|
/*---------------------------------------------------------------------------
|
|
* Definitions
|
|
*---------------------------------------------------------------------------*/
|
|
|
|
/*----------- Generic Request ------------*/
|
|
|
|
/** \addtogroup usb_request_define USB Generic Request definitions
|
|
* @{
|
|
* This section lists the codes of USB generic request.
|
|
*
|
|
* - \ref usb_request_code USB Request codes
|
|
* - \ref USBGenericRequest_GETSTATUS
|
|
* - \ref USBGenericRequest_CLEARFEATURE
|
|
* - \ref USBGenericRequest_SETFEATURE
|
|
* - \ref USBGenericRequest_SETADDRESS
|
|
* - \ref USBGenericRequest_GETDESCRIPTOR
|
|
* - \ref USBGenericRequest_SETDESCRIPTOR
|
|
* - \ref USBGenericRequest_GETCONFIGURATION
|
|
* - \ref USBGenericRequest_SETCONFIGURATION
|
|
* - \ref USBGenericRequest_GETINTERFACE
|
|
* - \ref USBGenericRequest_SETINTERFACE
|
|
* - \ref USBGenericRequest_SYNCHFRAME
|
|
*
|
|
* - \ref usb_request_recipient USB Request Recipients
|
|
* - \ref USBGenericRequest_DEVICE
|
|
* - \ref USBGenericRequest_INTERFACE
|
|
* - \ref USBGenericRequest_ENDPOINT
|
|
* - \ref USBGenericRequest_OTHER
|
|
*
|
|
* - \ref usb_request_type USB Request Types
|
|
* - \ref USBGenericRequest_STANDARD
|
|
* - \ref USBGenericRequest_CLASS
|
|
* - \ref USBGenericRequest_VENDOR
|
|
*
|
|
* - \ref usb_request_dir USB Request Directions
|
|
* - \ref USBGenericRequest_IN
|
|
* - \ref USBGenericRequest_OUT
|
|
*/
|
|
|
|
/** \addtogroup usb_request_code USB Request codes
|
|
* @{
|
|
* This section lists the USB generic request codes.
|
|
* - \ref USBGenericRequest_GETSTATUS
|
|
* - \ref USBGenericRequest_CLEARFEATURE
|
|
* - \ref USBGenericRequest_SETFEATURE
|
|
* - \ref USBGenericRequest_SETADDRESS
|
|
* - \ref USBGenericRequest_GETDESCRIPTOR
|
|
* - \ref USBGenericRequest_SETDESCRIPTOR
|
|
* - \ref USBGenericRequest_GETCONFIGURATION
|
|
* - \ref USBGenericRequest_SETCONFIGURATION
|
|
* - \ref USBGenericRequest_GETINTERFACE
|
|
* - \ref USBGenericRequest_SETINTERFACE
|
|
* - \ref USBGenericRequest_SYNCHFRAME
|
|
*/
|
|
/** GET_STATUS request code. */
|
|
#define USBGenericRequest_GETSTATUS 0
|
|
/** CLEAR_FEATURE request code. */
|
|
#define USBGenericRequest_CLEARFEATURE 1
|
|
/** SET_FEATURE request code. */
|
|
#define USBGenericRequest_SETFEATURE 3
|
|
/** SET_ADDRESS request code. */
|
|
#define USBGenericRequest_SETADDRESS 5
|
|
/** GET_DESCRIPTOR request code. */
|
|
#define USBGenericRequest_GETDESCRIPTOR 6
|
|
/** SET_DESCRIPTOR request code. */
|
|
#define USBGenericRequest_SETDESCRIPTOR 7
|
|
/** GET_CONFIGURATION request code. */
|
|
#define USBGenericRequest_GETCONFIGURATION 8
|
|
/** SET_CONFIGURATION request code. */
|
|
#define USBGenericRequest_SETCONFIGURATION 9
|
|
/** GET_INTERFACE request code. */
|
|
#define USBGenericRequest_GETINTERFACE 10
|
|
/** SET_INTERFACE request code. */
|
|
#define USBGenericRequest_SETINTERFACE 11
|
|
/** SYNCH_FRAME request code. */
|
|
#define USBGenericRequest_SYNCHFRAME 12
|
|
/** @}*/
|
|
|
|
/** \addtogroup usb_request_recipient USB Request Recipients
|
|
* @{
|
|
* This section lists codes of USB request recipients.
|
|
* - \ref USBGenericRequest_DEVICE
|
|
* - \ref USBGenericRequest_INTERFACE
|
|
* - \ref USBGenericRequest_ENDPOINT
|
|
* - \ref USBGenericRequest_OTHER
|
|
*/
|
|
/** Recipient is the whole device. */
|
|
#define USBGenericRequest_DEVICE 0
|
|
/** Recipient is an interface. */
|
|
#define USBGenericRequest_INTERFACE 1
|
|
/** Recipient is an endpoint. */
|
|
#define USBGenericRequest_ENDPOINT 2
|
|
/** Recipient is another entity. */
|
|
#define USBGenericRequest_OTHER 3
|
|
/** @}*/
|
|
|
|
/** \addtogroup usb_request_type USB Request Types
|
|
* @{
|
|
* This section lists codes of USB request types.
|
|
* - \ref USBGenericRequest_STANDARD
|
|
* - \ref USBGenericRequest_CLASS
|
|
* - \ref USBGenericRequest_VENDOR
|
|
*/
|
|
/** Request is standard. */
|
|
#define USBGenericRequest_STANDARD 0
|
|
/** Request is class-specific. */
|
|
#define USBGenericRequest_CLASS 1
|
|
/** Request is vendor-specific. */
|
|
#define USBGenericRequest_VENDOR 2
|
|
/** @}*/
|
|
|
|
/** \addtogroup usb_request_dir USB Request Directions
|
|
* @{
|
|
* This section lists codes of USB request directions.
|
|
* - \ref USBGenericRequest_IN
|
|
* - \ref USBGenericRequest_OUT
|
|
*/
|
|
/** Transfer occurs from device to the host. */
|
|
#define USBGenericRequest_OUT 0
|
|
/** Transfer occurs from the host to the device. */
|
|
#define USBGenericRequest_IN 1
|
|
/** @}*/
|
|
/** @}*/
|
|
|
|
|
|
/*----------- Feature Request ------------*/
|
|
|
|
/** \addtogroup usb_feature_def USB Feature Request Definitions
|
|
* @{
|
|
* This section lists codes of USB Feature Request
|
|
*
|
|
* - \ref usb_feature_sel USB Feature selectors
|
|
* - \ref USBFeatureRequest_ENDPOINTHALT
|
|
* - \ref USBFeatureRequest_DEVICEREMOTEWAKEUP
|
|
* - \ref USBFeatureRequest_TESTMODE
|
|
*
|
|
* - \ref usb_test_sel USB Test mode selectors
|
|
* - \ref USBFeatureRequest_TESTJ
|
|
* - \ref USBFeatureRequest_TESTK
|
|
* - \ref USBFeatureRequest_TESTSE0NAK
|
|
* - \ref USBFeatureRequest_TESTPACKET
|
|
* - \ref USBFeatureRequest_TESTFORCEENABLE
|
|
* - \ref USBFeatureRequest_TESTSENDZLP
|
|
*/
|
|
|
|
/** \addtogroup usb_feature_sel USB Feature selectors
|
|
* @{
|
|
* This section lists codes of USB feature selectors.
|
|
* - \ref USBFeatureRequest_ENDPOINTHALT
|
|
* - \ref USBFeatureRequest_DEVICEREMOTEWAKEUP
|
|
* - \ref USBFeatureRequest_TESTMODE
|
|
*/
|
|
/** Halt feature of an endpoint. */
|
|
#define USBFeatureRequest_ENDPOINTHALT 0
|
|
/** Remote wake-up feature of the device. */
|
|
#define USBFeatureRequest_DEVICEREMOTEWAKEUP 1
|
|
/** Test mode of the device. */
|
|
#define USBFeatureRequest_TESTMODE 2
|
|
/** OTG set feature */
|
|
#define USBFeatureRequest_OTG 0x0B
|
|
/** OTG b_hnp_enable */
|
|
#define USBFeatureRequest_OTG_B_HNP_ENABLE 3
|
|
/** OTG a_hnp_support */
|
|
#define USBFeatureRequest_OTG_A_HNP_SUPPORT 4
|
|
/** OTG a_alt_hnp_support */
|
|
#define USBFeatureRequest_OTG_A_ALT_HNP_SUPPORT 5
|
|
/** @}*/
|
|
|
|
/** \addtogroup usb_test_sel USB Test mode selectors
|
|
* @{
|
|
* This section lists codes of USB high speed test mode selectors.
|
|
* - \ref USBFeatureRequest_TESTJ
|
|
* - \ref USBFeatureRequest_TESTK
|
|
* - \ref USBFeatureRequest_TESTSE0NAK
|
|
* - \ref USBFeatureRequest_TESTPACKET
|
|
* - \ref USBFeatureRequest_TESTFORCEENABLE
|
|
* - \ref USBFeatureRequest_TESTSENDZLP
|
|
*/
|
|
|
|
/** Tests the high-output drive level on the D+ line. */
|
|
#define USBFeatureRequest_TESTJ 1
|
|
/** Tests the high-output drive level on the D- line. */
|
|
#define USBFeatureRequest_TESTK 2
|
|
/** Tests the output impedance, low-level output voltage and loading
|
|
characteristics. */
|
|
#define USBFeatureRequest_TESTSE0NAK 3
|
|
/** Tests rise and fall times, eye patterns and jitter. */
|
|
#define USBFeatureRequest_TESTPACKET 4
|
|
/** Tests the hub disconnect detection. */
|
|
#define USBFeatureRequest_TESTFORCEENABLE 5
|
|
/** Send a ZLP in Test Mode. */
|
|
#define USBFeatureRequest_TESTSENDZLP 6
|
|
/** @}*/
|
|
/** @}*/
|
|
|
|
/*---------------------------------------------------------------------------
|
|
* Types
|
|
*---------------------------------------------------------------------------*/
|
|
|
|
/*
|
|
* Function types
|
|
*/
|
|
|
|
/*
|
|
* Descriptor structs types
|
|
*/
|
|
#ifdef __ICCARM__ /* IAR */
|
|
#pragma pack(1) /* IAR */
|
|
#define __attribute__(...) /* IAR */
|
|
#endif /* IAR */
|
|
|
|
/**
|
|
* Generic USB SETUP request sent over Control endpoints.
|
|
*/
|
|
typedef struct {
|
|
|
|
/** Type of request
|
|
* \sa usb_request_recipient "USB Request Recipients"
|
|
* \sa usb_request_type "USB Request Types"
|
|
* \sa usb_request_dir "USB Request Directions" */
|
|
uint8_t bmRequestType:8;
|
|
/** Request code
|
|
* \sa usb_request_code "USB Request Codes" */
|
|
uint8_t bRequest:8;
|
|
/** Request-specific value parameter. */
|
|
uint16_t wValue:16;
|
|
/** Request-specific index parameter. */
|
|
uint16_t wIndex:16;
|
|
/** Expected length (in bytes) of the data phase. */
|
|
uint16_t wLength:16;
|
|
|
|
} USBGenericRequest;
|
|
|
|
#ifdef __ICCARM__ /* IAR */
|
|
#pragma pack() /* IAR */
|
|
#endif /* IAR */
|
|
|
|
/*---------------------------------------------------------------------------
|
|
* Exported Functions
|
|
*---------------------------------------------------------------------------*/
|
|
|
|
extern uint8_t USBGenericRequest_GetType(
|
|
const USBGenericRequest *request);
|
|
|
|
extern uint8_t USBGenericRequest_GetRequest(
|
|
const USBGenericRequest *request);
|
|
|
|
extern uint16_t USBGenericRequest_GetValue(
|
|
const USBGenericRequest *request);
|
|
|
|
extern uint16_t USBGenericRequest_GetIndex(
|
|
const USBGenericRequest *request);
|
|
|
|
extern uint16_t USBGenericRequest_GetLength(
|
|
const USBGenericRequest *request);
|
|
|
|
extern uint8_t USBGenericRequest_GetEndpointNumber(
|
|
const USBGenericRequest *request);
|
|
|
|
extern uint8_t USBGenericRequest_GetRecipient(
|
|
const USBGenericRequest *request);
|
|
|
|
extern uint8_t USBGenericRequest_GetDirection(
|
|
const USBGenericRequest *request);
|
|
|
|
|
|
extern uint8_t USBGetDescriptorRequest_GetDescriptorType(
|
|
const USBGenericRequest *request);
|
|
|
|
extern uint8_t USBGetDescriptorRequest_GetDescriptorIndex(
|
|
const USBGenericRequest *request);
|
|
|
|
|
|
extern uint8_t USBSetAddressRequest_GetAddress(
|
|
const USBGenericRequest *request);
|
|
|
|
|
|
extern uint8_t USBSetConfigurationRequest_GetConfiguration(
|
|
const USBGenericRequest *request);
|
|
|
|
|
|
extern uint8_t USBInterfaceRequest_GetInterface(
|
|
const USBGenericRequest *request);
|
|
|
|
extern uint8_t USBInterfaceRequest_GetAlternateSetting(
|
|
const USBGenericRequest *request);
|
|
|
|
|
|
extern uint8_t USBFeatureRequest_GetFeatureSelector(
|
|
const USBGenericRequest *request);
|
|
|
|
extern uint8_t USBFeatureRequest_GetTestSelector(
|
|
const USBGenericRequest *request);
|
|
|
|
/** @}*/
|
|
/**@}*/
|
|
#endif /* #ifndef _USBREQUESTS_H_ */
|
|
|