77 lines
1.7 KiB
C++
77 lines
1.7 KiB
C++
/**
|
|
* @file displayWrapper.h
|
|
* @author Alexander Klein (alex@kleiax.de)
|
|
* @brief Contains the LcdWrapper class
|
|
* @version 0.1
|
|
* @date 2023-01-08
|
|
*
|
|
* @copyright Copyright (c) 2023
|
|
*
|
|
*/
|
|
|
|
#ifndef LCD_WRAPPER_H
|
|
#define LCD_WRAPPER_H
|
|
|
|
#include <iostream>
|
|
#include <LiquidCrystal_I2C.h>
|
|
#include <displayWrapper.h>
|
|
#include <component.h>
|
|
|
|
typedef void (*LcdWrapperCallback)(const char data[][16], uint8_t lines, uint8_t rows);
|
|
/**
|
|
* @brief A class for the Menu class to print information
|
|
*
|
|
* This class inherits the DisplayWrapper class as a interface.
|
|
* The class takes the information to print from any thread. The
|
|
* loop function has to be called to print the data.
|
|
*/
|
|
class LcdWrapper : public DisplayWrapper, public Component
|
|
{
|
|
public:
|
|
/**
|
|
* @brief Construct a new Lcd Wrapper object
|
|
*
|
|
* @param lcd
|
|
*/
|
|
LcdWrapper(LiquidCrystal_I2C *lcd);
|
|
|
|
/**
|
|
* @brief Empty the buffer
|
|
*
|
|
*/
|
|
void clear() override;
|
|
|
|
/**
|
|
* @brief Set point where data to be saved
|
|
*
|
|
* @param row
|
|
* @param line
|
|
*/
|
|
void setCursor(uint8_t row, uint8_t line) override;
|
|
void setCallback(LcdWrapperCallback callback) { this->callback = callback; }
|
|
|
|
/**
|
|
* @brief Save the data to be printed
|
|
*
|
|
* @param str
|
|
*/
|
|
void print(const char *str) override;
|
|
|
|
static constexpr uint8_t totalRows = 16;
|
|
static constexpr uint8_t totalLines = 2;
|
|
|
|
private:
|
|
void run() override;
|
|
|
|
LiquidCrystal_I2C *lcd;
|
|
LcdWrapperCallback callback = nullptr;
|
|
char data[LcdWrapper::totalLines][LcdWrapper::totalRows];
|
|
|
|
uint8_t cursorRow = 0;
|
|
uint8_t cursorLine = 0;
|
|
|
|
bool changed = false;
|
|
};
|
|
|
|
#endif // DISPLAY_WRAPPER_H
|