diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/drivers/hmc5883/hmc5883.cpp | 18 | ||||
-rw-r--r-- | apps/systemcmds/param/param.c | 21 |
2 files changed, 28 insertions, 11 deletions
diff --git a/apps/drivers/hmc5883/hmc5883.cpp b/apps/drivers/hmc5883/hmc5883.cpp index 2b4fab151..81bc8954b 100644 --- a/apps/drivers/hmc5883/hmc5883.cpp +++ b/apps/drivers/hmc5883/hmc5883.cpp @@ -66,6 +66,9 @@ #include <drivers/drv_mag.h> #include <drivers/drv_hrt.h> +#include <uORB/uORB.h> +#include <uORB/topics/subsystem_info.h> + #include <float.h> /* @@ -631,6 +634,7 @@ HMC5883::ioctl(struct file *filp, int cmd, unsigned long arg) case MAGIOCSSCALE: /* set new scale factors */ memcpy(&_scale, (mag_scale *)arg, sizeof(_scale)); + (void)check_calibration(); return 0; case MAGIOCGSCALE: @@ -1039,11 +1043,17 @@ int HMC5883::check_calibration() offset_valid = false; } - if (_calibrated && !(offset_valid && scale_valid)) { - warnx("warning: mag %s%s", (scale_valid) ? "" : "scale invalid. ", + if (_calibrated != (offset_valid && scale_valid)) { + warnx("warning: mag cal changed: %s%s", (scale_valid) ? "" : "scale invalid. ", (offset_valid) ? "" : "offset invalid."); - _calibrated = false; - // XXX Notify system via uORB + _calibrated = (offset_valid && scale_valid); + /* notify about state change */ + struct subsystem_info_s info = { + true, + true, + _calibrated, + SUBSYSTEM_TYPE_MAG}; + orb_advert_t pub = orb_advertise(ORB_ID(subsystem_info), &info); } return 0; } diff --git a/apps/systemcmds/param/param.c b/apps/systemcmds/param/param.c index 92313e45a..53f9c365e 100644 --- a/apps/systemcmds/param/param.c +++ b/apps/systemcmds/param/param.c @@ -59,7 +59,7 @@ __EXPORT int param_main(int argc, char *argv[]); 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(const char* search_string); static void do_show_print(void *arg, param_t param); int @@ -99,10 +99,12 @@ param_main(int argc, char *argv[]) warnx("selected parameter file %s", param_get_default_file()); } - if (!strcmp(argv[1], "show")) { - do_show(); - } - + if (!strcmp(argv[1], "show")) + if (argc >= 3) { + do_show(argv[2]); + } else { + do_show(NULL); + } } errx(1, "expected a command, try 'load', 'import', 'show', 'select' or 'save'"); @@ -170,10 +172,10 @@ do_import(const char* param_file_name) } static void -do_show(void) +do_show(const char* search_string) { printf(" + = saved, * = unsaved\n"); - param_foreach(do_show_print, NULL, false); + param_foreach(do_show_print, search_string, false); exit(0); } @@ -183,6 +185,11 @@ do_show_print(void *arg, param_t param) { int32_t i; float f; + const char *search_string = (const char*)arg; + + /* print nothing if search string valid and not matching */ + if (arg != NULL && (strcmp(search_string, param_name(param) != 0))) + return; printf("%c %s: ", param_value_unsaved(param) ? '*' : (param_value_is_default(param) ? ' ' : '+'), |