129
143
initialzied and is ready for
130
144
operations. The following variables
131
145
are then valid. */
132
static unsigned long pcsc_context; /* The current PC/CS context. */
146
static long pcsc_context; /* The current PC/CS context. */
133
147
static char *current_rdrname;
134
static unsigned long pcsc_card;
135
static unsigned long pcsc_protocol;
148
static long pcsc_card;
149
static pcsc_dword_t pcsc_protocol;
136
150
static unsigned char current_atr[33];
137
151
static size_t current_atrlen;
139
long (* pcsc_establish_context) (unsigned long scope,
153
long (* pcsc_establish_context) (pcsc_dword_t scope,
140
154
const void *reserved1,
141
155
const void *reserved2,
142
unsigned long *r_context);
143
long (* pcsc_release_context) (unsigned long context);
144
long (* pcsc_list_readers) (unsigned long context,
157
long (* pcsc_release_context) (long context);
158
long (* pcsc_list_readers) (long context,
145
159
const char *groups,
146
char *readers, unsigned long*readerslen);
147
long (* pcsc_get_status_change) (unsigned long context,
148
unsigned long timeout,
160
char *readers, pcsc_dword_t *readerslen);
161
long (* pcsc_get_status_change) (long context,
162
pcsc_dword_t timeout,
149
163
pcsc_readerstate_t readerstates,
150
unsigned long nreaderstates);
151
long (* pcsc_connect) (unsigned long context,
164
pcsc_dword_t nreaderstates);
165
long (* pcsc_connect) (long context,
152
166
const char *reader,
153
unsigned long share_mode,
154
unsigned long preferred_protocols,
155
unsigned long *r_card,
156
unsigned long *r_active_protocol);
157
long (* pcsc_reconnect) (unsigned long card,
158
unsigned long share_mode,
159
unsigned long preferred_protocols,
160
unsigned long initialization,
161
unsigned long *r_active_protocol);
162
long (* pcsc_disconnect) (unsigned long card,
163
unsigned long disposition);
164
long (* pcsc_status) (unsigned long card,
165
char *reader, unsigned long *readerlen,
166
unsigned long *r_state,
167
unsigned long *r_protocol,
168
unsigned char *atr, unsigned long *atrlen);
169
long (* pcsc_begin_transaction) (unsigned long card);
170
long (* pcsc_end_transaction) (unsigned long card,
171
unsigned long disposition);
172
long (* pcsc_transmit) (unsigned long card,
167
pcsc_dword_t share_mode,
168
pcsc_dword_t preferred_protocols,
170
pcsc_dword_t *r_active_protocol);
171
long (* pcsc_reconnect) (long card,
172
pcsc_dword_t share_mode,
173
pcsc_dword_t preferred_protocols,
174
pcsc_dword_t initialization,
175
pcsc_dword_t *r_active_protocol);
176
long (* pcsc_disconnect) (long card,
177
pcsc_dword_t disposition);
178
long (* pcsc_status) (long card,
179
char *reader, pcsc_dword_t *readerlen,
180
pcsc_dword_t *r_state,
181
pcsc_dword_t *r_protocol,
182
unsigned char *atr, pcsc_dword_t *atrlen);
183
long (* pcsc_begin_transaction) (long card);
184
long (* pcsc_end_transaction) (long card,
185
pcsc_dword_t disposition);
186
long (* pcsc_transmit) (long card,
173
187
const pcsc_io_request_t send_pci,
174
188
const unsigned char *send_buffer,
175
unsigned long send_len,
189
pcsc_dword_t send_len,
176
190
pcsc_io_request_t recv_pci,
177
191
unsigned char *recv_buffer,
178
unsigned long *recv_len);
179
long (* pcsc_set_timeout) (unsigned long context,
180
unsigned long timeout);
192
pcsc_dword_t *recv_len);
193
long (* pcsc_set_timeout) (long context,
194
pcsc_dword_t timeout);
195
long (* pcsc_control) (long card,
196
pcsc_dword_t control_code,
197
const void *send_buffer,
198
pcsc_dword_t send_len,
200
pcsc_dword_t recv_len,
201
pcsc_dword_t *bytes_returned);
749
/* Handle a control request. The argument is expected to be a buffer
750
which contains CONTROL_CODE (4-byte) and INPUT_BYTES.
753
handle_control (unsigned char *argbuf, size_t arglen)
756
pcsc_dword_t ioctl_code;
757
pcsc_dword_t recv_len = 1024;
758
unsigned char buffer[1024];
761
bad_request ("CONTROL");
763
ioctl_code = (argbuf[0] << 24) | (argbuf[1] << 16) | (argbuf[2] << 8) | argbuf[3];
767
recv_len = sizeof (buffer);
768
err = pcsc_control (pcsc_card, ioctl_code, argbuf, arglen,
769
buffer, recv_len, &recv_len);
773
fprintf (stderr, PGM": pcsc_control failed: %s (0x%lx)\n",
774
pcsc_error_string (err), err);
775
request_failed (err);
778
request_succeeded (buffer, recv_len);
725
783
print_version (int with_help)