Files
Flipdot-display/test/mocks/BROSE9323.h
T

70 lines
2.2 KiB
C++
Raw Normal View History

2026-10-13 00:23:07 +02:00
// 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
2026-10-13 00:23:07 +02:00
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
bool refresh_running = false; // what refreshing() returns
uint16_t crc_value = 0; // what crc() returns
2026-10-13 00:23:07 +02:00
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); }
2026-10-13 00:23:07 +02:00
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 startRefresh() { log("refresh"); }
bool refreshing() const { return refresh_running; }
uint16_t crc() const { return crc_value; }
2026-10-13 00:23:07 +02:00
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}); }
};