From 1c2bed102cb64a379b028076cf3bae53ec35fd6b Mon Sep 17 00:00:00 2001 From: Nate Gay Date: Tue, 22 Oct 2024 22:15:15 -0700 Subject: [PATCH 1/2] Add neopixel driver --- .gitmodules | 3 + Components/CMakeLists.txt | 2 + Components/Drv/CMakeLists.txt | 1 + Components/Drv/NeoPixelDriver/CMakeLists.txt | 18 +++++ .../Drv/NeoPixelDriver/NeoPixelDriver.cpp | 41 ++++++++++++ .../Drv/NeoPixelDriver/NeoPixelDriver.fpp | 43 ++++++++++++ .../Drv/NeoPixelDriver/NeoPixelDriver.hpp | 51 ++++++++++++++ Components/Drv/NeoPixelDriver/docs/sdd.md | 66 +++++++++++++++++++ lib/Adafruit_NeoPixel | 1 + lib/CMakeLists.txt | 14 ++++ project.cmake | 1 + 11 files changed, 241 insertions(+) create mode 100644 Components/Drv/CMakeLists.txt create mode 100644 Components/Drv/NeoPixelDriver/CMakeLists.txt create mode 100644 Components/Drv/NeoPixelDriver/NeoPixelDriver.cpp create mode 100644 Components/Drv/NeoPixelDriver/NeoPixelDriver.fpp create mode 100644 Components/Drv/NeoPixelDriver/NeoPixelDriver.hpp create mode 100644 Components/Drv/NeoPixelDriver/docs/sdd.md create mode 160000 lib/Adafruit_NeoPixel create mode 100644 lib/CMakeLists.txt 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/Components/CMakeLists.txt b/Components/CMakeLists.txt index b46227b..40b944f 100644 --- a/Components/CMakeLists.txt +++ b/Components/CMakeLists.txt @@ -4,3 +4,5 @@ add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/BroncoOreMessageHandler/") add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Radio/") + +add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Drv/") diff --git a/Components/Drv/CMakeLists.txt b/Components/Drv/CMakeLists.txt new file mode 100644 index 0000000..fc775b2 --- /dev/null +++ b/Components/Drv/CMakeLists.txt @@ -0,0 +1 @@ +add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/NeoPixelDriver/") diff --git a/Components/Drv/NeoPixelDriver/CMakeLists.txt b/Components/Drv/NeoPixelDriver/CMakeLists.txt new file mode 100644 index 0000000..ed462fc --- /dev/null +++ b/Components/Drv/NeoPixelDriver/CMakeLists.txt @@ -0,0 +1,18 @@ +#### +# F prime CMakeLists.txt: +# +# SOURCE_FILES: combined list of source and autocoding files +# MOD_DEPS: (optional) module dependencies +# UT_SOURCE_FILES: list of source files for unit tests +# +#### +set(SOURCE_FILES + "${CMAKE_CURRENT_LIST_DIR}/NeoPixelDriver.fpp" + "${CMAKE_CURRENT_LIST_DIR}/NeoPixelDriver.cpp" +) + +set(MOD_DEPS + Adafruit_NeoPixel +) + +register_fprime_module() diff --git a/Components/Drv/NeoPixelDriver/NeoPixelDriver.cpp b/Components/Drv/NeoPixelDriver/NeoPixelDriver.cpp new file mode 100644 index 0000000..e58e785 --- /dev/null +++ b/Components/Drv/NeoPixelDriver/NeoPixelDriver.cpp @@ -0,0 +1,41 @@ +// ====================================================================== +// \title NeoPixelDriver.cpp +// \author nate +// \brief cpp file for NeoPixelDriver component implementation class +// ====================================================================== + +#include "Components/Drv/NeoPixelDriver/NeoPixelDriver.hpp" +#include "FpConfig.hpp" + +namespace Drv { + +// ---------------------------------------------------------------------- +// Component construction and destruction +// ---------------------------------------------------------------------- + +#define PIN 24 +#define NUMPIXELS 1 + +NeoPixelDriver ::NeoPixelDriver(const char* const compName) : NeoPixelDriverComponentBase(compName), + pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800) +{ + pixels.begin(); +} + +NeoPixelDriver ::~NeoPixelDriver() {} + +// ---------------------------------------------------------------------- +// Handler implementations for user-defined typed input ports +// ---------------------------------------------------------------------- + +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(); +} + +} // namespace Drv diff --git a/Components/Drv/NeoPixelDriver/NeoPixelDriver.fpp b/Components/Drv/NeoPixelDriver/NeoPixelDriver.fpp new file mode 100644 index 0000000..7d6ebb6 --- /dev/null +++ b/Components/Drv/NeoPixelDriver/NeoPixelDriver.fpp @@ -0,0 +1,43 @@ +# 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 neoPixelSet: NeoPixelSet + + @ Port to read the current NeoPixel state. + sync input port neoPixelRead: NeoPixelRead + + @ Event to report current NeoPixel state. + event NeoPixelState($red: U8, green: U8, blue: U8) \ + severity activity low \ + format "LED is set to ({}, {}, {})" + + ############################################################################### + # Standard AC Ports: Required for Channels, Events, Commands, and Parameters # + ############################################################################### + @ Port for requesting the current time + time get port timeCaller + + @ Port for sending textual representation of events + text event port logTextOut + + @ Port for sending events to downlink + event port logOut + } +} diff --git a/Components/Drv/NeoPixelDriver/NeoPixelDriver.hpp b/Components/Drv/NeoPixelDriver/NeoPixelDriver.hpp new file mode 100644 index 0000000..cf25d33 --- /dev/null +++ b/Components/Drv/NeoPixelDriver/NeoPixelDriver.hpp @@ -0,0 +1,51 @@ +// ====================================================================== +// \title NeoPixelDriver.hpp +// \author nate +// \brief hpp file for NeoPixelDriver component implementation class +// ====================================================================== + +#ifndef Drv_NeoPixelDriver_HPP +#define Drv_NeoPixelDriver_HPP + +#include "Components/Drv/NeoPixelDriver/NeoPixelDriverComponentAc.hpp" +#include "lib/Adafruit_NeoPixel/Adafruit_NeoPixel.h" + +namespace Drv { + +class NeoPixelDriver : public NeoPixelDriverComponentBase { + public: + // ---------------------------------------------------------------------- + // Component construction and destruction + // ---------------------------------------------------------------------- + + //! Construct NeoPixelDriver object + NeoPixelDriver(const char* const compName //!< The component name + ); + + //! Destroy NeoPixelDriver object + ~NeoPixelDriver(); + + PRIVATE: + // ---------------------------------------------------------------------- + // Handler implementations for user-defined typed input ports + // ---------------------------------------------------------------------- + + //! 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: + Adafruit_NeoPixel pixels; +}; + +} // namespace Drv + +#endif diff --git a/Components/Drv/NeoPixelDriver/docs/sdd.md b/Components/Drv/NeoPixelDriver/docs/sdd.md new file mode 100644 index 0000000..22ad682 --- /dev/null +++ b/Components/Drv/NeoPixelDriver/docs/sdd.md @@ -0,0 +1,66 @@ +# Drv::NeoPixelDriver + +FPrime driver implmementation for Adafruit NeoPixel. + +## Usage Examples +Add usage examples here + +### Diagrams +Add diagrams here + +### Typical Usage +And the typical usage of the component here + +## Class Diagram +Add a class diagram here + +## Port Descriptions +| Name | Description | +|---|---| +|---|---| + +## Component States +Add component states in the chart below +| Name | Description | +|---|---| +|---|---| + +## Sequence Diagrams +Add sequence diagrams here + +## Parameters +| Name | Description | +|---|---| +|---|---| + +## Commands +| Name | Description | +|---|---| +|---|---| + +## Events +| Name | Description | +|---|---| +|---|---| + +## Telemetry +| Name | Description | +|---|---| +|---|---| + +## Unit Tests +Add unit test descriptions in the chart below +| Name | Description | Output | Coverage | +|---|---|---|---| +|---|---|---|---| + +## Requirements +Add requirements in the chart below +| Name | Description | Validation | +|---|---|---| +|---|---|---| + +## Change Log +| Date | Description | +|---|---| +|---| Initial Draft | \ No newline at end of file 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 diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt new file mode 100644 index 0000000..b676a39 --- /dev/null +++ b/lib/CMakeLists.txt @@ -0,0 +1,14 @@ +#### +# F prime CMakeLists.txt: +# +# SOURCE_FILES: combined list of source and autocoding files +# MOD_DEPS: (optional) module dependencies +# +# Note: using PROJECT_NAME as EXECUTABLE_NAME +#### +set(SOURCE_FILES + "${CMAKE_CURRENT_LIST_DIR}/Adafruit_NeoPixel/Adafruit_NeoPixel.cpp" +) + +add_library(Adafruit_NeoPixel ${SOURCE_FILES}) +target_include_directories(Adafruit_NeoPixel PUBLIC "${CMAKE_CURRENT_LIST_DIR}/Adafruit_NeoPixel") diff --git a/project.cmake b/project.cmake index 1adf2c1..deebb0a 100644 --- a/project.cmake +++ b/project.cmake @@ -3,3 +3,4 @@ add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Components") add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/BroncoDeployment/") +add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/lib") From 65c2516d893976f77e69ce5ab831f58663e57449 Mon Sep 17 00:00:00 2001 From: Nate Gay Date: Thu, 7 Nov 2024 13:26:16 -0600 Subject: [PATCH 2/2] Remove docs dir --- Components/Drv/NeoPixelDriver/docs/sdd.md | 66 ----------------------- 1 file changed, 66 deletions(-) delete mode 100644 Components/Drv/NeoPixelDriver/docs/sdd.md diff --git a/Components/Drv/NeoPixelDriver/docs/sdd.md b/Components/Drv/NeoPixelDriver/docs/sdd.md deleted file mode 100644 index 22ad682..0000000 --- a/Components/Drv/NeoPixelDriver/docs/sdd.md +++ /dev/null @@ -1,66 +0,0 @@ -# Drv::NeoPixelDriver - -FPrime driver implmementation for Adafruit NeoPixel. - -## Usage Examples -Add usage examples here - -### Diagrams -Add diagrams here - -### Typical Usage -And the typical usage of the component here - -## Class Diagram -Add a class diagram here - -## Port Descriptions -| Name | Description | -|---|---| -|---|---| - -## Component States -Add component states in the chart below -| Name | Description | -|---|---| -|---|---| - -## Sequence Diagrams -Add sequence diagrams here - -## Parameters -| Name | Description | -|---|---| -|---|---| - -## Commands -| Name | Description | -|---|---| -|---|---| - -## Events -| Name | Description | -|---|---| -|---|---| - -## Telemetry -| Name | Description | -|---|---| -|---|---| - -## Unit Tests -Add unit test descriptions in the chart below -| Name | Description | Output | Coverage | -|---|---|---|---| -|---|---|---|---| - -## Requirements -Add requirements in the chart below -| Name | Description | Validation | -|---|---|---| -|---|---|---| - -## Change Log -| Date | Description | -|---|---| -|---| Initial Draft | \ No newline at end of file