From 0fa362ff5c446df24ca6d3a90f73a1c936722a38 Mon Sep 17 00:00:00 2001 From: Julien BERAUD Date: Thu, 26 Nov 2015 14:48:59 +0100 Subject: [PATCH] AP_Notify: Fix GPIO declaration for Linux boards Currently, the default behaviour on linux boards tries to write LED gpios with fixed values among them. There is no way to declare that there are no LED GPIOs. This commit moves the declaration of the LED Gpios in AP_HAL_Boards.h and makes AP_Notify do nothing if no LED gpio was declared --- libraries/AP_HAL/AP_HAL_Boards.h | 45 +++++++++++++++++++++++++++++ libraries/AP_Notify/AP_BoardLED.cpp | 7 +++++ libraries/AP_Notify/AP_BoardLED.h | 40 ------------------------- libraries/AP_Notify/ExternalLED.cpp | 7 +++++ libraries/AP_Notify/ExternalLED.h | 12 -------- libraries/AP_Notify/VRBoard_LED.cpp | 5 ++++ 6 files changed, 64 insertions(+), 52 deletions(-) diff --git a/libraries/AP_HAL/AP_HAL_Boards.h b/libraries/AP_HAL/AP_HAL_Boards.h index 839bd1c7a5..f3fbf48453 100644 --- a/libraries/AP_HAL/AP_HAL_Boards.h +++ b/libraries/AP_HAL/AP_HAL_Boards.h @@ -123,6 +123,11 @@ #define HAL_INS_DEFAULT HAL_INS_HIL #define HAL_BARO_DEFAULT HAL_BARO_HIL #define HAL_COMPASS_DEFAULT HAL_COMPASS_HIL +#define HAL_GPIO_A_LED_PIN 61 +#define HAL_GPIO_B_LED_PIN 48 +#define HAL_GPIO_C_LED_PIN 117 +#define HAL_GPIO_LED_ON LOW +#define HAL_GPIO_LED_OFF HIGH #elif CONFIG_HAL_BOARD == HAL_BOARD_FLYMAPLE #define HAL_BOARD_NAME "FLYMAPLE" @@ -134,6 +139,11 @@ #define HAL_COMPASS_DEFAULT HAL_COMPASS_HMC5843 #define HAL_SERIAL0_BAUD_DEFAULT 115200 #define CONFIG_HAL_BOARD_SUBTYPE HAL_BOARD_SUBTYPE_NONE +#define HAL_GPIO_A_LED_PIN 13 +#define HAL_GPIO_B_LED_PIN 13 +#define HAL_GPIO_C_LED_PIN 13 +#define HAL_GPIO_LED_ON LOW +#define HAL_GPIO_LED_OFF HIGH #elif CONFIG_HAL_BOARD == HAL_BOARD_PX4 #define HAL_BOARD_NAME "PX4" @@ -153,6 +163,11 @@ #define CONFIG_HAL_BOARD_SUBTYPE HAL_BOARD_SUBTYPE_PX4_V2 #define HAL_STORAGE_SIZE 16384 #endif +#define HAL_GPIO_A_LED_PIN 27 +#define HAL_GPIO_B_LED_PIN 26 +#define HAL_GPIO_C_LED_PIN 25 +#define HAL_GPIO_LED_ON LOW +#define HAL_GPIO_LED_OFF HIGH #elif CONFIG_HAL_BOARD == HAL_BOARD_LINUX #define HAL_BOARD_NAME "Linux" @@ -167,12 +182,18 @@ #define HAL_INS_DEFAULT HAL_INS_HIL #define HAL_BARO_DEFAULT HAL_BARO_HIL #define HAL_COMPASS_DEFAULT HAL_COMPASS_HIL + #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_PXF || CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_ERLEBOARD #define HAL_BOARD_LOG_DIRECTORY "/var/APM/logs" #define HAL_BOARD_TERRAIN_DIRECTORY "/var/APM/terrain" #define HAL_INS_DEFAULT HAL_INS_MPU9250 #define HAL_BARO_DEFAULT HAL_BARO_MS5611_SPI #define HAL_COMPASS_DEFAULT HAL_COMPASS_AK8963_MPU9250 +#define HAL_GPIO_A_LED_PIN 61 +#define HAL_GPIO_B_LED_PIN 48 +#define HAL_GPIO_C_LED_PIN 117 +#define HAL_GPIO_LED_ON LOW +#define HAL_GPIO_LED_OFF HIGH #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_BEBOP #define HAL_BOARD_LOG_DIRECTORY "/data/ftp/internal_000/APM/logs" #define HAL_BOARD_TERRAIN_DIRECTORY "/data/ftp/internal_000/APM/terrain" @@ -207,6 +228,11 @@ #define HAL_BARO_MS5611_I2C_BUS 0 #define HAL_BARO_MS5611_I2C_ADDR 0x77 #define HAL_COMPASS_DEFAULT HAL_COMPASS_AK8963_MPU9250 +#define HAL_GPIO_A_LED_PIN 16 +#define HAL_GPIO_B_LED_PIN 16 +#define HAL_GPIO_C_LED_PIN 16 +#define HAL_GPIO_LED_ON LOW +#define HAL_GPIO_LED_OFF HIGH #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_RASPILOT #define HAL_BOARD_LOG_DIRECTORY "/var/APM/logs" #define HAL_BOARD_TERRAIN_DIRECTORY "/var/APM/terrain" @@ -219,6 +245,11 @@ #define HAL_INS_DEFAULT HAL_INS_MPU9250 #define HAL_BARO_DEFAULT HAL_BARO_MS5611_SPI #define HAL_COMPASS_DEFAULT HAL_COMPASS_AK8963_MPU9250 +#define HAL_GPIO_A_LED_PIN 24 +#define HAL_GPIO_B_LED_PIN 25 +#define HAL_GPIO_C_LED_PIN 16 +#define HAL_GPIO_LED_ON LOW +#define HAL_GPIO_LED_OFF HIGH #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_ZYNQ #define HAL_BOARD_LOG_DIRECTORY "/var/APM/logs" #define HAL_BOARD_TERRAIN_DIRECTORY "/var/APM/terrain" @@ -232,6 +263,11 @@ #define HAL_INS_DEFAULT HAL_INS_MPU9250 #define HAL_BARO_DEFAULT HAL_BARO_MS5611_SPI #define HAL_COMPASS_DEFAULT HAL_COMPASS_AK8963_MPU9250 +#define HAL_GPIO_A_LED_PIN 61 +#define HAL_GPIO_B_LED_PIN 48 +#define HAL_GPIO_C_LED_PIN 117 +#define HAL_GPIO_LED_ON LOW +#define HAL_GPIO_LED_OFF HIGH #else #error "no Linux board subtype set" #endif @@ -275,6 +311,15 @@ #define CONFIG_HAL_BOARD_SUBTYPE HAL_BOARD_SUBTYPE_NONE #define HAL_STORAGE_SIZE 8192 #endif +#define HAL_GPIO_A_LED_PIN 25 +#define HAL_GPIO_B_LED_PIN 26 +#define HAL_GPIO_C_LED_PIN 27 +#define HAL_GPIO_LED_ON HIGH +#define HAL_GPIO_LED_OFF LOW +#define EXTERNAL_LED_GPS 28 // GPS LED - AN10 +#define EXTERNAL_LED_ARMED 29 // Armed LED - AN11 +#define EXTERNAL_LED_MOTOR1 30 // Motor1 LED - AN8 +#define EXTERNAL_LED_MOTOR2 31 // Motor2 LED - AN12 #else #error "Unknown CONFIG_HAL_BOARD type" diff --git a/libraries/AP_Notify/AP_BoardLED.cpp b/libraries/AP_Notify/AP_BoardLED.cpp index 7a1ddbf45c..4e388f2e78 100644 --- a/libraries/AP_Notify/AP_BoardLED.cpp +++ b/libraries/AP_Notify/AP_BoardLED.cpp @@ -17,6 +17,9 @@ #include "AP_Notify.h" +#if (defined(HAL_GPIO_A_LED_PIN) && defined(HAL_GPIO_B_LED_PIN) && \ + defined(HAL_GPIO_C_LED_PIN)) + extern const AP_HAL::HAL& hal; bool AP_BoardLED::init(void) @@ -169,3 +172,7 @@ void AP_BoardLED::update(void) break; } } +#else +bool AP_BoardLED::init(void) {return true;} +void AP_BoardLED::update(void) {return;} +#endif diff --git a/libraries/AP_Notify/AP_BoardLED.h b/libraries/AP_Notify/AP_BoardLED.h index b6c00234fd..2da0369f08 100644 --- a/libraries/AP_Notify/AP_BoardLED.h +++ b/libraries/AP_Notify/AP_BoardLED.h @@ -25,46 +25,6 @@ #define HIGH 1 #define LOW 0 -#if CONFIG_HAL_BOARD == HAL_BOARD_PX4 - # define HAL_GPIO_A_LED_PIN 27 - # define HAL_GPIO_B_LED_PIN 26 - # define HAL_GPIO_C_LED_PIN 25 - # define HAL_GPIO_LED_ON LOW - # define HAL_GPIO_LED_OFF HIGH -#elif CONFIG_HAL_BOARD == HAL_BOARD_FLYMAPLE - # define HAL_GPIO_A_LED_PIN 13 - # define HAL_GPIO_B_LED_PIN 13 - # define HAL_GPIO_C_LED_PIN 13 - # define HAL_GPIO_LED_ON LOW - # define HAL_GPIO_LED_OFF HIGH -#elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_NAVIO - # define HAL_GPIO_A_LED_PIN 16 - # define HAL_GPIO_B_LED_PIN 16 - # define HAL_GPIO_C_LED_PIN 16 - # define HAL_GPIO_LED_ON LOW - # define HAL_GPIO_LED_OFF HIGH -#elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_ERLEBRAIN2 - # define HAL_GPIO_A_LED_PIN 24 - # define HAL_GPIO_B_LED_PIN 25 - # define HAL_GPIO_C_LED_PIN 16 - # define HAL_GPIO_LED_ON LOW - # define HAL_GPIO_LED_OFF HIGH -#elif CONFIG_HAL_BOARD == HAL_BOARD_LINUX || CONFIG_HAL_BOARD == HAL_BOARD_SITL - # define HAL_GPIO_A_LED_PIN 61 - # define HAL_GPIO_B_LED_PIN 48 - # define HAL_GPIO_C_LED_PIN 117 - # define HAL_GPIO_LED_ON LOW - # define HAL_GPIO_LED_OFF HIGH -#elif CONFIG_HAL_BOARD == HAL_BOARD_VRBRAIN - # define HAL_GPIO_A_LED_PIN 25 - # define HAL_GPIO_B_LED_PIN 26 - # define HAL_GPIO_C_LED_PIN 27 - # define HAL_GPIO_LED_ON HIGH - # define HAL_GPIO_LED_OFF LOW -#else -#error "Unknown board type in AP_Notify" -#endif - class AP_BoardLED: public NotifyDevice { public: diff --git a/libraries/AP_Notify/ExternalLED.cpp b/libraries/AP_Notify/ExternalLED.cpp index 30f08565d7..d2efeb2162 100644 --- a/libraries/AP_Notify/ExternalLED.cpp +++ b/libraries/AP_Notify/ExternalLED.cpp @@ -18,6 +18,9 @@ #include #include "AP_Notify.h" +#if (defined(EXTERNAL_LED_ARMED) && defined(EXTERNAL_LED_GPS) && \ + defined(EXTERNAL_LED_MOTOR1) && defined(EXTERNAL_LED_MOTOR2)) + extern const AP_HAL::HAL& hal; bool ExternalLED::init(void) @@ -245,3 +248,7 @@ void ExternalLED::motor_led2(bool on_off) hal.gpio->write(EXTERNAL_LED_MOTOR2, _flags.motorled2_on); } } +#else +bool ExternalLED::init(void) {return true;} +void ExternalLED::update(void) {return;} +#endif diff --git a/libraries/AP_Notify/ExternalLED.h b/libraries/AP_Notify/ExternalLED.h index 3edd303d9a..dcd149a4d7 100644 --- a/libraries/AP_Notify/ExternalLED.h +++ b/libraries/AP_Notify/ExternalLED.h @@ -23,18 +23,6 @@ #include #include "NotifyDevice.h" -#if CONFIG_HAL_BOARD == HAL_BOARD_VRBRAIN - #define EXTERNAL_LED_GPS 28 // GPS LED - AN10 - #define EXTERNAL_LED_ARMED 29 // Armed LED - AN11 - #define EXTERNAL_LED_MOTOR1 30 // Motor1 LED - AN8 - #define EXTERNAL_LED_MOTOR2 31 // Motor2 LED - AN12 -#else - #define EXTERNAL_LED_GPS 0 // pin definitions to allow this lib to build for - #define EXTERNAL_LED_ARMED 0 // for other boards even though - #define EXTERNAL_LED_MOTOR1 0 // they will never be used - #define EXTERNAL_LED_MOTOR2 0 -#endif - class ExternalLED: public NotifyDevice { public: diff --git a/libraries/AP_Notify/VRBoard_LED.cpp b/libraries/AP_Notify/VRBoard_LED.cpp index 9161b1dd99..a4a5ab2d17 100644 --- a/libraries/AP_Notify/VRBoard_LED.cpp +++ b/libraries/AP_Notify/VRBoard_LED.cpp @@ -20,6 +20,9 @@ #include "VRBoard_LED.h" #include +#if (defined(HAL_GPIO_A_LED_PIN) && defined(HAL_GPIO_B_LED_PIN) && \ + defined(HAL_GPIO_C_LED_PIN)) + #define VRBRAIN_LED_BRIGHT 1 // full brightness #define VRBRAIN_LED_MEDIUM 1 // medium brightness #define VRBRAIN_LED_DIM 1 // dim @@ -64,3 +67,5 @@ bool VRBoard_LED::hw_set_rgb(uint8_t r, uint8_t g, uint8_t b){ return true; } + +#endif