Initial commit
[platform/upstream/ccid.git] / src / towitoko / atr.h
1 /*
2     atr.h
3     ISO 7816 ICC's answer to reset abstract data type definitions
4
5     This file is part of the Unix driver for Towitoko smartcard readers
6     Copyright (C) 2000 Carlos Prados <cprados@yahoo.com>
7
8     This library is free software; you can redistribute it and/or
9     modify it under the terms of the GNU Lesser General Public
10     License as published by the Free Software Foundation; either
11     version 2 of the License, or (at your option) any later version.
12
13     This library is distributed in the hope that it will be useful,
14     but WITHOUT ANY WARRANTY; without even the implied warranty of
15     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16     Lesser General Public License for more details.
17
18         You should have received a copy of the GNU Lesser General Public License
19         along with this library; if not, write to the Free Software Foundation,
20         Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 */
22
23 #ifndef _ATR_
24 #define _ATR_
25
26 #include "defines.h"
27
28 /*
29  * Exported constants definition
30  */
31
32 /* Return values */
33 #define ATR_OK          0       /* ATR could be parsed and data returned */
34 #define ATR_NOT_FOUND   1       /* Data not present in ATR */
35 #define ATR_MALFORMED   2       /* ATR could not be parsed */
36 #define ATR_IO_ERROR    3       /* I/O stream error */
37
38 /* Paramenters */
39 #define ATR_MAX_SIZE            33      /* Maximum size of ATR byte array */
40 #define ATR_MAX_HISTORICAL      15      /* Maximum number of historical bytes */
41 #define ATR_MAX_PROTOCOLS       7       /* Maximun number of protocols */
42 #define ATR_MAX_IB              4       /* Maximum number of interface bytes per protocol */
43 #define ATR_CONVENTION_DIRECT   0       /* Direct convention */
44 #define ATR_CONVENTION_INVERSE  1       /* Inverse convention */
45 #define ATR_PROTOCOL_TYPE_T0    0       /* Protocol type T=0 */
46 #define ATR_PROTOCOL_TYPE_T1    1       /* Protocol type T=1 */
47 #define ATR_PROTOCOL_TYPE_T2    2       /* Protocol type T=2 */
48 #define ATR_PROTOCOL_TYPE_T3    3       /* Protocol type T=3 */
49 #define ATR_PROTOCOL_TYPE_T14   14      /* Protocol type T=14 */
50 #define ATR_INTERFACE_BYTE_TA   0       /* Interface byte TAi */
51 #define ATR_INTERFACE_BYTE_TB   1       /* Interface byte TBi */
52 #define ATR_INTERFACE_BYTE_TC   2       /* Interface byte TCi */
53 #define ATR_INTERFACE_BYTE_TD   3       /* Interface byte TDi */
54 #define ATR_PARAMETER_F         0       /* Parameter F */
55 #define ATR_PARAMETER_D         1       /* Parameter D */
56 #define ATR_PARAMETER_I         2       /* Parameter I */
57 #define ATR_PARAMETER_P         3       /* Parameter P */
58 #define ATR_PARAMETER_N         4       /* Parameter N */
59 #define ATR_INTEGER_VALUE_FI    0       /* Integer value FI */
60 #define ATR_INTEGER_VALUE_DI    1       /* Integer value DI */
61 #define ATR_INTEGER_VALUE_II    2       /* Integer value II */
62 #define ATR_INTEGER_VALUE_PI1   3       /* Integer value PI1 */
63 #define ATR_INTEGER_VALUE_N     4       /* Integer value N */
64 #define ATR_INTEGER_VALUE_PI2   5       /* Integer value PI2 */
65
66 /* Default values for paramenters */
67 #define ATR_DEFAULT_F   372
68 #define ATR_DEFAULT_D   1
69 #define ATR_DEFAULT_I   50
70 #define ATR_DEFAULT_N   0
71 #define ATR_DEFAULT_P   5
72
73 /*
74  * Exported data types definition
75  */
76
77 typedef struct
78 {
79   unsigned length;
80   BYTE TS;
81   BYTE T0;
82   struct
83   {
84     BYTE value;
85     int present;
86   }
87   ib[ATR_MAX_PROTOCOLS][ATR_MAX_IB], TCK;
88   unsigned pn;
89   BYTE hb[ATR_MAX_HISTORICAL];
90   unsigned hbn;
91 }
92 ATR_t;
93
94 /*
95  * Exported functions declaraton
96  */
97
98 /* Initialization */
99 extern int ATR_InitFromArray(ATR_t * atr, const BYTE buffer[ATR_MAX_SIZE],
100         unsigned length);
101
102 /* General smartcard characteristics */
103 extern int ATR_GetConvention(ATR_t * atr, /*@out@*/ int *convention);
104 extern int ATR_GetDefaultProtocol(ATR_t * atr, /*@out@*/ int *protocol, int *availableProtocols);
105
106 /* ATR parameters and integer values */
107 extern int ATR_GetIntegerValue(ATR_t * atr, int name, BYTE * value);
108 extern int ATR_GetParameter(ATR_t * atr, int name, /*@out@*/ double *parameter);
109
110 #endif /* _ATR_ */
111