Public Access
- Text elements can scroll in a window at a set speed; clock, countdown and stopwatch can show seconds. Moving pages are sent as instant frames (new Nano command D1) and paced by the estimated flip time. - Countdown to a date and time (smart, days, days + time, with seconds), stopwatch (web UI, HA switch and reset button), image element (fixed or by Home Assistant state), multiplier for HA values, degree sign (char 127) in all fonts and the font converter. - Page format version 2; version 1 pages are converted. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
66 lines
1.9 KiB
C++
66 lines
1.9 KiB
C++
// Fake display driver for the native tests: records every call instead of flipping dots
|
|
#pragma once
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "Arduino.h"
|
|
#include "dot_sequence.h" // the real one, from lib/BROSE9323
|
|
|
|
struct DisplayCall
|
|
{
|
|
std::string what;
|
|
int a, b, c;
|
|
};
|
|
|
|
class BROSE9323
|
|
{
|
|
public:
|
|
std::vector<DisplayCall> calls;
|
|
bool direct = false;
|
|
bool effect_running = false; // what busy() returns
|
|
|
|
BROSE9323(uint8_t, uint8_t, uint8_t, uint16_t) {}
|
|
|
|
void begin() { log("begin"); }
|
|
void display(bool force = false, bool instant = false) { log("display", force, instant); }
|
|
void drawPixel(int16_t x, int16_t y, uint16_t color) { log(direct ? "directPixel" : "pixel", x, y, color); }
|
|
void fillScreen(uint16_t color) { log("fill", color); }
|
|
void setDirect(bool d) { direct = d; }
|
|
void setTiming(uint16_t t) { log("timing", t); }
|
|
void setGap(uint16_t t) { log("gap", t); }
|
|
void setPulses(uint8_t n) { log("pulses", n); }
|
|
void setEffect(uint8_t effect, uint16_t time_ms, uint8_t flags = 0) { log("effect", effect, time_ms, flags); }
|
|
bool update() { return effect_running; }
|
|
bool busy() const { return effect_running; }
|
|
void printBuffer() { log("printBuffer"); }
|
|
void setCursor(int16_t x, int16_t y) { log("cursor", x, y); }
|
|
void setTextColor(uint16_t color, uint16_t background) { log("textColor", color, background); }
|
|
void setTextSize(uint8_t size) { log("textSize", size); }
|
|
size_t write(uint8_t ch)
|
|
{
|
|
log("write", ch);
|
|
return 1;
|
|
}
|
|
void println() { log("newline"); }
|
|
|
|
// Helpers for the tests
|
|
int count(const std::string &what) const
|
|
{
|
|
int n = 0;
|
|
for (const DisplayCall &call : calls)
|
|
n += call.what == what;
|
|
return n;
|
|
}
|
|
const DisplayCall *last(const std::string &what) const
|
|
{
|
|
for (auto it = calls.rbegin(); it != calls.rend(); ++it)
|
|
if (it->what == what)
|
|
return &*it;
|
|
return nullptr;
|
|
}
|
|
|
|
private:
|
|
void log(const char *what, int a = 0, int b = 0, int c = 0) { calls.push_back({what, a, b, c}); }
|
|
};
|