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.
Dependents: afero_poc15_180216 afero_poc15_180223 afero_poc15_180302 afero_poc15_180403R ... more
Fork of UniGraphic by
UniGraphic for La Suno Version.
To go with La Suno, WatchDog Reset functions were added in ILI9341.
Protocols/PAR16.h@11:b842b8e332cb, 2015-02-20 (annotated)
- 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?
User | Revision | Line number | New 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 |