diff --git a/src/anticol.c b/src/anticol.c
index 7b4a406..47bde31 100644
--- a/src/anticol.c
+++ b/src/anticol.c
@@ -37,6 +37,8 @@ static byte_t abtUid[10];
static uint32_t uiUidLen = 4;
static dev_info* pdi;
+int Quiet= 0;
+
// ISO14443A Anti-Collision Commands
byte_t abtReqa [1] = { 0x26 };
byte_t abtSelectAll [2] = { 0x93,0x20 };
@@ -47,13 +49,21 @@ byte_t abtHalt [4] = { 0x50,0x00,0x57,0xcd };
bool transmit_bits(const byte_t* pbtTx, const uint32_t uiTxBits)
{
// Show transmitted command
- printf("R: "); print_hex_bits(pbtTx,uiTxBits);
+ if(!Quiet)
+ {
+ printf("R: ");
+ print_hex_bits(pbtTx,uiTxBits);
+ }
// Transmit the bit frame command, we don't use the arbitrary parity feature
if (!nfc_initiator_transceive_bits(pdi,pbtTx,uiTxBits,NULL,abtRx,&uiRxBits,NULL)) return false;
// Show received answer
- printf("T: "); print_hex_bits(abtRx,uiRxBits);
+ if(!Quiet)
+ {
+ printf("T: ");
+ print_hex_bits(abtRx,uiRxBits);
+ }
// Succesful transfer
return true;
@@ -63,20 +73,48 @@ bool transmit_bits(const byte_t* pbtTx, const uint32_t uiTxBits)
bool transmit_bytes(const byte_t* pbtTx, const uint32_t uiTxLen)
{
// Show transmitted command
- printf("R: "); print_hex(pbtTx,uiTxLen);
+ if(!Quiet)
+ {
+ printf("R: ");
+ print_hex(pbtTx,uiTxLen);
+ }
// Transmit the command bytes
if (!nfc_initiator_transceive_bytes(pdi,pbtTx,uiTxLen,abtRx,&uiRxLen)) return false;
// Show received answer
- printf("T: "); print_hex(abtRx,uiRxLen);
+ if(!Quiet)
+ {
+ printf("T: ");
+ print_hex(abtRx,uiRxLen);
+ }
// Succesful transfer
return true;
}
-int main(int argc, const char* argv[])
+int main(int argc,char* argv[])
{
+ int i;
+
+ // Get commandline options
+ while ((i= getopt(argc, argv, "hq")) != -1)
+ switch (i)
+ {
+ case 'q':
+ Quiet= 1;
+ break;
+ case 'h':
+ default:
+ printf("\n\tusage:\n");
+ printf("\t\tnfc-anticol [OPTIONS]\n\n");
+ printf("\toptions:\n");
+ printf("\t\t-h\tHelp. Print this message.\n");
+ printf("\t\t-q\tQuiet mode. Suppress output of READER and EMULATOR data (improves timing).\n");
+ printf("\n");
+ return -1;
+ }
+
// Try to open the NFC reader
pdi = nfc_connect();
diff --git a/src/emulate.c b/src/emulate.c
index 346cd61..3c2acb5 100644
--- a/src/emulate.c
+++ b/src/emulate.c
@@ -23,6 +23,7 @@ along with this program. If not, see
#include
#include
#include
+#include
#include "libnfc.h"
@@ -36,20 +37,41 @@ byte_t abtUidBcc [5] = { 0xDE,0xAD,0xBE,0xAF,0x62 };
byte_t abtSak [9] = { 0x08,0xb6,0xdd };
byte_t Tmp [3] = { 0x00,0x00,0x00 };
-int main(int argc, const char* argv[])
+int main(int argc, char *argv[])
{
byte_t* pbtTx = NULL;
uint32_t uiTxBits;
- int i;
+ int i, quiet= 0;
+
+ // Get commandline options
+ while ((i= getopt(argc, argv, "hq")) != -1)
+ switch (i)
+ {
+ case 'q':
+ quiet= 1;
+ break;
+ case 'h':
+ default:
+ printf("\n\tusage:\n");
+ printf("\t\tnfc-emulate [OPTIONS] [UID]\n\n");
+ printf("\toptions:\n");
+ printf("\t\t-h\tHelp. Print this message.\n");
+ printf("\t\t-q\tQuiet mode. Suppress output of READER and EMULATOR data (improves timing).\n");
+ printf("\n");
+ printf("\targs:\n");
+ printf("\t\t[UID]\tThe UID to emulate, specified as 8 HEX digits. Default is DEADBEAF.\n");
+ printf("\n");
+ return -1;
+ }
// See if UID was specified as HEX string
- if(argc == 2 && strlen(argv[1]) == 8)
+ if(argc > 1 && strlen(argv[optind]) == 8)
{
- printf("[+] Using UID: %s",argv[1]);
+ printf("[+] Using UID: %s\n",argv[optind]);
abtUidBcc[4]= 0x00;
for(i= 0; i < 4; ++i)
{
- memcpy(Tmp,argv[1]+i*2,2);
+ memcpy(Tmp,argv[optind]+i*2,2);
abtUidBcc[i]= (byte_t) strtol(Tmp,NULL,16);
abtUidBcc[4] ^= abtUidBcc[i];
}
@@ -93,7 +115,7 @@ int main(int argc, const char* argv[])
pbtTx = abtAtqa;
uiTxBits = 16;
// New anti-collsion session started
- printf("\n");
+ if (!quiet) printf("\n");
break;
case 16: // Select All
@@ -111,16 +133,22 @@ int main(int argc, const char* argv[])
break;
}
- printf("R: ");
- print_hex_bits(abtRecv,uiRecvBits);
+ if(!quiet)
+ {
+ printf("R: ");
+ print_hex_bits(abtRecv,uiRecvBits);
+ }
// Test if we know how to respond
if(uiTxBits)
{
// Send and print the command to the screen
nfc_target_send_bits(pdi,pbtTx,uiTxBits,NULL);
- printf("T: ");
- print_hex_bits(pbtTx,uiTxBits);
+ if(!quiet)
+ {
+ printf("T: ");
+ print_hex_bits(pbtTx,uiTxBits);
+ }
}
}
}
diff --git a/src/relay.c b/src/relay.c
index 771bb6e..032f062 100644
--- a/src/relay.c
+++ b/src/relay.c
@@ -34,8 +34,29 @@ static uint32_t uiTagRxBits;
static dev_info* pdiReader;
static dev_info* pdiTag;
-int main(int argc, const char* argv[])
-{
+int main(int argc,char* argv[])
+{
+ int quiet= 0, i;
+
+ // Get commandline options
+ while ((i= getopt(argc, argv, "hq")) != -1)
+ switch (i)
+ {
+ case 'q':
+ quiet= 1;
+ break;
+ case 'h':
+ default:
+ printf("\n\tusage:\n");
+ printf("\t\tnfc-relay [OPTIONS]\n\n");
+ printf("\toptions:\n");
+ printf("\t\t-h\tHelp. Print this message.\n");
+ printf("\t\t-q\tQuiet mode. Suppress output of READER and EMULATOR data (improves timing).\n");
+ printf("\n");
+ return -1;
+ }
+
+
// Try to open the NFC emulator device
pdiTag = nfc_connect();
if (pdiTag == INVALID_DEVICE_INFO)
@@ -75,14 +96,17 @@ int main(int argc, const char* argv[])
{
// Drop down field for a very short time (original tag will reboot)
nfc_configure(pdiReader,DCO_ACTIVATE_FIELD,false);
- printf("\n");
+ if(!quiet)
+ printf("\n");
nfc_configure(pdiReader,DCO_ACTIVATE_FIELD,true);
}
// Print the reader frame to the screen
- printf("R: ");
- print_hex_par(abtReaderRx,uiReaderRxBits,abtReaderRxPar);
-
+ if(!quiet)
+ {
+ printf("R: ");
+ print_hex_par(abtReaderRx,uiReaderRxBits,abtReaderRxPar);
+ }
// Forward the frame to the original tag
if (nfc_initiator_transceive_bits(pdiReader,abtReaderRx,uiReaderRxBits,abtReaderRxPar,abtTagRx,&uiTagRxBits,abtTagRxPar))
{
@@ -90,8 +114,11 @@ int main(int argc, const char* argv[])
nfc_target_send_bits(pdiTag,abtTagRx,uiTagRxBits,abtTagRxPar);
// Print the tag frame to the screen
- printf("T: ");
- print_hex_par(abtTagRx,uiTagRxBits,abtTagRxPar);
+ if(!quiet)
+ {
+ printf("T: ");
+ print_hex_par(abtTagRx,uiTagRxBits,abtTagRxPar);
+ }
}
}
}