Subversion Repositories libOLED

Rev

Rev 6 | Rev 9 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 mjames 1
/*
2
 * displayclass.H
3
 *
4
 *  Created on: 31 Oct 2020
5
 *      Author: mike
6
 */
7
 
8
#pragma once
9
#include <cstdint>
3 mjames 10
#include "libOLED/fontclass.H"
2 mjames 11
 
4 mjames 12
inline int constexpr
13
dataSize (int const width, int const height)
2 mjames 14
{
4 mjames 15
  return (width * height / 8);
2 mjames 16
}
17
 
18
enum colour_t
19
{
7 mjames 20
  BLACK,   /* and 0, invert 0 */
21
  WHITE,   /* and 0, invert 1 */
22
  OVERLAY, /* and 1, invert 0 */
23
  INVERT,  /* and 1, invert 1 */
2 mjames 24
};
25
 
26
class display_t
27
{
28
public:
4 mjames 29
  display_t (int const width, int const height, int const ramwidth,
30
             uint8_t *const data);
2 mjames 31
 
4 mjames 32
  virtual
33
  ~display_t ();
2 mjames 34
 
4 mjames 35
  uint8_t
36
  getRotation ();
37
  int16_t
38
  width ();
39
  int16_t
40
  height ();
2 mjames 41
 
7 mjames 42
  // common hardware reset .
43
  void reset();
44
 
4 mjames 45
  void
46
  init ();
2 mjames 47
 
6 mjames 48
  /// \brief Clear display to colour
4 mjames 49
  void
6 mjames 50
  clearDisplay (colour_t colour = colour_t::BLACK);
4 mjames 51
  void
52
  invertDisplay (uint8_t i);
53
  void
54
  display ();
2 mjames 55
 
4 mjames 56
  void
57
  startscrollright (uint8_t start, uint8_t stop);
58
  void
59
  startscrollleft (uint8_t start, uint8_t stop);
2 mjames 60
 
4 mjames 61
  void
62
  startscrolldiagright (uint8_t start, uint8_t stop);
63
  void
64
  startscrolldiagleft (uint8_t start, uint8_t stop);
65
  void
66
  stopscroll (void);
2 mjames 67
 
4 mjames 68
  void
69
  dim (uint8_t contrast);
2 mjames 70
 
7 mjames 71
  // set drawing mode
72
  void setPixelMode(colour_t colour)
73
  { m_colour = colour; }
74
 
75
 
4 mjames 76
  void
7 mjames 77
  drawPixel (int16_t x, int16_t y, bool pixel);
2 mjames 78
 
4 mjames 79
  void
80
  drawLine (int16_t x1, int16_t y1, int16_t x2, int16_t y2, colour_t color);
2 mjames 81
 
6 mjames 82
  void drawRectangle (int16_t x1, int16_t y1, int16_t x2, int16_t y2, colour_t color);
83
 
84
 
4 mjames 85
  void
86
  gotoxy (int x, int y)
87
  {
88
    m_cursor_x = x;
89
    m_cursor_y = y;
90
  }
91
  ;
2 mjames 92
 
4 mjames 93
  // pixel to pixel plotting
94
  /// \param font The font to use
95
  /// \param string The characters to plot
96
  /// \param length The length of the string
97
  /// \param colour
98
  void
99
  printString (font_t &font, char const *string, uint16_t length,
7 mjames 100
               colour_t colour=WHITE);
2 mjames 101
 
4 mjames 102
  // scaled plotting
103
  /// \param font The font to use
104
  /// \param string The characters to plot
105
  /// \param length The length of the string
106
  /// \param scale The scale factor is 256/scale so 256 is 1:1, 128 is twice the size
107
  /// \param colour
108
  void
109
  printScaledString (font_t &font, char const *string,
110
                                  uint16_t length, uint16_t scale,
7 mjames 111
                                  colour_t colour=WHITE);
2 mjames 112
 
7 mjames 113
 
114
  static const uint8_t NO_DECIMAL = 255;
115
 
4 mjames 116
  void
7 mjames 117
  fontDigits (font_t &font, uint8_t digits, uint8_t dp_pos, int val, colour_t colour=WHITE);
2 mjames 118
 
5 mjames 119
  void
120
  fontSigDigits (font_t &font,uint8_t x, uint8_t y, bool right_justify, uint8_t dp_pos,
7 mjames 121
                 int val, colour_t colour = WHITE);
5 mjames 122
 
4 mjames 123
  int
124
  cursor_x ()
125
  {
126
    return m_cursor_x;
127
  }
128
  ;
2 mjames 129
 
4 mjames 130
  int
131
  cursor_y ()
132
  {
133
    return m_cursor_y;
134
  }
135
  ;
2 mjames 136
 
137
private:
138
 
139
  // set=1 means send data set=0 means send control
4 mjames 140
  virtual void
141
  oledSetCD (uint8_t set) =0;
2 mjames 142
 
4 mjames 143
  virtual void
144
  oledWrite (uint8_t d) =0;
2 mjames 145
 
4 mjames 146
  virtual void
147
  oledReset () = 0;
2 mjames 148
 
4 mjames 149
  virtual void
150
  oledWrite (uint8_t *buff, uint8_t len) = 0;
2 mjames 151
 
5 mjames 152
 
153
  uint8_t formatNum (char *buff, uint8_t siz, uint8_t digits, uint8_t dp_pos, int val);
154
 
155
 
2 mjames 156
  int const m_width; // pixel width
157
  int const m_height; // pixel height
158
  int const m_ramwidth; // OLED controller ram pixel width
159
 
160
  int m_cursor_x;
4 mjames 161
  int m_cursor_y;
162
  int m_rotation;
2 mjames 163
 
7 mjames 164
  // currently selected colour mode
165
  colour_t m_colour;
166
 
4 mjames 167
  uint8_t *const m_data;
2 mjames 168
 
4 mjames 169
};