lf cotag - now uses cliparser

This commit is contained in:
iceman1001 2020-11-30 12:08:20 +01:00
commit 72a6537a3b
3 changed files with 52 additions and 28 deletions

View file

@ -8,33 +8,18 @@
// Low frequency COTAG commands // Low frequency COTAG commands
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
#include "cmdlfcotag.h" // COTAG function declarations #include "cmdlfcotag.h" // COTAG function declarations
#include <string.h> #include <string.h>
#include <stdio.h> #include <stdio.h>
#include "cmdparser.h" // command_t #include "cmdparser.h" // command_t
#include "comms.h" #include "comms.h"
#include "lfdemod.h" #include "lfdemod.h"
#include "cmddata.h" // getSamples #include "cmddata.h" // getSamples
#include "ui.h" // PrintAndLog #include "ui.h" // PrintAndLog
#include "ctype.h" // tolower #include "ctype.h" // tolower
#include "cliparser.h"
static int CmdHelp(const char *Cmd); static int CmdHelp(const char *Cmd);
static int usage_lf_cotag_read(void) {
PrintAndLogEx(NORMAL, "Usage: lf COTAG read [h] <signaldata>");
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, // COTAG demod should be able to use GraphBuffer,
// when data load samples // when data load samples
int demodCOTAG(bool verbose) { int demodCOTAG(bool verbose) {
@ -74,22 +59,63 @@ int demodCOTAG(bool verbose) {
} }
static int CmdCOTAGDemod(const char *Cmd) { 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); return demodCOTAG(true);
} }
// When reading a COTAG. // When reading a COTAG.
// 0 = HIGH/LOW signal - maxlength bigbuff // 0 = HIGH/LOW signal - maxlength bigbuff
// 1 = translation for HI/LO into bytes with manchester 0,1 - length 300 // 1 = translation for HI/LO into bytes with manchester 0,1 - length 300
// 2 = raw signal - maxlength bigbuff // 2 = raw signal - maxlength bigbuff
static int CmdCOTAGRead(const char *Cmd) { static int CmdCOTAGReader(const char *Cmd) {
if (tolower(Cmd[0]) == 'h') CLIParserContext *ctx;
return usage_lf_cotag_read(); 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 { struct p {
uint8_t mode; uint8_t mode;
} PACKED payload; } PACKED payload;
payload.mode = param_get8ex(Cmd, 0, 1, 10); payload.mode = mode;
PacketResponseNG resp; PacketResponseNG resp;
clearCommandBuffer(); clearCommandBuffer();
@ -128,7 +154,7 @@ static int CmdCOTAGRead(const char *Cmd) {
static command_t CommandTable[] = { static command_t CommandTable[] = {
{"help", CmdHelp, AlwaysAvailable, "This help"}, {"help", CmdHelp, AlwaysAvailable, "This help"},
{"demod", CmdCOTAGDemod, AlwaysAvailable, "Tries to decode a COTAG signal"}, {"demod", CmdCOTAGDemod, AlwaysAvailable, "Tries to decode a COTAG signal"},
{"read", CmdCOTAGRead, IfPm3Lf, "Attempt to read and extract tag data"}, {"reader", CmdCOTAGReader, IfPm3Lf, "Attempt to read and extract tag data"},
{NULL, NULL, NULL, NULL} {NULL, NULL, NULL, NULL}
}; };
@ -144,5 +170,5 @@ int CmdLFCOTAG(const char *Cmd) {
} }
int readCOTAGUid(void) { int readCOTAGUid(void) {
return (CmdCOTAGRead("") == PM3_SUCCESS); return (CmdCOTAGReader("") == PM3_SUCCESS);
} }

View file

@ -180,8 +180,6 @@ lf simpsk
lf simbidir lf simbidir
lf sniff lf sniff
lf tune lf tune
lf cotag demod
lf cotag read
lf destron demod lf destron demod
lf destron read lf destron read
lf destron sim lf destron sim

View file

@ -554,7 +554,7 @@ Check column "offline" for their availability.
|------- |------- |----------- |------- |------- |-----------
|`lf cotag help `|Y |`This help` |`lf cotag help `|Y |`This help`
|`lf cotag demod `|Y |`Tries to decode a COTAG signal` |`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 ### lf destron