From 0bb0e92378cbe669a918ddbc29f44c09b5ea33b1 Mon Sep 17 00:00:00 2001 From: David Sidrane Date: Wed, 18 Jan 2017 15:26:17 -1000 Subject: [PATCH] gpio_led removed dependancy on CONFIG_ARCH_BOARD_xxxx The gpio leg can use either the FMU GPIO_SERVO (Aux Pins) or the FMUv1 style IO pins. We define either LED_ON_SERVO_GPIO or LED_ON_EXT_GPIO_AND_PIO based on if the board_config provides GPIO_SERVO_1 or GPIO_EXT_1. For LED_ON_SERVO_GPIO we further define GPIO_MIN_SERVO_PIN and the GPIO_MAX_SERVO_PIN based on the highest GPIO_SERVO_x provided by the board_config When base the ability to use the PX4PIO not in the existance of the path but on the define BOARD_USES_PX4PIO --- src/modules/gpio_led/gpio_led.c | 90 ++++++++++++++++++++------------- 1 file changed, 54 insertions(+), 36 deletions(-) diff --git a/src/modules/gpio_led/gpio_led.c b/src/modules/gpio_led/gpio_led.c index e44a35c67d..7eecb8cd63 100644 --- a/src/modules/gpio_led/gpio_led.c +++ b/src/modules/gpio_led/gpio_led.c @@ -56,6 +56,45 @@ #include #include +#if defined(BOARD_HAS_FMU_GPIO) && defined(GPIO_SERVO_1) +# define LED_ON_SERVO_GPIO +# define PIN_NAME "AUX OUT 1" + + +/* Minimum pin number */ +# define GPIO_MIN_SERVO_PIN 1 + +/* Maximum */ +# if defined(GPIO_SERVO_16) +# define GPIO_MAX_SERVO_PIN 16 +# elif defined(GPIO_SERVO_15) +# define GPIO_MAX_SERVO_PIN 15 +# elif defined(GPIO_SERVO_14) +# define GPIO_MAX_SERVO_PIN 14 +# elif defined(GPIO_SERVO_13) +# define GPIO_MAX_SERVO_PIN 13 +# elif defined(GPIO_SERVO_12) +# define GPIO_MAX_SERVO_PIN 12 +# elif defined(GPIO_SERVO_11) +# define GPIO_MAX_SERVO_PIN 11 +# elif defined(GPIO_SERVO_10) +# define GPIO_MAX_SERVO_PIN 10 +# elif defined(GPIO_SERVO_9) +# define GPIO_MAX_SERVO_PIN 9 +# elif defined(GPIO_SERVO_8) +# define GPIO_MAX_SERVO_PIN 8 +# elif defined(GPIO_SERVO_7) +# define GPIO_MAX_SERVO_PIN 7 +# elif defined(GPIO_SERVO_6) +# define GPIO_MAX_SERVO_PIN 6 +# endif +#endif + +#if defined(BOARD_HAS_FMU_GPIO) && defined(GPIO_EXT_1) +# define LED_ON_EXT_GPIO_AND_PIO +# define PIN_NAME "PX4FMU GPIO_EXT1" +#endif + struct gpio_led_s { struct work_s work; int gpio_fd; @@ -69,6 +108,7 @@ struct gpio_led_s { int counter; }; + static struct gpio_led_s *gpio_led_data; static bool gpio_led_started = false; @@ -81,7 +121,7 @@ void gpio_led_cycle(FAR void *arg); int gpio_led_main(int argc, char *argv[]) { if (argc < 2) { -#ifdef CONFIG_ARCH_BOARD_PX4FMU_V1 +#if defined(LED_ON_EXT_GPIO_AND_PIO) errx(1, "usage: gpio_led {start|stop} [-p <1|2|a1|a2|r1|r2>]\n" "\t-p\tUse pin:\n" "\t\t1\tPX4FMU GPIO_EXT1 (default)\n" @@ -93,13 +133,7 @@ int gpio_led_main(int argc, char *argv[]) ); #endif -#if defined(CONFIG_ARCH_BOARD_AUAV_X21) || \ - defined(CONFIG_ARCH_BOARD_PX4FMU_V2) || \ - defined(CONFIG_ARCH_BOARD_PX4FMU_V4) || \ - defined(CONFIG_ARCH_BOARD_PX4FMU_V4PRO) || \ - defined(CONFIG_ARCH_BOARD_PX4FMU_V5) || \ - defined(CONFIG_ARCH_BOARD_MINDPX_V2) || \ - defined(CONFIG_ARCH_BOARD_PX4NUCLEOF767ZI_V1) +#if defined(LED_ON_SERVO_GPIO) errx(1, "usage: gpio_led {start|stop} [-p ]\n" "\t-p \tUse specified AUX OUT pin number (default: 1)" ); @@ -118,22 +152,16 @@ int gpio_led_main(int argc, char *argv[]) int pin = 1; /* pin name to display */ -#ifdef CONFIG_ARCH_BOARD_PX4FMU_V1 - char *pin_name = "PX4FMU GPIO_EXT1"; +#if defined(LED_ON_EXT_GPIO_AND_PIO) + char *pin_name = PIN_NAME; #endif -#if defined(CONFIG_ARCH_BOARD_AUAV_X21) || \ - defined(CONFIG_ARCH_BOARD_PX4FMU_V2) || \ - defined(CONFIG_ARCH_BOARD_PX4FMU_V4) || \ - defined(CONFIG_ARCH_BOARD_PX4FMU_V4PRO) || \ - defined(CONFIG_ARCH_BOARD_PX4FMU_V5) || \ - defined(CONFIG_ARCH_BOARD_MINDPX_V2) || \ - defined(CONFIG_ARCH_BOARD_PX4NUCLEOF767ZI_V1) - char pin_name[] = "AUX OUT 1"; +#if defined(LED_ON_SERVO_GPIO) + char pin_name[sizeof(PIN_NAME) + 2] = PIN_NAME; #endif if (argc > 2) { if (!strcmp(argv[2], "-p")) { -#ifdef CONFIG_ARCH_BOARD_PX4FMU_V1 +#if defined(LED_ON_EXT_GPIO_AND_PIO) if (!strcmp(argv[3], "1")) { use_io = false; @@ -169,17 +197,12 @@ int gpio_led_main(int argc, char *argv[]) errx(1, "unsupported pin: %s", argv[3]); } -#endif -#if defined(CONFIG_ARCH_BOARD_AUAV_X21) || \ - defined(CONFIG_ARCH_BOARD_PX4FMU_V2) || \ - defined(CONFIG_ARCH_BOARD_PX4FMU_V4) || \ - defined(CONFIG_ARCH_BOARD_PX4FMU_V4PRO) || \ - defined(CONFIG_ARCH_BOARD_PX4FMU_V5) || \ - defined(CONFIG_ARCH_BOARD_MINDPX_V2) || \ - defined(CONFIG_ARCH_BOARD_PX4NUCLEOF767ZI_V1) +#endif // defined(LED_ON_EXT_GPIO_AND_PIO) + +#if defined(LED_ON_SERVO_GPIO) unsigned int n = strtoul(argv[3], NULL, 10); - if (n >= 1 && n <= 6) { + if (n >= GPIO_MIN_SERVO_PIN && n <= GPIO_MAX_SERVO_PIN) { use_io = false; pin = 1 << (n - 1); snprintf(pin_name, sizeof(pin_name), "AUX OUT %d", n); @@ -188,7 +211,7 @@ int gpio_led_main(int argc, char *argv[]) errx(1, "unsupported pin: %s", argv[3]); } -#endif +#endif // defined(LED_ON_SERVO_GPIO) } } @@ -227,19 +250,14 @@ void gpio_led_start(FAR void *arg) { FAR struct gpio_led_s *priv = (FAR struct gpio_led_s *)arg; - char *gpio_dev; + char *gpio_dev = PX4FMU_DEVICE_PATH; -#if defined(PX4IO_DEVICE_PATH) +#if defined(BOARD_USES_PX4IO) if (priv->use_io) { gpio_dev = PX4IO_DEVICE_PATH; - - } else { - gpio_dev = PX4FMU_DEVICE_PATH; } -#else - gpio_dev = PX4FMU_DEVICE_PATH; #endif /* open GPIO device */