SegLCDLib
Loading...
Searching...
No Matches
SegLCDLib.h
Go to the documentation of this file.
1#ifndef SEGLCDLIB_H
2#define SEGLCDLIB_H
3
4#include <stddef.h>
5
6#include "SegBacklight.h"
7
8#ifdef ARDUINO
9#include <Arduino.h>
10#include "Print.h"
11#endif
12
27
31typedef enum {
33 MODE_BIAS_12 = 1
35
42#ifdef ARDUINO
43class SegLCDLib : public Print {
44#else
45class SegLCDLib {
46#endif
47 public:
55
59 SegLCDLib() = default;
60
64 virtual ~SegLCDLib();
65
72 SegLCDLib(const SegLCDLib&) = delete;
73 SegLCDLib& operator=(const SegLCDLib&) = delete;
74
79 // ---------------------------
80 // LCD API 1.0 Mandatory part
81 // ---------------------------
82 // Spec: https://playground.arduino.cc/Code/LCDAPI/
83
87 virtual void init();
88
92 virtual void clear();
93
97 void home();
98
111 virtual void setCursor(uint8_t row, uint8_t col);
112
113 virtual size_t write(uint8_t) { return 0; };
114
124 size_t write(const char *str);
125
133 size_t write(const char *buffer, size_t size);
134
140 virtual void command(uint8_t command) = 0;
141 #ifdef ARDUINO
142 using Print::write;
143 #endif
144
145 // --------------------------
146 // LCD API 1.0 Optional part
147 // --------------------------
151 virtual void on() = 0;
152
156 virtual void off() = 0;
157
166 void initBacklight(SegBacklight *backlight, BacklightMode backlightMode = BACKLIGHT_DIGITAL);
167
173 virtual void setBacklight(bool state);
174
180 virtual void setBacklight(int brightness);
181
182 // ----------------------
183 // Flush/Autoflush API
184 // ----------------------
185
212 void setAutoFlush(bool enable);
213
219 bool getAutoFlush() const;
220
232 virtual void flush();
233
252 virtual void flush(uint8_t startAddr, uint8_t length);
253
259 const uint8_t* getRamBuffer() const;
260
266 size_t getRamBufferSize() const;
267
268 // ----------------------
269 // SegLCDLib specific part
270 // ----------------------
271
272 protected:
276 bool _autoFlush = true;
277
282
287
292
303 uint8_t _displayFlags = 0;
304
311 static constexpr uint8_t FLAG_PENDING_DOT = 0x80;
312
317 void _setFlag(uint8_t mask);
318
323 void _clearFlag(uint8_t mask);
324
330 bool _isFlagSet(uint8_t mask) const;
331
335 void _clearAllFlags();
336
348 bool _dotWrite(uint8_t ch, int8_t minCol, int8_t maxCol, int8_t ramOffset);
349
358 void _dotClearCur(int8_t minCol, int8_t maxCol);
359
369 void _colonClearIfNotFlagged(uint8_t ch, uint8_t colonCol, uint8_t colonFlag);
370
377 virtual void _setDecimal(uint8_t, uint8_t, bool) { }
378
384 virtual void _setColon(uint8_t, uint8_t, bool) { }
385
389 uint8_t* _ramBuffer = nullptr;
390
394 size_t _ramBufferSize = 0;
395
401 void _allocateBuffer(size_t size);
402
413 void _writeRamMasked(uint8_t data, uint8_t address, uint8_t mask = 0xFF);
414
421 void _writeRam(uint8_t data, uint8_t address = 0);
422
430 virtual void _writeRam(uint8_t *data, size_t length, uint8_t address) = 0;
431
435 uint8_t _get_char_value(char ch);
436
440 uint16_t _get_16char_value(char ch);
441
442
446 uint8_t _cursorRow = 0;
447
451 uint8_t _cursorCol = 0;
452};
453
454#endif
ModeBias
Bias mode used by LCD controller.
Definition SegLCDLib.h:31
@ MODE_BIAS_13
1/3 bias
Definition SegLCDLib.h:32
@ MODE_BIAS_12
1/2 bias
Definition SegLCDLib.h:33
ModeDrive
Drive mode used by LCD controller.
Definition SegLCDLib.h:21
@ MODE_DRIVE_12
1/2 multiplexing
Definition SegLCDLib.h:23
@ MODE_DRIVE_13
1/3 multiplexing
Definition SegLCDLib.h:24
@ MODE_DRIVE_14
1/4 multiplexing
Definition SegLCDLib.h:25
@ MODE_DRIVE_STATIC
Static drive (1/1 duty)
Definition SegLCDLib.h:22
Abstract backlight control.
Definition SegBacklight.h:11
Abstract base class for LCD segment display drivers.
Definition SegLCDLib.h:45
SegLCDLib & operator=(const SegLCDLib &)=delete
virtual void command(uint8_t command)=0
Send RAW command to controller.
SegBacklight * _backlight
Backlight implementation (nullptr if disabled)
Definition SegLCDLib.h:281
void _writeRamMasked(uint8_t data, uint8_t address, uint8_t mask=0xFF)
Write to display RAM with nibble-aware masking support.
Definition SegLCDLib.cpp:38
void initBacklight(SegBacklight *backlight, BacklightMode backlightMode=BACKLIGHT_DIGITAL)
Initialize backlight control.
Definition SegLCDLib.cpp:97
static constexpr uint8_t FLAG_PENDING_DOT
Common flag for decimal handling when RAM offset is 0.
Definition SegLCDLib.h:311
virtual ~SegLCDLib()
Virtual destructor to ensure proper cleanup in derived classes.
Definition SegLCDLib.cpp:8
void _setFlag(uint8_t mask)
Set a specific flag bit.
Definition SegLCDLib.cpp:347
virtual void flush()
Flush all buffered changes to the display.
Definition SegLCDLib.cpp:322
virtual void _setColon(uint8_t, uint8_t, bool)
Virtual method for setting colon.
Definition SegLCDLib.h:384
uint8_t _cursorCol
Current Column.
Definition SegLCDLib.h:451
void _colonClearIfNotFlagged(uint8_t ch, uint8_t colonCol, uint8_t colonFlag)
Clear colon if its flag is not set.
Definition SegLCDLib.cpp:383
virtual void setBacklight(bool state)
Set backlight state (on/off).
Definition SegLCDLib.cpp:109
SegLCDLib()=default
Default constructor.
uint8_t _get_char_value(char ch)
Helper method to convert a character to its segment representation.
Definition SegLCDLib.cpp:129
uint16_t _get_16char_value(char ch)
Helper method to convert a character to its 16-segment representation.
Definition SegLCDLib.cpp:215
void _writeRam(uint8_t data, uint8_t address=0)
Low-level method to write a single byte to display RAM.
Definition SegLCDLib.cpp:389
virtual void init()
Logical display sections that can be targeted by higher-level rendering logic.
Definition SegLCDLib.cpp:21
size_t getRamBufferSize() const
Get size of internal RAM buffer in bytes.
Definition SegLCDLib.cpp:318
bool getAutoFlush() const
Get current autoflush state.
Definition SegLCDLib.cpp:310
virtual void _writeRam(uint8_t *data, size_t length, uint8_t address)=0
Low-level method to write a data buffer to display RAM.
const uint8_t * getRamBuffer() const
Get pointer to internal RAM buffer (read-only).
Definition SegLCDLib.cpp:314
size_t _ramBufferSize
Size of allocated RAM buffer in bytes.
Definition SegLCDLib.h:394
uint8_t _backlightBrightness
Cached backlight brightness.
Definition SegLCDLib.h:291
virtual void on()=0
Turn the display on.
bool _dotWrite(uint8_t ch, int8_t minCol, int8_t maxCol, int8_t ramOffset)
Write decimal point.
Definition SegLCDLib.cpp:363
SegLCDLib(const SegLCDLib &)=delete
Disable copying to keep the RAM buffer uniquely owned.
virtual void _setDecimal(uint8_t, uint8_t, bool)
Virtual method for setting decimal point.
Definition SegLCDLib.h:377
void setAutoFlush(bool enable)
Enable or disable autoflush mode.
Definition SegLCDLib.cpp:306
void _dotClearCur(int8_t minCol, int8_t maxCol)
Clear current decimal (overwrite).
Definition SegLCDLib.cpp:377
virtual void off()=0
Turn the display off.
virtual void setCursor(uint8_t row, uint8_t col)
Set cursor on exact digit.
Definition SegLCDLib.cpp:92
virtual size_t write(uint8_t)
Definition SegLCDLib.h:113
bool _autoFlush
Autoflush mode enabled flag (default: true for LCD API 1.0 compatibility).
Definition SegLCDLib.h:276
void home()
Set cursor to 0, 0 without clear display.
Definition SegLCDLib.cpp:88
uint8_t _displayFlags
Generic flag storage for display-specific state tracking.
Definition SegLCDLib.h:303
virtual void clear()
Clear all visible segments on the display.
Definition SegLCDLib.cpp:80
BacklightMode
Backlight mode for GPIO control.
Definition SegLCDLib.h:51
@ BACKLIGHT_PWM
PWM brightness control (0-255)
Definition SegLCDLib.h:53
@ BACKLIGHT_DIGITAL
Digital on/off mode.
Definition SegLCDLib.h:52
void _clearAllFlags()
Clear all flags.
Definition SegLCDLib.cpp:359
void _allocateBuffer(size_t size)
Allocate RAM buffer for display data.
Definition SegLCDLib.cpp:15
uint8_t _cursorRow
Current Row.
Definition SegLCDLib.h:446
bool _isFlagSet(uint8_t mask) const
Check if a specific flag bit is set.
Definition SegLCDLib.cpp:355
void _clearFlag(uint8_t mask)
Clear a specific flag bit.
Definition SegLCDLib.cpp:351
uint8_t * _ramBuffer
Dynamic RAM buffer for display data (allocated by derived classes).
Definition SegLCDLib.h:389
BacklightMode _backlightMode
Backlight mode (DIGITAL or PWM)
Definition SegLCDLib.h:286