aboutsummaryrefslogtreecommitdiff
path: root/src/drivers/mpu6000/mpu6000.cpp
diff options
context:
space:
mode:
authorLorenz Meier <lm@inf.ethz.ch>2015-02-28 14:31:39 +0100
committerLorenz Meier <lm@inf.ethz.ch>2015-02-28 14:31:39 +0100
commit2cf0aec3328e5fbd0c90f632241dc2cd7994e632 (patch)
tree36e1f84bffe5b699a043eba488152808575da530 /src/drivers/mpu6000/mpu6000.cpp
parentdfdf741b130d02681092cbbf3b49c1f0d051f14f (diff)
downloadpx4-firmware-2cf0aec3328e5fbd0c90f632241dc2cd7994e632.tar.gz
px4-firmware-2cf0aec3328e5fbd0c90f632241dc2cd7994e632.tar.bz2
px4-firmware-2cf0aec3328e5fbd0c90f632241dc2cd7994e632.zip
MPU6K: Allow stop
Diffstat (limited to 'src/drivers/mpu6000/mpu6000.cpp')
-rw-r--r--src/drivers/mpu6000/mpu6000.cpp45
1 files changed, 36 insertions, 9 deletions
diff --git a/src/drivers/mpu6000/mpu6000.cpp b/src/drivers/mpu6000/mpu6000.cpp
index 4aa05a980..b48ea8577 100644
--- a/src/drivers/mpu6000/mpu6000.cpp
+++ b/src/drivers/mpu6000/mpu6000.cpp
@@ -1881,6 +1881,7 @@ MPU6000 *g_dev_int; // on internal bus
MPU6000 *g_dev_ext; // on external bus
void start(bool, enum Rotation);
+void stop(bool);
void test(bool);
void reset(bool);
void info(bool);
@@ -1946,6 +1947,20 @@ fail:
errx(1, "driver start failed");
}
+void
+stop(bool external_bus)
+{
+ MPU6000 **g_dev_ptr = external_bus?&g_dev_ext:&g_dev_int;
+ if (*g_dev_ptr != nullptr) {
+ delete *g_dev_ptr;
+ *g_dev_ptr = nullptr;
+ } else {
+ /* warn, but not an error */
+ warnx("already stopped.");
+ }
+ exit(0);
+}
+
/**
* Perform some basic functional tests on the driver;
* make sure we can collect data from the sensor in polled
@@ -2111,7 +2126,7 @@ factorytest(bool external_bus)
void
usage()
{
- warnx("missing command: try 'start', 'info', 'test', 'reset', 'regdump', 'factorytest', 'testerror'");
+ warnx("missing command: try 'start', 'info', 'test', 'stop',\n'reset', 'regdump', 'factorytest', 'testerror'");
warnx("options:");
warnx(" -X (external bus)");
warnx(" -R rotation");
@@ -2147,38 +2162,50 @@ mpu6000_main(int argc, char *argv[])
* Start/load the driver.
*/
- if (!strcmp(verb, "start"))
+ if (!strcmp(verb, "start")) {
mpu6000::start(external_bus, rotation);
+ }
+
+ if (!strcmp(verb, "stop")) {
+ mpu6000::stop(external_bus);
+ }
/*
* Test the driver/device.
*/
- if (!strcmp(verb, "test"))
+ if (!strcmp(verb, "test")) {
mpu6000::test(external_bus);
+ }
/*
* Reset the driver.
*/
- if (!strcmp(verb, "reset"))
+ if (!strcmp(verb, "reset")) {
mpu6000::reset(external_bus);
+ }
/*
* Print driver information.
*/
- if (!strcmp(verb, "info"))
+ if (!strcmp(verb, "info")) {
mpu6000::info(external_bus);
+ }
/*
* Print register information.
*/
- if (!strcmp(verb, "regdump"))
+ if (!strcmp(verb, "regdump")) {
mpu6000::regdump(external_bus);
+ }
- if (!strcmp(verb, "factorytest"))
+ if (!strcmp(verb, "factorytest")) {
mpu6000::factorytest(external_bus);
+ }
- if (!strcmp(verb, "testerror"))
+ if (!strcmp(verb, "testerror")) {
mpu6000::testerror(external_bus);
+ }
- errx(1, "unrecognized command, try 'start', 'test', 'reset', 'info', 'regdump', 'factorytest' or 'testerror'");
+ mpu6000::usage();
+ exit(1);
}