aboutsummaryrefslogtreecommitdiff
path: root/apps/drivers/px4io/px4io.cpp
diff options
context:
space:
mode:
authorLorenz Meier <lm@inf.ethz.ch>2013-03-07 19:47:43 +0100
committerLorenz Meier <lm@inf.ethz.ch>2013-03-07 19:47:43 +0100
commitebac51cad8e144b64938e6726e26bdc23aaf45e5 (patch)
tree918bbe5135e9d27754ad6bd6719a075cf58f0f71 /apps/drivers/px4io/px4io.cpp
parent7013eb5e10c63f0d2be5b82d0fdeff31166f5000 (diff)
downloadpx4-firmware-ebac51cad8e144b64938e6726e26bdc23aaf45e5.tar.gz
px4-firmware-ebac51cad8e144b64938e6726e26bdc23aaf45e5.tar.bz2
px4-firmware-ebac51cad8e144b64938e6726e26bdc23aaf45e5.zip
Working on restart resilience, hunting down multi-load mixer issue (still present)
Diffstat (limited to 'apps/drivers/px4io/px4io.cpp')
-rw-r--r--apps/drivers/px4io/px4io.cpp38
1 files changed, 27 insertions, 11 deletions
diff --git a/apps/drivers/px4io/px4io.cpp b/apps/drivers/px4io/px4io.cpp
index 8fb53295f..882ca9fed 100644
--- a/apps/drivers/px4io/px4io.cpp
+++ b/apps/drivers/px4io/px4io.cpp
@@ -1556,7 +1556,7 @@ px4io_main(int argc, char *argv[])
errx(1, "already loaded");
/* create the driver - it will set g_dev */
- (void)new PX4IO;
+ (void)new PX4IO();
if (g_dev == nullptr)
errx(1, "driver alloc failed");
@@ -1567,7 +1567,7 @@ px4io_main(int argc, char *argv[])
}
/* look for the optional pwm update rate for the supported modes */
- if (strcmp(argv[2], "-u") == 0 || strcmp(argv[2], "--update-rate") == 0) {
+ if (argc > 2 && strcmp(argv[2], "-u") == 0 || strcmp(argv[2], "--update-rate") == 0) {
if (argc > 2 + 1) {
#warning implement this
} else {
@@ -1579,16 +1579,31 @@ px4io_main(int argc, char *argv[])
exit(0);
}
+ if (!strcmp(argv[1], "recovery")) {
+
+ if (g_dev != nullptr) {
+ /*
+ * Enable in-air restart support.
+ * We can cheat and call the driver directly, as it
+ * doesn't reference filp in ioctl()
+ */
+ g_dev->ioctl(NULL, PWM_SERVO_INAIR_RESTART_ENABLE, 0);
+ } else {
+ errx(1, "not loaded");
+ }
+ exit(0);
+ }
+
if (!strcmp(argv[1], "stop")) {
- if (g_dev != nullptr) {
- /* stop the driver */
- delete g_dev;
- } else {
- errx(1, "not loaded");
- }
- exit(0);
+ if (g_dev != nullptr) {
+ /* stop the driver */
+ delete g_dev;
+ } else {
+ errx(1, "not loaded");
}
+ exit(0);
+ }
if (!strcmp(argv[1], "status")) {
@@ -1613,8 +1628,9 @@ px4io_main(int argc, char *argv[])
exit(1);
}
uint8_t level = atoi(argv[2]);
- // we can cheat and call the driver directly, as it
- // doesn't reference filp in ioctl()
+ /* we can cheat and call the driver directly, as it
+ * doesn't reference filp in ioctl()
+ */
int ret = g_dev->ioctl(NULL, PWM_SERVO_SET_DEBUG, level);
if (ret != 0) {
printf("SET_DEBUG failed - %d\n", ret);