diff --git a/client/src/cmdlfcotag.c b/client/src/cmdlfcotag.c index 21a3b5786..a85ff8c3c 100644 --- a/client/src/cmdlfcotag.c +++ b/client/src/cmdlfcotag.c @@ -8,33 +8,18 @@ // Low frequency COTAG commands //----------------------------------------------------------------------------- #include "cmdlfcotag.h" // COTAG function declarations - #include #include - #include "cmdparser.h" // command_t #include "comms.h" #include "lfdemod.h" #include "cmddata.h" // getSamples #include "ui.h" // PrintAndLog #include "ctype.h" // tolower +#include "cliparser.h" static int CmdHelp(const char *Cmd); -static int usage_lf_cotag_read(void) { - PrintAndLogEx(NORMAL, "Usage: lf COTAG read [h] "); - PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " h : This help"); - PrintAndLogEx(NORMAL, " <0|1|2> : 0 - HIGH/LOW signal; maxlength bigbuff"); - PrintAndLogEx(NORMAL, " : 1 - translation of HI/LO into bytes with manchester 0,1"); - PrintAndLogEx(NORMAL, " : 2 - raw signal; maxlength bigbuff"); - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "Example:"); - PrintAndLogEx(NORMAL, " lf cotag read 0"); - PrintAndLogEx(NORMAL, " lf cotag read 1"); - return PM3_SUCCESS; -} - // COTAG demod should be able to use GraphBuffer, // when data load samples int demodCOTAG(bool verbose) { @@ -74,22 +59,63 @@ int demodCOTAG(bool verbose) { } static int CmdCOTAGDemod(const char *Cmd) { - (void)Cmd; // Cmd is not used so far + CLIParserContext *ctx; + CLIParserInit(&ctx, "lf cotag demod", + "Try to find COTAG preamble, if found decode / descramble data", + "lf cotag demod" + ); + + void *argtable[] = { + arg_param_begin, + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, true); + CLIParserFree(ctx); return demodCOTAG(true); } + // When reading a COTAG. // 0 = HIGH/LOW signal - maxlength bigbuff // 1 = translation for HI/LO into bytes with manchester 0,1 - length 300 // 2 = raw signal - maxlength bigbuff -static int CmdCOTAGRead(const char *Cmd) { +static int CmdCOTAGReader(const char *Cmd) { - if (tolower(Cmd[0]) == 'h') - return usage_lf_cotag_read(); + CLIParserContext *ctx; + CLIParserInit(&ctx, "lf cotag reader", + "read a COTAG tag, the current support for COTAG is limited. ", + "lf cotag reader -2" + ); + + void *argtable[] = { + arg_param_begin, + arg_lit0("1", NULL, "HIGH/LOW signal; maxlength bigbuff"), + arg_lit0("2", NULL, "translation of HIGH/LOW into bytes with manchester 0,1"), + arg_lit0("3", NULL, "raw signal; maxlength bigbuff"), + arg_param_end + }; + + CLIExecWithReturn(ctx, Cmd, argtable, false); + bool mode0 = arg_get_lit(ctx, 1); + bool mode1 = arg_get_lit(ctx, 2); + bool mode2 = arg_get_lit(ctx, 3); + CLIParserFree(ctx); + + if ((mode0 + mode1 + mode2) > 1) { + PrintAndLogEx(ERR, "You can only use one option at a time"); + return PM3_EINVARG; + } + uint8_t mode = 0xFF; + if (mode0) + mode = 0; + if (mode1) + mode = 1; + if (mode2) + mode = 2; struct p { uint8_t mode; } PACKED payload; - payload.mode = param_get8ex(Cmd, 0, 1, 10); + payload.mode = mode; PacketResponseNG resp; clearCommandBuffer(); @@ -126,9 +152,9 @@ static int CmdCOTAGRead(const char *Cmd) { } static command_t CommandTable[] = { - {"help", CmdHelp, AlwaysAvailable, "This help"}, - {"demod", CmdCOTAGDemod, AlwaysAvailable, "Tries to decode a COTAG signal"}, - {"read", CmdCOTAGRead, IfPm3Lf, "Attempt to read and extract tag data"}, + {"help", CmdHelp, AlwaysAvailable, "This help"}, + {"demod", CmdCOTAGDemod, AlwaysAvailable, "Tries to decode a COTAG signal"}, + {"reader", CmdCOTAGReader, IfPm3Lf, "Attempt to read and extract tag data"}, {NULL, NULL, NULL, NULL} }; @@ -144,5 +170,5 @@ int CmdLFCOTAG(const char *Cmd) { } int readCOTAGUid(void) { - return (CmdCOTAGRead("") == PM3_SUCCESS); + return (CmdCOTAGReader("") == PM3_SUCCESS); } diff --git a/doc/cliparser_todo.txt b/doc/cliparser_todo.txt index 9d5b67c7b..ecfcf9594 100644 --- a/doc/cliparser_todo.txt +++ b/doc/cliparser_todo.txt @@ -180,8 +180,6 @@ lf simpsk lf simbidir lf sniff lf tune -lf cotag demod -lf cotag read lf destron demod lf destron read lf destron sim diff --git a/doc/commands.md b/doc/commands.md index 4ba86df8c..8a2c6ea84 100644 --- a/doc/commands.md +++ b/doc/commands.md @@ -554,7 +554,7 @@ Check column "offline" for their availability. |------- |------- |----------- |`lf cotag help `|Y |`This help` |`lf cotag demod `|Y |`Tries to decode a COTAG signal` -|`lf cotag read `|N |`Attempt to read and extract tag data` +|`lf cotag reader `|N |`Attempt to read and extract tag data` ### lf destron