Chipcard::PCSC (3)
Leading comments
Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35) Standard preamble: ========================================================================
NAME
Chipcard::PCSC - Smart card reader interface librarySYNOPSIS
my $hContext = new Chipcard::PCSC(); @ReadersList = $hContext->ListReaders (); $hContext->GetStatusChange(\@readers_states, $timeout); $apdu = Chipcard::PCSC::array_to_ascii(@apdu); @apdu = Chipcard::PCSC::ascii_to_array($apdu); $hContext = undef;
DESCRIPTION
The
A
A
CONSTRUCTORS
The following methods can be used to construct a- *
-
$hContext = new Chipcard::PCSC($scope, $remote_host);
-
- *
-
$scope is the scope of the connection to the PC/SCdaemon. It can be any of the following:
$Chipcard::PCSC::SCARD_SCOPE_USER (not used by PCSClite); $Chipcard::PCSC::SCARD_SCOPE_TERMINAL (not used by PCSClite); $Chipcard::PCSC::SCARD_SCOPE_SYSTEM Services on the local machine; $Chipcard::PCSC::SCARD_SCOPE_GLOBAL Services on a remote host.
- *
- $remote_host is the host name of the remote machine to contact. It is only used when $scope is equal to $Chipcard::PCSC::SCARD_SCOPE_GLOBAL. A null value means localhost.
-
- *
-
$hContext = new Chipcard::PCSC($scope);
This method is equivalent to:
$hContext = new Chipcard::PCSC($scope, 0);
- *
-
$hContext = new Chipcard::PCSC();
This method is equivalent to:
$hContext = new Chipcard::PCSC($Chipcard::PCSC::SCARD_SCOPE_SYSTEM, 0);
CONSTRUCTION FAILURE
Chipcard::PCSC constructors return an "undef" value when the object can not be created. $Chipcard::PCSC::errno can be used to get more information about the error. (See section ``Chipcard::PCSC METHODS
Here is a list of all the methods that can be used with a- *
-
hContext->ListReaders( $group );
This method returns the available readers in the given $group. If omitted, $group defaults to a null value meaning ``all groups''. Please note that as of this writing, $group can safely be omitted as it is not used by PCSClite.
The return value upon successful completion is an array of strings: one string by available reader. If an error occurred, the undef value is returned and $Chipcard::PCSC::errno should be used to get more information about the error. (See section ``
ERROR HANDLING''below for more information). The following example describes the use of ListReaders:$hContext = new Chipcard::PCSC(); die ("Can't create the PCSC object: $Chipcard::PCSC::errno\n") unless (defined $hContext); @ReadersList = $hContext->ListReaders (); die ("Can't get readers' list: $Chipcard::PCSC::errno\n") unless (defined($ReadersList[0])); $, = "\n "; print @ReadersList . "\n";
- *
-
$hContext->GetStatusChange(\@readers_states, $timeout);
The method "$hContext->GetStatusChange(\@readers_states, $timeout)" uses a reference to a list of hashes.
# create the list or readers to watch map { push @readers_states, ({'reader_name'=>"$_"}) } @ReadersList; @StatusResult = $hContext->GetStatusChange(\@readers_states);
The keys of the hash are: 'reader_name', 'current_state', 'event_state' and '
ATR'.To detect a status change you have to first get the status and then copy the 'event_state' in the 'current_state'. The method will return when both states are different or a timeout occurs.
@StatusResult = $hContext->GetStatusChange(\@readers_states); foreach $reader (@readers_states) { $reader->{current_state} = $reader->{event_state}; } @StatusResult = $hContext->GetStatusChange(\@readers_states);
- *
-
$hContext->GetStatusChange(\@readers_states);
This method is equivalent to:
$hContext->GetStatusChange(\@readers_states, 0xFFFFFFFF);
The timeout is set to infinite.
- *
-
$apdu_ref = Chipcard::PCSC::ascii_to_array($apdu);
The method "Chipcard::PCSC::Card::Transmit()" uses references to arrays as in and out parameters. The "Chipcard::PCSC::ascii_to_array()" is used to transform an
APDUinASCIIformat to a reference to an array in the good format.Example:
$SendData = Chipcard::PCSC::ascii_to_array("00 A4 01 00 02 01 00");
- *
-
$apdu = Chipcard::PCSC::array_to_ascii($apdu_ref);
This method is used to convert the result of a "Chipcard::PCSC::Card::Transmit()" into
ASCIIformat.Example:
$RecvData = $hCard->Transmit($SendData); print Chipcard::PCSC::array_to_ascii($RecvData);
ERROR HANDLING
All functions fromIt is a double-typed magical variable that behaves just like $!. This means that it both holds a numerical value describing the error and the corresponding string. The numerical value may change from a system to another as it depends on the
Here is a small example of how to use it:
$hContext = new Chipcard::PCSC(); die ("Can't create the PCSC object: $Chipcard::PCSC::errno\n") unless (defined $hContext);
In case the last call was successful, $Chipcard::PCSC::errno contains the "SCARD_S_SUCCESS" status. Here is a list of all possible error codes. They are defined as read-only variables with in the
$Chipcard::PCSC::SCARD_S_SUCCESS $Chipcard::PCSC::SCARD_E_CANCELLED $Chipcard::PCSC::SCARD_E_CANT_DISPOSE $Chipcard::PCSC::SCARD_E_CARD_UNSUPPORTED $Chipcard::PCSC::SCARD_E_DUPLICATE_READER $Chipcard::PCSC::SCARD_E_INSUFFICIENT_BUFFER $Chipcard::PCSC::SCARD_E_INVALID_ATR $Chipcard::PCSC::SCARD_E_INVALID_HANDLE $Chipcard::PCSC::SCARD_E_INVALID_PARAMETER $Chipcard::PCSC::SCARD_E_INVALID_TARGET $Chipcard::PCSC::SCARD_E_INVALID_VALUE $Chipcard::PCSC::SCARD_E_NO_MEMORY $Chipcard::PCSC::SCARD_E_NO_SERVICE $Chipcard::PCSC::SCARD_E_NO_SMARTCARD $Chipcard::PCSC::SCARD_E_NOT_READY $Chipcard::PCSC::SCARD_E_NOT_TRANSACTED $Chipcard::PCSC::SCARD_E_PCI_TOO_SMALL $Chipcard::PCSC::SCARD_E_PROTO_MISMATCH $Chipcard::PCSC::SCARD_E_READER_UNAVAILABLE $Chipcard::PCSC::SCARD_E_READER_UNSUPPORTED $Chipcard::PCSC::SCARD_E_SERVICE_STOPPED $Chipcard::PCSC::SCARD_E_SHARING_VIOLATION $Chipcard::PCSC::SCARD_E_SYSTEM_CANCELLED $Chipcard::PCSC::SCARD_E_TIMEOUT $Chipcard::PCSC::SCARD_E_UNKNOWN_CARD $Chipcard::PCSC::SCARD_E_UNKNOWN_READER $Chipcard::PCSC::SCARD_E_UNSUPPORTED_FEATURE $Chipcard::PCSC::SCARD_W_REMOVED_CARD $Chipcard::PCSC::SCARD_W_RESET_CARD $Chipcard::PCSC::SCARD_W_UNPOWERED_CARD $Chipcard::PCSC::SCARD_W_UNRESPONSIVE_CARD $Chipcard::PCSC::SCARD_W_UNSUPPORTED_CARD
PCSClite users will also be able to use the following (PCSClite specific) codes:
$Chipcard::PCSC::SCARD_INSERTED $Chipcard::PCSC::SCARD_REMOVED $Chipcard::PCSC::SCARD_RESET $Chipcard::PCSC::SCARD_SCOPE_GLOBAL
In addition, the wrapper defines:
$Chipcard::PCSC::SCARD_P_ALREADY_CONNECTED $Chipcard::PCSC::SCARD_P_NOT_CONNECTED
SEE ALSO
pcscd(1) manpage has useful information aboutCOPYRIGHT
(C) LionelAUTHORS / ACKNOWLEDGEMENT
Lionel VICTOR <lionel.victor@unforgettable.com> <lionel.victor@free.fr> Ludovic ROUSSEAU <ludovic.rousseau@free.fr>