diff --git a/libraries/AP_Notify/AP_Notify.cpp b/libraries/AP_Notify/AP_Notify.cpp index a79bd5b606..ff76730ac0 100644 --- a/libraries/AP_Notify/AP_Notify.cpp +++ b/libraries/AP_Notify/AP_Notify.cpp @@ -36,6 +36,7 @@ #include #include "AP_BoardLED2.h" #include "ProfiLED.h" +#include "ScriptingLED.h" extern const AP_HAL::HAL& hal; @@ -146,7 +147,7 @@ const AP_Param::GroupInfo AP_Notify::var_info[] = { // @Param: LED_TYPES // @DisplayName: LED Driver Types // @Description: Controls what types of LEDs will be enabled - // @Bitmask: 0:Build in LED, 1:Internal ToshibaLED, 2:External ToshibaLED, 3:External PCA9685, 4:Oreo LED, 5:UAVCAN, 6:NCP5623 External, 7:NCP5623 Internal, 8:NeoPixel, 9:ProfiLED + // @Bitmask: 0:Build in LED, 1:Internal ToshibaLED, 2:External ToshibaLED, 3:External PCA9685, 4:Oreo LED, 5:UAVCAN, 6:NCP5623 External, 7:NCP5623 Internal, 8:NeoPixel, 9:ProfiLED, 10:Scripting // @User: Advanced AP_GROUPINFO("LED_TYPES", 6, AP_Notify, _led_type, BUILD_DEFAULT_LED_TYPE), @@ -288,6 +289,12 @@ void AP_Notify::add_backends(void) #endif // HAL_ENABLE_LIBUAVCAN_DRIVERS break; + case Notify_LED_Scripting: +#ifdef ENABLE_SCRIPTING + ADD_BACKEND(new ScriptingLED()); +#endif + break; + } } diff --git a/libraries/AP_Notify/AP_Notify.h b/libraries/AP_Notify/AP_Notify.h index 84c767317b..88e6133d1a 100644 --- a/libraries/AP_Notify/AP_Notify.h +++ b/libraries/AP_Notify/AP_Notify.h @@ -71,6 +71,7 @@ public: Notify_LED_NCP5623_I2C_Internal = (1 << 7), // Internal NCP5623 Notify_LED_NeoPixel = (1 << 8), // NeoPixel 5050 AdaFruit 1655 SK6812 Worldsemi WS2812B Notify_LED_ProfiLED = (1 << 9), // ProfiLED + Notify_LED_Scripting = (1 << 10),// Colour accessor for scripting Notify_LED_MAX }; diff --git a/libraries/AP_Notify/ScriptingLED.cpp b/libraries/AP_Notify/ScriptingLED.cpp new file mode 100644 index 0000000000..6533990bff --- /dev/null +++ b/libraries/AP_Notify/ScriptingLED.cpp @@ -0,0 +1,39 @@ +/* + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ + +#include "AP_Notify/AP_Notify.h" +#include "ScriptingLED.h" + +#ifdef ENABLE_SCRIPTING + +ScriptingLED *ScriptingLED::_singleton; + +ScriptingLED::ScriptingLED() : + RGBLed(0, 255, 170, 85) +{ + if (_singleton != nullptr) { + AP_HAL::panic("ScriptingLED must be singleton"); + } + _singleton = this; +} + +void ScriptingLED::get_rgb(uint8_t& red, uint8_t& green, uint8_t& blue) +{ + red = _red_curr; + green = _green_curr; + blue = _blue_curr; +} + +#endif diff --git a/libraries/AP_Notify/ScriptingLED.h b/libraries/AP_Notify/ScriptingLED.h new file mode 100644 index 0000000000..de98a147c2 --- /dev/null +++ b/libraries/AP_Notify/ScriptingLED.h @@ -0,0 +1,47 @@ +/* + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ +#pragma once + +#include "RGBLed.h" +#include + +#ifdef ENABLE_SCRIPTING + +class ScriptingLED: public RGBLed { +public: + ScriptingLED(); + + /* Do not allow copies */ + ScriptingLED(const AP_Notify &other) = delete; + ScriptingLED &operator=(const AP_Notify&) = delete; + + // get singleton instance + static ScriptingLED *get_singleton(void) { + return _singleton; + } + + void get_rgb(uint8_t& red, uint8_t& green, uint8_t& blue); + +protected: + + bool hw_init() override {return true;}; + bool hw_set_rgb(uint8_t red, uint8_t green, uint8_t blue) override {return true;} + +private: + static ScriptingLED *_singleton; + +}; + +#endif