• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Author: Yevgeniy Kiveisha <yevgeniy.kiveisha@intel.com>
3  * Copyright (c) 2014 Intel Corporation.
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining
6  * a copy of this software and associated documentation files (the
7  * "Software"), to deal in the Software without restriction, including
8  * without limitation the rights to use, copy, modify, merge, publish,
9  * distribute, sublicense, and/or sell copies of the Software, and to
10  * permit persons to whom the Software is furnished to do so, subject to
11  * the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be
14  * included in all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23  */
24 
25 #pragma once
26 
27 #include <string>
28 #include <mraa/i2c.hpp>
29 #include "lcd.h"
30 #include "ssd.h"
31 
32 namespace upm
33 {
34 const uint8_t DISPLAY_CMD_SET_NORMAL_1308 = 0xA6;
35 
36 /**
37  * @library i2clcd
38  * @sensor ssd1308
39  * @comname SSD1308 OLED Display
40  * @altname Grove OLED Display 0.96"
41  * @type display
42  * @man seeed adafruit
43  * @web http://garden.seeedstudio.com/images/4/46/SSD1308_1.0.pdf
44  * @web http://www.seeedstudio.com/wiki/Grove_-_OLED_Display_0.96%22
45  * @con i2c
46  *
47  * @brief API for SSD1308 I2C-controlled OLED displays
48  *
49  * SSD1308 is a 128x64 dot-matrix OLED/PLED segment driver with a
50  * controller. This implementation was tested using the Grove LED 128×64
51  * Display module, which is an OLED monochrome display.
52  *
53  * @image html ssd1308.jpeg
54  * @snippet ssd1308-oled.cxx Interesting
55  */
56 class SSD1308 : public LCD
57 {
58   public:
59     /**
60      * SSD1308 constructor; calls libmraa initialisation functions
61      *
62      * @param bus I2C bus to use
63      * @param address Slave address the LCD is registered on
64      */
65     SSD1308(int bus, int address = 0x3C);
66     /**
67      * SSD1308 destructor
68      */
69     ~SSD1308();
70     /**
71      * Draws an image; see examples/python/make_oled_pic.py for an
72      * explanation of how pixels are mapped to bytes
73      *
74      * @param data Buffer to read
75      * @param bytes Number of bytes to read from the pointer
76      * @return Result of the operation
77      */
78     mraa::Result draw(uint8_t* data, int bytes);
79     /**
80      * Writes a string to the LCD
81      *
82      * @param msg std::string to write to the display; note: only ASCII
83      * characters are supported
84      * @return Result of the operation
85      */
86     mraa::Result write(std::string msg);
87     /**
88      * Sets the cursor to specified coordinates
89      *
90      * @param row Row to set the cursor to
91      * @param column Column to set the cursor to
92      * @return Result of the operation
93      */
94     mraa::Result setCursor(int row, int column);
95     /**
96      * Clears the display of all characters
97      *
98      * @return Result of the operation
99      */
100     mraa::Result clear();
101     /**
102      * Returns to the original coordinates (0,0)
103      *
104      * @return Result of the operation
105      */
106     mraa::Result home();
107 
108   private:
109     mraa::Result writeChar(uint8_t value);
110     mraa::Result setNormalDisplay();
111     mraa::Result setAddressingMode(displayAddressingMode mode);
112 
113     int m_lcd_control_address;
114     mraa::I2c m_i2c_lcd_control;
115 };
116 }
117