/*
* displayclass.H
*
* Created on: 31 Oct 2020
* Author: mike
*/
#pragma once
#include <cstdint>
#include "libOLED/fontclass.H"
inline int constexpr
dataSize (int const width, int const height)
{
return (width * height / 8);
}
enum colour_t
{
BLACK, WHITE, INVERT
};
class display_t
{
public:
display_t (int const width, int const height, int const ramwidth,
uint8_t *const data);
virtual
~display_t ();
uint8_t
getRotation ();
int16_t
width ();
int16_t
height ();
void
init ();
void
clearDisplay ();
void
invertDisplay (uint8_t i);
void
display ();
void
startscrollright (uint8_t start, uint8_t stop);
void
startscrollleft (uint8_t start, uint8_t stop);
void
startscrolldiagright (uint8_t start, uint8_t stop);
void
startscrolldiagleft (uint8_t start, uint8_t stop);
void
stopscroll (void);
void
dim (uint8_t contrast);
void
drawPixel (int16_t x, int16_t y, colour_t color);
void
drawLine (int16_t x1, int16_t y1, int16_t x2, int16_t y2, colour_t color);
void
gotoxy (int x, int y)
{
m_cursor_x = x;
m_cursor_y = y;
}
;
// pixel to pixel plotting
/// \param font The font to use
/// \param string The characters to plot
/// \param length The length of the string
/// \param colour
void
printString (font_t &font, char const *string, uint16_t length,
colour_t colour);
// scaled plotting
/// \param font The font to use
/// \param string The characters to plot
/// \param length The length of the string
/// \param scale The scale factor is 256/scale so 256 is 1:1, 128 is twice the size
/// \param colour
void
printScaledString (font_t &font, char const *string,
uint16_t length, uint16_t scale,
colour_t colour);
void
fontDigits (font_t &font, uint8_t digits, uint8_t dp_pos, int val);
void
fontSigDigits (font_t &font,uint8_t x, uint8_t y, bool right_justify, uint8_t dp_pos,
int val);
int
cursor_x ()
{
return m_cursor_x;
}
;
int
cursor_y ()
{
return m_cursor_y;
}
;
private:
// set=1 means send data set=0 means send control
virtual void
oledSetCD (uint8_t set) =0;
virtual void
oledWrite (uint8_t d) =0;
virtual void
oledReset () = 0;
virtual void
oledWrite (uint8_t *buff, uint8_t len) = 0;
uint8_t formatNum (char *buff, uint8_t siz, uint8_t digits, uint8_t dp_pos, int val);
int const m_width; // pixel width
int const m_height; // pixel height
int const m_ramwidth; // OLED controller ram pixel width
int m_cursor_x;
int m_cursor_y;
int m_rotation;
uint8_t *const m_data;
};