Hi,
The patch I sent in the previous message is for the PertoSmart/ACR-1030
driver. Sorry for the typo.
The included patch adds debug messages filtering to the PertoSmart/ACR
AC-1038 driver and fixes a bug for ps_get_status() not returning
correctly the flag IFD_CARD_STATUS_CHANGED.
Regards,
Carlos Henrique Bauer
--- ifd-pertosmart1038.c.orig 2006-04-16 22:49:12.000000000 -0300
+++ ifd-pertosmart1038.c 2006-04-16 22:49:42.000000000 -0300
@@ -229,7 +229,8 @@
{
ps_device_data_t *device_data;
- ct_debug("ps_if_transmission_start: called");
+ if (ct_config.debug >= 1)
+ ct_debug("ps_if_transmission_start: called");
device_data = (ps_device_data_t *) dev->user_data;
@@ -255,15 +256,19 @@
int rc;
ps_device_data_t *device_data;
- ct_debug("ps_if_transmission_send: called");
+ if (ct_config.debug >= 1)
+ ct_debug("ps_if_transmission_send: called");
+ if (ct_config.debug >= 4)
+ ct_debug("ps_if_transmission_send: sending %u bytes: %s",
+ slen, ct_hexdump(sbuf, slen));
device_data = (ps_device_data_t *) dev->user_data;
if (device_data->if_state != WAITING_TO_SEND &&
device_data->if_state != SENDING) {
- ct_error
- ("ps_if_transmission_send: invalid transmission state %i.",
- device_data->if_state);
+ ct_error("ps_if_transmission_send: "
+ "invalid transmission state %i.",
+ device_data->if_state);
rc = IFD_ERROR_GENERIC;
goto out;
}
@@ -280,9 +285,9 @@
if (rc >= IFD_SUCCESS) {
/* if_device_send didn't reported an error,
but didn't transmitted a full packet to the reader */
- ct_debug("ps_if_transmission_send: unexpected "
- "result from ifd_device_send: %i", rc);
-
+ if (ct_config.debug >= 1)
+ ct_debug("ps_if_transmission_send: unexpected "
+ "result from ifd_device_send: %i", rc);
rc = IFD_ERROR_COMM_ERROR;
}
goto out;
@@ -293,9 +298,6 @@
if (rc < 0) {
device_data->if_state = ERROR;
ct_error("ps_if_transmission_send: failed: %i", rc);
- } else {
- ct_debug("ps_if_transmission_send: sent %u bytes: %s",
- slen, ct_hexdump(sbuf, slen));
}
return rc;
@@ -314,15 +316,16 @@
size_t chunk_len = 0;
size_t rbuf_offset = 0;
- ct_debug("ps_if_transmission_receive: called");
+ if (ct_config.debug >= 1)
+ ct_debug("ps_if_transmission_receive: called");
device_data = (ps_device_data_t *) dev->user_data;
if (device_data->if_state != SENDING
&& device_data->if_state != RECEIVING) {
- ct_error ("ps_if_transmission_receive: "
- "invalid transmission state %i.",
- device_data->if_state);
+ ct_error("ps_if_transmission_receive: "
+ "invalid transmission state %i.",
+ device_data->if_state);
rc = IFD_ERROR_GENERIC;
goto out;
}
@@ -343,10 +346,10 @@
rc = ifd_device_recv(dev, chunk_start, chunk_len,
timeout);
- if (IFD_SUCCESS > rc) {
- ct_debug
- ("ps_if_transmission_receive: error: %i",
- rc);
+ if (rc < IFD_SUCCESS) {
+ if(ct_config.debug >= 1)
+ ct_debug("ps_if_transmission_receive:
error: %i",
+ rc);
goto out;
}
@@ -366,8 +369,9 @@
device_data->if_state = ERROR;
ct_error("ps_if_transmission_receive: failed: %i", rc);
} else {
- ct_debug("ps_if_transmission_receive: received %u bytes:%s", rc,
- ct_hexdump(rbuf, rc));
+ if (ct_config.debug >= 4)
+ ct_debug("ps_if_transmission_receive: received %u
bytes:%s",
+ rc, ct_hexdump(rbuf, rc));
}
return rc;
@@ -386,7 +390,8 @@
const size_t buffer_len = sizeof(buffer);
const long timeout = 100;
- ct_debug("ps_if_transmission_flush_reader_output_buffer: called");
+ if (ct_config.debug >= 1)
+ ct_debug("ps_if_transmission_flush_reader_output_buffer:
called");
device_data = (ps_device_data_t *) dev->user_data;
@@ -407,7 +412,8 @@
{
ps_device_data_t *device_data;
- ct_debug("ps_if_transmission_end: called");
+ if (ct_config.debug >= 1)
+ ct_debug("ps_if_transmission_end: called");
device_data = (ps_device_data_t *) dev->user_data;
@@ -437,6 +443,12 @@
size_t command_size = PS_COMMAND_HEADER_SIZE + slen;
+ if (ct_config.debug >= 1)
+ ct_debug("ps_send_to_ifd: called");
+ if (ct_config.debug >= 3)
+ ct_debug("ps_send_to_ifd: sending %u bytes:%s", rc,
+ ct_hexdump(sbuf, slen));
+
/* needs padding? */
if (command_size % PS_BULK_SEND_PACKET_SIZE) {
/* calculate padding */
@@ -444,15 +456,13 @@
(1 + (command_size / PS_BULK_SEND_PACKET_SIZE));
}
- ct_debug("ps_send_to_ifd: called");
-
dev = reader->device;
device_data = (ps_device_data_t *) dev->user_data;
if (PS_MAX_SEND_LEN < slen) {
- ct_error
- ("ps_apdu_send: transmission is larger than maximum
allowed: %i",
- slen);
+ ct_error("ps_apdu_send: transmission is "
+ "larger than maximum allowed: %i",
+ slen);
goto out;
}
@@ -515,8 +525,9 @@
device_data->if_state = ERROR;
ct_error("ps_send_to_ifd: failed: %i", rc);
} else {
- ct_debug("ps_send_to_ifd: sent %u bytes:%s", slen,
- ct_hexdump(sbuf, slen));
+ if (ct_config.debug >= 4)
+ ct_debug("ps_send_to_ifd: sent %u bytes:%s",
+ slen, ct_hexdump(sbuf, slen));
}
return rc;
@@ -543,7 +554,8 @@
const size_t buffer_len = sizeof(buffer);
- ct_debug("ps_receive_from_ifd: called");
+ if (ct_config.debug >= 1)
+ ct_debug("ps_receive_from_ifd: called");
dev = reader->device;
device_data = (ps_device_data_t *) dev->user_data;
@@ -578,8 +590,9 @@
status = buffer[PS_STATUS_IDX];
- ct_debug("ps_receive_from_ifd: status = %#02x, %s\n",
- status, ps_get_status_string(status));
+ if (ct_config.debug >= 1)
+ ct_debug("ps_receive_from_ifd: status = %#02x, %s\n",
+ status, ps_get_status_string(status));
switch (status) {
@@ -646,8 +659,10 @@
device_data->if_state = ERROR;
ct_error("ps_receive_from_ifd: failed: %i", rc);
} else {
- ct_debug("ps_if_transmission_receive: received %u bytes:%s", rc,
- ct_hexdump(rbuf, rc));
+ if (ct_config.debug >= 3)
+ ct_debug("ps_if_transmission_receive: "
+ "received %u bytes:%s", rc,
+ ct_hexdump(rbuf, rc));
}
return rc;
@@ -664,8 +679,9 @@
{
int rc = IFD_SUCCESS;
ifd_device_t *dev = NULL;
-
- ct_debug("ps_transceive_instruction: called");
+
+ if (ct_config.debug >= 1)
+ ct_debug("ps_transceive_instruction: called");
dev = reader->device;
@@ -697,7 +713,8 @@
*/
static int ps_activate(ifd_reader_t * reader)
{
- ct_debug("ps_activate: called");
+ if (ct_config.debug >= 1)
+ ct_debug("ps_activate: called");
return IFD_SUCCESS;
}
@@ -708,7 +725,8 @@
{
int rc;
- ct_debug("ps_deactivate: called");
+ if (ct_config.debug >= 1)
+ ct_debug("ps_deactivate: called");
rc = ps_transceive_instruction(reader, PS_POWER_OFF, NULL, 0, NULL, 0);
@@ -728,7 +746,8 @@
unsigned char buffer[16];
unsigned char *p;
- ct_debug("ps_get_stat: called");
+ if (ct_config.debug >= 1)
+ ct_debug("ps_get_stat: called");
rc = ps_transceive_instruction(reader, PS_GET_ACR_STAT,
NULL, 0, buffer, sizeof(buffer));
@@ -770,7 +789,8 @@
ps_card_status_t card_status;
int status_tmp = 0;
- ct_debug("ps_card_status: called");
+ if (ct_config.debug >= 1)
+ ct_debug("ps_card_status: called");
if (slot != 0) {
ct_error("ps_card_status: bad slot index %u", slot);
@@ -833,17 +853,13 @@
}
if (inserted) {
- device_data->card_status = PS_CARD_INSERTED;
-
- if (PS_CARD_INSERTED !=
- device_data->card_status) {
+ if (device_data->card_status !=
PS_CARD_INSERTED) {
+ device_data->card_status =
PS_CARD_INSERTED;
status_tmp = IFD_CARD_STATUS_CHANGED;
}
} else {
- device_data->card_status = PS_CARD_NOT_INSERTED;
-
- if (PS_CARD_INSERTED ==
- device_data->card_status) {
+ if (device_data->card_status !=
PS_CARD_NOT_INSERTED) {
+ device_data->card_status =
PS_CARD_NOT_INSERTED;
status_tmp = IFD_CARD_STATUS_CHANGED;
}
}
@@ -851,7 +867,8 @@
}
if (rc < 0) {
- ct_debug("ps_card_status: failed: %i", rc);
+ if (ct_config.debug >= 1)
+ ct_debug("ps_card_status: failed: %i", rc);
} else {
if (device_data->card_status == PS_CARD_INSERTED) {
status_tmp |= IFD_CARD_PRESENT;
@@ -877,7 +894,8 @@
ifd_slot_t *slot;
ifd_atr_info_t atr_info;
- ct_debug("ps_card_reset_select_protocol: called");
+ if (ct_config.debug >= 1)
+ ct_debug("ps_card_reset_select_protocol: called");
if (nslot != 0) {
ct_error("ps_card_reset_select_protocol: bad slot index %u",
@@ -895,20 +913,23 @@
switch (new_icc_proto) {
case IFD_PROTOCOL_DEFAULT:
- ct_debug("ps_card_reset_select_protocol: "
- "using automatic protocol selection");
+ if (ct_config.debug >= 1)
+ ct_debug("ps_card_reset_select_protocol: "
+ "using automatic protocol selection");
sbuf[0] = PS_AUTO_T0_OR_T1_CARD_TYPE;
break;
case IFD_PROTOCOL_T0:
- ct_debug
- ("ps_card_reset_select_protocol: selecting protocol
T0");
+ if (ct_config.debug >= 1)
+ ct_debug("ps_card_reset_select_protocol: "
+ "selecting protocol T0");
sbuf[0] = PS_T0_CARD_TYPE;
break;
case IFD_PROTOCOL_T1:
- ct_debug
- ("ps_card_reset_select_protocol: selecting protocol
T1");
+ if (ct_config.debug >= 1)
+ ct_debug("ps_card_reset_select_protocol: "
+ "selecting protocol T1");
sbuf[0] = PS_T1_CARD_TYPE;
break;
@@ -924,9 +945,8 @@
NULL, 0);
if (IFD_SUCCESS != rc) {
- ct_error
- ("ps_card_reset_select_protocol: failed
(PS_POWER_OF): %i",
- rc);
+ ct_error("ps_card_reset_select_protocol: "
+ "failed (PS_POWER_OF): %i", rc);
return rc;
}
@@ -934,9 +954,8 @@
sbuf, sizeof(sbuf), NULL, 0);
if (IFD_SUCCESS != rc) {
- ct_error
- ("ps_card_reset_select_protocol: error selecting
card type %#02x",
- sbuf[0]);
+ ct_error("ps_card_reset_select_protocol: "
+ "error selecting card type %#02x", sbuf[0]);
return rc;
}
}
@@ -970,9 +989,10 @@
if (-1 != atr_info.TA[1]) {
/* specific mode */
- ct_debug
- ("ps_card_reset_select_protocol: card in specific mode
%#02x",
- atr_info.TA[1] & 0x0f);
+ if (ct_config.debug >= 1)
+ ct_debug("ps_card_reset_select_protocol: "
+ "card in specific mode %#02x",
+ atr_info.TA[1] & 0x0f);
new_icc_proto = atr_info.TA[1] & 0x0f;
} else if (IFD_PROTOCOL_DEFAULT == new_icc_proto) {
new_icc_proto = atr_info.default_protocol;
@@ -991,8 +1011,8 @@
ifd_protocol_new(new_icc_proto, reader, slot->dad);
if (slot->proto == NULL) {
- ct_error
- ("ps_cart_reset_select_protocol: ifd_protocol_new");
+ ct_error("ps_cart_reset_select_protocol: "
+ "ifd_protocol_new");
return IFD_ERROR_GENERIC;
}
@@ -1001,16 +1021,18 @@
switch (new_icc_proto) {
case IFD_PROTOCOL_T0:
- ct_debug
- ("ps_card_reset_select_protocol: using protocol
T0");
+ if (ct_config.debug >= 1)
+ ct_debug("ps_card_reset_select_protocol: "
+ "using protocol T0");
ifd_protocol_set_parameter(slot->proto,
IFD_PROTOCOL_BLOCK_ORIENTED,
1);
break;
case IFD_PROTOCOL_T1:
- ct_debug
- ("ps_card_reset_select_protocol: using protocol
T1");
+ if (ct_config.debug >= 1)
+ ct_debug("ps_card_reset_select_protocol: "
+ "using protocol T1");
ifd_protocol_set_parameter(slot->proto,
IFD_PROTOCOL_BLOCK_ORIENTED,
1);
@@ -1025,9 +1047,9 @@
break;
default:
- ct_error
- ("ps_card_reset_select_protocol: protocol not
supported %#02x",
- atr_info.default_protocol);
+ ct_error("ps_card_reset_select_protocol: "
+ "protocol not supported %#02x",
+ atr_info.default_protocol);
return IFD_ERROR_NOT_SUPPORTED;
}
@@ -1047,7 +1069,8 @@
ifd_device_t *dev;
ps_device_data_t *device_data;
- ct_debug("ps_card_reset: called");
+ if (ct_config.debug >= 1)
+ ct_debug("ps_card_reset: called");
dev = reader->device;
device_data = (ps_device_data_t *) dev->user_data;
@@ -1067,7 +1090,8 @@
ps_device_data_t *device_data;
ifd_slot_t *slot;
- ct_debug("ps_set_protocol: called");
+ if (ct_config.debug >= 1)
+ ct_debug("ps_set_protocol: called");
dev = reader->device;
device_data = (ps_device_data_t *) dev->user_data;
@@ -1108,7 +1132,11 @@
ps_device_data_t *device_data;
ps_instruction_t instruction;
- ct_debug("ps_apdu_send: sending %i: %s", slen, ct_hexdump(sbuf, slen));
+ if (ct_config.debug >= 1)
+ ct_debug("ps_apdu_send: called");
+ if (ct_config.debug >= 3)
+ ct_debug("ps_apdu_send: sending %i: %s",
+ slen, ct_hexdump(sbuf, slen));
dev = reader->device;
device_data = (ps_device_data_t *) dev->user_data;
@@ -1117,15 +1145,17 @@
case IFD_PROTOCOL_T0:
- ct_debug("ps_apdu_send: using EXCHANGE_TPDU_T0");
+ if (ct_config.debug >= 1)
+ ct_debug("ps_apdu_send: using EXCHANGE_TPDU_T0");
instruction = PS_EXCHANGE_TPDU_T0;
break;
case IFD_PROTOCOL_T1:
-
- ct_debug("ps_apdu_send: using EXCHANGE_TPDU_T1");
+
+ if (ct_config.debug >= 1)
+ ct_debug("ps_apdu_send: using EXCHANGE_TPDU_T1");
instruction = PS_EXCHANGE_TPDU_T1;
@@ -1133,7 +1163,8 @@
default:
- ct_debug("ps_apdu_send: unknow protocol");
+ if (ct_config.debug >= 1)
+ ct_debug("ps_apdu_send: unknow protocol");
return IFD_ERROR_GENERIC;
}
@@ -1164,7 +1195,8 @@
ifd_device_t *dev = NULL;
ps_device_data_t *dev_data = NULL;
- ct_debug("ps_apdu_recv: called");
+ if (ct_config.debug >= 1)
+ ct_debug("ps_apdu_recv: called");
dev = reader->device;
dev_data = (ps_device_data_t *) dev->user_data;
@@ -1174,8 +1206,9 @@
if (rc < 0) {
ct_error("ps_apdu_recv: failed");
} else {
- ct_debug("ps_apdu_recv: received %i bytes: %s", rc,
- ct_hexdump(buffer, rc));
+ if (ct_config.debug >= 3)
+ ct_debug("ps_apdu_recv: received %i bytes: %s",
+ rc, ct_hexdump(buffer, rc));
}
ps_if_transmission_end(dev);
@@ -1195,7 +1228,8 @@
unsigned char sbuf[1];
- ct_debug("ps_open: called: device name =%s", device_name);
+ if (ct_config.debug >= 1)
+ ct_debug("ps_open: called: device name =%s", device_name);
dev = ifd_device_open(device_name);
@@ -1285,7 +1319,8 @@
ifd_device_t *dev;
ps_device_data_t *device_data;
- ct_debug("ps_open: called");
+ if (ct_config.debug >= 1)
+ ct_debug("ps_close: called");
dev = reader->device;
device_data = (ps_device_data_t *) dev->user_data;
_______________________________________________
opensc-devel mailing list
[email protected]
http://www.opensc-project.org/mailman/listinfo/opensc-devel