This is the final version of Mini Gateway for Automation and Security desgined for Renesas GR Peach Design Contest

Dependencies:   GR-PEACH_video GraphicsFramework HTTPServer R_BSP mbed-rpc mbed-rtos Socket lwip-eth lwip-sys lwip FATFileSystem

Fork of mbed-os-example-mbed5-blinky by mbed-os-examples

Committer:
vipinranka
Date:
Wed Jan 11 11:41:30 2017 +0000
Revision:
12:9a20164dcc47
This is the final version MGAS Project for Renesas GR Peach Design Contest

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vipinranka 12:9a20164dcc47 1 #ifndef MBED_TFT_H
vipinranka 12:9a20164dcc47 2 #define MBED_TFT_H
vipinranka 12:9a20164dcc47 3
vipinranka 12:9a20164dcc47 4 #include "GraphicsDisplay.h"
vipinranka 12:9a20164dcc47 5
vipinranka 12:9a20164dcc47 6 #if DEVICE_PORTINOUT
vipinranka 12:9a20164dcc47 7 #include "PAR8.h"
vipinranka 12:9a20164dcc47 8 #include "PAR16.h"
vipinranka 12:9a20164dcc47 9 #endif
vipinranka 12:9a20164dcc47 10
vipinranka 12:9a20164dcc47 11 #include "BUS8.h"
vipinranka 12:9a20164dcc47 12 #include "BUS16.h"
vipinranka 12:9a20164dcc47 13 #include "SPI8.h"
vipinranka 12:9a20164dcc47 14 #include "SPI16.h"
vipinranka 12:9a20164dcc47 15 #include "Protocols.h"
vipinranka 12:9a20164dcc47 16
vipinranka 12:9a20164dcc47 17
vipinranka 12:9a20164dcc47 18 /** A common base class for color TFT Display
vipinranka 12:9a20164dcc47 19 */
vipinranka 12:9a20164dcc47 20 class TFT : public GraphicsDisplay
vipinranka 12:9a20164dcc47 21 {
vipinranka 12:9a20164dcc47 22
vipinranka 12:9a20164dcc47 23 public:
vipinranka 12:9a20164dcc47 24
vipinranka 12:9a20164dcc47 25 /** Create a TFT Parallel Port interface
vipinranka 12:9a20164dcc47 26 * @param name The name used by the parent class to access the interface
vipinranka 12:9a20164dcc47 27 */
vipinranka 12:9a20164dcc47 28 TFT(proto_t displayproto,PortName port, PinName CS, PinName reset, PinName DC, PinName WR, PinName RD, const int lcdsize_x, const int lcdsize_y, const char* name);
vipinranka 12:9a20164dcc47 29
vipinranka 12:9a20164dcc47 30 /** Create a TFT Parallel Bus interface
vipinranka 12:9a20164dcc47 31 * @param name The name used by the parent class to access the interface
vipinranka 12:9a20164dcc47 32 */
vipinranka 12:9a20164dcc47 33 TFT(proto_t displayproto,PinName* buspins, PinName CS, PinName reset, PinName DC, PinName WR, PinName RD, const int lcdsize_x, const int lcdsize_y, const char* name);
vipinranka 12:9a20164dcc47 34
vipinranka 12:9a20164dcc47 35 /** Create a TFT SPI interface
vipinranka 12:9a20164dcc47 36 * @param name The name used by the parent class to access the interface
vipinranka 12:9a20164dcc47 37 */
vipinranka 12:9a20164dcc47 38 TFT(proto_t displayproto, int Hz, PinName mosi, PinName miso, PinName sclk, PinName CS, PinName reset, PinName DC, const int lcdsize_x, const int lcdsize_y, const char* name);
vipinranka 12:9a20164dcc47 39
vipinranka 12:9a20164dcc47 40 /////// functions that come for free, but can be overwritten///////////////////////////////////////////////////
vipinranka 12:9a20164dcc47 41 /////// ----------------------------------------------------///////////////////////////////////////////////////
vipinranka 12:9a20164dcc47 42
vipinranka 12:9a20164dcc47 43 /** Draw a pixel in the specified color.
vipinranka 12:9a20164dcc47 44 * @param x is the horizontal offset to this pixel.
vipinranka 12:9a20164dcc47 45 * @param y is the vertical offset to this pixel.
vipinranka 12:9a20164dcc47 46 * @param color defines the color for the pixel.
vipinranka 12:9a20164dcc47 47 */
vipinranka 12:9a20164dcc47 48 virtual void pixel(int x, int y, unsigned short color);
vipinranka 12:9a20164dcc47 49
vipinranka 12:9a20164dcc47 50 /** Set the window, which controls where items are written to the screen.
vipinranka 12:9a20164dcc47 51 * When something hits the window width, it wraps back to the left side
vipinranka 12:9a20164dcc47 52 * and down a row. If the initial write is outside the window, it will
vipinranka 12:9a20164dcc47 53 * be captured into the window when it crosses a boundary.
vipinranka 12:9a20164dcc47 54 * @param x is the left edge in pixels.
vipinranka 12:9a20164dcc47 55 * @param y is the top edge in pixels.
vipinranka 12:9a20164dcc47 56 * @param w is the window width in pixels.
vipinranka 12:9a20164dcc47 57 * @param h is the window height in pixels.
vipinranka 12:9a20164dcc47 58 */
vipinranka 12:9a20164dcc47 59 virtual void window(int x, int y, int w, int h);
vipinranka 12:9a20164dcc47 60
vipinranka 12:9a20164dcc47 61 /** Read pixel color at location
vipinranka 12:9a20164dcc47 62 * @param x is the horizontal offset to this pixel.
vipinranka 12:9a20164dcc47 63 * @param y is the vertical offset to this pixel.
vipinranka 12:9a20164dcc47 64 * @returns 16bit color.
vipinranka 12:9a20164dcc47 65 */
vipinranka 12:9a20164dcc47 66 virtual unsigned short pixelread(int x, int y);
vipinranka 12:9a20164dcc47 67
vipinranka 12:9a20164dcc47 68 /** Set the window from which gram is read from. Autoincrements row/column
vipinranka 12:9a20164dcc47 69 * @param x is the left edge in pixels.
vipinranka 12:9a20164dcc47 70 * @param y is the top edge in pixels.
vipinranka 12:9a20164dcc47 71 * @param w is the window width in pixels.
vipinranka 12:9a20164dcc47 72 * @param h is the window height in pixels.
vipinranka 12:9a20164dcc47 73 */
vipinranka 12:9a20164dcc47 74 virtual void window4read(int x, int y, int w, int h);
vipinranka 12:9a20164dcc47 75
vipinranka 12:9a20164dcc47 76 /** Push a single pixel into the window and increment position.
vipinranka 12:9a20164dcc47 77 * You must first call window() then push pixels.
vipinranka 12:9a20164dcc47 78 * @param color is the pixel color.
vipinranka 12:9a20164dcc47 79 */
vipinranka 12:9a20164dcc47 80 virtual void window_pushpixel(unsigned short color);
vipinranka 12:9a20164dcc47 81
vipinranka 12:9a20164dcc47 82 /** Push some pixels of the same color into the window and increment position.
vipinranka 12:9a20164dcc47 83 * You must first call window() then push pixels.
vipinranka 12:9a20164dcc47 84 * @param color is the pixel color.
vipinranka 12:9a20164dcc47 85 * @param count: how many
vipinranka 12:9a20164dcc47 86 */
vipinranka 12:9a20164dcc47 87 virtual void window_pushpixel(unsigned short color, unsigned int count);
vipinranka 12:9a20164dcc47 88
vipinranka 12:9a20164dcc47 89 /** Push array of pixel colors into the window and increment position.
vipinranka 12:9a20164dcc47 90 * You must first call window() then push pixels.
vipinranka 12:9a20164dcc47 91 * @param color is the pixel color.
vipinranka 12:9a20164dcc47 92 */
vipinranka 12:9a20164dcc47 93 virtual void window_pushpixelbuf(unsigned short* color, unsigned int lenght);
vipinranka 12:9a20164dcc47 94
vipinranka 12:9a20164dcc47 95 /** Framebuffer is not used for TFT
vipinranka 12:9a20164dcc47 96 */
vipinranka 12:9a20164dcc47 97 virtual void copy_to_lcd(){ };
vipinranka 12:9a20164dcc47 98
vipinranka 12:9a20164dcc47 99 /** display inverted colors
vipinranka 12:9a20164dcc47 100 *
vipinranka 12:9a20164dcc47 101 * @param o = 0 normal, 1 invert
vipinranka 12:9a20164dcc47 102 */
vipinranka 12:9a20164dcc47 103 void invert(unsigned char o);
vipinranka 12:9a20164dcc47 104
vipinranka 12:9a20164dcc47 105 /** clear the entire screen
vipinranka 12:9a20164dcc47 106 * The inherited one sets windomax then fill with background color
vipinranka 12:9a20164dcc47 107 * We override it to speedup
vipinranka 12:9a20164dcc47 108 */
vipinranka 12:9a20164dcc47 109 virtual void cls();
vipinranka 12:9a20164dcc47 110
vipinranka 12:9a20164dcc47 111 /** Set the orientation of the screen
vipinranka 12:9a20164dcc47 112 * x,y: 0,0 is always top left
vipinranka 12:9a20164dcc47 113 *
vipinranka 12:9a20164dcc47 114 * @param o direction to use the screen (0-3)
vipinranka 12:9a20164dcc47 115 * 0 = default 0° portrait view
vipinranka 12:9a20164dcc47 116 * 1 = +90° landscape view
vipinranka 12:9a20164dcc47 117 * 2 = +180° portrait view
vipinranka 12:9a20164dcc47 118 * 3 = -90° landscape view
vipinranka 12:9a20164dcc47 119 *
vipinranka 12:9a20164dcc47 120 */
vipinranka 12:9a20164dcc47 121 virtual void set_orientation(int o);
vipinranka 12:9a20164dcc47 122
vipinranka 12:9a20164dcc47 123 /** Set ChipSelect high or low
vipinranka 12:9a20164dcc47 124 * @param enable true/false
vipinranka 12:9a20164dcc47 125 */
vipinranka 12:9a20164dcc47 126 virtual void BusEnable(bool enable);
vipinranka 12:9a20164dcc47 127
vipinranka 12:9a20164dcc47 128 /** Enable fast window (default disabled)
vipinranka 12:9a20164dcc47 129 * used to speedup functions that plots single pixels, like circle, oblique lines or just sparse pixels
vipinranka 12:9a20164dcc47 130 * @param enable true/false
vipinranka 12:9a20164dcc47 131 * @note most but not all controllers support this, even if datasheet tells they should
vipinranka 12:9a20164dcc47 132 */
vipinranka 12:9a20164dcc47 133 void FastWindow(bool enable);
vipinranka 12:9a20164dcc47 134
vipinranka 12:9a20164dcc47 135 /** Set scroll area boundaries
vipinranka 12:9a20164dcc47 136 * scroll is done in hw but only on the native vertical axis
vipinranka 12:9a20164dcc47 137 * TFTs are mainly native protrait view, so horizontal scroll if rotated in landscape view
vipinranka 12:9a20164dcc47 138 *
vipinranka 12:9a20164dcc47 139 * @param startY boundary offset from top (or left if rotated), 0 for fullscreen scroll
vipinranka 12:9a20164dcc47 140 * @param areasize size of the scroll area, 480 for fullscreen scroll of a 320x480 display
vipinranka 12:9a20164dcc47 141 */
vipinranka 12:9a20164dcc47 142 void setscrollarea (int startY, int areasize);
vipinranka 12:9a20164dcc47 143
vipinranka 12:9a20164dcc47 144 /** Scroll up(or left) the scrollarea
vipinranka 12:9a20164dcc47 145 *
vipinranka 12:9a20164dcc47 146 * @param lines number of lines to scroll, 1= scrollup 1, areasize-1= scrolldown 1
vipinranka 12:9a20164dcc47 147 */
vipinranka 12:9a20164dcc47 148 void scroll (int lines);
vipinranka 12:9a20164dcc47 149
vipinranka 12:9a20164dcc47 150 /** Reset the scrollarea and display un-scrolled screen
vipinranka 12:9a20164dcc47 151 *
vipinranka 12:9a20164dcc47 152 */
vipinranka 12:9a20164dcc47 153 void scrollreset();
vipinranka 12:9a20164dcc47 154
vipinranka 12:9a20164dcc47 155 /** get display X size in pixels (native, orientation independent)
vipinranka 12:9a20164dcc47 156 * @returns X size in pixels
vipinranka 12:9a20164dcc47 157 */
vipinranka 12:9a20164dcc47 158 int sizeX();
vipinranka 12:9a20164dcc47 159
vipinranka 12:9a20164dcc47 160 /** get display Y size in pixels (native, orientation independent)
vipinranka 12:9a20164dcc47 161 * @returns Y size in pixels
vipinranka 12:9a20164dcc47 162 */
vipinranka 12:9a20164dcc47 163 int sizeY();
vipinranka 12:9a20164dcc47 164
vipinranka 12:9a20164dcc47 165 unsigned int tftID;
vipinranka 12:9a20164dcc47 166
vipinranka 12:9a20164dcc47 167 virtual void wr_gram(unsigned short data);
vipinranka 12:9a20164dcc47 168
vipinranka 12:9a20164dcc47 169
vipinranka 12:9a20164dcc47 170 protected:
vipinranka 12:9a20164dcc47 171
vipinranka 12:9a20164dcc47 172
vipinranka 12:9a20164dcc47 173 ////// functions needed by parent class ///////////////////////////////////////
vipinranka 12:9a20164dcc47 174 ////// -------------------------------- ///////////////////////////////////////
vipinranka 12:9a20164dcc47 175
vipinranka 12:9a20164dcc47 176 /** Send 8bit command to display controller
vipinranka 12:9a20164dcc47 177 *
vipinranka 12:9a20164dcc47 178 * @param cmd: byte to send
vipinranka 12:9a20164dcc47 179 * @note if protocol is SPI16, it will insert NOP cmd before, so if cmd is a 2byte cmd, the second cmd will be broken. Use wr_cmd16 for 2bytes cmds
vipinranka 12:9a20164dcc47 180 */
vipinranka 12:9a20164dcc47 181 void wr_cmd8(unsigned char cmd);
vipinranka 12:9a20164dcc47 182
vipinranka 12:9a20164dcc47 183 /** Send 8bit data to display controller
vipinranka 12:9a20164dcc47 184 *
vipinranka 12:9a20164dcc47 185 * @param data: byte to send
vipinranka 12:9a20164dcc47 186 *
vipinranka 12:9a20164dcc47 187 */
vipinranka 12:9a20164dcc47 188 void wr_data8(unsigned char data);
vipinranka 12:9a20164dcc47 189
vipinranka 12:9a20164dcc47 190 /** Send 2x8bit data to display controller
vipinranka 12:9a20164dcc47 191 *
vipinranka 12:9a20164dcc47 192 * @param data: halfword to send
vipinranka 12:9a20164dcc47 193 *
vipinranka 12:9a20164dcc47 194 */
vipinranka 12:9a20164dcc47 195 void wr_data16(unsigned short data);
vipinranka 12:9a20164dcc47 196
vipinranka 12:9a20164dcc47 197 /** Send 16bit pixeldata to display controller
vipinranka 12:9a20164dcc47 198 *
vipinranka 12:9a20164dcc47 199 * @param data: halfword to send
vipinranka 12:9a20164dcc47 200 *
vipinranka 12:9a20164dcc47 201 */
vipinranka 12:9a20164dcc47 202
vipinranka 12:9a20164dcc47 203
vipinranka 12:9a20164dcc47 204 /** Send same 16bit pixeldata to display controller multiple times
vipinranka 12:9a20164dcc47 205 *
vipinranka 12:9a20164dcc47 206 * @param data: halfword to send
vipinranka 12:9a20164dcc47 207 * @param count: how many
vipinranka 12:9a20164dcc47 208 *
vipinranka 12:9a20164dcc47 209 */
vipinranka 12:9a20164dcc47 210 virtual void wr_gram(unsigned short data, unsigned int count);
vipinranka 12:9a20164dcc47 211
vipinranka 12:9a20164dcc47 212 /** Send array of pixeldata shorts to display controller
vipinranka 12:9a20164dcc47 213 *
vipinranka 12:9a20164dcc47 214 * @param data: unsigned short pixeldata array
vipinranka 12:9a20164dcc47 215 * @param lenght: lenght (in shorts)
vipinranka 12:9a20164dcc47 216 *
vipinranka 12:9a20164dcc47 217 */
vipinranka 12:9a20164dcc47 218 virtual void wr_grambuf(unsigned short* data, unsigned int lenght);
vipinranka 12:9a20164dcc47 219
vipinranka 12:9a20164dcc47 220 /** Read 16bit pixeldata from display controller (with dummy cycle)
vipinranka 12:9a20164dcc47 221 *
vipinranka 12:9a20164dcc47 222 * @note autoconverts 18to16bit based on display identify info
vipinranka 12:9a20164dcc47 223 * @returns 16bit color
vipinranka 12:9a20164dcc47 224 */
vipinranka 12:9a20164dcc47 225 virtual unsigned short rd_gram();
vipinranka 12:9a20164dcc47 226
vipinranka 12:9a20164dcc47 227 /** Read 4x8bit register data (with dummy cycle)
vipinranka 12:9a20164dcc47 228 * @param reg the register to read
vipinranka 12:9a20164dcc47 229 * @returns data as uint
vipinranka 12:9a20164dcc47 230 *
vipinranka 12:9a20164dcc47 231 */
vipinranka 12:9a20164dcc47 232 virtual unsigned int rd_reg_data32(unsigned char reg);
vipinranka 12:9a20164dcc47 233
vipinranka 12:9a20164dcc47 234 /** Read 3x8bit ExtendedCommands register data
vipinranka 12:9a20164dcc47 235 * @param reg the register to read
vipinranka 12:9a20164dcc47 236 * @param SPIreadenablecmd vendor/device specific cmd to read EXTC registers
vipinranka 12:9a20164dcc47 237 * @returns data as uint
vipinranka 12:9a20164dcc47 238 * @note EXTC regs (0xB0 to 0xFF) are read/write registers but needs special cmd to be read in SPI mode
vipinranka 12:9a20164dcc47 239 */
vipinranka 12:9a20164dcc47 240 virtual unsigned int rd_extcreg_data32(unsigned char reg, unsigned char SPIreadenablecmd);
vipinranka 12:9a20164dcc47 241
vipinranka 12:9a20164dcc47 242 /** HW reset sequence (without display init commands)
vipinranka 12:9a20164dcc47 243 */
vipinranka 12:9a20164dcc47 244 void hw_reset();
vipinranka 12:9a20164dcc47 245
vipinranka 12:9a20164dcc47 246 /** Try to get read gram pixel format, could be 16bit or 18bit, RGB or BGR
vipinranka 12:9a20164dcc47 247 * autoset internal flags so pixelread() will always return correct value.
vipinranka 12:9a20164dcc47 248 */
vipinranka 12:9a20164dcc47 249 virtual void auto_gram_read_format();
vipinranka 12:9a20164dcc47 250
vipinranka 12:9a20164dcc47 251 /** Try to identify display ID
vipinranka 12:9a20164dcc47 252 * @note support ILI9341,94xx, MIPI standard. May be be overridden in Init class for other specific IC
vipinranka 12:9a20164dcc47 253 */
vipinranka 12:9a20164dcc47 254 virtual void identify();
vipinranka 12:9a20164dcc47 255
vipinranka 12:9a20164dcc47 256 unsigned int scrollbugfix;
vipinranka 12:9a20164dcc47 257 bool mipistd;
vipinranka 12:9a20164dcc47 258
vipinranka 12:9a20164dcc47 259
vipinranka 12:9a20164dcc47 260
vipinranka 12:9a20164dcc47 261 private:
vipinranka 12:9a20164dcc47 262
vipinranka 12:9a20164dcc47 263 Protocols* proto;
vipinranka 12:9a20164dcc47 264 const int screensize_X;
vipinranka 12:9a20164dcc47 265 const int screensize_Y;
vipinranka 12:9a20164dcc47 266 // pixel location
vipinranka 12:9a20164dcc47 267 int cur_x;
vipinranka 12:9a20164dcc47 268 int cur_y;
vipinranka 12:9a20164dcc47 269 // window location
vipinranka 12:9a20164dcc47 270 int win_x1;
vipinranka 12:9a20164dcc47 271 int win_x2;
vipinranka 12:9a20164dcc47 272 int win_y1;
vipinranka 12:9a20164dcc47 273 int win_y2;
vipinranka 12:9a20164dcc47 274 int orientation;
vipinranka 12:9a20164dcc47 275 int topfixedareasize;
vipinranka 12:9a20164dcc47 276 int scrollareasize;
vipinranka 12:9a20164dcc47 277 bool useNOP;
vipinranka 12:9a20164dcc47 278 bool usefastwindow;
vipinranka 12:9a20164dcc47 279 bool fastwindowready;
vipinranka 12:9a20164dcc47 280 bool is18bit;
vipinranka 12:9a20164dcc47 281 bool isBGR;
vipinranka 12:9a20164dcc47 282
vipinranka 12:9a20164dcc47 283 };
vipinranka 12:9a20164dcc47 284
vipinranka 12:9a20164dcc47 285 #endif