mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-07-30 19:40:37 -07:00
updates
Added dump and trace path and clean a little for cleaner use and expansion.
This commit is contained in:
parent
b593d2c319
commit
e2c56fe26c
5 changed files with 237 additions and 96 deletions
|
@ -49,6 +49,7 @@
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include "scandir.h"
|
#include "scandir.h"
|
||||||
|
#include <direct.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define PATH_MAX_LENGTH 200
|
#define PATH_MAX_LENGTH 200
|
||||||
|
@ -130,6 +131,65 @@ static bool is_directory(const char *filename) {
|
||||||
return S_ISDIR(st.st_mode) != 0;
|
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) {
|
static char *filenamemcopy(const char *preferredName, const char *suffix) {
|
||||||
if (preferredName == NULL) return NULL;
|
if (preferredName == NULL) return NULL;
|
||||||
|
|
|
@ -74,6 +74,7 @@ typedef enum {
|
||||||
} DumpFileType_t;
|
} DumpFileType_t;
|
||||||
|
|
||||||
int fileExists(const char *filename);
|
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
|
* @brief Utility function to save data to a binary file. This method takes a preferred name, but if that
|
||||||
|
|
|
@ -55,14 +55,14 @@ int preferences_load(void) {
|
||||||
session.client_debug_level = cdbOFF;
|
session.client_debug_level = cdbOFF;
|
||||||
session.device_debug_level = ddbOFF;
|
session.device_debug_level = ddbOFF;
|
||||||
session.window_changed = false;
|
session.window_changed = false;
|
||||||
session.window_plot_xpos = 10;
|
session.plot.x = 10;
|
||||||
session.window_plot_ypos = 30;
|
session.plot.y = 30;
|
||||||
session.window_plot_hsize = 400;
|
session.plot.h = 400;
|
||||||
session.window_plot_wsize = 800;
|
session.plot.w = 800;
|
||||||
session.window_overlay_xpos = session.window_plot_xpos;
|
session.overlay.x = session.plot.x;
|
||||||
session.window_overlay_ypos = 60 + session.window_plot_ypos + session.window_plot_hsize;
|
session.overlay.y = 60 + session.plot.y + session.plot.h;
|
||||||
session.window_overlay_hsize = 200;
|
session.overlay.h = 200;
|
||||||
session.window_overlay_wsize = session.window_plot_wsize;
|
session.overlay.w = session.plot.w;
|
||||||
session.emoji_mode = ALIAS;
|
session.emoji_mode = ALIAS;
|
||||||
session.show_hints = false;
|
session.show_hints = false;
|
||||||
session.supports_colors = false;
|
session.supports_colors = false;
|
||||||
|
@ -70,11 +70,27 @@ int preferences_load(void) {
|
||||||
|
|
||||||
// default save path
|
// default save path
|
||||||
if (get_my_user_directory() != NULL) { // should return path to .proxmark3 folder
|
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));
|
session.defaultPaths[spDefault] = (char *)realloc(session.defaultPaths[spDefault], strlen(get_my_user_directory()) + 1); //, sizeof(uint8_t));
|
||||||
strcpy(session.default_savepath, get_my_user_directory());
|
strcpy(session.defaultPaths[spDefault], get_my_user_directory());
|
||||||
} else {
|
} else {
|
||||||
session.default_savepath = (char *)realloc(session.default_savepath,2); // 2, sizeof(uint8_t));
|
session.defaultPaths[spDefault] = (char *)realloc(session.defaultPaths[spDefault], 2); // 2, sizeof(uint8_t));
|
||||||
strcpy(session.default_savepath, ".");
|
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
|
// 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);
|
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
|
// Plot window
|
||||||
JsonSaveInt(root, "window.plot.xpos", session.window_plot_xpos);
|
JsonSaveInt(root, "window.plot.xpos", session.plot.x);
|
||||||
JsonSaveInt(root, "window.plot.ypos", session.window_plot_ypos);
|
JsonSaveInt(root, "window.plot.ypos", session.plot.y);
|
||||||
JsonSaveInt(root, "window.plot.hsize", session.window_plot_hsize);
|
JsonSaveInt(root, "window.plot.hsize", session.plot.h);
|
||||||
JsonSaveInt(root, "window.plot.wsize", session.window_plot_wsize);
|
JsonSaveInt(root, "window.plot.wsize", session.plot.w);
|
||||||
|
|
||||||
// Overlay/Slider window
|
// Overlay/Slider window
|
||||||
JsonSaveInt(root, "window.overlay.xpos", session.window_overlay_xpos);
|
JsonSaveInt(root, "window.overlay.xpos", session.overlay.x);
|
||||||
JsonSaveInt(root, "window.overlay.ypos", session.window_overlay_ypos);
|
JsonSaveInt(root, "window.overlay.ypos", session.overlay.y);
|
||||||
JsonSaveInt(root, "window.overlay.hsize", session.window_overlay_hsize);
|
JsonSaveInt(root, "window.overlay.hsize", session.overlay.h);
|
||||||
JsonSaveInt(root, "window.overlay.wsize", session.window_overlay_wsize);
|
JsonSaveInt(root, "window.overlay.wsize", session.overlay.w);
|
||||||
|
|
||||||
// Log level, convert to text
|
// Log level, convert to text
|
||||||
switch (session.client_debug_level) {
|
switch (session.client_debug_level) {
|
||||||
|
@ -225,31 +243,39 @@ void preferences_load_callback(json_t *root) {
|
||||||
|
|
||||||
// default save path
|
// default save path
|
||||||
if (json_unpack_ex(root, &up_error, 0, "{s:s}", "file.default.savepath", &s1) == 0) {
|
if (json_unpack_ex(root, &up_error, 0, "{s:s}", "file.default.savepath", &s1) == 0) {
|
||||||
if (session.default_savepath != NULL)
|
session.defaultPaths[spDefault] = realloc(session.defaultPaths[spDefault], strlen(s1) + 1);
|
||||||
free(session.default_savepath);
|
strcpy(session.defaultPaths[spDefault], s1);
|
||||||
session.default_savepath = (char *)calloc(strlen(s1) + 1, sizeof(uint8_t));
|
}
|
||||||
strcpy(session.default_savepath,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
|
// window plot
|
||||||
if (json_unpack_ex(root, &up_error, 0, "{s:i}", "window.plot.xpos", &i1) == 0)
|
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)
|
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)
|
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)
|
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
|
// overlay/slider plot
|
||||||
if (json_unpack_ex(root, &up_error, 0, "{s:i}", "window.overlay.xpos", &i1) == 0)
|
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)
|
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)
|
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)
|
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
|
// show options
|
||||||
if (json_unpack_ex(root, &up_error, 0, "{s:s}", "show.emoji", &s1) == 0) {
|
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;
|
return PM3_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int usage_set_savePath() {
|
static int usage_set_savePaths() {
|
||||||
PrintAndLogEx(NORMAL, "Usage: pref set defaultsavepath <path>");
|
PrintAndLogEx(NORMAL, "Usage: pref set savepaths [help] [create] [default <path>] [dump <path>] [trace <path>]");
|
||||||
PrintAndLogEx(NORMAL, "Options:");
|
PrintAndLogEx(NORMAL, "Options:");
|
||||||
PrintAndLogEx(NORMAL, " "_GREEN_("help")" - This help");
|
PrintAndLogEx(NORMAL, " "_GREEN_("help")" - This help");
|
||||||
PrintAndLogEx(NORMAL, " "_GREEN_("<path>")" - 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;
|
return PM3_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -433,17 +462,23 @@ void showDeviceDebugState(prefShowOpt_t Opt) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void showSavePathState(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){
|
void showPlotPosState(void){
|
||||||
PrintAndLogEx(NORMAL, " Plot window............ X "_GREEN_("%4d")" Y "_GREEN_("%4d")" H "_GREEN_("%4d")" W "_GREEN_("%4d"),
|
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) {
|
void showOverlayPosState(void) {
|
||||||
PrintAndLogEx(NORMAL, " Slider/Overlay window.. X "_GREEN_("%4d")" Y "_GREEN_("%4d")" H "_GREEN_("%4d")" W "_GREEN_("%4d"),
|
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) {
|
void showHintsState(prefShowOpt_t Opt) {
|
||||||
|
@ -717,54 +752,100 @@ static int setCmdHint (const char *Cmd)
|
||||||
return PM3_SUCCESS;
|
return PM3_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int setCmdSavePath (const char *Cmd) {
|
static int setCmdSavePaths (const char *Cmd) {
|
||||||
uint8_t cmdp = 0;
|
uint8_t cmdp = 0;
|
||||||
bool errors = false;
|
bool errors = false;
|
||||||
// bool validValue = false;
|
// bool validValue = false;
|
||||||
char *strOpt = NULL;
|
char *strOpt = NULL;
|
||||||
int optLen = 0;
|
int optLen = 0;
|
||||||
char *newValue = NULL;
|
char *newValue = NULL;
|
||||||
|
bool createDir = false;
|
||||||
|
|
||||||
if (param_getchar(Cmd, cmdp) == 0x00)
|
if (param_getchar(Cmd, cmdp) == 0x00)
|
||||||
return usage_set_savePath();
|
return usage_set_savePaths();
|
||||||
|
|
||||||
while ((param_getchar(Cmd, cmdp) != 0x00) && !errors) {
|
while ((param_getchar(Cmd, cmdp) != 0x00) && !errors) {
|
||||||
if (strOpt != NULL)
|
|
||||||
free (strOpt);
|
|
||||||
|
|
||||||
optLen = param_getlength(Cmd, cmdp)+1;
|
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) {
|
if (param_getstr(Cmd, cmdp++, strOpt, optLen) != 0) {
|
||||||
str_lower(strOpt); // convert to lowercase
|
str_lower(strOpt); // convert to lowercase
|
||||||
|
|
||||||
if (strncmp (strOpt,"help",4) == 0)
|
if (strncmp(strOpt, "help", 4) == 0)
|
||||||
return usage_set_savePath();
|
return usage_set_savePaths();
|
||||||
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 (strncmp(strOpt, "create", 6) == 0) {
|
||||||
if (fileExists (newValue)) {
|
// check if 2 more options.
|
||||||
showSavePathState (prefShowOLD);
|
if (param_getlength(Cmd, cmdp+1) == 0) // should have min 2 more options
|
||||||
if (session.default_savepath != NULL)
|
return usage_set_savePaths();
|
||||||
free (session.default_savepath);
|
createDir = true;
|
||||||
session.default_savepath = (char *)calloc(strlen(newValue)+1, sizeof(uint8_t));
|
} else {
|
||||||
strcpy (session.default_savepath,newValue);
|
if ((strncmp(strOpt, "default", 7) == 0) ||
|
||||||
showSavePathState (prefShowNEW);
|
(strncmp(strOpt, "dump", 4) == 0) ||
|
||||||
preferences_save ();
|
(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 {
|
} 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 {
|
} else {
|
||||||
PrintAndLogEx(INFO,"nothing changed");
|
return usage_set_savePaths();
|
||||||
showSavePathState (prefShowNone);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -778,13 +859,13 @@ static int setCmdSavePath (const char *Cmd) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static command_t setCommandTable[] = {
|
static command_t setCommandTable[] = {
|
||||||
{"help", setCmdHelp, AlwaysAvailable, "This help"},
|
{"help", setCmdHelp, AlwaysAvailable, "This help"},
|
||||||
{"emoji", setCmdEmoji, AlwaysAvailable, "Set emoji display"},
|
{"emoji", setCmdEmoji, AlwaysAvailable, "Set emoji display"},
|
||||||
{"hints", setCmdHint, AlwaysAvailable, "Set hint display"},
|
{"hints", setCmdHint, AlwaysAvailable, "Set hint display"},
|
||||||
{"color", setCmdColor, AlwaysAvailable, "Set color support"},
|
{"color", setCmdColor, AlwaysAvailable, "Set color support"},
|
||||||
{"defaultsavepath", setCmdSavePath, AlwaysAvailable, "Set default save path"},
|
{"defaultsavepaths", setCmdSavePaths, AlwaysAvailable, "Set default save paths"},
|
||||||
{"clientdebug", setCmdDebug, AlwaysAvailable, "Set client debug level"},
|
{"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}
|
{NULL, NULL, NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -819,6 +900,8 @@ static int CmdPrefShow(const char *Cmd) {
|
||||||
// showPlotPosState ();
|
// showPlotPosState ();
|
||||||
// showOverlayPosState ();
|
// showOverlayPosState ();
|
||||||
showSavePathState(prefShowNone);
|
showSavePathState(prefShowNone);
|
||||||
|
showDumpPathState(prefShowNone);
|
||||||
|
showTracePathState(prefShowNone);
|
||||||
showClientDebugState(prefShowNone);
|
showClientDebugState(prefShowNone);
|
||||||
showDeviceDebugState(prefShowNone);
|
showDeviceDebugState(prefShowNone);
|
||||||
PrintAndLogEx(NORMAL, "");
|
PrintAndLogEx(NORMAL, "");
|
||||||
|
|
|
@ -139,21 +139,21 @@ ProxGuiQT::~ProxGuiQT(void) {
|
||||||
SliderWidget::SliderWidget() {
|
SliderWidget::SliderWidget() {
|
||||||
// Set the initail postion and size from settings
|
// Set the initail postion and size from settings
|
||||||
if (session.preferences_loaded)
|
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
|
else
|
||||||
resize(800, 400);
|
resize(800, 400);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SliderWidget::resizeEvent(QResizeEvent *event) {
|
void SliderWidget::resizeEvent(QResizeEvent *event) {
|
||||||
session.window_overlay_hsize = event->size().height();
|
session.overlay.h = event->size().height();
|
||||||
session.window_overlay_wsize = event->size().width();
|
session.overlay.w = event->size().width();
|
||||||
session.window_changed = true;
|
session.window_changed = true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SliderWidget::moveEvent(QMoveEvent *event) {
|
void SliderWidget::moveEvent(QMoveEvent *event) {
|
||||||
session.window_overlay_xpos = event->pos().x();
|
session.overlay.x = event->pos().x();
|
||||||
session.window_overlay_ypos = event->pos().y();
|
session.overlay.y = event->pos().y();
|
||||||
session.window_changed = true;
|
session.window_changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -199,7 +199,7 @@ ProxWidget::ProxWidget(QWidget *parent, ProxGuiQT *master) : QWidget(parent) {
|
||||||
this->master = master;
|
this->master = master;
|
||||||
// Set the initail postion and size from settings
|
// Set the initail postion and size from settings
|
||||||
if (session.preferences_loaded)
|
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
|
else
|
||||||
resize(800, 400);
|
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_dirthr_down, SIGNAL(valueChanged(int)), this, SLOT(vchange_dthr_down(int)));
|
||||||
QObject::connect(opsController->horizontalSlider_askedge, SIGNAL(valueChanged(int)), this, SLOT(vchange_askedge(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
|
// Set up the plot widget, which does the actual plotting
|
||||||
plot = new Plot(this);
|
plot = new Plot(this);
|
||||||
|
@ -292,13 +292,13 @@ void ProxWidget::showEvent(QShowEvent *event) {
|
||||||
plot->show();
|
plot->show();
|
||||||
}
|
}
|
||||||
void ProxWidget::moveEvent(QMoveEvent *event) {
|
void ProxWidget::moveEvent(QMoveEvent *event) {
|
||||||
session.window_plot_xpos = event->pos().x();
|
session.plot.x = event->pos().x();
|
||||||
session.window_plot_ypos = event->pos().y();
|
session.plot.y = event->pos().y();
|
||||||
session.window_changed = true;
|
session.window_changed = true;
|
||||||
}
|
}
|
||||||
void ProxWidget::resizeEvent(QResizeEvent *event) {
|
void ProxWidget::resizeEvent(QResizeEvent *event) {
|
||||||
session.window_plot_hsize = event->size().height();
|
session.plot.h = event->size().height();
|
||||||
session.window_plot_wsize = event->size().width();
|
session.plot.w = event->size().width();
|
||||||
session.window_changed = true;
|
session.window_changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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 emojiMode {ALIAS, EMOJI, ALTTEXT, ERASE} emojiMode_t;
|
||||||
typedef enum clientdebugLevel {cdbOFF,cdbSIMPLE,cdbFULL} clientdebugLevel_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;
|
||||||
|
#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 {
|
typedef struct {
|
||||||
bool preferences_loaded;
|
bool preferences_loaded;
|
||||||
|
@ -32,15 +35,9 @@ typedef struct {
|
||||||
bool help_dump_mode;
|
bool help_dump_mode;
|
||||||
bool show_hints;
|
bool show_hints;
|
||||||
bool window_changed; // track if plot/overlay pos/size changed to save on exit
|
bool window_changed; // track if plot/overlay pos/size changed to save on exit
|
||||||
char *default_savepath;// [FILENAME_MAX];
|
qtWindow_t plot;
|
||||||
int window_plot_xpos;
|
qtWindow_t overlay;
|
||||||
int window_plot_ypos;
|
char *defaultPaths[savePathCount]; // Array should allow loop searching for files
|
||||||
int window_plot_hsize;
|
|
||||||
int window_plot_wsize;
|
|
||||||
int window_overlay_xpos;
|
|
||||||
int window_overlay_ypos;
|
|
||||||
int window_overlay_hsize;
|
|
||||||
int window_overlay_wsize;
|
|
||||||
clientdebugLevel_t client_debug_level;
|
clientdebugLevel_t client_debug_level;
|
||||||
uint8_t device_debug_level;
|
uint8_t device_debug_level;
|
||||||
} session_arg_t;
|
} session_arg_t;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue