aboutsummaryrefslogtreecommitdiff
path: root/src/drivers/hmc5883/hmc5883.cpp
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2014-07-04 12:07:23 +1000
committerLorenz Meier <lm@inf.ethz.ch>2014-07-08 12:01:50 +0200
commit5e62ae7a9e2a7d3ea05d293900f7171884fbb448 (patch)
tree201f3db0b4617ff97eb4f308cad818bcb5d5a822 /src/drivers/hmc5883/hmc5883.cpp
parentd952e81ab7c5ef050784cf3766c5b7bf18909777 (diff)
downloadpx4-firmware-5e62ae7a9e2a7d3ea05d293900f7171884fbb448.tar.gz
px4-firmware-5e62ae7a9e2a7d3ea05d293900f7171884fbb448.tar.bz2
px4-firmware-5e62ae7a9e2a7d3ea05d293900f7171884fbb448.zip
hmc5883: added -C option to calibrate on startup
Conflicts: src/drivers/hmc5883/hmc5883.cpp
Diffstat (limited to 'src/drivers/hmc5883/hmc5883.cpp')
-rw-r--r--src/drivers/hmc5883/hmc5883.cpp42
1 files changed, 35 insertions, 7 deletions
diff --git a/src/drivers/hmc5883/hmc5883.cpp b/src/drivers/hmc5883/hmc5883.cpp
index b9270d2a0..65c8c64d0 100644
--- a/src/drivers/hmc5883/hmc5883.cpp
+++ b/src/drivers/hmc5883/hmc5883.cpp
@@ -1516,6 +1516,11 @@ hmc5883_usage()
warnx("missing command: try 'start', 'info', 'test', 'reset', 'info', 'calibrate'");
warnx("options:");
warnx(" -R rotation");
+ warnx(" -C calibrate on start");
+ warnx(" -X only external bus");
+#ifdef PX4_I2C_BUS_ONBOARD
+ warnx(" -I only internal bus");
+#endif
}
int
@@ -1523,46 +1528,69 @@ hmc5883_main(int argc, char *argv[])
{
int ch;
enum Rotation rotation = ROTATION_NONE;
+ bool calibrate = false;
- while ((ch = getopt(argc, argv, "R:")) != EOF) {
+ while ((ch = getopt(argc, argv, "XIR:C")) != EOF) {
switch (ch) {
case 'R':
rotation = (enum Rotation)atoi(optarg);
break;
+#ifdef PX4_I2C_BUS_ONBOARD
+ case 'I':
+ bus = PX4_I2C_BUS_ONBOARD;
+ break;
+#endif
+ case 'X':
+ bus = PX4_I2C_BUS_EXPANSION;
+ break;
+ case 'C':
+ calibrate = true;
+ break;
default:
hmc5883_usage();
exit(0);
}
}
+ const char *verb = argv[optind];
+
/*
* Start/load the driver.
*/
- if (!strcmp(argv[1], "start"))
- hmc5883::start(rotation);
+ if (!strcmp(verb, "start")) {
+ hmc5883::start(bus, rotation);
+ if (calibrate) {
+ if (hmc5883::calibrate(bus) == 0) {
+ errx(0, "calibration successful");
+
+ } else {
+ errx(1, "calibration failed");
+ }
+ }
+ }
/*
* Test the driver/device.
*/
- if (!strcmp(argv[1], "test"))
+ if (!strcmp(verb, "test"))
hmc5883::test(bus);
/*
* Reset the driver.
*/
- if (!strcmp(argv[1], "reset"))
+ if (!strcmp(verb, "reset"))
hmc5883::reset(bus);
/*
* Print driver information.
*/
- if (!strcmp(argv[1], "info") || !strcmp(argv[1], "status"))
+ if (!strcmp(verb, "info") || !strcmp(verb, "status"))
hmc5883::info(bus);
/*
* Autocalibrate the scaling
*/
- if (!strcmp(argv[1], "calibrate")) {
+ if (!strcmp(verb, "calibrate")) {
if (hmc5883::calibrate(bus) == 0) {
errx(0, "calibration successful");