Second try, Im not gonna attach, instead heres the listed code...
Sorry for long message and thanks for any help.
#include <stdio.h>
#include <stdlib.h>
#include <winscard.h>
#ifndef WIN32
#include <unistd.h>
#endif
/** max ATR size */
#define TAM_ATR 32
/** Handle stuff */
typedef struct _PCSC_HANDLE{
SCARDCONTEXT hContext;
SCARDHANDLE hCard;
DWORD dwProtocol;
} PCSC_HANDLE;
/** card stuff */
typedef struct _CARDS{
LPSTR name;
PCSC_HANDLE handle_card;
SCARD_READERSTATE_A rgReaderStates;
} CARDS;
// function declarations
LONG Connect(CARDS *array_cards);
LONG Verify_State(CARDS *array_cards);
LONG Disconnect(CARDS *array_cards);
// function definitions
LONG Connect(CARDS *array_cards){
LONG rv;
LPSTR mszReaders = NULL; //!< Lista de Grupos
para lista de Leitores
DWORD LBufReaders; //!< Tamanho do buffer
da lista de leitores
DWORD ActiveProtocol;
DWORD dwState; //!< Status do cartao
BYTE ATR[TAM_ATR]; //!< ATR
DWORD lATR = TAM_ATR; //!< Tamanho ATR
printf("connecting\n");
fflush(stdout);
rv = SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL,
&array_cards->handle_card.hContext);
if (rv != SCARD_S_SUCCESS) {
goto end;
}
// Recebendo o tamanho do buffer de leitura
rv = SCardListReaders(array_cards->handle_card.hContext, NULL,
NULL, &LBufReaders);
if (rv != SCARD_S_SUCCESS) {
goto end;
}
// Recebendo a Lista dos Leitores encontrados no sistema
mszReaders = (LPSTR)malloc(sizeof(char)*LBufReaders);
rv = SCardListReaders(array_cards->handle_card.hContext, NULL,
mszReaders, &LBufReaders);
if (rv != SCARD_S_SUCCESS) {
goto end;
}
else {
printf("reader selected: %s\n", mszReaders);
fflush(stdout);
}
array_cards->name = mszReaders;
array_cards->rgReaderStates.dwCurrentState = SCARD_STATE_UNAWARE;
array_cards->rgReaderStates.dwEventState = SCARD_STATE_EMPTY;
// Conexao com o card
rv = SCardConnect(array_cards->handle_card.hContext, mszReaders,
SCARD_SHARE_EXCLUSIVE,
SCARD_PROTOCOL_T0, &(array_cards->handle_card.hCard),
&ActiveProtocol);
if (rv != SCARD_S_SUCCESS) {
goto end;
}
rv = SCardStatus(array_cards->handle_card.hCard, mszReaders, &LBufReaders,
&dwState, &array_cards->handle_card.dwProtocol, ATR, &lATR);
if (rv != SCARD_S_SUCCESS) {
goto end;
}
return rv;
end:
if(mszReaders) {
free(mszReaders);
}
return rv;
}
LONG Verify_State(CARDS *array_cards){
LONG rv;
array_cards->rgReaderStates.szReader = array_cards->name;
printf("reader state : 0x%04lx\n",
array_cards->rgReaderStates.dwCurrentState);
fflush(stdout);
rv = SCardGetStatusChange(array_cards->handle_card.hContext, 0,
&(array_cards->rgReaderStates), 1);
switch(rv){
case SCARD_E_TIMEOUT:
printf("NO changes\n");
fflush(stdout);
break;
case SCARD_S_SUCCESS:
if (array_cards->rgReaderStates.dwEventState & SCARD_STATE_CHANGED){
printf("reader CHANGED state : 0x%04lx\n",
array_cards->rgReaderStates.dwEventState);
fflush(stdout);
}
if (array_cards->rgReaderStates.dwEventState & SCARD_STATE_EMPTY){
printf("reader EMPTY state : 0x%04lx\n",
array_cards->rgReaderStates.dwEventState);
fflush(stdout);
}
if (array_cards->rgReaderStates.dwEventState & SCARD_STATE_PRESENT){
printf("reader PRESENT state: 0x%04lx\n",
array_cards->rgReaderStates.dwEventState);
fflush(stdout);
}
array_cards->rgReaderStates.dwCurrentState =
array_cards->rgReaderStates.dwEventState;
break;
default:
printf("Error: 0x%lx\n", rv);
}
return rv;
}
LONG Disconnect(CARDS *array_cards){
LONG rv;
// Desconecta o cartao
printf("Desconectando o Cartao\n");
rv = SCardDisconnect(array_cards->handle_card.hCard, SCARD_UNPOWER_CARD);
if (rv != SCARD_S_SUCCESS) {
goto end;
}
// Encerra o contexto
rv = SCardReleaseContext(array_cards->handle_card.hContext);
if (rv != SCARD_S_SUCCESS) {
goto end;
}
return 0;
end:
return 1;
}
/** loops, every 2 secs report events */
int main(){
CARDS cartoes[1];
LONG rv;
rv = Connect(&cartoes[0]);
if (rv != SCARD_S_SUCCESS){
printf("Nao foi possivel conectar com o cartao\n");
goto end;
}
while(1){
rv = Verify_State(&cartoes[0]);
#ifdef WIN32
Sleep(2000);
#else
sleep(2);
#endif
}
rv = Disconnect(&cartoes[0]);
if (rv != SCARD_S_SUCCESS){
printf("Nao foi possivel disconectar com o cartao\n");
goto end;
}
return 0;
end:
return 1;
}
_______________________________________________
Muscle mailing list
[email protected]
http://lists.drizzle.com/mailman/listinfo/muscle