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
This commit is contained in:
David Sidrane
2017-01-18 15:26:17 -10:00
committed by Lorenz Meier
parent 07d7ff5f38
commit 0bb0e92378
+54 -36
View File
@@ -56,6 +56,45 @@
#include <drivers/drv_gpio.h>
#include <modules/px4iofirmware/protocol.h>
#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>]\n"
"\t-p <n>\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 */