mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-08-14 02:26:59 -07:00
lfdemod reduce duplicate code
remove check for best start position in demods and adjust the clock detect to always return best start position to the demods also small bug fix in lf em em4x50read
This commit is contained in:
parent
23f0a7d862
commit
6e98444637
2 changed files with 98 additions and 190 deletions
|
@ -166,6 +166,74 @@ int CmdEM410xWatchnSpoof(const char *Cmd)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int CmdEM410xWrite(const char *Cmd)
|
||||
{
|
||||
uint64_t id = 0xFFFFFFFFFFFFFFFF; // invalid id value
|
||||
int card = 0xFF; // invalid card value
|
||||
unsigned int clock = 0; // invalid clock value
|
||||
|
||||
sscanf(Cmd, "%" PRIx64 " %d %d", &id, &card, &clock);
|
||||
|
||||
// Check ID
|
||||
if (id == 0xFFFFFFFFFFFFFFFF) {
|
||||
PrintAndLog("Error! ID is required.\n");
|
||||
return 0;
|
||||
}
|
||||
if (id >= 0x10000000000) {
|
||||
PrintAndLog("Error! Given EM410x ID is longer than 40 bits.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Check Card
|
||||
if (card == 0xFF) {
|
||||
PrintAndLog("Error! Card type required.\n");
|
||||
return 0;
|
||||
}
|
||||
if (card < 0) {
|
||||
PrintAndLog("Error! Bad card type selected.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Check Clock
|
||||
if (card == 1)
|
||||
{
|
||||
// Default: 64
|
||||
if (clock == 0)
|
||||
clock = 64;
|
||||
|
||||
// Allowed clock rates: 16, 32 and 64
|
||||
if ((clock != 16) && (clock != 32) && (clock != 64)) {
|
||||
PrintAndLog("Error! Clock rate %d not valid. Supported clock rates are 16, 32 and 64.\n", clock);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else if (clock != 0)
|
||||
{
|
||||
PrintAndLog("Error! Clock rate is only supported on T55x7 tags.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (card == 1) {
|
||||
PrintAndLog("Writing %s tag with UID 0x%010" PRIx64 " (clock rate: %d)", "T55x7", id, clock);
|
||||
// NOTE: We really should pass the clock in as a separate argument, but to
|
||||
// provide for backwards-compatibility for older firmware, and to avoid
|
||||
// having to add another argument to CMD_EM410X_WRITE_TAG, we just store
|
||||
// the clock rate in bits 8-15 of the card value
|
||||
card = (card & 0xFF) | (((uint64_t)clock << 8) & 0xFF00);
|
||||
}
|
||||
else if (card == 0)
|
||||
PrintAndLog("Writing %s tag with UID 0x%010" PRIx64, "T5555", id, clock);
|
||||
else {
|
||||
PrintAndLog("Error! Bad card type selected.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
UsbCommand c = {CMD_EM410X_WRITE_TAG, {card, (uint32_t)(id >> 32), (uint32_t)id}};
|
||||
SendCommand(&c);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool EM_EndParityTest(uint8_t *BitStream, size_t size, uint8_t rows, uint8_t cols, uint8_t pType)
|
||||
{
|
||||
if (rows*cols>size) return false;
|
||||
|
@ -300,7 +368,7 @@ int EM4x50Read(const char *Cmd, bool verbose)
|
|||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else tol = clk/8;
|
||||
|
||||
// look for data start - should be 2 pairs of LW (pulses of clk*3,clk*2)
|
||||
start= -1;
|
||||
|
@ -426,74 +494,6 @@ int CmdEM4x50Read(const char *Cmd)
|
|||
return EM4x50Read(Cmd, true);
|
||||
}
|
||||
|
||||
int CmdEM410xWrite(const char *Cmd)
|
||||
{
|
||||
uint64_t id = 0xFFFFFFFFFFFFFFFF; // invalid id value
|
||||
int card = 0xFF; // invalid card value
|
||||
unsigned int clock = 0; // invalid clock value
|
||||
|
||||
sscanf(Cmd, "%" PRIx64 " %d %d", &id, &card, &clock);
|
||||
|
||||
// Check ID
|
||||
if (id == 0xFFFFFFFFFFFFFFFF) {
|
||||
PrintAndLog("Error! ID is required.\n");
|
||||
return 0;
|
||||
}
|
||||
if (id >= 0x10000000000) {
|
||||
PrintAndLog("Error! Given EM410x ID is longer than 40 bits.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Check Card
|
||||
if (card == 0xFF) {
|
||||
PrintAndLog("Error! Card type required.\n");
|
||||
return 0;
|
||||
}
|
||||
if (card < 0) {
|
||||
PrintAndLog("Error! Bad card type selected.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Check Clock
|
||||
if (card == 1)
|
||||
{
|
||||
// Default: 64
|
||||
if (clock == 0)
|
||||
clock = 64;
|
||||
|
||||
// Allowed clock rates: 16, 32 and 64
|
||||
if ((clock != 16) && (clock != 32) && (clock != 64)) {
|
||||
PrintAndLog("Error! Clock rate %d not valid. Supported clock rates are 16, 32 and 64.\n", clock);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else if (clock != 0)
|
||||
{
|
||||
PrintAndLog("Error! Clock rate is only supported on T55x7 tags.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (card == 1) {
|
||||
PrintAndLog("Writing %s tag with UID 0x%010" PRIx64 " (clock rate: %d)", "T55x7", id, clock);
|
||||
// NOTE: We really should pass the clock in as a separate argument, but to
|
||||
// provide for backwards-compatibility for older firmware, and to avoid
|
||||
// having to add another argument to CMD_EM410X_WRITE_TAG, we just store
|
||||
// the clock rate in bits 8-15 of the card value
|
||||
card = (card & 0xFF) | (((uint64_t)clock << 8) & 0xFF00);
|
||||
}
|
||||
else if (card == 0)
|
||||
PrintAndLog("Writing %s tag with UID 0x%010" PRIx64, "T5555", id, clock);
|
||||
else {
|
||||
PrintAndLog("Error! Bad card type selected.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
UsbCommand c = {CMD_EM410X_WRITE_TAG, {card, (uint32_t)(id >> 32), (uint32_t)id}};
|
||||
SendCommand(&c);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int CmdReadWord(const char *Cmd)
|
||||
{
|
||||
int Word = -1; //default to invalid word
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue