Subversion Repositories libOLED

Rev

Rev 7 | Rev 10 | 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
{
9 mjames 20
  BLACK, /* and 0, invert 0 */
21
  WHITE, /* and 0, invert 1 */
7 mjames 22
  OVERLAY, /* and 1, invert 0 */
9 mjames 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 .
9 mjames 43
  void
44
  reset ();
7 mjames 45
 
4 mjames 46
  void
47
  init ();
2 mjames 48
 
6 mjames 49
  /// \brief Clear display to colour
4 mjames 50
  void
6 mjames 51
  clearDisplay (colour_t colour = colour_t::BLACK);
4 mjames 52
  void
53
  invertDisplay (uint8_t i);
54
  void
55
  display ();
2 mjames 56
 
4 mjames 57
  void
58
  startscrollright (uint8_t start, uint8_t stop);
59
  void
60
  startscrollleft (uint8_t start, uint8_t stop);
2 mjames 61
 
4 mjames 62
  void
63
  startscrolldiagright (uint8_t start, uint8_t stop);
64
  void
65
  startscrolldiagleft (uint8_t start, uint8_t stop);
66
  void
67
  stopscroll (void);
2 mjames 68
 
4 mjames 69
  void
70
  dim (uint8_t contrast);
2 mjames 71
 
7 mjames 72
  // set drawing mode
9 mjames 73
  void
74
  setPixelMode (colour_t colour)
75
  {
76
    m_colour = colour;
77
  }
7 mjames 78
 
4 mjames 79
  void
7 mjames 80
  drawPixel (int16_t x, int16_t y, bool pixel);
2 mjames 81
 
4 mjames 82
  void
83
  drawLine (int16_t x1, int16_t y1, int16_t x2, int16_t y2, colour_t color);
2 mjames 84
 
9 mjames 85
  void
86
  drawRectangle (int16_t x1, int16_t y1, int16_t x2, int16_t y2,
87
                 colour_t color);
6 mjames 88
 
9 mjames 89
// position cursor absolute
4 mjames 90
  void
91
  gotoxy (int x, int y)
92
  {
93
    m_cursor_x = x;
94
    m_cursor_y = y;
95
  }
2 mjames 96
 
9 mjames 97
  // position cursor relative
98
  void
99
  moveby (int x, int y)
100
  {
101
    m_cursor_x += x;
102
    m_cursor_y += y;
103
  }
104
 
4 mjames 105
  // pixel to pixel plotting
106
  /// \param font The font to use
107
  /// \param string The characters to plot
108
  /// \param length The length of the string
109
  /// \param colour
110
  void
111
  printString (font_t &font, char const *string, uint16_t length,
9 mjames 112
               colour_t colour = WHITE);
2 mjames 113
 
4 mjames 114
  // scaled plotting
115
  /// \param font The font to use
116
  /// \param string The characters to plot
117
  /// \param length The length of the string
118
  /// \param scale The scale factor is 256/scale so 256 is 1:1, 128 is twice the size
119
  /// \param colour
120
  void
9 mjames 121
  printScaledString (font_t &font, char const *string, uint16_t length,
122
                     uint16_t scale, colour_t colour = WHITE);
2 mjames 123
 
7 mjames 124
  static const uint8_t NO_DECIMAL = 255;
125
 
4 mjames 126
  void
9 mjames 127
  fontDigits (font_t &font, uint8_t digits, uint8_t dp_pos, int val,
128
              colour_t colour = WHITE);
2 mjames 129
 
5 mjames 130
  void
9 mjames 131
  fontSigDigits (font_t &font, uint8_t x, uint8_t y, bool right_justify,
132
                 uint8_t dp_pos, int val, colour_t colour = WHITE);
5 mjames 133
 
4 mjames 134
  int
135
  cursor_x ()
136
  {
137
    return m_cursor_x;
138
  }
139
  ;
2 mjames 140
 
4 mjames 141
  int
142
  cursor_y ()
143
  {
144
    return m_cursor_y;
145
  }
146
  ;
2 mjames 147
 
148
private:
149
 
150
  // set=1 means send data set=0 means send control
4 mjames 151
  virtual void
152
  oledSetCD (uint8_t set) =0;
2 mjames 153
 
4 mjames 154
  virtual void
155
  oledWrite (uint8_t d) =0;
2 mjames 156
 
4 mjames 157
  virtual void
158
  oledReset () = 0;
2 mjames 159
 
4 mjames 160
  virtual void
161
  oledWrite (uint8_t *buff, uint8_t len) = 0;
2 mjames 162
 
9 mjames 163
  uint8_t
164
  formatNum (char *buff, uint8_t siz, uint8_t digits, uint8_t dp_pos, int val);
5 mjames 165
 
2 mjames 166
  int const m_width; // pixel width
167
  int const m_height; // pixel height
168
  int const m_ramwidth; // OLED controller ram pixel width
169
 
170
  int m_cursor_x;
4 mjames 171
  int m_cursor_y;
172
  int m_rotation;
2 mjames 173
 
7 mjames 174
  // currently selected colour mode
175
  colour_t m_colour;
176
 
4 mjames 177
  uint8_t *const m_data;
2 mjames 178
 
4 mjames 179
};