cc [ flag... ] file... -lsmartcard [ library...] #include <smartcard/scf.h>
SCF_Status_t SCF_Card_reset(SCF_Card_t card);
card The card (from SCF_Terminal_getCard(3SMARTCARD)) to be reset
The SCF_Card_reset() function causes the specified smartcard to be reset by the terminal.
A card can be reset only if it has not been locked (with SCF_Card_lock(3SMARTCARD)) by another client. A client wishing to reset a card should either first call SCF_Card_lock() to obtain the card lock, or be prepared to retry the reset operation if it fails because another client holds the card lock.
When the card is reset, any SCF_Card_t object representing the card will continue to remain valid after the reset. When the reset occurs, an SCF_EVENT_CARDRESET event will be sent to all registered event listeners for the terminal (assuming they registered for this event). This is the only notification of a reset provided to SCF clients. When a client receives this event, it should be prepared to reinitialize any state on the card that might have been interrupted by the reset. New information about the card (for example, ATR, if it changed) can also be available from SCF_Card_getInfo(3SMARTCARD).
If the card is successfully reset, SCF_STATUS_SUCCESS is returned. Otherwise, the status of the card remains unchanged and an error value is returned.
The SCF_Card_reset() function will fail if:
SCF_STATUS_BADHANDLE The specified card has been closed or is invalid.
SCF_STATUS_CARDLOCKED The card cannot be reset because another client holds a lock on the card.
SCF_STATUS_CARDREMOVED The card cannot be reset because the card represented by the SCF_Card_t has been removed.
SCF_STATUS_COMMERROR The connection to the server was lost.
SCF_STATUS_FAILED An internal error occured.
Example 1: Reset a card.
SCF_Status_t status; SCF_Card_t myCard; /* (...call SCF_Terminal_getCard to open myCard...) */ status = SCF_Card_lock(myCard, SCF_TIMEOUT_MAX); if (status != SCF_STATUS_SUCCESS) exit(1); status = SCF_Card_reset(myCard); if (status != SCF_STATUS_SUCCESS) exit(1); status = SCF_Card_unlock(myCard); if (status != SCF_STATUS_SUCCESS) exit(1); /* ... */
See attributes(5) for descriptions of the following attributes:
|ATTRIBUTE TYPE||ATTRIBUTE VALUE|
libsmartcard(3LIB), SCF_Card_getInfo(3SMARTCARD), SCF_Card_lock(3SMARTCARD), SCF_Terminal_addEventListener(3SMARTCARD), SCF_Terminal_getCard(3SMARTCARD), attributes(5)