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:
Mon Mar 23 14:08:04 2015 +0000
Revision:
20:14daa48ffd4c
Parent:
11:b842b8e332cb
Add  ILI 9320/9325/9328 custom TFT932x class, parallel/spi 8/16bit, with orientation, scroll, pixelread, fastwindow.; Par8 and 16 tested, SPI not at all, needs checking if the CS toggle is necessary (see SPI8.cpp SPI16.cpp).

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Geremia 1:ff019d22b275 1 #ifndef SPI16_H
Geremia 1:ff019d22b275 2 #define SPI16_H
Geremia 1:ff019d22b275 3
Geremia 1:ff019d22b275 4 #include "mbed.h"
Geremia 1:ff019d22b275 5 #include "Protocols.h"
Geremia 1:ff019d22b275 6 //#include "GraphicsDisplay.h"
Geremia 1:ff019d22b275 7
Geremia 6:8356d48a07db 8 /** SPI 16bit interface
Geremia 6:8356d48a07db 9 */
Geremia 1:ff019d22b275 10 class SPI16 : public Protocols
Geremia 1:ff019d22b275 11 {
Geremia 1:ff019d22b275 12 public:
Geremia 1:ff019d22b275 13
Geremia 1:ff019d22b275 14 /** Create an SPI 8bit display interface with 3 control pins
Geremia 1:ff019d22b275 15 *
Geremia 1:ff019d22b275 16 * @param SPI mosi
Geremia 1:ff019d22b275 17 * @param SPI miso
Geremia 1:ff019d22b275 18 * @param SPI sclk
Geremia 1:ff019d22b275 19 * @param CS pin connected to CS of display
Geremia 1:ff019d22b275 20 * @param reset pin connected to RESET of display
Geremia 1:ff019d22b275 21 * @param DC pin connected to data/command of display
Geremia 1:ff019d22b275 22 */
Geremia 20:14daa48ffd4c 23 SPI16(int Hz, PinName mosi, PinName miso, PinName sclk, PinName CS, PinName reset, PinName DC=NC);
Geremia 1:ff019d22b275 24
Geremia 1:ff019d22b275 25 protected:
Geremia 1:ff019d22b275 26
Geremia 1:ff019d22b275 27 /** Send 8bit command to display controller
Geremia 1:ff019d22b275 28 *
Geremia 1:ff019d22b275 29 * @note switches spi format 16->8->16, better use wr_cmd16 with NOP in front
Geremia 1:ff019d22b275 30 * @param cmd: byte to send
Geremia 1:ff019d22b275 31 *
Geremia 1:ff019d22b275 32 */
Geremia 1:ff019d22b275 33 virtual void wr_cmd8(unsigned char cmd);
Geremia 1:ff019d22b275 34
Geremia 1:ff019d22b275 35 /** Send 8bit data to display controller
Geremia 1:ff019d22b275 36 *
Geremia 1:ff019d22b275 37 * @note switches spi format 16->8->16, better use wr_data16 with repeated byte (if does not hurt)
Geremia 1:ff019d22b275 38 * @param data: byte to send
Geremia 1:ff019d22b275 39 *
Geremia 1:ff019d22b275 40 */
Geremia 1:ff019d22b275 41 virtual void wr_data8(unsigned char data);
Geremia 1:ff019d22b275 42
Geremia 4:12ba0ecc2c1f 43 /** Send 2x8bit command to display controller
Geremia 1:ff019d22b275 44 *
Geremia 1:ff019d22b275 45 * @param cmd: halfword to send
Geremia 4:12ba0ecc2c1f 46 * @note in SPI_16 mode a single 16bit transfer will be done
Geremia 1:ff019d22b275 47 */
Geremia 1:ff019d22b275 48 virtual void wr_cmd16(unsigned short cmd);
Geremia 1:ff019d22b275 49
Geremia 4:12ba0ecc2c1f 50 /** Send 2x8bit data to display controller
Geremia 4:12ba0ecc2c1f 51 *
Geremia 4:12ba0ecc2c1f 52 * @param data: halfword to send
Geremia 4:12ba0ecc2c1f 53 * @note in SPI_16 mode a single 16bit transfer will be done
Geremia 4:12ba0ecc2c1f 54 */
Geremia 4:12ba0ecc2c1f 55 virtual void wr_data16(unsigned short data);
Geremia 4:12ba0ecc2c1f 56
Geremia 4:12ba0ecc2c1f 57 /** Send 16bit pixeldata to display controller
Geremia 1:ff019d22b275 58 *
Geremia 1:ff019d22b275 59 * @param data: halfword to send
Geremia 1:ff019d22b275 60 *
Geremia 1:ff019d22b275 61 */
Geremia 4:12ba0ecc2c1f 62 virtual void wr_gram(unsigned short data);
Geremia 1:ff019d22b275 63
Geremia 4:12ba0ecc2c1f 64 /** Send same 16bit pixeldata to display controller multiple times
Geremia 1:ff019d22b275 65 *
Geremia 1:ff019d22b275 66 * @param data: halfword to send
Geremia 1:ff019d22b275 67 * @param count: how many
Geremia 1:ff019d22b275 68 *
Geremia 1:ff019d22b275 69 */
Geremia 4:12ba0ecc2c1f 70 virtual void wr_gram(unsigned short data, unsigned int count);
Geremia 1:ff019d22b275 71
Geremia 4:12ba0ecc2c1f 72 /** Send array of pixeldata shorts to display controller
Geremia 1:ff019d22b275 73 *
Geremia 4:12ba0ecc2c1f 74 * @param data: unsigned short pixeldata array
Geremia 1:ff019d22b275 75 * @param lenght: lenght (in shorts)
Geremia 1:ff019d22b275 76 *
Geremia 1:ff019d22b275 77 */
Geremia 4:12ba0ecc2c1f 78 virtual void wr_grambuf(unsigned short* data, unsigned int lenght);
Geremia 1:ff019d22b275 79
Geremia 5:b222a9461d6b 80 /** Read 16bit pixeldata from display controller (with dummy cycle)
Geremia 5:b222a9461d6b 81 *
Geremia 11:b842b8e332cb 82 * @param convert true/false. Convert 18bit to 16bit, some controllers returns 18bit
Geremia 5:b222a9461d6b 83 * @returns 16bit color
Geremia 5:b222a9461d6b 84 */
Geremia 11:b842b8e332cb 85 virtual unsigned short rd_gram(bool convert);
Geremia 5:b222a9461d6b 86
Geremia 7:bb0383b91104 87 /** Read 4x8bit register data (with dummy cycle)
Geremia 7:bb0383b91104 88 * @param reg the register to read
Geremia 7:bb0383b91104 89 * @returns data as uint
Geremia 7:bb0383b91104 90 *
Geremia 7:bb0383b91104 91 */
Geremia 7:bb0383b91104 92 virtual unsigned int rd_reg_data32(unsigned char reg);
Geremia 7:bb0383b91104 93
Geremia 7:bb0383b91104 94 /** Read 3x8bit ExtendedCommands register data
Geremia 7:bb0383b91104 95 * @param reg the register to read
Geremia 7:bb0383b91104 96 * @param SPIreadenablecmd vendor/device specific cmd to read EXTC registers
Geremia 7:bb0383b91104 97 * @returns data as uint
Geremia 7:bb0383b91104 98 * @note EXTC regs (0xB0 to 0xFF) are read/write registers but needs special cmd to be read in SPI mode
Geremia 7:bb0383b91104 99 */
Geremia 7:bb0383b91104 100 virtual unsigned int rd_extcreg_data32(unsigned char reg, unsigned char SPIreadenablecmd);
Geremia 7:bb0383b91104 101
Geremia 20:14daa48ffd4c 102 /** ILI932x specific, does a dummy read cycle, number of bits is protocol dependent
Geremia 20:14daa48ffd4c 103 * for PAR protocols: a signle RD bit toggle
Geremia 20:14daa48ffd4c 104 * for SPI8: 8clocks
Geremia 20:14daa48ffd4c 105 * for SPI16: 16 clocks
Geremia 20:14daa48ffd4c 106 */
Geremia 20:14daa48ffd4c 107 virtual void dummyread ();
Geremia 20:14daa48ffd4c 108
Geremia 20:14daa48ffd4c 109 /** ILI932x specific, select register for a successive write or read
Geremia 20:14daa48ffd4c 110 *
Geremia 20:14daa48ffd4c 111 * @param reg register to be selected
Geremia 20:14daa48ffd4c 112 * @param forread false = a write next (default), true = a read next
Geremia 20:14daa48ffd4c 113 * @note forread only used by SPI protocols
Geremia 20:14daa48ffd4c 114 */
Geremia 20:14daa48ffd4c 115 virtual void reg_select(unsigned char reg, bool forread =false);
Geremia 20:14daa48ffd4c 116
Geremia 20:14daa48ffd4c 117 /** ILI932x specific, write register with data
Geremia 20:14daa48ffd4c 118 *
Geremia 20:14daa48ffd4c 119 * @param reg register to write
Geremia 20:14daa48ffd4c 120 * @param data 16bit data
Geremia 20:14daa48ffd4c 121 */
Geremia 20:14daa48ffd4c 122 virtual void reg_write(unsigned char reg, unsigned short data);
Geremia 20:14daa48ffd4c 123
Geremia 20:14daa48ffd4c 124 /** ILI932x specific, read register
Geremia 20:14daa48ffd4c 125 *
Geremia 20:14daa48ffd4c 126 * @param reg register to be read
Geremia 20:14daa48ffd4c 127 * @returns 16bit register value
Geremia 20:14daa48ffd4c 128 */
Geremia 20:14daa48ffd4c 129 virtual unsigned short reg_read(unsigned char reg);
Geremia 20:14daa48ffd4c 130
Geremia 1:ff019d22b275 131 /** HW reset sequence (without display init commands)
Geremia 1:ff019d22b275 132 */
Geremia 1:ff019d22b275 133 virtual void hw_reset();
Geremia 1:ff019d22b275 134
Geremia 1:ff019d22b275 135 /** Set ChipSelect high or low
Geremia 1:ff019d22b275 136 * @param enable 0/1
Geremia 1:ff019d22b275 137 */
Geremia 1:ff019d22b275 138 virtual void BusEnable(bool enable);
Geremia 1:ff019d22b275 139
Geremia 1:ff019d22b275 140 DigitalOut _CS;
Geremia 1:ff019d22b275 141
Geremia 1:ff019d22b275 142 private:
Geremia 1:ff019d22b275 143
Geremia 1:ff019d22b275 144 SPI _spi;
Geremia 1:ff019d22b275 145 DigitalOut _reset;
Geremia 1:ff019d22b275 146 DigitalOut _DC;
Geremia 1:ff019d22b275 147
Geremia 1:ff019d22b275 148 };
Geremia 1:ff019d22b275 149 #endif