summaryrefslogtreecommitdiff
path: root/peripheral/libupm/src/ili9341/ili9341_gfx.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'peripheral/libupm/src/ili9341/ili9341_gfx.hpp')
-rw-r--r--peripheral/libupm/src/ili9341/ili9341_gfx.hpp406
1 files changed, 406 insertions, 0 deletions
diff --git a/peripheral/libupm/src/ili9341/ili9341_gfx.hpp b/peripheral/libupm/src/ili9341/ili9341_gfx.hpp
new file mode 100644
index 0000000..c62e81e
--- /dev/null
+++ b/peripheral/libupm/src/ili9341/ili9341_gfx.hpp
@@ -0,0 +1,406 @@
+/**
+ * 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 <mraa.hpp>
+
+#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