MPU6K: Allow stop

This commit is contained in:
Lorenz Meier 2015-02-28 14:31:39 +01:00
parent dfdf741b13
commit 2cf0aec332
1 changed files with 36 additions and 9 deletions

View File

@ -1881,6 +1881,7 @@ MPU6000 *g_dev_int; // on internal bus
MPU6000 *g_dev_ext; // on external bus MPU6000 *g_dev_ext; // on external bus
void start(bool, enum Rotation); void start(bool, enum Rotation);
void stop(bool);
void test(bool); void test(bool);
void reset(bool); void reset(bool);
void info(bool); void info(bool);
@ -1946,6 +1947,20 @@ fail:
errx(1, "driver start failed"); 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; * Perform some basic functional tests on the driver;
* make sure we can collect data from the sensor in polled * make sure we can collect data from the sensor in polled
@ -2111,7 +2126,7 @@ factorytest(bool external_bus)
void void
usage() 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("options:");
warnx(" -X (external bus)"); warnx(" -X (external bus)");
warnx(" -R rotation"); warnx(" -R rotation");
@ -2147,38 +2162,50 @@ mpu6000_main(int argc, char *argv[])
* Start/load the driver. * Start/load the driver.
*/ */
if (!strcmp(verb, "start")) if (!strcmp(verb, "start")) {
mpu6000::start(external_bus, rotation); mpu6000::start(external_bus, rotation);
}
if (!strcmp(verb, "stop")) {
mpu6000::stop(external_bus);
}
/* /*
* Test the driver/device. * Test the driver/device.
*/ */
if (!strcmp(verb, "test")) if (!strcmp(verb, "test")) {
mpu6000::test(external_bus); mpu6000::test(external_bus);
}
/* /*
* Reset the driver. * Reset the driver.
*/ */
if (!strcmp(verb, "reset")) if (!strcmp(verb, "reset")) {
mpu6000::reset(external_bus); mpu6000::reset(external_bus);
}
/* /*
* Print driver information. * Print driver information.
*/ */
if (!strcmp(verb, "info")) if (!strcmp(verb, "info")) {
mpu6000::info(external_bus); mpu6000::info(external_bus);
}
/* /*
* Print register information. * Print register information.
*/ */
if (!strcmp(verb, "regdump")) if (!strcmp(verb, "regdump")) {
mpu6000::regdump(external_bus); mpu6000::regdump(external_bus);
}
if (!strcmp(verb, "factorytest")) if (!strcmp(verb, "factorytest")) {
mpu6000::factorytest(external_bus); mpu6000::factorytest(external_bus);
}
if (!strcmp(verb, "testerror")) if (!strcmp(verb, "testerror")) {
mpu6000::testerror(external_bus); mpu6000::testerror(external_bus);
}
errx(1, "unrecognized command, try 'start', 'test', 'reset', 'info', 'regdump', 'factorytest' or 'testerror'"); mpu6000::usage();
exit(1);
} }