Parameters

The maximum number or seconds to wait for the desired state to be reached. If the timeout is 0, the function will immediately return SCF_STATUS_TIMEOUT if the terminal or card is not in the desired state. A timeout of SCF_TIMEOUT_MAX can be specified to indicate that the function should never timeout.

Description

These functions determine if a card is currently available in the specified
terminal.

The SCF_Card_waitForCardRemoved() function differs from SCF_Terminal_waitForCardAbsent() in that it checks to see
if a specific card has been removed. If another card (or even
the same card) has since been reinserted, SCF_Card_waitForCardRemoved() will report that the old
card was removed, while the SCF_Terminal_waitForCardAbsent() will instead report that there is
a card present.

If the desired state is already true, the function will immediately return
SCF_STATUS_SUCCESS. Otherwise it will wait for a change to the desired state,
or for the timeout to expire, whichever occurs first.

Unlike an event listener (SCF_Terminal_addEventListener(3SMARTCARD)), these functions return the state of the
terminal, not just events. To use an electronics analogy, event listeners are edge-triggered,
while these functions are level-triggered.

Return Values

If the desired state is reached before the timeout expires, SCF_STATUS_SUCCESS is
returned. If the timeout expires, SCF_STATUS_TIMEOUT is returned. Otherwise, an error value
is returned.

Example 3 Demonstrate the difference between the card-specific and terminal-specific calls.

SCF_Status_t status;
SCF_Terminal_t myTerminal;
SCF_Card_t myCard;
/* (...call SCF_Session_getTerminal to open myTerminal...) */
status = SCF_Terminal_getCard(myTerminal, &myCard);
if (status != SCF_STATUS_SUCCESS) exit(1);
/*
* While we sleep, assume user removes the card
* and inserts another card.
*/
sleep(10);
status = SCF_Terminal_waitForCardAbsent(myTerminal, 0);
/*
* In this case, status is expected to be SCF_STATUS_TIMEOUT, as there
* is a card present.
*/
status = SCF_Card_waitForCardRemoved(myCard, 0);
/*
* In this case, status is expected to be SCF_STATUS_SUCCESS, as the
* card returned from SCF_Terminal_getCard was indeed removed (even
* though another card is currently in the terminal).
*/
/* ... */