diff options
author | Mohammed Habibulla <moch@google.com> | 2016-07-15 20:44:52 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2016-07-15 20:44:52 +0000 |
commit | 94b0add192f544ef43d3a9b1c3e7f223dd8f35fd (patch) | |
tree | d1c9bce90c2dd04239da9a4f45b96088fd2c0f46 /peripheral/libupm/src/lcd/ssd1306.h | |
parent | cb9e0b2f53f8150f8a9786ffe6ffe7d622e247fe (diff) | |
parent | c5138e9c8d776e9c7a12d67945cebc674377297d (diff) | |
download | intel-94b0add192f544ef43d3a9b1c3e7f223dd8f35fd.tar.gz |
Revert \"libupm: sync with upstream (SHA1: 1849e22)\"
am: c5138e9c8d
Change-Id: I9a580048d451c0186886026a89d44abee9771c08
Diffstat (limited to 'peripheral/libupm/src/lcd/ssd1306.h')
-rw-r--r-- | peripheral/libupm/src/lcd/ssd1306.h | 230 |
1 files changed, 230 insertions, 0 deletions
diff --git a/peripheral/libupm/src/lcd/ssd1306.h b/peripheral/libupm/src/lcd/ssd1306.h new file mode 100644 index 0000000..e1fbc46 --- /dev/null +++ b/peripheral/libupm/src/lcd/ssd1306.h @@ -0,0 +1,230 @@ +/* + * Author: Marc Graham <marc@m2ag.net> + * Copyright (c) 2015 Intel Corporation + * + * Adapted from ssd1308 library. + * Author: Yevgeniy Kiveisha <yevgeniy.kiveisha@intel.com> + * Copyright (c) 2014 Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#pragma once + +#include <string> +#include <mraa/i2c.hpp> +#include "lcd.h" +#include "ssd.h" + +namespace upm +{ +const uint8_t DISPLAY_CMD_SET_NORMAL_1306 = 0xA6; +const uint8_t SSD1306_SETCONTRAST = 0x81; +const uint8_t SSD1306_DISPLAYALLON_RESUME =0xA4; +const uint8_t SSD1306_DISPLAYALLON = 0xA5; +const uint8_t DISPLAY_CMD_SET_INVERT_1306 = 0xA7; + +const uint8_t SSD1306_SETDISPLAYOFFSET =0xD3; +const uint8_t SSD1306_SETCOMPINS = 0xDA; + +const uint8_t SSD1306_SETVCOMDETECT = 0xDB; + +const uint8_t SSD1306_SETDISPLAYCLOCKDIV = 0xD5; +const uint8_t SSD1306_SETPRECHARGE = 0xD9; + +const uint8_t SSD1306_SETMULTIPLEX = 0xA8; + +const uint8_t SSD1306_SETLOWCOLUM = 0x00; +const uint8_t SSD1306_SETHIGHCOLUMN = 0x10; + +const uint8_t SSD1306_SETSTARTLINE = 0x40; + +const uint8_t SSD1306_MEMORYMODE = 0x20; +const uint8_t SSD1306_COLUMNADDR = 0x21; +const uint8_t SSD1306_PAGEADDR = 0x22; + +const uint8_t SSD1306_COMSCANINC = 0xC0; +const uint8_t SSD1306_COMSCANDEC = 0xC8; + +const uint8_t SSD1306_SEGREMAP = 0xA0; + +const uint8_t SSD1306_CHARGEPUMP = 0x8D; + +const uint8_t SSD1306_EXTERNALVCC = 0x1; +const uint8_t SSD1306_SWITCHCAPVCC = 0x2; + +// Scrolling const uint8_t s +const uint8_t SSD1306_ACTIVATE_SCROLL = 0x2F; +const uint8_t SSD1306_DEACTIVATE_SCROLL = 0x2E; +const uint8_t SSD1306_SET_VERTICAL_SCROLL_AREA = 0xA3; +const uint8_t SSD1306_RIGHT_HORIZONTAL_SCROLL = 0x26; +const uint8_t SSD1306_LEFT_HORIZONTAL_SCROLL = 0x27; +const uint8_t SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL = 0x29; +const uint8_t SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL = 0x2A; + +const uint8_t SSD1306_BLACK = 0; +const uint8_t SSD1306_WHITE = 1; +const uint8_t SSD1306_LCDWIDTH = 128; +const uint8_t SSD1306_LCDHEIGHT = 64; + +/** + * @library i2clcd + * @sensor ssd1306 + * @comname SSD1306 OLED Display + * @altname Adafruit SSD1306 OLED Display 0.96" + * @type display + * @man adafruit + * @web https://www.adafruit.com/datasheets/SSD1306.pdf + * @web http://www.farnell.com/datasheets/609753.pdf + * @con i2c + * + * @brief API for SSD1306 I2C-controlled OLED displays + * + * SSD1306 is a 128x64 dot-matrix OLED/PLED segment driver with a + * controller. This device is available from many suppliers for a + * very low cost. This implementation was tested using a generic + * SSD1306 device from eBay. + * + * @image html ssd1306.jpeg + * @snippet ssd1306-oled.cxx Interesting + */ +class SSD1306 : public LCD +{ + public: + /** + * SSD1306 constructor; calls libmraa initialisation functions + * + * @param bus I2C bus to use + * @param address Slave address the LCD is registered on + */ + SSD1306(int bus, int address = 0x3C); + /** + * SSD1306 destructor + */ + ~SSD1306(); + /** + * Draws an image; see examples/python/make_oled_pic.py for an + * explanation of how pixels are mapped to bytes + * + * @param data Buffer to read + * @param bytes Number of bytes to read from the pointer + * @return Result of the operation + */ + mraa::Result draw(uint8_t* data, int bytes); + /** + * Writes a string to the LCD + * + * @param msg std::string to write to the display; note: only ASCII + * characters are supported + * @return Result of the operation + */ + mraa::Result write(std::string msg); + /** + * Sets the cursor to specified coordinates + * + * @param row Row to set the cursor to + * @param column Column to set the cursor to + * @return Result of the operation + */ + mraa::Result setCursor(int row, int column); + /** + * Clears the display of all characters + * + * @return Result of the operation + */ + mraa::Result clear(); + /** + * Returns to the original coordinates (0,0) + * + * @return Result of the operation + */ + mraa::Result home(); + /** + * Inverts the display + * + * @param i true to invert, false for normal display + * @return Result of the operation + */ + mraa::Result invert(bool i); + /** + * Activate a scroll to the right for rows start through stop + * The display is 16 rows tall. To scroll the whole display, run: + * display.scrollright(0x00, 0x0F) + * + * @param start First row to scroll + * @param stop Last row to scroll + * @return void + */ + void startscrollright(uint8_t start, uint8_t stop); + /** + * Activate a scroll to the left for rows start through stop + * The display is 16 rows tall. To scroll the whole display, run: + * display.startscrollright(0x00, 0x0F) + * + * @param start First row to scroll + * @param stop Last row to scroll + * @return void + */ + void startscrollleft(uint8_t start, uint8_t stop); + /** + * Activate a scroll to the upper right for rows start through stop + * The display is 16 rows tall. To scroll the whole display, run: + * display.startscrollleft(0x00, 0x0F) + * + * @param start First row to scroll + * @param stop Last row to scroll + * @return void + */ + void startscrolldiagright(uint8_t start, uint8_t stop); + /** + * Activate a scroll to the upper left for rows start through stop + * The display is 16 rows tall. To scroll the whole display, run: + * display.startscrolldiaagright(0x00, 0x0F) + * + * @param start First row to scroll + * @param stop Last row to scroll + * @return void + */ + void startscrolldiagleft(uint8_t start, uint8_t stop); + /** + * Stops display scrolling. + * + * @return void + */ + void stopscroll(void); + /** + * Dims display + * + * @param dim True to dim display, false for max intensity + * @return Result of last operation + */ + void dim(bool dim); + + private: + mraa::Result writeChar(uint8_t value); + mraa::Result setNormalDisplay(); + mraa::Result setAddressingMode(displayAddressingMode mode); + + int m_lcd_control_address; + mraa::I2c m_i2c_lcd_control; + + int _vccstate; +}; +} |