fix: 'hf iclass reader' - do not always turn off device ..

This commit is contained in:
iceman1001 2017-12-17 08:06:12 +01:00
parent 7aaa335ab1
commit 154c30d0e5

View file

@ -1530,7 +1530,7 @@ static void TransmitIClassCommand(const uint8_t *cmd, int len, int *samples, int
FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_ISO14443A | FPGA_HF_ISO14443A_READER_MOD); FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_ISO14443A | FPGA_HF_ISO14443A_READER_MOD);
AT91C_BASE_SSC->SSC_THR = 0x00; AT91C_BASE_SSC->SSC_THR = 0x00;
//SpinDelay(200); //SpinDelay(100);
if (wait) { if (wait) {
if (*wait < 10) *wait = 10; if (*wait < 10) *wait = 10;
@ -1551,7 +1551,7 @@ static void TransmitIClassCommand(const uint8_t *cmd, int len, int *samples, int
c = 0; c = 0;
for(;;) { for (;;) {
WDT_HIT(); WDT_HIT();
@ -1565,7 +1565,7 @@ static void TransmitIClassCommand(const uint8_t *cmd, int len, int *samples, int
c++; c++;
} }
if(sendbyte == 0xff) if (sendbyte == 0xff)
sendbyte = 0xfe; sendbyte = 0xfe;
AT91C_BASE_SSC->SSC_THR = sendbyte; AT91C_BASE_SSC->SSC_THR = sendbyte;
@ -1925,39 +1925,35 @@ void ReaderIClass(uint8_t arg0) {
cmd_send(CMD_ACK, 0, 0, 0, card_data, 0); cmd_send(CMD_ACK, 0, 0, 0, card_data, 0);
out: out:
switch_off(); if ( abort_after_read )
switch_off();
} }
// turn off afterwards // turn off afterwards
void ReaderIClass_Replay(uint8_t arg0, uint8_t *MAC) { void ReaderIClass_Replay(uint8_t arg0, uint8_t *MAC) {
uint16_t crc = 0;
uint8_t cardsize = 0;
uint8_t mem = 0;
uint8_t check[] = { 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
uint8_t read[] = { 0x0c, 0x00, 0x00, 0x00 };
uint8_t card_data[USB_CMD_DATA_SIZE] = {0}; uint8_t card_data[USB_CMD_DATA_SIZE] = {0};
uint16_t block_crc_LUT[255] = {0}; uint16_t block_crc_LUT[255] = {0};
uint8_t resp[ICLASS_BUFFER_SIZE] = {0};
//Generate a lookup table for block crc //Generate a lookup table for block crc
for (int block = 0; block < 255; block++){ for (int block = 0; block < 255; block++){
char bl = block; char bl = block;
block_crc_LUT[block] = iclass_crc16(&bl ,1); block_crc_LUT[block] = iclass_crc16(&bl ,1);
} }
//Dbprintf("Lookup table: %02x %02x %02x" ,block_crc_LUT[0],block_crc_LUT[1],block_crc_LUT[2]);
uint8_t check[] = { 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
uint8_t read[] = { 0x0c, 0x00, 0x00, 0x00 };
uint16_t crc = 0;
uint8_t cardsize = 0;
uint8_t mem = 0;
static struct memory_t{ static struct memory_t{
int k16; int k16;
int book; int book;
int k2; int k2;
int lockauth; int lockauth;
int keyaccess; int keyaccess;
} memory; } memory;
uint8_t resp[ICLASS_BUFFER_SIZE];
setupIclassReader(); setupIclassReader();
@ -2081,8 +2077,9 @@ void iClass_Authentication(uint8_t *MAC) {
uint8_t check[] = { ICLASS_CMD_CHECK, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; uint8_t check[] = { ICLASS_CMD_CHECK, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
uint8_t resp[ICLASS_BUFFER_SIZE]; uint8_t resp[ICLASS_BUFFER_SIZE];
memcpy(check+5, MAC, 4); memcpy(check+5, MAC, 4);
bool isOK;
isOK = sendCmdGetResponseWithRetries(check, sizeof(check), resp, 4, 6); // 6 retries
bool isOK = sendCmdGetResponseWithRetries(check, sizeof(check), resp, 4, 6);
cmd_send(CMD_ACK,isOK,0,0,0,0); cmd_send(CMD_ACK,isOK,0,0,0,0);
} }