[Pcsclite-cvs-commit] r2358 - trunk/Drivers/ccid/src
Ludovic Rousseau
rousseau at alioth.debian.org
Sat Jan 27 14:28:27 CET 2007
Author: rousseau
Date: 2007-01-27 14:28:26 +0100 (Sat, 27 Jan 2007)
New Revision: 2358
Modified:
trunk/Drivers/ccid/src/commands.c
Log:
T0ProcACK(): use a hack to circumvent the Oz776 firmware bug with
commands of size modulo 64
Modified: trunk/Drivers/ccid/src/commands.c
===================================================================
--- trunk/Drivers/ccid/src/commands.c 2007-01-26 16:57:45 UTC (rev 2357)
+++ trunk/Drivers/ccid/src/commands.c 2007-01-27 13:28:26 UTC (rev 2358)
@@ -1202,15 +1202,42 @@
memset(tmp_buf, 0, sizeof(tmp_buf));
- ret_len = remain_len;
- return_value = CCID_Transmit(reader_index, 0, *snd_buf, ret_len, 0);
- if (return_value != IFD_SUCCESS)
- return return_value;
+#ifdef O2MICRO_OZ776_PATCH
+ if((0 != remain_len) && (0 == (remain_len + 10) % 64))
+ {
+ /* special hack to avoid a command of size modulo 64
+ * we send two commands instead */
+ ret_len = 1;
+ return_value = CCID_Transmit(reader_index, 0, *snd_buf, ret_len, 0);
+ if (return_value != IFD_SUCCESS)
+ return return_value;
+ return_value = CCID_Receive(reader_index, &ret_len, tmp_buf, NULL);
+ if (return_value != IFD_SUCCESS)
+ return return_value;
- return_value = CCID_Receive(reader_index, &ret_len, tmp_buf, NULL);
- if (return_value != IFD_SUCCESS)
- return return_value;
+ ret_len = remain_len - 1;
+ return_value = CCID_Transmit(reader_index, 0, *snd_buf, ret_len, 0);
+ if (return_value != IFD_SUCCESS)
+ return return_value;
+ return_value = CCID_Receive(reader_index, &ret_len, &tmp_buf[1],
+ NULL);
+ if (return_value != IFD_SUCCESS)
+ return return_value;
+ ret_len += 1;
+ }
+ else
+#endif
+ {
+ ret_len = remain_len;
+ return_value = CCID_Transmit(reader_index, 0, *snd_buf, ret_len, 0);
+ if (return_value != IFD_SUCCESS)
+ return return_value;
+
+ return_value = CCID_Receive(reader_index, &ret_len, tmp_buf, NULL);
+ if (return_value != IFD_SUCCESS)
+ return return_value;
+ }
memcpy(*rcv_buf, tmp_buf, remain_len);
*rcv_buf += remain_len, *rcv_len += remain_len;
More information about the Pcsclite-cvs-commit
mailing list