summaryrefslogtreecommitdiff
path: root/usb/device/ccid/cciddriverdescriptors.h
blob: 2daea671e7618d71a7cf23bf33fdaf3df4514e98 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
/* ----------------------------------------------------------------------------
 *         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.
 * ----------------------------------------------------------------------------
 */

//------------------------------------------------------------------------------
//  Title: cciddriverdescriptors.h
//
//  About: 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

//------------------------------------------------------------------------------
//         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

personal git repositories of Harald Welte. Your mileage may vary