2005-11-27  rousseau

	* README: release 0.9.4
	* readers/MySmartPad.txt: new file for MySMART
	  PAD V2.0
	* README: add Cherry SmartTerminal ST2XXX
	* readers/Makefile.am: add 3 missing reader
	  descriptions

2005-11-24  rousseau

	* configure.in: we need pcsc-lite 1.2.9-beta9
	  or greater
	* src/ifdhandler.c: IFDHGetCapabilities(): use
	  info instead of comm debug level to print the number of slots
	  supported by the reader
	* examples/scardcontrol.c: update copyright date
	* examples/scardcontrol.c: in Modify PIN
	  command we need to read 3 lines from the keyboard (old, new and
	  confirm PINs)
	* examples/scardcontrol.c: use a buffer of 40
	  instead of 10 to reader the keyboard since the PIN may be longer
	  than 8 digits
	* src/commands.c:
	  SecurePINVerify()/SecurePINModify(): set the response length to
	  0 in case of (write) communication error
	* src/commands.c: SecurePINModify(): set the
	  response length to 0 in case of error in the command format
	* src/ifdhandler.c: IFDHControl(): use
	  sizeof(PCSC_TLV_STRUCTURE) instead of 6
	* examples/scardcontrol.c: my check if the
	  applet is present was wrong
	* examples/scardcontrol.c: exit if the test
	  applet is not found
	* configure.in: do not duplicate the definition
	  of PCSCLITE_HP_DROPDIR in --enable-ccidtwindir since it is
	  already defined in --enable-usbdropdir This prevented the
	  successful execution of ./configure when -pedantic-errors is used
	* src/openct/proto-t1.c: t1_xcv(): correct the
	  comment about &rmax
	* src/openct/proto-t1.c: t1_xcv(): the second
	  argument of CCID_Receive() is (unsigned int *) so we can't use
	  &rmax since &rmax is a (size_t *) and may not be the same on
	  64-bits architectures for example (iMac G5) */
	* configure.in,
	  src/Makefile.am: tokenparser.l is only needed
	  when pcscd is not used (Solaris). It is not needed on Mac OS X
	  since LTPBundleFindValueWithKey() is provided by pcscd
	* configure.in: use libusb-config(1) to get, if
	  possible, correct values for LIBUSB_CFLAGS and LIBUSB_LIBS
	* configure.in: replace dnl by #
	* configure.in,
	  src/Makefile.am: use
	  LIBUSB_CFLAGS/LIBUSB_LIBS instead of LDFLAGS/CPPFLAGS for libusb
	  configuration

2005-11-22  rousseau

	* README: add the "SCM Micro SCR 3310-NTTCOM"
	  in the "Should work but untested by me" list. See
	  http://archives.neohapsis.com/archives/dev/muscle/2005-q4/0217.html
	* readers/supported_readers.txt: add SCM SCR
	  3310 NTTCom. See
	  http://archives.neohapsis.com/archives/dev/muscle/2005-q4/0217.html

2005-11-16  rousseau

	* examples/scardcontrol.c: Modify PIN: use a 4
	  digit PIN so we can test it using the test Java Card applet
	* examples/scardcontrol.c: Modify PIN:
	  bInsertionOffsetOld and bInsertionOffsetNew starts from the APDU
	  data (5th byte) and not the APDU start (first byte)
	* examples/scardcontrol.c: add a modify PIN
	  dump command
	* examples/scardcontrol.c: Modify PIN: add a
	  comment for bNumberMessage
	* examples/scardcontrol.c: Modify PIN: use 0x03
	  for bNumberMessage since the GemPC Pinpad rejects any other
	  valu. The SPR 532 needs 0 here
	* examples/scardcontrol.c: verify PIN: use 0x01
	  for bNumberMessage for the GemPC Pinpad
	* examples/scardcontrol.c: verify PIN: use 0x02
	  (validation key pressed) for bEntryValidationCondition as the
	  GemPC Pinpad rejects any other values

2005-11-15  rousseau

	* Makefile.am: use svn2cl.sh instead of rcs2log
	  since we migrated to subversion
	* src/commands.c: SecurePINModify(): set the
	  readTimeout to at least 30 seconds since we are not waiting
	  after an APDU but after a human (after the reader in fact).

2005-11-07  rousseau

	* src/ccid_serial.c,
	  src/ccid_usb.c: remove #ifdef
	  DEBUG_LEVEL_COMM since DEBUG_LEVEL_COMM is a numeric value and
	  not a compilation flag anymore. Debug is always active and
	  filtered by pcscd.
	* src/Info.plist,
	  src/debug.h: exchange COMM and PERIODIC debug
	  values so that all except PERIODIC value is 7

2005-10-30  rousseau

	* src/commands.c: SecurePINModify(): correct
	  management of bMsgIndex2 and bMsgIndex3
	* src/commands.c: SecurePINModify(): do not
	  copy the ulDataLength field to the CCID frame
	* src/ccid.h: #define CHERRYST2000

2005-10-19  rousseau

	* readers/SPR532.txt: firmware 5.07
	* examples/scardcontrol.c: declare offset,
	  pin_verify and pin_modify variable only if needed

2005-09-27  rousseau

	* src/commands.c: CCID_Transmit(): cmd[8-9] is
	  the expected length in character mode only. It shall be 0x0000
	  for TPDU and short APDU modes.

2005-09-26  rousseau

	* examples/scardcontrol.c: use the new
	  HandlerTest applet commands
	* src/commands.c: SecurePINVerify(): set the
	  readTimeout to at least 30 seconds since we are not waiting
	  after an APDU but after a human.
	* src/ccid.h: _ccid_descriptor.readTimeout is
	  in seconds even for USB. The comment was wrong

2005-09-20  rousseau

	* src/commands.c: SecurePINVerify(): update the
	  size of ulDataLength field as defined in PCSCv2 part 10,
	  revision 2.01.04, september 2005
	* examples/scardcontrol.c: use
	  HOST_TO_CCID_16/HOST_TO_CCID_32

2005-09-05  rousseau

	* src/ccid_usb.c: get_data_rates(): check the
	  response size only if bNumDataRatesSupported is non zero
	* src/parse.c: if bNumDataRatesSupported is 0
	  we get the list size from what GET DATA RATES command returns
	  idem for bNumClockSupported
	* src/parse.c: do not request data rates if the
	  reader reports it support a 0 length list. Idem for clocks.
	* src/parse.c: print bNumClockSupported: as %d
	  and not 0x%02X

2005-09-01  rousseau

	* examples/scardcontrol.c: also work with T=1
	  cards
	* examples/scardcontrol.c: debug modify PIN
	  test code
	* readers/supported_readers.txt: add Cherry
	  ST1044U
	* readers/CherrySmartTerminalST2XXX.txt,
	  readers/supported_readers.txt: add Cherry
	  SmartTerminal ST-2XXX
	* examples/scardcontrol.c: add sample code to
	  perform FEATURE_VERIFY_PIN_DIRECT and FEATURE_MODIFY_PIN_DIRECT
	  if the reader supports it
	* src/ccid_ifdhandler.h,
	  src/commands.c,
	  src/commands.h,
	  src/ifdhandler.c: add support of PC/SC v2
	  part 10 CM_IOCTL_GET_FEATURE_REQUEST add support of
	  FEATURE_VERIFY_PIN_DIRECT and FEATURE_MODIFY_PIN_DIRECT remove
	  support of IOCTL_SMARTCARD_VENDOR_VERIFY_PIN (now obsoleted)

2005-08-25  rousseau

	* README: add Cherry ST-1044U in the supported
	  list
	* readers/CherryST1044U.txt: new file

2005-08-21  rousseau

	* README: move the "Cherry XX44 keyboard" from
	  "should work" to "supported" list

2005-08-16  rousseau

	* .cvsignore,
	  aclocal/.cvsignore,
	  build/.cvsignore,
	  examples/.cvsignore,
	  readers/.cvsignore,
	  src/.cvsignore,
	  src/towitoko/.cvsignore,
	  trunk/PCSC/.cvsignore, trunk/PCSC/doc/.cvsignore,
	  trunk/PCSC/doc/example/.cvsignore, trunk/PCSC/etc/.cvsignore,
	  trunk/PCSC/libmusclecard/.cvsignore,
	  trunk/PCSC/libmusclecard/doc/.cvsignore,
	  trunk/PCSC/libmusclecard/src/.cvsignore,
	  trunk/PCSC/libmusclecard/utils/.cvsignore,
	  trunk/PCSC/libmusclecard/utils/bundleTool/.cvsignore,
	  trunk/PCSC/m4/.cvsignore, trunk/PCSC/src/.cvsignore,
	  trunk/PCSC/src/PCSC/.cvsignore, trunk/PCSC/src/utils/.cvsignore,
	  trunk/PCSC/win32/.cvsignore: removed since we use SVN and not
	  CVS anymore Thanks to Martin Paljak for the idea

2005-08-13  rousseau

	* src/Info.plist: document
	  DRIVER_OPTION_RESET_ON_CLOSE
	* src/ccid_usb.c: CloseUSB(): call usb_reset()
	  only if DRIVER_OPTION_RESET_ON_CLOSE is set. The problem was
	  that a device reset also disconnects the keyboard on a keyboard
	  + reader device.
	* src/ccid_ifdhandler.h: #define
	  DRIVER_OPTION_RESET_ON_CLOSE

2005-08-11  rousseau

	* readers/CherryXX44.txt: update adding clock
	  frequencies and data rates
	* src/parse.c: check that we do not receive
	  more data rates anc clock frequencies than the reader supports
	* src/ccid_usb.c: get_data_rates(): check that
	  we do not get more data rates than the reader supports

2005-08-03  rousseau

	* src/commands.c: CCID_Receive(): log time
	  extension messages at priority COMM instead of CRITICAL. Thanks
	  to Martin Paljak for the patch.

2005-08-02  rousseau

	* src/ccid_usb.c: OpenUSBByName(): call
	  usb_close() if the device can't be used

2005-07-04  rousseau

	* src/ifdhandler.c: IFDHControl(): having a
	  NULL RxBuffer is not an error since it is enough to send the
	  code in dwControlCode Thanks to Martin Paljak for the patch
	* src/ccid_usb.c: OpenUSBByName(): vendorID,
	  productID are unsigned avoids a "comparison between signed and
	  unsigned" warning
	* src/ccid.h: struct _ccid_descriptor:
	  dwMaxDataRate is unsigned avoids a "comparison between signed
	  and unsigned" warning
	* src/ccid.h: struct _ccid_descriptor:
	  dwMaxCCIDMessageLength is unsigned avoids a "comparison between
	  signed and unsigned" warning
	* src/commands.c: CmdPowerOn(): atr_len is
	  unsigned avoids a "comparison between signed and unsigned"
	  warning

2005-06-16  rousseau

	* src/parse.c: parse wLcdLayout
	* src/parse.c: parse bClassEnveloppe
	* src/parse.c: pares bClassGetResponse
	* src/parse.c: parse dwSynchProtocols

2005-06-15  rousseau

	* src/ifdhandler.c: #include <PCSC/reader.h>
	* examples/scardcontrol.c: remove definition of
	  SCARD_CTL_CODE and #include <PCSC/reader.h>
	* src/ccid_ifdhandler.h: remove definition of
	  SCARD_CTL_CODE
	* configure.in: check the availability of
	  reader.h (provided by pcsc-lite 1.2.9-beta8)
	* configure.in: check against pcsc-lite
	  1.2.9-beta8 instead of beta7

2005-06-04  rousseau

	* src/ccid_usb.c: WriteUSB(): do not parse
	  usbDevice[reader_index].dev->bus if it is a NULL pointer (the
	  device has been removed for example)

2005-05-27  rousseau

	* README: Add Eutron SIM Pocket Combo and
	  Eutron CryptoIdentity in the supported list
	* readers/CryptoIdentity.txt,
	  readers/supported_readers.txt: add Eutron
	  CryptoIdentity

2005-05-20  rousseau

	* README: add Verisign Secure Token in the
	  supported list
	* README: add RSA SecureID SID800 in the
	  UNsupported list
	* README: add Verisign Secure Storage Token in
	  the supported list
	* readers/sid800.txt: regenerate using new
	  ./parse

2005-05-05  rousseau

	* readers/Makefile.am,
	  readers/SCR331-DI-NTTCom.txt: add
	  SCR331-DI-NTTCom.txt
	* readers/Makefile.am: rename
	  KAAN_mIDentity.txt in mIDentity.txt
	* readers/ACR38.txt,
	  readers/CardMan3121.txt,
	  readers/GemPCKey.txt,
	  readers/KAAN_Advanced.txt,
	  readers/KAAN_Base.txt,
	  readers/LTC31.txt,
	  readers/Oz776S.txt,
	  readers/SCR331-DI.txt,
	  readers/SCR331.txt,
	  readers/SCR3310.txt,
	  readers/SCR335.txt,
	  readers/SIM_Pocket_Combo.txt,
	  readers/SPR532.txt,
	  readers/mIDentity.txt: regenerate using the
	  latest src/parse program
	* src/ifdhandler.c: do not #include <math.h>
	  since we now use +1 instead of ceil() to round the calculated
	  timeouts to the upper integer - we do not need an mathematical
	  exact value. the {usb,serial}read must just not timeout before
	  the reader firmware timeouts - we avoid a dependency/link on the
	  math library
	* src/ifdhandler.c: T0_card_timeout(): use
	  intermediate variables EGT, BWT, CWT, etu to improve code
	  readability
	* src/ifdhandler.c: T0_card_timeout(): declare
	  EGT, WWT as double instead of int to have some precision We also
	  calculate EGT and WWT in milliseconds instead of seconds

2005-05-04  rousseau

	* README,
	  readers/supported_readers.txt: add SCM Micro
	  SCR 331-DI NTTCom in the "Should work but untested by me" list
	* src/ifdhandler.c: IFDHCreateChannelByName(),
	  T0_card_timeout(), T1_card_timeout(): also include other card
	  parameters (TC1 for T=0, TC1 and CWI for T=1) in the timeout
	  formula
	* README,
	  readers/supported_readers.txt: rename "Kobil
	  KAAN mIDentity" in "Kobil mIDentity"
	* src/ifdhandler.c: IFDHICCPresence(): add
	  support of SCR331-DI NTTCom Thanks to Takuto Matsuu fro the patch
	* src/ccid.h: #define SCR331DINTTCOM 0x04E65120
	* readers/supported_readers.txt: add the
	  manufacturer name in the reader name

2005-05-02  rousseau

	* src/ccid_serial.c: typo in the data rates list
	* src/ifdhandler.c:
	  T0_card_timeout()/T1_card_timeout(): use ceil() to round the
	  timeout
	* src/ccid.c, src/ccid.h:
	  ccid_error(): function is (const char *) instead of (char *) to
	  avoid a "warning: passing arg 4 of `ccid_error' discards
	  qualifiers from pointer target type" using gcc 3.4
	* readers/CherryXX33.txt,
	  readers/DellSCRK.txt,
	  readers/GemPC433_SL.txt,
	  readers/GemPCTwin.txt,
	  readers/KAAN_SIM_III.txt: regenerate using
	  the new parse command
	* src/commands.c: CmdEscape(): replay the
	  command if we receive STATUS_COMM_NAK
	* src/ccid_serial.c: ReadSerial(): if we get a
	  NAK we return STATUS_COMM_NAK to the above layer to replay the
	  command instead of just restarting the read
	* src/defs.h: add STATUS_COMM_NAK
	* src/parse.c: display the clock frequencies
	  supported by the reader
	* src/parse.c: move the display of supported
	  data rates after printing bNumDataRatesSupported info
	* src/ifdhandler.c:
	  IFDHSetProtocolParameters(): check if the baud rate is present
	  in the baud rates list only if the list is present. Otherwise we
	  use the old behavior.
	* src/ccid_usb.c: get_data_rates(): if the
	  reader do not support GET DATA RATES we return NULL instead of a
	  manually constructed/fake list
	* src/ccid_serial.c,
	  src/ccid_usb.c: Open*ByName(): initialise
	  dwMaxDataRate field
	* src/ccid.h: add dwMaxDataRate field (again)
	* src/ccid_usb.c: get_data_rates(): check that
	  the reader sends a DATA RATES list size multiple of 4 othewise
	  it is an error
	* src/parse.c: display the bit value of
	  dwFeatures in the text message
	* src/parse.c: test all the 4 bytes of
	  dwFeatures against 0 and not just the first one
	* src/parse.c: do not display the list returned
	  by GET DATA RATES if the list size is not a multiple of 4 (n % 4
	  != 0)

2005-04-27  rousseau

	* src/ccid_serial.c,
	  src/ccid_usb.c: Open*ByName: do not
	  initialise the now disappeared .dwMaxDataRate field
	* src/ccid.h: _ccid_descriptor: remove the now
	  useless dwMaxDataRate field
	* src/ifdhandler.c:
	  IFDHSetProtocolParameters(): we do not check if (card_baudrate
	  <= ccid_desc->dwMaxDataRate) since find_baud_rate() will tell us
	  if the speed is supported or not by the reader
	* src/ccid_usb.c: get_data_rates(): if the CCID
	  command GET DATA RATES is nto supported the array of supported
	  rates contains only the default and max data rates
	* src/ccid_usb.c: get_data_rates(): test if
	  int_array is NULL (and not buffer)
	* readers/Makefile.am: add the new or missing
	  readers
	* configure.in: version 0.9.4
	* src/ccid_serial.c: OpenSerialByName():
	  inhibit the Plug-n-Play string by setting the RTS signal to low.
	  Mainly useful for the GemPC Card (PCMCIA)
	* readers/Verisign_secure_storage_token.txt:
	  Verisign Secure Storage Token
	* readers/Verisign_secure_token.txt: Verisign
	  Secure Token (without mass memory)
	* readers/supported_readers.txt: add Verisign
	  Secure Token and VeriSign Secure Storage Token
	* src/parse.c: display the supported data rates
	  using the CCID command GET DATA RATES
	* src/ccid_usb.c: get_data_rates(): use the
	  real interface number instead of 0
	* src/ccid_usb.c: get_data_rates(): buffer
	  argument of usb_control_msg is (char *) and not (unsigned char *)
	* src/ccid_usb.c: get_data_rates() returns an
	  unsigned int [] (not just int [])
	* src/ccid_serial.c: SerialDataRates[] is
	  unsigned

2005-04-26  rousseau

	* src/openct/proto-t1.c: t1_xcv(): increase the
	  read timeout if the card sends and WTX request
	* src/ccid_serial.c,
	  src/ccid_usb.c: use the calculated read
	  timeout instead of a fixed value
	* src/ifdhandler.c: calculate and store the
	  read timeout according to the card ATR instead of using a fixed
	  value of 60 seconds
	* src/ifdhandler.c: add T0_card_timeout() and
	  T1_card_timeout()
	* src/defs.h: /* Default communication read
	  timeout in seconds */ #define DEFAULT_COM_READ_TIMEOUT 2
	* src/ccid.h: struct _ccid_descriptor: add
	  unsigned int readTimeout field
	* src/ifdhandler.c:
	  IFDHSetProtocolParameters(): only use a data rate supported by
	  the reader in the PPS negociation, otherwise we stay at the
	  default speed.
	* src/ccid_serial.c: OpenSerialByName(): the
	  reader does not support the Get Data Rates CCID function so the
	  list of supported data rates is hard coded.
	* src/ccid_usb.c: OpenUSBByName(): get the list
	  of data rates the reader supports See 3.7.3 Get Data Rates (page
	  25) from CCID spec 1.00
	* src/ccid.h: struct _ccid_descriptor: add
	  unsigned int *arrayOfSupportedDataRates field
	* src/ccid_serial.c: OpenSerialByName(): set
	  card movement notification in synchronous mde
	* configure.in: we need pcsc-lite 1.2.9-beta7
	  and not just beta5 since we use the new log API
	* src/ifdhandler.c: extra_egt(): rewrite the
	  function comment
	* src/ifdhandler.c: extra_egt(): reuse the same
	  baud rate calculation formula
	* src/ifdhandler.c: extra_egt(): change two
	  if() in one
	* src/ifdhandler.c: change comments: TBi (i>2)
	  is BWI/CWI not BWI/BCI

2005-04-25  rousseau

	* src/ifdhandler.c: extra_egt(): some (bogus)
	  cards require an extra EGT but the ATR does not say so. We try
	  to detect the bogus cards and set TC1=2
	* src/ifdhandler.c: light code reformating

2005-04-22  rousseau

	* readers/supported_readers.txt: add Eutron SIM
	  Pocket Combo

2005-04-21  rousseau

	* src/openct/checksum.c,
	  src/openct/checksum.h,
	  src/openct/proto-t1.h: #include <stdint.h>
	  only if HAVE_STDINT_H is defined. Some old FreeBSD do not have
	  stdint.h. Thanks to Tilman Linneweh for the patch

2005-04-13  rousseau

	* readers/SIM_Pocket_Combo.txt: Eutron SIM
	  Pocket Combo (the reader is dual slot and is seen as two readers)
	* readers/sid800.txt: RSA SecurID SID800
	  Hardware Authenticator

2005-04-12  rousseau

	* src/Info.plist: "Generic CCID reader" ->
	  "Generic CCID driver"

2005-03-17  rousseau

	* src/ccid.c: ccid_error(): use log_msg()
	  instead of debug_msg()
	* src/debug.c: change debug_msg() in log_msg()
	  and add the priority argument same for debug_xxd() changed in
	  log_xxd() These functions are only used by the parse command and
	  if the driver is not used with pcsclite
	* src/debug.h: use pcsclite debuglog.h header
	  file and use its Log?() macro instead of debug_msg(). This adds
	  color to the log messages because Log?() macros use log_msg()
	  instead of the deprecated debug_msg() function.
	* src/ifdhandler.c: init_driver(): use
	  DEBUG_INFO2() instead of debug_msg()
	* src/tokenparser.l: add "%option nounput" to
	  avoid the compilation warning "`yyunput' defined but not used"
	* src/towitoko/atr.c: ATR_GetDefaultProtocol():
	  the message "no default protocol found in ATR. Using T=0" is not
	  CRITICAL but INFO only
	* configure.in: store & restore the value of
	  LIBS around the macro AC_CHECK_LIB(pcsclite,...) to avoid adding
	  an automatic -lpcsclite to LIBS
	* configure.in: do not check for
	  SCardEstablishContext is the user does NOT want to use pcsc-lite
	  (with --disable-pcsclite)

2005-03-14  rousseau

	* README: release 0.9.3
	* COPYING, README,
	  src/ccid.c, src/ccid.h,
	  src/ccid_ifdhandler.h,
	  src/ccid_serial.c,
	  src/ccid_serial.h,
	  src/ccid_usb.c,
	  src/ccid_usb.h,
	  src/commands.c,
	  src/commands.h,
	  src/debug.c, src/debug.h,
	  src/defs.h,
	  src/ifdhandler.c,
	  src/openct/checksum.h,
	  src/openct/proto-t1.h,
	  src/utils.c, src/utils.h:
	  change licence from GNU GPL to GNU LGPL
	* configure.in: version 0.9.3

2005-03-04  rousseau

	* readers/KAAN_SIM_III.txt,
	  readers/mIDentity.txt: Add KAAN SIM III and
	  KAAN mIDentity
	* config.h.in: add HAVE_LIBPCSCLITE
	* configure.in: use $PCSC_LIBS instead of
	  $PCSCLITE_LIBS since we used PKG_CHECK_MODULES(PCSC, ...)
	* README,
	  readers/supported_readers.txt: add Kobil KAAN
	  mIDentity in supported reader list
	* README,
	  readers/supported_readers.txt: add Kobil KAAN
	  SIM III in supported readers list
	* README,
	  readers/supported_readers.txt: add SCR 3310
	* readers/SCR3310.txt: SCR3310

2005-02-28  rousseau

	* src/ifdhandler.c,
	  src/towitoko/atr.c: use ATR_t instead of ATR
	* src/towitoko/atr.h: rename ATR struct to
	  ATR_t do not conflict with ATR field defined by
	  PCSC/ifdhandler.h. This allows compilation using tcc (Tiny C
	  Compiler)

2005-02-27  rousseau

	* configure.in: check that we can link with
	  libpcsclite needed by examples/scardcontrol.c
	* configure.in: exits with an error if
	  usbdropdir is not defined
	* configure.in: if
	  /usr/local/lib/pkgconfig/libpcsclite.pc exists (default
	  pcsc-lite configuration) we exit telling the user to use
	  PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure
	* configure.in: do not check for pkg-config
	  since we can do without it

2005-02-25  rousseau

	* readers/CardMan3121.txt,
	  readers/CherryXX33.txt,
	  readers/CherryXX44.txt,
	  readers/GemPC433_SL.txt,
	  readers/KAAN_Advanced.txt,
	  readers/KAAN_Base.txt,
	  readers/SCR331-DI.txt,
	  readers/SCR331.txt,
	  readers/SCR335.txt,
	  readers/SPR532.txt: typo: correct ICC by CCID
	  where needed
	* src/parse.c: typo: used "ICC" instead of
	  "CCID"
	* src/ifdhandler.c:
	  IFDHSetProtocolParameters(): return immediately if the reader
	  has the bit CCID_CLASS_AUTO_PPS_PROP set since he will perform
	  PPS and SetParameters himself
	* src/ccid.h: #define CCID_CLASS_AUTO_PPS_PROP
	  0x00000040
	* src/ifdhandler.c:
	  IFDHSetProtocolParameters(): calculate the value of pps[2] (TA1)
	  even if CCID_CLASS_AUTO_PPS_CUR bit is set and no PPS will be
	  generated by the driver since this value is also used later by
	  the SetParameters()
	* src/ifdhandler.c:
	  IFDHSetProtocolParameters(): use "card_baudrate <=
	  ccid_desc->dwMaxDataRate" instead of "card_baudrate <
	  ccid_desc->dwMaxDataRate" to not miss the maximum speed value
	* Makefile.am: we do not need to distribute
	  mkinstalldirs
	* configure.in: define WITHOUT_PCSC=false when
	  pcsclite _is_ used

2005-02-23  rousseau

	* examples/scardcontrol.c: #include
	  <sys/time.h> instead of <time.h> to get correct definition of
	  struct timeval under Mac OS X
	* src/debug.c: if you use --disable-pcsclite
	  and do _not_ want to see the logs sent to stderr just #undef
	  LOG_TO_STDERR
	* configure.in,
	  src/Makefile.am: if --disable-pcsclite is
	  used we must link the library with debug.c to provide debug_msg()
	* examples/Makefile.am: use @PCSC_CFLAGS@ and
	  @PCSC_LIBS@

2005-02-21  rousseau

	* src/ccid_serial.c: OpenSerialByName(): use
	  tx_buffer[] = { 0x02 } insead of "\x02" since we want 1 byte
	  only and not a null-terminated string
	* src/Makefile.am: use @PCSC_CFLAGS@
	* configure.in: use pkg-config(1) to find
	  everything related to pcsc-lite if you installed pcsc-lite in
	  /usr/local you may use $
	  PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure if you do
	  not have pkg-config installed you may use $
	  CFLAGS=-I/usr/local/include/PCSC ./configure

2005-02-20  rousseau

	* src/ccid_usb.c: add an "interface field" in
	  _usbDevice. This value is set in OpenUSB() and used in
	  CloseUSB(). The struct usb_device structure is half "corrupted"
	  after the USB device is removed and we wanted to use it when
	  when closing the driver after a reader removal. This caused a
	  crash with libusb 0.1.10.
	* README: add Kobil KAAN Base & KAAN Advanced
	  readers in the supported list
	* src/ccid_usb.c: Bogus_firmwares[]: add Kobil
	  KAAN Base & KAAN Advanced readers
	* readers/supported_readers.txt: add Kobil KAAN
	  Base & KAAN Advanced readers
	* readers/KAAN_Advanced.txt,
	  readers/KAAN_Base.txt: firmware 0.37

2005-02-04  rousseau

	* readers/ACR38.txt: new firmware (but still
	  with version 1.0) with the wMaxPacketSize bug removed

2005-02-02  rousseau

	* README: move the ACR 38 from Unsupported to
	  Supported list

2005-01-26  rousseau

	* readers/Makefile.am: add the new or missing
	  readers
	* readers/CherryXX44.txt,
	  readers/KAAN_Advanced.txt,
	  readers/KAAN_Base.txt: new readers
	  descriptions

2005-01-20  rousseau

	* README: add Cherry XX44 keyboard (SmartBoard
	  G83-6744)
	* readers/supported_readers.txt: add Cherry
	  XX44 (SmartBoard G83-6744)

2005-01-13  rousseau

	* README: move the SCM Micro readers from
	  unsupported to supported list and document how to upgrade the
	  firmwares Thanks to Torsten Maykranz for his support
	* readers/SCR335.txt: New model with firmware
	  5.14 (instead of 4.16)
	* src/ccid_usb.c: Bogus_firmwares[]: the 3 SMC
	  readers had the same (cut-n-paste) USB identification
	* src/commands.c: CmdXfrBlockCHAR_T0(): move a
	  variable declaration at the beginning of the function since ISO
	  C89 forbids mixed declarations and code
	* src/commands.c: SecurePIN(): proprietary
	  command to add the PIN code in the APDU without any padding
	  (this is not possible with the CCID specs). Thanks to Martin
	  Paljak for the patch.
	* src/ccid.h: define SPR532 USB identification

2005-01-11  rousseau

	* configure.in: typo: shat -> what

2005-01-09  rousseau

	* src/commands.c: SecurePIN(), CCID_Transmit(),
	  SetParameters(): check that the user provided command is not too
	  large (avoid a possible buffer overflow)
	* examples/scardcontrol.c: The APDU now comes
	  _after_ the CCID structure as described the CCID specifications.
	* src/commands.c: SecurePIN(): directly use the
	  user buffer passed instead of reversing the APDU/CCID structure.
	  It is now as described in the CCID specifications. Thanks to
	  Martin Paljak. I was wrong.

2004-12-19  rousseau

	* src/ccid_usb.c: SPR 532 firmware previous to
	  5.04 is bogus regarding min/max pin lengths
	* readers/SPR532.txt: update with firmware 5.04

2004-10-27  rousseau

	* src/ccid_serial.c: OpenSerialByName(): use %s
	  instead of %d for dev_name

2004-10-20  rousseau

	* examples/scardcontrol.c: set
	  wPINMaxExtraDigit: set max to 8 (instead of 4) to differentiate
	  it from min (set to 4)
	* examples/scardcontrol.c: in wPINMaxExtraDigit
	  the bytes order is max,min and not min,max. The comments were
	  wrong

2004-10-19  rousseau

	* readers/supported_readers.txt: add Oz776
	* src/Info.plist,
	  src/ccid_ifdhandler.h,
	  src/ccid_usb.c: check firmware version to
	  avoid firmwares with bugs. You can still use a bigus firmware by
	  setting DRIVER_OPTION_USE_BOGUS_FIRMWARE in Info.plist
	* src/commands.c,
	  src/commands.h,
	  src/openct/proto-t1.c,
	  src/towitoko/pps.c: Add support of character
	  level communication (CCID_CLASS_CHARACTER). Thanks to Jeffrey Dai

2004-10-14  rousseau

	* readers/DellSCRK.txt: add idVendor &
	  idProduct using the new parse command

2004-10-07  rousseau

	* readers/Makefile.am: reorganize the list and
	  add Oz776S.txt
	* readers/Oz776S.txt: O2Micro Oz776S USB Hub
	  smartcard reader
	* readers/SCR331-DI.txt,
	  readers/SCR335.txt,
	  readers/SPR532.txt: add idVendor & idProduct
	  using the new parse command
	* src/ccid_usb.c,
	  src/ccid_usb.h: the first argument of
	  get_desc() is lun instead of channel and the function uses
	  LunToReaderIndex() to get the reader index
	* src/parse.c: use lun instead of channel as
	  first argument to get_desc() and use the returned value to
	  detect an error
	* readers/SCR331.txt: add idVendor & idProduct
	  using the new parse command

2004-10-06  rousseau

	* readers/ACR38.txt,
	  readers/CardMan3121.txt,
	  readers/CherryXX33.txt,
	  readers/DellSK-3106.txt,
	  readers/GemPC433_SL.txt,
	  readers/GemPCKey.txt,
	  readers/GemPCTwin.txt,
	  readers/LTC31.txt: add idVendor & idProduct
	  using the new parse command
	* src/parse.c: display idVendor and idProduct
	* src/parse.c: display USB bcdDevice field. Is
	  it the device firmware release?
	* src/parse.c: add support of "Character level
	  exchange"

2004-10-04  rousseau

	* configure.in: do not redefine PKG_CONFIG_PATH
	  when checking the pcsc-lite version since the variable is
	  already defined a few lines above

2004-10-03  rousseau

	* examples/scardcontrol.c: add "THIS PROGRAM IS
	  NOT DESIGNED AS A TESTING TOOL!

2004-09-30  rousseau

	* src/ifdhandler.c: mask bStatus to get the ICC
	  state since bSatus may also indicate an error in b6-b7
	* src/ccid.h: #define CCID_CLASS_CHARACTER
	* src/ccid.h: define OZ776 USB identification
	* src/ccid.h: define CCID_ICC_STATUS_MASK and
	  status states
	* src/commands.c: CmdGetSlotStatus(): card
	  absent or mute is not an communication error (even if the CCID
	  command result indicates a command failure)
	* src/ccid_usb.c: get_ccid_usb_interface(): the
	  O2Micro OZ776S reader has a wrong USB descriptor. The extra[]
	  field is associated with the last endpoint instead of the main
	  USB descriptor.

2004-09-29  rousseau

	* examples/Makefile.am,
	  src/Makefile.am: use @AM_CPPFLAGS@ (defined
	  by configure.in) instead of `pkg-config libpcsclite --cflags`
	  since PKG_CONFIG_PATH may not be correct here
	* configure.in: define AM_CPPFLAGS=`pkg-config
	  libpcsclite --cflags` here since we also defined/exported a
	  "valid" PKG_CONFIG_PATH
	* src/Makefile.am: do not define parse_CFLAGS
	  since AM_CPPFLAGS is already defined with the same value
	* configure.in: try to find pkg-config files in
	  /usr/local/lib/pkgconfig since pcsc-lite installs them in this
	  directory by default

2004-09-08  rousseau

	* src/ccid.c: ccid_open_hack(): do not use a
	  null terminated C string for the TPDU->APDU switch command since
	  the command is NOT a C string
	* src/commands.c: CmdPowerOn(): do not use a
	  null terminated C string for the EMV->ISO switch command since
	  the command is NOT a C string
	* src/commands.c: switch the Cherry xx33 reader
	  in ISO mode if power up in EMV mode fails. Thanks to St&#65533;phane
	  Durand for the bug report.
	* src/ccid.h: #define CHERRYXX33 0x046A0005

2004-09-03  rousseau

	* src/ifdhandler.c:
	  IFDHSetProtocolParameters(): return the result value of
	  SetParameters() in case of error instead of always
	  IFD_COMMUNICATION_ERROR. This will allow to return
	  IFD_NOT_SUPPORTED in some cases and avoid a PTS negociation
	  failure (and card ignored) in pcscd.
	* src/commands.c: SetParameters(): returns
	  IFD_NOT_SUPPORTED if the CCID error is "command not supported".

2004-08-24  rousseau

	* src/ifdhandler.c:
	  IFDHSetProtocolParameters(): the bmTCCKST bits shall be _set_
	  not cleared
	* src/ifdhandler.c:
	  IFDHSetProtocolParameters(): we shall indicate the T=1 checksum
	  used (LRC/CRC) in the SetParameters() command
	* src/openct/proto-t1.c: t1_negociate_ifsd: the
	  frame size is 5 only for LRC checksum. The correct size is (4 +
	  t1->rc_bytes)
	* src/utils.c: ReleaseReaderIndex: return 0
	  since the function is not void ()

2004-08-17  rousseau

	* src/Info.plist: use the official doctype,
	  public and system ids. Thanks to Ville Skytt&#65533; and OpenCT

2004-08-15  rousseau

	* README: release 0.9.2
	* examples/Makefile.am,
	  src/Makefile.am: use AM_CPPFLAGS =
	  `pkg-config libpcsclite --cflags`
	* config.h.in: no need to define
	  HAVE_PCSC_IFDHANDLER_H (the check section changed in
	  configure.in)
	* configure.in: use `pkg-config libpcsclite
	  --cflags` to locate ifdhandler.h and do not use
	  PCSC/ifdhandler.h but just ifdhandler.h

2004-08-10  rousseau

	* README: place the "Known problems" near the
	  affected reader and not in a independent section for
	  clarification

2004-08-06  rousseau

	* src/parse.c: try to IFDHCloseChannel() only
	  if we opened at least one reader
	* src/ccid.c: ccid_open_hack(): update the hack
	  for the SCR331-DI contactless now we use multi-slots
	* src/ifdhandler.c: IFDHICCPresence(): periodic
	  debug message indicating the card presence/absence
	* src/ifdhandler.c: use a much cleaner way to
	  check presence of a contactless card with a multislot SCR331-DI
	  reader
	* src/ifdhandler.c: IFDHICCPresence(): call
	  get_ccid_descriptor() on reader_index instead of Lun
	* src/ifdhandler.c: FDHGetCapabilities() tag
	  TAG_IFD_SLOT_THREAD_SAFE: Can NOT talk to multiple slots at the
	  same time (at least until it is fully validated)
	* src/ifdhandler.c:
	  IFDHCreateChannel()/IFDHCreateChannelByName(): if the OpenPort()
	  call fails we ReleaseReaderIndex() and do not call
	  ccid_open_hack()
	* src/ccid_usb.c: for multi-slots readers
	  IFDHCreateChannel*()/OpenUSB is called for each slot. If we are
	  opening a new slot of an already opened reader we reuse the same
	  data (same libusb structures) and share the same pbSeq.
	* src/commands.c: use
	  (*ccid_descriptor->pbSeq)++ instead of ccid_descriptor->bSeq++
	* src/ccid_serial.c,
	  src/ccid_usb.c: use pbSeq instead of bSeq
	* src/ccid.h: replace "unsigned char bSeq" by
	  "unsigned char *pbSeq" so that two slots of a same reader can
	  share the same sequence number
	* src/ccid_serial.c: use a dynamic timeout when
	  reading the serial port. The first timeout use when detecting
	  the reader is 2 seconds to not wait too long if no reader is
	  connected. Later timeouts are set to 1 minute to allow long time
	  APDU.

2004-08-04  rousseau

	* src/ccid.h,
	  src/ccid_serial.c,
	  src/ccid_usb.c,
	  src/ifdhandler.c: remove defaultFeatures
	  management (was used for SCR331-DI hack)
	* src/Makefile.am: add "parse_CFLAGS =
	  `pkg-config libpcsclite --cflags`" so that parse.c can find and
	  use <ifdhandler.h>
	* src/parse.c: do not use OpenUSB/CloseUSB but
	  IFDHCreateChannel/IFDHCloseChannel to use the ReaderIndex[]
	  mechanism
	* src/utils.c: update copyright date (add 2004)
	* src/utils.c: LunToReaderIndex(): debug
	  message when Lun is not found
	* src/utils.c: GetNewReaderIndex(): debug
	  message when ReaderIndex[] is full
	* src/utils.c: GetNewReaderIndex(): store Lun
	  in the first free ReaderIndex[] entry
	* src/towitoko/pps.c: typo: Receivig ->
	  Receiving
	* src/towitoko/pps.c: PPS_Exchange(): do not
	  recalculate the PPS length from the received PPS but take it
	  from the number of bytes actually received (it may not be a PPS)

2004-07-28  rousseau

	* src/ifdhandler.c: use reader_index instead of
	  lun as reader identification allocate (in IFDHCreateChannel*)
	  and release (in IFDHCloseChannel)
	* src/ccid.c, src/ccid.h,
	  src/ccid_ifdhandler.h,
	  src/ccid_serial.c,
	  src/ccid_serial.h,
	  src/ccid_usb.c,
	  src/ccid_usb.h,
	  src/commands.c,
	  src/commands.h: use reader_index instead of
	  lun as reader identification
	* src/utils.c, src/utils.h:
	  use a more complex Lun -> reader transformation (Lun>>16) is not
	  usable for multi-slots readers

2004-07-27  rousseau

	* src/openct/proto-t1.c: this code fails EMV
	  test 1771-4 (should be a residue)

2004-07-26  rousseau

	* src/openct/proto-t1.c: - debug some cases -
	  add ISO 7816-3 rule number in comments
	* src/ccid_serial.c,
	  src/ccid_usb.c: initialise
	  ccid.defaultFeatures field

2004-07-22  rousseau

	* configure.in: use pkg-config to test the
	  release version of pcsc-lite

2004-07-21  rousseau

	* configure.in: version 0.9.2
	* src/ifdhandler.c: hack to support the
	  SCR331-DI contactless interface
	* src/ccid.c: ccid_open_hack(): detect and
	  activate the contactless interface of the SCR331-DI
	* src/commands.c: use bCurrentSlotIndex as the
	  slot number in the CCID commands (instead of 0)
	* src/ccid_serial.c,
	  src/ccid_usb.c: initialise bMaxSlotIndex and
	  ccid.bCurrentSlotIndex fields
	* src/ccid.h: add defaultFeatures field for
	  multislot readers with different dwFeatures for each slot.
	* src/ccid.h: add SCR331DI identification
	* src/ccid.h: add bMaxSlotIndex and
	  bCurrentSlotIndex fields to support multislot readers (one USB
	  device with two or more card readers)

2004-07-20  rousseau

	* src/openct/proto-t1.c: remove "||
	  sent_length" in "if (retries == 0 || sent_length)" since it is
	  an OpenCT code that should not be needed with the new automata.
	* src/openct/proto-t1.c: update the copyright,
	  add my name to reflect the same change in OpenCT

2004-07-19  rousseau

	* src/ifdhandler.c: update IFDHControl()
	  prototype to replace LPVOID by PUCHAR (prototype changed in
	  pcsc-lite-1.2.9-beta5)
	* src/ifdhandler.c,
	  src/openct/proto-t1.c,
	  src/openct/proto-t1.h: BUG: I forgot to
	  initialise the t1.lun field. It failed to work with more than
	  one readers and a T=1 card in a TPDU reader.
	* src/openct/proto-t1.c: in resync: we set
	  retries = 1 since when we return in the loop we have retries--;
	  Without this retries goes negative and the test 'if (retries ==
	  0)' will not become true again before a looooong time.

2004-07-16  rousseau

	* src/ccid_usb.c: OpenUSBByName(): use base 0
	  instead of 16 in strtoul() so that you can express the decimal
	  value 15 as: 15 (decimal), 0xF (hex) or 017 (octal). It is not
	  really needed since the reader descriptions in Info.plist are
	  all in hex.
	* src/ifdhandler.c: init_driver(): use base 0
	  instead of 16 in strtoul() so that you can express the decimal
	  value 15 as: 15 (decimal), 0xF (hex) or 017 (octal)
	* src/ccid_ifdhandler.h,
	  src/ccid_serial.c,
	  src/ccid_usb.c,
	  src/ifdhandler.c,
	  src/parse.c, src/utils.c:
	  rename PCSCLITE_MAX_READERS in CCID_DRIVER_MAX_READERS This
	  value is not defined by pcsc-lite but is internal to the CCID
	  driver. By default pcsc-lite supports the same number of readers
	  (16).
	* src/commands.c: BUG: CmdPowerOn(): use
	  memmove() instead of memcpy() to copy the ATR bytes since the
	  source end destination buffers (with a more than 10 bytes long
	  ATR) overlaps. Bug spotted by splint http://www.splint.org/

2004-07-15  rousseau

	* src/openct/proto-t1.h: use "uint8_t *"
	  instead of "unsigned char *" in the prototype of
	  t1_state_t.checksum field.
	* src/tokenparser.l: initialise pcDesiredKey to
	  NULL instead of 0
	* src/commands.c: BUG in CmdXfrBlockTPDU_T1():
	  the t1_transceive() returned value was stored in an unsigned int
	  and tested if < 0 (error case). Of course the test was never
	  true.
	* src/openct/proto-t1.c: remove a useless
	  break; after a goto;
	* src/openct/proto-t1.c,
	  src/openct/proto-t1.h: in t1_transceive() and
	  t1_negociate_ifsd() dad argument is unsigned.
	* src/openct/checksum.h: replace "unsigned char
	  *" by "uint8_t *" to use the exact same prototype as in the
	  functions definition
	* src/commands.c,
	  src/commands.h: i2dw() is not used outside
	  commands.c so declare it static
	* examples/scardcontrol.c: allow splint to
	  continue parsing after use of type fd_set
	* src/commands.c,
	  src/commands.h: CmdXfrBlockTPDU_T0() and
	  CmdXfrBlockTPDU_T1() are internal functions so declare them
	  static
	* src/towitoko/atr.c: atr tables are internal
	  only so declare them static
	* src/openct/proto-t1.c: define internal
	  functions as static
	* src/openct/buffer.c,
	  src/openct/buffer.h: remove unused functions

2004-07-10  rousseau

	* src/openct/proto-t1.c: change
	  "previous_block[1]" in "previous_block[PCB]"
	* src/openct/proto-t1.c: remove unused struct
	  ifd_protocol_ops
	* src/openct/proto-t1.c,
	  src/openct/proto-t1.h: IFD_PROTOCOL_MORE ->
	  IFD_PROTOCOL_T1_MORE IFD_PROTOCOL_STATE -> IFD_PROTOCOL_T1_STATE
	  renamed to be in line with OpenCT

2004-07-09  rousseau

	* examples/scardcontrol.c,
	  src/ifdhandler.c,
	  src/parse.c: explicitely cast the returned
	  value as (void) if we don't use it
	* src/ifdhandler.c:
	  IFDHSetProtocolParameters(): test the return value of
	  SetParameters()
	* src/parse.c:
	  ccid_parse_interface_descriptor() is now static
	* src/parse.c: make channel variable (unsigned
	  int) instead of (int)
	* src/parse.c: include <sys/types.h> so splint
	  can parse the file
	* src/ccid_serial.c,
	  src/ccid_usb.c,
	  src/ccid_usb.h: mark potentially null values
	  as /*@null@*/ for splint
	* src/ccid_serial.c,
	  src/ccid_usb.c,
	  src/ifdhandler.c,
	  src/openct/proto-t1.c,
	  src/parse.c: mark unused arguments as
	  /*@unused@*/ for splint
	* src/ccid_usb.c: include <sys/types.h> so
	  splint can parse the file
	* src/ccid.c: the buffer var_text[] was, in
	  fact, used outside its declaration
	* src/ccid_serial.c,
	  src/ccid_serial.h: ReadChunk() and
	  get_bytes() are internal use in ccid_serial.c so declare them
	  static
	* src/ccid_serial.c,
	  src/ccid_usb.c: lun is (unsigned int) so
	  reader = LunToReaderIndex(lun) is also (unsigned int)
	* src/ccid_serial.c: OpenSerialByName():
	  arguments of CmdEscape() are unsigned
	* src/ccid_serial.c: replace "121234" by
	  "123456" to make it more clear it is a memory reservation for 6
	  characters
	* src/ccid_serial.c: remove a unneeded cast in
	  (int)lun
	* src/ccid_serial.c: allow splint to continue
	  parsing after use of type fd_set
	* src/ccid_serial.c: ReadSerial(): the unknown
	  card movement byte is in "c" not "buffer[3]"
	* src/ccid.c, src/ccid.h,
	  src/ccid_ifdhandler.h,
	  src/ccid_serial.c,
	  src/ccid_serial.h,
	  src/ccid_usb.c,
	  src/ccid_usb.h,
	  src/commands.c,
	  src/commands.h,
	  src/ifdhandler.c: lun is (unsigned int)
	  instead of (int) Avoid a warning by splint in #define
	  LunToReaderIndex(Lun) (Lun>>16) Left operand of >> may be
	  negative (int): lun >> 16

2004-07-02  rousseau

	* src/Info.plist,
	  src/create_Info_plist.pl: replace VENDOR
	  pattern by MAGIC_VENDOR since we also have a VENDOR in
	  IOCTL_SMARTCARD_VENDOR_IFD_EXCHANGE and then a collision. same
	  change for PRODUCT and FRIENDLYNAME to be homogenous.
	* src/ccid_serial.c: OpenSerialByName():
	  perform a command (get the reader firmware) to be sure a GemPC
	  Twin (serial or pcmcia) reader is connected
	* src/openct/README: present where the files
	  come from and what I did

2004-07-01  rousseau

	* configure.in: version 0.9.1
	* README: release 0.9.1
	* src/openct/proto-t1.h: #define
	  IFD_PARITY_ERROR
	* README: release 0.9.0

2004-06-30  rousseau

	* examples/scardcontrol.c: correct a signedness
	  issue
	* src, src/.cvsignore:
	  rename tokenparser_macosx.? in tokenparser_fake.?
	* trunk/Drivers/ccid, .cvsignore: add
	  build-stamp and configure-stamp
	* examples,
	  examples/.cvsignore: ignore temporary files
	* src/towitoko/COPYING: LGPL licence
	* configure.in: version 0.9.0
	* src/towitoko/pps.c: PPS_Match() was wrong
	  when the confirmation is shorter than the request
	* src/towitoko/pps.c,
	  src/towitoko/pps.h: PPS_Exchange() has a new
	  argument (unsigned char *pps1) which is the PPS1 returned by the
	  card (TA1 the card wants to use)
	* src/towitoko/pps.c: CCID_Transmit() now uses
	  a 4th argument (unsigned char bBWI)
	* src/towitoko/pps.c,
	  src/towitoko/pps.h: move macros
	  PPS_HAS_PPS?() from pps.c to pps.h
	* src/towitoko/atr.c,
	  src/towitoko/atr.h: add
	  ATR_GetDefaultProtocol() function
	* src/towitoko/atr.c,
	  src/towitoko/atr.h: remove unused functions
	* src/towitoko/atr.c: the atr_f_table[] and
	  atr_d_table[] tables were partly wrong
	* src/towitoko/README: - update the text - the
	  function ATR_GetDefaultProtocol() is mine (Ludovic Rousseau)
	* src/towitoko/defines.h: remove MIN() and
	  MAX() definitions
	* src/ifdhandler.c: if DEBUG_LEVEL_PERIODIC is
	  not set we temporaily remove DEBUG_LEVEL_COMM in
	  IFDHICCPresence() to avoid having the low level debug every time
	  pcscd test the card presence
	* src/ifdhandler.c: - removed CardUp() and
	  CardDown() - all the reader initialisation/negotiation is now
	  done in IFDHSetProtocolParameters() (that's why you need
	  pcsc-lite-1.2.9beta3)
	* src/utils.c: pcsclite.h moved in PCSC/
	* src/defs.h: the t1 field in struct CCID_DESC
	  changed from Protocol_T1 (towitiko) to t1_state_t (openct)
	* src/debug.h: we do not need to have PACKAGE
	  defined (I do not remember what it was used for)
	* src/commands.c: CmdXfrBlockTPDU_T1(): use the
	  T=1 TPDU layer from opensc/ instead of towitoko/
	* src/commands.c: CCID_Receive() returns
	  IFD_PARITY_ERROR if the error returned by the reader is 0xFD
	  (parity error) and IFD_COMMUNICATION_ERROR otherwise (so that
	  the T=1 TPDU layer can recover the error)
	* src/commands.c,
	  src/commands.h: CCID_Transmit() now has a new
	  "unsigned char bBWI" argument
	* src/commands.c: CmdPowerOn(): add a mechanism
	  to allow power on at 1.8V, 3V and then 5V as specified by ISO
	  7816. We still use 5V for now to avoid problems with non ISO
	  compliant cards
	* src/commands.c: add __FUNCTION__ as argument
	  to ccid_error()
	* src/ccid.c, src/ccid.h:
	  ccid_error() now also has a "char *function" argument to log the
	  name of the function in which the error occured
	* src/Makefile.am: - rename protocol_t1/ in
	  towitoko/ to reflect the project the code comes from - remove
	  the now useless files from towitoko/ and add the files from
	  openct/
	* src/towitoko/apdu.h,
	  src/towitoko/protocol_t1.c,
	  src/towitoko/protocol_t1.h,
	  src/towitoko/t1_block.c,
	  src/towitoko/t1_block.h: remove these files
	  since I now use the T=1 TPDU code from OpenCT
	* src/openct,
	  src/openct/LICENSE,
	  src/openct/buffer.c,
	  src/openct/buffer.h,
	  src/openct/checksum.c,
	  src/openct/checksum.h,
	  src/openct/proto-t1.c,
	  src/openct/proto-t1.h: use T=1 TPDU code from
	  the OpenCT project <http://www.opensc.org/> The state automata
	  was greatly improved to manage "all" the possible errors cases.
	* src/Info.plist: document the possible values
	  for ifdLogLevel and ifdDriverOptions

2004-06-23  rousseau

	* examples/scardcontrol.c: - send Select DF and
	  Select EF APDU before Verify PIN - read stdin (consume the "*"
	  fake keys) if the pinpad is on a keyboard
	* configure.in: check for the presence of
	  PCSC/ifdhandler.h instead of ifdhandler.h
	* config.h.in: HAVE_IFDHANDLER_H is renamed
	  HAVE_PCSC_IFDHANDLER_H
	* README: add info for: - Cherry XX33 keyboard
	  - Dell keyboard SK-3106 - Dell smart card reader keyboard Move
	  some readers in "Unsupported or partly supported CCID readers:"
	  - C3PO LTC31 - SCM Micro SCR 331 - SCM Micro SCR 335 - SCM Micro
	  SPR 532

2004-06-22  rousseau

	* Makefile.am: ChangeLog is not a .PHONY target
	  but a real file

2004-06-13  rousseau

	* examples/scardcontrol.c: use
	  SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1 instead of
	  SCARD_PROTOCOL_ANY since it is not defined in Micosoft PC/SC

2004-05-30  rousseau

	* configure.in: use 'pkg-config libpcsclite
	  --variable=usbdropdir' even if --prefix= is used. You should use
	  --enable-usbdropdir= and --enable-ccidtwindir= to set to
	  different values.

2004-05-26  rousseau

	* readers/DellSK-3106.txt: Dell keyboard SK-3106
	* src/commands.c: set *rx_length to 0 when a
	  ReadPort() error is returned. The problem was not solved by
	  ccid_usb.c 1.25.
	* src/commands.c: bPINOperation is not passed
	  in the user command since the command is "PIN Verification" and
	  nothing else
	* examples/scardcontrol.c: remove useless
	  bPINOperation

2004-05-25  rousseau

	* examples/scardcontrol.c,
	  src/ccid.h,
	  src/ccid_serial.c,
	  src/ccid_usb.c,
	  src/ifdhandler.c: add support for
	  SCardGetAttrib(.., IOCTL_SMARTCARD_VENDOR_VERIFY_PIN, ..) to
	  know if the reader supports SCardControl(..,
	  IOCTL_SMARTCARD_VENDOR_VERIFY_PIN, ..)
	* configure.in: add a --enable-pcsclite option
	  (default yes) so that the driver can be compiled for a different
	  framework (one needing tokenparser.l)
	* src/ccid_usb.c: set length to 0 when a
	  usb_bulk_read() error is returned
	* src/Makefile.am: install Info.plist before
	  the lib. This is for my convenience only because of my debug
	  setup.
	* src/Makefile.am: rename tokenparser_macosx.l
	  into tokenparser_fake.l since it is not MacOSX specific.

2004-05-24  rousseau

	* examples/scardcontrol.c,
	  src/ccid.c,
	  src/ccid_serial.c,
	  src/ccid_serial.h,
	  src/ccid_usb.c,
	  src/ccid_usb.h,
	  src/commands.c,
	  src/commands.h,
	  src/debug.c,
	  src/ifdhandler.c,
	  src/towitoko/atr.h,
	  src/towitoko/protocol_t1.c: recompile using
	  gcc -pedantic and correct: - some C++ syntax comments - many
	  signedness "problems"
	* src/ccid_ifdhandler.h,
	  src/commands.c,
	  src/commands.h,
	  src/ifdhandler.c: add support for Secure PIN
	  through SCardControl() (see sample code in examples/)
	* src/ccid.c: - add some missing error codes -
	  low error values indicate the byte in error in the CCID frame
	* examples,
	  examples/Makefile.am,
	  examples/scardcontrol.c: add examples for
	  SCardControl IOCTL_SMARTCARD_VENDOR_IFD_EXCHANGE and
	  IOCTL_SMARTCARD_VENDOR_VERIFY_PIN
	* Makefile.am: add examples in SUBDIRS
	* configure.in: remove -fno-common from CFLAGS
	  since it is(?) gcc specific
	* readers/ACR38.txt,
	  readers/supported_readers.txt: add Advanced
	  Card Systems ACR 38
	* readers/CherryXX33.txt,
	  readers/supported_readers.txt: add Cherry XX33

2004-05-18  rousseau

	* src/ifdhandler.c: in CardUp():SetParameters()
	  the default TA1 is 0x11

2004-05-17  rousseau

	* src/Info.plist: add default ifdDriverOptions
	  set to 0x0000
	* src/ifdhandler.c: - add support of
	  IOCTL_SMARTCARD_VENDOR_IFD_EXCHANGE in IFDHControl() - read
	  ifdDriverOptions from Info.plist to limit the use of
	  IOCTL_SMARTCARD_VENDOR_IFD_EXCHANGE (idea from Peter Williams)
	* src/ccid.c,
	  src/commands.c: redefined CmdEscape() to pass
	  the CCID message instead of just a tag
	* src/ccid_usb.c,
	  src/ccid_usb.h: do not export
	  get_end_points() declaration and make the function static
	* src/Makefile.am,
	  src/ccid_ifdhandler.h,
	  src/ccid_serial.c,
	  src/commands.h,
	  src/defs.h, src/parse.c,
	  src/towitoko/atr.c,
	  src/towitoko/defines.h,
	  src/towitoko/protocol_t1.c,
	  src/utils.c: reorganize header files
	* config.h.in, configure.in:
	  check for pcsclite.h and ifdhandler.h installed by recent
	  pcsc-lite
	* src/pcscdefines.h: types and definitions are
	  now in <pcsclite.h>, "defs.h" and "ccid_ifdhandler.h"
	* src/winsmcrd.h: removed since pcsclite.h now
	  defines SCARD_ATTR_*
	* src/ccid_ifdhandler.h: use the ifdhandler.h
	  provided by pcsc-lite so remove a lot of lines

2004-05-14  rousseau

	* configure.in: check that pkg-config command
	  is present before using it
	* INSTALL, configure.in: use
	  `pkg-config libpcsclite --variable=usbdropdir` so you do not
	  have to use --enable-usbdropdir=DIR or --enable-ccidtwindir=DIR
	  even if pcscd does not use the default /usr/local/pcsc/drivers

2004-05-12  rousseau

	* README: document the libusb bug on MacOS X
	  with unplug/replug in a different USB socket
	* INSTALL, README: move
	  debug configuration from INSTALL to README since it is dynamic
	  now
	* README: remove the "readers enumeration" part
	  since this problem is now solved by pcsc-lite-1.2.9
	* INSTALL: document the use of 'pkg-config
	  libpcsclite --variable=usbdropdir'

2004-05-10  rousseau

	* src/ifdhandler.c: in IFDHPowerICC()
	  IFD_POWER_DOWN is just power down without a power up. Changed to
	  be compliant with IFD Handler specifications.

2004-05-07  rousseau

	* src/towitoko/protocol_t1.c: in
	  Protocol_T1_Negociate_IFSD() rename sblock in block since the
	  same variable is used for sent and received block. This was not
	  clear and was the source of reported bug [ #300707 ] "Delete
	  block before using it in t1_protocol.c" which is not a bug in
	  fact.

2004-05-06  rousseau

	* INSTALL: add a "configuring the driver for
	  the serial reader (GemPC Twin)" part

2004-05-04  rousseau

	* readers/Makefile.am: add DellSCRK.txt
	* readers/DellSCRK.txt,
	  readers/supported_readers.txt: add Dell smart
	  card reader keyboard

2004-04-19  rousseau

	* src/Makefile.am: add winsmcrd.h in COMMON
	* src/ifdhandler.c: reset ATR string (length =
	  0) when the card is powered down or not present
	* src/defs.h: typo in a comment
	* src/winsmcrd.h: list of tags for
	  SCardGetAttrib() like SCARD_ATTR_ATR_STRING
	* src/ifdhandler.c: add SCARD_ATTR_ATR_STRING
	  in addition to TAG_IFD_ATR in IFDHGetCapabilities()

2004-04-16  rousseau

	* src/ifdhandler.c: new IFDHControl() API
	* src/ccid_ifdhandler.h: use a new version from
	  pcsc-lite with support of the new IFDHControl() API

2004-04-08  rousseau

	* src/ccid_usb.c: add support for the libusb
	  naming scheme: usb:%04x/%04x:libusb:%s
	* readers/SK-3106.txt,
	  readers/SPR532.txt: parse bPINSupport field
	* src/parse.c: parse bPINSupport field

2004-04-07  rousseau

	* readers/Makefile.am: also distribute
	  SK-3106.txt

2004-04-06  rousseau

	* config.h.in, configure.in:
	  remove --enable-debugcritical, --enable-debuginfo,
	  --enable-debugperiodic and --enable-debugcomm options since the
	  log level is now dynamically managed by ifdLogLevel in Info.plist
	* src/Info.plist: define default ifdLogLevel at
	  3 (DEBUG_LEVEL_CRITICAL | DEBUG_LEVEL_INFO)
	* src/debug.c: remove now useless #ifdef DEBUG
	* src/ccid_serial.c,
	  src/ccid_usb.c: add { } to avoid ambiguities
	  now that DEBUG_* are "if (x) y" constructions
	* src/ifdhandler.c: during the first
	  IFDHCreateChannel*() init_debug() is called to read the value of
	  ifdLogLevel from the Info.plist
	* src/debug.h: change the DEBUG_* macros from
	  static (compilation conditional) to dynamic (if ())
	* src/Makefile.am: debug.c is only needed by
	  parse_SOURCES not COMMON
	* src/ifdhandler.c: do not return before
	  pthread_mutex_unlock() in IFDHCreateChannelByName()
	* src/ifdhandler.c: also call ccid_open_hack()
	  in IFDHCreateChannelByName()
	* src/ifdhandler.c: T=1 context is initialized
	  in CardUp(), not in IFDHCreateChannel()
	* src/ifdhandler.c: revert to nearly previous
	  version. - IFD_POWER_DOWN is power down and power up (cold
	  reset) - IFD_RESET is power up (warm reset) - IFD_POWER_UP is
	  power up

2004-04-05  rousseau

	* configure.in: version 0.4.2
	* readers/SK-3106.txt,
	  readers/supported_readers.txt: add support
	  for the Dell keyboard SK-3106
	* src/ccid_usb.c: define
	  ALLOW_PROPRIETARY_CLASS by default Proprietary USB Class (0xFF)
	  are (or are not) accepted A proprietary class is used for
	  devices released before the final CCID specifications were
	  ready. We should not have problems with non CCID devices becasue
	  the Manufacturer and Product ID are also used to identify the
	  device */

2004-03-31  rousseau

	* src/Makefile.am: use $(srcdir) instead of
	  ".". Thanks to Dr Russel Winder for the patch.

2004-03-30  rousseau

	* src/ccid_usb.c: allow proprietary CCID Class
	  byte but only if ALLOW_PROPRIETARY_CLASS is defined. You should
	  know what you do. Only useful for pre-CCID devices.
	* src/parse.c: - use get_ccid_usb_interface()
	  to also manage USB composite devices (keyboards) - continue
	  parsing even if bDescriptorType == 0xFF (proprietary)
	* src/ccid_usb.h: define
	  get_ccid_usb_interface() only if __USB_H__ is defined (usb.h
	  included)

2004-03-23  rousseau

	* reconf: move the "cp aclocal.m4 build/" after
	  autoreconf

2004-03-22  rousseau

	* reconf: cp aclocal.m4 build/

2004-03-18  rousseau

	* src/ifdhandler.c: Reset action is power off
	  and power on, not just power on

2004-02-27  rousseau

	* README: add C3PO LTC32, SCM Micro SCR 333 and
	  C3PO TLTC2USB in the list of "Should work but untested by me"
	  readers
	* README: alphabetical reordering of readers
	* readers/supported_readers.txt: add SCR 333

2004-02-24  rousseau

	* Makefile.am: use a shorter Perl script to
	  convert generate/convert ChangeLog

2004-02-14  rousseau

	* README: release 0.4.1
	* configure.in: version 0.4.1
	* readers/Makefile.am: distribute SCR331-DI.txt
	  and supported_readers.txt
	* src/Makefile.am: disribute
	  create_Info_plist.pl

2004-02-13  rousseau

	* configure.in: version 0.4.0
	* README: release 0.4.0

2004-02-12  rousseau

	* src/ifdhandler.c: huge rework of CardUp()
	* src/towitoko/protocol_t1.c: return with a
	  error if the received bloc in less than 4 bytes (T=0 error
	  response for example)
	* src/ccid_serial.c,
	  src/ccid_usb.c: fill dwDefaultClock and
	  dwMaxDataRate according to the reader descriptor
	* src/ccid.h: add dwDefaultClock and
	  dwMaxDataRate fields

2004-02-11  rousseau

	* src/ifdhandler.c: Perform PPS and IFSD only
	  if the reader does not do it automatically
	* src/ccid.h: add CCID_CLASS_AUTO_BAUD and
	  CCID_CLASS_AUTO_IFSD
	* src/towitoko/protocol_t1.c: add return code
	  tests in Protocol_T1_Negociate_IFSD()
	* src/towitoko/pps.c,
	  src/towitoko/pps.h: PPS_Exchange() now uses
	  'int lun' instead of 'Protocol_T1 * t1'
	* src/towitoko/protocol_t1.c: remove debug
	  message
	* src/ifdhandler.c: use
	  Protocol_T1_Negociate_IFSD() in CardUp()
	* src/towitoko/protocol_t1.c,
	  src/towitoko/protocol_t1.h: add
	  Protocol_T1_Negociate_IFSD()
	* src/ccid.h: add CCID_CLASS_AUTO_CONF_ATR

2004-02-09  rousseau

	* src/ccid_usb.c: first bSeq is 0 (even if 1
	  works ok)
	* src/ccid_usb.c: usb_reset() the device before
	  usb_close()

2004-02-05  rousseau

	* README: add Silitek SK-3105 keyboard URL

2004-02-04  rousseau

	* src/debug.h: DEBUG_COMM4 was named
	  DEBUG_COMM3 due to cut-n-paste

2004-02-03  rousseau

	* src/ccid_ifdhandler.h,
	  src/ifdhandler.c: add CardUp() and CardDown()
	  for PowerOn and PowerOff actions
	* src/ccid.h,
	  src/ccid_serial.c,
	  src/ccid_usb.c: add dwMaxIFSD field
	* src/debug.h: add DEBUG_COMM3()
	* src/towitoko/pps.c,
	  src/towitoko/protocol_t1.c,
	  src/towitoko/t1_block.c: use my own debug
	  routines
	* readers/SCR331-DI.txt: new file

2004-02-02  rousseau

	* src/towitoko/protocol_t1.c: do not restrict
	  ifsc to Towitoko
	* src/towitoko/protocol_t1.c: remove PPS hack
	* README: add SCR 331-DI in the "should work"
	  list
	* readers/supported_readers.txt,
	  src/Info.plist,
	  src/Makefile.am,
	  src/create_Info_plist.pl: use
	  create_Info_plist.pl to generate the installed Info.plist from
	  an Info.plist template and a list of supported readers.

2004-01-29  rousseau

	* src/ifdhandler.c: removed useless function
	  name in debug messages since we use __FUNCTION__
	* src/ccid_usb.c: - remove device_name[] from
	  struct _usbDevice - use naming scheme usb:vendor/product -
	  simplify (a bit) the code
	* src/ccid_usb.h,
	  src/parse.c: remore *device_name[] argument
	  from get_desc()
	* src/debug.h: add DEBUG_CRITICAL4

2004-01-27  rousseau

	* src/commands.c: set received size to 0 in
	  case of error in CmdXfrBlockTPDU_T1
	* src/commands.c: in case of error exits
	  CCID_Receive() without copying an nonexistent anwser
	* src/ccid_usb.c: use DEBUG_CRITICAL2() instead
	  of DEBUG_CRITICAL()
	* README: add the "Silitek SK-3105 keyboard" in
	  the "Should work but untested by me" list
	* trunk/Drivers/ccid, .cvsignore,
	  aclocal,
	  aclocal/.cvsignore, build,
	  build/.cvsignore, readers,
	  readers/.cvsignore: ignore some build files
	* src, src/.cvsignore,
	  src/towitoko,
	  src/towitoko/.cvsignore: ignore some build
	  files
	* src/Info.plist: add Silitek SK-3105 keyboard
	* src/ccid_usb.c,
	  src/ccid_usb.h: add support of USB devices
	  with multiple interfaces (like the Silitek SK-3105 keyboard)
	* src/ccid_serial.c,
	  src/ccid_serial.h,
	  src/ccid_usb.c,
	  src/ccid_usb.h,
	  src/defs.h,
	  src/ifdhandler.c: add support of
	  IFDHCreateChannelByName

2004-01-22  rousseau

	* src/Makefile.am: move rules for
	  src/protocol_t1/ files in src/Makefile.am to avoid building a
	  (problematic) static library
	* src/towitoko/Makefile.am: removed since rules
	  for src/protocol_t1/ files are in src/Makefile.am

2004-01-15  rousseau

	* src/towitoko/apdu.h: define APDU_Cmd and
	  APDU_Rsp
	* src/towitoko,
	  src/towitoko/Makefile.am,
	  src/towitoko/README,
	  src/towitoko/atr.c,
	  src/towitoko/atr.h,
	  src/towitoko/defines.h,
	  src/towitoko/pps.c,
	  src/towitoko/pps.h,
	  src/towitoko/protocol_t1.c,
	  src/towitoko/protocol_t1.h,
	  src/towitoko/t1_block.c,
	  src/towitoko/t1_block.h: new files from
	  Carlos Prados towitoko-2.0.7 driver (with a bit of hacking)
	* src/Makefile.am: build protocol_t1 library
	* src/commands.c: add SetParameters() CCID
	  command
	* src/ifdhandler.c: add support of T=1 in TPDU
	  mode
	* src/defs.h: add CcidDesc.t1 field
	* src/commands.c,
	  src/commands.h: replace CmdXfrBlockTPDU() by
	  CmdXfrBlockTPDU_T0() and CmdXfrBlockTPDU_T1()
	* src/commands.c: split CmdXfrBlockShortAPDU()
	  in CCID_Transmit() and CCID_Receive()
	* src/ccid_serial.c,
	  src/ccid_usb.c,
	  src/ifdhandler.c: call ccid_open_hack() in
	  IFDHCreateChannel() instead of in each OpenPort()
	* src/ccid.c,
	  src/commands.c,
	  src/commands.h,
	  src/ifdhandler.c: use an (int *) instead of a
	  PDWORD for rx_length argument
	* aclocal,
	  aclocal/Makefile.am,
	  aclocal/acx_pthread.m4: new files. add
	  definition of ACX_PTHREAD macro
	* src/ccid_ifdhandler.h,
	  src/ifdhandler.c: add get_ccid_slot() function
	* src/ccid_serial.c,
	  src/ccid_usb.c,
	  src/ifdhandler.c: remove function name from
	  debug message since __FUNCTION__ is now used in DEBUG_* macro
	  definition
	* src/Info.plist: add ActivCard
	* README: created an "Should work but untested
	  by me" section and add SCM Micro SPR 532 and ActivCard USB
	  reader 2.0

2004-01-08  rousseau

	* README: The crashes under MacOS X were not
	  because of a bug in libusb but because of a bug in pcscd MacOS X
	  hotplug.

2004-01-06  rousseau

	* src/ccid_usb.c: the USB extra field length
	  shall be exactly 54 bytes to be CCID.

2004-01-05  rousseau

	* src/debug.h: also print the function name
	  (__FUNCTION__) in the debug messages
	* src/ccid_usb.c,
	  src/parse.c: add a test on the USB extra
	  field length to avoid a crash and print an error message. This
	  occurs when the reader is _not_ CCID and the CCID driver is used
	  (wrong Info.plist for example).

2003-12-19  rousseau

	* INSTALL, src/Makefile.am:
	  build but do not install the serial ccidtwin driver by default
	  since it is useless on computers without a serial port or
	  without this reader for example.

2003-12-16  rousseau

	* src/ccid_usb.c: read and write timeouts are
	  not symmetric. write timout can be shorter since the reader and
	  card is not supposed to do anything before receiving (write) a
	  command.

2003-12-12  rousseau

	* src/ifdhandler.c: return IFD_NOT_SUPPORTED
	  instead of IFD_SUCCESS in functions doing nothing (yet)
	  (IFDHSetCapabilities, IFDHSetProtocolParameters, IFDHControl);

2003-12-11  rousseau

	* src/ifdhandler.c: set the result buffer
	  length to 0 in IFDHControl()

2003-11-25  rousseau

	* configure.in: do not try to find usb.h and
	  other libusb files if --disable-libusb is used. Needed if you
	  only want to build the serial driver. Thanks to Niki Waibel for
	  the patch.
	* INSTALL, configure.in,
	  src/Makefile.am: add a --enable-ccidtwindir
	  argument to ./configure to specify the serial GemPC Twin
	  installation directory
	* Makefile.am, config.h.in,
	  configure.in, reconf,
	  src/ifdhandler.c: use a updated version of
	  acx_pthread.m4 needed for FreeBSD

2003-11-06  rousseau

	* configure.in: check that the installed libusb
	  implements usb_get_string_simple()

2003-11-04  rousseau

	* README: add SPR 532 in "Supported CCID
	  readers" list
	* README: release 0.3.2
	* configure.in: version 0.3.2
	* src/commands.c: comment out the automatic GET
	  RESPONSE part. I don't think it should be in the driver. Maybe
	  in pcscd instead?

2003-11-03  rousseau

	* readers/Makefile.am: also distribute
	  SPR532.txt

2003-11-01  rousseau

	* Makefile.am: bootstrap is no more distributed
	  (it is no more in CVS either)
	* src/Makefile.am: $(CCID_BUNDLE) is a
	  directory so use 'rm -r' in uninstall_ccid: target

2003-10-31  rousseau

	* src/Makefile.am: modify the hack to compile
	  under MacOSX.
	* reconf: config.guess, config.sub, depcomp and
	  ltmain.sh are in build/ so removed them there.
	* create_distrib.sh: useless since we have a
	  'make dist' rule

2003-10-29  rousseau

	* src/Info.plist: add USB identification for
	  SPR 532
	* readers/SPR532.txt: add SPR 532 description
	  even if it is not a "real" CCID reader.
	* src/parse.c: continue parsing even if
	  bInterfaceSubClass and bInterfaceProtocol are unsupported. This
	  may be the case with non "real" CCID readers.
	* src/parse.c: do not exit if the
	  InterfaceClass is 0xFF (proprietary). It is the case with old
	  readers manufactured before the final release of the CCID specs.

2003-10-28  rousseau

	* src/ccid_usb.c: correctly use the device name
	  in a debug message instead of a not yet initialised field.
	* bootstrap: removed since ./reconf is doing a
	  correct job
	* README: move LTC31 reader from unsupported to
	  supported reader list. It was my fault since in used odd INS
	  byte in my test applet and odd INS bytes are forbidden by ISO
	  7816-4 ch. 5.4.2 Instruction byte. Thanks to Josep Mon&#65533;s
	  Teixidor for pointing the problem.
	* src/commands.c: correct a stupid bug that
	  occurs with an APDU with 2 bytes response.

2003-09-23  rousseau

	* README: release 0.3.1
	* MANIFEST: update file list
	* README: add a note about T=1 cards and
	  readers in TPDU mode

2003-09-22  rousseau

	* src/ccid_ifdhandler.h: define
	  TAG_IFD_THREAD_SAFE introduced in pcsclite-1.2.0-rc3
	* src/ifdhandler.c: add support of thread safe
	  (APDU multiplexing on different readers)
	* src/ccid_serial.c: ReadChunk() realy reads up
	  to min_length bytes. Add some debug messages in the state
	  automata.
	* src/Makefile.am: modify install rules so that
	  root can use them even over NFS where root is nobody
	* config.h.in, configure.in:
	  add --enable-multi-thread for thread safe support
	* Makefile.am, reconf: add
	  reconf file

2003-09-19  rousseau

	* src/ccid_serial.c,
	  src/ccid_serial.h: complete reimplementation
	  of the Twin serial protocol using a finite state automata (code
	  much simpler)

2003-09-16  rousseau

	* configure.in: Put back AC_PROG_CPP, it has
	  nothing to do with C++ but with C preprocessor
	* src/ccid.c: Do not switch to APDU mode since
	  it also swicth in EMV mode and may not work with non EMV cards
	* src/Makefile.am: honor DESTDIR in install
	  rules (closes [ #300110 ])
	* configure.in: remove useless AC_PROG_CPP (no
	  C++ code in ccid driver)
	* configure.in: version 0.3.1
	* INSTALL: document the use of
	  --enable-libusb=PATH
	* configure.in: add --enable-libusb=PATH option

2003-09-10  rousseau

	* README: I forgot to add "support of "time
	  request" from the card."
	* README: release 0.3.0
	* INSTALL: document the use of ./configure
	  script
	* Makefile.am: use ChangeLog instead of
	  ChangeLog.cvs since the dist Makefile target is looking at this
	  file name.
	* src/config.h: config.h is now generated by
	  ./configure
	* Makefile.am, configure.in,
	  readers/Makefile.am: add readers/ in
	  generated .tar.gz archive
	* readers/CardMan3121.txt,
	  readers/GemPC433_SL.txt,
	  readers/GemPCKey.txt,
	  readers/GemPCTwin.txt,
	  readers/LTC31.txt,
	  readers/SCR331.txt,
	  readers/SCR335.txt: use new parse indentation
	  for more readability of supported features
	* config.h.in: new build process using
	  autoconf/automake
	* src/ccid_serial.c,
	  src/ccid_serial.h: manage serial protocol
	  used by the GemPC Twin. Thanks to Niki W. Waibel for a working
	  prototype.
	* src/ccid.c, src/ccid.h:
	  contains common CCID feature for USB and serial (was in ccid_usb
	  before)
	* src/reader.conf.in: used to generate a
	  correct reader.conf with the real library name
	* src/ccid_ifdhandler.h: remove IFDSetEmv()
	  definition. It is now useless.
	* src/ifdhandler.c: use OpenPort instead of
	  OpenUSB. move the complex TPDU management in commands.c (and use
	  it only if reader does not support APDU mode)
	* src/defs.h: transport abstraction: define
	  OpenPort, ClosePort, etc. to OpenSerial or OpenUSB depending on
	  TWIN_SERIAL compilation option
	* src/debug.h: test for PACKAGE and not
	  __CONFIG_H__ since the config.h file is not generated by
	  ./configure
	* src/commands.c,
	  src/commands.h: - support auto voltage at
	  power on if reader support it - support Gemplus proprietary
	  command to switch reader from TPDU to APDU mode - use APDU mode
	  if reader support it. make it easy to support extended APDU but
	  I have no reader to test this.
	* src/ccid_usb.c,
	  src/ccid_usb.h: redesign to separate
	  communication media and CCID protocol. call ccid_open_hack()
	  upon open to do some reader dependent magic.
	* src/parse.c: indent the output with one
	  feature per line (and not on the same line separated by ,)
	* Makefile, src/Makefile,
	  src/check, src/ylwrap: new
	  build process using autoconf/automake
	* src/pcscdefines.h,
	  src/utils.c: use PCSCLITE_MAX_READERS instead
	  of PCSCLITE_MAX_CHANNELS
	* Makefile.am, NEWS,
	  bootstrap, build,
	  build/ylwrap,
	  configure.in,
	  src/Makefile.am: new build process using
	  autoconf/automake

2003-08-27  rousseau

	* MANIFEST, src/Makefile,
	  src/capabilities.c: remove unused
	  capabilities.c file

2003-08-26  rousseau

	* README: release 0.2.0
	* create_distrib.sh: script to create the
	  .tar.gz
	* README: add a note about libusb problem under
	  *BSD
	* src/check: require pcsc-lite 1.2.0 instead of
	  1.1.2
	* README: the reader enumeration problem also
	  exist under GNU/Linux (is not MacOS specific)

2003-08-24  rousseau

	* MANIFEST: remove src/dep_stamp
	* README: add not about bugs/limitations under
	  MacOS X

2003-08-21  rousseau

	* src/parse.c: do not print garbage if we can't
	  get the iManufacturer or iProduct fields

2003-08-20  rousseau

	* src/config.h: comment low level debug messages
	* src/Makefile: use ./ylwrap instead of ylwrap
	* src/check: do not define LDFLAGS since we get
	  it from outside
	* src/Makefile: add needed MacOS X frameworks
	  to LDFLAGS (for parse and check)
	* MANIFEST: add src/ylwrap
	* src/ylwrap: wrapper to call (f)lex
	* MANIFEST: src/parse shall not be distributed
	* src/ccid_usb.c: do not duplicate the
	  Info.plist filename but "calculate" it once
	* src/Makefile: Add support of MacOS X
	* src/Info.plist: use an <array></array> for
	  the alias enumeration

2003-08-14  rousseau

	* src/ccid_usb.c: use a 1 minute USB timeout
	  instead of the 1 second used for debug
	* MANIFEST: include in CVS
	* src/Makefile: remove parse binary in clean
	  target

2003-08-13  rousseau

	* src/Makefile: do not exit with failure if
	  makedepend(1) does not exist
	* INSTALL: Installation and check guide

2003-08-12  rousseau

	* README: release 0.1.0
	* trunk/Drivers/ccid, AUTHORS,
	  COPYING, Makefile,
	  README, readers,
	  readers/CardMan3121.txt,
	  readers/GemPC433_SL.txt,
	  readers/GemPCKey.txt,
	  readers/GemPCTwin.txt,
	  readers/LTC31.txt,
	  readers/SCR331.txt,
	  readers/SCR335.txt, src,
	  src/.dependencies,
	  src/Info.plist,
	  src/Makefile,
	  src/capabilities.c,
	  src/ccid_ifdhandler.h,
	  src/ccid_usb.c,
	  src/ccid_usb.h, src/check,
	  src/commands.c,
	  src/commands.h,
	  src/config.h, src/debug.c,
	  src/debug.h, src/defs.h,
	  src/ifdhandler.c,
	  src/parse.c, src/parser.h,
	  src/pcscdefines.h,
	  src/tokenparser.l,
	  src/utils.c, src/utils.h:
	  Initial revision

