/*
* 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;};
void printString(font_t & font, char const * string, uint16_t length, colour_t colour);
void printChar (font_t &font, char c, colour_t colour);
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;
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;
};