PC/SC: add additional flags to indicate readers which are in use and readers which are in exclusive mode.

git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@5015 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
martin 2011-01-02 12:54:51 +00:00
parent d1d64f9dfe
commit c911c2ffeb
2 changed files with 12 additions and 4 deletions

View File

@ -243,8 +243,11 @@ struct sc_reader_driver {
};
/* reader flags */
#define SC_READER_CARD_PRESENT 0x00000001
#define SC_READER_CARD_CHANGED 0x00000002
#define SC_READER_CARD_PRESENT 0x00000001
#define SC_READER_CARD_CHANGED 0x00000002
#define SC_READER_CARD_INUSE 0x00000004
#define SC_READER_CARD_EXCLUSIVE 0x00000008
/* reader capabilities */
#define SC_READER_CAP_DISPLAY 0x00000001
#define SC_READER_CAP_PIN_PAD 0x00000002

View File

@ -308,7 +308,7 @@ static int refresh_attributes(sc_reader_t *reader)
return SC_ERROR_READER_DETACHED;
}
reader->flags &= ~SC_READER_CARD_CHANGED;
reader->flags &= ~(SC_READER_CARD_CHANGED|SC_READER_CARD_INUSE|SC_READER_CARD_EXCLUSIVE);
if (state & SCARD_STATE_PRESENT) {
reader->flags |= SC_READER_CARD_PRESENT;
@ -321,6 +321,12 @@ static int refresh_attributes(sc_reader_t *reader)
reader->atr_len = priv->reader_state.cbAtr;
memcpy(reader->atr, priv->reader_state.rgbAtr, reader->atr_len);
}
/* Is the reader in use by some other application ? */
if (state & SCARD_STATE_INUSE)
reader->flags |= SC_READER_CARD_INUSE;
if (state & SCARD_STATE_EXCLUSIVE)
reader->flags |= SC_READER_CARD_EXCLUSIVE;
if (old_flags & SC_READER_CARD_PRESENT) {
/* Requires pcsc-lite 1.6.5+ to function properly */
@ -342,7 +348,6 @@ static int refresh_attributes(sc_reader_t *reader)
reader->flags &= ~SC_READER_CARD_PRESENT;
if (old_flags & SC_READER_CARD_PRESENT)
reader->flags |= SC_READER_CARD_CHANGED;
}
sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "card %s%s",
reader->flags & SC_READER_CARD_PRESENT ? "present" : "absent",