From 7a23fca13a06266f169b7d739ef907d9ba9aebcb Mon Sep 17 00:00:00 2001 From: marshmellow42 Date: Mon, 8 Jun 2015 23:14:11 -0400 Subject: [PATCH] reveng RunModel - add endian switches --- client/cmdcrc.c | 43 +++++++++++++++++++++++++++++++++++++++---- client/cmdcrc.h | 2 +- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/client/cmdcrc.c b/client/cmdcrc.c index f93ab99d..3e68afb9 100644 --- a/client/cmdcrc.c +++ b/client/cmdcrc.c @@ -295,7 +295,13 @@ int CmdrevengTest(const char *Cmd){ } //-c || -v -int RunModel(char *inModel, char *inHexStr, bool reverse, char *result){ +//inModel = valid model name string - CRC-8 +//inHexStr = input hex string to calculate crc on +//reverse = reverse calc option if true +//endian = {0 = calc default endian input and output, b = big endian input and output, B = big endian output, r = right justified +// l = little endian input and output, L = little endian output only, t = left justified} +//result = calculated crc hex string +int RunModel(char *inModel, char *inHexStr, bool reverse, char endian, char *result){ /* default values */ static model_t model = { PZERO, // no CRC polynomial, user must specify @@ -331,6 +337,34 @@ int RunModel(char *inModel, char *inHexStr, bool reverse, char *result){ width = plen(model.spoly); rflags |= R_HAVEP | R_HAVEI | R_HAVERI | R_HAVERO | R_HAVEX; + //set flags + switch (endian) { + case 'b': /* b big-endian (RefIn = false, RefOut = false ) */ + model.flags &= ~P_REFIN; + rflags |= R_HAVERI; + /* fall through: */ + case 'B': /* B big-endian output (RefOut = false) */ + model.flags &= ~P_REFOUT; + rflags |= R_HAVERO; + mnovel(&model); + /* fall through: */ + case 'r': /* r right-justified */ + model.flags |= P_RTJUST; + break; + case 'l': /* l little-endian input and output */ + model.flags |= P_REFIN; + rflags |= R_HAVERI; + /* fall through: */ + case 'L': /* L little-endian output */ + model.flags |= P_REFOUT; + rflags |= R_HAVERO; + mnovel(&model); + /* fall through: */ + case 't': /* t left-justified */ + model.flags &= ~P_RTJUST; + break; + } + mcanon(&model); if (reverse) { @@ -402,15 +436,16 @@ int CmdrevengTestC(const char *Cmd){ char inHexStr[30] = {0x00}; char result[30]; int dataLen; - + char endian = 0; dataLen = param_getstr(Cmd, cmdp++, inModel); if (dataLen < 4) return 0; dataLen = param_getstr(Cmd, cmdp++, inHexStr); if (dataLen < 4) return 0; - bool reverse = (param_get8(Cmd, cmdp)) ? true : false; + bool reverse = (param_get8(Cmd, cmdp++)) ? true : false; + endian = param_getchar(Cmd, cmdp++); //PrintAndLog("mod: %s, hex: %s, rev %d", inModel, inHexStr, reverse); - int ans = RunModel(inModel, inHexStr, reverse, result); + int ans = RunModel(inModel, inHexStr, reverse, endian, result); if (!ans) return 0; PrintAndLog("Result: %s",result); diff --git a/client/cmdcrc.h b/client/cmdcrc.h index 53aa935e..5b324020 100644 --- a/client/cmdcrc.h +++ b/client/cmdcrc.h @@ -15,5 +15,5 @@ int CmdCrc(const char *Cmd); int CmdrevengTest(const char *Cmd); int CmdrevengTestC(const char *Cmd); int GetModels(char *Models[], int *count, uint32_t *width); -int RunModel(char *inModel, char *inHexStr, bool reverse, char *result); +int RunModel(char *inModel, char *inHexStr, bool reverse, char endian, char *result); #endif -- 2.39.2