Browse Source

HOTFIX: Added start / stop syntax to GPIO led command

sbg
Lorenz Meier 12 years ago
parent
commit
68931f38d5
  1. 38
      src/modules/gpio_led/gpio_led.c

38
src/modules/gpio_led/gpio_led.c

@ -48,6 +48,7 @@ @@ -48,6 +48,7 @@
#include <nuttx/wqueue.h>
#include <nuttx/clock.h>
#include <systemlib/systemlib.h>
#include <systemlib/err.h>
#include <uORB/uORB.h>
#include <uORB/topics/vehicle_status.h>
#include <poll.h>
@ -64,6 +65,7 @@ struct gpio_led_s { @@ -64,6 +65,7 @@ struct gpio_led_s {
};
static struct gpio_led_s gpio_led_data;
static bool gpio_led_started = false;
__EXPORT int gpio_led_main(int argc, char *argv[]);
@ -75,7 +77,15 @@ int gpio_led_main(int argc, char *argv[]) @@ -75,7 +77,15 @@ int gpio_led_main(int argc, char *argv[])
{
int pin = GPIO_EXT_1;
if (argc > 1) {
if (argc < 2) {
errx(1, "no argument provided. Try 'start' or 'stop' [-p 1/2]");
} else {
/* START COMMAND HANDLING */
if (!strcmp(argv[1], "start")) {
if (argc > 2) {
if (!strcmp(argv[1], "-p")) {
if (!strcmp(argv[2], "1")) {
pin = GPIO_EXT_1;
@ -84,7 +94,7 @@ int gpio_led_main(int argc, char *argv[]) @@ -84,7 +94,7 @@ int gpio_led_main(int argc, char *argv[])
pin = GPIO_EXT_2;
} else {
printf("[gpio_led] Unsupported pin: %s\n", argv[2]);
warnx("[gpio_led] Unsupported pin: %s\n", argv[2]);
exit(1);
}
}
@ -95,11 +105,26 @@ int gpio_led_main(int argc, char *argv[]) @@ -95,11 +105,26 @@ int gpio_led_main(int argc, char *argv[])
int ret = work_queue(LPWORK, &gpio_led_data.work, gpio_led_start, &gpio_led_data, 0);
if (ret != 0) {
printf("[gpio_led] Failed to queue work: %d\n", ret);
warnx("[gpio_led] Failed to queue work: %d\n", ret);
exit(1);
} else {
gpio_led_started = true;
}
exit(0);
/* STOP COMMAND HANDLING */
} else if (!strcmp(argv[1], "stop")) {
gpio_led_started = false;
/* INVALID COMMAND */
} else {
errx(1, "unrecognized command '%s', only supporting 'start' or 'stop'", argv[1]);
}
}
}
void gpio_led_start(FAR void *arg)
@ -110,7 +135,7 @@ void gpio_led_start(FAR void *arg) @@ -110,7 +135,7 @@ void gpio_led_start(FAR void *arg)
priv->gpio_fd = open(GPIO_DEVICE_PATH, 0);
if (priv->gpio_fd < 0) {
printf("[gpio_led] GPIO: open fail\n");
warnx("[gpio_led] GPIO: open fail\n");
return;
}
@ -125,11 +150,11 @@ void gpio_led_start(FAR void *arg) @@ -125,11 +150,11 @@ void gpio_led_start(FAR void *arg)
int ret = work_queue(LPWORK, &priv->work, gpio_led_cycle, priv, 0);
if (ret != 0) {
printf("[gpio_led] Failed to queue work: %d\n", ret);
warnx("[gpio_led] Failed to queue work: %d\n", ret);
return;
}
printf("[gpio_led] Started, using pin GPIO_EXT%i\n", priv->pin);
warnx("[gpio_led] Started, using pin GPIO_EXT%i\n", priv->pin);
}
void gpio_led_cycle(FAR void *arg)
@ -187,5 +212,6 @@ void gpio_led_cycle(FAR void *arg) @@ -187,5 +212,6 @@ void gpio_led_cycle(FAR void *arg)
priv->counter = 0;
/* repeat cycle at 5 Hz*/
if (gpio_led_started)
work_queue(LPWORK, &priv->work, gpio_led_cycle, priv, USEC2TICK(200000));
}

Loading…
Cancel
Save