From 89937bc2cfc2bcf73a82913a13b4ab29190a3955 Mon Sep 17 00:00:00 2001 From: Nate Gay Date: Mon, 4 Nov 2024 23:11:52 -0600 Subject: [PATCH] Improved driver --- .gitmodules | 3 +++ BroncoDeployment/Top/instances.fpp | 2 -- Components/Drv/CMakeLists.txt | 4 --- .../Drv/NeoPixelDriver/NeoPixelDriver.cpp | 21 +++++---------- .../Drv/NeoPixelDriver/NeoPixelDriver.fpp | 26 ++++++++++++++++--- .../Drv/NeoPixelDriver/NeoPixelDriver.hpp | 21 ++++++++------- .../Drv/NeoPixelDriverPorts/CMakeLists.txt | 12 --------- .../NeoPixelDriverPorts.fpp | 8 ------ lib/Adafruit_NeoPixel | 1 + 9 files changed, 43 insertions(+), 55 deletions(-) delete mode 100644 Components/Drv/NeoPixelDriverPorts/CMakeLists.txt delete mode 100644 Components/Drv/NeoPixelDriverPorts/NeoPixelDriverPorts.fpp create mode 160000 lib/Adafruit_NeoPixel diff --git a/.gitmodules b/.gitmodules index 797a817..3ad179b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "fprime-arduino"] path = fprime-arduino url = https://github.com/fprime-community/fprime-arduino.git +[submodule "lib/Adafruit_NeoPixel"] + path = lib/Adafruit_NeoPixel + url = https://github.com/adafruit/Adafruit_NeoPixel.git diff --git a/BroncoDeployment/Top/instances.fpp b/BroncoDeployment/Top/instances.fpp index 1563438..336e878 100644 --- a/BroncoDeployment/Top/instances.fpp +++ b/BroncoDeployment/Top/instances.fpp @@ -60,8 +60,6 @@ module BroncoDeployment { instance rateDriver: Arduino.HardwareRateDriver base id 0x4A00 - instance neoPixelDriver: Drv.NeoPixelDriver base id 0x4B00 - # Hub Connections instance hub: Svc.GenericHub base id 0x5000 diff --git a/Components/Drv/CMakeLists.txt b/Components/Drv/CMakeLists.txt index 5021b1a..fc775b2 100644 --- a/Components/Drv/CMakeLists.txt +++ b/Components/Drv/CMakeLists.txt @@ -1,5 +1 @@ -# Ports -add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/NeoPixelDriverPorts/") - -# Components add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/NeoPixelDriver/") diff --git a/Components/Drv/NeoPixelDriver/NeoPixelDriver.cpp b/Components/Drv/NeoPixelDriver/NeoPixelDriver.cpp index 175200e..e58e785 100644 --- a/Components/Drv/NeoPixelDriver/NeoPixelDriver.cpp +++ b/Components/Drv/NeoPixelDriver/NeoPixelDriver.cpp @@ -17,10 +17,6 @@ namespace Drv { #define NUMPIXELS 1 NeoPixelDriver ::NeoPixelDriver(const char* const compName) : NeoPixelDriverComponentBase(compName), - on_off(Fw::On::OFF), - red(0), - green(0), - blue(0), pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800) { pixels.begin(); @@ -32,18 +28,13 @@ NeoPixelDriver ::~NeoPixelDriver() {} // Handler implementations for user-defined typed input ports // ---------------------------------------------------------------------- -void NeoPixelDriver ::neoPixelWrite_handler(NATIVE_INT_TYPE portNum, const Fw::On& on_off, U8 red, U8 green, U8 blue) { - this->on_off = on_off; - this->red = red; - this->green = green; - this->blue = blue; - - if (Fw::On::ON == this->on_off) { - pixels.setPixelColor(0, pixels.Color(red, green, blue)); - } else { - pixels.setPixelColor(0, pixels.Color(0, 0, 0)); - } +Drv::NeoPixelColor NeoPixelDriver ::neoPixelRead_handler(NATIVE_INT_TYPE portNum) { + uint16_t color = pixels.getPixelColor(0); + return Drv::NeoPixelColor((color >> 16) & 0xFF, (color >> 8) & 0xFF, color & 0xFF); +} +void NeoPixelDriver ::neoPixelSet_handler(NATIVE_INT_TYPE portNum, const Drv::NeoPixelColor& color) { + pixels.setPixelColor(0, pixels.Color(color.getred(), color.getgreen(), color.getblue())); pixels.show(); } diff --git a/Components/Drv/NeoPixelDriver/NeoPixelDriver.fpp b/Components/Drv/NeoPixelDriver/NeoPixelDriver.fpp index 6ab61d8..7d6ebb6 100644 --- a/Components/Drv/NeoPixelDriver/NeoPixelDriver.fpp +++ b/Components/Drv/NeoPixelDriver/NeoPixelDriver.fpp @@ -1,14 +1,32 @@ +# Type definition +module Drv { + struct NeoPixelColor { + $red: U8 @< Red color value. + green: U8 @< Green color value. + blue: U8 @< Blue color value. + } +} + +# Port definition +module Drv { + port NeoPixelSet(color: NeoPixelColor) + port NeoPixelRead -> NeoPixelColor +} + +# Component definition module Drv { @ FPrime driver implmementation for Adafruit NeoPixel. passive component NeoPixelDriver { - @ Port to turn modify the NeoPixel state. - sync input port neoPixelWrite: Drv.NeoPixelWrite + sync input port neoPixelSet: NeoPixelSet + + @ Port to read the current NeoPixel state. + sync input port neoPixelRead: NeoPixelRead @ Event to report current NeoPixel state. - event NeoPixelState(on_off: Fw.On, $red: U8, green: U8, blue: U8) \ + event NeoPixelState($red: U8, green: U8, blue: U8) \ severity activity low \ - format "LED is {} with color ({}, {}, {})" + format "LED is set to ({}, {}, {})" ############################################################################### # Standard AC Ports: Required for Channels, Events, Commands, and Parameters # diff --git a/Components/Drv/NeoPixelDriver/NeoPixelDriver.hpp b/Components/Drv/NeoPixelDriver/NeoPixelDriver.hpp index b59799b..cf25d33 100644 --- a/Components/Drv/NeoPixelDriver/NeoPixelDriver.hpp +++ b/Components/Drv/NeoPixelDriver/NeoPixelDriver.hpp @@ -30,18 +30,19 @@ class NeoPixelDriver : public NeoPixelDriverComponentBase { // Handler implementations for user-defined typed input ports // ---------------------------------------------------------------------- - //! Handler implementation for onOff - void neoPixelWrite_handler(NATIVE_INT_TYPE portNum, //!< The port number - const Fw::On& on_off, - U8 red, - U8 green, - U8 blue) override; + //! Handler implementation for neoPixelRead + //! + //! Port to read the current NeoPixel state. + Drv::NeoPixelColor neoPixelRead_handler(NATIVE_INT_TYPE portNum //!< The port number + ) override; + + //! Handler implementation for neoPixelSet + //! + //! Port to turn modify the NeoPixel state. + void neoPixelSet_handler(NATIVE_INT_TYPE portNum, //!< The port number + const Drv::NeoPixelColor& color) override; PRIVATE: - Fw::On on_off; - U8 red; - U8 green; - U8 blue; Adafruit_NeoPixel pixels; }; diff --git a/Components/Drv/NeoPixelDriverPorts/CMakeLists.txt b/Components/Drv/NeoPixelDriverPorts/CMakeLists.txt deleted file mode 100644 index 541d580..0000000 --- a/Components/Drv/NeoPixelDriverPorts/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -#### -# F prime CMakeLists.txt: -# -# SOURCE_FILES: combined list of source and autocoding files -# MOD_DEPS: (optional) module dependencies -# -#### -set(SOURCE_FILES - "${CMAKE_CURRENT_LIST_DIR}/NeoPixelDriverPorts.fpp" -) - -register_fprime_module() diff --git a/Components/Drv/NeoPixelDriverPorts/NeoPixelDriverPorts.fpp b/Components/Drv/NeoPixelDriverPorts/NeoPixelDriverPorts.fpp deleted file mode 100644 index 24a4c10..0000000 --- a/Components/Drv/NeoPixelDriverPorts/NeoPixelDriverPorts.fpp +++ /dev/null @@ -1,8 +0,0 @@ -module Drv { - port NeoPixelWrite( - on_off: Fw.On - $red: U8 - green: U8 - blue: U8 - ) -} diff --git a/lib/Adafruit_NeoPixel b/lib/Adafruit_NeoPixel new file mode 160000 index 0000000..aa798ff --- /dev/null +++ b/lib/Adafruit_NeoPixel @@ -0,0 +1 @@ +Subproject commit aa798ff5e9bb9d7299190627d2454ccd6f599ae8