From d9f03d0a2d70e2b27fcccc1302afec8307116bd3 Mon Sep 17 00:00:00 2001 From: len0rd Date: Mon, 27 Jan 2025 08:29:11 -0500 Subject: [PATCH] WIP driver for adafruit display --- lib/matrix_orbital/AdafruitVfdDisplay.cpp | 51 +++++++++++++++++++++++ lib/matrix_orbital/AdafruitVfdDisplay.hpp | 35 ++++++++++++++++ platformio.ini | 1 + 3 files changed, 87 insertions(+) create mode 100644 lib/matrix_orbital/AdafruitVfdDisplay.cpp create mode 100644 lib/matrix_orbital/AdafruitVfdDisplay.hpp diff --git a/lib/matrix_orbital/AdafruitVfdDisplay.cpp b/lib/matrix_orbital/AdafruitVfdDisplay.cpp new file mode 100644 index 0000000..396a518 --- /dev/null +++ b/lib/matrix_orbital/AdafruitVfdDisplay.cpp @@ -0,0 +1,51 @@ +#include "AdafruitVfdDisplay.hpp" + +AdafruitVfdDisplay::AdafruitVfdDisplay(UART& lcdUart) : m_lcdUart{lcdUart} {} + + +void AdafruitVfdDisplay::createChar(uint8_t id, uint8_t* c) { + +} + +void AdafruitVfdDisplay::drawBlinker() { + +} + +void AdafruitVfdDisplay::clearBlinker() { + +} + +void AdafruitVfdDisplay::begin() { + delay(500); + clear(); +} + +void AdafruitVfdDisplay::clear() { + uint8_t clearCmd[] = {0xfe, 0x58}; + m_lcdUart.write_raw(clearCmd, sizeof(clearCmd)); +} + +void AdafruitVfdDisplay::show() { + +} + +void AdafruitVfdDisplay::hide() { + +} + +void AdafruitVfdDisplay::draw(uint8_t byte) { + +} + +void AdafruitVfdDisplay::draw(const char* text) { + +} + +void AdafruitVfdDisplay::setCursor(uint8_t col, uint8_t row) { + +} + +void AdafruitVfdDisplay::setBacklight(bool enabled) { + uint8_t backlightCmd[] = {0xfe, 0x99, enabled ? 150 : 50}; + m_lcdUart.write_raw(backlightCmd, sizeof(backlightCmd)); +} diff --git a/lib/matrix_orbital/AdafruitVfdDisplay.hpp b/lib/matrix_orbital/AdafruitVfdDisplay.hpp new file mode 100644 index 0000000..2509145 --- /dev/null +++ b/lib/matrix_orbital/AdafruitVfdDisplay.hpp @@ -0,0 +1,35 @@ +/** + * + * Implementation of LcdMenu::CharacterDisplayInterface + * For the Adafruit Character LCD Serial backpack. Which per their docs + * has a similar interface to the "Matrix Orbital Specification" + * @see https://learn.adafruit.com/usb-plus-serial-backpack/command-reference + */ +#ifndef __ADAFRUITVFDDISPINTERFACE_H__ +#define __ADAFRUITVFDDISPINTERFACE_H__ + +#include + +class AdafruitVfdDisplay : public CharacterDisplayInterface { + public: + AdafruitVfdDisplay(UART& lcdUart); + + // interface implementations + + void createChar(uint8_t id, uint8_t* c) override; + void drawBlinker() override; + void clearBlinker() override; + void begin() override; + void clear() override; + void show() override; + void hide() override; + void draw(uint8_t byte) override; + void draw(const char* text) override; + void setCursor(uint8_t col, uint8_t row) override; + void setBacklight(bool enabled) override; + + private: + UART m_lcdUart; +}; + +#endif /* __ADAFRUITVFDDISPINTERFACE_H__ */ diff --git a/platformio.ini b/platformio.ini index 31a0abf..5dcfbf9 100644 --- a/platformio.ini +++ b/platformio.ini @@ -15,3 +15,4 @@ framework = arduino monitor_speed = 115200 lib_deps = mathertel/OneButton@^2.6.1 + forntoh/LcdMenu@^5.6.0