47 lines
1.5 KiB
C++
47 lines
1.5 KiB
C++
#ifndef LCDDISPLAY_HPP
|
|
#define LCDDISPLAY_HPP
|
|
|
|
#define LCD_LINES 4
|
|
#define LCD_COLS 40
|
|
|
|
#include <array>
|
|
#include <cstdint>
|
|
#include <string>
|
|
|
|
class LCDDisplay {
|
|
private:
|
|
int _lcd = -1;
|
|
std::string _dev;
|
|
std::array<char, LCD_LINES * LCD_COLS + 8> writebuf{}; // 4x40 chars + 2x4 setcursor commands
|
|
static constexpr bool dualDisp = (LCD_LINES * LCD_COLS > 80); // is it dual display device or not, evauluated from the size at compile time
|
|
|
|
void open(bool reopen = false);
|
|
void write(const uint8_t* cmdbuf, uint8_t len);
|
|
void close();
|
|
|
|
// we avoid using these, use buffer (even if these are faster for small writes, perhaps a rewrite is in order)
|
|
void writeStr(const std::string& str);
|
|
void writeStr(uint8_t row, uint8_t col, const std::string& str);
|
|
|
|
public:
|
|
explicit LCDDisplay(const std::string& dev, uint32_t baud = 0010002); // from termios-baud.h, B115200
|
|
~LCDDisplay();
|
|
|
|
void clear();
|
|
void setContrast(uint8_t contrast);
|
|
void setBacklight(bool enabled);
|
|
void setBacklight(uint8_t brightness);
|
|
void setCursor(uint8_t row, uint8_t col);
|
|
void setCustomChar(uint8_t index, std::array<uint8_t, 8> cchar);
|
|
|
|
void writeBuf(uint8_t row, uint8_t col, const std::string& str);
|
|
void clearBuf();
|
|
void flushBuf();
|
|
char bar(uint8_t char_id, double value);
|
|
|
|
// returns custom char no. c, small enough to define in header
|
|
static constexpr char cc(const uint8_t c) { return static_cast<char>(c % 8); }
|
|
};
|
|
|
|
#endif
|