123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- /* Copyright (C) 2020 RDA Technologies Limited and/or its affiliates("RDA").
- * All rights reserved.
- *
- * This software is supplied "AS IS" without any warranties.
- * RDA assumes no responsibility or liability for the use of the software,
- * conveys no license or title under any patent, copyright, or mask work
- * right to the product. RDA reserves the right to make changes in the
- * software without notification. RDA also make no representation or
- * warranty that such application will be suitable for the specified use
- * without further testing or modification.
- */
- #ifndef _USB_CCID_H_
- #define _USB_CCID_H_
- #include <stdint.h>
- #define CCID_DESCRIPTOR_LENGTH 0x36
- typedef struct
- {
- uint8_t bLength;
- uint8_t bDescriptorType;
- uint16_t bcdCCID; // 0110h
- uint8_t bMaxSlotIndex;
- uint8_t bVoltageSupport;
- uint32_t dwProtocols;
- uint32_t dwDefaultClock;
- uint32_t dwMaximumClock;
- uint8_t bNumClockSupported;
- uint32_t dwDataRate;
- uint32_t dwMaxDataRate;
- uint8_t bNumDataRatesSupported;
- uint32_t dwMaxIFSD;
- uint32_t dwSynchProtocols;
- uint32_t dwMechanical;
- uint32_t dwFeatures;
- uint32_t dwMaxCCIDMessageLength;
- uint8_t bClassGetResponse;
- uint8_t bClassEnvelope;
- uint16_t wLcdLayout;
- uint8_t bPINSupport;
- uint8_t bMaxCCIDBusySlots;
- } __attribute__((packed)) ccidClassDesc_t;
- #define CCID_0110 0x0110
- #define CCID_DESCRIPTOR_TYPE 0x21
- #define SMART_CARD_DEVICE_CLASS 0x0b
- // Table 5.3-1 Summary of CCID Class Specific Request
- #define CCIDGENERICREQ_ABORT 0x01
- #define CCIDGENERICREQ_GET_CLOCK_FREQUENCIES 0x02
- #define CCIDGENERICREQ_GET_DATA_RATES 0x03
- // voltage
- #define CCID_VOLTAGE_5V (1 << 0)
- #define CCID_VOLTAGE_3V (1 << 1)
- #define CCID_VOLTAGE_1V8 (1 << 2)
- // mechanical
- #define CCID_MECHANICAL_NO_SPECIAL (0)
- #define CCID_MECHANICAL_CARD_ACCEPT (1 << 0)
- #define CCID_MECHANICAL_CARD_EJECTION (1 << 1)
- #define CCID_MECHANICAL_CARD_CAPTURE (1 << 2)
- #define CCID_MECHANICAL_CARD_LOCK_UNLOCK (1 << 3)
- // feature
- #define CCID_FEATURE_NO_SPECIAL (0)
- // Automatic parameter configuration based on ATR data
- #define CCID_FEATURE_AUTO_PCONF (1 << 1)
- // Automatic activation of ICC on inserting
- #define CCID_FEATURE_AUTO_ACTIV (1 << 2)
- // Automatic ICC voltage selection
- #define CCID_FEATURE_AUTO_VOLT (1 << 3)
- // Automatic ICC clock frequency change
- #define CCID_FEATURE_AUTO_CLOCK (1 << 4)
- // Automatic baud rate change
- #define CCID_FEATURE_AUTO_BAUD (1 << 5)
- // Automatic parameters negotiation made by the CCID
- #define CCID_FEATURE_AUTO_PNEGO (1 << 6)
- // Automatic PPS made by the CCID according to the active paramters
- #define CCID_FEATURE_AUTO_PPS (1 << 7)
- // CCID can set ICC in clock stop mode
- #define CCID_FEATURE_ICCSTOP (1 << 8)
- // NAD value other the 00 accepted (T=1 protocol in use)
- #define CCID_FEATURE_NAD (1 << 9)
- // Automatic IFSD exchange as first exchange (T=1 protocol in use)
- #define CCID_FEATURE_AUTO_IFSD (1 << 10)
- // TPDU level exchanges with CCID
- #define CCID_FEATURE_EXC_TPDU (1 << 16)
- // Short APDU level exchange with CCID
- #define CCID_FEATURE_EXC_SAPDU (1 << 17)
- // Short and Extended APDI level exchange with CCID
- #define CCID_FEATURE_EXC_APDU (1 << 18)
- // USB Wake up signaling supported on card insertion and removal
- #define CCID_FEATURE_WAKEUP (1 << 20)
- // protocol
- #define CCID_PROTOCOL_NO_SEL 0x00
- #define CCID_PROTOCOL_T0 0x01
- #define CCID_PROTOCOL_T1 0x02
- // pin support
- #define CCID_PINSUPPORT_NONE 0x00
- #define CCID_PINSUPPORT_VERIFICATION (1 << 1)
- #define CCID_PINSUPPORT_MODIFICATION (1 << 2)
- #endif
|