aboutsummaryrefslogtreecommitdiff
path: root/src/modules/gpio_led
diff options
context:
space:
mode:
authorAnton Babushkin <anton.babushkin@me.com>2013-05-22 11:30:50 +0400
committerAnton Babushkin <anton.babushkin@me.com>2013-05-22 11:30:50 +0400
commit09ce3e2d0a531138c29e1d32f1a9a902b259683d (patch)
tree4518f01a294bf7dad71813b4bd403202785b1893 /src/modules/gpio_led
parent2f280bb4caf21c5fda4151e9d885295d8aad8e3a (diff)
downloadpx4-firmware-09ce3e2d0a531138c29e1d32f1a9a902b259683d.tar.gz
px4-firmware-09ce3e2d0a531138c29e1d32f1a9a902b259683d.tar.bz2
px4-firmware-09ce3e2d0a531138c29e1d32f1a9a902b259683d.zip
Added GPIO_EXT1/GPIO_EXT2 selection.
Diffstat (limited to 'src/modules/gpio_led')
-rw-r--r--src/modules/gpio_led/gpio_led.c30
1 files changed, 23 insertions, 7 deletions
diff --git a/src/modules/gpio_led/gpio_led.c b/src/modules/gpio_led/gpio_led.c
index b9b066d24..83b598e92 100644
--- a/src/modules/gpio_led/gpio_led.c
+++ b/src/modules/gpio_led/gpio_led.c
@@ -57,13 +57,14 @@ struct gpio_led_s
{
struct work_s work;
int gpio_fd;
+ int pin;
struct vehicle_status_s status;
int vehicle_status_sub;
bool led_state;
int counter;
};
-static struct gpio_led_s gpio_led;
+static struct gpio_led_s gpio_led_data;
__EXPORT int gpio_led_main(int argc, char *argv[]);
@@ -73,8 +74,23 @@ void gpio_led_cycle(FAR void *arg);
int gpio_led_main(int argc, char *argv[])
{
- memset(&gpio_led, 0, sizeof(gpio_led));
- int ret = work_queue(LPWORK, &gpio_led.work, gpio_led_start, &gpio_led, 0);
+ int pin = GPIO_EXT_1;
+ if (argc > 1) {
+ if (!strcmp(argv[1], "-p")) {
+ if (!strcmp(argv[2], "1")) {
+ pin = GPIO_EXT_1;
+ } else if (!strcmp(argv[2], "2")) {
+ pin = GPIO_EXT_2;
+ } else {
+ printf("[gpio_led] Unsupported pin: %s\n", argv[2]);
+ exit(1);
+ }
+ }
+ }
+
+ memset(&gpio_led_data, 0, sizeof(gpio_led_data));
+ gpio_led_data.pin = pin;
+ 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);
exit(1);
@@ -94,7 +110,7 @@ void gpio_led_start(FAR void *arg)
}
/* configure GPIO pin */
- ioctl(priv->gpio_fd, GPIO_SET_OUTPUT, GPIO_EXT_1);
+ ioctl(priv->gpio_fd, GPIO_SET_OUTPUT, priv->pin);
/* subscribe to vehicle status topic */
memset(&priv->status, 0, sizeof(priv->status));
@@ -107,7 +123,7 @@ void gpio_led_start(FAR void *arg)
return;
}
- printf("[gpio_led] Started\n");
+ printf("[gpio_led] Started, using pin GPIO_EXT%i\n", priv->pin);
}
void gpio_led_cycle(FAR void *arg)
@@ -144,9 +160,9 @@ void gpio_led_cycle(FAR void *arg)
if (led_state_new != priv->led_state) {
priv->led_state = led_state_new;
if (led_state_new) {
- ioctl(priv->gpio_fd, GPIO_SET, GPIO_EXT_1);
+ ioctl(priv->gpio_fd, GPIO_SET, priv->pin);
} else {
- ioctl(priv->gpio_fd, GPIO_CLEAR, GPIO_EXT_1);
+ ioctl(priv->gpio_fd, GPIO_CLEAR, priv->pin);
}
}