Initial commit
This commit is contained in:
683
libs/ili9341/include/tft.h
Normal file
683
libs/ili9341/include/tft.h
Normal file
@ -0,0 +1,683 @@
|
||||
/*
|
||||
* High level TFT functions
|
||||
* Author: LoBo 04/2017, https://github/loboris
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _mgos_ili9341_H_
|
||||
#define _mgos_ili9341_H_
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "tftspi.h"
|
||||
|
||||
typedef struct {
|
||||
uint16_t x1;
|
||||
uint16_t y1;
|
||||
uint16_t x2;
|
||||
uint16_t y2;
|
||||
} dispWin_t;
|
||||
|
||||
typedef struct {
|
||||
uint8_t *font;
|
||||
uint8_t x_size;
|
||||
uint8_t y_size;
|
||||
uint8_t offset;
|
||||
uint16_t numchars;
|
||||
uint16_t size;
|
||||
uint8_t max_x_size;
|
||||
uint8_t bitmap;
|
||||
color_t color;
|
||||
} Font;
|
||||
|
||||
|
||||
//==========================================================================================
|
||||
// ==== Global variables ===================================================================
|
||||
//==========================================================================================
|
||||
extern uint8_t orientation; // current screen orientation
|
||||
extern uint16_t font_rotate; // current font font_rotate angle (0~395)
|
||||
extern uint8_t font_transparent; // if not 0 draw fonts transparent
|
||||
extern uint8_t font_forceFixed; // if not zero force drawing proportional fonts with fixed width
|
||||
extern uint8_t font_buffered_char;
|
||||
extern uint8_t font_line_space; // additional spacing between text lines; added to font height
|
||||
extern uint8_t text_wrap; // if not 0 wrap long text to the new line, else clip
|
||||
extern color_t _fg; // current foreground color for fonts
|
||||
extern color_t _bg; // current background for non transparent fonts
|
||||
extern dispWin_t dispWin; // display clip window
|
||||
extern float _angleOffset; // angle offset for arc, polygon and line by angle functions
|
||||
extern uint8_t image_debug; // print debug messages during image decode if set to 1
|
||||
|
||||
extern Font cfont; // Current font structure
|
||||
|
||||
extern int mgos_ili9341_X; // X position of the next character after mgos_ili9341_print() function
|
||||
extern int mgos_ili9341_Y; // Y position of the next character after mgos_ili9341_print() function
|
||||
|
||||
extern uint32_t tp_calx; // touch screen X calibration constant
|
||||
extern uint32_t tp_caly; // touch screen Y calibration constant
|
||||
// =========================================================================================
|
||||
|
||||
|
||||
// Buffer is created during jpeg decode for sending data
|
||||
// Total size of the buffer is 2 * (JPG_IMAGE_LINE_BUF_SIZE * 3)
|
||||
// The size must be multiple of 256 bytes !!
|
||||
#define JPG_IMAGE_LINE_BUF_SIZE 512
|
||||
|
||||
// --- Constants for ellipse function ---
|
||||
#define TFT_ELLIPSE_UPPER_RIGHT 0x01
|
||||
#define TFT_ELLIPSE_UPPER_LEFT 0x02
|
||||
#define TFT_ELLIPSE_LOWER_LEFT 0x04
|
||||
#define TFT_ELLIPSE_LOWER_RIGHT 0x08
|
||||
|
||||
// Constants for Arc function
|
||||
// number representing the maximum angle (e.g. if 100, then if you pass in start=0 and end=50, you get a half circle)
|
||||
// this can be changed with setArcParams function at runtime
|
||||
#define DEFAULT_ARC_ANGLE_MAX 360
|
||||
// rotational offset in degrees defining position of value 0 (-90 will put it at the top of circle)
|
||||
// this can be changed with setAngleOffset function at runtime
|
||||
#define DEFAULT_ANGLE_OFFSET -90
|
||||
|
||||
#define PI 3.14159265359
|
||||
|
||||
#define MIN_POLIGON_SIDES 3
|
||||
#define MAX_POLIGON_SIDES 60
|
||||
|
||||
// === Color names constants ===
|
||||
extern const color_t ILI9341_BLACK;
|
||||
extern const color_t ILI9341_NAVY;
|
||||
extern const color_t ILI9341_DARKGREEN;
|
||||
extern const color_t ILI9341_DARKCYAN;
|
||||
extern const color_t ILI9341_MAROON;
|
||||
extern const color_t ILI9341_PURPLE;
|
||||
extern const color_t ILI9341_OLIVE;
|
||||
extern const color_t ILI9341_LIGHTGREY;
|
||||
extern const color_t ILI9341_DARKGREY;
|
||||
extern const color_t ILI9341_BLUE;
|
||||
extern const color_t ILI9341_GREEN;
|
||||
extern const color_t ILI9341_CYAN;
|
||||
extern const color_t ILI9341_RED;
|
||||
extern const color_t ILI9341_MAGENTA;
|
||||
extern const color_t ILI9341_YELLOW;
|
||||
extern const color_t ILI9341_WHITE;
|
||||
extern const color_t ILI9341_ORANGE;
|
||||
extern const color_t ILI9341_GREENYELLOW;
|
||||
extern const color_t ILI9341_PINK;
|
||||
|
||||
// === Color invert constants ===
|
||||
#define INVERT_ON 1
|
||||
#define INVERT_OFF 0
|
||||
|
||||
// === Special coordinates constants ===
|
||||
#define CENTER -9003
|
||||
#define RIGHT -9004
|
||||
#define BOTTOM -9004
|
||||
|
||||
#define LASTX 7000
|
||||
#define LASTY 8000
|
||||
|
||||
// === Embedded fonts constants ===
|
||||
#define DEFAULT_FONT 0
|
||||
#define DEJAVU18_FONT 1
|
||||
#define DEJAVU24_FONT 2
|
||||
#define UBUNTU16_FONT 3
|
||||
#define COMIC24_FONT 4
|
||||
#define MINYA24_FONT 5
|
||||
#define TOONEY32_FONT 6
|
||||
#define SMALL_FONT 7
|
||||
#define DEF_SMALL_FONT 8
|
||||
#define FONT_7SEG 9
|
||||
#define USER_FONT 10 // font will be read from file
|
||||
|
||||
|
||||
|
||||
// ===== PUBLIC FUNCTIONS =========================================================================
|
||||
|
||||
|
||||
/*
|
||||
* Draw pixel at given x,y coordinates
|
||||
*
|
||||
* Params:
|
||||
* x: horizontal position
|
||||
* y: vertical position
|
||||
* color: pixel color
|
||||
* sel: if not 0 activate CS before and deactivat after sending pixel data to display
|
||||
* when sending multiple pixels it is faster to activate the CS first,
|
||||
* send all pixels an deactivate CS after all pixela was sent
|
||||
*/
|
||||
//-------------------------------------------------------------------
|
||||
void mgos_ili9341_drawPixel(int16_t x, int16_t y, color_t color, uint8_t sel);
|
||||
|
||||
/*
|
||||
* Read pixel color value from display GRAM at given x,y coordinates
|
||||
*
|
||||
* Params:
|
||||
* x: horizontal position
|
||||
* y: vertical position
|
||||
*
|
||||
* Returns:
|
||||
* pixel color at x,y
|
||||
*/
|
||||
//------------------------------------------
|
||||
color_t mgos_ili9341_readPixel(int16_t x, int16_t y);
|
||||
|
||||
/*
|
||||
* Draw vertical line at given x,y coordinates
|
||||
*
|
||||
* Params:
|
||||
* x: horizontal start position
|
||||
* y: vertical start position
|
||||
* h: line height in pixels
|
||||
* color: line color
|
||||
*/
|
||||
//---------------------------------------------------------------------
|
||||
void mgos_ili9341_drawFastVLine(int16_t x, int16_t y, int16_t h, color_t color);
|
||||
|
||||
/*
|
||||
* Draw horizontal line at given x,y coordinates
|
||||
*
|
||||
* Params:
|
||||
* x: horizontal start position
|
||||
* y: vertical start position
|
||||
* w: line width in pixels
|
||||
* color: line color
|
||||
*/
|
||||
//---------------------------------------------------------------------
|
||||
void mgos_ili9341_drawFastHLine(int16_t x, int16_t y, int16_t w, color_t color);
|
||||
|
||||
/*
|
||||
* Draw line on screen
|
||||
*
|
||||
* Params:
|
||||
* x0: horizontal start position
|
||||
* y0: vertical start position
|
||||
* x1: horizontal end position
|
||||
* y1: vertical end position
|
||||
* color: line color
|
||||
*/
|
||||
//-------------------------------------------------------------------------------
|
||||
void mgos_ili9341_drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, color_t color);
|
||||
|
||||
|
||||
/*
|
||||
* Draw line on screen from (x,y) point at given angle
|
||||
* Line drawing angle starts at lower right quadrant of the screen and is offseted by
|
||||
* '_angleOffset' global variable (default: -90 degrees)
|
||||
*
|
||||
* Params:
|
||||
* x: horizontal start position
|
||||
* y: vertical start position
|
||||
* start: start offset from (x,y)
|
||||
* len: length of the line
|
||||
* angle: line angle in degrees
|
||||
* color: line color
|
||||
*/
|
||||
//-----------------------------------------------------------------------------------------------------------
|
||||
void mgos_ili9341_drawLineByAngle(uint16_t x, uint16_t y, uint16_t start, uint16_t len, uint16_t angle, color_t color);
|
||||
|
||||
/*
|
||||
* Fill given rectangular screen region with color
|
||||
*
|
||||
* Params:
|
||||
* x: horizontal rect start position
|
||||
* y: vertical rect start position
|
||||
* w: rectangle width
|
||||
* h: rectangle height
|
||||
* color: fill color
|
||||
*/
|
||||
//---------------------------------------------------------------------------
|
||||
void mgos_ili9341_fillRect(int16_t x, int16_t y, int16_t w, int16_t h, color_t color);
|
||||
|
||||
/*
|
||||
* Draw rectangle on screen
|
||||
*
|
||||
* Params:
|
||||
* x: horizontal rect start position
|
||||
* y: vertical rect start position
|
||||
* w: rectangle width
|
||||
* h: rectangle height
|
||||
* color: rect line color
|
||||
*/
|
||||
//------------------------------------------------------------------------------
|
||||
void mgos_ili9341_drawRect(uint16_t x1,uint16_t y1,uint16_t w,uint16_t h, color_t color);
|
||||
|
||||
/*
|
||||
* Draw rectangle with rounded corners on screen
|
||||
*
|
||||
* Params:
|
||||
* x: horizontal rect start position
|
||||
* y: vertical rect start position
|
||||
* w: rectangle width
|
||||
* h: rectangle height
|
||||
* r: corner radius
|
||||
* color: rectangle color
|
||||
*/
|
||||
//----------------------------------------------------------------------------------------------
|
||||
void mgos_ili9341_drawRoundRect(int16_t x, int16_t y, uint16_t w, uint16_t h, uint16_t r, color_t color);
|
||||
|
||||
/*
|
||||
* Fill given rectangular screen region with rounded corners with color
|
||||
*
|
||||
* Params:
|
||||
* x: horizontal rect start position
|
||||
* y: vertical rect start position
|
||||
* w: rectangle width
|
||||
* h: rectangle height
|
||||
* r: corner radius
|
||||
* color: fill color
|
||||
*/
|
||||
//----------------------------------------------------------------------------------------------
|
||||
void mgos_ili9341_fillRoundRect(int16_t x, int16_t y, uint16_t w, uint16_t h, uint16_t r, color_t color);
|
||||
|
||||
/*
|
||||
* Fill the whole screen with color
|
||||
*
|
||||
* Params:
|
||||
* color: fill color
|
||||
*/
|
||||
//--------------------------------
|
||||
void mgos_ili9341_fillScreen(color_t color);
|
||||
|
||||
/*
|
||||
* Fill the current clip window with color
|
||||
*
|
||||
* Params:
|
||||
* color: fill color
|
||||
*/
|
||||
//---------------------------------
|
||||
void mgos_ili9341_fillWindow(color_t color);
|
||||
|
||||
/*
|
||||
* Draw triangle on screen
|
||||
*
|
||||
* Params:
|
||||
* x0: first triangle point x position
|
||||
* y0: first triangle point y position
|
||||
* x0: second triangle point x position
|
||||
* y0: second triangle point y position
|
||||
* x0: third triangle point x position
|
||||
* y0: third triangle point y position
|
||||
* color: triangle color
|
||||
*/
|
||||
//-----------------------------------------------------------------------------------------------------------------
|
||||
void mgos_ili9341_drawTriangle(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, color_t color);
|
||||
|
||||
/*
|
||||
* Fill triangular screen region with color
|
||||
*
|
||||
* Params:
|
||||
* x0: first triangle point x position
|
||||
* y0: first triangle point y position
|
||||
* x0: second triangle point x position
|
||||
* y0: second triangle point y position
|
||||
* x0: third triangle point x position
|
||||
* y0: third triangle point y position
|
||||
* color: fill color
|
||||
*/
|
||||
//-----------------------------------------------------------------------------------------------------------------
|
||||
void mgos_ili9341_fillTriangle(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, color_t color);
|
||||
|
||||
/*
|
||||
* Draw circle on screen
|
||||
*
|
||||
* Params:
|
||||
* x: circle center x position
|
||||
* y: circle center x position
|
||||
* r: circle radius
|
||||
* color: circle color
|
||||
*/
|
||||
//-------------------------------------------------------------------
|
||||
void mgos_ili9341_drawCircle(int16_t x, int16_t y, int radius, color_t color);
|
||||
|
||||
/*
|
||||
* Fill circle on screen with color
|
||||
*
|
||||
* Params:
|
||||
* x: circle center x position
|
||||
* y: circle center x position
|
||||
* r: circle radius
|
||||
* color: circle fill color
|
||||
*/
|
||||
//-------------------------------------------------------------------
|
||||
void mgos_ili9341_fillCircle(int16_t x, int16_t y, int radius, color_t color);
|
||||
|
||||
/*
|
||||
* Draw ellipse on screen
|
||||
*
|
||||
* Params:
|
||||
* x0: ellipse center x position
|
||||
* y0: ellipse center x position
|
||||
* rx: ellipse horizontal radius
|
||||
* ry: ellipse vertical radius
|
||||
* option: drawing options, multiple options can be combined
|
||||
1 (mgos_ili9341_ELLIPSE_UPPER_RIGHT) draw upper right corner
|
||||
2 (mgos_ili9341_ELLIPSE_UPPER_LEFT) draw upper left corner
|
||||
4 (mgos_ili9341_ELLIPSE_LOWER_LEFT) draw lower left corner
|
||||
8 (mgos_ili9341_ELLIPSE_LOWER_RIGHT) draw lower right corner
|
||||
to draw the whole ellipse use option value 15 (1 | 2 | 4 | 8)
|
||||
*
|
||||
* color: circle color
|
||||
*/
|
||||
//------------------------------------------------------------------------------------------------------
|
||||
void mgos_ili9341_drawEllipse(uint16_t x0, uint16_t y0, uint16_t rx, uint16_t ry, color_t color, uint8_t option);
|
||||
|
||||
/*
|
||||
* Fill elliptical region on screen
|
||||
*
|
||||
* Params:
|
||||
* x0: ellipse center x position
|
||||
* y0: ellipse center x position
|
||||
* rx: ellipse horizontal radius
|
||||
* ry: ellipse vertical radius
|
||||
* option: drawing options, multiple options can be combined
|
||||
1 (mgos_ili9341_ELLIPSE_UPPER_RIGHT) fill upper right corner
|
||||
2 (mgos_ili9341_ELLIPSE_UPPER_LEFT) fill upper left corner
|
||||
4 (mgos_ili9341_ELLIPSE_LOWER_LEFT) fill lower left corner
|
||||
8 (mgos_ili9341_ELLIPSE_LOWER_RIGHT) fill lower right corner
|
||||
to fill the whole ellipse use option value 15 (1 | 2 | 4 | 8)
|
||||
*
|
||||
* color: fill color
|
||||
*/
|
||||
//------------------------------------------------------------------------------------------------------
|
||||
void mgos_ili9341_fillEllipse(uint16_t x0, uint16_t y0, uint16_t rx, uint16_t ry, color_t color, uint8_t option);
|
||||
|
||||
|
||||
/*
|
||||
* Draw circle arc on screen
|
||||
* Arc drawing angle starts at lower right quadrant of the screen and is offseted by
|
||||
* '_angleOffset' global variable (default: -90 degrees)
|
||||
*
|
||||
* Params:
|
||||
* cx: arc center X position
|
||||
* cy: arc center Y position
|
||||
* th: thickness of the drawn arc
|
||||
* ry: arc vertical radius
|
||||
* start: arc start angle in degrees
|
||||
* end: arc end angle in degrees
|
||||
* color: arc outline color
|
||||
* fillcolor: arc fill color
|
||||
*/
|
||||
//----------------------------------------------------------------------------------------------------------------------------
|
||||
void mgos_ili9341_drawArc(uint16_t cx, uint16_t cy, uint16_t r, uint16_t th, float start, float end, color_t color, color_t fillcolor);
|
||||
|
||||
|
||||
/*
|
||||
* Draw polygon on screen
|
||||
*
|
||||
* Params:
|
||||
* cx: polygon center X position
|
||||
* cy: arc center Y position
|
||||
* sides: number of polygon sides; MAX_POLIGON_SIDES ~ MAX_POLIGON_SIDES (3 ~ 60)
|
||||
* diameter: diameter of the circle inside which the polygon is drawn
|
||||
* color: polygon outline color
|
||||
* fill: polygon fill color; if same as color, polygon is not filled
|
||||
* deg: polygon rotation angle; 0 ~ 360
|
||||
* th: thickness of the polygon outline
|
||||
*/
|
||||
//--------------------------------------------------------------------------------------------------------------
|
||||
void mgos_ili9341_drawPolygon(int cx, int cy, int sides, int diameter, color_t color, color_t fill, int deg, uint8_t th);
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------
|
||||
//void mgos_ili9341_drawStar(int cx, int cy, int diameter, color_t color, bool fill, float factor);
|
||||
|
||||
|
||||
/*
|
||||
* Set the font used for writing the text to display.
|
||||
*
|
||||
* ------------------------------------------------------------------------------------
|
||||
* For 7 segment font only characters 0,1,2,3,4,5,6,7,8,9, . , - , : , / are available.
|
||||
* Character ‘/‘ draws the degree sign.
|
||||
* ------------------------------------------------------------------------------------
|
||||
*
|
||||
* Params:
|
||||
* font: font number; use defined font names
|
||||
* font_file: pointer to font file name; NULL for embeded fonts
|
||||
*/
|
||||
//----------------------------------------------------
|
||||
void mgos_ili9341_setFont(uint8_t font, const char *font_file);
|
||||
|
||||
void mgos_ili9341_setFontColor(color_t color);
|
||||
|
||||
/*
|
||||
* Returns current font height & width in pixels.
|
||||
*
|
||||
* Params:
|
||||
* width: pointer to returned font width
|
||||
* height: pointer to returned font height
|
||||
*/
|
||||
//-------------------------------------------
|
||||
int mgos_ili9341_getfontsize(int *width, int* height);
|
||||
|
||||
|
||||
/*
|
||||
* Returns current font height in pixels.
|
||||
*
|
||||
*/
|
||||
//----------------------
|
||||
int mgos_ili9341_getfontheight();
|
||||
|
||||
/*
|
||||
* Write text to display.
|
||||
*
|
||||
* Rotation of the displayed text depends on 'font_rotate' variable (0~360)
|
||||
* if 'font_transparent' variable is set to 1, no background pixels will be printed
|
||||
*
|
||||
* If the text does not fit the screen width it will be clipped (if text_wrap=0),
|
||||
* or continued on next line (if text_wrap=1)
|
||||
*
|
||||
* Two special characters are allowed in strings:
|
||||
* ‘\r’ CR (0x0D), clears the display to EOL
|
||||
* ‘\n’ LF (ox0A), continues to the new line, x=0
|
||||
*
|
||||
* Params:
|
||||
* st: pointer to null terminated string to be printed
|
||||
* x: horizontal position of the upper left point in pixels
|
||||
* Special values can be entered:
|
||||
* CENTER, centers the text
|
||||
* RIGHT, right justifies the text
|
||||
* LASTX, continues from last X position; offset can be used: LASTX+n
|
||||
* y: vertical position of the upper left point in pixels
|
||||
* Special values can be entered:
|
||||
* CENTER, centers the text
|
||||
* BOTTOM, bottom justifies the text
|
||||
* LASTY, continues from last Y position; offset can be used: LASTY+n
|
||||
*
|
||||
*/
|
||||
//-------------------------------------
|
||||
void mgos_ili9341_print(const char *const st, int x, int y);
|
||||
|
||||
/*
|
||||
* Set atributes for 7 segment vector font
|
||||
* == 7 segment font must be the current font to this function to have effect ==
|
||||
*
|
||||
* Params:
|
||||
* l: 6~40; distance between bars in pixels
|
||||
* w: 1~12, max l/2; bar width in pixels
|
||||
* outline: draw font outline if set to 1
|
||||
* color: font outline color, only used if outline=1
|
||||
*
|
||||
*/
|
||||
//-------------------------------------------------------------------------
|
||||
void set_7seg_font_atrib(uint8_t l, uint8_t w, int outline, color_t color);
|
||||
|
||||
/*
|
||||
* Sets the clipping area coordinates.
|
||||
* All writing to screen is clipped to that area.
|
||||
* Starting x & y in all functions will be adjusted to the clipping area.
|
||||
*
|
||||
* Params:
|
||||
* x1,y1: upper left point of the clipping area
|
||||
* x2,y2: bottom right point of the clipping area
|
||||
*
|
||||
*/
|
||||
//----------------------------------------------------------------------
|
||||
void mgos_ili9341_setclipwin(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
|
||||
|
||||
/*
|
||||
* Resets the clipping area to full screen (0,0),(_wodth,_height)
|
||||
*
|
||||
*/
|
||||
//----------------------
|
||||
void mgos_ili9341_resetclipwin();
|
||||
|
||||
/*
|
||||
* Save current clipping area to temporary variable
|
||||
*
|
||||
*/
|
||||
//---------------------
|
||||
void mgos_ili9341_saveClipWin();
|
||||
|
||||
/*
|
||||
* Restore current clipping area from temporary variable
|
||||
*
|
||||
*/
|
||||
//------------------------
|
||||
void mgos_ili9341_restoreClipWin();
|
||||
|
||||
/*
|
||||
* Set the screen rotation
|
||||
* Also resets the clip window and clears the screen with current background color
|
||||
*
|
||||
* Params:
|
||||
* rot: 0~3; screen rotation; use defined rotation constants:
|
||||
* PORTRAIT, LANDSCAPE, PORTRAIT_FLIP, LANDSCAPE_FLIP
|
||||
*
|
||||
*/
|
||||
//--------------------------------
|
||||
void mgos_ili9341_setRotation(uint8_t rot);
|
||||
|
||||
/*
|
||||
* Set inverted/normal colors
|
||||
*
|
||||
* Params:
|
||||
* mode: 0 or 1; use defined constants: INVERT_ON or INVERT_OFF
|
||||
*
|
||||
*/
|
||||
//-----------------------------------------
|
||||
void mgos_ili9341_invertDisplay(const uint8_t mode);
|
||||
|
||||
/*
|
||||
* Select gamma curve
|
||||
* Params:
|
||||
* gamma: gama curve, values 0~3
|
||||
*/
|
||||
//=================================
|
||||
void mgos_ili9341_setGammaCurve(uint8_t gm);
|
||||
|
||||
/*
|
||||
* Compare two color structures
|
||||
* Returns 0 if equal, 1 if not equal
|
||||
*
|
||||
* Params:
|
||||
* c1, c2: colors to be compared
|
||||
*/
|
||||
//---------------------------------------------
|
||||
int mgos_ili9341_compare_colors(color_t c1, color_t c2);
|
||||
|
||||
/*
|
||||
* returns the string width in pixels.
|
||||
* Useful for positions strings on the screen.
|
||||
*/
|
||||
//--------------------------------
|
||||
int mgos_ili9341_getStringWidth(const char* const str);
|
||||
|
||||
|
||||
/*
|
||||
* Fills the rectangle occupied by string with current background color
|
||||
*/
|
||||
void mgos_ili9341_clearStringRect(int x, int y, char *str);
|
||||
|
||||
/*
|
||||
* Converts the components of a color, as specified by the HSB model,
|
||||
* to an equivalent set of values for the default RGB model.
|
||||
|
||||
* The color structure that is returned by HSBtoRGB encodes the value of a color as R, G & B component
|
||||
*
|
||||
* Params:
|
||||
* _hue: float; any number, the floor of this number is subtracted from it to create a fraction between 0 and 1.
|
||||
* This fractional number is then multiplied by 360 to produce the hue angle in the HSB color model.
|
||||
* _sat: float; 0 ~ 1.0
|
||||
* _brightness: float; 0 ~ 1.0
|
||||
*
|
||||
*/
|
||||
//----------------------------------------------------------
|
||||
color_t HSBtoRGB(float _hue, float _sat, float _brightness);
|
||||
|
||||
/*
|
||||
* Decodes and displays JPG image
|
||||
* Limits:
|
||||
* Baseline only. Progressive and Lossless JPEG format are not supported.
|
||||
* Image size: Up to 65520 x 65520 pixels
|
||||
* Color space: YCbCr three components only. Gray scale image is not supported.
|
||||
* Sampling factor: 4:4:4, 4:2:2 or 4:2:0.
|
||||
*
|
||||
* Params:
|
||||
* x: image left position; constants CENTER & RIGHT can be used; negative value is accepted
|
||||
* y: image top position; constants CENTER & BOTTOM can be used; negative value is accepted
|
||||
* scale: image scale factor: 0~3; if scale>0, image is scaled by factor 1/(2^scale) (1/2, 1/4 or 1/8)
|
||||
* fname: pointer to the name of the file from which the image will be read
|
||||
* if set to NULL, image will be read from memory buffer pointed to by 'buf'
|
||||
* buf: pointer to the memory buffer from which the image will be read; used if fname=NULL
|
||||
* size: size of the memory buffer from which the image will be read; used if fname=NULL & buf!=NULL
|
||||
*
|
||||
*/
|
||||
//-----------------------------------------------------------------------------------
|
||||
void mgos_ili9341_jpg_image(int x, int y, uint8_t scale, char *fname, uint8_t *buf, int size);
|
||||
|
||||
/*
|
||||
* Decodes and displays BMP image
|
||||
* Only uncompressed RGB 24-bit with no color space information BMP images can be displayed
|
||||
*
|
||||
* Params:
|
||||
* x: image left position; constants CENTER & RIGHT can be used; negative value is accepted
|
||||
* y: image top position; constants CENTER & BOTTOM can be used; negative value is accepted
|
||||
* scale: image scale factor: 0~7; if scale>0, image is scaled by factor 1/(scale+1)
|
||||
* fname: pointer to the name of the file from which the image will be read
|
||||
* if set to NULL, image will be read from memory buffer pointed to by 'imgbuf'
|
||||
* imgbuf: pointer to the memory buffer from which the image will be read; used if fname=NULL
|
||||
* size: size of the memory buffer from which the image will be read; used if fname=NULL & imgbuf!=NULL
|
||||
*
|
||||
*/
|
||||
//-------------------------------------------------------------------------------------
|
||||
int mgos_ili9341_bmp_image(int x, int y, uint8_t scale, char *fname, uint8_t *imgbuf, int size);
|
||||
|
||||
/*
|
||||
* Compile font c source file to .fnt file
|
||||
* which can be used in mgos_ili9341_setFont() function to select external font
|
||||
* Created file have the same name as source file and extension .fnt
|
||||
*
|
||||
* Params:
|
||||
* fontfile: pointer to c source font file name; must have .c extension
|
||||
* dbg: if set to 1, prints debug information
|
||||
*
|
||||
* Returns:
|
||||
* 0 on success
|
||||
* err no on error
|
||||
*
|
||||
*/
|
||||
//------------------------------------------------
|
||||
int compile_font_file(char *fontfile, uint8_t dbg);
|
||||
|
||||
/*
|
||||
* Get all font's characters to buffer
|
||||
*/
|
||||
void getFontCharacters(uint8_t *buf);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Set foreground color
|
||||
*/
|
||||
void mgos_ili9341_set_fg(const color_t *color);
|
||||
void mgos_ili9341_set_bg(const color_t *color);
|
||||
|
||||
/**
|
||||
* @brief Get foreground color
|
||||
*/
|
||||
color_t *mgos_ili9341_get_fg(void);
|
||||
color_t *mgos_ili9341_get_bg(void);
|
||||
|
||||
/**
|
||||
* @brief MGOS lib init
|
||||
*/
|
||||
bool mgos_ili9341_init(void);
|
||||
|
||||
|
||||
#endif
|
211
libs/ili9341/include/tftspi.h
Normal file
211
libs/ili9341/include/tftspi.h
Normal file
@ -0,0 +1,211 @@
|
||||
/*
|
||||
*
|
||||
* HIGH SPEED LOW LEVEL DISPLAY FUNCTIONS USING DIRECT TRANSFER MODE
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _TFTSPI_H_
|
||||
#define _TFTSPI_H_
|
||||
|
||||
#include "tftspi.h"
|
||||
#include "lobo_spi.h"
|
||||
#include "sdkconfig.h"
|
||||
|
||||
// === Screen orientation constants ===
|
||||
#define PORTRAIT 0
|
||||
#define LANDSCAPE 1
|
||||
#define PORTRAIT_FLIP 2
|
||||
#define LANDSCAPE_FLIP 3
|
||||
|
||||
// ** Set the correct configuration for Adafruit TFT Feather
|
||||
// ---------------------------------------------------------
|
||||
#define DEFAULT_TFT_DISPLAY_WIDTH 240
|
||||
#define DEFAULT_TFT_DISPLAY_HEIGHT 320
|
||||
#define DISP_COLOR_BITS_24 0x66
|
||||
#define DEFAULT_GAMMA_CURVE 0
|
||||
#define DEFAULT_SPI_CLOCK 26000000
|
||||
#define TFT_RGB_BGR 0x08
|
||||
|
||||
// ---------------------------------------------------------
|
||||
|
||||
// ##############################################################
|
||||
// #### Global variables ####
|
||||
// ##############################################################
|
||||
|
||||
// ==== Spi clock for reading data from display memory in Hz ====
|
||||
extern uint32_t max_rdclock;
|
||||
|
||||
// ==== Display dimensions in pixels ============================
|
||||
extern int _width;
|
||||
extern int _height;
|
||||
|
||||
// ==== Spi device handles for display and touch screen =========
|
||||
extern spi_lobo_device_handle_t disp_spi;
|
||||
|
||||
// ##############################################################
|
||||
|
||||
// 24-bit color type structure
|
||||
typedef struct __attribute__((__packed__)) {
|
||||
//typedef struct {
|
||||
uint8_t r;
|
||||
uint8_t g;
|
||||
uint8_t b;
|
||||
} color_t ;
|
||||
|
||||
// ==== Display commands constants ====
|
||||
#define TFT_INVOFF 0x20
|
||||
#define TFT_INVONN 0x21
|
||||
#define TFT_DISPOFF 0x28
|
||||
#define TFT_DISPON 0x29
|
||||
#define TFT_MADCTL 0x36
|
||||
#define TFT_PTLAR 0x30
|
||||
#define TFT_ENTRYM 0xB7
|
||||
|
||||
#define TFT_CMD_NOP 0x00
|
||||
#define TFT_CMD_SWRESET 0x01
|
||||
#define TFT_CMD_RDDID 0x04
|
||||
#define TFT_CMD_RDDST 0x09
|
||||
|
||||
#define TFT_CMD_SLPIN 0x10
|
||||
#define TFT_CMD_SLPOUT 0x11
|
||||
#define TFT_CMD_PTLON 0x12
|
||||
#define TFT_CMD_NORON 0x13
|
||||
|
||||
#define TFT_CMD_RDMODE 0x0A
|
||||
#define TFT_CMD_RDMADCTL 0x0B
|
||||
#define TFT_CMD_RDPIXFMT 0x0C
|
||||
#define TFT_CMD_RDIMGFMT 0x0D
|
||||
#define TFT_CMD_RDSELFDIAG 0x0F
|
||||
|
||||
#define TFT_CMD_GAMMASET 0x26
|
||||
|
||||
#define TFT_CMD_FRMCTR1 0xB1
|
||||
#define TFT_CMD_FRMCTR2 0xB2
|
||||
#define TFT_CMD_FRMCTR3 0xB3
|
||||
#define TFT_CMD_INVCTR 0xB4
|
||||
#define TFT_CMD_DFUNCTR 0xB6
|
||||
|
||||
#define TFT_CMD_PWCTR1 0xC0
|
||||
#define TFT_CMD_PWCTR2 0xC1
|
||||
#define TFT_CMD_PWCTR3 0xC2
|
||||
#define TFT_CMD_PWCTR4 0xC3
|
||||
#define TFT_CMD_PWCTR5 0xC4
|
||||
#define TFT_CMD_VMCTR1 0xC5
|
||||
#define TFT_CMD_VMCTR2 0xC7
|
||||
|
||||
#define TFT_CMD_RDID1 0xDA
|
||||
#define TFT_CMD_RDID2 0xDB
|
||||
#define TFT_CMD_RDID3 0xDC
|
||||
#define TFT_CMD_RDID4 0xDD
|
||||
|
||||
#define TFT_CMD_GMCTRP1 0xE0
|
||||
#define TFT_CMD_GMCTRN1 0xE1
|
||||
|
||||
#define TFT_CMD_POWERA 0xCB
|
||||
#define TFT_CMD_POWERB 0xCF
|
||||
#define TFT_CMD_POWER_SEQ 0xED
|
||||
#define TFT_CMD_DTCA 0xE8
|
||||
#define TFT_CMD_DTCB 0xEA
|
||||
#define TFT_CMD_PRC 0xF7
|
||||
#define TFT_CMD_3GAMMA_EN 0xF2
|
||||
|
||||
#define ST_CMD_VCOMS 0xBB
|
||||
#define ST_CMD_FRCTRL2 0xC6
|
||||
#define ST_CMD_PWCTR1 0xD0
|
||||
|
||||
#define MADCTL_MY 0x80
|
||||
#define MADCTL_MX 0x40
|
||||
#define MADCTL_MV 0x20
|
||||
#define MADCTL_ML 0x10
|
||||
#define MADCTL_MH 0x04
|
||||
|
||||
#define TFT_CASET 0x2A
|
||||
#define TFT_PASET 0x2B
|
||||
#define TFT_RAMWR 0x2C
|
||||
#define TFT_RAMRD 0x2E
|
||||
#define TFT_CMD_PIXFMT 0x3A
|
||||
|
||||
#define TFT_CMD_DELAY 0x80
|
||||
|
||||
|
||||
// Initialization sequence for ILI7341
|
||||
// ====================================
|
||||
static const uint8_t ILI9341_init[] = {
|
||||
24, // 24 commands in list
|
||||
TFT_CMD_SWRESET, TFT_CMD_DELAY, // 1: Software reset, no args, w/delay
|
||||
250, // 200 ms delay
|
||||
TFT_CMD_POWERA, 5, 0x39, 0x2C, 0x00, 0x34, 0x02,
|
||||
TFT_CMD_POWERB, 3, 0x00, 0XC1, 0X30,
|
||||
0xEF, 3, 0x03, 0x80, 0x02,
|
||||
TFT_CMD_DTCA, 3, 0x85, 0x00, 0x78,
|
||||
TFT_CMD_DTCB, 2, 0x00, 0x00,
|
||||
TFT_CMD_POWER_SEQ, 4, 0x64, 0x03, 0X12, 0X81,
|
||||
TFT_CMD_PRC, 1, 0x20,
|
||||
TFT_CMD_PWCTR1, 1, 0x23, //Power control VRH[5:0]
|
||||
TFT_CMD_PWCTR2, 1, 0x10, //Power control SAP[2:0];BT[3:0]
|
||||
TFT_CMD_VMCTR1, 2, 0x3e, 0x28, //VCM control
|
||||
TFT_CMD_VMCTR2, 1, 0x86, //VCM control2
|
||||
TFT_MADCTL, 1, // Memory Access Control (orientation)
|
||||
(MADCTL_MX | TFT_RGB_BGR),
|
||||
// *** INTERFACE PIXEL FORMAT: 0x66 -> 18 bit; 0x55 -> 16 bit
|
||||
TFT_CMD_PIXFMT, 1, DISP_COLOR_BITS_24,
|
||||
TFT_INVOFF, 0,
|
||||
TFT_CMD_FRMCTR1, 2, 0x00, 0x18,
|
||||
TFT_CMD_DFUNCTR, 4, 0x08, 0x82, 0x27, 0x00, // Display Function Control
|
||||
TFT_PTLAR, 4, 0x00, 0x00, 0x01, 0x3F,
|
||||
TFT_CMD_3GAMMA_EN, 1, 0x00, // 3Gamma Function: Disable (0x02), Enable (0x03)
|
||||
TFT_CMD_GAMMASET, 1, 0x01, //Gamma curve selected (0x01, 0x02, 0x04, 0x08)
|
||||
TFT_CMD_GMCTRP1, 15, //Positive Gamma Correction
|
||||
0x0F, 0x31, 0x2B, 0x0C, 0x0E, 0x08, 0x4E, 0xF1, 0x37, 0x07, 0x10, 0x03, 0x0E, 0x09, 0x00,
|
||||
TFT_CMD_GMCTRN1, 15, //Negative Gamma Correction
|
||||
0x00, 0x0E, 0x14, 0x03, 0x11, 0x07, 0x31, 0xC1, 0x48, 0x08, 0x0F, 0x0C, 0x31, 0x36, 0x0F,
|
||||
TFT_CMD_SLPOUT, TFT_CMD_DELAY, // Sleep out
|
||||
200, // 120 ms delay
|
||||
TFT_DISPON, TFT_CMD_DELAY, 200,
|
||||
};
|
||||
|
||||
// ==== Public functions =========================================================
|
||||
|
||||
// == Low level functions; usually not used directly ==
|
||||
esp_err_t wait_trans_finish(uint8_t free_line);
|
||||
void disp_spi_transfer_cmd(int8_t cmd);
|
||||
void disp_spi_transfer_cmd_data(int8_t cmd, uint8_t *data, uint32_t len);
|
||||
void drawPixel(int16_t x, int16_t y, color_t color, uint8_t sel);
|
||||
void send_data(int x1, int y1, int x2, int y2, uint32_t len, color_t *buf);
|
||||
void mgos_ili9341_pushColorRep(int x1, int y1, int x2, int y2, color_t data, uint32_t len);
|
||||
int read_data(int x1, int y1, int x2, int y2, int len, uint8_t *buf, uint8_t set_sp);
|
||||
color_t readPixel(int16_t x, int16_t y);
|
||||
int touch_get_data(uint8_t type);
|
||||
|
||||
|
||||
// Deactivate display's CS line
|
||||
//========================
|
||||
esp_err_t disp_deselect();
|
||||
|
||||
// Activate display's CS line and configure SPI interface if necessary
|
||||
//======================
|
||||
esp_err_t disp_select();
|
||||
|
||||
|
||||
// Find maximum spi clock for successful read from display RAM
|
||||
// ** Must be used AFTER the display is initialized **
|
||||
//======================
|
||||
uint32_t find_rd_speed();
|
||||
|
||||
|
||||
// Change the screen rotation.
|
||||
// Input: m new rotation value (0 to 3)
|
||||
//=================================
|
||||
void _tft_setRotation(uint8_t rot);
|
||||
|
||||
|
||||
// Perform display initialization sequence
|
||||
// Sets orientation to landscape; clears the screen
|
||||
// * All pins must be configured
|
||||
// * SPI interface must already be setup
|
||||
//======================
|
||||
void mgos_ili9341_display_init();
|
||||
|
||||
// ===============================================================================
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user