Aggorno: con il seguente codice:
Ottengo il seguente output: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"); }
Adesso sarebbe carino capire se sbaglio i comandi inviati alla card con il mio buffer, o meglio cos'è questo: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.
Unknown error: 0x0000006E
Chi ne sapesse qualcosa farebbe cosa mooolto gradita a darmi una dritta..

Rispondi quotando