mirror of
https://gitea.osmocom.org/sim-card/simtrace2.git
synced 2026-03-19 14:58:35 +03:00
atmel_softpack_libraries usb dir
This commit is contained in:
1657
sam3s_example/atmel_softpack_libraries/usb/device/ccid/cciddriver.c
Normal file
1657
sam3s_example/atmel_softpack_libraries/usb/device/ccid/cciddriver.c
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,420 @@
|
||||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, 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
|
||||
*
|
||||
* Definition of methods for using a CCID device driver.
|
||||
*
|
||||
* \section Usage
|
||||
*
|
||||
* -# CCIDDriver_Initialize
|
||||
* -# CCID_Read
|
||||
* -# CCID_Write
|
||||
* -# CCID_SmartCardRequest
|
||||
* -# CCID_Insertion
|
||||
* -# CCID_Removal
|
||||
* -# RDRtoPCHardwareError
|
||||
*/
|
||||
|
||||
#ifndef CCID_DRIVER_H
|
||||
#define CCID_DRIVER_H
|
||||
|
||||
/** \addtogroup usbd_ccid
|
||||
*@{
|
||||
*/
|
||||
/** For reference, the absolute maximum block size */
|
||||
/** for a TPDU T=0 block is 260 bytes (5 bytes command; 255 bytes data), or */
|
||||
/** for a TPDU T=1 block is 259 bytes, or */
|
||||
/** for a short APDU T=1 block is 261 bytes, or */
|
||||
/** for an extended APDU T=1 block is 65544 bytes. */
|
||||
#define ABDATA_SIZE 260
|
||||
|
||||
/** define protocol T=0 */
|
||||
#define PROTOCOL_TO 0
|
||||
/** define protocol T=1 */
|
||||
#define PROTOCOL_T1 1
|
||||
|
||||
/** define for dwFeatures see Table 5.1-1 Smart Card Device Class Descriptors */
|
||||
/** No special characteristics */
|
||||
#define CCID_FEATURES_NADA 0x00000000
|
||||
/** Automatic parameter configuration based on ATR data */
|
||||
#define CCID_FEATURES_AUTO_PCONF 0x00000002
|
||||
/** Automatic activation of ICC on inserting */
|
||||
#define CCID_FEATURES_AUTO_ACTIV 0x00000004
|
||||
/** Automatic ICC voltage selection */
|
||||
#define CCID_FEATURES_AUTO_VOLT 0x00000008
|
||||
/** Automatic ICC clock frequency change according to active parameters provided */
|
||||
/** by the Host or self determined */
|
||||
#define CCID_FEATURES_AUTO_CLOCK 0x00000010
|
||||
/** Automatic baud rate change according to active parameters provided by the */
|
||||
/** Host or self determined */
|
||||
#define CCID_FEATURES_AUTO_BAUD 0x00000020
|
||||
/** Automatic parameters negotiation made by the CCID (use of warm or cold */
|
||||
/** resets or PPS according to a manufacturer proprietary algorithm to select */
|
||||
/** the communication parameters with the ICC) */
|
||||
#define CCID_FEATURES_AUTO_PNEGO 0x00000040
|
||||
/** Automatic PPS made by the CCID according to the active parameters */
|
||||
#define CCID_FEATURES_AUTO_PPS 0x00000080
|
||||
/** CCID can set ICC in clock stop mode */
|
||||
#define CCID_FEATURES_ICCSTOP 0x00000100
|
||||
/** NAD value other than 00 accepted (T=1 protocol in use) */
|
||||
#define CCID_FEATURES_NAD 0x00000200
|
||||
/** Automatic IFSD exchange as first exchange (T=1 protocol in use) */
|
||||
#define CCID_FEATURES_AUTO_IFSD 0x00000400
|
||||
/** TPDU level exchanges with CCID */
|
||||
#define CCID_FEATURES_EXC_TPDU 0x00010000
|
||||
/** Short APDU level exchange with CCID */
|
||||
#define CCID_FEATURES_EXC_SAPDU 0x00020000
|
||||
/** Short and Extended APDU level exchange with CCID */
|
||||
#define CCID_FEATURES_EXC_APDU 0x00040000
|
||||
/** USB Wake up signaling supported on card insertion and removal */
|
||||
#define CCID_FEATURES_WAKEUP 0x00100000
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
|
||||
* Types
|
||||
|
||||
*------------------------------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
* \typedef S_ccid_bulk_in_header
|
||||
* \brief Bulk CCID Message header structure
|
||||
*/
|
||||
typedef struct _S_ccid_bulk_in_header
|
||||
{
|
||||
unsigned char bMessageType;
|
||||
/** Message-specific data length */
|
||||
unsigned long wLength;
|
||||
/** Identifies the slot number for this command */
|
||||
unsigned char bSlot;
|
||||
/** Sequence number for command. */
|
||||
unsigned char bSeq;
|
||||
/** Slot status register */
|
||||
unsigned char bStatus;
|
||||
/** Slot error */
|
||||
unsigned char bError;
|
||||
/** specific register */
|
||||
unsigned char bSpecific;
|
||||
/** Data block sent to the CCID. */
|
||||
unsigned char abData[ABDATA_SIZE];
|
||||
unsigned char bSizeToSend;
|
||||
} __attribute__ ((packed)) S_ccid_bulk_in_header;
|
||||
|
||||
/**
|
||||
* \typedef S_ccid_bulk_out_header
|
||||
* \brief 6.1 Bulk Transfers
|
||||
*/
|
||||
typedef struct _S_ccid_bulk_out_header
|
||||
{
|
||||
unsigned char bMessageType;
|
||||
/** Message-specific data length */
|
||||
unsigned long wLength;
|
||||
/** Identifies the slot number for this command */
|
||||
unsigned char bSlot;
|
||||
/** Sequence number for command. */
|
||||
unsigned char bSeq;
|
||||
/** specific register */
|
||||
unsigned char bSpecific_0;
|
||||
unsigned char bSpecific_1;
|
||||
unsigned char bSpecific_2;
|
||||
/** Application Protocol Data Unit */
|
||||
unsigned char APDU[ABDATA_SIZE];
|
||||
} __attribute__ ((packed)) S_ccid_bulk_out_header;
|
||||
|
||||
|
||||
/**
|
||||
* \typedef S_ccid_PIN_Verification
|
||||
* \brief 6.1.11.2 PIN Verification Data Structure
|
||||
*/
|
||||
typedef struct _S_ccid_PIN_Verification
|
||||
{
|
||||
/** Number of seconds. */
|
||||
unsigned char bTimerOut;
|
||||
/** Several parameters for the PIN format options */
|
||||
unsigned char bmFormatString;
|
||||
/** Define the length of the PIN to present in the APDU command */
|
||||
unsigned char bmPINBlockString;
|
||||
/** Allows the length PIN insertion in the APDU command */
|
||||
unsigned char bmPINLengthFormat;
|
||||
/** Minimum PIN size in digit and Maximum PIN size in digit */
|
||||
unsigned char wPINMaxExtraDigit;
|
||||
/** The value is a bit wise OR operation. */
|
||||
unsigned char bEntryValidationCondition;
|
||||
/** Number of messages to display for the PIN modify command */
|
||||
unsigned char bNumberMessage;
|
||||
/** Language used to display the messages. */
|
||||
unsigned char wLangId;
|
||||
/** Message index in the Reader message table */
|
||||
unsigned char bMsgIndex;
|
||||
/** T=1 I-block prologue field to use */
|
||||
unsigned char bTeoPrologue[3];
|
||||
/** APDU to send to the ICC */
|
||||
unsigned char abPINApdu[255];
|
||||
}__attribute__ ((packed)) S_ccid_PIN_Verification;
|
||||
|
||||
|
||||
/**
|
||||
* \typedef S_ccid_PIN_Modification
|
||||
* \brief 6.1.11.7 PIN Modification Data Structure
|
||||
*/
|
||||
typedef struct _S_ccid_PIN_Modification
|
||||
{
|
||||
/** Number of seconds. If 00h then CCID default value is used. */
|
||||
unsigned char bTimeOut;
|
||||
/** Several parameters for the PIN format options (defined in § 6.1.11.4) */
|
||||
unsigned char bmFormatString4;
|
||||
/** Define the length of the PIN to present in the APDU command */
|
||||
unsigned char bmPINBlockString;
|
||||
/** Allows the length PIN insertion in the APDU command (defined in § 6.1.11.6) */
|
||||
unsigned char bmPinLengthFormat;
|
||||
/** Insertion position offset in byte for the current PIN */
|
||||
unsigned char bInsertionOffsetOld;
|
||||
/** Insertion position offset in byte for the new PIN */
|
||||
unsigned char bInsertionOffsetNew;
|
||||
/** XXYYh */
|
||||
/** XX: Minimum PIN size in digit */
|
||||
/** YY: Maximum PIN size in digit */
|
||||
unsigned char wPINMaxExtraDigit;
|
||||
/** 00h,01h,02h,03h */
|
||||
/** Indicates if a confirmation is requested before acceptance of a new PIN (meaning that the user has to enter this new PIN twice before it is accepted) */
|
||||
/** Indicates if the current PIN must be entered and set in the same APDU field of not. */
|
||||
unsigned char bConfirmPIN;
|
||||
/** The value is a bit wise OR operation. */
|
||||
/** 01h Max size reached */
|
||||
/** 02h Validation key pressed */
|
||||
/** 04h Timeout occurred */
|
||||
unsigned char bEntryValidationCondition;
|
||||
/** 00h,01h,02h,03h,or FFh */
|
||||
/** Number of messages to display for the PIN modify command. */
|
||||
unsigned char bNumberMessage;
|
||||
/** Language used to display the messages. The 16 bit */
|
||||
unsigned char wLangId;
|
||||
/** Message index in the Reader message table (should be 00h or 01h). */
|
||||
unsigned char bMsgIndex1;
|
||||
/** Message index in the Reader message table (should be 01h or 02h). */
|
||||
unsigned char bMsgIndex2;
|
||||
/** Message index in the Reader message table (should be 02h). */
|
||||
unsigned char bMsgIndex3;
|
||||
/** T=1 I-block prologue field to use. Significant only if protocol in use is T=1. */
|
||||
unsigned char bTeoPrologue[3];
|
||||
/** Byte array APDU to send to the ICC */
|
||||
unsigned char abPINApdu[255];
|
||||
}__attribute__ ((packed)) S_ccid_PIN_Modification;
|
||||
|
||||
/**
|
||||
* \typedef S_ccid_protocol_t0
|
||||
* \brief Protocol Data Structure for Protocol T=0 (bProtocolNum=0, dwLength=00000005h)
|
||||
*/
|
||||
typedef struct _S_ccid_protocol_t0
|
||||
{
|
||||
/** B7-4 – FI – Index into the table 7 in ISO/IEC 7816-3:1997 selecting a */
|
||||
/** clock rate conversion factor */
|
||||
/** B3-0 – DI - Index into the table 8 in ISO/IEC 7816-3:1997 selecting a */
|
||||
/** baud rate conversion factor */
|
||||
unsigned char bmFindexDindex;
|
||||
/** For T=0 ,B0 – 0b, B7-2 – 000000b */
|
||||
/** B1 – Convention used (b1=0 for direct, b1=1 for inverse) */
|
||||
unsigned char bmTCCKST0; /* 0 to 2 */
|
||||
|
||||
/** Extra Guardtime between two characters. Add 0 to 254 etu to the normal */
|
||||
/** guardtime of 12etu. FFh is the same as 00h. */
|
||||
unsigned char bGuardTimeT0; /* 0 to FF */
|
||||
|
||||
/** WI for T=0 used to define WWT */
|
||||
unsigned char bWaitingIntegerT0; /* 0 to FF */
|
||||
|
||||
/** ICC Clock Stop Support */
|
||||
/** 00 = Stopping the Clock is not allowed */
|
||||
/** 01 = Stop with Clock signal Low */
|
||||
/** 02 = Stop with Clock signal High */
|
||||
/** 03 = Stop with Clock either High or Low */
|
||||
unsigned char bClockStop; /* 0 to 3 */
|
||||
|
||||
} __attribute__ ((packed)) S_ccid_protocol_t0;
|
||||
|
||||
|
||||
/**
|
||||
* \typedef S_ccid_protocol_t1
|
||||
* \brief Protocol Data Structure for Protocol T=1 (bProtocolNum=1, dwLength=00000007h)
|
||||
*/
|
||||
typedef struct _S_ccid_protocol_t1
|
||||
{
|
||||
/** B7-4 – FI – Index into the table 7 in ISO/IEC 7816-3:1997 selecting a */
|
||||
/** clock rate conversion factor */
|
||||
/** B3-0 – DI - Index into the table 8 in ISO/IEC 7816-3:1997 selecting a */
|
||||
/** baud rate conversion factor */
|
||||
unsigned char bmFindexDindex;
|
||||
/** For T=1, B7-2 – 000100b */
|
||||
/** B0 – Checksum type (b0=0 for LRC, b0=1 for CRC */
|
||||
/** B1 – Convention used (b1=0 for direct, b1=1 for inverse) */
|
||||
unsigned char bmTCCKST1; /* 10h, 11h, 12h, 13h */
|
||||
|
||||
/** Extra Guardtime (0 to 254 etu between two characters). */
|
||||
/** If value is FFh, then guardtime is reduced by 1. */
|
||||
unsigned char bGuardTimeT1; /* 0 to FF */
|
||||
|
||||
/** B7-4 = BWI */
|
||||
/** B3-0 = CWI */
|
||||
unsigned char bmWaitingIntegersT1; /* 0 to 9 */
|
||||
|
||||
/** ICC Clock Stop Support */
|
||||
/** 00 = Stopping the Clock is not allowed */
|
||||
/** 01 = Stop with Clock signal Low */
|
||||
/** 02 = Stop with Clock signal High */
|
||||
/** 03 = Stop with Clock either High or Low */
|
||||
unsigned char bClockStop; /* 0 to 3 */
|
||||
|
||||
/** Size of negotiated IFSC */
|
||||
unsigned char bIFSC; /* 0 to FE */
|
||||
|
||||
/** Nad value used by CCID */
|
||||
unsigned char bNadValue; /* 0 to FF */
|
||||
|
||||
} __attribute__ ((packed)) S_ccid_protocol_t1;
|
||||
|
||||
|
||||
/**
|
||||
* \typedef CCIDDescriptor
|
||||
* \brief Identifies the length of type of subordinate descriptors of a CCID device
|
||||
* Table 5.1-1 Smart Card Device Class descriptors
|
||||
*/
|
||||
typedef struct _CCIDDescriptor
|
||||
{
|
||||
/** Size of this descriptor, in bytes. */
|
||||
unsigned char bLength;
|
||||
/** Functional Descriptor type */
|
||||
unsigned char bDescriptorType;
|
||||
/** Integrated Circuit(s) Cards Interface Devices (CCID) Specification */
|
||||
/** Release Number */
|
||||
unsigned short bcdCCID;
|
||||
/** Index of the highest available slot. An USB-ICC is regarded as a single */
|
||||
/** slot CCID. */
|
||||
unsigned char bMaxSlotIndex;
|
||||
/** This value indicates what voltages the CCID can supply to its slots. */
|
||||
/** It is a bitwise OR operation performed on the following values: */
|
||||
/** - 01h 5.0V */
|
||||
/** - 02h 3.0V */
|
||||
/** - 04h 1.8V */
|
||||
/** Other bits are RFU. */
|
||||
unsigned char bVoltageSupport;
|
||||
/** RRRR –Upper Word- is RFU = 0000h */
|
||||
/** PPPP –Lower Word- Encodes the supported protocol types. A ‘1’ in a given */
|
||||
/** bit position indicates support for the associated ISO protocol. */
|
||||
/** 0001h = Protocol T=0 */
|
||||
/** 0002h = Protocol T=1 */
|
||||
/** All other bits are reserved and must be set to zero. The field is */
|
||||
/** intended to correspond to the PCSC specification definitions. */
|
||||
unsigned long dwProtocols;
|
||||
/** Default ICC clock frequency in KHz. This is an integer value. */
|
||||
unsigned long dwDefaultClock;
|
||||
/** Maximum supported ICC clock frequency in KHz. This is an integer value. */
|
||||
unsigned long dwMaximumClock;
|
||||
/** The number of clock frequencies that are supported by the CCID. If the */
|
||||
/** value is 00h, the supported clock frequencies are assumed to be the */
|
||||
/** default clock frequency defined by dwDefaultClock and the maximum clock */
|
||||
/** frequency defined by dwMaximumClock. */
|
||||
unsigned char bNumClockSupported;
|
||||
/** Default ICC I/O data rate in bps. This is an integer value */
|
||||
unsigned long dwDataRate;
|
||||
/** Maximum supported ICC I/O data rate in bps */
|
||||
unsigned long dwMaxDataRate;
|
||||
/** The number of data rates that are supported by the CCID. */
|
||||
unsigned char bNumDataRatesSupported;
|
||||
/** Indicates the maximum IFSD supported by CCID for protocol T=1. */
|
||||
unsigned long dwMaxIFSD;
|
||||
/** - RRRR-Upper Word- is RFU = 0000h */
|
||||
/** - PPPP-Lower Word- encodes the supported protocol types. A ‘1’ in a given */
|
||||
/** bit position indicates support for the associated protocol. */
|
||||
/** 0001h indicates support for the 2-wire protocol 1 */
|
||||
/** 0002h indicates support for the 3-wire protocol 1 */
|
||||
/** 0004h indicates support for the I2C protocol 1 */
|
||||
/** All other values are outside of this specification, and must be handled */
|
||||
/** by vendor-supplied drivers. */
|
||||
unsigned long dwSynchProtocols;
|
||||
/** The value is a bitwise OR operation performed on the following values: */
|
||||
/** - 00000000h No special characteristics */
|
||||
/** - 00000001h Card accept mechanism 2 */
|
||||
/** - 00000002h Card ejection mechanism 2 */
|
||||
/** - 00000004h Card capture mechanism 2 */
|
||||
/** - 00000008h Card lock/unlock mechanism */
|
||||
unsigned long dwMechanical;
|
||||
/** This value indicates what intelligent features the CCID has. */
|
||||
unsigned long dwFeatures;
|
||||
/** For extended APDU level the value shall be between 261 + 10 (header) and */
|
||||
/** 65544 +10, otherwise the minimum value is the wMaxPacketSize of the */
|
||||
/** Bulk-OUT endpoint. */
|
||||
unsigned long dwMaxCCIDMessageLength;
|
||||
/** Significant only for CCID that offers an APDU level for exchanges. */
|
||||
unsigned char bClassGetResponse;
|
||||
/** Significant only for CCID that offers an extended APDU level for exchanges. */
|
||||
unsigned char bClassEnvelope;
|
||||
/** Number of lines and characters for the LCD display used to send messages for PIN entry. */
|
||||
unsigned short wLcdLayout;
|
||||
/** This value indicates what PIN support features the CCID has. */
|
||||
unsigned char bPINSupport;
|
||||
/** Maximum number of slots which can be simultaneously busy. */
|
||||
unsigned char bMaxCCIDBusySlots;
|
||||
|
||||
} __attribute__ ((packed)) CCIDDescriptor;
|
||||
|
||||
/*------------------------------------------------------------------------------ */
|
||||
|
||||
/* Exported functions */
|
||||
|
||||
/*------------------------------------------------------------------------------ */
|
||||
|
||||
|
||||
extern unsigned char RDRtoPCHardwareError( unsigned char bSlot,
|
||||
unsigned char bSeq,
|
||||
unsigned char bHardwareErrorCode );
|
||||
|
||||
#if !defined(NOAUTOCALLBACK)
|
||||
extern void USBDCallbacks_RequestReceived(const USBGenericRequest *request);
|
||||
#endif
|
||||
extern void CCID_SmartCardRequest( void );
|
||||
extern void CCIDDriver_Initialize( void );
|
||||
extern unsigned char CCID_Read(void *pBuffer,
|
||||
unsigned int dLength,
|
||||
TransferCallback fCallback,
|
||||
void *pArgument);
|
||||
extern unsigned char CCID_Write(void *pBuffer,
|
||||
unsigned int dLength,
|
||||
TransferCallback fCallback,
|
||||
void *pArgument);
|
||||
extern unsigned char CCID_Insertion( void );
|
||||
extern unsigned char CCID_Removal( void );
|
||||
|
||||
/**@}*/
|
||||
|
||||
#endif /*#ifndef CCID_DRIVER_H */
|
||||
|
||||
|
||||
@@ -0,0 +1,182 @@
|
||||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, 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
|
||||
* Title: cciddriverdescriptors.h
|
||||
*
|
||||
* \section Purpose
|
||||
* Definitions of the descriptors required by the ccid device driver.
|
||||
* DWG_Smart-Card_CCID_Rev110.pdf
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef CCID_DRIVER_DESCRIPTORS_H
|
||||
#define CCID_DRIVER_DESCRIPTORS_H
|
||||
|
||||
/** \addtogroup usbd_ccid
|
||||
*@{
|
||||
*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Definitions
|
||||
*------------------------------------------------------------------------------*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Constants: Endpoints
|
||||
* CCID_EPT_DATA_OUT endpoint data out bulk 1
|
||||
* CCID_EPT_DATA_IN endpoint data in bulk 2
|
||||
* CCID_EPT_NOTIFICATION endpoint data interupt 3
|
||||
*------------------------------------------------------------------------------*/
|
||||
#define CCID_EPT_DATA_OUT 1
|
||||
#define CCID_EPT_DATA_IN 2
|
||||
#define CCID_EPT_NOTIFICATION 3
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* USB-ICC protocol
|
||||
*------------------------------------------------------------------------------*/
|
||||
/* CCID specification version 1.10 */
|
||||
|
||||
#define CCID1_10 0x0110
|
||||
|
||||
#define SMART_CARD_DEVICE_CLASS 0x0B
|
||||
/* Smart Card Device Class Descriptor Type */
|
||||
|
||||
#define CCID_DECRIPTOR_TYPE 0x21
|
||||
|
||||
/* Table 5.3-1 Summary of CCID Class Specific Request */
|
||||
|
||||
#define CCIDGenericRequest_ABORT 0x01
|
||||
#define CCIDGenericRequest_GET_CLOCK_FREQUENCIES 0x02
|
||||
#define CCIDGenericRequest_GET_DATA_RATES 0x03
|
||||
|
||||
/* 6.1 Command Pipe, Bulk-OUT Messages */
|
||||
|
||||
#define PC_TO_RDR_ICCPOWERON 0x62
|
||||
#define PC_TO_RDR_ICCPOWEROFF 0x63
|
||||
#define PC_TO_RDR_GETSLOTSTATUS 0x65
|
||||
#define PC_TO_RDR_XFRBLOCK 0x6F
|
||||
#define PC_TO_RDR_GETPARAMETERS 0x6C
|
||||
#define PC_TO_RDR_RESETPARAMETERS 0x6D
|
||||
#define PC_TO_RDR_SETPARAMETERS 0x61
|
||||
#define PC_TO_RDR_ESCAPE 0x6B
|
||||
#define PC_TO_RDR_ICCCLOCK 0x6E
|
||||
#define PC_TO_RDR_T0APDU 0x6A
|
||||
#define PC_TO_RDR_SECURE 0x69
|
||||
#define PC_TO_RDR_MECHANICAL 0x71
|
||||
#define PC_TO_RDR_ABORT 0x72
|
||||
#define PC_TO_RDR_SETDATARATEANDCLOCKFREQUENCY 0x73
|
||||
|
||||
/* 6.2 Response Pipe, Bulk-IN Messages */
|
||||
|
||||
#define RDR_TO_PC_DATABLOCK 0x80
|
||||
#define RDR_TO_PC_SLOTSTATUS 0x81
|
||||
#define RDR_TO_PC_PARAMETERS 0x82
|
||||
#define RDR_TO_PC_ESCAPE 0x83
|
||||
#define RDR_TO_PC_DATARATEANDCLOCKFREQUENCY 0x84
|
||||
|
||||
/* 6.3 Interrupt-IN Messages */
|
||||
|
||||
#define RDR_TO_PC_NOTIFYSLOTCHANGE 0x50
|
||||
#define RDR_TO_PC_HARDWAREERROR 0x51
|
||||
|
||||
/* Table 6.2-2 Slot error register when bmCommandStatus = 1 */
|
||||
|
||||
#define CMD_ABORTED 0xFF
|
||||
#define ICC_MUTE 0xFE
|
||||
#define XFR_PARITY_ERROR 0xFD
|
||||
#define XFR_OVERRUN 0xFC
|
||||
#define HW_ERROR 0xFB
|
||||
#define BAD_ATR_TS 0xF8
|
||||
#define BAD_ATR_TCK 0xF7
|
||||
#define ICC_PROTOCOL_NOT_SUPPORTED 0xF6
|
||||
#define ICC_CLASS_NOT_SUPPORTED 0xF5
|
||||
#define PROCEDURE_BYTE_CONFLICT 0xF4
|
||||
#define DEACTIVATED_PROTOCOL 0xF3
|
||||
#define BUSY_WITH_AUTO_SEQUENCE 0xF2
|
||||
#define PIN_TIMEOUT 0xF0
|
||||
#define PIN_CANCELLED 0xEF
|
||||
#define CMD_SLOT_BUSY 0xE0
|
||||
/* User defined 0xC0 to 0x81 */
|
||||
|
||||
/* Reserved for futur use 0x80 */
|
||||
|
||||
/* not supported incorrect message parameter 0x7F to 0x01 */
|
||||
|
||||
/* Command not supported 0x00 */
|
||||
|
||||
|
||||
/* CCID rev 1.1, p.27 */
|
||||
|
||||
#define VOLTS_AUTO 0x00
|
||||
#define VOLTS_5_0 0x01
|
||||
#define VOLTS_3_0 0x02
|
||||
#define VOLTS_1_8 0x03
|
||||
|
||||
/* 6.3.1 RDR_to_PC_NotifySlotChange */
|
||||
|
||||
#define ICC_NOT_PRESENT 0x00
|
||||
#define ICC_PRESENT 0x01
|
||||
#define ICC_CHANGE 0x02
|
||||
#define ICC_INSERTED_EVENT ICC_PRESENT+ICC_CHANGE
|
||||
|
||||
/* ICCD: Table 6.1-8 Bitmap for bStatus field */
|
||||
|
||||
#define ICC_BS_PRESENT_ACTIVATED 0x00 /* USB-ICC is present and activated */
|
||||
|
||||
#define ICC_BS_PRESENT_NOTACTIVATED 0x01 /* USB-ICC is present but not activated */
|
||||
|
||||
#define ICC_BS_NOTPRESENT 0x02 /* USB-ICC is virtually not present */
|
||||
|
||||
#define ICC_BS_RFU 0x03 /* RFU */
|
||||
|
||||
#define ICC_CS_NO_ERROR (0x00<<6) /* Processed without error */
|
||||
|
||||
#define ICC_CS_FAILED (0x01<<6) /* Failed, error condition given by bError */
|
||||
|
||||
#define ICC_CS_TIME_EXT (0x02<<6) /* Time extension is requested */
|
||||
|
||||
#define ICC_CS_RFU (0x03<<6) /* RFU */
|
||||
|
||||
|
||||
/*
|
||||
* #define NO_ERROR 0x00
|
||||
* #define NO_EXTRA_BYTES 0x00
|
||||
* #define CCID_FLAG_INITIAL_VALUE 0x05
|
||||
* #define CCID_EVENT_SIZE 0x02
|
||||
* #define STATUS_MASK 0x41
|
||||
*/
|
||||
/*------------------------------------------------------------------------------
|
||||
* Structures
|
||||
*------------------------------------------------------------------------------*/
|
||||
|
||||
/**@}*/
|
||||
|
||||
#endif /*#ifndef CCID_DRIVER_DESCRIPTORS_H */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user