nfc-sam: cleanup and Windows support improvements.

This commit is contained in:
Emanuele Bertoldi 2010-07-29 10:18:19 +00:00
parent 5129a37ec8
commit f7e8ec0a95

View file

@ -30,15 +30,24 @@
#include <stdlib.h> #include <stdlib.h>
#include <time.h> #include <time.h>
#ifndef _WIN32
// Needed by sleep() under Unix // Needed by sleep() under Unix
#include <unistd.h> #include <unistd.h>
// FIXME What about sleep() in Windows ? #define sleep sleep
#define SUSP_TIME 1 // secs.
#else
// Needed by Sleep() under Windows
#include <winbase.h>
#define sleep Sleep
#define SUSP_TIME 1000 // msecs.
#endif
#include <nfc/nfc.h> #include <nfc/nfc.h>
#include <nfc/nfc-messages.h> #include <nfc/nfc-messages.h>
#include "nfc-utils.h" #include "nfc-utils.h"
#define MAX_FRAME_LEN 264 #define MAX_FRAME_LEN 264
#define TIMEOUT 60 // secs.
#define NORMAL_MODE 1 #define NORMAL_MODE 1
#define VIRTUAL_CARD_MODE 2 #define VIRTUAL_CARD_MODE 2
@ -48,15 +57,30 @@
bool sam_connection(nfc_device_t* pnd, int mode) bool sam_connection(nfc_device_t* pnd, int mode)
{ {
byte_t pncmd_sam_config[] = { 0xD4,0x14,0x00,0x00 }; byte_t pncmd_sam_config[] = { 0xD4,0x14,0x00,0x00 };
size_t szCmd = 0;
byte_t abtRx[MAX_FRAME_LEN]; byte_t abtRx[MAX_FRAME_LEN];
size_t szRxLen; size_t szRxLen;
// Only the VIRTUAL_CARD_MODE requires 4 bytes.
int size = sizeof(pncmd_sam_config)-((mode == VIRTUAL_CARD_MODE) ? 0 : 1);
pncmd_sam_config[2] = mode; pncmd_sam_config[2] = mode;
if (!pnd->pdc->transceive(pnd->nds,pncmd_sam_config,size,abtRx,&szRxLen)) { switch (mode)
{
case VIRTUAL_CARD_MODE:
{
// Only the VIRTUAL_CARD_MODE requires 4 bytes.
szCmd = sizeof(pncmd_sam_config);
}
break;
default:
{
szCmd = sizeof(pncmd_sam_config)-1;
}
break;
}
if (!pnd->pdc->transceive(pnd->nds,pncmd_sam_config,szCmd,abtRx,&szRxLen)) {
ERR("%s %d", "Unable to execute SAMConfiguration command with mode byte:", mode); ERR("%s %d", "Unable to execute SAMConfiguration command with mode byte:", mode);
return false; return false;
} }
@ -71,10 +95,10 @@ void wait_one_minute()
printf("|"); printf("|");
fflush(stdout); fflush(stdout);
while (secs < 60) while (secs < TIMEOUT)
{ {
sleep(1); sleep(SUSP_TIME);
secs += 1; secs++;
printf("."); printf(".");
fflush(stdout); fflush(stdout);
} }