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 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>OpenCT: ifd.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.1 -->
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main Page</span></a></li>
<li><a href="annotated.html"><span>Data Structures</span></a></li>
<li id="current"><a href="files.html"><span>Files</span></a></li>
<li><a href="dirs.html"><span>Directories</span></a></li>
</ul></div>
<div class="nav">
<a class="el" href="dir_48ff4d8e84c7d8bdad9110a7da283b5f.html">src</a> » <a class="el" href="dir_877fe36415f52529fd2e180217ad90f9.html">include</a> » <a class="el" href="dir_be5e542b2ca1305501268904b0410904.html">openct</a></div>
<h1>ifd.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
<a name="l00002"></a>00002 <span class="comment"> * Core functions of the IFD handler library</span>
<a name="l00003"></a>00003 <span class="comment"> *</span>
<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2003, Olaf Kirch <okir@suse.de></span>
<a name="l00005"></a>00005 <span class="comment"> */</span>
<a name="l00006"></a>00006
<a name="l00007"></a>00007 <span class="preprocessor">#ifndef OPENCT_IFD_H</span>
<a name="l00008"></a>00008 <span class="preprocessor"></span><span class="preprocessor">#define OPENCT_IFD_H</span>
<a name="l00009"></a>00009 <span class="preprocessor"></span>
<a name="l00010"></a>00010 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00011"></a>00011 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
<a name="l00012"></a>00012 <span class="preprocessor">#endif</span>
<a name="l00013"></a>00013 <span class="preprocessor"></span>
<a name="l00014"></a>00014 <span class="preprocessor">#include <sys/types.h></span>
<a name="l00015"></a>00015 <span class="preprocessor">#include <openct/openct.h></span>
<a name="l00016"></a>00016 <span class="preprocessor">#include <openct/apdu.h></span>
<a name="l00017"></a>00017
<a name="l00018"></a>00018 <span class="keyword">typedef</span> <span class="keyword">struct </span>ifd_device ifd_device_t;
<a name="l00019"></a>00019 <span class="keyword">typedef</span> <span class="keyword">union </span><a class="code" href="unionifd__device__params.html">ifd_device_params</a> ifd_device_params_t;
<a name="l00020"></a>00020
<a name="l00021"></a>00021 <span class="keyword">enum</span> {
<a name="l00022"></a>00022 IFD_PROTOCOL_DEFAULT = -1,
<a name="l00023"></a>00023 IFD_PROTOCOL_T0 = 0,
<a name="l00024"></a>00024 IFD_PROTOCOL_T1,
<a name="l00025"></a>00025 IFD_PROTOCOL_2WIRE = 16,
<a name="l00026"></a>00026 IFD_PROTOCOL_3WIRE,
<a name="l00027"></a>00027 IFD_PROTOCOL_I2C_SHORT,
<a name="l00028"></a>00028 IFD_PROTOCOL_I2C_LONG,
<a name="l00029"></a>00029 IFD_PROTOCOL_TLP, <span class="comment">/* older Gemplus protocol */</span>
<a name="l00030"></a>00030 IFD_PROTOCOL_GBP, <span class="comment">/* Gemplus block protocol */</span>
<a name="l00031"></a>00031 IFD_PROTOCOL_EUROCHIP, <span class="comment">/* Eurochip Countercard */</span>
<a name="l00032"></a>00032 IFD_PROTOCOL_TCL, <span class="comment">/* ISO 14443-4 T=CL */</span>
<a name="l00033"></a>00033 IFD_PROTOCOL_ESCAPE, <span class="comment">/* Virtual 'escape' protocol */</span>
<a name="l00034"></a>00034 IFD_PROTOCOL_TRANSPARENT = 128
<a name="l00035"></a>00035 };
<a name="l00036"></a>00036
<a name="l00037"></a>00037 <span class="keyword">typedef</span> <span class="keyword">struct </span>ifd_protocol ifd_protocol_t;
<a name="l00038"></a>00038
<a name="l00039"></a><a class="code" href="structifd__driver.html">00039</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structifd__driver.html">ifd_driver</a> {
<a name="l00040"></a><a class="code" href="structifd__driver.html#c9ef026b2193e5a22a4fe38bf4206713">00040</a> <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="structifd__driver.html#c9ef026b2193e5a22a4fe38bf4206713">name</a>;
<a name="l00041"></a><a class="code" href="structifd__driver.html#3ba1aea515a790bfbc060b09ac920caa">00041</a> <span class="keyword">struct </span><a class="code" href="structifd__driver__ops.html">ifd_driver_ops</a> * <a class="code" href="structifd__driver.html#3ba1aea515a790bfbc060b09ac920caa">ops</a>;
<a name="l00042"></a>00042 } <a class="code" href="structifd__driver.html">ifd_driver_t</a>;
<a name="l00043"></a>00043
<a name="l00044"></a>00044 <span class="preprocessor">#define IFD_MAX_ATR_LEN 64</span>
<a name="l00045"></a><a class="code" href="structifd__slot.html">00045</a> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structifd__slot.html">ifd_slot</a> {
<a name="l00046"></a><a class="code" href="structifd__slot.html#faa26c459139aca76433ba50ddbbb4cc">00046</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structifd__slot.html#faa26c459139aca76433ba50ddbbb4cc">handle</a>;
<a name="l00047"></a>00047
<a name="l00048"></a><a class="code" href="structifd__slot.html#5f0580fcede736622ca05a2d4c34da44">00048</a> <span class="keywordtype">int</span> <a class="code" href="structifd__slot.html#5f0580fcede736622ca05a2d4c34da44">status</a>;
<a name="l00049"></a><a class="code" href="structifd__slot.html#3e2f5e4ec405688aaba6d033cb3f48db">00049</a> time_t <a class="code" href="structifd__slot.html#3e2f5e4ec405688aaba6d033cb3f48db">next_update</a>;
<a name="l00050"></a>00050
<a name="l00051"></a><a class="code" href="structifd__slot.html#9e220b50628e7c69fcd3bc1d2951f8d5">00051</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="structifd__slot.html#9e220b50628e7c69fcd3bc1d2951f8d5">dad</a>; <span class="comment">/* address when using T=1 */</span>
<a name="l00052"></a><a class="code" href="structifd__slot.html#0c77faa78487e8e86693eb94f225670d">00052</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structifd__slot.html#0c77faa78487e8e86693eb94f225670d">atr_len</a>;
<a name="l00053"></a><a class="code" href="structifd__slot.html#b903677553ea99d1a613cf9cd7f2469a">00053</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="structifd__slot.html#b903677553ea99d1a613cf9cd7f2469a">atr</a>[IFD_MAX_ATR_LEN];
<a name="l00054"></a>00054
<a name="l00055"></a><a class="code" href="structifd__slot.html#08640922f40453ed8b894f1e8836d7aa">00055</a> ifd_protocol_t * <a class="code" href="structifd__slot.html#08640922f40453ed8b894f1e8836d7aa">proto</a>;
<a name="l00056"></a><a class="code" href="structifd__slot.html#01d035e2f8f40d445556126fc1de8979">00056</a> <span class="keywordtype">void</span> * <a class="code" href="structifd__slot.html#01d035e2f8f40d445556126fc1de8979">reader_data</a>;
<a name="l00057"></a>00057 } <a class="code" href="structifd__slot.html">ifd_slot_t</a>;
<a name="l00058"></a>00058
<a name="l00059"></a><a class="code" href="structifd__reader.html">00059</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structifd__reader.html">ifd_reader</a> {
<a name="l00060"></a><a class="code" href="structifd__reader.html#38949879293cfec8aeb80c99bb237522">00060</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structifd__reader.html#38949879293cfec8aeb80c99bb237522">num</a>;
<a name="l00061"></a><a class="code" href="structifd__reader.html#faa26c459139aca76433ba50ddbbb4cc">00061</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structifd__reader.html#faa26c459139aca76433ba50ddbbb4cc">handle</a>;
<a name="l00062"></a>00062
<a name="l00063"></a><a class="code" href="structifd__reader.html#c9ef026b2193e5a22a4fe38bf4206713">00063</a> <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="structifd__reader.html#c9ef026b2193e5a22a4fe38bf4206713">name</a>;
<a name="l00064"></a><a class="code" href="structifd__reader.html#2e451d564284a60e9ea79cfa6c6dd83c">00064</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structifd__reader.html#2e451d564284a60e9ea79cfa6c6dd83c">flags</a>;
<a name="l00065"></a><a class="code" href="structifd__reader.html#e6897fb21abda934f034ab9f39ba423b">00065</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structifd__reader.html#e6897fb21abda934f034ab9f39ba423b">nslots</a>;
<a name="l00066"></a><a class="code" href="structifd__reader.html#8c3bc5b204cd0a5db55082cbf0cb5c4b">00066</a> <a class="code" href="structifd__slot.html">ifd_slot_t</a> <a class="code" href="structifd__reader.html#8c3bc5b204cd0a5db55082cbf0cb5c4b">slot</a>[OPENCT_MAX_SLOTS];
<a name="l00067"></a>00067
<a name="l00068"></a><a class="code" href="structifd__reader.html#ec627ec0a2324af6bdb455c1fe125a3c">00068</a> <span class="keyword">const</span> <a class="code" href="structifd__driver.html">ifd_driver_t</a> * <a class="code" href="structifd__reader.html#ec627ec0a2324af6bdb455c1fe125a3c">driver</a>;
<a name="l00069"></a><a class="code" href="structifd__reader.html#accba2d781d3020eb76728675ddf4720">00069</a> ifd_device_t * <a class="code" href="structifd__reader.html#accba2d781d3020eb76728675ddf4720">device</a>;
<a name="l00070"></a><a class="code" href="structifd__reader.html#cf1289669c63c052d4b3fb0662a9f47e">00070</a> <a class="code" href="structct__info.html">ct_info_t</a> * <a class="code" href="structifd__reader.html#cf1289669c63c052d4b3fb0662a9f47e">status</a>;
<a name="l00071"></a>00071
<a name="l00072"></a>00072 <span class="comment">/* In case the IFD needs to keep state */</span>
<a name="l00073"></a><a class="code" href="structifd__reader.html#146e9ce3b0cf94ac05d63476ca6d71ef">00073</a> <span class="keywordtype">void</span> * <a class="code" href="structifd__reader.html#146e9ce3b0cf94ac05d63476ca6d71ef">driver_data</a>;
<a name="l00074"></a>00074 } <a class="code" href="structifd__reader.html">ifd_reader_t</a>;
<a name="l00075"></a>00075
<a name="l00076"></a>00076 <span class="preprocessor">#define IFD_READER_ACTIVE 0x0001</span>
<a name="l00077"></a>00077 <span class="preprocessor"></span><span class="preprocessor">#define IFD_READER_HOTPLUG 0x0002</span>
<a name="l00078"></a>00078 <span class="preprocessor"></span><span class="preprocessor">#define IFD_READER_DISPLAY 0x0100</span>
<a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#define IFD_READER_KEYPAD 0x0200</span>
<a name="l00080"></a>00080 <span class="preprocessor"></span>
<a name="l00081"></a>00081 <span class="keyword">enum</span> {
<a name="l00082"></a>00082 IFD_PROTOCOL_RECV_TIMEOUT = 0x0000,
<a name="l00083"></a>00083 IFD_PROTOCOL_BLOCK_ORIENTED,
<a name="l00084"></a>00084
<a name="l00085"></a>00085 <span class="comment">/* T=0 specific parameters */</span>
<a name="l00086"></a>00086 __IFD_PROTOCOL_T0_PARAM_BASE = IFD_PROTOCOL_T0 << 16,
<a name="l00087"></a>00087
<a name="l00088"></a>00088 <span class="comment">/* T=1 specific parameters */</span>
<a name="l00089"></a>00089 __IFD_PROTOCOL_T1_PARAM_BASE = IFD_PROTOCOL_T1 << 16,
<a name="l00090"></a>00090 IFD_PROTOCOL_T1_BLOCKSIZE,
<a name="l00091"></a>00091 IFD_PROTOCOL_T1_CHECKSUM_CRC,
<a name="l00092"></a>00092 IFD_PROTOCOL_T1_CHECKSUM_LRC,
<a name="l00093"></a>00093 IFD_PROTOCOL_T1_IFSC,
<a name="l00094"></a>00094 IFD_PROTOCOL_T1_IFSD,
<a name="l00095"></a>00095 IFD_PROTOCOL_T1_STATE,
<a name="l00096"></a>00096 IFD_PROTOCOL_T1_MORE
<a name="l00097"></a>00097 };
<a name="l00098"></a>00098
<a name="l00099"></a>00099 <span class="keyword">enum</span> {
<a name="l00100"></a>00100 IFD_DAD_HOST = 0,
<a name="l00101"></a>00101 IFD_DAD_IFD,
<a name="l00102"></a>00102 IFD_DAD_ICC1,
<a name="l00103"></a>00103 IFD_DAD_ICC2
<a name="l00104"></a>00104 };
<a name="l00105"></a>00105
<a name="l00106"></a>00106
<a name="l00107"></a>00107 <span class="keyword">extern</span> <span class="keywordtype">int</span> ifd_init(<span class="keywordtype">void</span>);
<a name="l00108"></a>00108
<a name="l00109"></a>00109 <span class="keyword">extern</span> <a class="code" href="structifd__reader.html">ifd_reader_t</a> * ifd_open(<span class="keyword">const</span> <span class="keywordtype">char</span> *driver_name,
<a name="l00110"></a>00110 <span class="keyword">const</span> <span class="keywordtype">char</span> *device_name);
<a name="l00111"></a>00111 <span class="keyword">extern</span> <span class="keywordtype">void</span> ifd_close(<a class="code" href="structifd__reader.html">ifd_reader_t</a> *);
<a name="l00112"></a>00112 <span class="keyword">extern</span> <span class="keywordtype">int</span> ifd_reader_count(<span class="keywordtype">void</span>);
<a name="l00113"></a>00113 <span class="keyword">extern</span> <span class="keywordtype">int</span> ifd_attach(<a class="code" href="structifd__reader.html">ifd_reader_t</a> *);
<a name="l00114"></a>00114 <span class="keyword">extern</span> <span class="keywordtype">void</span> ifd_detach(<a class="code" href="structifd__reader.html">ifd_reader_t</a> *);
<a name="l00115"></a>00115 <span class="keyword">extern</span> <a class="code" href="structifd__reader.html">ifd_reader_t</a> * ifd_reader_by_handle(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> handle);
<a name="l00116"></a>00116 <span class="keyword">extern</span> <a class="code" href="structifd__reader.html">ifd_reader_t</a> * ifd_reader_by_index(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index);
<a name="l00117"></a>00117
<a name="l00118"></a>00118 <span class="keyword">extern</span> <span class="keywordtype">int</span> ifd_spawn_handler(<span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>);
<a name="l00119"></a>00119 <span class="keyword">extern</span> <span class="keywordtype">int</span> ifd_scan_usb(<span class="keywordtype">void</span>);
<a name="l00120"></a>00120
<a name="l00121"></a>00121 <span class="keyword">extern</span> <span class="keywordtype">int</span> ifd_activate(<a class="code" href="structifd__reader.html">ifd_reader_t</a> *);
<a name="l00122"></a>00122 <span class="keyword">extern</span> <span class="keywordtype">int</span> ifd_deactivate(<a class="code" href="structifd__reader.html">ifd_reader_t</a> *);
<a name="l00123"></a>00123 <span class="keyword">extern</span> <span class="keywordtype">int</span> ifd_output(<a class="code" href="structifd__reader.html">ifd_reader_t</a> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *);
<a name="l00124"></a>00124
<a name="l00125"></a>00125 <span class="keyword">extern</span> <span class="keywordtype">int</span> ifd_atr_complete(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *, size_t);
<a name="l00126"></a>00126
<a name="l00127"></a>00127 <span class="keyword">extern</span> <span class="keywordtype">int</span> ifd_set_protocol(<a class="code" href="structifd__reader.html">ifd_reader_t</a> *reader,
<a name="l00128"></a>00128 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> slot,
<a name="l00129"></a>00129 <span class="keywordtype">int</span> <span class="keywordtype">id</span>);
<a name="l00130"></a>00130 <span class="keyword">extern</span> <span class="keywordtype">int</span> ifd_card_command(<a class="code" href="structifd__reader.html">ifd_reader_t</a> *reader,
<a name="l00131"></a>00131 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> slot,
<a name="l00132"></a>00132 <span class="keyword">const</span> <span class="keywordtype">void</span> *sbuf, size_t slen,
<a name="l00133"></a>00133 <span class="keywordtype">void</span> *rbuf, size_t rlen);
<a name="l00134"></a>00134 <span class="keyword">extern</span> <span class="keywordtype">int</span> ifd_card_status(<a class="code" href="structifd__reader.html">ifd_reader_t</a> *reader,
<a name="l00135"></a>00135 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> slot,
<a name="l00136"></a>00136 <span class="keywordtype">int</span> *status);
<a name="l00137"></a>00137 <span class="keyword">extern</span> <span class="keywordtype">int</span> ifd_card_reset(<a class="code" href="structifd__reader.html">ifd_reader_t</a> *reader,
<a name="l00138"></a>00138 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> slot,
<a name="l00139"></a>00139 <span class="keywordtype">void</span> *atr_buf,
<a name="l00140"></a>00140 size_t atr_len);
<a name="l00141"></a>00141 <span class="keyword">extern</span> <span class="keywordtype">int</span> ifd_card_request(<a class="code" href="structifd__reader.html">ifd_reader_t</a> *reader,
<a name="l00142"></a>00142 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> slot,
<a name="l00143"></a>00143 time_t timeout,
<a name="l00144"></a>00144 <span class="keyword">const</span> <span class="keywordtype">char</span> *message,
<a name="l00145"></a>00145 <span class="keywordtype">void</span> *atr_buf,
<a name="l00146"></a>00146 size_t atr_len);
<a name="l00147"></a>00147 <span class="keyword">extern</span> <span class="keywordtype">int</span> ifd_card_eject(<a class="code" href="structifd__reader.html">ifd_reader_t</a> *reader,
<a name="l00148"></a>00148 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> slot,
<a name="l00149"></a>00149 time_t timeout,
<a name="l00150"></a>00150 <span class="keyword">const</span> <span class="keywordtype">char</span> *message);
<a name="l00151"></a>00151 <span class="keyword">extern</span> <span class="keywordtype">int</span> ifd_card_perform_verify(<a class="code" href="structifd__reader.html">ifd_reader_t</a> *reader,
<a name="l00152"></a>00152 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> slot,
<a name="l00153"></a>00153 time_t timeout,
<a name="l00154"></a>00154 <span class="keyword">const</span> <span class="keywordtype">char</span> *message,
<a name="l00155"></a>00155 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *data, size_t data_len,
<a name="l00156"></a>00156 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *resp, size_t resp_len);
<a name="l00157"></a>00157 <span class="keyword">extern</span> <span class="keywordtype">int</span> ifd_card_read_memory(<a class="code" href="structifd__reader.html">ifd_reader_t</a> *,
<a name="l00158"></a>00158 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>,
<a name="l00159"></a>00159 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *, size_t);
<a name="l00160"></a>00160 <span class="keyword">extern</span> <span class="keywordtype">int</span> ifd_card_write_memory(<a class="code" href="structifd__reader.html">ifd_reader_t</a> *,
<a name="l00161"></a>00161 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>,
<a name="l00162"></a>00162 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *, size_t);
<a name="l00163"></a>00163
<a name="l00164"></a>00164 <span class="keyword">extern</span> ifd_protocol_t * ifd_protocol_new(<span class="keywordtype">int</span> <span class="keywordtype">id</span>,
<a name="l00165"></a>00165 <a class="code" href="structifd__reader.html">ifd_reader_t</a> *reader,
<a name="l00166"></a>00166 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dad);
<a name="l00167"></a>00167 <span class="keyword">extern</span> <span class="keywordtype">int</span> ifd_protocol_set_parameter(ifd_protocol_t *p,
<a name="l00168"></a>00168 <span class="keywordtype">int</span> type,
<a name="l00169"></a>00169 <span class="keywordtype">long</span> value);
<a name="l00170"></a>00170 <span class="keyword">extern</span> <span class="keywordtype">int</span> ifd_protocol_get_parameter(ifd_protocol_t *p,
<a name="l00171"></a>00171 <span class="keywordtype">int</span> type,
<a name="l00172"></a>00172 <span class="keywordtype">long</span> *value);
<a name="l00173"></a>00173 <span class="keyword">extern</span> <span class="keywordtype">int</span> ifd_protocol_read_memory(ifd_protocol_t *,
<a name="l00174"></a>00174 <span class="keywordtype">int</span>, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>,
<a name="l00175"></a>00175 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *, size_t);
<a name="l00176"></a>00176 <span class="keyword">extern</span> <span class="keywordtype">int</span> ifd_protocol_write_memory(ifd_protocol_t *,
<a name="l00177"></a>00177 <span class="keywordtype">int</span>, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>,
<a name="l00178"></a>00178 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *, size_t);
<a name="l00179"></a>00179 <span class="keyword">extern</span> <span class="keywordtype">void</span> ifd_protocol_free(ifd_protocol_t *);
<a name="l00180"></a>00180
<a name="l00181"></a>00181 <span class="comment">/* Debugging macro */</span>
<a name="l00182"></a>00182 <span class="preprocessor">#ifdef __GNUC__</span>
<a name="l00183"></a>00183 <span class="preprocessor"></span><span class="preprocessor">#define ifd_debug(level, fmt, args...) \</span>
<a name="l00184"></a>00184 <span class="preprocessor"> do { \</span>
<a name="l00185"></a>00185 <span class="preprocessor"> if ((level) <= ct_config.debug) \</span>
<a name="l00186"></a>00186 <span class="preprocessor"> ct_debug("%s: " fmt, __FUNCTION__ , ##args); \</span>
<a name="l00187"></a>00187 <span class="preprocessor"> } while (0)</span>
<a name="l00188"></a>00188 <span class="preprocessor"></span><span class="preprocessor">#else</span>
<a name="l00189"></a>00189 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">void</span> ifd_debug(<span class="keywordtype">int</span> level, <span class="keyword">const</span> <span class="keywordtype">char</span> *fmt, ...);
<a name="l00190"></a>00190 <span class="preprocessor">#endif</span>
<a name="l00191"></a>00191 <span class="preprocessor"></span>
<a name="l00192"></a>00192 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00193"></a>00193 <span class="preprocessor"></span>}
<a name="l00194"></a>00194 <span class="preprocessor">#endif</span>
<a name="l00195"></a>00195 <span class="preprocessor"></span>
<a name="l00196"></a>00196 <span class="preprocessor">#endif </span><span class="comment">/* OPENCT_IFD_H */</span>
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Thu Aug 30 20:21:19 2007 for OpenCT by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address>
</body>
</html>
|