Aggorno: con il seguente codice:
codice:
/*
# Linux
PCSC_CFLAGS := $(shell pkg-config --cflags libpcsclite)
LDFLAGS := $(shell pkg-config --libs libpcsclite)
CFLAGS += $(PCSC_CFLAGS)
sample: sample2.c
clean: rm -f sample2
*/
#include <winscard.h>
#include <stdio.h>
#include <stdlib.h>
#include <usb.h>
#include <pcsclite.h>
#define CHECK(f, rv) \
if (SCARD_S_SUCCESS != rv) \
{ \
printf(f ": %s\n", pcsc_stringify_error(rv)); \
return -1; \
}\
if (SCARD_S_SUCCESS == rv)\
{ \
printf(f ": %s\n", pcsc_stringify_error(rv)); \
}
int main (void)
{
SCARDCONTEXT hContext;
SCARDHANDLE hCard;
unsigned long dwActProtocol;
SCARD_IO_REQUEST ioRequest;
DWORD size = 64, SendLen = 6, RecvLen = 255, retCode;
char RecvBuff;
long rv;
DWORD dwRecvLength;
int i;
//Establish PC/SC Connection Ok
printf("\n(1). Establish context :\n");
rv = SCardEstablishContext (SCARD_SCOPE_SYSTEM, NULL, NULL, &hContext);
CHECK("SCardEstablishContext", rv);
//Connect to the reader
printf("(2). Establish connection :\n");
rv = SCardConnect(hContext, "Pertosmart Card Reader 00 00", SCARD_SHARE_DIRECT,SCARD_PROTOCOL_RAW, &hCard, &dwActProtocol);
CHECK("SCardConnect", rv);
//Begin transaction
printf("(3). Begin transaction :\n");
rv = SCardBeginTransaction(hCard);
CHECK("SCardBeginTransaction", rv);
// Manage card by sending 6byte buffer
unsigned char SendBuff[] = {0xFF,0x09,0x00,0x00,0x10};
printf("(4). Send buffer :\n");
rv = SCardControl(hCard, 0x42000001, SendBuff, 5 , &RecvBuff, 255, &dwRecvLength);
CHECK("SCardControl", rv);
printf("%s\n", pcsc_stringify_error(RecvBuff));
//Connect to the reader
printf("(5). release transaction :\n");
rv = SCardEndTransaction( hCard, SCARD_LEAVE_CARD );
CHECK("SCardEndTransaction", rv);
//Disconnect from the reader
printf("(6). Release connection :\n");
rv = SCardDisconnect(hCard, SCARD_UNPOWER_CARD);
CHECK("SCardDisconnect", rv);
//End the established context
printf("(7). Release context :\n");
rv = SCardReleaseContext(hContext);
CHECK("SCardReleaseContext", rv);
printf("\n");
}
Ottengo il seguente output:
codice:
(1). Establish context :
SCardEstablishContext: Command successful.
(2). Establish connection :
SCardConnect: Command successful.
(3). Begin transaction :
SCardBeginTransaction: Command successful.
(4). Send buffer :
SCardControl: Command successful.
Unknown error: 0x0000006E
(5). release transaction :
SCardEndTransaction: Command successful.
(6). Release connection :
SCardDisconnect: Command successful.
(7). Release context :
SCardReleaseContext: Command successful.
Adesso sarebbe carino capire se sbaglio i comandi inviati alla card con il mio buffer, o meglio cos'è questo:
Unknown error: 0x0000006E
Chi ne sapesse qualcosa farebbe cosa mooolto gradita a darmi una dritta..