Deluge Firmware 1.3.0
Build date: 2026.03.02
Loading...
Searching...
No Matches
display.h
1#pragma once
2#include "definitions_cxx.hpp"
3#include "util/string.h"
4#include <array>
5#include <optional>
6#include <string_view>
7#include <vector>
8
9extern "C" {
10#include "util/cfunctions.h"
11}
12
13class NumericLayer;
15
16enum class PopupType {
17 NONE,
19 GENERAL,
21 LOADING,
23 PROBABILITY,
25 ITERANCE,
27 SWING,
29 TEMPO,
31 QUANTIZE,
33 THRESHOLD_RECORDING_MODE,
35 NOTIFICATION,
36 // Note: Add here more popup types
37};
38
39namespace deluge::hid {
40
41enum struct DisplayType { OLED, SEVENSEG };
42
43class Display {
44public:
45 Display(DisplayType displayType) : displayType(displayType) {}
46
47 virtual ~Display() = default;
48
49 constexpr virtual size_t getNumBrowserAndMenuLines() = 0;
50
51 virtual void setText(std::string_view newText, bool alignRight = false, uint8_t drawDot = 255, bool doBlink = false,
52 uint8_t* newBlinkMask = nullptr, bool blinkImmediately = false, bool shouldBlinkFast = false,
53 int32_t scrollPos = 0, uint8_t* blinkAddition = nullptr,
54 bool justReplaceBottomLayer = false) {};
55
56 virtual void displayPopup(char const* newText, int8_t numFlashes = 3, bool alignRight = false,
57 uint8_t drawDot = 255, int32_t blinkSpeed = 1, PopupType type = PopupType::GENERAL) = 0;
58
59 virtual void displayPopup(uint8_t val, int8_t numFlashes = 3, bool alignRight = false, uint8_t drawDot = 255,
60 int32_t blinkSpeed = 1, PopupType type = PopupType::GENERAL) {
61 char valStr[4] = {0};
62 intToString(val, valStr, 1);
63 displayPopup(valStr, numFlashes, alignRight, drawDot, blinkSpeed, type);
64 }
65
66 virtual void displayPopup(char const* shortLong[2], int8_t numFlashes = 3, bool alignRight = false,
67 uint8_t drawDot = 255, int32_t blinkSpeed = 1, PopupType type = PopupType::GENERAL) {
68 displayPopup(have7SEG() ? shortLong[0] : shortLong[1], numFlashes, alignRight, drawDot, blinkSpeed, type);
69 }
70
71 virtual void popupText(char const* text, PopupType type = PopupType::GENERAL) = 0;
72 virtual void popupTextTemporary(char const* text, PopupType type = PopupType::GENERAL) = 0;
73
74 virtual void setNextTransitionDirection(int8_t thisDirection) {};
75
76 virtual void cancelPopup() = 0;
77 virtual void freezeWithError(char const* text) = 0;
78 virtual bool isLayerCurrentlyOnTop(NumericLayer* layer) = 0;
79 virtual void displayError(Error error) = 0;
80
81 virtual void removeWorkingAnimation() = 0;
82
83 // Loading animations
84 virtual void displayLoadingAnimation() {};
85 virtual void displayLoadingAnimationText(char const* text, bool delayed = false, bool transparent = false) = 0;
86 virtual void removeLoadingAnimation() = 0;
87
88 virtual void displayNotification(std::string_view paramTitle, std::optional<std::string_view> paramValue) {}
89
90 virtual bool hasPopup() = 0;
91 virtual bool hasPopupOfType(PopupType type) = 0;
92
93 virtual void consoleText(char const* text) = 0;
94
95 virtual void timerRoutine() = 0;
96
97 virtual void setTextAsNumber(int16_t number, uint8_t drawDot = 255, bool doBlink = false) {}
98 virtual int32_t getEncodedPosFromLeft(int32_t textPos, char const* text, bool* andAHalf) { return 0; }
99 virtual void setTextAsSlot(int16_t currentSlot, int8_t currentSubSlot, bool currentSlotExists, bool doBlink = false,
100 int32_t blinkPos = -1, bool blinkImmediately = false) {}
101 virtual void setTextWithMultipleDots(std::string_view newText, std::vector<uint8_t> dotPositions,
102 bool alignRight = false, bool doBlink = false, uint8_t* newBlinkMask = nullptr,
103 bool blinkImmediately = false) {}
104 virtual NumericLayerScrollingText* setScrollingText(char const* newText, int32_t startAtPos = 0,
105 int32_t initialDelay = 600, int count = -1,
106 uint8_t fixedDot = 255) {
107 return nullptr;
108 }
109
110 virtual std::array<uint8_t, kNumericDisplayLength> getLast() { return {0}; }; // to match SevenSegment
111
112 bool haveOLED() { return displayType == DisplayType::OLED; }
113 bool have7SEG() { return displayType == DisplayType::SEVENSEG; }
114
115private:
116 DisplayType displayType;
117};
118
119} // namespace deluge::hid
120
121extern deluge::hid::Display* display;
122
123namespace deluge::hid::display {
124void swapDisplayType();
125// physical screen is oled
126extern bool have_oled_screen;
127} // namespace deluge::hid::display
128
129extern "C" void consoleTextIfAllBootedUp(char const* text);
Definition numeric_layer_scrolling_text.h:22
Definition numeric_layer.h:23
Definition display.h:43