Basically i glued Peter Drescher and Simon Ford libs in a GraphicsDisplay class, then derived TFT or LCD class (which inherits Protocols class), then the most derived ones (Inits), which are per-display and are the only part needed to be adapted to diff hw.

Fork of UniGraphic by GraphicsDisplay

Committer:
Geremia
Date:
Fri Feb 20 21:32:25 2015 +0000
Revision:
11:b842b8e332cb
Parent:
7:bb0383b91104
Child:
20:14daa48ffd4c
added auto_gram_read_format() to TFt inits. Even if write is set to 16bit RGB color, for some controllers the read cmd outputs 18bit BGR. Now that function will autodetect and set internal flags accordingly, so pixelread() is always correct.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Geremia 4:12ba0ecc2c1f 1 #ifndef PAR16_H
Geremia 4:12ba0ecc2c1f 2 #define PAR16_H
Geremia 4:12ba0ecc2c1f 3
Geremia 4:12ba0ecc2c1f 4 #include "mbed.h"
Geremia 4:12ba0ecc2c1f 5 #include "Protocols.h"
Geremia 4:12ba0ecc2c1f 6 //#include "GraphicsDisplay.h"
Geremia 4:12ba0ecc2c1f 7
Geremia 6:8356d48a07db 8 /** Parallel 16bit interface
Geremia 6:8356d48a07db 9 */
Geremia 4:12ba0ecc2c1f 10 class PAR16 : public Protocols
Geremia 4:12ba0ecc2c1f 11 {
Geremia 4:12ba0ecc2c1f 12 public:
Geremia 4:12ba0ecc2c1f 13
Geremia 4:12ba0ecc2c1f 14 /** Create a PAR16 display interface with a GPIO port and 5 control pins
Geremia 4:12ba0ecc2c1f 15 *
Geremia 4:12ba0ecc2c1f 16 * @param port GPIO port to use
Geremia 4:12ba0ecc2c1f 17 * @param CS pin connected to CS of display
Geremia 4:12ba0ecc2c1f 18 * @param reset pin connected to RESET of display
Geremia 4:12ba0ecc2c1f 19 * @param DC pin connected to data/command of display
Geremia 4:12ba0ecc2c1f 20 * @param WR pin connected to SDI of display
Geremia 4:12ba0ecc2c1f 21 * @param RD pin connected to RS of display
Geremia 4:12ba0ecc2c1f 22 */
Geremia 4:12ba0ecc2c1f 23 PAR16(PortName port, PinName CS, PinName reset, PinName DC, PinName WR, PinName RD);
Geremia 4:12ba0ecc2c1f 24
Geremia 4:12ba0ecc2c1f 25 protected:
Geremia 4:12ba0ecc2c1f 26
Geremia 4:12ba0ecc2c1f 27 /** Send 8bit command to display controller
Geremia 4:12ba0ecc2c1f 28 *
Geremia 4:12ba0ecc2c1f 29 * @param cmd: byte to send
Geremia 4:12ba0ecc2c1f 30 *
Geremia 4:12ba0ecc2c1f 31 */
Geremia 4:12ba0ecc2c1f 32 virtual void wr_cmd8(unsigned char cmd);
Geremia 4:12ba0ecc2c1f 33
Geremia 4:12ba0ecc2c1f 34 /** Send 8bit data to display controller
Geremia 4:12ba0ecc2c1f 35 *
Geremia 4:12ba0ecc2c1f 36 * @param data: byte to send
Geremia 4:12ba0ecc2c1f 37 *
Geremia 4:12ba0ecc2c1f 38 */
Geremia 4:12ba0ecc2c1f 39 virtual void wr_data8(unsigned char data);
Geremia 4:12ba0ecc2c1f 40
Geremia 4:12ba0ecc2c1f 41 /** Send 2x8bit command to display controller
Geremia 4:12ba0ecc2c1f 42 *
Geremia 4:12ba0ecc2c1f 43 * @param cmd: halfword to send
Geremia 4:12ba0ecc2c1f 44 * @note 2cycles using pins[7:0]
Geremia 4:12ba0ecc2c1f 45 */
Geremia 4:12ba0ecc2c1f 46 virtual void wr_cmd16(unsigned short cmd);
Geremia 4:12ba0ecc2c1f 47
Geremia 4:12ba0ecc2c1f 48 /** Send 2x8bit data to display controller
Geremia 4:12ba0ecc2c1f 49 *
Geremia 4:12ba0ecc2c1f 50 * @param data: halfword to send
Geremia 4:12ba0ecc2c1f 51 * @note 2cycles using pins[7:0], only gram write cmd uses pins[15:8]
Geremia 4:12ba0ecc2c1f 52 */
Geremia 4:12ba0ecc2c1f 53 virtual void wr_data16(unsigned short data);
Geremia 4:12ba0ecc2c1f 54
Geremia 4:12ba0ecc2c1f 55 /** Send 16bit pixeldata to display controller
Geremia 4:12ba0ecc2c1f 56 *
Geremia 4:12ba0ecc2c1f 57 * @param data: halfword to send
Geremia 4:12ba0ecc2c1f 58 * @note here using all pins[15:0]
Geremia 4:12ba0ecc2c1f 59 */
Geremia 4:12ba0ecc2c1f 60 virtual void wr_gram(unsigned short data);
Geremia 4:12ba0ecc2c1f 61
Geremia 4:12ba0ecc2c1f 62 /** Send same 16bit pixeldata to display controller multiple times
Geremia 4:12ba0ecc2c1f 63 *
Geremia 4:12ba0ecc2c1f 64 * @param data: halfword to send
Geremia 4:12ba0ecc2c1f 65 * @param count: how many
Geremia 4:12ba0ecc2c1f 66 * @note here using all pins[15:0]
Geremia 4:12ba0ecc2c1f 67 */
Geremia 4:12ba0ecc2c1f 68 virtual void wr_gram(unsigned short data, unsigned int count);
Geremia 4:12ba0ecc2c1f 69
Geremia 4:12ba0ecc2c1f 70 /** Send array of pixeldata shorts to display controller
Geremia 4:12ba0ecc2c1f 71 *
Geremia 4:12ba0ecc2c1f 72 * @param data: unsigned short pixeldata array
Geremia 4:12ba0ecc2c1f 73 * @param lenght: lenght (in shorts)
Geremia 4:12ba0ecc2c1f 74 * @note here using all pins[15:0]
Geremia 4:12ba0ecc2c1f 75 */
Geremia 4:12ba0ecc2c1f 76 virtual void wr_grambuf(unsigned short* data, unsigned int lenght);
Geremia 4:12ba0ecc2c1f 77
Geremia 5:b222a9461d6b 78 /** Read 16bit pixeldata from display controller (with dummy cycle)
Geremia 5:b222a9461d6b 79 *
Geremia 11:b842b8e332cb 80 * @param convert true/false. Convert 18bit to 16bit, some controllers returns 18bit
Geremia 5:b222a9461d6b 81 * @returns 16bit color
Geremia 5:b222a9461d6b 82 */
Geremia 11:b842b8e332cb 83 virtual unsigned short rd_gram(bool convert);
Geremia 5:b222a9461d6b 84
Geremia 7:bb0383b91104 85 /** Read 4x8bit register data (with dummy cycle)
Geremia 7:bb0383b91104 86 * @param reg the register to read
Geremia 7:bb0383b91104 87 * @returns data as uint
Geremia 7:bb0383b91104 88 *
Geremia 7:bb0383b91104 89 */
Geremia 7:bb0383b91104 90 virtual unsigned int rd_reg_data32(unsigned char reg);
Geremia 7:bb0383b91104 91
Geremia 7:bb0383b91104 92 /** Read 3x8bit ExtendedCommands register data
Geremia 7:bb0383b91104 93 * @param reg the register to read
Geremia 7:bb0383b91104 94 * @returns data as uint
Geremia 7:bb0383b91104 95 * @note EXTC regs (0xB0 to 0xFF) are read/write registers, for Parallel mode directly accessible in both directions
Geremia 7:bb0383b91104 96 */
Geremia 7:bb0383b91104 97 virtual unsigned int rd_extcreg_data32(unsigned char reg, unsigned char SPIreadenablecmd);
Geremia 7:bb0383b91104 98
Geremia 4:12ba0ecc2c1f 99 /** HW reset sequence (without display init commands)
Geremia 4:12ba0ecc2c1f 100 */
Geremia 4:12ba0ecc2c1f 101 virtual void hw_reset();
Geremia 4:12ba0ecc2c1f 102
Geremia 4:12ba0ecc2c1f 103 /** Set ChipSelect high or low
Geremia 4:12ba0ecc2c1f 104 * @param enable 0/1
Geremia 4:12ba0ecc2c1f 105 */
Geremia 4:12ba0ecc2c1f 106 virtual void BusEnable(bool enable);
Geremia 4:12ba0ecc2c1f 107
Geremia 4:12ba0ecc2c1f 108
Geremia 4:12ba0ecc2c1f 109
Geremia 4:12ba0ecc2c1f 110 private:
Geremia 4:12ba0ecc2c1f 111
Geremia 4:12ba0ecc2c1f 112 PortInOut _port;
Geremia 4:12ba0ecc2c1f 113 DigitalOut _CS;
Geremia 4:12ba0ecc2c1f 114 DigitalOut _reset;
Geremia 4:12ba0ecc2c1f 115 DigitalOut _DC;
Geremia 4:12ba0ecc2c1f 116 DigitalOut _WR;
Geremia 4:12ba0ecc2c1f 117 DigitalOut _RD;
Geremia 4:12ba0ecc2c1f 118
Geremia 4:12ba0ecc2c1f 119 };
Geremia 4:12ba0ecc2c1f 120 #endif