From 0ddfd7c75c1f692fe83fcc88f832b42e2b04f0af Mon Sep 17 00:00:00 2001 From: Lorenz Meier Date: Wed, 31 Oct 2012 16:31:21 +0100 Subject: New param interface for microSD and EEPROM --- apps/systemcmds/param/param.c | 51 ++++++++++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 15 deletions(-) (limited to 'apps/systemcmds/param') diff --git a/apps/systemcmds/param/param.c b/apps/systemcmds/param/param.c index 68dbd822e..77f47b95d 100644 --- a/apps/systemcmds/param/param.c +++ b/apps/systemcmds/param/param.c @@ -56,36 +56,53 @@ __EXPORT int param_main(int argc, char *argv[]); -static void do_save(void); -static void do_load(void); -static void do_import(void); +static void do_save(const char* param_file_name); +static void do_load(const char* param_file_name); +static void do_import(const char* param_file_name); static void do_show(void); static void do_show_print(void *arg, param_t param); -static const char *param_file_name = "/eeprom/parameters"; +static const char *param_file_name_default = "/fs/microsd/parameters"; int param_main(int argc, char *argv[]) { if (argc >= 2) { - if (!strcmp(argv[1], "save")) - do_save(); + if (!strcmp(argv[1], "save")) { + if (argc >= 3) { + do_save(argv[2]); + } else { + do_save(param_file_name_default); + } + } - if (!strcmp(argv[1], "load")) - do_load(); + if (!strcmp(argv[1], "load")) { + if (argc >= 3) { + do_load(argv[2]); + } else { + do_load(param_file_name_default); + } + } - if (!strcmp(argv[1], "import")) - do_import(); + if (!strcmp(argv[1], "import")) { + if (argc >= 3) { + do_import(argv[2]); + } else { + do_import(param_file_name_default); + } + } - if (!strcmp(argv[1], "show")) + if (!strcmp(argv[1], "show")) { do_show(); + } + } errx(1, "expected a command, try 'load', 'import', 'show' or 'save'\n"); } static void -do_save(void) +do_save(const char* param_file_name) { /* delete the parameter file in case it exists */ unlink(param_file_name); @@ -108,7 +125,7 @@ do_save(void) } static void -do_load(void) +do_load(const char* param_file_name) { int fd = open(param_file_name, O_RDONLY); @@ -118,14 +135,18 @@ do_load(void) int result = param_load(fd); close(fd); - if (result < 0) + if (result < 0) { errx(1, "error importing from '%s'", param_file_name); + } else { + /* set default file name for next storage operation */ + param_set_default_file(param_file_name); + } exit(0); } static void -do_import(void) +do_import(const char* param_file_name) { int fd = open(param_file_name, O_RDONLY); -- cgit v1.2.3 From 3c987d63680d153e4d954ad6249d24e5448e2204 Mon Sep 17 00:00:00 2001 From: Lorenz Meier Date: Wed, 31 Oct 2012 18:50:00 +0100 Subject: Casting and fix default param path --- apps/mavlink/mavlink_receiver.c | 9 ++++----- apps/systemcmds/param/param.c | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) (limited to 'apps/systemcmds/param') diff --git a/apps/mavlink/mavlink_receiver.c b/apps/mavlink/mavlink_receiver.c index cfff0f469..826eb5625 100644 --- a/apps/mavlink/mavlink_receiver.c +++ b/apps/mavlink/mavlink_receiver.c @@ -253,14 +253,13 @@ handle_message(mavlink_message_t *msg) break; } - offboard_control_sp.p1 = quad_motors_setpoint.roll[mavlink_system.sysid] / (float)INT16_MAX; - offboard_control_sp.p2 = quad_motors_setpoint.pitch[mavlink_system.sysid] / (float)INT16_MAX; - offboard_control_sp.p3= quad_motors_setpoint.yaw[mavlink_system.sysid] / (float)INT16_MAX; + offboard_control_sp.p1 = (float)quad_motors_setpoint.roll[mavlink_system.sysid] / (float)INT16_MAX; + offboard_control_sp.p2 = (float)quad_motors_setpoint.pitch[mavlink_system.sysid] / (float)INT16_MAX; + offboard_control_sp.p3= (float)quad_motors_setpoint.yaw[mavlink_system.sysid] / (float)INT16_MAX; offboard_control_sp.p4 = (float)quad_motors_setpoint.thrust[mavlink_system.sysid]/(float)UINT16_MAX; - if (quad_motors_setpoint.thrust[mavlink_system.sysid] ==0){ + if (quad_motors_setpoint.thrust[mavlink_system.sysid] == 0) { ml_armed = false; - } offboard_control_sp.armed = ml_armed; diff --git a/apps/systemcmds/param/param.c b/apps/systemcmds/param/param.c index 77f47b95d..9cb280933 100644 --- a/apps/systemcmds/param/param.c +++ b/apps/systemcmds/param/param.c @@ -62,7 +62,7 @@ static void do_import(const char* param_file_name); static void do_show(void); static void do_show_print(void *arg, param_t param); -static const char *param_file_name_default = "/fs/microsd/parameters"; +static const char *param_file_name_default = "/eeprom/parameters"; int param_main(int argc, char *argv[]) -- cgit v1.2.3 From 8bfceef89cc1fd2422863a99d99039d18a1301bc Mon Sep 17 00:00:00 2001 From: px4dev Date: Wed, 31 Oct 2012 12:59:24 -0700 Subject: Remove the arbitrary limit on the path to the default parameter file. Add a verb to the param command to set the default parameter file. --- apps/systemcmds/param/param.c | 21 ++++++++++++++------- apps/systemlib/param/param.c | 42 +++++++++++++++++++++--------------------- apps/systemlib/param/param.h | 29 ++++++++++++++++++++++------- 3 files changed, 57 insertions(+), 35 deletions(-) (limited to 'apps/systemcmds/param') diff --git a/apps/systemcmds/param/param.c b/apps/systemcmds/param/param.c index 9cb280933..92313e45a 100644 --- a/apps/systemcmds/param/param.c +++ b/apps/systemcmds/param/param.c @@ -62,8 +62,6 @@ static void do_import(const char* param_file_name); static void do_show(void); static void do_show_print(void *arg, param_t param); -static const char *param_file_name_default = "/eeprom/parameters"; - int param_main(int argc, char *argv[]) { @@ -72,7 +70,7 @@ param_main(int argc, char *argv[]) if (argc >= 3) { do_save(argv[2]); } else { - do_save(param_file_name_default); + do_save(param_get_default_file()); } } @@ -80,7 +78,7 @@ param_main(int argc, char *argv[]) if (argc >= 3) { do_load(argv[2]); } else { - do_load(param_file_name_default); + do_load(param_get_default_file()); } } @@ -88,17 +86,26 @@ param_main(int argc, char *argv[]) if (argc >= 3) { do_import(argv[2]); } else { - do_import(param_file_name_default); + do_import(param_get_default_file()); } } + if (!strcmp(argv[1], "select")) { + if (argc >= 3) { + param_set_default_file(argv[2]); + } else { + param_set_default_file(NULL); + } + warnx("selected parameter file %s", param_get_default_file()); + } + if (!strcmp(argv[1], "show")) { do_show(); } } - - errx(1, "expected a command, try 'load', 'import', 'show' or 'save'\n"); + + errx(1, "expected a command, try 'load', 'import', 'show', 'select' or 'save'"); } static void diff --git a/apps/systemlib/param/param.c b/apps/systemlib/param/param.c index c63e7ca8d..9a00c91a5 100644 --- a/apps/systemlib/param/param.c +++ b/apps/systemlib/param/param.c @@ -481,38 +481,38 @@ param_reset_all(void) param_notify_changes(); } -static char param_default_file_name[50] = "/eeprom/parameters"; +static const char *param_default_file = "/eeprom/parameters"; +static char *param_user_file; int param_set_default_file(const char* filename) { - if (filename) { - if (strlen(filename) < sizeof(param_default_file_name)) - { - strcpy(param_default_file_name, filename); - } else { - warnx("param file name too long"); - return 1; - } - return 0; - } else { - warnx("no valid param file name"); - return 1; + if (param_user_file != NULL) { + free(param_user_file); + param_user_file = NULL; } + if (filename) + param_user_file = strdup(filename); return 0; } +const char * +param_get_default_file(void) +{ + return (param_user_file != NULL) ? param_user_file : param_default_file; +} + int param_save_default(void) { /* delete the file in case it exists */ - unlink(param_default_file_name); + unlink(param_get_default_file()); /* create the file */ - int fd = open(param_default_file_name, O_WRONLY | O_CREAT | O_EXCL); + int fd = open(param_get_default_file(), O_WRONLY | O_CREAT | O_EXCL); if (fd < 0) { - warn("opening '%s' for writing failed", param_default_file_name); + warn("opening '%s' for writing failed", param_get_default_file()); return -1; } @@ -522,8 +522,8 @@ param_save_default(void) close(fd); if (result != 0) { - unlink(param_default_file_name); - warn("error exporting parameters to '%s'", param_default_file_name); + unlink(param_get_default_file()); + warn("error exporting parameters to '%s'", param_get_default_file()); return -2; } @@ -536,12 +536,12 @@ param_save_default(void) int param_load_default(void) { - int fd = open(param_default_file_name, O_RDONLY); + int fd = open(param_get_default_file(), O_RDONLY); if (fd < 0) { /* no parameter file is OK, otherwise this is an error */ if (errno != ENOENT) { - warn("open '%s' for reading failed", param_default_file_name); + warn("open '%s' for reading failed", param_get_default_file()); return -1; } return 1; @@ -551,7 +551,7 @@ param_load_default(void) close(fd); if (result != 0) { - warn("error reading parameters from '%s'", param_default_file_name); + warn("error reading parameters from '%s'", param_get_default_file()); return -2; } diff --git a/apps/systemlib/param/param.h b/apps/systemlib/param/param.h index 64bb77834..6fa73b5a4 100644 --- a/apps/systemlib/param/param.h +++ b/apps/systemlib/param/param.h @@ -235,24 +235,39 @@ __EXPORT int param_load(int fd); __EXPORT void param_foreach(void (*func)(void *arg, param_t param), void *arg, bool only_changed); /** - * Export parameters to the default file name. + * Set the default parameter file name. * + * @param filename Path to the default parameter file. The file is not require to + * exist. + * @return Zero on success. + */ +__EXPORT int param_set_default_file(const char* filename); + +/** + * Get the default parameter file name. * - * @param + * @return The path to the current default parameter file; either as + * a result of a call to param_set_default_file, or the + * built-in default. */ -__EXPORT int param_save_default(void); +__EXPORT const char *param_get_default_file(void); /** - * Set the default parameter file name. + * Save parameters to the default file. + * + * This function saves all parameters with non-default values. + * + * @return Zero on success. */ -__EXPORT int param_set_default_file(const char* filename); +__EXPORT int param_save_default(void); /** - * Import parameters from the default file name. + * Load parameters from the default parameter file. + * + * @return Zero on success. */ __EXPORT int param_load_default(void); - /* * Macros creating static parameter definitions. * -- cgit v1.2.3