CHG: syntax suger

This commit is contained in:
iceman1001 2016-01-09 17:19:09 +01:00
commit 5cc88edfaf
3 changed files with 51 additions and 56 deletions

View file

@ -94,7 +94,6 @@ static uint64_t cipher_state;
#define rotl64(x, n) ((((u64)(x))<<((n)&63))+(((u64)(x))>>((0-(n))&63))) #define rotl64(x, n) ((((u64)(x))<<((n)&63))+(((u64)(x))>>((0-(n))&63)))
// Single bit Hitag2 functions: // Single bit Hitag2 functions:
#define i4(x,a,b,c,d) ((u32)((((x)>>(a))&1)+(((x)>>(b))&1)*2+(((x)>>(c))&1)*4+(((x)>>(d))&1)*8)) #define i4(x,a,b,c,d) ((u32)((((x)>>(a))&1)+(((x)>>(b))&1)*2+(((x)>>(c))&1)*4+(((x)>>(d))&1)*8))
static const u32 ht2_f4a = 0x2C79; // 0010 1100 0111 1001 static const u32 ht2_f4a = 0x2C79; // 0010 1100 0111 1001
@ -103,7 +102,7 @@ static const u32 ht2_f5c = 0x7907287B; // 0111 1001 0000 0111 0010 1000 0111 101
static u32 _f20 (const u64 x) static u32 _f20 (const u64 x)
{ {
u32 i5; u32 i5;
i5 = ((ht2_f4a >> i4 (x, 1, 2, 4, 5)) & 1)* 1 i5 = ((ht2_f4a >> i4 (x, 1, 2, 4, 5)) & 1)* 1
+ ((ht2_f4b >> i4 (x, 7,11,13,14)) & 1)* 2 + ((ht2_f4b >> i4 (x, 7,11,13,14)) & 1)* 2
@ -116,8 +115,8 @@ static u32 _f20 (const u64 x)
static u64 _hitag2_init (const u64 key, const u32 serial, const u32 IV) static u64 _hitag2_init (const u64 key, const u32 serial, const u32 IV)
{ {
u32 i; u32 i;
u64 x = ((key & 0xFFFF) << 32) + serial; u64 x = ((key & 0xFFFF) << 32) + serial;
for (i = 0; i < 32; i++) for (i = 0; i < 32; i++)
{ {
@ -129,7 +128,7 @@ static u64 _hitag2_init (const u64 key, const u32 serial, const u32 IV)
static u64 _hitag2_round (u64 *state) static u64 _hitag2_round (u64 *state)
{ {
u64 x = *state; u64 x = *state;
x = (x >> 1) + x = (x >> 1) +
((((x >> 0) ^ (x >> 2) ^ (x >> 3) ^ (x >> 6) ((((x >> 0) ^ (x >> 2) ^ (x >> 3) ^ (x >> 6)
@ -153,7 +152,7 @@ static u64 _hitag2_round (u64 *state)
static u32 _hitag2_byte (u64 * x) static u32 _hitag2_byte (u64 * x)
{ {
u32 i, c; u32 i, c;
for (i = 0, c = 0; i < 8; i++) c += (u32) _hitag2_round (x) << (i^7); for (i = 0, c = 0; i < 8; i++) c += (u32) _hitag2_round (x) << (i^7);
return c; return c;

View file

@ -426,10 +426,11 @@ static RAMFUNC int ManchesterDecoding(int v)
Demod.state = DEMOD_UNSYNCD; Demod.state = DEMOD_UNSYNCD;
error = 0x88; error = 0x88;
} }
// TODO: use this error value to print? Ask Holiman.
// 2016-01-08 iceman
} }
error = 0; error = 0;
} }
} }
else { else {

View file

@ -89,43 +89,43 @@ int usage_lf_config(void) {
return 0; return 0;
} }
int usage_lf_simfsk(void) { int usage_lf_simfsk(void) {
PrintAndLog("Usage: lf simfsk [c <clock>] [i] [H <fcHigh>] [L <fcLow>] [d <hexdata>]"); PrintAndLog("Usage: lf simfsk [c <clock>] [i] [H <fcHigh>] [L <fcLow>] [d <hexdata>]");
PrintAndLog("Options: "); PrintAndLog("Options: ");
PrintAndLog(" h This help"); PrintAndLog(" h This help");
PrintAndLog(" c <clock> Manually set clock - can autodetect if using DemodBuffer"); PrintAndLog(" c <clock> Manually set clock - can autodetect if using DemodBuffer");
PrintAndLog(" i invert data"); PrintAndLog(" i invert data");
PrintAndLog(" H <fcHigh> Manually set the larger Field Clock"); PrintAndLog(" H <fcHigh> Manually set the larger Field Clock");
PrintAndLog(" L <fcLow> Manually set the smaller Field Clock"); PrintAndLog(" L <fcLow> Manually set the smaller Field Clock");
//PrintAndLog(" s TBD- -to enable a gap between playback repetitions - default: no gap"); //PrintAndLog(" s TBD- -to enable a gap between playback repetitions - default: no gap");
PrintAndLog(" d <hexdata> Data to sim as hex - omit to sim from DemodBuffer"); PrintAndLog(" d <hexdata> Data to sim as hex - omit to sim from DemodBuffer");
PrintAndLog("\n NOTE: if you set one clock manually set them all manually"); PrintAndLog("\n NOTE: if you set one clock manually set them all manually");
return 0; return 0;
} }
int usage_lf_simask(void) { int usage_lf_simask(void) {
PrintAndLog("Usage: lf simask [c <clock>] [i] [b|m|r] [s] [d <raw hex to sim>]"); PrintAndLog("Usage: lf simask [c <clock>] [i] [b|m|r] [s] [d <raw hex to sim>]");
PrintAndLog("Options: "); PrintAndLog("Options: ");
PrintAndLog(" h This help"); PrintAndLog(" h This help");
PrintAndLog(" c <clock> Manually set clock - can autodetect if using DemodBuffer"); PrintAndLog(" c <clock> Manually set clock - can autodetect if using DemodBuffer");
PrintAndLog(" i invert data"); PrintAndLog(" i invert data");
PrintAndLog(" b sim ask/biphase"); PrintAndLog(" b sim ask/biphase");
PrintAndLog(" m sim ask/manchester - Default"); PrintAndLog(" m sim ask/manchester - Default");
PrintAndLog(" r sim ask/raw"); PrintAndLog(" r sim ask/raw");
PrintAndLog(" s TBD- -to enable a gap between playback repetitions - default: no gap"); PrintAndLog(" s TBD- -to enable a gap between playback repetitions - default: no gap");
PrintAndLog(" d <hexdata> Data to sim as hex - omit to sim from DemodBuffer"); PrintAndLog(" d <hexdata> Data to sim as hex - omit to sim from DemodBuffer");
return 0; return 0;
} }
int usage_lf_simpsk(void) { int usage_lf_simpsk(void) {
PrintAndLog("Usage: lf simpsk [1|2|3] [c <clock>] [i] [r <carrier>] [d <raw hex to sim>]"); PrintAndLog("Usage: lf simpsk [1|2|3] [c <clock>] [i] [r <carrier>] [d <raw hex to sim>]");
PrintAndLog("Options: "); PrintAndLog("Options: ");
PrintAndLog(" h This help"); PrintAndLog(" h This help");
PrintAndLog(" c <clock> Manually set clock - can autodetect if using DemodBuffer"); PrintAndLog(" c <clock> Manually set clock - can autodetect if using DemodBuffer");
PrintAndLog(" i invert data"); PrintAndLog(" i invert data");
PrintAndLog(" 1 set PSK1 (default)"); PrintAndLog(" 1 set PSK1 (default)");
PrintAndLog(" 2 set PSK2"); PrintAndLog(" 2 set PSK2");
PrintAndLog(" 3 set PSK3"); PrintAndLog(" 3 set PSK3");
PrintAndLog(" r <carrier> 2|4|8 are valid carriers: default = 2"); PrintAndLog(" r <carrier> 2|4|8 are valid carriers: default = 2");
PrintAndLog(" d <hexdata> Data to sim as hex - omit to sim from DemodBuffer"); PrintAndLog(" d <hexdata> Data to sim as hex - omit to sim from DemodBuffer");
return 0; return 0;
} }
int usage_lf_find(void){ int usage_lf_find(void){
PrintAndLog("Usage: lf search <0|1> [u]"); PrintAndLog("Usage: lf search <0|1> [u]");
@ -511,16 +511,15 @@ int CmdIndalaClone(const char *Cmd)
int CmdLFSetConfig(const char *Cmd) int CmdLFSetConfig(const char *Cmd)
{ {
uint8_t divisor = 0;//Frequency divisor uint8_t divisor = 0;//Frequency divisor
uint8_t bps = 0; // Bits per sample uint8_t bps = 0; // Bits per sample
uint8_t decimation = 0; //How many to keep uint8_t decimation = 0; //How many to keep
bool averaging = 1; // Defaults to true bool averaging = 1; // Defaults to true
bool errors = FALSE; bool errors = FALSE;
int trigger_threshold =-1;//Means no change int trigger_threshold = -1;//Means no change
uint8_t unsigned_trigg = 0; uint8_t unsigned_trigg = 0;
uint8_t cmdp =0; uint8_t cmdp = 0;
while(param_getchar(Cmd, cmdp) != 0x00) while(param_getchar(Cmd, cmdp) != 0x00)
{ {
switch(param_getchar(Cmd, cmdp)) switch(param_getchar(Cmd, cmdp))
@ -563,22 +562,18 @@ int CmdLFSetConfig(const char *Cmd)
} }
if(errors) break; if(errors) break;
} }
if(cmdp == 0)
{ // No args
errors = 1;// No args if (cmdp == 0) errors = 1;
}
//Validations //Validations
if(errors) if (errors) return usage_lf_config();
{
return usage_lf_config();
}
//Bps is limited to 8, so fits in lower half of arg1 //Bps is limited to 8, so fits in lower half of arg1
if(bps >> 8) bps = 8; if (bps >> 4) bps = 8;
sample_config config = { decimation, bps, averaging, divisor, trigger_threshold };
sample_config config = {
decimation,bps,averaging,divisor,trigger_threshold
};
//Averaging is a flag on high-bit of arg[1] //Averaging is a flag on high-bit of arg[1]
UsbCommand c = {CMD_SET_LF_SAMPLING_CONFIG}; UsbCommand c = {CMD_SET_LF_SAMPLING_CONFIG};
memcpy(c.d.asBytes,&config,sizeof(sample_config)); memcpy(c.d.asBytes,&config,sizeof(sample_config));