Files
eink-dairy/display.h
2025-11-19 22:26:52 -05:00

74 lines
2.1 KiB
C++

/* display.h
* Generated from display.cpp — public declarations for the OLED helper
*/
#ifndef DISPLAY_H
#define DISPLAY_H
#include <stddef.h>
#include <stdint.h>
// Display API is provided via the C++ `DisplayManager` singleton below.
#ifdef __cplusplus
// Expose the C++ DisplayManager so callers can use the class API directly.
//
// Note: The implementation constructs the `SSD1306` display object in-place
// using static storage (no heap allocation). Construct a `DisplayManager` in
// `main()` and pass it by reference to functions that need to update the
// display. This avoids global singletons and makes ownership explicit.
//
// Example:
// int main() {
// stdio_init_all();
// DisplayManager display;
// // pass the display I2C address (common values: 0x3C or 0x3D)
// display.init(0x3C);
// while (true) {
// wait_for_usb_connection();
// run_echo_session(display);
// }
// }
//
// void run_echo_session(DisplayManager &display) {
// display.refresh("> ", nullptr);
// // ...
// }
//
// Forward-declare the SSD1306 type to avoid pulling the full display header into
// every translation unit that includes `display.h`.
namespace pico_ssd1306 { class SSD1306; }
class DisplayManager {
public:
// Initialize the hardware and display.
DisplayManager();
~DisplayManager();
// Initialize the hardware and display. Pass the SSD1306 I2C address (default 0x3C).
void init(uint8_t i2c_addr = 0x3C);
// Refresh the display content. Either pointer may be nullptr.
void refresh(const char *current_input, const char *last_echo);
// Update stored last-echo text used when `last_echo` is not provided to `refresh()`.
void set_last_echo(const char *text);
// Non-copyable
DisplayManager(const DisplayManager &) = delete;
DisplayManager &operator=(const DisplayManager &) = delete;
// Implementation details kept small in the header: pointer to the concrete SSD1306
// type (defined in `pico-ssd1306/ssd1306.h`).
pico_ssd1306::SSD1306 *display_;
char last_echo_[64];
static const size_t LAST_ECHO_VISIBLE_CHARS = 10;
};
#endif
#endif // DISPLAY_H