upm  0.4.1
Sensor/Actuator repository for libmraa (v0.8.0)
eboled.h
1 /*
2  * Author: Jon Trulson <jtrulson@ics.com>
3  * Copyright (c) 2015 Intel Corporation.
4  *
5  * Author: Tyler Gibson <tgibson@microsoft.com>
6  * Copyright (c) 2015 Microsoft Corporation.
7  *
8  * Credits to Adafruit.
9  * Based on Adafruit ST7735 library, see original license in license.txt file.
10  *
11  * Permission is hereby granted, free of charge, to any person obtaining
12  * a copy of this software and associated documentation files (the
13  * "Software"), to deal in the Software without restriction, including
14  * without limitation the rights to use, copy, modify, merge, publish,
15  * distribute, sublicense, and/or sell copies of the Software, and to
16  * permit persons to whom the Software is furnished to do so, subject to
17  * the following conditions:
18  *
19  * The above copyright notice and this permission notice shall be
20  * included in all copies or substantial portions of the Software.
21  *
22  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29  */
30 #pragma once
31 
32 #include <string>
33 #include <mraa/spi.hpp>
34 
35 #include <mraa/gpio.hpp>
36 
37 #include "lcd.h"
38 #include "ssd.h"
39 
40 #define EBOLED_DEFAULT_SPI_BUS 0
41 #define EBOLED_DEFAULT_CD 36
42 #define EBOLED_DEFAULT_RESET 48
43 
44 #define swap(a, b) { uint8_t t = a; a = b; b = t; }
45 
46 namespace upm
47 {
72  const uint8_t COLOR_WHITE = 0x01;
73  const uint8_t COLOR_BLACK = 0x00;
74  const uint8_t COLOR_XOR = 0x02;
75  const uint8_t OLED_WIDTH = 0x40; // 64 pixels
76  const uint8_t VERT_COLUMNS = 0x20; // half width for hi/lo 16bit writes.
77  const uint8_t OLED_HEIGHT = 0x30; // 48 pixels
78  const int BUFFER_SIZE = 192;
79 
80  class EBOLED : public LCD
81  {
82  // SSD commands
83  typedef enum {
84  CMD_SETLOWCOLUMN = 0x00,
85  CMD_EXTERNALVCC = 0x01,
86  CMD_SWITCHCAPVCC = 0x02,
87  CMD_SETHIGHCOLUMN = 0x10,
88  CMD_MEMORYADDRMODE = 0x20,
89  CMD_SETCOLUMNADDRESS = 0x21,
90  CMD_SETPAGEADDRESS = 0x22,
91  CMD_SETSTARTLINE = 0x40, // 0x40 - 0x7f
92  CMD_SETCONTRAST = 0x81,
93  CMD_CHARGEPUMP = 0x8d,
94  CMD_SEGREMAP = 0xa0,
95  CMD_DISPLAYALLONRESUME = 0xa4,
96  CMD_DISPLAYALLON = 0xa5,
97  CMD_NORMALDISPLAY = 0xa6,
98  CMD_INVERTDISPLAY = 0xa7,
99  CMD_SETMULTIPLEX = 0xa8,
100  CMD_DISPLAYOFF = 0xae,
101  CMD_DISPLAYON = 0xaf,
102  CMD_SETPAGESTARTADDR = 0xb0, // 0xb0-0xb7
103  CMD_COMSCANINC = 0xc0,
104  CMD_COMSCANDEC = 0xc8,
105  CMD_SETDISPLAYOFFSET = 0xd3,
106  CMD_SETDISPLAYCLOCKDIV = 0xd5,
107  CMD_SETPRECHARGE = 0xd9,
108  CMD_SETCOMPINS = 0xda,
109  CMD_SETVCOMDESELECT = 0xdb
110  } SSD_CMDS_T;
111 
112  public:
122  EBOLED(int spi=EBOLED_DEFAULT_SPI_BUS, int CD=EBOLED_DEFAULT_CD,
123  int reset=EBOLED_DEFAULT_RESET);
124 
128  ~EBOLED();
129 
138  mraa::Result refresh();
139 
147  mraa::Result write(std::string msg);
148 
157  mraa::Result setCursor (int row, int column);
158 
164  void setTextColor (uint8_t textColor);
165 
171  void setTextSize (uint8_t size);
172 
178  void setTextWrap (uint8_t wrap);
179 
190  void drawChar (uint8_t x, uint8_t y, uint8_t data, uint8_t color, uint8_t size);
191 
197  mraa::Result clear();
198 
199  void clearScreenBuffer();
200 
206  mraa::Result home();
207 
216  void drawPixel (int8_t x, int8_t y, uint8_t color=COLOR_WHITE);
217 
227  void drawLine (int8_t x0, int8_t y0, int8_t x1, int8_t y1, uint8_t color = COLOR_WHITE);
228 
237  void drawLineHorizontal (int8_t x, int8_t y, uint8_t width, uint8_t color = COLOR_WHITE);
238 
247  void drawLineVertical (int8_t x, int8_t y, uint8_t height, uint8_t color = COLOR_WHITE);
248 
258  void drawRectangle (int8_t x, int8_t y, uint8_t width, uint8_t height, uint8_t color = COLOR_WHITE);
259 
270  void drawRoundedRectangle(int8_t x, int8_t y, int8_t width, int8_t height, int16_t radius, uint8_t color);
271 
281  void drawRectangleFilled (int8_t x, int8_t y, uint8_t width, uint8_t height, uint8_t color = COLOR_WHITE);
282 
294  void drawTriangle (int8_t x0, int8_t y0, int8_t x1, int8_t y1, int8_t x2, int8_t y2, uint8_t color = COLOR_WHITE);
295 
307  void drawTriangleFilled ( int8_t x0, int8_t y0, int8_t x1, int8_t y1, int8_t x2, int8_t y2, uint8_t color);
308 
317  void drawCircle (int16_t x0, int16_t y0, int16_t radius, uint8_t color = COLOR_WHITE);
318 
328  void drawRoundCorners( int8_t x0, int8_t y0, int16_t radius, uint8_t cornername, uint8_t color);
329 
338  void drawCircleFilled(int8_t x0, int8_t y0, int16_t radius, uint8_t color);
339 
349  void drawRoundedCornersFilled(int8_t x0, int8_t y0, int16_t radius, uint8_t cornername, int16_t delta, uint8_t color);
350 
356  void fillScreen (uint8_t color=COLOR_WHITE);
357 
358 
359  protected:
360  mraa::Result command(uint8_t cmd);
361  mraa::Result data(uint16_t data);
362  mraa::Result writeChar(uint8_t value);
363  mraa::Result setAddressingMode(displayAddressingMode mode);
364 
365  private:
366  mraa::Gpio m_gpioCD; // command(0)/data(1)
367  mraa::Gpio m_gpioRST; // reset pin
368 
369  mraa::Spi m_spi;
370 
371  uint8_t m_cursorX;
372  uint8_t m_cursorY;
373  uint8_t m_textSize;
374  uint8_t m_textColor;
375  uint8_t m_textWrap;
376  };
377 }
void setTextWrap(uint8_t wrap)
Definition: eboled.cxx:176
mraa::Result write(std::string msg)
Definition: eboled.cxx:131
mraa::Result clear()
Definition: eboled.cxx:214
void drawTriangleFilled(int8_t x0, int8_t y0, int8_t x1, int8_t y1, int8_t x2, int8_t y2, uint8_t color)
Definition: eboled.cxx:353
void drawLineHorizontal(int8_t x, int8_t y, uint8_t width, uint8_t color=COLOR_WHITE)
Definition: eboled.cxx:303
void drawLine(int8_t x0, int8_t y0, int8_t x1, int8_t y1, uint8_t color=COLOR_WHITE)
Definition: eboled.cxx:262
void drawCircleFilled(int8_t x0, int8_t y0, int16_t radius, uint8_t color)
Definition: eboled.cxx:501
void drawCircle(int16_t x0, int16_t y0, int16_t radius, uint8_t color=COLOR_WHITE)
Definition: eboled.cxx:429
void setTextColor(uint8_t textColor)
Definition: eboled.cxx:168
mraa::Result setCursor(int row, int column)
Definition: eboled.cxx:162
void drawPixel(int8_t x, int8_t y, uint8_t color=COLOR_WHITE)
Definition: eboled.cxx:234
mraa::Result refresh()
Definition: eboled.cxx:116
Definition: a110x.h:33
~EBOLED()
Definition: eboled.cxx:111
void drawRectangleFilled(int8_t x, int8_t y, uint8_t width, uint8_t height, uint8_t color=COLOR_WHITE)
Definition: eboled.cxx:339
Definition: lcd.h:37
void drawChar(uint8_t x, uint8_t y, uint8_t data, uint8_t color, uint8_t size)
Definition: eboled.cxx:180
void drawRectangle(int8_t x, int8_t y, uint8_t width, uint8_t height, uint8_t color=COLOR_WHITE)
Definition: eboled.cxx:313
void drawRoundedCornersFilled(int8_t x0, int8_t y0, int16_t radius, uint8_t cornername, int16_t delta, uint8_t color)
Definition: eboled.cxx:506
Definition: eboled.h:80
void fillScreen(uint8_t color=COLOR_WHITE)
Definition: eboled.cxx:535
void drawLineVertical(int8_t x, int8_t y, uint8_t height, uint8_t color=COLOR_WHITE)
Definition: eboled.cxx:308
void drawTriangle(int8_t x0, int8_t y0, int8_t x1, int8_t y1, int8_t x2, int8_t y2, uint8_t color=COLOR_WHITE)
Definition: eboled.cxx:346
const uint8_t COLOR_WHITE
API for EBOLED spi controlled OLED display.
Definition: eboled.h:72
void drawRoundCorners(int8_t x0, int8_t y0, int16_t radius, uint8_t cornername, uint8_t color)
Definition: eboled.cxx:466
void drawRoundedRectangle(int8_t x, int8_t y, int8_t width, int8_t height, int16_t radius, uint8_t color)
Definition: eboled.cxx:326
mraa::Result home()
Definition: eboled.cxx:229
EBOLED(int spi=EBOLED_DEFAULT_SPI_BUS, int CD=EBOLED_DEFAULT_CD, int reset=EBOLED_DEFAULT_RESET)
Definition: eboled.cxx:37
void setTextSize(uint8_t size)
Definition: eboled.cxx:172