From 49c6806b1b35b7ffcc8d8a4e45ea2ce8a0a03e9f Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Fri, 17 Apr 2020 19:29:33 +1000 Subject: [PATCH 01/12] device debug and tweaks --- client/src/preferences.c | 383 ++++++++++++++++++++++++++++++++------- client/src/preferences.h | 1 + client/src/proxmark3.c | 51 +++++- client/src/ui.h | 5 +- 4 files changed, 368 insertions(+), 72 deletions(-) diff --git a/client/src/preferences.c b/client/src/preferences.c index a1de6e4e2..194399ec3 100644 --- a/client/src/preferences.c +++ b/client/src/preferences.c @@ -23,11 +23,9 @@ #include #include "cmdparser.h" #include -// #include +#include #include -//#include "proxgui.h" -//extern void SetWindowsPosition (void); static int CmdHelp(const char *Cmd); static int setCmdHelp(const char *Cmd); @@ -54,7 +52,8 @@ int preferences_load(void) { PrintAndLogEx(INFO, "Looking for preferences..."); // Set all defaults - session.client_debug_level = OFF; + session.client_debug_level = cdbOFF; + session.device_debug_level = ddbOFF; session.window_changed = false; session.window_plot_xpos = 10; session.window_plot_ypos = 30; @@ -69,6 +68,25 @@ int preferences_load(void) { session.supports_colors = false; + // default save path + if (get_my_user_directory() != NULL) { + if (session.default_savepath != NULL) + free(session.default_savepath); + session.default_savepath = (char *)calloc(strlen(get_my_user_directory()) + 1, sizeof(uint8_t)); + strcpy(session.default_savepath, get_my_user_directory()); + //if (session.file_savepath == NULL) { + + } else { + session.default_savepath = (char *)calloc(2, sizeof(uint8_t)); + strcpy(session.default_savepath, "."); + } +/* + if (get_my_user_directory ()!= NULL) { + strncpy (session.file_savepath,get_my_user_directory(),sizeof(session.file_savepath)-1); + } else { + strncpy (session.file_savepath,".",sizeof(session.file_savepath)-1); + } +*/ // loadFileJson wants these, so pass in place holder values, though not used // in settings load; uint8_t dummyData = 0x00; @@ -87,10 +105,15 @@ int preferences_load(void) { int preferences_save(void) { // Note sure if backup has value ? - char backupFilename[FILENAME_MAX + sizeof(preferencesFilename) + 10] = {0}; + char *backupFilename = NULL;// [FILENAME_MAX+sizeof(preferencesFilename)+10] = {0}; + int fnLen = 0; PrintAndLogEx(INFO, "Saving preferences ..."); - snprintf(backupFilename, sizeof(backupFilename) - 1, "%s.bak", prefGetFilename()); + + fnLen = strlen(prefGetFilename()) + 5; // .bak\0 + backupFilename = (char *)calloc(fnLen, sizeof(uint8_t)); +// snprintf (backupFilename,sizeof(backupFilename)-1,"%s.bak",prefGetFilename()); + snprintf(backupFilename, fnLen, "%s.bak", prefGetFilename()); if (fileExists(backupFilename)) { if (remove(backupFilename) != 0) { @@ -112,6 +135,9 @@ int preferences_save(void) { if (saveFileJSON(prefGetFilename(), jsfSettings, &dummyData, dummyDL) != PM3_SUCCESS) PrintAndLogEx(ERR, "Error saving preferences to \"%s\"", prefGetFilename()); + if (backupFilename != NULL) + free(backupFilename); + return PM3_SUCCESS; } @@ -119,40 +145,13 @@ void preferences_save_callback(json_t *root) { JsonSaveStr(root, "FileType", "settings"); - // Log level, convert to text - switch (session.client_debug_level) { - case OFF: - JsonSaveStr(root, "client.debug.level", "off"); - break; - case SIMPLE: - JsonSaveStr(root, "client.debug.level", "simple"); - break; - case FULL: - JsonSaveStr(root, "client.debug.level", "full"); - break; - default: - JsonSaveStr(root, "logging.level", "NORMAL"); - } - - // Plot window - JsonSaveInt(root, "window.plot.xpos", session.window_plot_xpos); - JsonSaveInt(root, "window.plot.ypos", session.window_plot_ypos); - JsonSaveInt(root, "window.plot.hsize", session.window_plot_hsize); - JsonSaveInt(root, "window.plot.wsize", session.window_plot_wsize); - - // Overlay/Slider window - JsonSaveInt(root, "window.overlay.xpos", session.window_overlay_xpos); - JsonSaveInt(root, "window.overlay.ypos", session.window_overlay_ypos); - JsonSaveInt(root, "window.overlay.hsize", session.window_overlay_hsize); - JsonSaveInt(root, "window.overlay.wsize", session.window_overlay_wsize); - // Emoji switch (session.emoji_mode) { case ALIAS: JsonSaveStr(root, "show.emoji", "alias"); break; case EMOJI: - JsonSaveStr(root, "show.emoji", "emoji"); + JsonSaveStr(root,"show.emoji","emoji"); break; case ALTTEXT: JsonSaveStr(root, "show.emoji", "alttext"); @@ -167,6 +166,56 @@ void preferences_save_callback(json_t *root) { JsonSaveBoolean(root, "show.hints", session.show_hints); JsonSaveBoolean(root, "os.supports.colors", session.supports_colors); + + JsonSaveStr(root, "file.default.savepath", session.default_savepath); + + // Plot window + JsonSaveInt(root, "window.plot.xpos", session.window_plot_xpos); + JsonSaveInt(root, "window.plot.ypos", session.window_plot_ypos); + JsonSaveInt(root, "window.plot.hsize", session.window_plot_hsize); + JsonSaveInt(root, "window.plot.wsize", session.window_plot_wsize); + + // Overlay/Slider window + JsonSaveInt(root, "window.overlay.xpos", session.window_overlay_xpos); + JsonSaveInt(root, "window.overlay.ypos", session.window_overlay_ypos); + JsonSaveInt(root, "window.overlay.hsize", session.window_overlay_hsize); + JsonSaveInt(root, "window.overlay.wsize", session.window_overlay_wsize); + + // Log level, convert to text + switch (session.client_debug_level) { + case cdbOFF: + JsonSaveStr(root, "client.debug.level", "off"); + break; + case cdbSIMPLE: + JsonSaveStr(root, "client.debug.level", "simple"); + break; + case cdbFULL: + JsonSaveStr(root, "client.debug.level", "full"); + break; + default: + JsonSaveStr(root, "logging.level", "NORMAL"); + } + + switch (session.device_debug_level) { + case ddbOFF: + JsonSaveStr(root, "device.debug.level", "off"); + break; + case ddbERROR: + JsonSaveStr(root, "device.debug.level", "error"); + break; + case ddbINFO: + JsonSaveStr(root, "device.debug.level", "info"); + break; + case ddbDEBUG: + JsonSaveStr(root, "device.debug.level", "debug"); + break; + case ddbEXTENDED: + JsonSaveStr(root, "device.debug.level", "extended"); + break; + default: + JsonSaveStr(root, "logging.level", "NORMAL"); + } + } void preferences_load_callback(json_t *root) { @@ -180,11 +229,19 @@ void preferences_load_callback(json_t *root) { if (json_unpack_ex(root, &up_error, 0, "{s:s}", "client.debug.level", &s1) == 0) { strncpy(tempStr, s1, sizeof(tempStr) - 1); str_lower(tempStr); - if (strncmp(tempStr, "off", 3) == 0) session.client_debug_level = OFF; - if (strncmp(tempStr, "simple", 6) == 0) session.client_debug_level = SIMPLE; - if (strncmp(tempStr, "full", 4) == 0) session.client_debug_level = FULL; + if (strncmp(tempStr, "off", 3) == 0) session.client_debug_level = cdbOFF; + if (strncmp(tempStr, "simple", 6) == 0) session.client_debug_level = cdbSIMPLE; + if (strncmp(tempStr, "full", 4) == 0) session.client_debug_level = cdbFULL; } + // default save path + if (json_unpack_ex(root, &up_error, 0, "{s:s}", "file.default.savepath", &s1) == 0) { + if (session.default_savepath != NULL) + free(session.default_savepath); + session.default_savepath = (char *)calloc(strlen(s1) + 1, sizeof(uint8_t)); + strcpy(session.default_savepath,s1); + } + // window plot if (json_unpack_ex(root, &up_error, 0, "{s:i}", "window.plot.xpos", &i1) == 0) session.window_plot_xpos = i1; @@ -221,6 +278,17 @@ void preferences_load_callback(json_t *root) { if (json_unpack_ex(root, &up_error, 0, "{s:b}", "os.supports.colors", &b1) == 0) session.supports_colors = b1; + // Logging Level + if (json_unpack_ex(root, &up_error, 0, "{s:s}", "device.debug.level", &s1) == 0) { + strncpy(tempStr, s1, sizeof(tempStr) - 1); + str_lower(tempStr); + if (strncmp(tempStr, "off", 3) == 0) session.device_debug_level = ddbOFF; + if (strncmp(tempStr, "error", 5) == 0) session.device_debug_level = ddbERROR; + if (strncmp(tempStr, "info", 4) == 0) session.device_debug_level = ddbINFO; + if (strncmp(tempStr, "debug", 5) == 0) session.device_debug_level = ddbDEBUG; + if (strncmp(tempStr, "extended", 8) == 0) session.device_debug_level = ddbEXTENDED; + } + } // Help Functions @@ -248,7 +316,7 @@ static int usage_set_color() { } static int usage_set_debug() { - PrintAndLogEx(NORMAL, "Usage: pref set debug "); + PrintAndLogEx(NORMAL, "Usage: pref set clientdebug "); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " "_GREEN_("help")" - This help"); PrintAndLogEx(NORMAL, " "_GREEN_("off")" - no debug messages"); @@ -257,6 +325,20 @@ static int usage_set_debug() { return PM3_SUCCESS; } + +static int usage_set_devicedebug() { + PrintAndLogEx(NORMAL, "Usage: pref set devicedebug "); + PrintAndLogEx(NORMAL, "Options:"); + PrintAndLogEx(NORMAL, " "_GREEN_("help")" - This help"); + PrintAndLogEx(NORMAL, " "_GREEN_("off")" - no debug messages"); + PrintAndLogEx(NORMAL, " "_GREEN_("error")" - error messages"); + PrintAndLogEx(NORMAL, " "_GREEN_("info")" - info messages"); + PrintAndLogEx(NORMAL, " "_GREEN_("debug")" - debug messages"); + PrintAndLogEx(NORMAL, " "_GREEN_("extended")" - extended debug messages"); + + return PM3_SUCCESS; +} + static int usage_set_hints() { PrintAndLogEx(NORMAL, "Usage: pref set hints "); PrintAndLogEx(NORMAL, "Options:"); @@ -267,16 +349,26 @@ static int usage_set_hints() { return PM3_SUCCESS; } -// Preference Processing Functions -typedef enum preferenceId {prefNONE, prefHELP, prefEMOJI, prefCOLOR, prefPLOT, prefOVERLAY, prefHINTS, prefCLIENTDEBUG} preferenceId_t; -typedef enum prefShowOpt {prefShowNone, prefShowOLD, prefShowNEW} prefShowOpt_t; +static int usage_set_savePath() { + PrintAndLogEx(NORMAL, "Usage: pref set defaultsavepath "); + PrintAndLogEx(NORMAL, "Options:"); + PrintAndLogEx(NORMAL, " "_GREEN_("help")" - This help"); + PrintAndLogEx(NORMAL, " "_GREEN_("")" - default save path"); -const char *prefShowMsg(prefShowOpt_t Opt) { + return PM3_SUCCESS; +} + +// Preference Processing Functions +// typedef enum preferenceId {prefNONE,prefHELP,prefEMOJI,prefCOLOR,prefPLOT,prefOVERLAY,prefHINTS,prefCLIENTDEBUG} preferenceId_t; +typedef enum prefShowOpt {prefShowNone, prefShowOLD, prefShowNEW} prefShowOpt_t; + +const char *prefShowMsg(prefShowOpt_t Opt) +{ switch (Opt) { case prefShowOLD: - return _YELLOW_("[old]"); //strncpy(Msg,"Before ",sizeof(Msg)-1); break; + return _YELLOW_("[old]"); case prefShowNEW: - return _GREEN_("[new]"); // strncpy(Msg,"After ",sizeof(Msg)-1); break; + return _GREEN_("[new]"); case prefShowNone: return ""; } @@ -309,19 +401,19 @@ void showColorState(prefShowOpt_t Opt) { if (session.supports_colors) PrintAndLogEx(NORMAL, " %s color.................. "_GREEN_("ansi"), prefShowMsg(Opt)); else - PrintAndLogEx(NORMAL, " %s color.................. "_GREEN_("off"), prefShowMsg(Opt)); + PrintAndLogEx(NORMAL, " %s color.................. "_WHITE_("off"), prefShowMsg(Opt)); } void showClientDebugState(prefShowOpt_t Opt) { switch (session.client_debug_level) { - case OFF: - PrintAndLogEx(NORMAL, " %s client debug........... "_GREEN_("off"), prefShowMsg(Opt)); + case cdbOFF: + PrintAndLogEx(NORMAL, " %s client debug........... "_WHITE_("off"), prefShowMsg(Opt)); break; - case SIMPLE: + case cdbSIMPLE: PrintAndLogEx(NORMAL, " %s client debug........... "_GREEN_("simple"), prefShowMsg(Opt)); break; - case FULL: + case cdbFULL: PrintAndLogEx(NORMAL, " %s client debug........... "_GREEN_("full"), prefShowMsg(Opt)); break; default: @@ -329,7 +421,33 @@ void showClientDebugState(prefShowOpt_t Opt) { } } -void showPlotPosState(void) { +void showDeviceDebugState(prefShowOpt_t Opt) { + switch (session.device_debug_level) { + case ddbOFF: + PrintAndLogEx(NORMAL, " %s device debug........... "_WHITE_("off"), prefShowMsg(Opt)); + break; + case ddbERROR: + PrintAndLogEx(NORMAL, " %s device debug........... "_GREEN_("error"), prefShowMsg(Opt)); + break; + case ddbINFO: + PrintAndLogEx(NORMAL, " %s device debug........... "_GREEN_("info"), prefShowMsg(Opt)); + break; + case ddbDEBUG: + PrintAndLogEx(NORMAL, " %s device debug........... "_GREEN_("debug"), prefShowMsg(Opt)); + break; + case ddbEXTENDED: + PrintAndLogEx(NORMAL, " %s device debug........... "_GREEN_("extended"), prefShowMsg(Opt)); + break; + default: + PrintAndLogEx(NORMAL, " %s device debug........... "_RED_("unknown"), prefShowMsg(Opt)); + } +} + +void showSavePathState(prefShowOpt_t Opt) { + PrintAndLogEx(NORMAL, " %s default save path...... "_GREEN_("%s"), prefShowMsg(Opt), session.default_savepath); +} + +void showPlotPosState(void){ PrintAndLogEx(NORMAL, " Plot window............ X "_GREEN_("%4d")" Y "_GREEN_("%4d")" H "_GREEN_("%4d")" W "_GREEN_("%4d"), session.window_plot_xpos, session.window_plot_ypos, session.window_plot_hsize, session.window_plot_wsize); } @@ -341,9 +459,9 @@ void showOverlayPosState(void) { void showHintsState(prefShowOpt_t Opt) { if (session.show_hints) - PrintAndLogEx(NORMAL, " %s Hints.................. "_GREEN_("on"), prefShowMsg(Opt)); + PrintAndLogEx(NORMAL, " %s hints.................. "_GREEN_("on"), prefShowMsg(Opt)); else - PrintAndLogEx(NORMAL, " %s Hints.................. "_GREEN_("off"), prefShowMsg(Opt)); + PrintAndLogEx(NORMAL, " %s hints.................. "_WHITE_("off"), prefShowMsg(Opt)); } static int setCmdEmoji(const char *Cmd) { @@ -465,15 +583,15 @@ static int setCmdDebug(const char *Cmd) { return usage_set_debug(); if (strncmp(strOpt, "off", 3) == 0) { validValue = true; - newValue = OFF; + newValue = cdbOFF; } if (strncmp(strOpt, "simple", 6) == 0) { validValue = true; - newValue = SIMPLE; + newValue = cdbSIMPLE; } if (strncmp(strOpt, "full", 4) == 0) { validValue = true; - newValue = FULL; + newValue = cdbFULL; } if (validValue) { @@ -497,7 +615,74 @@ static int setCmdDebug(const char *Cmd) { return PM3_SUCCESS; } -static int setCmdHint(const char *Cmd) { +static int setCmdDeviceDebug (const char *Cmd) +{ + uint8_t cmdp = 0; + bool errors = false; + bool validValue = false; + char strOpt[50]; + devicedebugLevel_t newValue = session.device_debug_level; + + if (param_getchar(Cmd, cmdp) == 0x00) + return usage_set_devicedebug (); + + while ((param_getchar(Cmd, cmdp) != 0x00) && !errors) { + + if (param_getstr(Cmd, cmdp++, strOpt, sizeof(strOpt)) != 0) { + str_lower(strOpt); // convert to lowercase + + if (strncmp (strOpt,"help",4) == 0) + return usage_set_devicedebug(); + if (strncmp (strOpt,"off",3) == 0) { + validValue = true; + newValue = ddbOFF; + } + if (strncmp (strOpt,"error",5) == 0) { + validValue = true; + newValue = ddbERROR; + } + if (strncmp (strOpt,"info",4) == 0) { + validValue = true; + newValue = ddbINFO; + } + if (strncmp (strOpt,"debug",5) == 0) { + validValue = true; + newValue = ddbDEBUG; + } + if (strncmp (strOpt,"extended",8) == 0) { + validValue = true; + newValue = ddbEXTENDED; + } + + if (validValue) { + if (session.device_debug_level != newValue) {// changed + showDeviceDebugState (prefShowOLD); + session.device_debug_level = newValue; + showDeviceDebugState (prefShowNEW); + preferences_save (); + } else { + PrintAndLogEx(INFO,"nothing changed"); + showDeviceDebugState (prefShowNone); + } + if (session.pm3_present) { + PrintAndLogEx (INFO,"setting device debug loglevel"); + SendCommandNG(CMD_SET_DBGMODE, &session.device_debug_level, 1); + PacketResponseNG resp; + if (WaitForResponseTimeout(CMD_SET_DBGMODE, &resp, 2000) == false) + PrintAndLogEx (INFO,"failed to set device debug loglevel"); + } + } else { + PrintAndLogEx(ERR,"invalid option"); + return usage_set_devicedebug(); + } + } + } + + return PM3_SUCCESS; +} + +static int setCmdHint (const char *Cmd) +{ uint8_t cmdp = 0; bool errors = false; bool validValue = false; @@ -543,12 +728,74 @@ static int setCmdHint(const char *Cmd) { return PM3_SUCCESS; } +static int setCmdSavePath (const char *Cmd) { + uint8_t cmdp = 0; + bool errors = false; + // bool validValue = false; + char *strOpt = NULL; + int optLen = 0; + char *newValue = NULL; + + if (param_getchar(Cmd, cmdp) == 0x00) + return usage_set_savePath(); + + while ((param_getchar(Cmd, cmdp) != 0x00) && !errors) { + if (strOpt != NULL) + free (strOpt); + + optLen = param_getlength(Cmd, cmdp)+1; + strOpt = (char *)calloc(optLen+1, sizeof(uint8_t)); + if (param_getstr(Cmd, cmdp++, strOpt, optLen) != 0) { + str_lower(strOpt); // convert to lowercase + + if (strncmp (strOpt,"help",4) == 0) + return usage_set_savePath(); + else { + // not help, must be the path.... + + // param_getstr(Cmd, cmdp++, newValue, sizeof(newValue)); + if (newValue == NULL) + free(newValue); + newValue = (char *)calloc(strlen(strOpt)+1, sizeof(uint8_t)); + strcpy (newValue,strOpt); + + if (strcmp (newValue,session.default_savepath) != 0) { + + // check if new path exists + if (fileExists (newValue)) { + showSavePathState (prefShowOLD); + if (session.default_savepath != NULL) + free (session.default_savepath); + session.default_savepath = (char *)calloc(strlen(newValue)+1, sizeof(uint8_t)); + strcpy (session.default_savepath,newValue); + showSavePathState (prefShowNEW); + preferences_save (); + } else { + PrintAndLogEx (ERR,"path does not exist"); + } + } else { + PrintAndLogEx(INFO,"nothing changed"); + showSavePathState (prefShowNone); + } + } + } + } + + // clean up + if (strOpt != NULL) free (strOpt); + if (newValue != NULL) free (newValue); + + return PM3_SUCCESS; +} + static command_t setCommandTable[] = { {"help", setCmdHelp, AlwaysAvailable, "This help"}, {"emoji", setCmdEmoji, AlwaysAvailable, "Set emoji display"}, - {"color", setCmdColor, AlwaysAvailable, "Set color support"}, - {"debug", setCmdDebug, AlwaysAvailable, "Set client debug level"}, {"hints", setCmdHint, AlwaysAvailable, "Set hint display"}, + {"color", setCmdColor, AlwaysAvailable, "Set color support"}, + {"defaultsavepath", setCmdSavePath, AlwaysAvailable, "Set default save path"}, + {"clientdebug", setCmdDebug, AlwaysAvailable, "Set client debug level"}, + {"devicedebug", setCmdDeviceDebug, AlwaysAvailable, "Set device debug level"}, {NULL, NULL, NULL, NULL} }; @@ -569,21 +816,22 @@ int CmdPrefSet(const char *Cmd) { static int CmdPrefShow(const char *Cmd) { PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, _BLUE_("Preferences")); - - if (!session. preferences_loaded) { - PrintAndLogEx(ERR, "Preferneces not loaded"); + PrintAndLogEx(NORMAL, _CYAN_("Preferences")); + + if (!session.preferences_loaded) { + PrintAndLogEx (ERR, "Preferneces not loaded"); return PM3_ESOFT; } PrintAndLogEx(NORMAL, " preference file........ "_GREEN_("%s"), prefGetFilename()); showEmojiState(prefShowNone); - showColorState(prefShowNone); - // showPlotPosState (); - // showOverlayPosState (); - showClientDebugState(prefShowNone); showHintsState(prefShowNone); - + showColorState(prefShowNone); + // showPlotPosState (); + // showOverlayPosState (); + showSavePathState(prefShowNone); + showClientDebugState(prefShowNone); + showDeviceDebugState(prefShowNone); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; @@ -599,7 +847,6 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, {"set", CmdPrefSet, AlwaysAvailable, "Set a preference"}, {"show", CmdPrefShow, AlwaysAvailable, "Show preferences"}, -// {"save", CmdPrefSave, AlwaysAvailable, "Save preferences now"}, {NULL, NULL, NULL, NULL} }; diff --git a/client/src/preferences.h b/client/src/preferences.h index 38e2272cb..0d7705027 100644 --- a/client/src/preferences.h +++ b/client/src/preferences.h @@ -9,6 +9,7 @@ #define PREFERENCES_H_ #include "fileutils.h" +#include // Current working directory will be prepended. #define preferencesFilename "preferences.json" diff --git a/client/src/proxmark3.c b/client/src/proxmark3.c index 6bc88435a..84768f613 100644 --- a/client/src/proxmark3.c +++ b/client/src/proxmark3.c @@ -38,7 +38,7 @@ #endif // Used to enable/disable use of preferences json file -// #define USE_PREFERENCE_FILE +#define USE_PREFERENCE_FILE #ifdef _WIN32 @@ -414,13 +414,14 @@ static void set_my_executable_path(void) { } static const char *my_user_directory = NULL; -static char _cwd_Buffer [FILENAME_MAX] = {0}; +// static char _cwd_Buffer [FILENAME_MAX] = {0}; const char *get_my_user_directory(void) { return my_user_directory; } + static void set_my_user_directory(void) { - my_user_directory = getenv("HOME"); +/* my_user_directory = getenv("HOME"); // if not found, default to current directory if (my_user_directory == NULL) { @@ -430,6 +431,38 @@ static void set_my_user_directory(void) { if (_cwd_Buffer[i] == '\\') _cwd_Buffer[i] = '/'; // my_user_directory = "."; } +*/ + my_user_directory = getenv("HOME"); + + // if not found, default to current directory + if (my_user_directory == NULL) { + + char *cwd_Buffer = NULL; + uint16_t pathLen = FILENAME_MAX; // should be a good starting point + bool error = false; + + cwd_Buffer = (char *)calloc(pathLen, sizeof(uint8_t)); + + while (!error && (GetCurrentDir (cwd_Buffer,pathLen) == NULL)) { + if (errno == ERANGE) { // Need bigger buffer + pathLen += 10; // if buffer was too small add 10 characters and try again + cwd_Buffer = realloc(cwd_Buffer, pathLen); + } else { + error = true; + free (cwd_Buffer); + cwd_Buffer = NULL; + } + printf ("Len... %d\n",pathLen); + } + + if (!error) { + + for (int i = 0; i < strlen(cwd_Buffer); i++) + if (cwd_Buffer[i] == '\\') cwd_Buffer[i] = '/'; + + my_user_directory = cwd_Buffer; + } + } } static void show_help(bool showFullHelp, char *exec_name) { @@ -949,7 +982,19 @@ int main(int argc, char *argv[]) { if (!session.preferences_loaded) { preferences_save(); // Save defaults session.preferences_loaded = true; + } else { + // Set device debug level + PrintAndLogEx(INFO,"setting device debug loglevel"); + if (session.pm3_present) { + SendCommandNG(CMD_SET_DBGMODE, &session.device_debug_level, 1); + PacketResponseNG resp; + if (WaitForResponseTimeout(CMD_SET_DBGMODE, &resp, 2000) == false) + PrintAndLogEx (INFO,"failed to set device debug loglevel"); + } + else + PrintAndLogEx(WARNING,"Proxmark3 not ready to set debug level"); } + #endif #ifdef HAVE_GUI diff --git a/client/src/ui.h b/client/src/ui.h index 24c4b7201..620769faa 100644 --- a/client/src/ui.h +++ b/client/src/ui.h @@ -19,7 +19,8 @@ typedef enum logLevel {NORMAL, SUCCESS, INFO, FAILED, WARNING, ERR, DEBUG, INPLACE, HINT} logLevel_t; typedef enum emojiMode {ALIAS, EMOJI, ALTTEXT, ERASE} emojiMode_t; -typedef enum clientdebugLevel {OFF, SIMPLE, FULL} clientdebugLevel_t; +typedef enum clientdebugLevel {cdbOFF,cdbSIMPLE,cdbFULL} clientdebugLevel_t; +typedef enum devicedebugLevel {ddbOFF,ddbERROR,ddbINFO,ddbDEBUG,ddbEXTENDED} devicedebugLevel_t; typedef struct { bool preferences_loaded; @@ -31,6 +32,7 @@ typedef struct { bool help_dump_mode; bool show_hints; bool window_changed; // track if plot/overlay pos/size changed to save on exit + char *default_savepath;// [FILENAME_MAX]; int window_plot_xpos; int window_plot_ypos; int window_plot_hsize; @@ -40,6 +42,7 @@ typedef struct { int window_overlay_hsize; int window_overlay_wsize; clientdebugLevel_t client_debug_level; + uint8_t device_debug_level; } session_arg_t; extern session_arg_t session; From b593d2c319ec833d9bd4655fbc8c899a3ae44f2e Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Fri, 17 Apr 2020 19:50:12 +1000 Subject: [PATCH 02/12] clean up --- client/src/preferences.c | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/client/src/preferences.c b/client/src/preferences.c index 194399ec3..c53615dca 100644 --- a/client/src/preferences.c +++ b/client/src/preferences.c @@ -69,24 +69,14 @@ int preferences_load(void) { // default save path - if (get_my_user_directory() != NULL) { - if (session.default_savepath != NULL) - free(session.default_savepath); - session.default_savepath = (char *)calloc(strlen(get_my_user_directory()) + 1, sizeof(uint8_t)); + if (get_my_user_directory() != NULL) { // should return path to .proxmark3 folder + session.default_savepath = (char *)realloc(session.default_savepath, strlen(get_my_user_directory()) + 1); //, sizeof(uint8_t)); strcpy(session.default_savepath, get_my_user_directory()); - //if (session.file_savepath == NULL) { - } else { - session.default_savepath = (char *)calloc(2, sizeof(uint8_t)); + session.default_savepath = (char *)realloc(session.default_savepath,2); // 2, sizeof(uint8_t)); strcpy(session.default_savepath, "."); } -/* - if (get_my_user_directory ()!= NULL) { - strncpy (session.file_savepath,get_my_user_directory(),sizeof(session.file_savepath)-1); - } else { - strncpy (session.file_savepath,".",sizeof(session.file_savepath)-1); - } -*/ + // loadFileJson wants these, so pass in place holder values, though not used // in settings load; uint8_t dummyData = 0x00; @@ -112,7 +102,6 @@ int preferences_save(void) { fnLen = strlen(prefGetFilename()) + 5; // .bak\0 backupFilename = (char *)calloc(fnLen, sizeof(uint8_t)); -// snprintf (backupFilename,sizeof(backupFilename)-1,"%s.bak",prefGetFilename()); snprintf(backupFilename, fnLen, "%s.bak", prefGetFilename()); if (fileExists(backupFilename)) { From e2c56fe26cb4b8adb05a65f1cd6d02a7f3d23d4c Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Sat, 18 Apr 2020 18:04:08 +1000 Subject: [PATCH 03/12] updates Added dump and trace path and clean a little for cleaner use and expansion. --- client/src/fileutils.c | 60 ++++++++++ client/src/fileutils.h | 1 + client/src/preferences.c | 235 ++++++++++++++++++++++++++------------- client/src/proxguiqt.cpp | 22 ++-- client/src/ui.h | 15 +-- 5 files changed, 237 insertions(+), 96 deletions(-) diff --git a/client/src/fileutils.c b/client/src/fileutils.c index b32d8ec88..d98b3d7ff 100644 --- a/client/src/fileutils.c +++ b/client/src/fileutils.c @@ -49,6 +49,7 @@ #include "util.h" #ifdef _WIN32 #include "scandir.h" +#include #endif #define PATH_MAX_LENGTH 200 @@ -130,6 +131,65 @@ static bool is_directory(const char *filename) { return S_ISDIR(st.st_mode) != 0; } +/** + * @brief create a new directory. + * @param dirname + * @return + */ +#ifdef _WIN32 +#define make_dir(a) _mkdir(a) +#else +#define make_dir(a) mkdir(a,0x755) +#endif +bool create_path(const char *dirname) { + + if (dirname == NULL) // nothing to do + return false; + + if ((strlen(dirname) == 1) && (dirname[0] == '/')) + return true; + + if ((strlen(dirname) == 2) && (dirname[1] == ':')) + return true; + + if (fileExists(dirname) == 0) { + + char *bs = strrchr(dirname, '\\'); + char *fs = strrchr(dirname, '/'); + + if ((bs == NULL) && (fs != NULL)) { + *fs = 0x00; + create_path (dirname); + *fs = '/'; + } + + if ((bs != NULL) && (fs == NULL)) { + *bs = 0x00; + create_path (dirname); + *bs = '\\'; + } + + if ((bs != NULL) && (fs != NULL)) { + if (strlen (bs) > strlen (fs)) { + *fs = 0x00; // No slash + create_path (dirname); + *fs = '/'; + } else { + *bs = 0x00; + create_path (dirname); + *bs = '\\'; + } + + } + + if (make_dir(dirname) != 0) { + PrintAndLogEx(ERR, "could not create directory.... "_RED_("%s"),dirname); + return false; + } + } + return true; +} + static char *filenamemcopy(const char *preferredName, const char *suffix) { if (preferredName == NULL) return NULL; diff --git a/client/src/fileutils.h b/client/src/fileutils.h index ff43b3f7e..bd7886aa3 100644 --- a/client/src/fileutils.h +++ b/client/src/fileutils.h @@ -74,6 +74,7 @@ typedef enum { } DumpFileType_t; int fileExists(const char *filename); +bool create_path(const char *dirname); /** * @brief Utility function to save data to a binary file. This method takes a preferred name, but if that diff --git a/client/src/preferences.c b/client/src/preferences.c index c53615dca..eb58389d2 100644 --- a/client/src/preferences.c +++ b/client/src/preferences.c @@ -55,14 +55,14 @@ int preferences_load(void) { session.client_debug_level = cdbOFF; session.device_debug_level = ddbOFF; session.window_changed = false; - session.window_plot_xpos = 10; - session.window_plot_ypos = 30; - session.window_plot_hsize = 400; - session.window_plot_wsize = 800; - session.window_overlay_xpos = session.window_plot_xpos; - session.window_overlay_ypos = 60 + session.window_plot_ypos + session.window_plot_hsize; - session.window_overlay_hsize = 200; - session.window_overlay_wsize = session.window_plot_wsize; + session.plot.x = 10; + session.plot.y = 30; + session.plot.h = 400; + session.plot.w = 800; + session.overlay.x = session.plot.x; + session.overlay.y = 60 + session.plot.y + session.plot.h; + session.overlay.h = 200; + session.overlay.w = session.plot.w; session.emoji_mode = ALIAS; session.show_hints = false; session.supports_colors = false; @@ -70,11 +70,27 @@ int preferences_load(void) { // default save path if (get_my_user_directory() != NULL) { // should return path to .proxmark3 folder - session.default_savepath = (char *)realloc(session.default_savepath, strlen(get_my_user_directory()) + 1); //, sizeof(uint8_t)); - strcpy(session.default_savepath, get_my_user_directory()); + session.defaultPaths[spDefault] = (char *)realloc(session.defaultPaths[spDefault], strlen(get_my_user_directory()) + 1); //, sizeof(uint8_t)); + strcpy(session.defaultPaths[spDefault], get_my_user_directory()); } else { - session.default_savepath = (char *)realloc(session.default_savepath,2); // 2, sizeof(uint8_t)); - strcpy(session.default_savepath, "."); + session.defaultPaths[spDefault] = (char *)realloc(session.defaultPaths[spDefault], 2); // 2, sizeof(uint8_t)); + strcpy(session.defaultPaths[spDefault], "."); + } + // default dump path + if (get_my_user_directory() != NULL) { // should return path to .proxmark3 folder + session.defaultPaths[spDump] = (char *)realloc(session.defaultPaths[spDump], strlen(get_my_user_directory()) + 1); //, sizeof(uint8_t)); + strcpy(session.defaultPaths[spDump], get_my_user_directory()); + } else { + session.defaultPaths[spDump] = (char *)realloc(session.defaultPaths[spDump], 2); // 2, sizeof(uint8_t)); + strcpy(session.defaultPaths[spDump], "."); + } + // default save path + if (get_my_user_directory() != NULL) { // should return path to .proxmark3 folder + session.defaultPaths[spTrace] = (char *)realloc(session.defaultPaths[spTrace], strlen(get_my_user_directory()) + 1); //, sizeof(uint8_t)); + strcpy(session.defaultPaths[spTrace], get_my_user_directory()); + } else { + session.defaultPaths[spTrace] = (char *)realloc(session.defaultPaths[spTrace], 2); // 2, sizeof(uint8_t)); + strcpy(session.defaultPaths[spTrace], "."); } // loadFileJson wants these, so pass in place holder values, though not used @@ -156,19 +172,21 @@ void preferences_save_callback(json_t *root) { JsonSaveBoolean(root, "os.supports.colors", session.supports_colors); - JsonSaveStr(root, "file.default.savepath", session.default_savepath); + JsonSaveStr(root, "file.default.savepath", session.defaultPaths[spDefault]); + JsonSaveStr(root, "file.default.dumppath", session.defaultPaths[spDump]); + JsonSaveStr(root, "file.default.tracepath", session.defaultPaths[spTrace]); // Plot window - JsonSaveInt(root, "window.plot.xpos", session.window_plot_xpos); - JsonSaveInt(root, "window.plot.ypos", session.window_plot_ypos); - JsonSaveInt(root, "window.plot.hsize", session.window_plot_hsize); - JsonSaveInt(root, "window.plot.wsize", session.window_plot_wsize); + JsonSaveInt(root, "window.plot.xpos", session.plot.x); + JsonSaveInt(root, "window.plot.ypos", session.plot.y); + JsonSaveInt(root, "window.plot.hsize", session.plot.h); + JsonSaveInt(root, "window.plot.wsize", session.plot.w); // Overlay/Slider window - JsonSaveInt(root, "window.overlay.xpos", session.window_overlay_xpos); - JsonSaveInt(root, "window.overlay.ypos", session.window_overlay_ypos); - JsonSaveInt(root, "window.overlay.hsize", session.window_overlay_hsize); - JsonSaveInt(root, "window.overlay.wsize", session.window_overlay_wsize); + JsonSaveInt(root, "window.overlay.xpos", session.overlay.x); + JsonSaveInt(root, "window.overlay.ypos", session.overlay.y); + JsonSaveInt(root, "window.overlay.hsize", session.overlay.h); + JsonSaveInt(root, "window.overlay.wsize", session.overlay.w); // Log level, convert to text switch (session.client_debug_level) { @@ -225,31 +243,39 @@ void preferences_load_callback(json_t *root) { // default save path if (json_unpack_ex(root, &up_error, 0, "{s:s}", "file.default.savepath", &s1) == 0) { - if (session.default_savepath != NULL) - free(session.default_savepath); - session.default_savepath = (char *)calloc(strlen(s1) + 1, sizeof(uint8_t)); - strcpy(session.default_savepath,s1); + session.defaultPaths[spDefault] = realloc(session.defaultPaths[spDefault], strlen(s1) + 1); + strcpy(session.defaultPaths[spDefault], s1); + } + // default dump path + if (json_unpack_ex(root, &up_error, 0, "{s:s}", "file.default.dumppath", &s1) == 0) { + session.defaultPaths[spDump] = realloc(session.defaultPaths[spDump],strlen(s1) + 1); + strcpy(session.defaultPaths[spDump],s1); + } + // default trace path + if (json_unpack_ex(root, &up_error, 0, "{s:s}", "file.default.tracepath", &s1) == 0) { + session.defaultPaths[spTrace] = realloc(session.defaultPaths[spTrace],strlen(s1) + 1); + strcpy(session.defaultPaths[spTrace],s1); } // window plot if (json_unpack_ex(root, &up_error, 0, "{s:i}", "window.plot.xpos", &i1) == 0) - session.window_plot_xpos = i1; + session.plot.x = i1; if (json_unpack_ex(root, &up_error, 0, "{s:i}", "window.plot.ypos", &i1) == 0) - session.window_plot_ypos = i1; + session.plot.y = i1; if (json_unpack_ex(root, &up_error, 0, "{s:i}", "window.plot.hsize", &i1) == 0) - session.window_plot_hsize = i1; + session.plot.h = i1; if (json_unpack_ex(root, &up_error, 0, "{s:i}", "window.plot.wsize", &i1) == 0) - session.window_plot_wsize = i1; + session.plot.w = i1; // overlay/slider plot if (json_unpack_ex(root, &up_error, 0, "{s:i}", "window.overlay.xpos", &i1) == 0) - session.window_overlay_xpos = i1; + session.overlay.x = i1; if (json_unpack_ex(root, &up_error, 0, "{s:i}", "window.overlay.ypos", &i1) == 0) - session.window_overlay_ypos = i1; + session.overlay.y = i1; if (json_unpack_ex(root, &up_error, 0, "{s:i}", "window.overlay.hsize", &i1) == 0) - session.window_overlay_hsize = i1; + session.overlay.h = i1; if (json_unpack_ex(root, &up_error, 0, "{s:i}", "window.overlay.wsize", &i1) == 0) - session.window_overlay_wsize = i1; + session.overlay.w = i1; // show options if (json_unpack_ex(root, &up_error, 0, "{s:s}", "show.emoji", &s1) == 0) { @@ -338,11 +364,14 @@ static int usage_set_hints() { return PM3_SUCCESS; } -static int usage_set_savePath() { - PrintAndLogEx(NORMAL, "Usage: pref set defaultsavepath "); +static int usage_set_savePaths() { + PrintAndLogEx(NORMAL, "Usage: pref set savepaths [help] [create] [default ] [dump ] [trace ]"); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " "_GREEN_("help")" - This help"); - PrintAndLogEx(NORMAL, " "_GREEN_("")" - default save path"); + PrintAndLogEx(NORMAL, " "_GREEN_("create")" - Create directory if it does not exist"); + PrintAndLogEx(NORMAL, " "_GREEN_("default")" - Deafult path"); + PrintAndLogEx(NORMAL, " "_GREEN_("dump")" - Dump path"); + PrintAndLogEx(NORMAL, " "_GREEN_("trace")" - Trace help"); return PM3_SUCCESS; } @@ -433,17 +462,23 @@ void showDeviceDebugState(prefShowOpt_t Opt) { } void showSavePathState(prefShowOpt_t Opt) { - PrintAndLogEx(NORMAL, " %s default save path...... "_GREEN_("%s"), prefShowMsg(Opt), session.default_savepath); + PrintAndLogEx(NORMAL, " %s default save path...... "_GREEN_("%s"), prefShowMsg(Opt), session.defaultPaths[spDefault]); +} +void showDumpPathState(prefShowOpt_t Opt) { + PrintAndLogEx(NORMAL, " %s dump save path......... "_GREEN_("%s"), prefShowMsg(Opt), session.defaultPaths[spDump]); +} +void showTracePathState(prefShowOpt_t Opt) { + PrintAndLogEx(NORMAL, " %s trace save path........ "_GREEN_("%s"), prefShowMsg(Opt), session.defaultPaths[spTrace]); } void showPlotPosState(void){ PrintAndLogEx(NORMAL, " Plot window............ X "_GREEN_("%4d")" Y "_GREEN_("%4d")" H "_GREEN_("%4d")" W "_GREEN_("%4d"), - session.window_plot_xpos, session.window_plot_ypos, session.window_plot_hsize, session.window_plot_wsize); + session.plot.x, session.plot.y, session.plot.h, session.plot.w); } void showOverlayPosState(void) { PrintAndLogEx(NORMAL, " Slider/Overlay window.. X "_GREEN_("%4d")" Y "_GREEN_("%4d")" H "_GREEN_("%4d")" W "_GREEN_("%4d"), - session.window_overlay_xpos, session.window_overlay_ypos, session.window_overlay_hsize, session.window_overlay_wsize); + session.overlay.x, session.overlay.y, session.overlay.h, session.overlay.w); } void showHintsState(prefShowOpt_t Opt) { @@ -717,54 +752,100 @@ static int setCmdHint (const char *Cmd) return PM3_SUCCESS; } -static int setCmdSavePath (const char *Cmd) { +static int setCmdSavePaths (const char *Cmd) { uint8_t cmdp = 0; bool errors = false; // bool validValue = false; char *strOpt = NULL; int optLen = 0; char *newValue = NULL; + bool createDir = false; if (param_getchar(Cmd, cmdp) == 0x00) - return usage_set_savePath(); + return usage_set_savePaths(); while ((param_getchar(Cmd, cmdp) != 0x00) && !errors) { - if (strOpt != NULL) - free (strOpt); - + optLen = param_getlength(Cmd, cmdp)+1; - strOpt = (char *)calloc(optLen+1, sizeof(uint8_t)); + strOpt = (char *)realloc(strOpt,optLen+1);//, sizeof(uint8_t)); + if (param_getstr(Cmd, cmdp++, strOpt, optLen) != 0) { str_lower(strOpt); // convert to lowercase - if (strncmp (strOpt,"help",4) == 0) - return usage_set_savePath(); - else { - // not help, must be the path.... - - // param_getstr(Cmd, cmdp++, newValue, sizeof(newValue)); - if (newValue == NULL) - free(newValue); - newValue = (char *)calloc(strlen(strOpt)+1, sizeof(uint8_t)); - strcpy (newValue,strOpt); - - if (strcmp (newValue,session.default_savepath) != 0) { + if (strncmp(strOpt, "help", 4) == 0) + return usage_set_savePaths(); - // check if new path exists - if (fileExists (newValue)) { - showSavePathState (prefShowOLD); - if (session.default_savepath != NULL) - free (session.default_savepath); - session.default_savepath = (char *)calloc(strlen(newValue)+1, sizeof(uint8_t)); - strcpy (session.default_savepath,newValue); - showSavePathState (prefShowNEW); - preferences_save (); + if (strncmp(strOpt, "create", 6) == 0) { + // check if 2 more options. + if (param_getlength(Cmd, cmdp+1) == 0) // should have min 2 more options + return usage_set_savePaths(); + createDir = true; + } else { + if ((strncmp(strOpt, "default", 7) == 0) || + (strncmp(strOpt, "dump", 4) == 0) || + (strncmp(strOpt, "trace", 7) == 0)) { + + // Get Path + optLen = param_getlength(Cmd, cmdp) + 1; + newValue = (char *)realloc(newValue, optLen+1); + if (param_getstr(Cmd, cmdp++, newValue, optLen) == 0) { + PrintAndLogEx(INFO, "missing %s path",strOpt); + return usage_set_savePaths(); + } + // remove trailing slash. + if ((newValue[strlen(newValue)-1] == '/') || (newValue[strlen(newValue)-1] == '\\')) + newValue[strlen(newValue)-1] = 0x00; + + // Check path + if (!fileExists(newValue) && !createDir) { + PrintAndLogEx(ERR,"path does not exist... "_RED_("%s"),newValue); } else { - PrintAndLogEx (ERR,"path does not exist"); + // do we need to create it + if (!fileExists(newValue)) + create_path (newValue); //mkdir (newValue,0x777); + + // Default + if (strncmp(strOpt, "default", 7) == 0) { + if (strcmp(newValue, session.defaultPaths[spDefault]) != 0) { + showSavePathState(prefShowOLD); + session.defaultPaths[spDefault] = (char *)realloc(session.defaultPaths[spDefault], strlen(newValue) + 1); + strcpy (session.defaultPaths[spDefault],newValue); + showSavePathState(prefShowNEW); + preferences_save(); + } else { + PrintAndLogEx(INFO, "nothing changed"); + showSavePathState(prefShowNone); + } + } + // Dump + if (strncmp(strOpt, "dump", 4) == 0) { + if (strcmp(newValue, session.defaultPaths[spDump]) != 0) { + showDumpPathState(prefShowOLD); + session.defaultPaths[spDump] = (char *)realloc(session.defaultPaths[spDump], strlen(newValue) + 1); + strcpy (session.defaultPaths[spDump],newValue); + showDumpPathState(prefShowNEW); + preferences_save(); + } else { + PrintAndLogEx(INFO, "nothing changed"); + showDumpPathState(prefShowNone); + } + } + // Trace + if (strncmp(strOpt, "trace", 7) == 0) { + if (strcmp(newValue, session.defaultPaths[spTrace]) != 0) { + showTracePathState(prefShowOLD); + session.defaultPaths[spTrace] = (char *)realloc(session.defaultPaths[spTrace], strlen(newValue) + 1); + strcpy (session.defaultPaths[spTrace],newValue); + showTracePathState(prefShowNEW); + preferences_save(); + } else { + PrintAndLogEx(INFO, "nothing changed"); + showTracePathState(prefShowNone); + } + } } } else { - PrintAndLogEx(INFO,"nothing changed"); - showSavePathState (prefShowNone); + return usage_set_savePaths(); } } } @@ -778,13 +859,13 @@ static int setCmdSavePath (const char *Cmd) { } static command_t setCommandTable[] = { - {"help", setCmdHelp, AlwaysAvailable, "This help"}, - {"emoji", setCmdEmoji, AlwaysAvailable, "Set emoji display"}, - {"hints", setCmdHint, AlwaysAvailable, "Set hint display"}, - {"color", setCmdColor, AlwaysAvailable, "Set color support"}, - {"defaultsavepath", setCmdSavePath, AlwaysAvailable, "Set default save path"}, - {"clientdebug", setCmdDebug, AlwaysAvailable, "Set client debug level"}, - {"devicedebug", setCmdDeviceDebug, AlwaysAvailable, "Set device debug level"}, + {"help", setCmdHelp, AlwaysAvailable, "This help"}, + {"emoji", setCmdEmoji, AlwaysAvailable, "Set emoji display"}, + {"hints", setCmdHint, AlwaysAvailable, "Set hint display"}, + {"color", setCmdColor, AlwaysAvailable, "Set color support"}, + {"defaultsavepaths", setCmdSavePaths, AlwaysAvailable, "Set default save paths"}, + {"clientdebug", setCmdDebug, AlwaysAvailable, "Set client debug level"}, + {"devicedebug", setCmdDeviceDebug, AlwaysAvailable, "Set device debug level"}, {NULL, NULL, NULL, NULL} }; @@ -819,6 +900,8 @@ static int CmdPrefShow(const char *Cmd) { // showPlotPosState (); // showOverlayPosState (); showSavePathState(prefShowNone); + showDumpPathState(prefShowNone); + showTracePathState(prefShowNone); showClientDebugState(prefShowNone); showDeviceDebugState(prefShowNone); PrintAndLogEx(NORMAL, ""); diff --git a/client/src/proxguiqt.cpp b/client/src/proxguiqt.cpp index 945a1922f..f2fb5986a 100644 --- a/client/src/proxguiqt.cpp +++ b/client/src/proxguiqt.cpp @@ -139,21 +139,21 @@ ProxGuiQT::~ProxGuiQT(void) { SliderWidget::SliderWidget() { // Set the initail postion and size from settings if (session.preferences_loaded) - setGeometry(session.window_overlay_xpos, session.window_overlay_ypos, session.window_overlay_wsize, session.window_overlay_hsize); + setGeometry(session.overlay.x, session.overlay.y, session.overlay.w, session.overlay.h); else resize(800, 400); } void SliderWidget::resizeEvent(QResizeEvent *event) { - session.window_overlay_hsize = event->size().height(); - session.window_overlay_wsize = event->size().width(); + session.overlay.h = event->size().height(); + session.overlay.w = event->size().width(); session.window_changed = true; } void SliderWidget::moveEvent(QMoveEvent *event) { - session.window_overlay_xpos = event->pos().x(); - session.window_overlay_ypos = event->pos().y(); + session.overlay.x = event->pos().x(); + session.overlay.y = event->pos().y(); session.window_changed = true; } @@ -199,7 +199,7 @@ ProxWidget::ProxWidget(QWidget *parent, ProxGuiQT *master) : QWidget(parent) { this->master = master; // Set the initail postion and size from settings if (session.preferences_loaded) - setGeometry(session.window_plot_xpos, session.window_plot_ypos, session.window_plot_wsize, session.window_plot_hsize); + setGeometry(session.plot.x, session.plot.y, session.plot.w, session.plot.h); else resize(800, 400); @@ -224,7 +224,7 @@ ProxWidget::ProxWidget(QWidget *parent, ProxGuiQT *master) : QWidget(parent) { QObject::connect(opsController->horizontalSlider_dirthr_down, SIGNAL(valueChanged(int)), this, SLOT(vchange_dthr_down(int))); QObject::connect(opsController->horizontalSlider_askedge, SIGNAL(valueChanged(int)), this, SLOT(vchange_askedge(int))); - controlWidget->setGeometry(session.window_overlay_xpos, session.window_overlay_ypos, session.window_overlay_wsize, session.window_overlay_hsize); + controlWidget->setGeometry(session.overlay.x, session.overlay.y, session.overlay.w, session.overlay.h); // Set up the plot widget, which does the actual plotting plot = new Plot(this); @@ -292,13 +292,13 @@ void ProxWidget::showEvent(QShowEvent *event) { plot->show(); } void ProxWidget::moveEvent(QMoveEvent *event) { - session.window_plot_xpos = event->pos().x(); - session.window_plot_ypos = event->pos().y(); + session.plot.x = event->pos().x(); + session.plot.y = event->pos().y(); session.window_changed = true; } void ProxWidget::resizeEvent(QResizeEvent *event) { - session.window_plot_hsize = event->size().height(); - session.window_plot_wsize = event->size().width(); + session.plot.h = event->size().height(); + session.plot.w = event->size().width(); session.window_changed = true; } diff --git a/client/src/ui.h b/client/src/ui.h index 620769faa..1cfd9db21 100644 --- a/client/src/ui.h +++ b/client/src/ui.h @@ -21,6 +21,9 @@ typedef enum logLevel {NORMAL, SUCCESS, INFO, FAILED, WARNING, ERR, DEBUG, INPLA typedef enum emojiMode {ALIAS, EMOJI, ALTTEXT, ERASE} emojiMode_t; typedef enum clientdebugLevel {cdbOFF,cdbSIMPLE,cdbFULL} clientdebugLevel_t; typedef enum devicedebugLevel {ddbOFF,ddbERROR,ddbINFO,ddbDEBUG,ddbEXTENDED} devicedebugLevel_t; +#define savePathCount 3 +typedef enum savePaths {spDefault, spDump, spTrace} savePaths_t; +typedef struct {int x; int y; int h; int w;} qtWindow_t; typedef struct { bool preferences_loaded; @@ -32,15 +35,9 @@ typedef struct { bool help_dump_mode; bool show_hints; bool window_changed; // track if plot/overlay pos/size changed to save on exit - char *default_savepath;// [FILENAME_MAX]; - int window_plot_xpos; - int window_plot_ypos; - int window_plot_hsize; - int window_plot_wsize; - int window_overlay_xpos; - int window_overlay_ypos; - int window_overlay_hsize; - int window_overlay_wsize; + qtWindow_t plot; + qtWindow_t overlay; + char *defaultPaths[savePathCount]; // Array should allow loop searching for files clientdebugLevel_t client_debug_level; uint8_t device_debug_level; } session_arg_t; From 5060a52b3a13c1e126e50603fff9a479faa572cc Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Sat, 18 Apr 2020 18:47:30 +1000 Subject: [PATCH 04/12] Update fileutils.c Linux file permission fix --- client/src/fileutils.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/fileutils.c b/client/src/fileutils.c index d98b3d7ff..ad68d43e8 100644 --- a/client/src/fileutils.c +++ b/client/src/fileutils.c @@ -139,7 +139,7 @@ static bool is_directory(const char *filename) { #ifdef _WIN32 #define make_dir(a) _mkdir(a) #else -#define make_dir(a) mkdir(a,0x755) +#define make_dir(a) mkdir(a,0755) #endif bool create_path(const char *dirname) { From 600e5d7d6f98e6317413b9763459a964fa8bb527 Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Sun, 19 Apr 2020 10:49:09 +1000 Subject: [PATCH 05/12] streamline works --- client/src/fileutils.c | 20 +++++- client/src/fileutils.h | 2 + client/src/preferences.c | 149 +++++++++++++++++++++++---------------- client/src/ui.h | 5 +- 4 files changed, 112 insertions(+), 64 deletions(-) diff --git a/client/src/fileutils.c b/client/src/fileutils.c index ad68d43e8..54df5a17f 100644 --- a/client/src/fileutils.c +++ b/client/src/fileutils.c @@ -139,7 +139,7 @@ static bool is_directory(const char *filename) { #ifdef _WIN32 #define make_dir(a) _mkdir(a) #else -#define make_dir(a) mkdir(a,0755) +#define make_dir(a) mkdir(a,0755) //note 0755 MUST have leading 0 for octal linux file permissions #endif bool create_path(const char *dirname) { @@ -190,6 +190,24 @@ bool create_path(const char *dirname) { return true; } +bool setDefaultPath (savePaths_t pathIndex,const char *Path) { + + if (pathIndex < spItemCount) { + if ((Path == NULL) && (session.defaultPaths[pathIndex] != NULL)) { + free (session.defaultPaths[pathIndex]); + session.defaultPaths[pathIndex] = NULL; + } + + if (Path != NULL) { + session.defaultPaths[pathIndex] = (char *)realloc(session.defaultPaths[pathIndex], strlen(Path) + 1); + strcpy(session.defaultPaths[pathIndex], Path); + } + } else { + return false; + } + + return true; +} static char *filenamemcopy(const char *preferredName, const char *suffix) { if (preferredName == NULL) return NULL; diff --git a/client/src/fileutils.h b/client/src/fileutils.h index bd7886aa3..6d83fbcfe 100644 --- a/client/src/fileutils.h +++ b/client/src/fileutils.h @@ -75,6 +75,8 @@ typedef enum { int fileExists(const char *filename); bool create_path(const char *dirname); +bool setDefaultPath (savePaths_t pathIndex,const char *Path); // set a path in the path list session.defaultPaths + /** * @brief Utility function to save data to a binary file. This method takes a preferred name, but if that diff --git a/client/src/preferences.c b/client/src/preferences.c index eb58389d2..b649a6f13 100644 --- a/client/src/preferences.c +++ b/client/src/preferences.c @@ -67,31 +67,23 @@ int preferences_load(void) { session.show_hints = false; session.supports_colors = false; + // default save path + if (get_my_user_directory() != NULL) // should return path to .proxmark3 folder + setDefaultPath (spDefault, get_my_user_directory()); + else + setDefaultPath (spDefault, "."); - // default save path - if (get_my_user_directory() != NULL) { // should return path to .proxmark3 folder - session.defaultPaths[spDefault] = (char *)realloc(session.defaultPaths[spDefault], strlen(get_my_user_directory()) + 1); //, sizeof(uint8_t)); - strcpy(session.defaultPaths[spDefault], get_my_user_directory()); - } else { - session.defaultPaths[spDefault] = (char *)realloc(session.defaultPaths[spDefault], 2); // 2, sizeof(uint8_t)); - strcpy(session.defaultPaths[spDefault], "."); - } // default dump path - if (get_my_user_directory() != NULL) { // should return path to .proxmark3 folder - session.defaultPaths[spDump] = (char *)realloc(session.defaultPaths[spDump], strlen(get_my_user_directory()) + 1); //, sizeof(uint8_t)); - strcpy(session.defaultPaths[spDump], get_my_user_directory()); - } else { - session.defaultPaths[spDump] = (char *)realloc(session.defaultPaths[spDump], 2); // 2, sizeof(uint8_t)); - strcpy(session.defaultPaths[spDump], "."); - } - // default save path - if (get_my_user_directory() != NULL) { // should return path to .proxmark3 folder - session.defaultPaths[spTrace] = (char *)realloc(session.defaultPaths[spTrace], strlen(get_my_user_directory()) + 1); //, sizeof(uint8_t)); - strcpy(session.defaultPaths[spTrace], get_my_user_directory()); - } else { - session.defaultPaths[spTrace] = (char *)realloc(session.defaultPaths[spTrace], 2); // 2, sizeof(uint8_t)); - strcpy(session.defaultPaths[spTrace], "."); - } + if (get_my_user_directory() != NULL) // should return path to .proxmark3 folder + setDefaultPath (spDump, get_my_user_directory()); + else + setDefaultPath (spDump, "."); + + // default dump path + if (get_my_user_directory() != NULL) // should return path to .proxmark3 folder + setDefaultPath (spTrace, get_my_user_directory()); + else + setDefaultPath (spTrace, "."); // loadFileJson wants these, so pass in place holder values, though not used // in settings load; @@ -242,21 +234,17 @@ void preferences_load_callback(json_t *root) { } // default save path - if (json_unpack_ex(root, &up_error, 0, "{s:s}", "file.default.savepath", &s1) == 0) { - session.defaultPaths[spDefault] = realloc(session.defaultPaths[spDefault], strlen(s1) + 1); - strcpy(session.defaultPaths[spDefault], s1); - } + if (json_unpack_ex(root, &up_error, 0, "{s:s}", "file.default.savepath", &s1) == 0) + setDefaultPath (spDefault,s1); + // default dump path - if (json_unpack_ex(root, &up_error, 0, "{s:s}", "file.default.dumppath", &s1) == 0) { - session.defaultPaths[spDump] = realloc(session.defaultPaths[spDump],strlen(s1) + 1); - strcpy(session.defaultPaths[spDump],s1); - } + if (json_unpack_ex(root, &up_error, 0, "{s:s}", "file.default.dumppath", &s1) == 0) + setDefaultPath (spDump,s1); + // default trace path - if (json_unpack_ex(root, &up_error, 0, "{s:s}", "file.default.tracepath", &s1) == 0) { - session.defaultPaths[spTrace] = realloc(session.defaultPaths[spTrace],strlen(s1) + 1); - strcpy(session.defaultPaths[spTrace],s1); - } - + if (json_unpack_ex(root, &up_error, 0, "{s:s}", "file.default.tracepath", &s1) == 0) + setDefaultPath (spTrace,s1); + // window plot if (json_unpack_ex(root, &up_error, 0, "{s:i}", "window.plot.xpos", &i1) == 0) session.plot.x = i1; @@ -461,16 +449,33 @@ void showDeviceDebugState(prefShowOpt_t Opt) { } } -void showSavePathState(prefShowOpt_t Opt) { - PrintAndLogEx(NORMAL, " %s default save path...... "_GREEN_("%s"), prefShowMsg(Opt), session.defaultPaths[spDefault]); +void showSavePathState(savePaths_t pathIndex, prefShowOpt_t Opt) { + + char tempStr[50]; + + switch (pathIndex) { + case spDefault: + strcpy (tempStr,"default save path......"); + break; + case spDump: + strcpy (tempStr,"dump save path........."); + break; + case spTrace: + strcpy (tempStr,"trace save path........"); + break; + default: + strcpy (tempStr,_RED_("unknown")" save path......"); + } + PrintAndLogEx(NORMAL, " %s %s "_GREEN_("%s"), prefShowMsg(Opt), tempStr, session.defaultPaths[pathIndex]); } +/* void showDumpPathState(prefShowOpt_t Opt) { PrintAndLogEx(NORMAL, " %s dump save path......... "_GREEN_("%s"), prefShowMsg(Opt), session.defaultPaths[spDump]); } void showTracePathState(prefShowOpt_t Opt) { PrintAndLogEx(NORMAL, " %s trace save path........ "_GREEN_("%s"), prefShowMsg(Opt), session.defaultPaths[spTrace]); } - +*/ void showPlotPosState(void){ PrintAndLogEx(NORMAL, " Plot window............ X "_GREEN_("%4d")" Y "_GREEN_("%4d")" H "_GREEN_("%4d")" W "_GREEN_("%4d"), session.plot.x, session.plot.y, session.plot.h, session.plot.w); @@ -760,6 +765,8 @@ static int setCmdSavePaths (const char *Cmd) { int optLen = 0; char *newValue = NULL; bool createDir = false; + savePaths_t pathItem = spItemCount; + if (param_getchar(Cmd, cmdp) == 0x00) return usage_set_savePaths(); @@ -804,45 +811,67 @@ static int setCmdSavePaths (const char *Cmd) { if (!fileExists(newValue)) create_path (newValue); //mkdir (newValue,0x777); - // Default - if (strncmp(strOpt, "default", 7) == 0) { - if (strcmp(newValue, session.defaultPaths[spDefault]) != 0) { - showSavePathState(prefShowOLD); - session.defaultPaths[spDefault] = (char *)realloc(session.defaultPaths[spDefault], strlen(newValue) + 1); - strcpy (session.defaultPaths[spDefault],newValue); - showSavePathState(prefShowNEW); + pathItem = spItemCount; + if (strncmp(strOpt, "default", 7) == 0) pathItem = spDefault; + if (strncmp(strOpt, "dump", 4) == 0) pathItem = spDump; + if (strncmp(strOpt, "trace", 7) == 0) pathItem = spTrace; + + if (pathItem < spItemCount) { + if (strcmp(newValue, session.defaultPaths[pathItem]) != 0) { + showSavePathState(pathItem, prefShowOLD); + setDefaultPath (pathItem, newValue); + showSavePathState(pathItem, prefShowNEW); preferences_save(); } else { PrintAndLogEx(INFO, "nothing changed"); - showSavePathState(prefShowNone); + showSavePathState(pathItem, prefShowNone); + } + } + + /* + // Default + if (strncmp(strOpt, "default", 7) == 0) { + if (strcmp(newValue, session.defaultPaths[spDefault]) != 0) { + showSavePathState(spDefault, prefShowOLD); + setDefaultPath (spDefault, newValue); +// session.defaultPaths[spDefault] = (char *)realloc(session.defaultPaths[spDefault], strlen(newValue) + 1); +// strcpy (session.defaultPaths[spDefault],newValue); + showSavePathState(spDefault, prefShowNEW); + preferences_save(); + } else { + PrintAndLogEx(INFO, "nothing changed"); + showSavePathState(spDefault, prefShowNone); } } // Dump if (strncmp(strOpt, "dump", 4) == 0) { if (strcmp(newValue, session.defaultPaths[spDump]) != 0) { - showDumpPathState(prefShowOLD); - session.defaultPaths[spDump] = (char *)realloc(session.defaultPaths[spDump], strlen(newValue) + 1); - strcpy (session.defaultPaths[spDump],newValue); - showDumpPathState(prefShowNEW); + showSavePathState(spDump, prefShowOLD); + setDefaultPath (spDump, newValue); +// session.defaultPaths[spDump] = (char *)realloc(session.defaultPaths[spDump], strlen(newValue) + 1); +// strcpy (session.defaultPaths[spDump],newValue); + showSavePathState(spDump, prefShowNEW); preferences_save(); } else { PrintAndLogEx(INFO, "nothing changed"); - showDumpPathState(prefShowNone); + showSavePathState(spDump, prefShowNone); } } // Trace if (strncmp(strOpt, "trace", 7) == 0) { if (strcmp(newValue, session.defaultPaths[spTrace]) != 0) { - showTracePathState(prefShowOLD); - session.defaultPaths[spTrace] = (char *)realloc(session.defaultPaths[spTrace], strlen(newValue) + 1); - strcpy (session.defaultPaths[spTrace],newValue); - showTracePathState(prefShowNEW); + showSavePathState(spTrace, prefShowOLD); + setDefaultPath (spTrace, newValue); +// session.defaultPaths[spTrace] = (char *)realloc(session.defaultPaths[spTrace], strlen(newValue) + 1); +// strcpy (session.defaultPaths[spTrace],newValue); + showSavePathState(spTrace,prefShowNEW); preferences_save(); } else { PrintAndLogEx(INFO, "nothing changed"); - showTracePathState(prefShowNone); + showSavePathState(spTrace,prefShowNone); } } + */ } } else { return usage_set_savePaths(); @@ -899,9 +928,9 @@ static int CmdPrefShow(const char *Cmd) { showColorState(prefShowNone); // showPlotPosState (); // showOverlayPosState (); - showSavePathState(prefShowNone); - showDumpPathState(prefShowNone); - showTracePathState(prefShowNone); + showSavePathState(spDefault, prefShowNone); + showSavePathState(spDump, prefShowNone); + showSavePathState(spTrace, prefShowNone); showClientDebugState(prefShowNone); showDeviceDebugState(prefShowNone); PrintAndLogEx(NORMAL, ""); diff --git a/client/src/ui.h b/client/src/ui.h index 1cfd9db21..80d1794df 100644 --- a/client/src/ui.h +++ b/client/src/ui.h @@ -21,8 +21,7 @@ typedef enum logLevel {NORMAL, SUCCESS, INFO, FAILED, WARNING, ERR, DEBUG, INPLA typedef enum emojiMode {ALIAS, EMOJI, ALTTEXT, ERASE} emojiMode_t; typedef enum clientdebugLevel {cdbOFF,cdbSIMPLE,cdbFULL} clientdebugLevel_t; typedef enum devicedebugLevel {ddbOFF,ddbERROR,ddbINFO,ddbDEBUG,ddbEXTENDED} devicedebugLevel_t; -#define savePathCount 3 -typedef enum savePaths {spDefault, spDump, spTrace} savePaths_t; +typedef enum savePaths {spDefault, spDump, spTrace, spItemCount} savePaths_t; // last item spItemCount used to auto map to number of files typedef struct {int x; int y; int h; int w;} qtWindow_t; typedef struct { @@ -37,7 +36,7 @@ typedef struct { bool window_changed; // track if plot/overlay pos/size changed to save on exit qtWindow_t plot; qtWindow_t overlay; - char *defaultPaths[savePathCount]; // Array should allow loop searching for files + char *defaultPaths[spItemCount]; // Array should allow loop searching for files clientdebugLevel_t client_debug_level; uint8_t device_debug_level; } session_arg_t; From dd09d4074c19d94278528177691a5b30d9605377 Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Tue, 21 Apr 2020 08:50:04 +1000 Subject: [PATCH 06/12] tuning File List optimised. --- client/src/preferences.c | 45 ---------------------------------------- client/src/ui.h | 4 ++-- 2 files changed, 2 insertions(+), 47 deletions(-) diff --git a/client/src/preferences.c b/client/src/preferences.c index b649a6f13..73cd60293 100644 --- a/client/src/preferences.c +++ b/client/src/preferences.c @@ -827,51 +827,6 @@ static int setCmdSavePaths (const char *Cmd) { showSavePathState(pathItem, prefShowNone); } } - - /* - // Default - if (strncmp(strOpt, "default", 7) == 0) { - if (strcmp(newValue, session.defaultPaths[spDefault]) != 0) { - showSavePathState(spDefault, prefShowOLD); - setDefaultPath (spDefault, newValue); -// session.defaultPaths[spDefault] = (char *)realloc(session.defaultPaths[spDefault], strlen(newValue) + 1); -// strcpy (session.defaultPaths[spDefault],newValue); - showSavePathState(spDefault, prefShowNEW); - preferences_save(); - } else { - PrintAndLogEx(INFO, "nothing changed"); - showSavePathState(spDefault, prefShowNone); - } - } - // Dump - if (strncmp(strOpt, "dump", 4) == 0) { - if (strcmp(newValue, session.defaultPaths[spDump]) != 0) { - showSavePathState(spDump, prefShowOLD); - setDefaultPath (spDump, newValue); -// session.defaultPaths[spDump] = (char *)realloc(session.defaultPaths[spDump], strlen(newValue) + 1); -// strcpy (session.defaultPaths[spDump],newValue); - showSavePathState(spDump, prefShowNEW); - preferences_save(); - } else { - PrintAndLogEx(INFO, "nothing changed"); - showSavePathState(spDump, prefShowNone); - } - } - // Trace - if (strncmp(strOpt, "trace", 7) == 0) { - if (strcmp(newValue, session.defaultPaths[spTrace]) != 0) { - showSavePathState(spTrace, prefShowOLD); - setDefaultPath (spTrace, newValue); -// session.defaultPaths[spTrace] = (char *)realloc(session.defaultPaths[spTrace], strlen(newValue) + 1); -// strcpy (session.defaultPaths[spTrace],newValue); - showSavePathState(spTrace,prefShowNEW); - preferences_save(); - } else { - PrintAndLogEx(INFO, "nothing changed"); - showSavePathState(spTrace,prefShowNone); - } - } - */ } } else { return usage_set_savePaths(); diff --git a/client/src/ui.h b/client/src/ui.h index 80d1794df..f691de450 100644 --- a/client/src/ui.h +++ b/client/src/ui.h @@ -19,8 +19,8 @@ typedef enum logLevel {NORMAL, SUCCESS, INFO, FAILED, WARNING, ERR, DEBUG, INPLACE, HINT} logLevel_t; typedef enum emojiMode {ALIAS, EMOJI, ALTTEXT, ERASE} emojiMode_t; -typedef enum clientdebugLevel {cdbOFF,cdbSIMPLE,cdbFULL} clientdebugLevel_t; -typedef enum devicedebugLevel {ddbOFF,ddbERROR,ddbINFO,ddbDEBUG,ddbEXTENDED} devicedebugLevel_t; +typedef enum clientdebugLevel {cdbOFF, cdbSIMPLE, cdbFULL} clientdebugLevel_t; +typedef enum devicedebugLevel {ddbOFF, ddbERROR, ddbINFO, ddbDEBUG, ddbEXTENDED} devicedebugLevel_t; typedef enum savePaths {spDefault, spDump, spTrace, spItemCount} savePaths_t; // last item spItemCount used to auto map to number of files typedef struct {int x; int y; int h; int w;} qtWindow_t; From 3aee4fc5e9f72da2cd3eb5a21f06d05466ce8614 Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Tue, 21 Apr 2020 12:35:13 +1000 Subject: [PATCH 07/12] Update preferences.c --- client/src/preferences.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/preferences.c b/client/src/preferences.c index 73cd60293..cc8fd7b6f 100644 --- a/client/src/preferences.c +++ b/client/src/preferences.c @@ -790,7 +790,7 @@ static int setCmdSavePaths (const char *Cmd) { } else { if ((strncmp(strOpt, "default", 7) == 0) || (strncmp(strOpt, "dump", 4) == 0) || - (strncmp(strOpt, "trace", 7) == 0)) { + (strncmp(strOpt, "trace", 5) == 0)) { // Get Path optLen = param_getlength(Cmd, cmdp) + 1; @@ -814,7 +814,7 @@ static int setCmdSavePaths (const char *Cmd) { pathItem = spItemCount; if (strncmp(strOpt, "default", 7) == 0) pathItem = spDefault; if (strncmp(strOpt, "dump", 4) == 0) pathItem = spDump; - if (strncmp(strOpt, "trace", 7) == 0) pathItem = spTrace; + if (strncmp(strOpt, "trace", 5) == 0) pathItem = spTrace; if (pathItem < spItemCount) { if (strcmp(newValue, session.defaultPaths[pathItem]) != 0) { From 7fdaa51678645530d744b78bdf12616ef5ae1870 Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Fri, 24 Apr 2020 16:56:35 +1000 Subject: [PATCH 08/12] Pre Filepath cleanup --- client/src/fileutils.c | 4 ++- client/src/fileutils.h | 2 +- client/src/preferences.c | 73 +++++++++++++++++++++------------------- client/src/proxmark3.c | 9 ++--- client/src/ui.h | 4 +-- 5 files changed, 48 insertions(+), 44 deletions(-) diff --git a/client/src/fileutils.c b/client/src/fileutils.c index 54df5a17f..cf8079c19 100644 --- a/client/src/fileutils.c +++ b/client/src/fileutils.c @@ -136,6 +136,8 @@ static bool is_directory(const char *filename) { * @param dirname * @return */ +// Not used... +/* #ifdef _WIN32 #define make_dir(a) _mkdir(a) #else @@ -189,7 +191,7 @@ bool create_path(const char *dirname) { } return true; } - +*/ bool setDefaultPath (savePaths_t pathIndex,const char *Path) { if (pathIndex < spItemCount) { diff --git a/client/src/fileutils.h b/client/src/fileutils.h index 6d83fbcfe..39e7886ab 100644 --- a/client/src/fileutils.h +++ b/client/src/fileutils.h @@ -74,7 +74,7 @@ typedef enum { } DumpFileType_t; int fileExists(const char *filename); -bool create_path(const char *dirname); +//bool create_path(const char *dirname); bool setDefaultPath (savePaths_t pathIndex,const char *Path); // set a path in the path list session.defaultPaths diff --git a/client/src/preferences.c b/client/src/preferences.c index cc8fd7b6f..d3c462e0f 100644 --- a/client/src/preferences.c +++ b/client/src/preferences.c @@ -49,11 +49,9 @@ static char *prefGetFilename(void) { int preferences_load(void) { - PrintAndLogEx(INFO, "Looking for preferences..."); - // Set all defaults session.client_debug_level = cdbOFF; - session.device_debug_level = ddbOFF; + // session.device_debug_level = ddbOFF; session.window_changed = false; session.plot.x = 10; session.plot.y = 30; @@ -67,6 +65,11 @@ int preferences_load(void) { session.show_hints = false; session.supports_colors = false; + setDefaultPath (spDefault, ""); + setDefaultPath (spDump, ""); + setDefaultPath (spTrace, ""); + +/* // default save path if (get_my_user_directory() != NULL) // should return path to .proxmark3 folder setDefaultPath (spDefault, get_my_user_directory()); @@ -84,14 +87,19 @@ int preferences_load(void) { setDefaultPath (spTrace, get_my_user_directory()); else setDefaultPath (spTrace, "."); +*/ // loadFileJson wants these, so pass in place holder values, though not used // in settings load; uint8_t dummyData = 0x00; size_t dummyDL = 0x00; - if (loadFileJSON(prefGetFilename(), &dummyData, sizeof(dummyData), &dummyDL) == PM3_SUCCESS) { - session.preferences_loaded = true; + // to better control json cant find file error msg. + if (fileExists(prefGetFilename())) { + PrintAndLogEx(INFO, "Loading Preferences %s",prefGetFilename()); + if (loadFileJSON(prefGetFilename(), &dummyData, sizeof(dummyData), &dummyDL) == PM3_SUCCESS) { + session.preferences_loaded = true; + } } // Note, if session.settings_loaded == false then the settings_save // will be called in main () to save settings as set in defaults and main() checks. @@ -194,7 +202,7 @@ void preferences_save_callback(json_t *root) { default: JsonSaveStr(root, "logging.level", "NORMAL"); } - +/* switch (session.device_debug_level) { case ddbOFF: JsonSaveStr(root, "device.debug.level", "off"); @@ -214,7 +222,7 @@ void preferences_save_callback(json_t *root) { default: JsonSaveStr(root, "logging.level", "NORMAL"); } - +*/ } void preferences_load_callback(json_t *root) { @@ -280,7 +288,7 @@ void preferences_load_callback(json_t *root) { if (json_unpack_ex(root, &up_error, 0, "{s:b}", "os.supports.colors", &b1) == 0) session.supports_colors = b1; - +/* // Logging Level if (json_unpack_ex(root, &up_error, 0, "{s:s}", "device.debug.level", &s1) == 0) { strncpy(tempStr, s1, sizeof(tempStr) - 1); @@ -291,7 +299,7 @@ void preferences_load_callback(json_t *root) { if (strncmp(tempStr, "debug", 5) == 0) session.device_debug_level = ddbDEBUG; if (strncmp(tempStr, "extended", 8) == 0) session.device_debug_level = ddbEXTENDED; } - +*/ } // Help Functions @@ -328,7 +336,7 @@ static int usage_set_debug() { return PM3_SUCCESS; } - +/* static int usage_set_devicedebug() { PrintAndLogEx(NORMAL, "Usage: pref set devicedebug "); PrintAndLogEx(NORMAL, "Options:"); @@ -341,7 +349,7 @@ static int usage_set_devicedebug() { return PM3_SUCCESS; } - +*/ static int usage_set_hints() { PrintAndLogEx(NORMAL, "Usage: pref set hints "); PrintAndLogEx(NORMAL, "Options:"); @@ -426,7 +434,7 @@ void showClientDebugState(prefShowOpt_t Opt) { PrintAndLogEx(NORMAL, " %s client debug........... "_RED_("unknown"), prefShowMsg(Opt)); } } - +/* void showDeviceDebugState(prefShowOpt_t Opt) { switch (session.device_debug_level) { case ddbOFF: @@ -448,7 +456,7 @@ void showDeviceDebugState(prefShowOpt_t Opt) { PrintAndLogEx(NORMAL, " %s device debug........... "_RED_("unknown"), prefShowMsg(Opt)); } } - +*/ void showSavePathState(savePaths_t pathIndex, prefShowOpt_t Opt) { char tempStr[50]; @@ -466,16 +474,12 @@ void showSavePathState(savePaths_t pathIndex, prefShowOpt_t Opt) { default: strcpy (tempStr,_RED_("unknown")" save path......"); } - PrintAndLogEx(NORMAL, " %s %s "_GREEN_("%s"), prefShowMsg(Opt), tempStr, session.defaultPaths[pathIndex]); + if ((session.defaultPaths[pathIndex] == NULL) || (strcmp(session.defaultPaths[pathIndex],"") == 0)) + PrintAndLogEx(NORMAL, " %s %s "_WHITE_("not set"), prefShowMsg(Opt),tempStr); + else + PrintAndLogEx(NORMAL, " %s %s "_GREEN_("%s"), prefShowMsg(Opt), tempStr, session.defaultPaths[pathIndex]); } -/* -void showDumpPathState(prefShowOpt_t Opt) { - PrintAndLogEx(NORMAL, " %s dump save path......... "_GREEN_("%s"), prefShowMsg(Opt), session.defaultPaths[spDump]); -} -void showTracePathState(prefShowOpt_t Opt) { - PrintAndLogEx(NORMAL, " %s trace save path........ "_GREEN_("%s"), prefShowMsg(Opt), session.defaultPaths[spTrace]); -} -*/ + void showPlotPosState(void){ PrintAndLogEx(NORMAL, " Plot window............ X "_GREEN_("%4d")" Y "_GREEN_("%4d")" H "_GREEN_("%4d")" W "_GREEN_("%4d"), session.plot.x, session.plot.y, session.plot.h, session.plot.w); @@ -643,7 +647,7 @@ static int setCmdDebug(const char *Cmd) { return PM3_SUCCESS; } - +/* static int setCmdDeviceDebug (const char *Cmd) { uint8_t cmdp = 0; @@ -709,7 +713,7 @@ static int setCmdDeviceDebug (const char *Cmd) return PM3_SUCCESS; } - +*/ static int setCmdHint (const char *Cmd) { uint8_t cmdp = 0; @@ -808,8 +812,8 @@ static int setCmdSavePaths (const char *Cmd) { PrintAndLogEx(ERR,"path does not exist... "_RED_("%s"),newValue); } else { // do we need to create it - if (!fileExists(newValue)) - create_path (newValue); //mkdir (newValue,0x777); + // if (!fileExists(newValue)) + // create_path (newValue); //mkdir (newValue,0x777); pathItem = spItemCount; if (strncmp(strOpt, "default", 7) == 0) pathItem = spDefault; @@ -847,9 +851,9 @@ static command_t setCommandTable[] = { {"emoji", setCmdEmoji, AlwaysAvailable, "Set emoji display"}, {"hints", setCmdHint, AlwaysAvailable, "Set hint display"}, {"color", setCmdColor, AlwaysAvailable, "Set color support"}, - {"defaultsavepaths", setCmdSavePaths, AlwaysAvailable, "Set default save paths"}, + {"defaultsavepaths", setCmdSavePaths, AlwaysAvailable, "... to be adjusted next ... "}, {"clientdebug", setCmdDebug, AlwaysAvailable, "Set client debug level"}, - {"devicedebug", setCmdDeviceDebug, AlwaysAvailable, "Set device debug level"}, + // {"devicedebug", setCmdDeviceDebug, AlwaysAvailable, "Set device debug level"}, {NULL, NULL, NULL, NULL} }; @@ -870,24 +874,25 @@ int CmdPrefSet(const char *Cmd) { static int CmdPrefShow(const char *Cmd) { PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, _CYAN_("Preferences")); + PrintAndLogEx(NORMAL, _CYAN_("Preferences loaded from %s"),prefGetFilename()); if (!session.preferences_loaded) { PrintAndLogEx (ERR, "Preferneces not loaded"); return PM3_ESOFT; } - PrintAndLogEx(NORMAL, " preference file........ "_GREEN_("%s"), prefGetFilename()); + // PrintAndLogEx(NORMAL, " preference file........ "_GREEN_("%s"), prefGetFilename()); showEmojiState(prefShowNone); showHintsState(prefShowNone); showColorState(prefShowNone); // showPlotPosState (); // showOverlayPosState (); - showSavePathState(spDefault, prefShowNone); - showSavePathState(spDump, prefShowNone); - showSavePathState(spTrace, prefShowNone); + // showSavePathState(spDefault, prefShowNone); + // showSavePathState(spDump, prefShowNone); + // showSavePathState(spTrace, prefShowNone); + showClientDebugState(prefShowNone); - showDeviceDebugState(prefShowNone); +// showDeviceDebugState(prefShowNone); PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; diff --git a/client/src/proxmark3.c b/client/src/proxmark3.c index 84768f613..730504714 100644 --- a/client/src/proxmark3.c +++ b/client/src/proxmark3.c @@ -703,10 +703,6 @@ int main(int argc, char *argv[]) { // Load Settings and assign // This will allow the command line to override the settings.json values preferences_load(); - // Change height/width (Rows,Cols) - Testing - // printf ("\e[8;50;100t"); - // printf ("\e[3;50;50t"); // x,y - //printf ("Path : %s \n",my_user_directory); // quick patch for debug level g_debugMode = session.client_debug_level; // settings_save (); @@ -980,9 +976,10 @@ int main(int argc, char *argv[]) { // Doing this here will ensure other checks and updates are saved to over rule default // e.g. Linux color use check if (!session.preferences_loaded) { + PrintAndLogEx (INFO,"Creating initial preferences file"); // json save reports file name, so just info msg here preferences_save(); // Save defaults session.preferences_loaded = true; - } else { + } /* else { // Set device debug level PrintAndLogEx(INFO,"setting device debug loglevel"); if (session.pm3_present) { @@ -994,7 +991,7 @@ int main(int argc, char *argv[]) { else PrintAndLogEx(WARNING,"Proxmark3 not ready to set debug level"); } - + */ #endif #ifdef HAVE_GUI diff --git a/client/src/ui.h b/client/src/ui.h index f691de450..2e5a3fd06 100644 --- a/client/src/ui.h +++ b/client/src/ui.h @@ -20,7 +20,7 @@ typedef enum logLevel {NORMAL, SUCCESS, INFO, FAILED, WARNING, ERR, DEBUG, INPLACE, HINT} logLevel_t; typedef enum emojiMode {ALIAS, EMOJI, ALTTEXT, ERASE} emojiMode_t; typedef enum clientdebugLevel {cdbOFF, cdbSIMPLE, cdbFULL} clientdebugLevel_t; -typedef enum devicedebugLevel {ddbOFF, ddbERROR, ddbINFO, ddbDEBUG, ddbEXTENDED} devicedebugLevel_t; +// typedef enum devicedebugLevel {ddbOFF, ddbERROR, ddbINFO, ddbDEBUG, ddbEXTENDED} devicedebugLevel_t; typedef enum savePaths {spDefault, spDump, spTrace, spItemCount} savePaths_t; // last item spItemCount used to auto map to number of files typedef struct {int x; int y; int h; int w;} qtWindow_t; @@ -38,7 +38,7 @@ typedef struct { qtWindow_t overlay; char *defaultPaths[spItemCount]; // Array should allow loop searching for files clientdebugLevel_t client_debug_level; - uint8_t device_debug_level; +// uint8_t device_debug_level; } session_arg_t; extern session_arg_t session; From a8ff7b4815b598bf99c5bc7fff990a9755d0ed57 Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Sat, 25 Apr 2020 18:37:23 +1000 Subject: [PATCH 09/12] Comment out file path code --- client/src/fileutils.c | 3 ++- client/src/fileutils.h | 2 +- client/src/preferences.c | 29 +++++++++++++++-------------- client/src/ui.h | 4 ++-- 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/client/src/fileutils.c b/client/src/fileutils.c index cf8079c19..936bf0aef 100644 --- a/client/src/fileutils.c +++ b/client/src/fileutils.c @@ -192,6 +192,7 @@ bool create_path(const char *dirname) { return true; } */ +/* bool setDefaultPath (savePaths_t pathIndex,const char *Path) { if (pathIndex < spItemCount) { @@ -210,7 +211,7 @@ bool setDefaultPath (savePaths_t pathIndex,const char *Path) { return true; } - +*/ static char *filenamemcopy(const char *preferredName, const char *suffix) { if (preferredName == NULL) return NULL; if (suffix == NULL) return NULL; diff --git a/client/src/fileutils.h b/client/src/fileutils.h index 39e7886ab..2f55a3c1a 100644 --- a/client/src/fileutils.h +++ b/client/src/fileutils.h @@ -75,7 +75,7 @@ typedef enum { int fileExists(const char *filename); //bool create_path(const char *dirname); -bool setDefaultPath (savePaths_t pathIndex,const char *Path); // set a path in the path list session.defaultPaths +//bool setDefaultPath (savePaths_t pathIndex,const char *Path); // set a path in the path list session.defaultPaths /** diff --git a/client/src/preferences.c b/client/src/preferences.c index d3c462e0f..3bc7158b4 100644 --- a/client/src/preferences.c +++ b/client/src/preferences.c @@ -65,9 +65,9 @@ int preferences_load(void) { session.show_hints = false; session.supports_colors = false; - setDefaultPath (spDefault, ""); - setDefaultPath (spDump, ""); - setDefaultPath (spTrace, ""); +// setDefaultPath (spDefault, ""); +// setDefaultPath (spDump, ""); +// setDefaultPath (spTrace, ""); /* // default save path @@ -172,9 +172,9 @@ void preferences_save_callback(json_t *root) { JsonSaveBoolean(root, "os.supports.colors", session.supports_colors); - JsonSaveStr(root, "file.default.savepath", session.defaultPaths[spDefault]); - JsonSaveStr(root, "file.default.dumppath", session.defaultPaths[spDump]); - JsonSaveStr(root, "file.default.tracepath", session.defaultPaths[spTrace]); + // JsonSaveStr(root, "file.default.savepath", session.defaultPaths[spDefault]); + // JsonSaveStr(root, "file.default.dumppath", session.defaultPaths[spDump]); + // JsonSaveStr(root, "file.default.tracepath", session.defaultPaths[spTrace]); // Plot window JsonSaveInt(root, "window.plot.xpos", session.plot.x); @@ -240,7 +240,7 @@ void preferences_load_callback(json_t *root) { if (strncmp(tempStr, "simple", 6) == 0) session.client_debug_level = cdbSIMPLE; if (strncmp(tempStr, "full", 4) == 0) session.client_debug_level = cdbFULL; } - +/* // default save path if (json_unpack_ex(root, &up_error, 0, "{s:s}", "file.default.savepath", &s1) == 0) setDefaultPath (spDefault,s1); @@ -252,7 +252,7 @@ void preferences_load_callback(json_t *root) { // default trace path if (json_unpack_ex(root, &up_error, 0, "{s:s}", "file.default.tracepath", &s1) == 0) setDefaultPath (spTrace,s1); - +*/ // window plot if (json_unpack_ex(root, &up_error, 0, "{s:i}", "window.plot.xpos", &i1) == 0) session.plot.x = i1; @@ -359,7 +359,7 @@ static int usage_set_hints() { return PM3_SUCCESS; } - +/* static int usage_set_savePaths() { PrintAndLogEx(NORMAL, "Usage: pref set savepaths [help] [create] [default ] [dump ] [trace ]"); PrintAndLogEx(NORMAL, "Options:"); @@ -371,7 +371,7 @@ static int usage_set_savePaths() { return PM3_SUCCESS; } - +*/ // Preference Processing Functions // typedef enum preferenceId {prefNONE,prefHELP,prefEMOJI,prefCOLOR,prefPLOT,prefOVERLAY,prefHINTS,prefCLIENTDEBUG} preferenceId_t; typedef enum prefShowOpt {prefShowNone, prefShowOLD, prefShowNEW} prefShowOpt_t; @@ -457,6 +457,7 @@ void showDeviceDebugState(prefShowOpt_t Opt) { } } */ +/* void showSavePathState(savePaths_t pathIndex, prefShowOpt_t Opt) { char tempStr[50]; @@ -479,7 +480,7 @@ void showSavePathState(savePaths_t pathIndex, prefShowOpt_t Opt) { else PrintAndLogEx(NORMAL, " %s %s "_GREEN_("%s"), prefShowMsg(Opt), tempStr, session.defaultPaths[pathIndex]); } - +*/ void showPlotPosState(void){ PrintAndLogEx(NORMAL, " Plot window............ X "_GREEN_("%4d")" Y "_GREEN_("%4d")" H "_GREEN_("%4d")" W "_GREEN_("%4d"), session.plot.x, session.plot.y, session.plot.h, session.plot.w); @@ -760,7 +761,7 @@ static int setCmdHint (const char *Cmd) return PM3_SUCCESS; } - +/* static int setCmdSavePaths (const char *Cmd) { uint8_t cmdp = 0; bool errors = false; @@ -845,13 +846,13 @@ static int setCmdSavePaths (const char *Cmd) { return PM3_SUCCESS; } - +*/ static command_t setCommandTable[] = { {"help", setCmdHelp, AlwaysAvailable, "This help"}, {"emoji", setCmdEmoji, AlwaysAvailable, "Set emoji display"}, {"hints", setCmdHint, AlwaysAvailable, "Set hint display"}, {"color", setCmdColor, AlwaysAvailable, "Set color support"}, - {"defaultsavepaths", setCmdSavePaths, AlwaysAvailable, "... to be adjusted next ... "}, + // {"defaultsavepaths", setCmdSavePaths, AlwaysAvailable, "... to be adjusted next ... "}, {"clientdebug", setCmdDebug, AlwaysAvailable, "Set client debug level"}, // {"devicedebug", setCmdDeviceDebug, AlwaysAvailable, "Set device debug level"}, {NULL, NULL, NULL, NULL} diff --git a/client/src/ui.h b/client/src/ui.h index 2e5a3fd06..e47031d70 100644 --- a/client/src/ui.h +++ b/client/src/ui.h @@ -21,7 +21,7 @@ typedef enum logLevel {NORMAL, SUCCESS, INFO, FAILED, WARNING, ERR, DEBUG, INPLA typedef enum emojiMode {ALIAS, EMOJI, ALTTEXT, ERASE} emojiMode_t; typedef enum clientdebugLevel {cdbOFF, cdbSIMPLE, cdbFULL} clientdebugLevel_t; // typedef enum devicedebugLevel {ddbOFF, ddbERROR, ddbINFO, ddbDEBUG, ddbEXTENDED} devicedebugLevel_t; -typedef enum savePaths {spDefault, spDump, spTrace, spItemCount} savePaths_t; // last item spItemCount used to auto map to number of files +//typedef enum savePaths {spDefault, spDump, spTrace, spItemCount} savePaths_t; // last item spItemCount used to auto map to number of files typedef struct {int x; int y; int h; int w;} qtWindow_t; typedef struct { @@ -36,7 +36,7 @@ typedef struct { bool window_changed; // track if plot/overlay pos/size changed to save on exit qtWindow_t plot; qtWindow_t overlay; - char *defaultPaths[spItemCount]; // Array should allow loop searching for files +// char *defaultPaths[spItemCount]; // Array should allow loop searching for files clientdebugLevel_t client_debug_level; // uint8_t device_debug_level; } session_arg_t; From a15d14e038d7493e82444c8c42fd3db45ea9ff40 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sat, 25 Apr 2020 15:10:34 +0200 Subject: [PATCH 10/12] Make sure colors and emoji are disabled when not on TTY --- client/src/fileutils.c | 2 +- client/src/proxmark3.c | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/client/src/fileutils.c b/client/src/fileutils.c index 936bf0aef..4d1b8355d 100644 --- a/client/src/fileutils.c +++ b/client/src/fileutils.c @@ -986,10 +986,10 @@ int loadFileJSON(const char *preferredName, void *data, size_t maxdatalen, size_ } *datalen = sptr; } + PrintAndLogEx(SUCCESS, "loaded from JSON file " _YELLOW_("%s"), fileName); if (!strcmp(ctype, "settings")) { preferences_load_callback(root); } - PrintAndLogEx(SUCCESS, "loaded from JSON file " _YELLOW_("%s"), fileName); out: json_decref(root); free(fileName); diff --git a/client/src/proxmark3.c b/client/src/proxmark3.c index 730504714..0cd545389 100644 --- a/client/src/proxmark3.c +++ b/client/src/proxmark3.c @@ -908,6 +908,12 @@ int main(int argc, char *argv[]) { session.supports_colors = true; session.emoji_mode = EMOJI; } + } else { + // even if prefs, we disable colors if stdin or stdout is not a TTY + if ((! session.stdinOnTTY) || (! session.stdoutOnTTY)) { + session.supports_colors = false; + session.emoji_mode = ALTTEXT; + } } #else if (session.stdinOnTTY && session.stdoutOnTTY) { From ae21a3148f5ca54ea2a5c75a8f54832700f84db5 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sat, 25 Apr 2020 15:17:11 +0200 Subject: [PATCH 11/12] Lighter msg for loading prefs, json will anyway always tell the filename --- client/src/preferences.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/preferences.c b/client/src/preferences.c index 3bc7158b4..f93305b4d 100644 --- a/client/src/preferences.c +++ b/client/src/preferences.c @@ -96,7 +96,7 @@ int preferences_load(void) { // to better control json cant find file error msg. if (fileExists(prefGetFilename())) { - PrintAndLogEx(INFO, "Loading Preferences %s",prefGetFilename()); + PrintAndLogEx(INFO, "Loading Preferences..."); if (loadFileJSON(prefGetFilename(), &dummyData, sizeof(dummyData), &dummyDL) == PM3_SUCCESS) { session.preferences_loaded = true; } @@ -114,7 +114,7 @@ int preferences_save(void) { char *backupFilename = NULL;// [FILENAME_MAX+sizeof(preferencesFilename)+10] = {0}; int fnLen = 0; - PrintAndLogEx(INFO, "Saving preferences ..."); + PrintAndLogEx(INFO, "Saving Preferences..."); fnLen = strlen(prefGetFilename()) + 5; // .bak\0 backupFilename = (char *)calloc(fnLen, sizeof(uint8_t)); From ba0b28a7dea6c69b196c647ccbf0312758efd963 Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Sun, 26 Apr 2020 10:18:00 +1000 Subject: [PATCH 12/12] Get/display a single preference --- client/src/preferences.c | 54 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/client/src/preferences.c b/client/src/preferences.c index 3bc7158b4..eb6634531 100644 --- a/client/src/preferences.c +++ b/client/src/preferences.c @@ -847,6 +847,50 @@ static int setCmdSavePaths (const char *Cmd) { return PM3_SUCCESS; } */ + +int getCmdHelp (const char *Cmd) { + + return PM3_SUCCESS; +} + +int getCmdEmoji (const char *Cmd) { + + showEmojiState(prefShowNone); + + return PM3_SUCCESS; +} + +int getCmdHint (const char *Cmd) { + + showHintsState(prefShowNone); + + return PM3_SUCCESS; +} + +int getCmdColor (const char *Cmd) { + + showColorState(prefShowNone); + + return PM3_SUCCESS; +} + +int getCmdDebug (const char *Cmd) { + + showClientDebugState(prefShowNone); + return PM3_SUCCESS; +} + +static command_t getCommandTable[] = { +// {"help", getCmdHelp, AlwaysAvailable, "This help"}, + {"emoji", getCmdEmoji, AlwaysAvailable, "Get emoji display preference"}, + {"hints", getCmdHint, AlwaysAvailable, "Get hint display preference"}, + {"color", getCmdColor, AlwaysAvailable, "Get color support preference"}, + // {"defaultsavepaths", getCmdSavePaths, AlwaysAvailable, "... to be adjusted next ... "}, + {"clientdebug", getCmdDebug, AlwaysAvailable, "Get client debug level preference"}, + // {"devicedebug", getCmdDeviceDebug, AlwaysAvailable, "Get device debug level"}, + {NULL, NULL, NULL, NULL} +}; + static command_t setCommandTable[] = { {"help", setCmdHelp, AlwaysAvailable, "This help"}, {"emoji", setCmdEmoji, AlwaysAvailable, "Set emoji display"}, @@ -858,7 +902,6 @@ static command_t setCommandTable[] = { {NULL, NULL, NULL, NULL} }; - static int setCmdHelp(const char *Cmd) { (void)Cmd; // Cmd is not used so far CmdsHelp(setCommandTable); @@ -866,6 +909,12 @@ static int setCmdHelp(const char *Cmd) { return PM3_SUCCESS; } +int CmdPrefGet(const char *Cmd) { + clearCommandBuffer(); + + return CmdsParse(getCommandTable, Cmd); +} + int CmdPrefSet(const char *Cmd) { clearCommandBuffer(); @@ -907,8 +956,9 @@ static int CmdPrefSave (const char *Cmd) { */ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, + {"get", CmdPrefGet, AlwaysAvailable, "Get a preference"}, {"set", CmdPrefSet, AlwaysAvailable, "Set a preference"}, - {"show", CmdPrefShow, AlwaysAvailable, "Show preferences"}, + {"show", CmdPrefShow, AlwaysAvailable, "Show all preferences"}, {NULL, NULL, NULL, NULL} };