make style

This commit is contained in:
Philippe Teuwen 2020-10-11 22:40:05 +02:00
commit 55fa5e7c35
15 changed files with 215 additions and 212 deletions

View file

@ -135,35 +135,35 @@ static hf14a_config hf14aconfig = { 0, 0, 0, 0, 0 } ;
void printHf14aConfig(void) { void printHf14aConfig(void) {
DbpString(_CYAN_("HF 14a config")); DbpString(_CYAN_("HF 14a config"));
Dbprintf(" [a] Anticol override....%i %s%s%s", Dbprintf(" [a] Anticol override....%i %s%s%s",
hf14aconfig.forceanticol, hf14aconfig.forceanticol,
(hf14aconfig.forceanticol == 0) ? "( " _GREEN_("No") " ) follow standard " : "", (hf14aconfig.forceanticol == 0) ? "( " _GREEN_("No") " ) follow standard " : "",
(hf14aconfig.forceanticol == 1) ? "( " _RED_("Yes") " ) always do anticol" : "", (hf14aconfig.forceanticol == 1) ? "( " _RED_("Yes") " ) always do anticol" : "",
(hf14aconfig.forceanticol == 2) ? "( " _RED_("Yes") " ) always skip anticol" : "" (hf14aconfig.forceanticol == 2) ? "( " _RED_("Yes") " ) always skip anticol" : ""
); );
Dbprintf(" [b] BCC override........%i %s%s%s", Dbprintf(" [b] BCC override........%i %s%s%s",
hf14aconfig.forcebcc, hf14aconfig.forcebcc,
(hf14aconfig.forcebcc == 0) ? "( " _GREEN_("No") " ) follow standard" : "", (hf14aconfig.forcebcc == 0) ? "( " _GREEN_("No") " ) follow standard" : "",
(hf14aconfig.forcebcc == 1) ? "( " _RED_("Yes") " ) always do CL2" : "", (hf14aconfig.forcebcc == 1) ? "( " _RED_("Yes") " ) always do CL2" : "",
(hf14aconfig.forcebcc == 2) ? "( " _RED_("Yes") " ) always use card BCC" : "" (hf14aconfig.forcebcc == 2) ? "( " _RED_("Yes") " ) always use card BCC" : ""
); );
Dbprintf(" [2] CL2 override........%i %s%s%s", Dbprintf(" [2] CL2 override........%i %s%s%s",
hf14aconfig.forcecl2, hf14aconfig.forcecl2,
(hf14aconfig.forcecl2 == 0) ? "( " _GREEN_("No") " ) follow standard" : "", (hf14aconfig.forcecl2 == 0) ? "( " _GREEN_("No") " ) follow standard" : "",
(hf14aconfig.forcecl2 == 1) ? "( " _RED_("Yes") " ) always do CL2" : "", (hf14aconfig.forcecl2 == 1) ? "( " _RED_("Yes") " ) always do CL2" : "",
(hf14aconfig.forcecl2 == 2) ? "( " _RED_("Yes") " ) always skip CL2" : "" (hf14aconfig.forcecl2 == 2) ? "( " _RED_("Yes") " ) always skip CL2" : ""
); );
Dbprintf(" [3] CL3 override........%i %s%s%s", Dbprintf(" [3] CL3 override........%i %s%s%s",
hf14aconfig.forcecl3, hf14aconfig.forcecl3,
(hf14aconfig.forcecl3 == 0) ? "( " _GREEN_("No") " ) follow standard" : "", (hf14aconfig.forcecl3 == 0) ? "( " _GREEN_("No") " ) follow standard" : "",
(hf14aconfig.forcecl3 == 1) ? "( " _RED_("Yes") " ) always do CL3" : "", (hf14aconfig.forcecl3 == 1) ? "( " _RED_("Yes") " ) always do CL3" : "",
(hf14aconfig.forcecl3 == 2) ? "( " _RED_("Yes") " ) always skip CL3" : "" (hf14aconfig.forcecl3 == 2) ? "( " _RED_("Yes") " ) always skip CL3" : ""
); );
Dbprintf(" [r] RATS override.......%i %s%s%s", Dbprintf(" [r] RATS override.......%i %s%s%s",
hf14aconfig.forcerats, hf14aconfig.forcerats,
(hf14aconfig.forcerats == 0) ? "( " _GREEN_("No") " q follow standard " : "", (hf14aconfig.forcerats == 0) ? "( " _GREEN_("No") " q follow standard " : "",
(hf14aconfig.forcerats == 1) ? "( " _RED_("Yes") " ) always do RATS" : "", (hf14aconfig.forcerats == 1) ? "( " _RED_("Yes") " ) always do RATS" : "",
(hf14aconfig.forcerats == 2) ? "( " _RED_("Yes") " ) always skip RATS" : "" (hf14aconfig.forcerats == 2) ? "( " _RED_("Yes") " ) always skip RATS" : ""
); );
} }
/** /**

View file

@ -20,7 +20,7 @@
void SpinDelay(int ms); void SpinDelay(int ms);
void SpinDelayUs(int us); void SpinDelayUs(int us);
void SpinDelayUsPrecision(int us); // precision 0.6us , running for 43ms before void SpinDelayUsPrecision(int us); // precision 0.6us , running for 43ms before
void StartTickCount(void); void StartTickCount(void);
uint32_t RAMFUNC GetTickCount(void); uint32_t RAMFUNC GetTickCount(void);

View file

@ -51,18 +51,18 @@ local function main(args)
--[[ --[[
Basically do the following, Basically do the following,
1. hw tear 1. hw tear
2. lf em 4x05_write 2. lf em 4x05_write
3. lf em 4x05_read 3. lf em 4x05_read
The first two commands doesn't need a feedback from the system, so going with core.console commands. The first two commands doesn't need a feedback from the system, so going with core.console commands.
Since the read needs demodulation of signal I opted to add that function from cmdlfem4x.c to the core lua scripting Since the read needs demodulation of signal I opted to add that function from cmdlfem4x.c to the core lua scripting
core.em4x05_read(addr, password) core.em4x05_read(addr, password)
--]] --]]
local n, addr, password, sd, ed, wr_value, rd_value local n, addr, password, sd, ed, wr_value, rd_value
for o, a in getopt.getopt(args, 'he:s:a:p:n:r:w:') do for o, a in getopt.getopt(args, 'he:s:a:p:n:r:w:') do
if o == 'h' then return help() end if o == 'h' then return help() end
if o == 'n' then n = a end if o == 'n' then n = a end
@ -85,7 +85,7 @@ local function main(args)
if #password ~= 8 then if #password ~= 8 then
password = '' password = ''
end end
if #wr_value ~= 8 then if #wr_value ~= 8 then
wr_value = 'FFFFFFFF' wr_value = 'FFFFFFFF'
end end
@ -93,11 +93,11 @@ local function main(args)
if #rd_value ~= 8 then if #rd_value ~= 8 then
rd_value = 'FFFFFFFF' rd_value = 'FFFFFFFF'
end end
if sd > ed then if sd > ed then
return oops('start delay can\'t be larger than end delay', sd, ed) return oops('start delay can\'t be larger than end delay', sd, ed)
end end
print('Starting EM4x05 tear off') print('Starting EM4x05 tear off')
print('target addr', addr) print('target addr', addr)
if password then if password then
@ -107,25 +107,25 @@ local function main(args)
print('target delay', sd ,ed) print('target delay', sd ,ed)
print('read value', rd_value) print('read value', rd_value)
print('write value', wr_value) print('write value', wr_value)
local res_tear = 0 local res_tear = 0
local res_nowrite = 0 local res_nowrite = 0
local set_tearoff_delay = 'hw tearoff --delay %d' local set_tearoff_delay = 'hw tearoff --delay %d'
local enable_tearoff = 'hw tearoff --on' local enable_tearoff = 'hw tearoff --on'
local wr_template = 'lf em 4x05_write %s %s %s' local wr_template = 'lf em 4x05_write %s %s %s'
-- init addr to value -- init addr to value
core.console(wr_template:format(addr, wr_value, password)) core.console(wr_template:format(addr, wr_value, password))
if sd == ed then if sd == ed then
ed = n ed = n
n = 0 n = 0
end end
for step = sd, ed, n do for step = sd, ed, n do
io.flush() io.flush()
if core.kbd_enter_pressed() then if core.kbd_enter_pressed() then
print("aborted by user") print("aborted by user")
@ -139,11 +139,11 @@ local function main(args)
c = wr_template:format(addr, wr_value, password) c = wr_template:format(addr, wr_value, password)
core.console(c) core.console(c)
end end
local c = set_tearoff_delay:format(step) local c = set_tearoff_delay:format(step)
core.console(c); core.console(c);
core.console(enable_tearoff) core.console(enable_tearoff)
c = wr_template:format(addr, wr_value, password) c = wr_template:format(addr, wr_value, password)
core.console(c) core.console(c)
@ -151,7 +151,7 @@ local function main(args)
if err then if err then
return oops(err) return oops(err)
end end
local wordstr = ('%08X'):format(word) local wordstr = ('%08X'):format(word)
if wordstr ~= wr_value then if wordstr ~= wr_value then

View file

@ -57,7 +57,7 @@ local function exit_msg()
print('') print('')
print('================= '..ansicolors.green..'verify with'..ansicolors.reset..' =================') print('================= '..ansicolors.green..'verify with'..ansicolors.reset..' =================')
print(' lf em 4x05_dump') print(' lf em 4x05_dump')
print('===============================================') print('===============================================')
return nil return nil
end end
@ -70,18 +70,18 @@ local function main(args)
--[[ --[[
Basically it does the following, Basically it does the following,
1. hw tear 1. hw tear
2. lf em 4x05_write 2. lf em 4x05_write
3. lf em 4x05_read 3. lf em 4x05_read
The first two commands dont need a feedback from the system, so going with core.console commands. The first two commands dont need a feedback from the system, so going with core.console commands.
Since the read needs demodulation of signal I opted to add that function from cmdlfem4x.c to the core lua scripting Since the read needs demodulation of signal I opted to add that function from cmdlfem4x.c to the core lua scripting
core.em4x05_read(addr, password) core.em4x05_read(addr, password)
--]] --]]
local n, password, sd, ed local n, password, sd, ed
for o, a in getopt.getopt(args, 'he:s:p:n:') do for o, a in getopt.getopt(args, 'he:s:p:n:') do
if o == 'h' then return help() end if o == 'h' then return help() end
if o == 'n' then n = tonumber(a) end if o == 'n' then n = tonumber(a) end
@ -94,7 +94,7 @@ local function main(args)
if #password ~= 8 then if #password ~= 8 then
password = '' password = ''
end end
local word14, err14 = core.em4x05_read(14, password) local word14, err14 = core.em4x05_read(14, password)
if err14 then if err14 then
return oops(err14) return oops(err14)
@ -143,11 +143,11 @@ local function main(args)
print('target delay', sd ,ed) print('target delay', sd ,ed)
print('read value', rd_value) print('read value', rd_value)
print('write value', wr_value) print('write value', wr_value)
print('==========================================') print('==========================================')
local res_tear = 0 local res_tear = 0
local res_nowrite = 0 local res_nowrite = 0
-- fix at one specific delay -- fix at one specific delay
if sd == ed then if sd == ed then
n = 0 n = 0
@ -157,7 +157,7 @@ local function main(args)
local soon = 0 local soon = 0
local late = 0 local late = 0
while sd <= ed do while sd <= ed do
if auto and n < 1 then -- n is a float if auto and n < 1 then -- n is a float
print('[!] Reached n < 1 => '..ansicolors.yellow..'disabling automatic mode'..ansicolors.reset) print('[!] Reached n < 1 => '..ansicolors.yellow..'disabling automatic mode'..ansicolors.reset)
ed = sd ed = sd
@ -181,7 +181,7 @@ local function main(args)
soon = 0 soon = 0
late = 0 late = 0
end end
io.flush() io.flush()
if core.kbd_enter_pressed() then if core.kbd_enter_pressed() then
print("aborted by user") print("aborted by user")
@ -200,16 +200,16 @@ local function main(args)
if err14 then if err14 then
return oops(err14) return oops(err14)
end end
local wordstr14 = ('%08X'):format(word14) local wordstr14 = ('%08X'):format(word14)
word15, err15 = core.em4x05_read(15, password) word15, err15 = core.em4x05_read(15, password)
if err15 then if err15 then
return oops(err15) return oops(err15)
end end
local wordstr15 = ('%08X'):format(word15) local wordstr15 = ('%08X'):format(word15)
print(('[=] ref:'..rd_value..' 14:%08X 15:%08X '):format(word14, word15)) print(('[=] ref:'..rd_value..' 14:%08X 15:%08X '):format(word14, word15))

View file

@ -635,7 +635,7 @@ static int Cmdaskmandemod(const char *Cmd) {
st = true; st = true;
Cmd += 2; Cmd += 2;
} }
char amp = tolower(param_getchar(Cmd, 0)); char amp = tolower(param_getchar(Cmd, 0));
sscanf(Cmd, "%i %i %i %zu %c", &clk, &invert, &maxErr, &maxLen, &amp); sscanf(Cmd, "%i %i %i %zu %c", &clk, &invert, &maxErr, &maxLen, &amp);
@ -992,7 +992,7 @@ static int CmdDecimate(const char *Cmd) {
"Performs decimation, by reducing samples N times in the grapbuf. Good for PSK\n", "Performs decimation, by reducing samples N times in the grapbuf. Good for PSK\n",
"data decimate\n" "data decimate\n"
"data decimate 4" "data decimate 4"
); );
void *argtable[] = { void *argtable[] = {
arg_param_begin, arg_param_begin,
@ -1001,11 +1001,11 @@ static int CmdDecimate(const char *Cmd) {
}; };
CLIExecWithReturn(ctx, Cmd, argtable, true); CLIExecWithReturn(ctx, Cmd, argtable, true);
int n = arg_get_int_def(ctx, 1, 2); int n = arg_get_int_def(ctx, 1, 2);
CLIParserFree(ctx); CLIParserFree(ctx);
for (size_t i = 0; i < (GraphTraceLen / n); ++i) for (size_t i = 0; i < (GraphTraceLen / n); ++i)
GraphBuffer[i] = GraphBuffer[i * n]; GraphBuffer[i] = GraphBuffer[i * n];
GraphTraceLen /= n; GraphTraceLen /= n;
PrintAndLogEx(SUCCESS, "decimated by " _GREEN_("%u"), n); PrintAndLogEx(SUCCESS, "decimated by " _GREEN_("%u"), n);
RepaintGraphWindow(); RepaintGraphWindow();
@ -1024,7 +1024,7 @@ static int CmdUndecimate(const char *Cmd) {
"Performs un-decimation, by repeating each sample N times in the graphbuf", "Performs un-decimation, by repeating each sample N times in the graphbuf",
"data undecimate\n" "data undecimate\n"
"data undecimate 4\n" "data undecimate 4\n"
); );
void *argtable[] = { void *argtable[] = {
arg_param_begin, arg_param_begin,
@ -1033,7 +1033,7 @@ static int CmdUndecimate(const char *Cmd) {
}; };
CLIExecWithReturn(ctx, Cmd, argtable, true); CLIExecWithReturn(ctx, Cmd, argtable, true);
int factor = arg_get_int_def(ctx, 1, 2); int factor = arg_get_int_def(ctx, 1, 2);
CLIParserFree(ctx); CLIParserFree(ctx);
//We have memory, don't we? //We have memory, don't we?
int swap[MAX_GRAPH_TRACE_LEN] = {0}; int swap[MAX_GRAPH_TRACE_LEN] = {0};
@ -1042,9 +1042,9 @@ static int CmdUndecimate(const char *Cmd) {
int count = 0; int count = 0;
for (count = 0; count < factor && s_index + count < MAX_GRAPH_TRACE_LEN; count++) { for (count = 0; count < factor && s_index + count < MAX_GRAPH_TRACE_LEN; count++) {
swap[s_index + count] = ( swap[s_index + count] = (
(double)(factor - count) / (factor - 1)) * GraphBuffer[g_index] + (double)(factor - count) / (factor - 1)) * GraphBuffer[g_index] +
((double)count / factor) * GraphBuffer[g_index + 1] ((double)count / factor) * GraphBuffer[g_index + 1]
; ;
} }
s_index += count; s_index += count;
g_index++; g_index++;
@ -1701,7 +1701,7 @@ int CmdTuneSamples(const char *Cmd) {
// Q measure with Q=f/delta_f // Q measure with Q=f/delta_f
double v_3db_scaled = (double)(package->peak_v * 0.707) / 512; // /512 == >>9 double v_3db_scaled = (double)(package->peak_v * 0.707) / 512; // /512 == >>9
uint32_t s2=0, s4=0; uint32_t s2 = 0, s4 = 0;
for (int i = 1; i < 256; i++) { for (int i = 1; i < 256; i++) {
if ((s2 == 0) && (package->results[i] > v_3db_scaled)) { if ((s2 == 0) && (package->results[i] > v_3db_scaled)) {
s2 = i; s2 = i;
@ -1715,10 +1715,10 @@ int CmdTuneSamples(const char *Cmd) {
if (s4 != 0) { // we got all our points of interest if (s4 != 0) { // we got all our points of interest
double a = package->results[s2 - 1]; double a = package->results[s2 - 1];
double b = package->results[s2]; double b = package->results[s2];
double f1 = LF_DIV2FREQ(s2 - 1 + (v_3db_scaled - a)/(b-a)); double f1 = LF_DIV2FREQ(s2 - 1 + (v_3db_scaled - a) / (b - a));
double c = package->results[s4 - 1]; double c = package->results[s4 - 1];
double d = package->results[s4]; double d = package->results[s4];
double f2 = LF_DIV2FREQ(s4 - 1 + (c - v_3db_scaled)/(c-d)); double f2 = LF_DIV2FREQ(s4 - 1 + (c - v_3db_scaled) / (c - d));
lfq1 = LF_DIV2FREQ(package->peak_f) / (f1 - f2); lfq1 = LF_DIV2FREQ(package->peak_f) / (f1 - f2);
PrintAndLogEx(SUCCESS, "Approx. Q factor (*): %.1lf by frequency bandwidth measurement", lfq1); PrintAndLogEx(SUCCESS, "Approx. Q factor (*): %.1lf by frequency bandwidth measurement", lfq1);
} }
@ -1955,10 +1955,10 @@ int CmdSave(const char *Cmd) {
CLIExecWithReturn(ctx, Cmd, argtable, false); CLIExecWithReturn(ctx, Cmd, argtable, false);
bool as_wave = arg_get_lit(ctx, 1); bool as_wave = arg_get_lit(ctx, 1);
int fnlen = 0; int fnlen = 0;
char filename[FILE_PATH_SIZE] = {0}; char filename[FILE_PATH_SIZE] = {0};
CLIGetStrWithReturn(ctx, 2, (uint8_t*)filename, &fnlen); CLIGetStrWithReturn(ctx, 2, (uint8_t *)filename, &fnlen);
CLIParserFree(ctx); CLIParserFree(ctx);
if (as_wave) if (as_wave)
@ -2432,10 +2432,10 @@ static int try_detect_modulation(void) {
clk = GetAskClock("", false); clk = GetAskClock("", false);
if (clk > 0) { if (clk > 0) {
// 0 = auto clock // 0 = auto clock
// 0 = no invert // 0 = no invert
// 1 = maxError 1 // 1 = maxError 1
// 0 = max len // 0 = max len
// false = no amplify // false = no amplify
// false = no verbose // false = no verbose
// false = no emSearch // false = no emSearch
// 1 = Ask/Man // 1 = Ask/Man
@ -2450,7 +2450,7 @@ static int try_detect_modulation(void) {
// false = no emSearch // false = no emSearch
// 1 = Ask/Man // 1 = Ask/Man
// st = true // st = true
// ASK / biphase // ASK / biphase
if ((ASKbiphaseDemod(0, 0, 0, 2, false) == PM3_SUCCESS)) { if ((ASKbiphaseDemod(0, 0, 0, 2, false) == PM3_SUCCESS)) {
tests[hits].modulation = DEMOD_BI; tests[hits].modulation = DEMOD_BI;
@ -2465,11 +2465,11 @@ static int try_detect_modulation(void) {
} }
} }
clk = GetNrzClock("", false); clk = GetNrzClock("", false);
if ((NRZrawDemod(0, 0, 1, false) == PM3_SUCCESS)) { if ((NRZrawDemod(0, 0, 1, false) == PM3_SUCCESS)) {
tests[hits].modulation = DEMOD_NRZ; tests[hits].modulation = DEMOD_NRZ;
tests[hits].bitrate = clk; tests[hits].bitrate = clk;
++hits; ++hits;
} }
clk = GetPskClock("", false); clk = GetPskClock("", false);
if (clk > 0) { if (clk > 0) {
@ -2481,7 +2481,7 @@ static int try_detect_modulation(void) {
tests[hits].modulation = DEMOD_PSK1; tests[hits].modulation = DEMOD_PSK1;
tests[hits].bitrate = clk; tests[hits].bitrate = clk;
++hits; ++hits;
// get psk carrier // get psk carrier
tests[hits].carrier = GetPskCarrier(false); tests[hits].carrier = GetPskCarrier(false);
} }
@ -2493,8 +2493,8 @@ static int try_detect_modulation(void) {
if (hits) { if (hits) {
PrintAndLogEx(SUCCESS, "Found [%d] possible matches for modulation.", hits); PrintAndLogEx(SUCCESS, "Found [%d] possible matches for modulation.", hits);
for (int i = 0; i < hits; ++i) { for (int i = 0; i < hits; ++i) {
PrintAndLogEx(INFO, "--[%d]---------------", i + 1); PrintAndLogEx(INFO, "--[%d]---------------", i + 1);
print_modulation(tests[i]); print_modulation(tests[i]);
} }
return PM3_SUCCESS; return PM3_SUCCESS;
} else { } else {
@ -2508,20 +2508,20 @@ static int CmdDataModulationSearch(const char *Cmd) {
CLIParserInit(&ctx, "data modulation", CLIParserInit(&ctx, "data modulation",
"search LF signal after clock and modulation\n", "search LF signal after clock and modulation\n",
"data modulation" "data modulation"
); );
void *argtable[] = { void *argtable[] = {
arg_param_begin, arg_param_begin,
arg_param_end arg_param_end
}; };
CLIExecWithReturn(ctx, Cmd, argtable, true); CLIExecWithReturn(ctx, Cmd, argtable, true);
CLIParserFree(ctx); CLIParserFree(ctx);
return try_detect_modulation(); return try_detect_modulation();
} }
static command_t CommandTable[] = { static command_t CommandTable[] = {
{"help", CmdHelp, AlwaysAvailable, "This help"}, {"help", CmdHelp, AlwaysAvailable, "This help"},
{"-----------", CmdHelp, AlwaysAvailable, "------------------------- " _CYAN_("Modulation") "-------------------------"}, {"-----------", CmdHelp, AlwaysAvailable, "------------------------- " _CYAN_("Modulation") "-------------------------"},
{"biphaserawdecode", CmdBiphaseDecodeRaw, AlwaysAvailable, "Biphase decode bin stream in DemodBuffer"}, {"biphaserawdecode", CmdBiphaseDecodeRaw, AlwaysAvailable, "Biphase decode bin stream in DemodBuffer"},
{"detectclock", CmdDetectClockRate, AlwaysAvailable, "Detect ASK, FSK, NRZ, PSK clock rate of wave in GraphBuffer"}, {"detectclock", CmdDetectClockRate, AlwaysAvailable, "Detect ASK, FSK, NRZ, PSK clock rate of wave in GraphBuffer"},
@ -2529,7 +2529,7 @@ static command_t CommandTable[] = {
{"manrawdecode", Cmdmandecoderaw, AlwaysAvailable, "Manchester decode binary stream in DemodBuffer"}, {"manrawdecode", Cmdmandecoderaw, AlwaysAvailable, "Manchester decode binary stream in DemodBuffer"},
{"modulation", CmdDataModulationSearch, AlwaysAvailable, "Identify LF signal for clock and modulation"}, {"modulation", CmdDataModulationSearch, AlwaysAvailable, "Identify LF signal for clock and modulation"},
{"rawdemod", CmdRawDemod, AlwaysAvailable, "Demodulate the data in the GraphBuffer and output binary"}, {"rawdemod", CmdRawDemod, AlwaysAvailable, "Demodulate the data in the GraphBuffer and output binary"},
{"-----------", CmdHelp, AlwaysAvailable, "------------------------- " _CYAN_("Graph") "-------------------------"}, {"-----------", CmdHelp, AlwaysAvailable, "------------------------- " _CYAN_("Graph") "-------------------------"},
{"askedgedetect", CmdAskEdgeDetect, AlwaysAvailable, "[threshold] Adjust Graph for manual ASK demod using the length of sample differences to detect the edge of a wave (use 20-45, def:25)"}, {"askedgedetect", CmdAskEdgeDetect, AlwaysAvailable, "[threshold] Adjust Graph for manual ASK demod using the length of sample differences to detect the edge of a wave (use 20-45, def:25)"},
{"autocorr", CmdAutoCorr, AlwaysAvailable, "Autocorrelation over window"}, {"autocorr", CmdAutoCorr, AlwaysAvailable, "Autocorrelation over window"},
@ -2552,7 +2552,7 @@ static command_t CommandTable[] = {
{"convertbitstream", CmdConvertBitStream, AlwaysAvailable, "Convert GraphBuffer's 0/1 values to 127 / -127"}, {"convertbitstream", CmdConvertBitStream, AlwaysAvailable, "Convert GraphBuffer's 0/1 values to 127 / -127"},
{"getbitstream", CmdGetBitStream, AlwaysAvailable, "Convert GraphBuffer's >=1 values to 1 and <1 to 0"}, {"getbitstream", CmdGetBitStream, AlwaysAvailable, "Convert GraphBuffer's >=1 values to 1 and <1 to 0"},
{"-----------", CmdHelp, AlwaysAvailable, "------------------------- " _CYAN_("General") "-------------------------"}, {"-----------", CmdHelp, AlwaysAvailable, "------------------------- " _CYAN_("General") "-------------------------"},
{"bin2hex", Cmdbin2hex, AlwaysAvailable, "Converts binary to hexadecimal"}, {"bin2hex", Cmdbin2hex, AlwaysAvailable, "Converts binary to hexadecimal"},

View file

@ -914,7 +914,7 @@ static int cmd_hf_fido_2get_assertion(const char *cmd) {
} }
static command_t CommandTable[] = { static command_t CommandTable[] = {
{"help", CmdHelp, AlwaysAvailable, "This help."}, {"help", CmdHelp, AlwaysAvailable, "This help."},
{"info", cmd_hf_fido_list, IfPm3Iso14443a, "List ISO 14443A history"}, {"info", cmd_hf_fido_list, IfPm3Iso14443a, "List ISO 14443A history"},
{"info", cmd_hf_fido_info, IfPm3Iso14443a, "Info about FIDO tag."}, {"info", cmd_hf_fido_info, IfPm3Iso14443a, "Info about FIDO tag."},
{"reg", cmd_hf_fido_register, IfPm3Iso14443a, "FIDO U2F Registration Message."}, {"reg", cmd_hf_fido_register, IfPm3Iso14443a, "FIDO U2F Registration Message."},

View file

@ -173,11 +173,11 @@ static inline uint32_t next_state(uint32_t *bitarray, uint32_t state) {
line <<= 1; line <<= 1;
} }
index++; index++;
while (state < (1 << 24) && bitarray[index] == 0x00000000 ) { while (state < (1 << 24) && bitarray[index] == 0x00000000) {
index++; index++;
state += 0x20; state += 0x20;
} }
if (state >= (1 << 24)) { if (state >= (1 << 24)) {
return (1 << 24); return (1 << 24);
} }

View file

@ -2402,13 +2402,13 @@ static int CmdHF14AMfUCAuth(const char *Cmd) {
} }
uint8_t key_buf[16]; uint8_t key_buf[16];
uint8_t * key; uint8_t *key;
int succeeded; int succeeded;
// If no hex key is specified, try all known ones // If no hex key is specified, try all known ones
if (strlen(Cmd) == 0) { if (strlen(Cmd) == 0) {
succeeded = try_default_3des_keys(&key); succeeded = try_default_3des_keys(&key);
// Else try user-supplied // Else try user-supplied
} else { } else {
if (param_gethex(Cmd, 0, key_buf, 32)) { if (param_gethex(Cmd, 0, key_buf, 32)) {
PrintAndLogEx(WARNING, "Password must include 32 HEX symbols"); PrintAndLogEx(WARNING, "Password must include 32 HEX symbols");
@ -2840,7 +2840,7 @@ static int CmdHF14AMfuOtpTearoff(const char *Cmd) {
interval = param_get32ex(Cmd, cmdp + 1, interval, 10); interval = param_get32ex(Cmd, cmdp + 1, interval, 10);
//if (interval == 0) { //if (interval == 0) {
// PrintAndLogEx(WARNING, "Wrong interval number"); // PrintAndLogEx(WARNING, "Wrong interval number");
//errors = true; //errors = true;
//} //}
cmdp += 2; cmdp += 2;
break; break;
@ -2940,7 +2940,7 @@ static int CmdHF14AMfuOtpTearoff(const char *Cmd) {
if (isOK) { if (isOK) {
memcpy(post, resp.data.asBytes, sizeof(post)); memcpy(post, resp.data.asBytes, sizeof(post));
got_post = true; got_post = true;
} }
} }
if (got_pre && got_post) { if (got_pre && got_post) {
@ -2949,27 +2949,27 @@ static int CmdHF14AMfuOtpTearoff(const char *Cmd) {
snprintf(prestr, sizeof(prestr), "%s", sprint_hex_inrow(pre, sizeof(pre))); snprintf(prestr, sizeof(prestr), "%s", sprint_hex_inrow(pre, sizeof(pre)));
char poststr[20] = {0}; char poststr[20] = {0};
snprintf(poststr, sizeof(poststr), "%s", sprint_hex_inrow(post, sizeof(post))); snprintf(poststr, sizeof(poststr), "%s", sprint_hex_inrow(post, sizeof(post)));
if (memcmp(pre, post, sizeof(pre)) == 0) { if (memcmp(pre, post, sizeof(pre)) == 0) {
PrintAndLogEx(INFO, "Current %02d (0x%02X) %s" PrintAndLogEx(INFO, "Current %02d (0x%02X) %s"
, blockNoUint , blockNoUint
, blockNoUint , blockNoUint
, poststr , poststr
); );
} else { } else {
// skip first message, since its the reset write. // skip first message, since its the reset write.
if ( actualTime == startTime ) { if (actualTime == startTime) {
PrintAndLogEx(INFO, "Inital write"); PrintAndLogEx(INFO, "Inital write");
} else { } else {
PrintAndLogEx(INFO, _CYAN_("Tear off occured") " : %02d (0x%02X) %s vs " _RED_("%s") PrintAndLogEx(INFO, _CYAN_("Tear off occured") " : %02d (0x%02X) %s vs " _RED_("%s")
, blockNoUint , blockNoUint
, blockNoUint , blockNoUint
, prestr , prestr
, poststr , poststr
); );
lock_on = true; lock_on = true;
if (phase_clear == -1) if (phase_clear == -1)
@ -3017,10 +3017,10 @@ static int CmdHF14AMfuOtpTearoff(const char *Cmd) {
PrintAndLogEx(INFO, "----------------------------------------------------"); PrintAndLogEx(INFO, "----------------------------------------------------");
if (phase_clear > - 1) { if (phase_clear > - 1) {
PrintAndLogEx(INFO, "phase 1 (erase eeprom) could be " _YELLOW_("%d") " us" , phase_clear); PrintAndLogEx(INFO, "phase 1 (erase eeprom) could be " _YELLOW_("%d") " us", phase_clear);
} }
if (phase_newwr > - 1) { if (phase_newwr > - 1) {
PrintAndLogEx(INFO, "phase 2 (new write) could be " _YELLOW_("%d") " us" , phase_newwr); PrintAndLogEx(INFO, "phase 2 (new write) could be " _YELLOW_("%d") " us", phase_newwr);
} }
PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "");
return PM3_SUCCESS; return PM3_SUCCESS;

View file

@ -641,10 +641,10 @@ static int start_drawing(uint8_t model_nr, uint8_t *black, uint8_t *red) {
uint8_t progress = 0; uint8_t progress = 0;
uint8_t step0[2] = {0xcd, 0x0d}; uint8_t step0[2] = {0xcd, 0x0d};
uint8_t step1[3] = {0xcd, 0x00, 10}; // select e-paper type and reset e-paper uint8_t step1[3] = {0xcd, 0x00, 10}; // select e-paper type and reset e-paper
// 4 :2.13inch e-Paper // 4 :2.13inch e-Paper
// 7 :2.9inch e-Paper // 7 :2.9inch e-Paper
// 10 :4.2inch e-Paper // 10 :4.2inch e-Paper
// 14 :7.5inch e-Paper // 14 :7.5inch e-Paper
uint8_t step2[2] = {0xcd, 0x01}; // e-paper normal mode type uint8_t step2[2] = {0xcd, 0x01}; // e-paper normal mode type
uint8_t step3[2] = {0xcd, 0x02}; // e-paper config1 uint8_t step3[2] = {0xcd, 0x02}; // e-paper config1
uint8_t step4[2] = {0xcd, 0x03}; // e-paper power on uint8_t step4[2] = {0xcd, 0x03}; // e-paper power on
@ -652,11 +652,11 @@ static int start_drawing(uint8_t model_nr, uint8_t *black, uint8_t *red) {
uint8_t step6[2] = {0xcd, 0x06}; // EDP load to main uint8_t step6[2] = {0xcd, 0x06}; // EDP load to main
uint8_t step7[2] = {0xcd, 0x07}; // Data preparation uint8_t step7[2] = {0xcd, 0x07}; // Data preparation
uint8_t step8[123] = {0xcd, 0x08, 0x64}; // Data start command uint8_t step8[123] = {0xcd, 0x08, 0x64}; // Data start command
// 2.13inch(0x10:Send 16 data at a time) // 2.13inch(0x10:Send 16 data at a time)
// 2.9inch(0x10:Send 16 data at a time) // 2.9inch(0x10:Send 16 data at a time)
// 4.2inch(0x64:Send 100 data at a time) // 4.2inch(0x64:Send 100 data at a time)
// 7.5inch(0x78:Send 120 data at a time) // 7.5inch(0x78:Send 120 data at a time)
uint8_t step9[2] = {0xcd, 0x18}; // e-paper power on uint8_t step9[2] = {0xcd, 0x18}; // e-paper power on
uint8_t step10[2] = {0xcd, 0x09}; // Refresh e-paper uint8_t step10[2] = {0xcd, 0x09}; // Refresh e-paper
uint8_t step11[2] = {0xcd, 0x0a}; // wait for ready uint8_t step11[2] = {0xcd, 0x0a}; // wait for ready

View file

@ -202,7 +202,7 @@ static int CmdHIDSim(const char *Cmd) {
arg_param_begin, arg_param_begin,
arg_str0("w", "wiegand", "<format>", "see " _YELLOW_("`wiegand list`") " for available formats"), arg_str0("w", "wiegand", "<format>", "see " _YELLOW_("`wiegand list`") " for available formats"),
arg_u64_0(NULL, "fc", "<dec>", "facility code"), arg_u64_0(NULL, "fc", "<dec>", "facility code"),
arg_u64_0(NULL, "cn", "<dec>", "card number"), arg_u64_0(NULL, "cn", "<dec>", "card number"),
arg_int0("i", NULL, "<dec>", "issue level"), arg_int0("i", NULL, "<dec>", "issue level"),
arg_int0("o", "oem", "<dec>", "OEM code"), arg_int0("o", "oem", "<dec>", "OEM code"),
arg_strx0("r", "raw", "<hex>", "raw bytes"), arg_strx0("r", "raw", "<hex>", "raw bytes"),
@ -214,24 +214,24 @@ static int CmdHIDSim(const char *Cmd) {
char format[16] = {0}; char format[16] = {0};
int format_len = 0; int format_len = 0;
CLIParamStrToBuf(arg_get_str(ctx, 1), (uint8_t *)format, sizeof(format), &format_len); CLIParamStrToBuf(arg_get_str(ctx, 1), (uint8_t *)format, sizeof(format), &format_len);
wiegand_card_t card; wiegand_card_t card;
memset(&card, 0, sizeof(wiegand_card_t)); memset(&card, 0, sizeof(wiegand_card_t));
card.FacilityCode = arg_get_u32_def(ctx, 2, 0); card.FacilityCode = arg_get_u32_def(ctx, 2, 0);
card.CardNumber = arg_get_u32_def(ctx, 3, 0); card.CardNumber = arg_get_u32_def(ctx, 3, 0);
card.IssueLevel = arg_get_u32_def(ctx, 4, 0); card.IssueLevel = arg_get_u32_def(ctx, 4, 0);
card.OEM = arg_get_u32_def(ctx, 5, 0); card.OEM = arg_get_u32_def(ctx, 5, 0);
int raw_len = 0; int raw_len = 0;
char raw[40] = {0}; char raw[40] = {0};
CLIParamStrToBuf(arg_get_str(ctx, 6), (uint8_t *)raw, sizeof(raw), &raw_len); CLIParamStrToBuf(arg_get_str(ctx, 6), (uint8_t *)raw, sizeof(raw), &raw_len);
//bool q5 = arg_get_lit(ctx, 7); //bool q5 = arg_get_lit(ctx, 7);
CLIParserFree(ctx); CLIParserFree(ctx);
wiegand_message_t packed; wiegand_message_t packed;
memset(&packed, 0, sizeof(wiegand_message_t)); memset(&packed, 0, sizeof(wiegand_message_t));
// format validation // format validation
int format_idx = HIDFindCardFormat((char *)format); int format_idx = HIDFindCardFormat((char *)format);
if (format_idx == -1 && raw_len == 0) { if (format_idx == -1 && raw_len == 0) {
@ -253,10 +253,10 @@ static int CmdHIDSim(const char *Cmd) {
} }
if (raw_len == 0) { if (raw_len == 0) {
PrintAndLogEx(INFO, "Simulating HID tag"); PrintAndLogEx(INFO, "Simulating HID tag");
HIDTryUnpack(&packed, false); HIDTryUnpack(&packed, false);
} else { } else {
PrintAndLogEx(INFO, "Simulating HID tag using raw " _GREEN_("%s"), raw); PrintAndLogEx(INFO, "Simulating HID tag using raw " _GREEN_("%s"), raw);
} }
PrintAndLogEx(INFO, "Press pm3-button to abort simulation"); PrintAndLogEx(INFO, "Press pm3-button to abort simulation");
@ -295,7 +295,7 @@ static int CmdHIDClone(const char *Cmd) {
arg_param_begin, arg_param_begin,
arg_str0("w", "wiegand", "<format>", "see " _YELLOW_("`wiegand list`") " for available formats"), arg_str0("w", "wiegand", "<format>", "see " _YELLOW_("`wiegand list`") " for available formats"),
arg_u64_0(NULL, "fc", "<dec>", "facility code"), arg_u64_0(NULL, "fc", "<dec>", "facility code"),
arg_u64_0(NULL, "cn", "<dec>", "card number"), arg_u64_0(NULL, "cn", "<dec>", "card number"),
arg_int0("i", NULL, "<dec>", "issue level"), arg_int0("i", NULL, "<dec>", "issue level"),
arg_int0("o", "oem", "<dec>", "OEM code"), arg_int0("o", "oem", "<dec>", "OEM code"),
arg_strx0("r", "raw", "<hex>", "raw bytes"), arg_strx0("r", "raw", "<hex>", "raw bytes"),
@ -307,24 +307,24 @@ static int CmdHIDClone(const char *Cmd) {
char format[16] = {0}; char format[16] = {0};
int format_len = 0; int format_len = 0;
CLIParamStrToBuf(arg_get_str(ctx, 1), (uint8_t *)format, sizeof(format), &format_len); CLIParamStrToBuf(arg_get_str(ctx, 1), (uint8_t *)format, sizeof(format), &format_len);
wiegand_card_t card; wiegand_card_t card;
memset(&card, 0, sizeof(wiegand_card_t)); memset(&card, 0, sizeof(wiegand_card_t));
card.FacilityCode = arg_get_u32_def(ctx, 2, 0); card.FacilityCode = arg_get_u32_def(ctx, 2, 0);
card.CardNumber = arg_get_u32_def(ctx, 3, 0); card.CardNumber = arg_get_u32_def(ctx, 3, 0);
card.IssueLevel = arg_get_u32_def(ctx, 4, 0); card.IssueLevel = arg_get_u32_def(ctx, 4, 0);
card.OEM = arg_get_u32_def(ctx, 5, 0); card.OEM = arg_get_u32_def(ctx, 5, 0);
int raw_len = 0; int raw_len = 0;
char raw[40] = {0}; char raw[40] = {0};
CLIParamStrToBuf(arg_get_str(ctx, 6), (uint8_t *)raw, sizeof(raw), &raw_len); CLIParamStrToBuf(arg_get_str(ctx, 6), (uint8_t *)raw, sizeof(raw), &raw_len);
//bool q5 = arg_get_lit(ctx, 7); //bool q5 = arg_get_lit(ctx, 7);
CLIParserFree(ctx); CLIParserFree(ctx);
wiegand_message_t packed; wiegand_message_t packed;
memset(&packed, 0, sizeof(wiegand_message_t)); memset(&packed, 0, sizeof(wiegand_message_t));
// format validation // format validation
int format_idx = HIDFindCardFormat((char *)format); int format_idx = HIDFindCardFormat((char *)format);
if (format_idx == -1 && raw_len == 0) { if (format_idx == -1 && raw_len == 0) {
@ -346,10 +346,10 @@ static int CmdHIDClone(const char *Cmd) {
} }
if (raw_len == 0) { if (raw_len == 0) {
PrintAndLogEx(INFO, "Preparing to clone HID tag"); PrintAndLogEx(INFO, "Preparing to clone HID tag");
HIDTryUnpack(&packed, false); HIDTryUnpack(&packed, false);
} else { } else {
PrintAndLogEx(INFO, "Preparing to clone HID tag using raw " _YELLOW_("%s"), raw); PrintAndLogEx(INFO, "Preparing to clone HID tag using raw " _YELLOW_("%s"), raw);
} }
lf_hidsim_t payload; lf_hidsim_t payload;

View file

@ -106,18 +106,18 @@ typedef struct {
} t5555_tracedata_t; } t5555_tracedata_t;
typedef enum { typedef enum {
DEMOD_NRZ = 0x00, DEMOD_NRZ = 0x00,
DEMOD_PSK1 = 0x01, DEMOD_PSK1 = 0x01,
DEMOD_PSK2 = 0x02, DEMOD_PSK2 = 0x02,
DEMOD_PSK3 = 0x03, DEMOD_PSK3 = 0x03,
DEMOD_FSK1 = 0x04, DEMOD_FSK1 = 0x04,
DEMOD_FSK1a = 0x05, DEMOD_FSK1a = 0x05,
DEMOD_FSK2 = 0x06, DEMOD_FSK2 = 0x06,
DEMOD_FSK2a = 0x07, DEMOD_FSK2a = 0x07,
DEMOD_FSK = 0xF0, //generic FSK (auto detect FCs) DEMOD_FSK = 0xF0, //generic FSK (auto detect FCs)
DEMOD_ASK = 0x08, DEMOD_ASK = 0x08,
DEMOD_BI = 0x10, DEMOD_BI = 0x10,
DEMOD_BIa = 0x18, DEMOD_BIa = 0x18,
} t55xx_modulation; } t55xx_modulation;
typedef struct { typedef struct {

View file

@ -587,28 +587,28 @@ static int CmdTraceSave(const char *Cmd) {
int CmdTraceList(const char *Cmd) { int CmdTraceList(const char *Cmd) {
CLIParserContext *ctx; CLIParserContext *ctx;
CLIParserInit(&ctx, "trace list", CLIParserInit(&ctx, "trace list",
"Annotate trace buffer with selected protocol data\n" "Annotate trace buffer with selected protocol data\n"
"You can load a trace from file (see `trace load -h`) or it be downloaded from device by default\n", "You can load a trace from file (see `trace load -h`) or it be downloaded from device by default\n",
"trace list -t raw -> just show raw data without annotations\n" "trace list -t raw -> just show raw data without annotations\n"
"trace list -t 14a -> interpret as " _YELLOW_("ISO14443-A") " communications\n" "trace list -t 14a -> interpret as " _YELLOW_("ISO14443-A") " communications\n"
"trace list -t thinfilm -> interpret as " _YELLOW_("Thinfilm") " communications\n" "trace list -t thinfilm -> interpret as " _YELLOW_("Thinfilm") " communications\n"
"trace list -t topaz -> interpret as " _YELLOW_("Topaz") " communications\n" "trace list -t topaz -> interpret as " _YELLOW_("Topaz") " communications\n"
"trace list -t mf -> interpret as " _YELLOW_("MIFARE Classic") " communications and decrypt crypto1 stream\n" "trace list -t mf -> interpret as " _YELLOW_("MIFARE Classic") " communications and decrypt crypto1 stream\n"
"trace list -t des -> interpret as " _YELLOW_("MIFARE DESFire") " communications\n" "trace list -t des -> interpret as " _YELLOW_("MIFARE DESFire") " communications\n"
"trace list -t 14b -> interpret as " _YELLOW_("ISO14443-B") " communications\n" "trace list -t 14b -> interpret as " _YELLOW_("ISO14443-B") " communications\n"
"trace list -t 7816 -> interpret as " _YELLOW_("ISO7816-4") " communications\n" "trace list -t 7816 -> interpret as " _YELLOW_("ISO7816-4") " communications\n"
"trace list -t 15 -> interpret as " _YELLOW_("ISO15693") " communications\n" "trace list -t 15 -> interpret as " _YELLOW_("ISO15693") " communications\n"
"trace list -t iclass -> interpret as " _YELLOW_("iCLASS") " communications\n" "trace list -t iclass -> interpret as " _YELLOW_("iCLASS") " communications\n"
"trace list -t legic -> interpret as " _YELLOW_("LEGIC") " communications\n" "trace list -t legic -> interpret as " _YELLOW_("LEGIC") " communications\n"
"trace list -t felica -> interpret as " _YELLOW_("ISO18092 / FeliCa") " communications\n" "trace list -t felica -> interpret as " _YELLOW_("ISO18092 / FeliCa") " communications\n"
"trace list -t hitag1 -> interpret as " _YELLOW_("Hitag1") " communications\n" "trace list -t hitag1 -> interpret as " _YELLOW_("Hitag1") " communications\n"
"trace list -t hitag2 -> interpret as " _YELLOW_("Hitag2") " communications\n" "trace list -t hitag2 -> interpret as " _YELLOW_("Hitag2") " communications\n"
"trace list -t hitags -> interpret as " _YELLOW_("HitagS") " communications\n" "trace list -t hitags -> interpret as " _YELLOW_("HitagS") " communications\n"
"trace list -t lto -> interpret as " _YELLOW_("LTO-CM") " communications\n" "trace list -t lto -> interpret as " _YELLOW_("LTO-CM") " communications\n"
"trace list -t cryptorf -> interpret as " _YELLOW_("CryptoRF") " communitcations\n" "trace list -t cryptorf -> interpret as " _YELLOW_("CryptoRF") " communitcations\n"
"trace list -t 14a f -> show frame delay times\n" "trace list -t 14a f -> show frame delay times\n"
"trace list -t 14a 1 -> use trace buffer " "trace list -t 14a 1 -> use trace buffer "
); );
void *argtable[] = { void *argtable[] = {
arg_param_begin, arg_param_begin,
@ -618,24 +618,24 @@ int CmdTraceList(const char *Cmd) {
arg_lit0("r", NULL, "show relative times (gap and duration)"), arg_lit0("r", NULL, "show relative times (gap and duration)"),
arg_lit0("u", NULL, "display times in microseconds instead of clock cycles"), arg_lit0("u", NULL, "display times in microseconds instead of clock cycles"),
arg_lit0("x", NULL, "show hexdump to convert to pcap(ng)\n" arg_lit0("x", NULL, "show hexdump to convert to pcap(ng)\n"
" or to import into Wireshark using encapsulation type \"ISO 14443\""), " or to import into Wireshark using encapsulation type \"ISO 14443\""),
arg_strx0("t", "type", NULL, "protocol to annotate the trace"), arg_strx0("t", "type", NULL, "protocol to annotate the trace"),
arg_param_end arg_param_end
}; };
CLIExecWithReturn(ctx, Cmd, argtable, false); CLIExecWithReturn(ctx, Cmd, argtable, false);
bool use_buffer = arg_get_lit(ctx, 1); bool use_buffer = arg_get_lit(ctx, 1);
bool show_wait_cycles = arg_get_lit(ctx, 2); bool show_wait_cycles = arg_get_lit(ctx, 2);
bool mark_crc = arg_get_lit(ctx, 3); bool mark_crc = arg_get_lit(ctx, 3);
bool use_relative = arg_get_lit(ctx, 4); bool use_relative = arg_get_lit(ctx, 4);
bool use_us = arg_get_lit(ctx, 5); bool use_us = arg_get_lit(ctx, 5);
bool show_hex = arg_get_lit(ctx, 6); bool show_hex = arg_get_lit(ctx, 6);
int tlen = 0; int tlen = 0;
char type[10] = {0}; char type[10] = {0};
CLIParamStrToBuf(arg_get_str(ctx, 7), (uint8_t *)type, sizeof(type), &tlen); CLIParamStrToBuf(arg_get_str(ctx, 7), (uint8_t *)type, sizeof(type), &tlen);
str_lower(type); str_lower(type);
CLIParserFree(ctx); CLIParserFree(ctx);
clearCommandBuffer(); clearCommandBuffer();
@ -660,9 +660,9 @@ int CmdTraceList(const char *Cmd) {
else if (strcmp(type, "thinfilm") == 0) protocol = THINFILM; else if (strcmp(type, "thinfilm") == 0) protocol = THINFILM;
else if (strcmp(type, "lto") == 0) protocol = LTO; else if (strcmp(type, "lto") == 0) protocol = LTO;
else if (strcmp(type, "cryptorf") == 0) protocol = PROTO_CRYPTORF; else if (strcmp(type, "cryptorf") == 0) protocol = PROTO_CRYPTORF;
else if (strcmp(type, "raw") == 0) protocol = -1; else if (strcmp(type, "raw") == 0) protocol = -1;
if (use_buffer == false || (g_traceLen == 0) ) { if (use_buffer == false || (g_traceLen == 0)) {
download_trace(); download_trace();
} }
@ -761,7 +761,7 @@ int CmdTraceList(const char *Cmd) {
break; break;
} }
} }
if (show_hex) if (show_hex)
PrintAndLogEx(HINT, "syntax to use: " _YELLOW_("`text2pcap -t \"%%S.\" -l 264 -n <input-text-file> <output-pcapng-file>`")); PrintAndLogEx(HINT, "syntax to use: " _YELLOW_("`text2pcap -t \"%%S.\" -l 264 -n <input-text-file> <output-pcapng-file>`"));

View file

@ -818,7 +818,7 @@ int mfEmlSetMem_xt(uint8_t *data, int blockNum, int blocksCount, int blockBtWidt
size_t paylen = sizeof(struct p) + size; size_t paylen = sizeof(struct p) + size;
struct p *payload = calloc(1, paylen); struct p *payload = calloc(1, paylen);
payload->blockno = blockNum; payload->blockno = blockNum;
payload->blockcnt = blocksCount; payload->blockcnt = blocksCount;
payload->blockwidth = blockBtWidth; payload->blockwidth = blockBtWidth;

View file

@ -1121,9 +1121,9 @@ static int l_em4x05_read(lua_State *L) {
uint32_t word = 0; uint32_t word = 0;
int res = EM4x05ReadWord_ext(addr, password, use_pwd, &word); int res = EM4x05ReadWord_ext(addr, password, use_pwd, &word);
if (res != PM3_SUCCESS) { if (res != PM3_SUCCESS) {
return returnToLuaWithError(L, "Failed to read EM4x05 data"); return returnToLuaWithError(L, "Failed to read EM4x05 data");
} }
lua_pushinteger(L, word); lua_pushinteger(L, word);
return 1; return 1;
} }
@ -1244,10 +1244,10 @@ static int l_cwd(lua_State *L) {
// ref: https://github.com/RfidResearchGroup/proxmark3/issues/891 // ref: https://github.com/RfidResearchGroup/proxmark3/issues/891
// redirect LUA's print to Proxmark3 PrintAndLogEx // redirect LUA's print to Proxmark3 PrintAndLogEx
static int l_printandlogex(lua_State *L) { static int l_printandlogex(lua_State *L) {
int n = lua_gettop(L); int n = lua_gettop(L);
for (int i = 1; i <= n; i++) { for (int i = 1; i <= n; i++) {
if (lua_isstring(L, i)) { if (lua_isstring(L, i)) {
PrintAndLogEx(NORMAL, "%s\t" NOLF, lua_tostring(L, i) ); PrintAndLogEx(NORMAL, "%s\t" NOLF, lua_tostring(L, i));
} }
} }
PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "");

View file

@ -47,44 +47,45 @@ Check column "offline" for their availability.
|command |offline |description |command |offline |description
|------- |------- |----------- |------- |------- |-----------
|`data help `|Y |`This help` |`data help `|Y |`This help`
|`data askedgedetect `|Y |`[threshold] Adjust Graph for manual ASK demod using the length of sample differences to detect the edge of a wave (use 20-45, def:25)` |`data biphaserawdecode `|Y |`Biphase decode bin stream in DemodBuffer`
|`data autocorr `|Y |`[window length] [g] -- Autocorrelation over window - g to save back to GraphBuffer (overwrite)` |`data detectclock `|Y |`Detect ASK, FSK, NRZ, PSK clock rate of wave in GraphBuffer`
|`data biphaserawdecode `|Y |`[offset] [invert<0|1>] [maxErr] -- Biphase decode bin stream in DemodBuffer (offset = 0|1 bits to shift the decode start)`
|`data bin2hex `|Y |`<digits> -- Converts binary to hexadecimal`
|`data bitsamples `|N |`Get raw samples as bitstring`
|`data buffclear `|Y |`Clears bigbuff on deviceside and graph window`
|`data convertbitstream `|Y |`Convert GraphBuffer's 0/1 values to 127 / -127`
|`data dec `|Y |`Decimate samples`
|`data detectclock `|Y |`[<a|f|n|p>] Detect ASK, FSK, NRZ, PSK clock rate of wave in GraphBuffer`
|`data fsktonrz `|Y |`Convert fsk2 to nrz wave for alternate fsk demodulating (for weak fsk)` |`data fsktonrz `|Y |`Convert fsk2 to nrz wave for alternate fsk demodulating (for weak fsk)`
|`data getbitstream `|Y |`Convert GraphBuffer's >=1 values to 1 and <1 to 0` |`data manrawdecode `|Y |`Manchester decode binary stream in DemodBuffer`
|`data grid `|Y |`<x> <y> -- overlay grid on graph window, use zero value to turn off either` |`data modulation `|Y |`Identify LF signal for clock and modulation`
|`data hexsamples `|N |`<bytes> [<offset>] -- Dump big buffer as hex bytes` |`data rawdemod `|Y |`Demodulate the data in the GraphBuffer and output binary`
|`data hex2bin `|Y |`<hexadecimal> -- Converts hexadecimal to binary` |`data askedgedetect `|Y |`[threshold] Adjust Graph for manual ASK demod using the length of sample differences to detect the edge of a wave (use 20-45, def:25)`
|`data autocorr `|Y |`Autocorrelation over window`
|`data dirthreshold `|Y |`<thres up> <thres down> -- Max rising higher up-thres/ Min falling lower down-thres, keep rest as prev.`
|`data decimate `|Y |`Decimate samples`
|`data undecimate `|Y |`Un-decimate samples`
|`data hide `|Y |`Hide graph window` |`data hide `|Y |`Hide graph window`
|`data hpf `|Y |`Remove DC offset from trace` |`data hpf `|Y |`Remove DC offset from trace`
|`data load `|Y |`<filename> -- Load trace (to graph window` |`data iir `|Y |`apply IIR buttersworth filter on plotdata`
|`data grid `|Y |`<x> <y> -- overlay grid on graph window, use zero value to turn off either`
|`data ltrim `|Y |`<samples> -- Trim samples from left of trace` |`data ltrim `|Y |`<samples> -- Trim samples from left of trace`
|`data rtrim `|Y |`<location to end trace> -- Trim samples from right of trace`
|`data mtrim `|Y |`<start> <stop> -- Trim out samples from the specified start to the specified stop` |`data mtrim `|Y |`<start> <stop> -- Trim out samples from the specified start to the specified stop`
|`data manrawdecode `|Y |`[invert] [maxErr] -- Manchester decode binary stream in DemodBuffer`
|`data norm `|Y |`Normalize max/min to +/-128` |`data norm `|Y |`Normalize max/min to +/-128`
|`data plot `|Y |`Show graph window (hit 'h' in window for keystroke help)` |`data plot `|Y |`Show graph window (hit 'h' in window for keystroke help)`
|`data printdemodbuffer `|Y |`[x] [o] <offset> [l] <length> -- print the data in the DemodBuffer - 'x' for hex output` |`data rtrim `|Y |`<location to end trace> -- Trim samples from right of trace`
|`data rawdemod `|Y |`[modulation] ... <options> -see help (h option) -- Demodulate the data in the GraphBuffer and output binary`
|`data samples `|N |`[512 - 40000] -- Get raw samples for graph window (GraphBuffer)`
|`data save `|Y |`Save trace (from graph window)`
|`data setgraphmarkers `|Y |`[orange_marker] [blue_marker] (in graph window)` |`data setgraphmarkers `|Y |`[orange_marker] [blue_marker] (in graph window)`
|`data shiftgraphzero `|Y |`<shift> -- Shift 0 for Graphed wave + or - shift value`
|`data timescale `|Y |`Set a timescale to get a differential reading between the yellow and purple markers as time duration |`data timescale `|Y |`Set a timescale to get a differential reading between the yellow and purple markers as time duration
` `
|`data setdebugmode `|Y |`<0|1|2> -- Set Debugging Level on client side`
|`data shiftgraphzero `|Y |`<shift> -- Shift 0 for Graphed wave + or - shift value`
|`data dirthreshold `|Y |`<thres up> <thres down> -- Max rising higher up-thres/ Min falling lower down-thres, keep rest as prev.`
|`data tune `|N |`Get hw tune samples for graph window`
|`data undec `|Y |`Un-decimate samples by 2`
|`data zerocrossings `|Y |`Count time between zero-crossings` |`data zerocrossings `|Y |`Count time between zero-crossings`
|`data iir `|Y |`apply IIR buttersworth filter on plotdata` |`data convertbitstream `|Y |`Convert GraphBuffer's 0/1 values to 127 / -127`
|`data getbitstream `|Y |`Convert GraphBuffer's >=1 values to 1 and <1 to 0`
|`data bin2hex `|Y |`Converts binary to hexadecimal`
|`data bitsamples `|N |`Get raw samples as bitstring`
|`data clear `|Y |`Clears bigbuf on deviceside and graph window`
|`data hexsamples `|N |`<bytes> [<offset>] -- Dump big buffer as hex bytes`
|`data hex2bin `|Y |`Converts hexadecimal to binary`
|`data load `|Y |`Load contents of file into graph window`
|`data ndef `|Y |`Decode NDEF records` |`data ndef `|Y |`Decode NDEF records`
|`data print `|Y |`print the data in the DemodBuffer`
|`data samples `|N |`[512 - 40000] -- Get raw samples for graph window (GraphBuffer)`
|`data save `|Y |`Save signal trace data (from graph window)`
|`data setdebugmode `|Y |`<0|1|2> -- Set Debugging Level on client side`
|`data tune `|N |`Measure tuning of device antenna. Results shown in graph window`
### emv ### emv
@ -232,6 +233,7 @@ Check column "offline" for their availability.
|command |offline |description |command |offline |description
|------- |------- |----------- |------- |------- |-----------
|`hf fido help `|Y |`This help.` |`hf fido help `|Y |`This help.`
|`hf fido info `|N |`List ISO 14443A history`
|`hf fido info `|N |`Info about FIDO tag.` |`hf fido info `|N |`Info about FIDO tag.`
|`hf fido reg `|N |`FIDO U2F Registration Message.` |`hf fido reg `|N |`FIDO U2F Registration Message.`
|`hf fido auth `|N |`FIDO U2F Authentication Message.` |`hf fido auth `|N |`FIDO U2F Authentication Message.`
@ -502,6 +504,7 @@ Check column "offline" for their availability.
|`hw setmux `|N |`Set the ADC mux to a specific value` |`hw setmux `|N |`Set the ADC mux to a specific value`
|`hw standalone `|N |`Jump to the standalone mode` |`hw standalone `|N |`Jump to the standalone mode`
|`hw status `|N |`Show runtime status information about the connected Proxmark3` |`hw status `|N |`Show runtime status information about the connected Proxmark3`
|`hw tearoff `|N |`Program a tearoff hook for the next command supporting tearoff`
|`hw tia `|N |`Trigger a Timing Interval Acquisition to re-adjust the RealTimeCounter divider` |`hw tia `|N |`Trigger a Timing Interval Acquisition to re-adjust the RealTimeCounter divider`
|`hw tune `|N |`Measure antenna tuning` |`hw tune `|N |`Measure antenna tuning`
|`hw version `|N |`Show version information about the connected Proxmark3` |`hw version `|N |`Show version information about the connected Proxmark3`
@ -581,17 +584,17 @@ Check column "offline" for their availability.
|`lf em 4x50_wipe `|N |`wipe data from EM4x50` |`lf em 4x50_wipe `|N |`wipe data from EM4x50`
### lf fdx ### lf fdxb
{ FDX-B RFIDs... } { FDX-B RFIDs... }
|command |offline |description |command |offline |description
|------- |------- |----------- |------- |------- |-----------
|`lf fdx help `|Y |`this help` |`lf fdxb help `|Y |`this help`
|`lf fdx demod `|Y |`demodulate a FDX-B ISO11784/85 tag from the GraphBuffer` |`lf fdxb demod `|Y |`demodulate a FDX-B ISO11784/85 tag from the GraphBuffer`
|`lf fdx read `|N |`attempt to read at 134kHz and extract tag data` |`lf fdxb read `|N |`attempt to read at 134kHz and extract tag data`
|`lf fdx clone `|N |`clone animal ID tag to T55x7 or Q5/T5555` |`lf fdxb clone `|N |`clone animal ID tag to T55x7 or Q5/T5555`
|`lf fdx sim `|N |`simulate Animal ID tag` |`lf fdxb sim `|N |`simulate Animal ID tag`
### lf gallagher ### lf gallagher