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
vipinranka 12:9a20164dcc47 2 #ifndef MBED_LCD_H
vipinranka 12:9a20164dcc47 3 #define MBED_LCD_H
vipinranka 12:9a20164dcc47 4
vipinranka 12:9a20164dcc47 5 #if DEVICE_PORTINOUT
vipinranka 12:9a20164dcc47 6 #include "PAR8.h"
vipinranka 12:9a20164dcc47 7 #include "PAR16.h"
vipinranka 12:9a20164dcc47 8 #endif
vipinranka 12:9a20164dcc47 9
vipinranka 12:9a20164dcc47 10 #include "BUS8.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 // undefine the KL43Z and KL46Z LCD macro
vipinranka 12:9a20164dcc47 18 #ifdef LCD
vipinranka 12:9a20164dcc47 19 #undef LCD
vipinranka 12:9a20164dcc47 20 #endif
vipinranka 12:9a20164dcc47 21
vipinranka 12:9a20164dcc47 22 /** Draw mode
vipinranka 12:9a20164dcc47 23 * NORMAl
vipinranka 12:9a20164dcc47 24 * XOR set pixel by xor the screen
vipinranka 12:9a20164dcc47 25 */
vipinranka 12:9a20164dcc47 26 //enum {NORMAL,XOR};
vipinranka 12:9a20164dcc47 27
vipinranka 12:9a20164dcc47 28 /** Mirror mode */
vipinranka 12:9a20164dcc47 29 enum mirror_t {X,Y,XY,NONE};
vipinranka 12:9a20164dcc47 30
vipinranka 12:9a20164dcc47 31
vipinranka 12:9a20164dcc47 32 /** A common base class for monochrome Display
vipinranka 12:9a20164dcc47 33 */
vipinranka 12:9a20164dcc47 34 class LCD : public GraphicsDisplay
vipinranka 12:9a20164dcc47 35 {
vipinranka 12:9a20164dcc47 36
vipinranka 12:9a20164dcc47 37 public:
vipinranka 12:9a20164dcc47 38
vipinranka 12:9a20164dcc47 39 /** Create a monochrome LCD Parallel Port interface
vipinranka 12:9a20164dcc47 40 * @param name The name used by the parent class to access the interface
vipinranka 12:9a20164dcc47 41 */
vipinranka 12:9a20164dcc47 42 LCD(proto_t displayproto,PortName port, PinName CS, PinName reset, PinName DC, PinName WR, PinName RD, const int lcdsize_x, const int lcdsize_y, const int ic_x_segs, const int ic_y_coms, const char* name);
vipinranka 12:9a20164dcc47 43
vipinranka 12:9a20164dcc47 44 /** Create a monochrome LCD Parallel Bus interface
vipinranka 12:9a20164dcc47 45 * @param name The name used by the parent class to access the interface
vipinranka 12:9a20164dcc47 46 */
vipinranka 12:9a20164dcc47 47 LCD(proto_t displayproto,PinName* buspins, PinName CS, PinName reset, PinName DC, PinName WR, PinName RD, const int lcdsize_x, const int lcdsize_y, const int ic_x_segs, const int ic_y_coms, const char* name);
vipinranka 12:9a20164dcc47 48
vipinranka 12:9a20164dcc47 49 /** Create a monochrome LCD SPI interface
vipinranka 12:9a20164dcc47 50 * @param name The name used by the parent class to access the interface
vipinranka 12:9a20164dcc47 51 */
vipinranka 12:9a20164dcc47 52 LCD(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 int ic_x_segs, const int ic_y_coms, const char* name);
vipinranka 12:9a20164dcc47 53
vipinranka 12:9a20164dcc47 54 /** Destructor
vipinranka 12:9a20164dcc47 55 * will free framebuffer
vipinranka 12:9a20164dcc47 56 */
vipinranka 12:9a20164dcc47 57 virtual ~LCD();
vipinranka 12:9a20164dcc47 58
vipinranka 12:9a20164dcc47 59
vipinranka 12:9a20164dcc47 60
vipinranka 12:9a20164dcc47 61 /////// functions that come for free, but can be overwritten///////////////////////////////////////////////////
vipinranka 12:9a20164dcc47 62 /////// ----------------------------------------------------///////////////////////////////////////////////////
vipinranka 12:9a20164dcc47 63
vipinranka 12:9a20164dcc47 64 /** Draw a pixel in the specified color.
vipinranka 12:9a20164dcc47 65 * @param x is the horizontal offset to this pixel.
vipinranka 12:9a20164dcc47 66 * @param y is the vertical offset to this pixel.
vipinranka 12:9a20164dcc47 67 * @param color defines the color for the pixel.
vipinranka 12:9a20164dcc47 68 */
vipinranka 12:9a20164dcc47 69 virtual void pixel(int x, int y, unsigned short color);
vipinranka 12:9a20164dcc47 70
vipinranka 12:9a20164dcc47 71 /** Set the window, which controls where items are written to the screen.
vipinranka 12:9a20164dcc47 72 * When something hits the window width, it wraps back to the left side
vipinranka 12:9a20164dcc47 73 * and down a row. If the initial write is outside the window, it will
vipinranka 12:9a20164dcc47 74 * be captured into the window when it crosses a boundary.
vipinranka 12:9a20164dcc47 75 * @param x is the left edge in pixels.
vipinranka 12:9a20164dcc47 76 * @param y is the top edge in pixels.
vipinranka 12:9a20164dcc47 77 * @param w is the window width in pixels.
vipinranka 12:9a20164dcc47 78 * @param h is the window height in pixels.
vipinranka 12:9a20164dcc47 79 */
vipinranka 12:9a20164dcc47 80 virtual void window(int x, int y, int w, int h);
vipinranka 12:9a20164dcc47 81
vipinranka 12:9a20164dcc47 82 /** Read pixel color at location
vipinranka 12:9a20164dcc47 83 * @param x is the horizontal offset to this pixel.
vipinranka 12:9a20164dcc47 84 * @param y is the vertical offset to this pixel.
vipinranka 12:9a20164dcc47 85 * @returns 16bit color, 0000=Black(pixel set), FFFF=White(pixel clear).
vipinranka 12:9a20164dcc47 86 */
vipinranka 12:9a20164dcc47 87 virtual unsigned short pixelread(int x, int y);
vipinranka 12:9a20164dcc47 88
vipinranka 12:9a20164dcc47 89 /** Push a single pixel into the window and increment position.
vipinranka 12:9a20164dcc47 90 * You must first call window() then push pixels in loop.
vipinranka 12:9a20164dcc47 91 * @param color is the pixel color.
vipinranka 12:9a20164dcc47 92 */
vipinranka 12:9a20164dcc47 93 virtual void window_pushpixel(unsigned short color);
vipinranka 12:9a20164dcc47 94
vipinranka 12:9a20164dcc47 95 /** Push some pixels of the same color into the window and increment position.
vipinranka 12:9a20164dcc47 96 * You must first call window() then push pixels.
vipinranka 12:9a20164dcc47 97 * @param color is the pixel color.
vipinranka 12:9a20164dcc47 98 * @param count: how many
vipinranka 12:9a20164dcc47 99 */
vipinranka 12:9a20164dcc47 100 virtual void window_pushpixel(unsigned short color, unsigned int count);
vipinranka 12:9a20164dcc47 101
vipinranka 12:9a20164dcc47 102 /** Push array of pixel colors into the window and increment position.
vipinranka 12:9a20164dcc47 103 * You must first call window() then push pixels.
vipinranka 12:9a20164dcc47 104 * @param color is the pixel color.
vipinranka 12:9a20164dcc47 105 */
vipinranka 12:9a20164dcc47 106 virtual void window_pushpixelbuf(unsigned short* color, unsigned int lenght);
vipinranka 12:9a20164dcc47 107
vipinranka 12:9a20164dcc47 108 /** Framebuffer is used, it needs to be sent to LCD from time to time
vipinranka 12:9a20164dcc47 109 */
vipinranka 12:9a20164dcc47 110 virtual void copy_to_lcd();
vipinranka 12:9a20164dcc47 111
vipinranka 12:9a20164dcc47 112 /** set the contrast of the screen
vipinranka 12:9a20164dcc47 113 *
vipinranka 12:9a20164dcc47 114 * @param o contrast 0-63
vipinranka 12:9a20164dcc47 115 * @note may be overrided in case of not standard command
vipinranka 12:9a20164dcc47 116 */
vipinranka 12:9a20164dcc47 117 virtual void set_contrast(int o);
vipinranka 12:9a20164dcc47 118
vipinranka 12:9a20164dcc47 119 /** read the contrast level
vipinranka 12:9a20164dcc47 120 *
vipinranka 12:9a20164dcc47 121 */
vipinranka 12:9a20164dcc47 122 int get_contrast(void);
vipinranka 12:9a20164dcc47 123
vipinranka 12:9a20164dcc47 124 /** display inverted colors
vipinranka 12:9a20164dcc47 125 *
vipinranka 12:9a20164dcc47 126 * @param o = 0 normal, 1 invert
vipinranka 12:9a20164dcc47 127 */
vipinranka 12:9a20164dcc47 128 void invert(unsigned char o);
vipinranka 12:9a20164dcc47 129
vipinranka 12:9a20164dcc47 130 /** clear the entire screen
vipinranka 12:9a20164dcc47 131 * The inherited one sets windomax then fill with background color
vipinranka 12:9a20164dcc47 132 * We override it to speedup
vipinranka 12:9a20164dcc47 133 */
vipinranka 12:9a20164dcc47 134 virtual void cls();
vipinranka 12:9a20164dcc47 135
vipinranka 12:9a20164dcc47 136 /** Set the orientation of the screen
vipinranka 12:9a20164dcc47 137 * x,y: 0,0 is always top left
vipinranka 12:9a20164dcc47 138 *
vipinranka 12:9a20164dcc47 139 * @param o direction to use the screen (0-3)
vipinranka 12:9a20164dcc47 140 * 0 = -90°
vipinranka 12:9a20164dcc47 141 * 1 = default 0°
vipinranka 12:9a20164dcc47 142 * 2 = +90°
vipinranka 12:9a20164dcc47 143 * 3 = +180°
vipinranka 12:9a20164dcc47 144 *
vipinranka 12:9a20164dcc47 145 */
vipinranka 12:9a20164dcc47 146 void set_orientation(int o);
vipinranka 12:9a20164dcc47 147
vipinranka 12:9a20164dcc47 148 /** Set ChipSelect high or low
vipinranka 12:9a20164dcc47 149 * @param enable 0/1
vipinranka 12:9a20164dcc47 150 */
vipinranka 12:9a20164dcc47 151 virtual void BusEnable(bool enable);
vipinranka 12:9a20164dcc47 152
vipinranka 12:9a20164dcc47 153 /** get display X size in pixels (native, orientation independent)
vipinranka 12:9a20164dcc47 154 * @returns X size in pixels
vipinranka 12:9a20164dcc47 155 */
vipinranka 12:9a20164dcc47 156 int sizeX();
vipinranka 12:9a20164dcc47 157
vipinranka 12:9a20164dcc47 158 /** get display Y size in pixels (native, orientation independent)
vipinranka 12:9a20164dcc47 159 * @returns Y size in pixels
vipinranka 12:9a20164dcc47 160 */
vipinranka 12:9a20164dcc47 161 int sizeY();
vipinranka 12:9a20164dcc47 162
vipinranka 12:9a20164dcc47 163 ////////////////////////////////////////////////////////////////////////////////
vipinranka 12:9a20164dcc47 164 // not implemented yet
vipinranka 12:9a20164dcc47 165 //////////////////////////////////////////////////////////////////
vipinranka 12:9a20164dcc47 166 // virtual unsigned short pixelread(int x, int y){return 0;};
vipinranka 12:9a20164dcc47 167 virtual void window4read(int x, int y, int w, int h){};
vipinranka 12:9a20164dcc47 168 void setscrollarea (int startY, int areasize){};
vipinranka 12:9a20164dcc47 169 void scroll (int lines){};
vipinranka 12:9a20164dcc47 170 void scrollreset(){};
vipinranka 12:9a20164dcc47 171 void FastWindow(bool enable){};
vipinranka 12:9a20164dcc47 172
vipinranka 12:9a20164dcc47 173 unsigned int tftID;
vipinranka 12:9a20164dcc47 174
vipinranka 12:9a20164dcc47 175
vipinranka 12:9a20164dcc47 176
vipinranka 12:9a20164dcc47 177
vipinranka 12:9a20164dcc47 178 protected:
vipinranka 12:9a20164dcc47 179
vipinranka 12:9a20164dcc47 180 /** set mirror mode
vipinranka 12:9a20164dcc47 181 * @note may be overridden by specific display init class in case of not standard cmds or inverted wiring
vipinranka 12:9a20164dcc47 182 * @param mode NONE, X, Y, XY
vipinranka 12:9a20164dcc47 183 */
vipinranka 12:9a20164dcc47 184 virtual void mirrorXY(mirror_t mode);
vipinranka 12:9a20164dcc47 185
vipinranka 12:9a20164dcc47 186 ////// functions needed by parent class ///////////////////////////////////////
vipinranka 12:9a20164dcc47 187 ////// -------------------------------- ///////////////////////////////////////
vipinranka 12:9a20164dcc47 188
vipinranka 12:9a20164dcc47 189 /** Send 8bit command to display controller
vipinranka 12:9a20164dcc47 190 *
vipinranka 12:9a20164dcc47 191 * @param cmd: byte to send
vipinranka 12:9a20164dcc47 192 * @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 193 */
vipinranka 12:9a20164dcc47 194 void wr_cmd8(unsigned char cmd);
vipinranka 12:9a20164dcc47 195
vipinranka 12:9a20164dcc47 196 /** Send 8bit data to display controller
vipinranka 12:9a20164dcc47 197 *
vipinranka 12:9a20164dcc47 198 * @param data: byte to send
vipinranka 12:9a20164dcc47 199 *
vipinranka 12:9a20164dcc47 200 */
vipinranka 12:9a20164dcc47 201 void wr_data8(unsigned char data);
vipinranka 12:9a20164dcc47 202
vipinranka 12:9a20164dcc47 203 /** Send 16bit command to display controller
vipinranka 12:9a20164dcc47 204 *
vipinranka 12:9a20164dcc47 205 * @param cmd: halfword to send
vipinranka 12:9a20164dcc47 206 *
vipinranka 12:9a20164dcc47 207 */
vipinranka 12:9a20164dcc47 208 void wr_cmd16(unsigned short cmd);
vipinranka 12:9a20164dcc47 209
vipinranka 12:9a20164dcc47 210 /** Send same 16bit pixeldata to display controller multiple times
vipinranka 12:9a20164dcc47 211 *
vipinranka 12:9a20164dcc47 212 * @param data: halfword to send
vipinranka 12:9a20164dcc47 213 * @param count: how many
vipinranka 12:9a20164dcc47 214 *
vipinranka 12:9a20164dcc47 215 */
vipinranka 12:9a20164dcc47 216 virtual void wr_gram(unsigned short data, unsigned int count);
vipinranka 12:9a20164dcc47 217
vipinranka 12:9a20164dcc47 218 /** Send array of pixeldata shorts to display controller
vipinranka 12:9a20164dcc47 219 *
vipinranka 12:9a20164dcc47 220 * @param data: unsigned short pixeldata array
vipinranka 12:9a20164dcc47 221 * @param lenght: lenght (in shorts)
vipinranka 12:9a20164dcc47 222 *
vipinranka 12:9a20164dcc47 223 */
vipinranka 12:9a20164dcc47 224 virtual void wr_grambuf(unsigned short* data, unsigned int lenght);
vipinranka 12:9a20164dcc47 225
vipinranka 12:9a20164dcc47 226 /** HW reset sequence (without display init commands)
vipinranka 12:9a20164dcc47 227 */
vipinranka 12:9a20164dcc47 228 void hw_reset();
vipinranka 12:9a20164dcc47 229
vipinranka 12:9a20164dcc47 230 int draw_mode;
vipinranka 12:9a20164dcc47 231 int contrast;
vipinranka 12:9a20164dcc47 232
vipinranka 12:9a20164dcc47 233 private:
vipinranka 12:9a20164dcc47 234
vipinranka 12:9a20164dcc47 235 Protocols* proto;
vipinranka 12:9a20164dcc47 236 unsigned char *buffer;
vipinranka 12:9a20164dcc47 237 unsigned short *buffer16;
vipinranka 12:9a20164dcc47 238 const int screensize_X;
vipinranka 12:9a20164dcc47 239 const int screensize_Y;
vipinranka 12:9a20164dcc47 240 const int _LCDPAGES;
vipinranka 12:9a20164dcc47 241 const int _IC_X_SEGS;
vipinranka 12:9a20164dcc47 242 const int _IC_Y_COMS;
vipinranka 12:9a20164dcc47 243 const int _IC_PAGES;
vipinranka 12:9a20164dcc47 244
vipinranka 12:9a20164dcc47 245 int page_offset;
vipinranka 12:9a20164dcc47 246 int col_offset;
vipinranka 12:9a20164dcc47 247 // pixel location
vipinranka 12:9a20164dcc47 248 int cur_x;
vipinranka 12:9a20164dcc47 249 int cur_y;
vipinranka 12:9a20164dcc47 250 // window location
vipinranka 12:9a20164dcc47 251 int win_x1;
vipinranka 12:9a20164dcc47 252 int win_x2;
vipinranka 12:9a20164dcc47 253 int win_y1;
vipinranka 12:9a20164dcc47 254 int win_y2;
vipinranka 12:9a20164dcc47 255 int orientation;
vipinranka 12:9a20164dcc47 256 bool useNOP;
vipinranka 12:9a20164dcc47 257 };
vipinranka 12:9a20164dcc47 258
vipinranka 12:9a20164dcc47 259 #endif