From d7f4b76ed0907d7917da03d09888d9a39c8e29b2 Mon Sep 17 00:00:00 2001 From: Shawn Hymel Date: Fri, 1 Jan 2016 22:02:24 +0000 Subject: [PATCH] ili9341: Initial implementation This driver provides support for the ILI9341 LCD driver via SPI (e.g. Adafruit 2.8" TFT LCD). It was implemented and tested on the Edison. Signed-off-by: Shawn Hymel Signed-off-by: Mihai Tudor Panu --- docs/images/ili9341.jpg | Bin 0 -> 203739 bytes examples/c++/CMakeLists.txt | 1 + examples/c++/ili9341.cxx | 84 ++++ examples/javascript/ili9341.js | 79 ++++ examples/python/ili9341.py | 75 ++++ src/ili9341/CMakeLists.txt | 5 + src/ili9341/gfx.cxx | 749 +++++++++++++++++++++++++++++++++ src/ili9341/gfx.h | 407 ++++++++++++++++++ src/ili9341/ili9341.cxx | 487 +++++++++++++++++++++ src/ili9341/ili9341.h | 345 +++++++++++++++ src/ili9341/jsupm_ili9341.i | 12 + src/ili9341/pyupm_ili9341.i | 16 + 12 files changed, 2260 insertions(+) create mode 100644 docs/images/ili9341.jpg create mode 100644 examples/c++/ili9341.cxx create mode 100644 examples/javascript/ili9341.js create mode 100644 examples/python/ili9341.py create mode 100644 src/ili9341/CMakeLists.txt create mode 100644 src/ili9341/gfx.cxx create mode 100644 src/ili9341/gfx.h create mode 100644 src/ili9341/ili9341.cxx create mode 100644 src/ili9341/ili9341.h create mode 100644 src/ili9341/jsupm_ili9341.i create mode 100644 src/ili9341/pyupm_ili9341.i diff --git a/docs/images/ili9341.jpg b/docs/images/ili9341.jpg new file mode 100644 index 0000000000000000000000000000000000000000..04e2810fa3a56a9d696ad9f8368e87e3b73b63b0 GIT binary patch literal 203739 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\~o{3&Fn( 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

8&xySZ+!0*_(Ey1 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 + +#include "ili9341.h" + +int main(int argc, char **argv) { +//! [Interesting] + + // Pins (Edison) + // CS_LCD GP44 (MRAA 31) + // CS_SD GP43 (MRAA 38) unused + // DC GP12 (MRAA 20) + // RESEST GP13 (MRAA 14) + upm::ILI9341 * lcd = new upm::ILI9341(31, 38, 20, 14); + + // Fill the screen with a solid color + lcd->fillScreen(lcd->color565(0, 40, 16)); + + // Draw some shapes + lcd->drawFastVLine(10, 10, 100, ILI9341_RED); + lcd->drawFastHLine(20, 10, 50, ILI9341_CYAN); + lcd->drawLine(160, 30, 200, 60, ILI9341_GREEN); + lcd->fillRect(20, 30, 75, 60, ILI9341_ORANGE); + lcd->drawCircle(70, 50, 20, ILI9341_PURPLE); + lcd->fillCircle(120, 50, 20, ILI9341_PURPLE); + lcd->drawTriangle(50, 100, 10, 140, 90, 140, ILI9341_YELLOW); + lcd->fillTriangle(150, 100, 110, 140, 190, 140, ILI9341_YELLOW); + lcd->drawRoundRect(20, 150, 50, 30, 10, ILI9341_RED); + lcd->drawRoundRect(130, 150, 50, 30, 10, ILI9341_RED); + lcd->fillRoundRect(75, 150, 50, 30, 10, ILI9341_RED); + + // Write some text + lcd->setCursor(0, 200); + lcd->setTextColor(ILI9341_LIGHTGREY); + lcd->setTextWrap(true); + lcd->setTextSize(1); + lcd->print("Text 1\n"); + lcd->setTextSize(2); + lcd->print("Text 2\n"); + lcd->setTextSize(3); + lcd->print("Text 3\n"); + lcd->setTextSize(4); + lcd->print("Text 4\n"); + + // Test screen rotation + for(int r = 0; r < 4; r++) { + lcd->setRotation(r); + lcd->fillRect(0, 0, 5, 5, ILI9341_WHITE); + sleep(1); + } + + // Invert colors, wait, then revert back + lcd->invertDisplay(true); + sleep(2); + lcd->invertDisplay(false); + + // Don't forget to free up that memory! + delete lcd; +//! [Interesting] + return 0; +} \ No newline at end of file diff --git a/examples/javascript/ili9341.js b/examples/javascript/ili9341.js new file mode 100644 index 00000000..ba0f47b5 --- /dev/null +++ b/examples/javascript/ili9341.js @@ -0,0 +1,79 @@ +/*jslint node:true, vars:true, bitwise:true, unparam:true */ +/*jshint unused:true */ + +/** + * Author: Shawn Hymel + * Copyright (c) 2016 SparkFun Electronics + * + * 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. + */ + +var ili9341 = require('jsupm_ili9341'); + +// Pins (Edison) +// CS_LCD GP44 (MRAA 31) +// CS_SD GP43 (MRAA 38) unused +// DC GP12 (MRAA 20) +// RESEST GP13 (MRAA 14) +var lcd = new ili9341.ILI9341(31, 38, 20, 14); + +// Fill the screen with a solid color +lcd.fillScreen(lcd.color565(0, 40, 16)); + +// Draw some shapes +lcd.drawFastVLine(10, 10, 100, ili9341.ILI9341_RED); +lcd.drawFastHLine(20, 10, 50, ili9341.ILI9341_CYAN); +lcd.drawLine(160, 30, 200, 60, ili9341.ILI9341_GREEN); +lcd.fillRect(20, 30, 75, 60, ili9341.ILI9341_ORANGE); +lcd.drawCircle(70, 50, 20, ili9341.ILI9341_PURPLE); +lcd.fillCircle(120, 50, 20, ili9341.ILI9341_PURPLE); +lcd.drawTriangle(50, 100, 10, 140, 90, 140, ili9341.ILI9341_YELLOW); +lcd.fillTriangle(150, 100, 110, 140, 190, 140, ili9341.ILI9341_YELLOW); +lcd.drawRoundRect(20, 150, 50, 30, 10, ili9341.ILI9341_RED); +lcd.drawRoundRect(130, 150, 50, 30, 10, ili9341.ILI9341_RED); +lcd.fillRoundRect(75, 150, 50, 30, 10, ili9341.ILI9341_RED); + +// Write some text +lcd.setCursor(0, 200); +lcd.setTextColor(ili9341.ILI9341_LIGHTGREY); +lcd.setTextWrap(true); +lcd.setTextSize(1); +lcd.print("Text 1\n"); +lcd.setTextSize(2); +lcd.print("Text 2\n"); +lcd.setTextSize(3); +lcd.print("Text 3\n"); +lcd.setTextSize(4); +lcd.print("Text 4\n"); + +// Test screen rotation +function rotateScreen(r) { + lcd.setRotation(r); + lcd.fillRect(0, 0, 5, 5, ili9341.ILI9341_WHITE); + if (r < 4) { + r++; + setTimeout(function() { rotateScreen(r); }, 1000); + } +} +rotateScreen(0); + +// Invert colors, wait, then revert back +setTimeout(function() { lcd.invertDisplay(true); }, 4000); +setTimeout(function() { lcd.invertDisplay(false); }, 6000); \ No newline at end of file diff --git a/examples/python/ili9341.py b/examples/python/ili9341.py new file mode 100644 index 00000000..5194cc31 --- /dev/null +++ b/examples/python/ili9341.py @@ -0,0 +1,75 @@ +#!/usr/bin/python +# Author: Shawn Hymel +# Copyright (c) 2016 SparkFun Electronics +# +# 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. + +import time +import pyupm_ili9341 as ili9341 + +# Pins (Edison) +# CS_LCD GP44 (MRAA 31) +# CS_SD GP43 (MRAA 38) unused +# DC GP12 (MRAA 20) +# RESEST GP13 (MRAA 14) +lcd = ili9341.ILI9341(31, 38, 20, 14) + +# Fill the screen with a solid color +lcd.fillScreen(lcd.color565(0, 40, 16)) + +# Draw some shapes +lcd.drawFastVLine(10, 10, 100, ili9341.ILI9341_RED) +lcd.drawFastHLine(20, 10, 50, ili9341.ILI9341_CYAN) +lcd.drawLine(160, 30, 200, 60, ili9341.ILI9341_GREEN) +lcd.fillRect(20, 30, 75, 60, ili9341.ILI9341_ORANGE) +lcd.drawCircle(70, 50, 20, ili9341.ILI9341_PURPLE) +lcd.fillCircle(120, 50, 20, ili9341.ILI9341_PURPLE) +lcd.drawTriangle(50, 100, 10, 140, 90, 140, ili9341.ILI9341_YELLOW) +lcd.fillTriangle(150, 100, 110, 140, 190, 140, ili9341.ILI9341_YELLOW) +lcd.drawRoundRect(20, 150, 50, 30, 10, ili9341.ILI9341_RED) +lcd.drawRoundRect(130, 150, 50, 30, 10, ili9341.ILI9341_RED) +lcd.fillRoundRect(75, 150, 50, 30, 10, ili9341.ILI9341_RED) + +# Write some text +lcd.setCursor(0, 200) +lcd.setTextColor(ili9341.ILI9341_LIGHTGREY) +lcd.setTextWrap(True) +lcd.setTextSize(1) +lcd._print("Text 1\n") +lcd.setTextSize(2) +lcd._print("Text 2\n") +lcd.setTextSize(3) +lcd._print("Text 3\n") +lcd.setTextSize(4) +lcd._print("Text 4\n") + +# Test screen rotation +for r in range(0, 4): + lcd.setRotation(r) + lcd.fillRect(0, 0, 5, 5, ili9341.ILI9341_WHITE) + time.sleep(1) + +# Invert colors, wait, then revert back +lcd.invertDisplay(True) +time.sleep(2) +lcd.invertDisplay(False) + +# Don't forget to free up that memory! +del lcd \ No newline at end of file diff --git a/src/ili9341/CMakeLists.txt b/src/ili9341/CMakeLists.txt new file mode 100644 index 00000000..6998826b --- /dev/null +++ b/src/ili9341/CMakeLists.txt @@ -0,0 +1,5 @@ +set (libname "ili9341") +set (libdescription "libupm ILI9341 SPI LCD") +set (module_src gfx.cxx ili9341.cxx) +set (module_h gfx.h ili9341.h) +upm_module_init() diff --git a/src/ili9341/gfx.cxx b/src/ili9341/gfx.cxx new file mode 100644 index 00000000..90f83dec --- /dev/null +++ b/src/ili9341/gfx.cxx @@ -0,0 +1,749 @@ +/** + * Author: Shawn Hymel + * Copyright (c) 2016 SparkFun Electronics + * + * Based on GFX interface by Yevgeniy Kiveisha and Adafruit Industries. + * + * 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. + */ + +#include "gfx.h" + +using namespace upm; + +GFX::GFX(int16_t w, int16_t h) : WIDTH(w), HEIGHT(h) { + _width = WIDTH; + _height = HEIGHT; + rotation = 0; + + cursor_x = 0; + cursor_y = 0; + textsize = 1; + textcolor = 0xFFFF; + textbgcolor = 0xFFFF; + wrap = true; + _cp437 = false; +} + +void GFX::drawLine(int16_t x0, + int16_t y0, + int16_t x1, + int16_t y1, + uint16_t color) { + + int16_t steep = abs(y1 - y0) > abs(x1 - x0); + if (steep) { + adagfxswap(x0, y0); + adagfxswap(x1, y1); + } + + if (x0 > x1) { + adagfxswap(x0, x1); + adagfxswap(y0, y1); + } + + int16_t dx, dy; + dx = x1 - x0; + dy = abs(y1 - y0); + + int16_t err = dx / 2; + int16_t ystep; + + if (y0 < y1) { + ystep = 1; + } else { + ystep = -1; + } + + for (; x0<=x1; x0++) { + if (steep) { + drawPixel(y0, x0, color); + } else { + drawPixel(x0, y0, color); + } + err -= dy; + if (err < 0) { + y0 += ystep; + err += dx; + } + } +} + +void GFX::drawFastVLine(int16_t x, + int16_t y, + int16_t h, + uint16_t color) { + drawLine(x, y, x, y+h-1, color); +} + +void GFX::drawFastHLine(int16_t x, + int16_t y, + int16_t w, + uint16_t color) { + drawLine(x, y, x+w-1, y, color); +} + +void GFX::drawRect(int16_t x, + int16_t y, + int16_t w, + int16_t h, + uint16_t color) { + drawFastHLine(x, y, w, color); + drawFastHLine(x, y+h-1, w, color); + drawFastVLine(x, y, h, color); + drawFastVLine(x+w-1, y, h, color); +} + +void GFX::fillRect(int16_t x, + int16_t y, + int16_t w, + int16_t h, + uint16_t color) { + for (int16_t i=x; i= 0) { + y--; + ddF_y += 2; + f += ddF_y; + } + x++; + ddF_x += 2; + f += ddF_x; + + drawPixel(x0 + x, y0 + y, color); + drawPixel(x0 - x, y0 + y, color); + drawPixel(x0 + x, y0 - y, color); + drawPixel(x0 - x, y0 - y, color); + drawPixel(x0 + y, y0 + x, color); + drawPixel(x0 - y, y0 + x, color); + drawPixel(x0 + y, y0 - x, color); + drawPixel(x0 - y, y0 - x, color); + } +} + +void GFX::drawCircleHelper(int16_t x0, + int16_t y0, + int16_t r, + uint8_t cornername, + uint16_t color) { + int16_t f = 1 - r; + int16_t ddF_x = 1; + int16_t ddF_y = -2 * r; + int16_t x = 0; + int16_t y = r; + + while (x= 0) { + y--; + ddF_y += 2; + f += ddF_y; + } + x++; + ddF_x += 2; + f += ddF_x; + if (cornername & 0x4) { + drawPixel(x0 + x, y0 + y, color); + drawPixel(x0 + y, y0 + x, color); + } + if (cornername & 0x2) { + drawPixel(x0 + x, y0 - y, color); + drawPixel(x0 + y, y0 - x, color); + } + if (cornername & 0x8) { + drawPixel(x0 - y, y0 + x, color); + drawPixel(x0 - x, y0 + y, color); + } + if (cornername & 0x1) { + drawPixel(x0 - y, y0 - x, color); + drawPixel(x0 - x, y0 - y, color); + } + } +} + +void GFX::fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color) { + drawFastVLine(x0, y0-r, 2*r+1, color); + fillCircleHelper(x0, y0, r, 3, 0, color); +} + +void GFX::fillCircleHelper(int16_t x0, + int16_t y0, + int16_t r, + uint8_t cornername, + int16_t delta, + uint16_t color) { + int16_t f = 1 - r; + int16_t ddF_x = 1; + int16_t ddF_y = -2 * r; + int16_t x = 0; + int16_t y = r; + + while (x= 0) { + y--; + ddF_y += 2; + f += ddF_y; + } + x++; + ddF_x += 2; + f += ddF_x; + + if (cornername & 0x1) { + drawFastVLine(x0+x, y0-y, 2*y+1+delta, color); + drawFastVLine(x0+y, y0-x, 2*x+1+delta, color); + } + if (cornername & 0x2) { + drawFastVLine(x0-x, y0-y, 2*y+1+delta, color); + drawFastVLine(x0-y, y0-x, 2*x+1+delta, color); + } + } +} + +void GFX::drawTriangle(int16_t x0, + int16_t y0, + int16_t x1, + int16_t y1, + int16_t x2, + int16_t y2, + uint16_t color) { + drawLine(x0, y0, x1, y1, color); + drawLine(x1, y1, x2, y2, color); + drawLine(x2, y2, x0, y0, color); +} + +void GFX::fillTriangle(int16_t x0, + int16_t y0, + int16_t x1, + int16_t y1, + int16_t x2, + int16_t y2, + uint16_t color) { + + int16_t a, b, y, last; + + // Sort coordinates by Y order (y2 >= y1 >= y0) + if (y0 > y1) { + adagfxswap(y0, y1); adagfxswap(x0, x1); + } + if (y1 > y2) { + adagfxswap(y2, y1); adagfxswap(x2, x1); + } + if (y0 > y1) { + adagfxswap(y0, y1); adagfxswap(x0, x1); + } + + if(y0 == y2) { // Handle awkward all-on-same-line case as its own thing + a = b = x0; + if(x1 < a) a = x1; + else if(x1 > b) b = x1; + if(x2 < a) a = x2; + else if(x2 > b) b = x2; + drawFastHLine(a, y0, b-a+1, color); + return; + } + + int16_t + dx01 = x1 - x0, + dy01 = y1 - y0, + dx02 = x2 - x0, + dy02 = y2 - y0, + dx12 = x2 - x1, + dy12 = y2 - y1; + int32_t + sa = 0, + sb = 0; + + // For upper part of triangle, find scanline crossings for segments + // 0-1 and 0-2. If y1=y2 (flat-bottomed triangle), the scanline y1 + // is included here (and second loop will be skipped, avoiding a /0 + // error there), otherwise scanline y1 is skipped here and handled + // in the second loop...which also avoids a /0 error here if y0=y1 + // (flat-topped triangle). + if(y1 == y2) last = y1; // Include y1 scanline + else last = y1-1; // Skip it + + for(y=y0; y<=last; y++) { + a = x0 + sa / dy01; + b = x0 + sb / dy02; + sa += dx01; + sb += dx02; + /* longhand: + a = x0 + (x1 - x0) * (y - y0) / (y1 - y0); + b = x0 + (x2 - x0) * (y - y0) / (y2 - y0); + */ + if(a > b) adagfxswap(a,b); + drawFastHLine(a, y, b-a+1, color); + } + + // For lower part of triangle, find scanline crossings for segments + // 0-2 and 1-2. This loop is skipped if y1=y2. + sa = dx12 * (y - y1); + sb = dx02 * (y - y0); + for(; y<=y2; y++) { + a = x1 + sa / dy12; + b = x0 + sb / dy02; + sa += dx12; + sb += dx02; + /* longhand: + a = x1 + (x2 - x1) * (y - y1) / (y2 - y1); + b = x0 + (x2 - x0) * (y - y0) / (y2 - y0); + */ + if(a > b) adagfxswap(a,b); + drawFastHLine(a, y, b-a+1, color); + } +} + +// Draw a rounded rectangle +void GFX::drawRoundRect(int16_t x, + int16_t y, + int16_t w, + int16_t h, + int16_t r, + uint16_t color) { + + // smarter version + drawFastHLine(x+r , y , w-2*r, color); // Top + drawFastHLine(x+r , y+h-1, w-2*r, color); // Bottom + drawFastVLine(x , y+r , h-2*r, color); // Left + drawFastVLine(x+w-1, y+r , h-2*r, color); // Right + // draw four corners + drawCircleHelper(x+r , y+r , r, 1, color); + drawCircleHelper(x+w-r-1, y+r , r, 2, color); + drawCircleHelper(x+w-r-1, y+h-r-1, r, 4, color); + drawCircleHelper(x+r , y+h-r-1, r, 8, color); +} + +void GFX::fillRoundRect(int16_t x, + int16_t y, + int16_t w, + int16_t h, + int16_t r, + uint16_t color) { + + // smarter version + fillRect(x+r, y, w-2*r, h, color); + + // draw four corners + fillCircleHelper(x+w-r-1, y+r, r, 1, h-2*r-1, color); + fillCircleHelper(x+r , y+r, r, 2, h-2*r-1, color); +} + +void GFX::drawChar(int16_t x, + int16_t y, + unsigned char c, + uint16_t color, + uint16_t bg, + uint8_t size) { + + if((x >= _width) || // Clip right + (y >= _height) || // Clip bottom + ((x + 6 * size - 1) < 0) || // Clip left + ((y + 8 * size - 1) < 0)) // Clip top + return; + + if(!_cp437 && (c >= 176)) c++; // Handle 'classic' charset behavior + + for(int8_t i=0; i<6; i++ ) { + uint8_t line; + if(i < 5) line = font[(c * 5) + i]; + else line = 0x0; + for(int8_t j=0; j<8; j++, line >>= 1) { + if(line & 0x1) { + if(size == 1) drawPixel(x+i, y+j, color); + else fillRect(x+(i*size), y+(j*size), size, size, color); + } else if(bg != color) { + if(size == 1) drawPixel(x+i, y+j, bg); + else fillRect(x+i*size, y+j*size, size, size, bg); + } + } + } +} + +int16_t GFX::getCursorX(void) const { + return cursor_x; +} + +int16_t GFX::getCursorY(void) const { + return cursor_y; +} + +void GFX::setCursor(int16_t x, int16_t y) { + cursor_x = x; + cursor_y = y; +} + +void GFX::setTextColor(uint16_t c) { + // For 'transparent' background, we'll set the bg + // to the same as fg instead of using a flag + textcolor = textbgcolor = c; +} + +void GFX::setTextColor(uint16_t c, uint16_t bg) { + textcolor = c; + textbgcolor = bg; +} + +void GFX::setTextSize(uint8_t s) { + textsize = (s > 0) ? s : 1; +} + +void GFX::setTextWrap(bool w) { + wrap = w; +} + +uint8_t GFX::getRotation(void) const { + return rotation; +} + +void GFX::setRotation(uint8_t r) { + rotation = (r & 3); + switch(rotation) { + case 0: + case 2: + _width = WIDTH; + _height = HEIGHT; + break; + case 1: + case 3: + _width = HEIGHT; + _height = WIDTH; + break; + } +} + +void GFX::cp437(bool x) { + _cp437 = x; +} + +void GFX::write(uint8_t c) { + + if(c == '\n') { + cursor_y += textsize*8; + cursor_x = 0; + } else if(c == '\r') { + // skip em + } else { + + // Heading off edge? + if(wrap && ((cursor_x + textsize * 6) >= _width)) { + cursor_x = 0; // Reset x to zero + cursor_y += textsize * 8; // Advance y one line + } + drawChar(cursor_x, cursor_y, c, textcolor, textbgcolor, textsize); + cursor_x += textsize * 6; + } +} + +void GFX::print(std::string msg) { + int len = msg.length(); + for (int idx = 0; idx < len; idx++) { + write(msg[idx]); + } +} + +int16_t GFX::width(void) const { + return _width; +} + +int16_t GFX::height(void) const { + return _height; +} + +const unsigned char GFX::font[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, + 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, + 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, + 0x18, 0x3C, 0x7E, 0x3C, 0x18, + 0x1C, 0x57, 0x7D, 0x57, 0x1C, + 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, + 0x00, 0x18, 0x3C, 0x18, 0x00, + 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, + 0x00, 0x18, 0x24, 0x18, 0x00, + 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, + 0x30, 0x48, 0x3A, 0x06, 0x0E, + 0x26, 0x29, 0x79, 0x29, 0x26, + 0x40, 0x7F, 0x05, 0x05, 0x07, + 0x40, 0x7F, 0x05, 0x25, 0x3F, + 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, + 0x7F, 0x3E, 0x1C, 0x1C, 0x08, + 0x08, 0x1C, 0x1C, 0x3E, 0x7F, + 0x14, 0x22, 0x7F, 0x22, 0x14, + 0x5F, 0x5F, 0x00, 0x5F, 0x5F, + 0x06, 0x09, 0x7F, 0x01, 0x7F, + 0x00, 0x66, 0x89, 0x95, 0x6A, + 0x60, 0x60, 0x60, 0x60, 0x60, + 0x94, 0xA2, 0xFF, 0xA2, 0x94, + 0x08, 0x04, 0x7E, 0x04, 0x08, + 0x10, 0x20, 0x7E, 0x20, 0x10, + 0x08, 0x08, 0x2A, 0x1C, 0x08, + 0x08, 0x1C, 0x2A, 0x08, 0x08, + 0x1E, 0x10, 0x10, 0x10, 0x10, + 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, + 0x30, 0x38, 0x3E, 0x38, 0x30, + 0x06, 0x0E, 0x3E, 0x0E, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5F, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x07, 0x00, + 0x14, 0x7F, 0x14, 0x7F, 0x14, + 0x24, 0x2A, 0x7F, 0x2A, 0x12, + 0x23, 0x13, 0x08, 0x64, 0x62, + 0x36, 0x49, 0x56, 0x20, 0x50, + 0x00, 0x08, 0x07, 0x03, 0x00, + 0x00, 0x1C, 0x22, 0x41, 0x00, + 0x00, 0x41, 0x22, 0x1C, 0x00, + 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, + 0x08, 0x08, 0x3E, 0x08, 0x08, + 0x00, 0x80, 0x70, 0x30, 0x00, + 0x08, 0x08, 0x08, 0x08, 0x08, + 0x00, 0x00, 0x60, 0x60, 0x00, + 0x20, 0x10, 0x08, 0x04, 0x02, + 0x3E, 0x51, 0x49, 0x45, 0x3E, + 0x00, 0x42, 0x7F, 0x40, 0x00, + 0x72, 0x49, 0x49, 0x49, 0x46, + 0x21, 0x41, 0x49, 0x4D, 0x33, + 0x18, 0x14, 0x12, 0x7F, 0x10, + 0x27, 0x45, 0x45, 0x45, 0x39, + 0x3C, 0x4A, 0x49, 0x49, 0x31, + 0x41, 0x21, 0x11, 0x09, 0x07, + 0x36, 0x49, 0x49, 0x49, 0x36, + 0x46, 0x49, 0x49, 0x29, 0x1E, + 0x00, 0x00, 0x14, 0x00, 0x00, + 0x00, 0x40, 0x34, 0x00, 0x00, + 0x00, 0x08, 0x14, 0x22, 0x41, + 0x14, 0x14, 0x14, 0x14, 0x14, + 0x00, 0x41, 0x22, 0x14, 0x08, + 0x02, 0x01, 0x59, 0x09, 0x06, + 0x3E, 0x41, 0x5D, 0x59, 0x4E, + 0x7C, 0x12, 0x11, 0x12, 0x7C, + 0x7F, 0x49, 0x49, 0x49, 0x36, + 0x3E, 0x41, 0x41, 0x41, 0x22, + 0x7F, 0x41, 0x41, 0x41, 0x3E, + 0x7F, 0x49, 0x49, 0x49, 0x41, + 0x7F, 0x09, 0x09, 0x09, 0x01, + 0x3E, 0x41, 0x41, 0x51, 0x73, + 0x7F, 0x08, 0x08, 0x08, 0x7F, + 0x00, 0x41, 0x7F, 0x41, 0x00, + 0x20, 0x40, 0x41, 0x3F, 0x01, + 0x7F, 0x08, 0x14, 0x22, 0x41, + 0x7F, 0x40, 0x40, 0x40, 0x40, + 0x7F, 0x02, 0x1C, 0x02, 0x7F, + 0x7F, 0x04, 0x08, 0x10, 0x7F, + 0x3E, 0x41, 0x41, 0x41, 0x3E, + 0x7F, 0x09, 0x09, 0x09, 0x06, + 0x3E, 0x41, 0x51, 0x21, 0x5E, + 0x7F, 0x09, 0x19, 0x29, 0x46, + 0x26, 0x49, 0x49, 0x49, 0x32, + 0x03, 0x01, 0x7F, 0x01, 0x03, + 0x3F, 0x40, 0x40, 0x40, 0x3F, + 0x1F, 0x20, 0x40, 0x20, 0x1F, + 0x3F, 0x40, 0x38, 0x40, 0x3F, + 0x63, 0x14, 0x08, 0x14, 0x63, + 0x03, 0x04, 0x78, 0x04, 0x03, + 0x61, 0x59, 0x49, 0x4D, 0x43, + 0x00, 0x7F, 0x41, 0x41, 0x41, + 0x02, 0x04, 0x08, 0x10, 0x20, + 0x00, 0x41, 0x41, 0x41, 0x7F, + 0x04, 0x02, 0x01, 0x02, 0x04, + 0x40, 0x40, 0x40, 0x40, 0x40, + 0x00, 0x03, 0x07, 0x08, 0x00, + 0x20, 0x54, 0x54, 0x78, 0x40, + 0x7F, 0x28, 0x44, 0x44, 0x38, + 0x38, 0x44, 0x44, 0x44, 0x28, + 0x38, 0x44, 0x44, 0x28, 0x7F, + 0x38, 0x54, 0x54, 0x54, 0x18, + 0x00, 0x08, 0x7E, 0x09, 0x02, + 0x18, 0xA4, 0xA4, 0x9C, 0x78, + 0x7F, 0x08, 0x04, 0x04, 0x78, + 0x00, 0x44, 0x7D, 0x40, 0x00, + 0x20, 0x40, 0x40, 0x3D, 0x00, + 0x7F, 0x10, 0x28, 0x44, 0x00, + 0x00, 0x41, 0x7F, 0x40, 0x00, + 0x7C, 0x04, 0x78, 0x04, 0x78, + 0x7C, 0x08, 0x04, 0x04, 0x78, + 0x38, 0x44, 0x44, 0x44, 0x38, + 0xFC, 0x18, 0x24, 0x24, 0x18, + 0x18, 0x24, 0x24, 0x18, 0xFC, + 0x7C, 0x08, 0x04, 0x04, 0x08, + 0x48, 0x54, 0x54, 0x54, 0x24, + 0x04, 0x04, 0x3F, 0x44, 0x24, + 0x3C, 0x40, 0x40, 0x20, 0x7C, + 0x1C, 0x20, 0x40, 0x20, 0x1C, + 0x3C, 0x40, 0x30, 0x40, 0x3C, + 0x44, 0x28, 0x10, 0x28, 0x44, + 0x4C, 0x90, 0x90, 0x90, 0x7C, + 0x44, 0x64, 0x54, 0x4C, 0x44, + 0x00, 0x08, 0x36, 0x41, 0x00, + 0x00, 0x00, 0x77, 0x00, 0x00, + 0x00, 0x41, 0x36, 0x08, 0x00, + 0x02, 0x01, 0x02, 0x04, 0x02, + 0x3C, 0x26, 0x23, 0x26, 0x3C, + 0x1E, 0xA1, 0xA1, 0x61, 0x12, + 0x3A, 0x40, 0x40, 0x20, 0x7A, + 0x38, 0x54, 0x54, 0x55, 0x59, + 0x21, 0x55, 0x55, 0x79, 0x41, + 0x22, 0x54, 0x54, 0x78, 0x42, // a-umlaut + 0x21, 0x55, 0x54, 0x78, 0x40, + 0x20, 0x54, 0x55, 0x79, 0x40, + 0x0C, 0x1E, 0x52, 0x72, 0x12, + 0x39, 0x55, 0x55, 0x55, 0x59, + 0x39, 0x54, 0x54, 0x54, 0x59, + 0x39, 0x55, 0x54, 0x54, 0x58, + 0x00, 0x00, 0x45, 0x7C, 0x41, + 0x00, 0x02, 0x45, 0x7D, 0x42, + 0x00, 0x01, 0x45, 0x7C, 0x40, + 0x7D, 0x12, 0x11, 0x12, 0x7D, // A-umlaut + 0xF0, 0x28, 0x25, 0x28, 0xF0, + 0x7C, 0x54, 0x55, 0x45, 0x00, + 0x20, 0x54, 0x54, 0x7C, 0x54, + 0x7C, 0x0A, 0x09, 0x7F, 0x49, + 0x32, 0x49, 0x49, 0x49, 0x32, + 0x3A, 0x44, 0x44, 0x44, 0x3A, // o-umlaut + 0x32, 0x4A, 0x48, 0x48, 0x30, + 0x3A, 0x41, 0x41, 0x21, 0x7A, + 0x3A, 0x42, 0x40, 0x20, 0x78, + 0x00, 0x9D, 0xA0, 0xA0, 0x7D, + 0x3D, 0x42, 0x42, 0x42, 0x3D, // O-umlaut + 0x3D, 0x40, 0x40, 0x40, 0x3D, + 0x3C, 0x24, 0xFF, 0x24, 0x24, + 0x48, 0x7E, 0x49, 0x43, 0x66, + 0x2B, 0x2F, 0xFC, 0x2F, 0x2B, + 0xFF, 0x09, 0x29, 0xF6, 0x20, + 0xC0, 0x88, 0x7E, 0x09, 0x03, + 0x20, 0x54, 0x54, 0x79, 0x41, + 0x00, 0x00, 0x44, 0x7D, 0x41, + 0x30, 0x48, 0x48, 0x4A, 0x32, + 0x38, 0x40, 0x40, 0x22, 0x7A, + 0x00, 0x7A, 0x0A, 0x0A, 0x72, + 0x7D, 0x0D, 0x19, 0x31, 0x7D, + 0x26, 0x29, 0x29, 0x2F, 0x28, + 0x26, 0x29, 0x29, 0x29, 0x26, + 0x30, 0x48, 0x4D, 0x40, 0x20, + 0x38, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x38, + 0x2F, 0x10, 0xC8, 0xAC, 0xBA, + 0x2F, 0x10, 0x28, 0x34, 0xFA, + 0x00, 0x00, 0x7B, 0x00, 0x00, + 0x08, 0x14, 0x2A, 0x14, 0x22, + 0x22, 0x14, 0x2A, 0x14, 0x08, + 0x55, 0x00, 0x55, 0x00, 0x55, // #176 (25% block) missing in old code + 0xAA, 0x55, 0xAA, 0x55, 0xAA, // 50% block + 0xFF, 0x55, 0xFF, 0x55, 0xFF, // 75% block + 0x00, 0x00, 0x00, 0xFF, 0x00, + 0x10, 0x10, 0x10, 0xFF, 0x00, + 0x14, 0x14, 0x14, 0xFF, 0x00, + 0x10, 0x10, 0xFF, 0x00, 0xFF, + 0x10, 0x10, 0xF0, 0x10, 0xF0, + 0x14, 0x14, 0x14, 0xFC, 0x00, + 0x14, 0x14, 0xF7, 0x00, 0xFF, + 0x00, 0x00, 0xFF, 0x00, 0xFF, + 0x14, 0x14, 0xF4, 0x04, 0xFC, + 0x14, 0x14, 0x17, 0x10, 0x1F, + 0x10, 0x10, 0x1F, 0x10, 0x1F, + 0x14, 0x14, 0x14, 0x1F, 0x00, + 0x10, 0x10, 0x10, 0xF0, 0x00, + 0x00, 0x00, 0x00, 0x1F, 0x10, + 0x10, 0x10, 0x10, 0x1F, 0x10, + 0x10, 0x10, 0x10, 0xF0, 0x10, + 0x00, 0x00, 0x00, 0xFF, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0xFF, 0x10, + 0x00, 0x00, 0x00, 0xFF, 0x14, + 0x00, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0x00, 0x1F, 0x10, 0x17, + 0x00, 0x00, 0xFC, 0x04, 0xF4, + 0x14, 0x14, 0x17, 0x10, 0x17, + 0x14, 0x14, 0xF4, 0x04, 0xF4, + 0x00, 0x00, 0xFF, 0x00, 0xF7, + 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0xF7, 0x00, 0xF7, + 0x14, 0x14, 0x14, 0x17, 0x14, + 0x10, 0x10, 0x1F, 0x10, 0x1F, + 0x14, 0x14, 0x14, 0xF4, 0x14, + 0x10, 0x10, 0xF0, 0x10, 0xF0, + 0x00, 0x00, 0x1F, 0x10, 0x1F, + 0x00, 0x00, 0x00, 0x1F, 0x14, + 0x00, 0x00, 0x00, 0xFC, 0x14, + 0x00, 0x00, 0xF0, 0x10, 0xF0, + 0x10, 0x10, 0xFF, 0x10, 0xFF, + 0x14, 0x14, 0x14, 0xFF, 0x14, + 0x10, 0x10, 0x10, 0x1F, 0x00, + 0x00, 0x00, 0x00, 0xF0, 0x10, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, + 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, + 0x38, 0x44, 0x44, 0x38, 0x44, + 0xFC, 0x4A, 0x4A, 0x4A, 0x34, // sharp-s or beta + 0x7E, 0x02, 0x02, 0x06, 0x06, + 0x02, 0x7E, 0x02, 0x7E, 0x02, + 0x63, 0x55, 0x49, 0x41, 0x63, + 0x38, 0x44, 0x44, 0x3C, 0x04, + 0x40, 0x7E, 0x20, 0x1E, 0x20, + 0x06, 0x02, 0x7E, 0x02, 0x02, + 0x99, 0xA5, 0xE7, 0xA5, 0x99, + 0x1C, 0x2A, 0x49, 0x2A, 0x1C, + 0x4C, 0x72, 0x01, 0x72, 0x4C, + 0x30, 0x4A, 0x4D, 0x4D, 0x30, + 0x30, 0x48, 0x78, 0x48, 0x30, + 0xBC, 0x62, 0x5A, 0x46, 0x3D, + 0x3E, 0x49, 0x49, 0x49, 0x00, + 0x7E, 0x01, 0x01, 0x01, 0x7E, + 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, + 0x44, 0x44, 0x5F, 0x44, 0x44, + 0x40, 0x51, 0x4A, 0x44, 0x40, + 0x40, 0x44, 0x4A, 0x51, 0x40, + 0x00, 0x00, 0xFF, 0x01, 0x03, + 0xE0, 0x80, 0xFF, 0x00, 0x00, + 0x08, 0x08, 0x6B, 0x6B, 0x08, + 0x36, 0x12, 0x36, 0x24, 0x36, + 0x06, 0x0F, 0x09, 0x0F, 0x06, + 0x00, 0x00, 0x18, 0x18, 0x00, + 0x00, 0x00, 0x10, 0x10, 0x00, + 0x30, 0x40, 0xFF, 0x01, 0x01, + 0x00, 0x1F, 0x01, 0x01, 0x1E, + 0x00, 0x19, 0x1D, 0x17, 0x12, + 0x00, 0x3C, 0x3C, 0x3C, 0x3C, + 0x00, 0x00, 0x00, 0x00, 0x00 // #255 NBSP +}; \ No newline at end of file diff --git a/src/ili9341/gfx.h b/src/ili9341/gfx.h new file mode 100644 index 00000000..3cbc5a12 --- /dev/null +++ b/src/ili9341/gfx.h @@ -0,0 +1,407 @@ +/** + * Author: Shawn Hymel + * Copyright (c) 2016 SparkFun Electronics + * + * Based on GFX interface by Yevgeniy Kiveisha and Adafruit Industries. + * + * 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 + +#define adagfxswap(a, b) { int16_t t = a; a = b; b = t; } + +namespace upm +{ + + /** + * @brief GFX helper class + */ + class GFX { + public: + + /** + * Creates a GFX object + * + * @param w Screen width + * @param h Screen height + */ + GFX(int16_t w, int16_t h); + + /** + * Sends a pixel color (RGB) to the driver chip. This must be + * defined by the subclass (pure virtual function). + * + * @param x Axis on the horizontal scale + * @param y Axis on the vertical scale + * @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15] + */ + virtual void drawPixel(int16_t x, int16_t y, uint16_t color) = 0; + + /** + * Draw a line. + * + * @param x0 Start of line x coordinate + * @param y0 Start of line y coordinate + * @param x1 End of line x coordinate + * @param y1 End of line y coordinate + * @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15] + */ + virtual void drawLine(int16_t x0, + int16_t y0, + int16_t x1, + int16_t y1, + uint16_t color); + + /** + * Draws a vertical line using minimal SPI writes. + * + * @param x Axis on the horizontal scale to begin line + * @param y Axis on the vertical scale to begin line + * @param h Height of line in pixels + * @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15] + */ + virtual void drawFastVLine(int16_t x, + int16_t y, + int16_t h, + uint16_t color); + + /** + * Draws a horizontal line using minimal SPI writes. + * + * @param x Axis on the horizontal scale to begin line + * @param y Axis on the vertical scale to begin line + * @param w Width of line in pixels + * @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15] + */ + virtual void drawFastHLine(int16_t x, + int16_t y, + int16_t w, + uint16_t color); + + /** + * Draws a rectangle (not filled). + * + * @param x Position of upper left corner on horizontal axis + * @param y Position of upper left corner on vertical axis + * @param w Width of rectangle + * @param h Height of rectangle + * @color RGB (16-bit) color (R[0-4], G[5-10], B[11-15] + */ + virtual void drawRect(int16_t x, + int16_t y, + int16_t w, + int16_t h, + uint16_t color); + + /** + * Draw a filled rectangle. + * + * @param x Axis on the horizontal scale of upper-left corner + * @param y Axis on the vertical scale of upper-left corner + * @param w Width of rectangle in pixels + * @param h Height of rectangle in pixels + * @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15] + */ + virtual void fillRect(int16_t x, + int16_t y, + int16_t w, + int16_t h, + uint16_t color); + + /** + * Fill the screen with a single color. + * + * @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15] + */ + virtual void fillScreen(uint16_t color); + + /** + * Invert colors on the display. + * + * @param i True or false to invert colors + */ + virtual void invertDisplay(bool i); + + /** + * Draw a circle outline. + * + * @param x0 Center point of circle on x-axis + * @param y0 Center point of circle on y-axis + * @param r Radius of circle + * @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15] + */ + void drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color); + + /** + * Used to draw rounded corners. + * + * @param x0 Center point of circle on x-axis + * @param y0 Center point of circle on y-axis + * @param r Radius of circle + * @param cornername Mask of corner number (1, 2, 4, 8) + * @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15] + */ + void drawCircleHelper(int16_t x0, + int16_t y0, + int16_t r, + uint8_t cornername, + uint16_t color); + + /** + * Draws a filled circle. + * + * @param x0 Center point of circle on x-axis + * @param y0 Center point of circle on y-axis + * @param r Radius of circle + * @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15] + */ + void fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color); + + /** + * Used to draw a filled circle and rounded rectangles. + * + * @param x0 Center point of circle on x-axis + * @param y0 Center point of circle on y-axis + * @param r Radius of circle + * @param cornername Mask of corner number (1, 2, 4, 8) + * @param delta Line offset + * @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15] + */ + void fillCircleHelper(int16_t x0, + int16_t y0, + int16_t r, + uint8_t cornername, + int16_t delta, + uint16_t color); + + /** + * Draw a triangle. + * + * @param x0 First point coordinate on x-axis + * @param y0 First point coordinate on y-axis + * @param x1 Second point coordinate on x-axis + * @param y1 Second point coordinate on y-axis + * @param x2 Third point coordinate on x-axis + * @param y2 Third point coordinate on y-axis + * @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15] + */ + void drawTriangle(int16_t x0, + int16_t y0, + int16_t x1, + int16_t y1, + int16_t x2, + int16_t y2, + uint16_t color); + + /** + * Draw a filled triangle. + * + * @param x0 First point coordinate on x-axis + * @param y0 First point coordinate on y-axis + * @param x1 Second point coordinate on x-axis + * @param y1 Second point coordinate on y-axis + * @param x2 Third point coordinate on x-axis + * @param y2 Third point coordinate on y-axis + * @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15] + */ + void fillTriangle(int16_t x0, + int16_t y0, + int16_t x1, + int16_t y1, + int16_t x2, + int16_t y2, + uint16_t color); + + /** + * Draw a rectangle with rounded corners + * + * @param x0 X-axis coordinate of top-left corner + * @param y0 Y-axis coordinate of top-left corner + * @param w Width of rectangle + * @param h height of rectangle + * @param radius Radius of rounded corners + * @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15] + */ + void drawRoundRect(int16_t x0, + int16_t y0, + int16_t w, + int16_t h, + int16_t radius, + uint16_t color); + + /** + * Draw a filled rectangle with rounded corners + * + * @param x0 X-axis coordinate of top-left corner + * @param y0 Y-axis coordinate of top-left corner + * @param w Width of rectangle + * @param h height of rectangle + * @param radius Radius of rounded corners + * @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15] + */ + void fillRoundRect(int16_t x0, + int16_t y0, + int16_t w, + int16_t h, + int16_t radius, + uint16_t color); + + /** + * Draw a character at the specified point. + * + * @param x X-axis coordinate of the top-left corner + * @param y Y-axis coordinate of the top-left corner + * @param c Character to draw + * @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15] + * @param bg Background color (16-bit RGB) + * @param size Font size + */ + void drawChar(int16_t x, + int16_t y, + unsigned char c, + uint16_t color, + uint16_t bg, + uint8_t size); + + /** + * Get the x-axis coordinate of the upper-left corner of the cursor. + * + * @return X-axis coordinate of the cursor + */ + int16_t getCursorX(void) const; + + /** + * Get the y-axis coordinate of the upper-left corner of the cursor. + * + * @return Y-axis coordinate of the cursor + */ + int16_t getCursorY(void) const; + + /** + * Set the cursor for writing text. + * + * @param x X-axis coordinate of the top-left corner of the cursor + * @param y Y-axis coordinate of the top-left corner of the cursor + */ + void setCursor(int16_t x, int16_t y); + + /** + * Set the color for text. + * + * @param c RGB (16-bit) color (R[0-4], G[5-10], B[11-15] + */ + void setTextColor(uint16_t c); + + /** + * Set the color for text and text background (highlight). + * + * @param c Text color (RGB, 16-bit) + * @param bg Background text color (RGB, 16-bit) + */ + void setTextColor(uint16_t c, uint16_t bg); + + /** + * Set the size of the text. + * + * @param s Font size (multiples of 8 pixel text height) + */ + void setTextSize(uint8_t s); + + /** + * Enable or disable text wrapping. + * + * @param w True to wrap text. False to truncate. + */ + void setTextWrap(bool w); + + /** + * Get the current rotation configuration of the screen. + * + * @return current rotation 0-3 + */ + uint8_t getRotation(void) const; + + /** + * Sets the rotation of the screen. Can be overridden with another + * screen-specific definition. + * + * @param r Rotation 0-3 + */ + void setRotation(uint8_t r); + + /** + * Enable (or disable) Code Page 437-compatible charset. + * + * @param x True to enable CP437 charset. False to disable. + */ + void cp437(bool x); + + /** + * Write a character at the current cursor position. Definition + * can be overridden with board-specific code. + * + * @param c Character to draw + */ + virtual void write(uint8_t c); + + /** + * Prints a string to the screen. + * + * @param s Message to print + */ + void print(std::string msg); + + /** + * Get the current width of the screen. + * + * @return the width in pixels + */ + int16_t width(void) const; + + /** + * Get the current height of the screen. + * + * @return the height in pixels + */ + int16_t height(void) const; + + protected: + + const int16_t WIDTH; + const int16_t HEIGHT; + + int16_t _width; + int16_t _height; + + uint8_t rotation; + + uint16_t textcolor; + uint16_t textbgcolor; + int16_t cursor_x; + int16_t cursor_y; + uint8_t textsize; + bool wrap; + bool _cp437; + static const unsigned char font[]; + }; +} \ No newline at end of file diff --git a/src/ili9341/ili9341.cxx b/src/ili9341/ili9341.cxx new file mode 100644 index 00000000..b0a4e577 --- /dev/null +++ b/src/ili9341/ili9341.cxx @@ -0,0 +1,487 @@ +/* + * Author: Shawn Hymel + * Copyright (c) 2015 SparkFun Electronics + * + * Credits to Adafruit. + * Based on Adafruit ST7735 library, see original license in license.txt file. + * + * 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. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "ili9341.h" + +using namespace upm; + +ILI9341::ILI9341(uint8_t csLCD, uint8_t csSD, uint8_t dc, uint8_t rst) : + GFX(ILI9341_TFTWIDTH, ILI9341_TFTHEIGHT), m_csLCDPinCtx(csLCD), + m_csSDPinCtx(csSD), m_dcPinCtx(dc), m_rstPinCtx(rst), m_spi(0) { + + initModule(); + configModule(); +} + +void ILI9341::initModule() { + mraa::Result error = mraa::SUCCESS; + + error = m_csLCDPinCtx.dir(mraa::DIR_OUT); + if (error != mraa::SUCCESS) { + mraa::printError(error); + } + + error = m_csSDPinCtx.dir(mraa::DIR_OUT); + if (error != mraa::SUCCESS) { + mraa::printError(error); + } + + error = m_dcPinCtx.dir(mraa::DIR_OUT); + if (error != mraa::SUCCESS) { + mraa::printError(error); + } + + error = m_rstPinCtx.dir(mraa::DIR_OUT); + if (error != mraa::SUCCESS) { + mraa::printError(error); + } + + error = m_spi.frequency(SPI_FREQ); + if (error != mraa::SUCCESS) { + mraa::printError (error); + } + + lcdCSOff(); +} + +void ILI9341::setRotation(uint8_t r) { + + writecommand(ILI9341_MADCTL); + r = r % 4; // can't be higher than 3 + switch(r) { + case 0: + writedata(MADCTL_MX | MADCTL_BGR); + _width = ILI9341_TFTWIDTH; + _height = ILI9341_TFTHEIGHT; + break; + case 1: + writedata(MADCTL_MV | MADCTL_BGR); + _width = ILI9341_TFTHEIGHT; + _height = ILI9341_TFTWIDTH; + break; + case 2: + writedata(MADCTL_MY | MADCTL_BGR); + _width = ILI9341_TFTWIDTH; + _height = ILI9341_TFTHEIGHT; + break; + case 3: + writedata(MADCTL_MX | MADCTL_MY | MADCTL_MV | MADCTL_BGR); + _width = ILI9341_TFTHEIGHT; + _height = ILI9341_TFTWIDTH; + break; + } +} + +void ILI9341::configModule() { + + // Toggle RST low to reset + rstHigh(); + usleep(5000); + rstLow(); + usleep(20000); + rstHigh(); + usleep(150000); + + // Send initialization commands + writecommand(0xEF); + writedata(0x03); + writedata(0x80); + writedata(0x02); + + writecommand(0xCF); + writedata(0x00); + writedata(0XC1); + writedata(0X30); + + writecommand(0xED); + writedata(0x64); + writedata(0x03); + writedata(0X12); + writedata(0X81); + + writecommand(0xE8); + writedata(0x85); + writedata(0x00); + writedata(0x78); + + writecommand(0xCB); + writedata(0x39); + writedata(0x2C); + writedata(0x00); + writedata(0x34); + writedata(0x02); + + writecommand(0xF7); + writedata(0x20); + + writecommand(0xEA); + writedata(0x00); + writedata(0x00); + + writecommand(ILI9341_PWCTR1); //Power control + writedata(0x23); //VRH[5:0] + + writecommand(ILI9341_PWCTR2); //Power control + writedata(0x10); //SAP[2:0];BT[3:0] + + writecommand(ILI9341_VMCTR1); //VCM control + writedata(0x3e); + writedata(0x28); + + writecommand(ILI9341_VMCTR2); //VCM control2 + writedata(0x86); //-- + + writecommand(ILI9341_MADCTL); // Memory Access Control + writedata(0x48); + + writecommand(ILI9341_PIXFMT); + writedata(0x55); + + writecommand(ILI9341_FRMCTR1); + writedata(0x00); + writedata(0x18); + + writecommand(ILI9341_DFUNCTR); // Display Function Control + writedata(0x08); + writedata(0x82); + writedata(0x27); + + writecommand(0xF2); // 3Gamma Function Disable + writedata(0x00); + + writecommand(ILI9341_GAMMASET); //Gamma curve selected + writedata(0x01); + + writecommand(ILI9341_GMCTRP1); //Set Gamma + writedata(0x0F); + writedata(0x31); + writedata(0x2B); + writedata(0x0C); + writedata(0x0E); + writedata(0x08); + writedata(0x4E); + writedata(0xF1); + writedata(0x37); + writedata(0x07); + writedata(0x10); + writedata(0x03); + writedata(0x0E); + writedata(0x09); + writedata(0x00); + + writecommand(ILI9341_GMCTRN1); //Set Gamma + writedata(0x00); + writedata(0x0E); + writedata(0x14); + writedata(0x03); + writedata(0x11); + writedata(0x07); + writedata(0x31); + writedata(0xC1); + writedata(0x48); + writedata(0x08); + writedata(0x0F); + writedata(0x0C); + writedata(0x31); + writedata(0x36); + writedata(0x0F); + + writecommand(ILI9341_SLPOUT); + usleep(120000); + writecommand(ILI9341_DISPON); +} + +void ILI9341::setAddrWindow(uint16_t x0, + uint16_t y0, + uint16_t x1, + uint16_t y1) { + + writecommand(ILI9341_CASET); // Column addr set + writedata(x0 >> 8); + writedata(x0 & 0xFF); // XSTART + writedata(x1 >> 8); + writedata(x1 & 0xFF); // XEND + + writecommand(ILI9341_PASET); // Row addr set + writedata(y0>>8); + writedata(y0); // YSTART + writedata(y1>>8); + writedata(y1); // YEND + + writecommand(ILI9341_RAMWR); // write to RAM +} + +void ILI9341::drawPixel(int16_t x, int16_t y, uint16_t color) { + + if((x < 0) ||(x >= _width) || (y < 0) || (y >= _height)) { + return; + } + + setAddrWindow(x, y, x + 1, y + 1); + + writedata(color >> 8); + writedata(color); +} + +void ILI9341::drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color) { + + // Rudimentary clipping + if((x >= _width) || (y >= _height)) { + return; + } + + if((y+h-1) >= _height) { + h = _height-y; + } + + setAddrWindow(x, y, x, y+h-1); + + uint8_t hi = color >> 8; + uint8_t lo = color; + + lcdCSOn(); + dcHigh(); + + while (h--) { + m_spi.writeByte(hi); + m_spi.writeByte(lo); + } + + lcdCSOff(); +} + +void ILI9341::drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color) { + + // Rudimentary clipping + if((x >= _width) || (y >= _height)) { + return; + } + + if((x+w-1) >= _width) { + w = _width - x; + } + + setAddrWindow(x, y, x+w-1, y); + + uint8_t hi = color >> 8; + uint8_t lo = color; + + lcdCSOn(); + dcHigh(); + + while (w--) { + m_spi.writeByte(hi); + m_spi.writeByte(lo); + } + + lcdCSOff(); +} + +void ILI9341::fillRect(int16_t x, + int16_t y, + int16_t w, + int16_t h, + uint16_t color) { + + // rudimentary clipping (drawChar w/big text requires this) + if((x >= _width) || (y >= _height)) return; + if((x + w - 1) >= _width) w = _width - x; + if((y + h - 1) >= _height) h = _height - y; + + setAddrWindow(x, y, x+w-1, y+h-1); + + uint8_t hi = color >> 8; + uint8_t lo = color; + + lcdCSOn(); + dcHigh(); + + for(y = h; y > 0; y--) { + for(x = w; x > 0; x--) { + m_spi.writeByte(hi); + m_spi.writeByte(lo); + } + } + + lcdCSOff(); +} + +void ILI9341::fillScreen(uint16_t color) { + fillRect(0, 0, _width, _height, color); +} + +void ILI9341::invertDisplay(bool i) { + writecommand(i ? ILI9341_INVON : ILI9341_INVOFF); +} + +uint16_t ILI9341::color565(uint8_t r, uint8_t g, uint8_t b) { + return ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3); +} + +void ILI9341::executeCMDList(const uint8_t *addr) { + uint8_t numCommands, numArgs; + uint16_t ms; + + numCommands = *(addr++); // Number of commands to follow + while (numCommands--) { // For each command... + writecommand(*(addr++)); // Read, issue command + numArgs = *(addr++); // Number of args to follow + ms = numArgs & DELAY; // If hibit set, delay follows args + numArgs &= ~DELAY; // Mask out delay bit + while (numArgs--) { // For each argument... + writedata(*(addr++)); // Read, issue argument + } + + if (ms) { + ms = *(addr++); // Read post-command delay time (ms) + if (ms == 255) { + ms = 500; // If 255, delay for 500 ms + } + usleep(ms * 1000); + } + } +} + +void ILI9341::writecommand(uint8_t c) { + lcdCSOn(); + dcLow(); + m_spi.writeByte(c); + lcdCSOff(); +} + +void ILI9341::writedata(uint8_t d) { + lcdCSOn(); + dcHigh(); + m_spi.writeByte(d); + lcdCSOff(); +} + +mraa::Result ILI9341::lcdCSOn() { + mraa::Result error = mraa::SUCCESS; + + error = m_csLCDPinCtx.write(LOW); + if (error != mraa::SUCCESS) { + mraa::printError (error); + } + + error = m_csSDPinCtx.write(HIGH); + if (error != mraa::SUCCESS) { + mraa::printError (error); + } + + return error; +} + +mraa::Result ILI9341::lcdCSOff() { + mraa::Result error = mraa::SUCCESS; + + error = m_csLCDPinCtx.write(HIGH); + if (error != mraa::SUCCESS) { + mraa::printError (error); + } + + return error; +} + +mraa::Result ILI9341::sdCSOn() { + mraa::Result error = mraa::SUCCESS; + + error = m_csSDPinCtx.write(LOW); + if (error != mraa::SUCCESS) { + mraa::printError (error); + } + + error = m_csLCDPinCtx.write(HIGH); + if (error != mraa::SUCCESS) { + mraa::printError (error); + } + + return error; +} + +mraa::Result ILI9341::sdCSOff() { + mraa::Result error = mraa::SUCCESS; + + error = m_csSDPinCtx.write(HIGH); + if (error != mraa::SUCCESS) { + mraa::printError (error); + } + + return error; +} + +mraa::Result ILI9341::dcHigh() { + mraa::Result error = mraa::SUCCESS; + + error = m_dcPinCtx.write(HIGH); + if (error != mraa::SUCCESS) { + mraa::printError(error); + } + + return error; +} + +mraa::Result ILI9341::dcLow() { + mraa::Result error = mraa::SUCCESS; + + error = m_dcPinCtx.write(LOW); + if (error != mraa::SUCCESS) { + mraa::printError(error); + } + + return error; +} + +mraa::Result ILI9341::rstHigh() { + mraa::Result error = mraa::SUCCESS; + + error = m_rstPinCtx.write(HIGH); + if (error != mraa::SUCCESS) { + mraa::printError(error); + } + + return error; +} + +mraa::Result ILI9341::rstLow() { + mraa::Result error = mraa::SUCCESS; + + error = m_rstPinCtx.write(LOW); + if (error != mraa::SUCCESS) { + mraa::printError(error); + } + + return error; +} \ No newline at end of file diff --git a/src/ili9341/ili9341.h b/src/ili9341/ili9341.h new file mode 100644 index 00000000..fb2d341b --- /dev/null +++ b/src/ili9341/ili9341.h @@ -0,0 +1,345 @@ +/* + * Author: Shawn Hymel + * Copyright (c) 2015 SparkFun Electronics + * + * Credits to Adafruit. + * Based on Adafruit ILI9341 library, see original license in license.txt file. + * + * 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 + +// Includes +#include +#include +#include +#include +#include + +// Defines +#define ILI9341_TFTWIDTH 240 +#define ILI9341_TFTHEIGHT 320 + +#define SPI_FREQ 15000000 + +#define ILI9341_NOP 0x00 +#define ILI9341_SWRESET 0x01 +#define ILI9341_RDDID 0x04 +#define ILI9341_RDDST 0x09 + +#define ILI9341_SLPIN 0x10 +#define ILI9341_SLPOUT 0x11 +#define ILI9341_PTLON 0x12 +#define ILI9341_NORON 0x13 + +#define ILI9341_RDMODE 0x0A +#define ILI9341_RDMADCTL 0x0B +#define ILI9341_RDPIXFMT 0x0C +#define ILI9341_RDIMGFMT 0x0D +#define ILI9341_RDSELFDIAG 0x0F + +#define ILI9341_INVOFF 0x20 +#define ILI9341_INVON 0x21 +#define ILI9341_GAMMASET 0x26 +#define ILI9341_DISPOFF 0x28 +#define ILI9341_DISPON 0x29 + +#define ILI9341_CASET 0x2A +#define ILI9341_PASET 0x2B +#define ILI9341_RAMWR 0x2C +#define ILI9341_RAMRD 0x2E + +#define ILI9341_PTLAR 0x30 +#define ILI9341_MADCTL 0x36 +#define ILI9341_PIXFMT 0x3A + +#define ILI9341_FRMCTR1 0xB1 +#define ILI9341_FRMCTR2 0xB2 +#define ILI9341_FRMCTR3 0xB3 +#define ILI9341_INVCTR 0xB4 +#define ILI9341_DFUNCTR 0xB6 + +#define ILI9341_PWCTR1 0xC0 +#define ILI9341_PWCTR2 0xC1 +#define ILI9341_PWCTR3 0xC2 +#define ILI9341_PWCTR4 0xC3 +#define ILI9341_PWCTR5 0xC4 +#define ILI9341_VMCTR1 0xC5 +#define ILI9341_VMCTR2 0xC7 + +#define ILI9341_RDID1 0xDA +#define ILI9341_RDID2 0xDB +#define ILI9341_RDID3 0xDC +#define ILI9341_RDID4 0xDD + +#define ILI9341_GMCTRP1 0xE0 +#define ILI9341_GMCTRN1 0xE1 + +#define MADCTL_MY 0x80 +#define MADCTL_MX 0x40 +#define MADCTL_MV 0x20 +#define MADCTL_ML 0x10 +#define MADCTL_RGB 0x00 +#define MADCTL_BGR 0x08 +#define MADCTL_MH 0x04 + +#define HIGH 1 +#define LOW 0 + +#define DELAY 0x80 + +// Color definitions +#define ILI9341_BLACK 0x0000 /* 0, 0, 0 */ +#define ILI9341_NAVY 0x000F /* 0, 0, 128 */ +#define ILI9341_DARKGREEN 0x03E0 /* 0, 128, 0 */ +#define ILI9341_DARKCYAN 0x03EF /* 0, 128, 128 */ +#define ILI9341_MAROON 0x7800 /* 128, 0, 0 */ +#define ILI9341_PURPLE 0x780F /* 128, 0, 128 */ +#define ILI9341_OLIVE 0x7BE0 /* 128, 128, 0 */ +#define ILI9341_LIGHTGREY 0xC618 /* 192, 192, 192 */ +#define ILI9341_DARKGREY 0x7BEF /* 128, 128, 128 */ +#define ILI9341_BLUE 0x001F /* 0, 0, 255 */ +#define ILI9341_GREEN 0x07E0 /* 0, 255, 0 */ +#define ILI9341_CYAN 0x07FF /* 0, 255, 255 */ +#define ILI9341_RED 0xF800 /* 255, 0, 0 */ +#define ILI9341_MAGENTA 0xF81F /* 255, 0, 255 */ +#define ILI9341_YELLOW 0xFFE0 /* 255, 255, 0 */ +#define ILI9341_WHITE 0xFFFF /* 255, 255, 255 */ +#define ILI9341_ORANGE 0xFD20 /* 255, 165, 0 */ +#define ILI9341_GREENYELLOW 0xAFE5 /* 173, 255, 47 */ +#define ILI9341_PINK 0xF81F + +namespace upm { + + /** + * @brief ILI9341 LCD library + * @defgroup ili9341 libupm-ili9341 + * @ingroup adafruit spi display + */ + /** + * @library ili9341 + * @sensor ili9341 + * @comname ILI9341 LCD + * @type display + * @man adafruit + * @web http://www.adafruit.com/product/2090 + * @con spi + * + * @brief API for the ILI9342 LCd + * + * This module defines the interface for the ILI9341 display library + * + * @image html ili9341.jpg + * @snippet ili9341.cxx Interesting + */ + class ILI9341 : public GFX { + public: + /** + * Instantiates an ILI9341 object + * + * @param csLCD LCD chip select pin + * @param csSD SD card select pin + * @param dc Data/command pin + * @param rst Reset pin + */ + ILI9341(uint8_t csLCD, uint8_t csSD, uint8_t dc, uint8_t rst); + + /** + * Returns the name of the component + */ + std::string name() { + return m_name; + } + + /** + * Initializes GPIOs used to talk to the LCD + */ + void initModule(); + + /** + * Configures the LCD driver chip via SPI + */ + void configModule(); + + /** + * Sets the window size inside the screen where pixel data is + * written. Concrete implementation from GFX interface. + * + * @param x0 First coordinate + * @param y0 First coordinate + * @param x1 Second coordinate + * @param y1 Second coordinate + */ + void setAddrWindow(uint16_t x0, + uint16_t y0, + uint16_t x1, + uint16_t y1); + + /** + * Sends a pixel color (RGB) to the driver chip. Concrete + * implementation from GFX interface. + * + * @param x Axis on the horizontal scale + * @param y Axis on the vertical scale + * @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15] + */ + void drawPixel(int16_t x, int16_t y, uint16_t color); + + /** + * Draws a vertical line using minimal SPI writes. + * + * @param x Axis on the horizontal scale to begin line + * @param y Axis on the vertical scale to begin line + * @param h Height of line in pixels + * @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15] + */ + void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color); + + /** + * Draws a horizontal line using minimal SPI writes. + * + * @param x Axis on the horizontal scale to begin line + * @param y Axis on the vertical scale to begin line + * @param w Width of line in pixels + * @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15] + */ + void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color); + + /** + * Draw a filled rectangle. + * + * @param x Axis on the horizontal scale of upper-left corner + * @param y Axis on the vertical scale of upper-left corner + * @param w Width of rectangle in pixels + * @param h Height of rectangle in pixels + * @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15] + */ + void fillRect(int16_t x, + int16_t y, + int16_t w, + int16_t h, + uint16_t color); + + /** + * Fill the screen with a single color. + * + * @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15] + */ + void fillScreen(uint16_t color); + + /** + * Sets the screen to one of four 90 deg rotations. + * + * @param r Rotation setting: 0, 1, 2, 3 + */ + void setRotation(uint8_t r); + + /** + * Invert colors on the display. + * + * @param i True or false to invert colors + */ + void invertDisplay(bool i); + + /** + * Pass 8-bit R, G, B values and get back 16-bit packed color. + * + * @param r Red color 0-31 + * @param g Green color 0-63 + * @param b blue color 0-31 + * @return 16-bit packed color (RGB) value + */ + uint16_t color565(uint8_t r, uint8_t g, uint8_t b); + + /** + * Executes a set of commands and data. + * + * @param addr Pointer to the start of the commands/data section + */ + void executeCMDList(const uint8_t *addr); + + /** + * Sends a command to the display driver via SPI. + * + * @param c Command to be written + */ + void writecommand(uint8_t c); + + /** + * Sends data to the display driver via SPI + * + * @param d Data to be written + */ + void writedata(uint8_t d); + + /** + * Set LCD chip select to LOW + */ + mraa::Result lcdCSOn(); + + /** + * Set LCD chip select to HIGH + */ + mraa::Result lcdCSOff(); + + /** + * Set SD card chip select to LOW + */ + mraa::Result sdCSOn(); + + /** + * Set SD card chip select to HIGH + */ + mraa::Result sdCSOff(); + + /** + * Set data/command line to HIGH + */ + mraa::Result dcHigh(); + + /** + * Set data/command line to LOW + */ + mraa::Result dcLow(); + + /** + * Set reset line to HIGH + */ + mraa::Result rstHigh(); + + /** + * Set reset line to LOW + */ + mraa::Result rstLow(); + + private: + mraa::Spi m_spi; + uint8_t m_spiBuffer[32]; + + mraa::Gpio m_csLCDPinCtx; + mraa::Gpio m_csSDPinCtx; + mraa::Gpio m_dcPinCtx; + mraa::Gpio m_rstPinCtx; + + std::string m_name; + }; +} + diff --git a/src/ili9341/jsupm_ili9341.i b/src/ili9341/jsupm_ili9341.i new file mode 100644 index 00000000..db58074c --- /dev/null +++ b/src/ili9341/jsupm_ili9341.i @@ -0,0 +1,12 @@ +%module jsupm_ili9341 +%include "../upm.i" + +%include "gfx.h" +%{ + #include "gfx.h" +%} + +%include "ili9341.h" +%{ + #include "ili9341.h" +%} diff --git a/src/ili9341/pyupm_ili9341.i b/src/ili9341/pyupm_ili9341.i new file mode 100644 index 00000000..d8cb1d74 --- /dev/null +++ b/src/ili9341/pyupm_ili9341.i @@ -0,0 +1,16 @@ +// Include doxygen-generated documentation +%include "pyupm_doxy2swig.i" +%module pyupm_ili9341 +%include "../upm.i" + +%feature("autodoc", "3"); + +%include "gfx.h" +%{ + #include "gfx.h" +%} + +%include "ili9341.h" +%{ + #include "ili9341.h" +%}