aboutsummaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/drivers/hmc5883/hmc5883.cpp18
-rw-r--r--apps/systemcmds/param/param.c21
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) ? ' ' : '+'),