get rid of tabs
This commit is contained in:
@@ -752,26 +752,26 @@ static RAMFUNC int Handle14443bSamplesFromTag(int ci, int cq) {
|
||||
// The soft decision on the bit uses an estimate of just the
|
||||
// quadrant of the reference angle, not the exact angle.
|
||||
#define MAKE_SOFT_DECISION() { \
|
||||
if(Demod.sumI > 0) { \
|
||||
v = ci; \
|
||||
} else { \
|
||||
v = -ci; \
|
||||
} \
|
||||
if(Demod.sumQ > 0) { \
|
||||
v += cq; \
|
||||
} else { \
|
||||
v -= cq; \
|
||||
} \
|
||||
}
|
||||
if(Demod.sumI > 0) { \
|
||||
v = ci; \
|
||||
} else { \
|
||||
v = -ci; \
|
||||
} \
|
||||
if(Demod.sumQ > 0) { \
|
||||
v += cq; \
|
||||
} else { \
|
||||
v -= cq; \
|
||||
} \
|
||||
}
|
||||
|
||||
#define SUBCARRIER_DETECT_THRESHOLD 8
|
||||
#define SUBCARRIER_DETECT_THRESHOLD 8
|
||||
// Subcarrier amplitude v = sqrt(ci^2 + cq^2), approximated here by max(abs(ci),abs(cq)) + 1/2*min(abs(ci),abs(cq)))
|
||||
#define AMPLITUDE(ci,cq) (MAX(ABS(ci),ABS(cq)) + (MIN(ABS(ci),ABS(cq))/2))
|
||||
|
||||
switch (Demod.state) {
|
||||
|
||||
case DEMOD_UNSYNCD: {
|
||||
if (AMPLITUDE(ci, cq) > SUBCARRIER_DETECT_THRESHOLD) { // subcarrier detected
|
||||
if (AMPLITUDE(ci, cq) > SUBCARRIER_DETECT_THRESHOLD) { // subcarrier detected
|
||||
Demod.state = DEMOD_PHASE_REF_TRAINING;
|
||||
Demod.sumI = ci;
|
||||
Demod.sumQ = cq;
|
||||
@@ -799,7 +799,7 @@ static RAMFUNC int Handle14443bSamplesFromTag(int ci, int cq) {
|
||||
} else {
|
||||
// at this point it can be start of 14b' data or start of 14b SOF
|
||||
MAKE_SOFT_DECISION();
|
||||
Demod.posCount = 1; // this was the first half
|
||||
Demod.posCount = 1; // this was the first half
|
||||
Demod.thisBit = v;
|
||||
Demod.shiftReg = 0;
|
||||
Demod.state = DEMOD_RECEIVING_DATA;
|
||||
@@ -815,7 +815,7 @@ static RAMFUNC int Handle14443bSamplesFromTag(int ci, int cq) {
|
||||
Demod.posCount++;
|
||||
MAKE_SOFT_DECISION();
|
||||
if (v > 0) {
|
||||
if (Demod.posCount > 3 * 2) { // max 19us between characters = 16 1/fs, max 3 etu after low phase of SOF = 24 1/fs
|
||||
if (Demod.posCount > 3 * 2) { // max 19us between characters = 16 1/fs, max 3 etu after low phase of SOF = 24 1/fs
|
||||
LED_C_OFF();
|
||||
if (Demod.bitCount == 0 && Demod.len == 0) { // received SOF only, this is valid for iClass/Picopass
|
||||
return true;
|
||||
@@ -823,8 +823,8 @@ static RAMFUNC int Handle14443bSamplesFromTag(int ci, int cq) {
|
||||
Demod.state = DEMOD_UNSYNCD;
|
||||
}
|
||||
}
|
||||
} else { // start bit detected
|
||||
Demod.posCount = 1; // this was the first half
|
||||
} else { // start bit detected
|
||||
Demod.posCount = 1; // this was the first half
|
||||
Demod.thisBit = v;
|
||||
Demod.shiftReg = 0;
|
||||
Demod.state = DEMOD_RECEIVING_DATA;
|
||||
@@ -857,14 +857,14 @@ static RAMFUNC int Handle14443bSamplesFromTag(int ci, int cq) {
|
||||
|
||||
MAKE_SOFT_DECISION();
|
||||
|
||||
if (Demod.posCount == 0) { // first half of bit
|
||||
if (Demod.posCount == 0) { // first half of bit
|
||||
Demod.thisBit = v;
|
||||
Demod.posCount = 1;
|
||||
} else { // second half of bit
|
||||
} else { // second half of bit
|
||||
Demod.thisBit += v;
|
||||
|
||||
Demod.shiftReg >>= 1;
|
||||
if (Demod.thisBit > 0) { // logic '1'
|
||||
if (Demod.thisBit > 0) { // logic '1'
|
||||
Demod.shiftReg |= 0x200;
|
||||
}
|
||||
|
||||
|
||||
@@ -1883,112 +1883,112 @@ void LockPassSlixIso15693(uint32_t pass_id, uint32_t password) {
|
||||
|
||||
LED_A_ON();
|
||||
|
||||
uint8_t cmd_inventory[] = {ISO15693_REQ_DATARATE_HIGH | ISO15693_REQ_INVENTORY | ISO15693_REQINV_SLOT1, 0x01, 0x00, 0x00, 0x00 };
|
||||
uint8_t cmd_get_rnd[] = {ISO15693_REQ_DATARATE_HIGH, 0xB2, 0x04, 0x00, 0x00 };
|
||||
uint8_t cmd_set_pass[] = {ISO15693_REQ_DATARATE_HIGH, 0xB3, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
//uint8_t cmd_write_pass[] = {ISO15693_REQ_DATARATE_HIGH | ISO15693_REQ_ADDRESS, 0xB4, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
uint8_t cmd_lock_pass[] = {ISO15693_REQ_DATARATE_HIGH | ISO15693_REQ_ADDRESS, 0xB5, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00 };
|
||||
uint16_t crc;
|
||||
int recvlen = 0;
|
||||
uint8_t recvbuf[ISO15693_MAX_RESPONSE_LENGTH];
|
||||
uint32_t start_time = 0;
|
||||
bool done = false;
|
||||
uint8_t cmd_inventory[] = {ISO15693_REQ_DATARATE_HIGH | ISO15693_REQ_INVENTORY | ISO15693_REQINV_SLOT1, 0x01, 0x00, 0x00, 0x00 };
|
||||
uint8_t cmd_get_rnd[] = {ISO15693_REQ_DATARATE_HIGH, 0xB2, 0x04, 0x00, 0x00 };
|
||||
uint8_t cmd_set_pass[] = {ISO15693_REQ_DATARATE_HIGH, 0xB3, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
//uint8_t cmd_write_pass[] = {ISO15693_REQ_DATARATE_HIGH | ISO15693_REQ_ADDRESS, 0xB4, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
uint8_t cmd_lock_pass[] = {ISO15693_REQ_DATARATE_HIGH | ISO15693_REQ_ADDRESS, 0xB5, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00 };
|
||||
uint16_t crc;
|
||||
int recvlen = 0;
|
||||
uint8_t recvbuf[ISO15693_MAX_RESPONSE_LENGTH];
|
||||
uint32_t start_time = 0;
|
||||
bool done = false;
|
||||
|
||||
// setup 'get random number' command
|
||||
crc = Iso15693Crc(cmd_get_rnd, 3);
|
||||
cmd_get_rnd[3] = crc & 0xff;
|
||||
cmd_get_rnd[4] = crc >> 8;
|
||||
// setup 'get random number' command
|
||||
crc = Iso15693Crc(cmd_get_rnd, 3);
|
||||
cmd_get_rnd[3] = crc & 0xff;
|
||||
cmd_get_rnd[4] = crc >> 8;
|
||||
|
||||
Dbprintf("LockPass: Press button lock password, long-press to terminate.");
|
||||
Dbprintf("LockPass: Press button lock password, long-press to terminate.");
|
||||
|
||||
while (!done) {
|
||||
while (!done) {
|
||||
|
||||
LED_D_ON();
|
||||
switch(BUTTON_HELD(1000)) {
|
||||
case BUTTON_SINGLE_CLICK:
|
||||
Dbprintf("LockPass: Reset 'DONE'-LED (A)");
|
||||
LED_A_OFF();
|
||||
LED_B_OFF();
|
||||
LED_C_OFF();
|
||||
break;
|
||||
case BUTTON_HOLD:
|
||||
Dbprintf("LockPass: Terminating");
|
||||
done = true;
|
||||
break;
|
||||
default:
|
||||
SpinDelay(50);
|
||||
continue;
|
||||
}
|
||||
LED_D_ON();
|
||||
switch(BUTTON_HELD(1000)) {
|
||||
case BUTTON_SINGLE_CLICK:
|
||||
Dbprintf("LockPass: Reset 'DONE'-LED (A)");
|
||||
LED_A_OFF();
|
||||
LED_B_OFF();
|
||||
LED_C_OFF();
|
||||
break;
|
||||
case BUTTON_HOLD:
|
||||
Dbprintf("LockPass: Terminating");
|
||||
done = true;
|
||||
break;
|
||||
default:
|
||||
SpinDelay(50);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (done) [
|
||||
break;
|
||||
}
|
||||
if (done) [
|
||||
break;
|
||||
}
|
||||
|
||||
recvlen = SendDataTag(cmd_get_rnd, sizeof(cmd_get_rnd), true, true, recvbuf, sizeof(recvbuf), start_time);
|
||||
if (recvlen != 5) {
|
||||
LED_C_ON();
|
||||
} else {
|
||||
Dbprintf("LockPass: Received random 0x%02X%02X (%d)", recvbuf[1], recvbuf[2], recvlen);
|
||||
recvlen = SendDataTag(cmd_get_rnd, sizeof(cmd_get_rnd), true, true, recvbuf, sizeof(recvbuf), start_time);
|
||||
if (recvlen != 5) {
|
||||
LED_C_ON();
|
||||
} else {
|
||||
Dbprintf("LockPass: Received random 0x%02X%02X (%d)", recvbuf[1], recvbuf[2], recvlen);
|
||||
|
||||
// setup 'set password' command
|
||||
cmd_set_pass[4] = ((password>>0) &0xFF) ^ recvbuf[1];
|
||||
cmd_set_pass[5] = ((password>>8) &0xFF) ^ recvbuf[2];
|
||||
cmd_set_pass[6] = ((password>>16) &0xFF) ^ recvbuf[1];
|
||||
cmd_set_pass[7] = ((password>>24) &0xFF) ^ recvbuf[2];
|
||||
// setup 'set password' command
|
||||
cmd_set_pass[4] = ((password>>0) &0xFF) ^ recvbuf[1];
|
||||
cmd_set_pass[5] = ((password>>8) &0xFF) ^ recvbuf[2];
|
||||
cmd_set_pass[6] = ((password>>16) &0xFF) ^ recvbuf[1];
|
||||
cmd_set_pass[7] = ((password>>24) &0xFF) ^ recvbuf[2];
|
||||
|
||||
crc = Iso15693Crc(cmd_set_pass, 8);
|
||||
cmd_set_pass[8] = crc & 0xff;
|
||||
cmd_set_pass[9] = crc >> 8;
|
||||
crc = Iso15693Crc(cmd_set_pass, 8);
|
||||
cmd_set_pass[8] = crc & 0xff;
|
||||
cmd_set_pass[9] = crc >> 8;
|
||||
|
||||
Dbprintf("LockPass: Sending old password to end privacy mode", cmd_set_pass[4], cmd_set_pass[5], cmd_set_pass[6], cmd_set_pass[7]);
|
||||
recvlen = SendDataTag(cmd_set_pass, sizeof(cmd_set_pass), false, true, recvbuf, sizeof(recvbuf), start_time);
|
||||
if (recvlen != 3) {
|
||||
Dbprintf("LockPass: Failed to set password (%d)", recvlen);
|
||||
LED_B_ON();
|
||||
} else {
|
||||
crc = Iso15693Crc(cmd_inventory, 3);
|
||||
cmd_inventory[3] = crc & 0xff;
|
||||
cmd_inventory[4] = crc >> 8;
|
||||
Dbprintf("LockPass: Sending old password to end privacy mode", cmd_set_pass[4], cmd_set_pass[5], cmd_set_pass[6], cmd_set_pass[7]);
|
||||
recvlen = SendDataTag(cmd_set_pass, sizeof(cmd_set_pass), false, true, recvbuf, sizeof(recvbuf), start_time);
|
||||
if (recvlen != 3) {
|
||||
Dbprintf("LockPass: Failed to set password (%d)", recvlen);
|
||||
LED_B_ON();
|
||||
} else {
|
||||
crc = Iso15693Crc(cmd_inventory, 3);
|
||||
cmd_inventory[3] = crc & 0xff;
|
||||
cmd_inventory[4] = crc >> 8;
|
||||
|
||||
Dbprintf("LockPass: Searching for tag...");
|
||||
recvlen = SendDataTag(cmd_inventory, sizeof(cmd_inventory), false, true, recvbuf, sizeof(recvbuf), start_time);
|
||||
if (recvlen != 12) {
|
||||
Dbprintf("LockPass: Failed to read inventory (%d)", recvlen);
|
||||
LED_B_ON();
|
||||
LED_C_ON();
|
||||
} else {
|
||||
Dbprintf("LockPass: Searching for tag...");
|
||||
recvlen = SendDataTag(cmd_inventory, sizeof(cmd_inventory), false, true, recvbuf, sizeof(recvbuf), start_time);
|
||||
if (recvlen != 12) {
|
||||
Dbprintf("LockPass: Failed to read inventory (%d)", recvlen);
|
||||
LED_B_ON();
|
||||
LED_C_ON();
|
||||
} else {
|
||||
|
||||
Dbprintf("LockPass: Answer from %02X%02X%02X%02X%02X%02X%02X%02X", recvbuf[9], recvbuf[8], recvbuf[7], recvbuf[6], recvbuf[5], recvbuf[4], recvbuf[3], recvbuf[2]);
|
||||
Dbprintf("LockPass: Answer from %02X%02X%02X%02X%02X%02X%02X%02X", recvbuf[9], recvbuf[8], recvbuf[7], recvbuf[6], recvbuf[5], recvbuf[4], recvbuf[3], recvbuf[2]);
|
||||
|
||||
memcpy(&cmd_lock_pass[3], &recvbuf[2], 8);
|
||||
memcpy(&cmd_lock_pass[3], &recvbuf[2], 8);
|
||||
|
||||
cmd_lock_pass[8+3] = pass_id;
|
||||
cmd_lock_pass[8+3] = pass_id;
|
||||
|
||||
crc = Iso15693Crc(cmd_lock_pass, 8+4);
|
||||
cmd_lock_pass[8+4] = crc & 0xff;
|
||||
cmd_lock_pass[8+5] = crc >> 8;
|
||||
crc = Iso15693Crc(cmd_lock_pass, 8+4);
|
||||
cmd_lock_pass[8+4] = crc & 0xff;
|
||||
cmd_lock_pass[8+5] = crc >> 8;
|
||||
|
||||
Dbprintf("LockPass: locking to password 0x%02X%02X%02X%02X for ID %02X", cmd_set_pass[4], cmd_set_pass[5], cmd_set_pass[6], cmd_set_pass[7], pass_id);
|
||||
Dbprintf("LockPass: locking to password 0x%02X%02X%02X%02X for ID %02X", cmd_set_pass[4], cmd_set_pass[5], cmd_set_pass[6], cmd_set_pass[7], pass_id);
|
||||
|
||||
recvlen = SendDataTag(cmd_lock_pass, sizeof(cmd_lock_pass), false, true, recvbuf, sizeof(recvbuf), start_time);
|
||||
if (recvlen != 3) {
|
||||
Dbprintf("LockPass: Failed to lock password (%d)", recvlen);
|
||||
} else {
|
||||
Dbprintf("LockPass: Successful (%d)", recvlen);
|
||||
}
|
||||
LED_A_ON();
|
||||
}
|
||||
} }
|
||||
}
|
||||
recvlen = SendDataTag(cmd_lock_pass, sizeof(cmd_lock_pass), false, true, recvbuf, sizeof(recvbuf), start_time);
|
||||
if (recvlen != 3) {
|
||||
Dbprintf("LockPass: Failed to lock password (%d)", recvlen);
|
||||
} else {
|
||||
Dbprintf("LockPass: Successful (%d)", recvlen);
|
||||
}
|
||||
LED_A_ON();
|
||||
}
|
||||
} }
|
||||
}
|
||||
|
||||
Dbprintf("LockPass: Finishing");
|
||||
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
|
||||
Dbprintf("LockPass: Finishing");
|
||||
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
|
||||
|
||||
cmd_send(CMD_ACK, recvlen, 0, 0, recvbuf, recvlen);
|
||||
LED_A_OFF();
|
||||
LED_B_OFF();
|
||||
LED_C_OFF();
|
||||
LED_D_OFF();
|
||||
cmd_send(CMD_ACK, recvlen, 0, 0, recvbuf, recvlen);
|
||||
LED_A_OFF();
|
||||
LED_B_OFF();
|
||||
LED_C_OFF();
|
||||
LED_D_OFF();
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
Reference in New Issue
Block a user