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