Skip to content

Commit 78ee754

Browse files
committed
Merge remote-tracking branch 'remotes/esp8266/esp8266' into esp8266
Conflicts: hardware/esp8266com/esp8266/cores/esp8266/core_esp8266_noniso.c
2 parents 3bb2de4 + 2066c26 commit 78ee754

19 files changed

+3571
-0
lines changed

cores/esp8266/pgmspace.h

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#define PROGMEM
77
#define PGM_P const char *
88
#define PSTR(str) (str)
9+
#define F(str) (str)
910

1011
#define vsnprintf_P(...) vsnprintf( __VA_ARGS__ )
1112
#define snprintf_P(...) snprintf( __VA_ARGS__ )
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,232 @@
1+
#include "Adafruit_ILI9341.h"
2+
#include "Adafruit_GFX.h"
3+
4+
extern "C"{
5+
#include <ets_sys.h>
6+
#include <os_type.h>
7+
#include <osapi.h>
8+
#include "driver\hspi.h"
9+
}
10+
11+
#define SWAPBYTES(i) ((i>>8) | (i<<8))
12+
13+
void Adafruit_ILI9341::transmitCmdData(uint8_t cmd, const uint8_t *data, uint8_t numDataByte)
14+
{
15+
spi_wait_ready();
16+
TFT_DC_COMMAND;
17+
spi_send_uint8(cmd);
18+
spi_wait_ready();
19+
TFT_DC_DATA;
20+
spi_send_data(data, numDataByte);
21+
}
22+
23+
void Adafruit_ILI9341::begin() {
24+
//Set communication using HW SPI Port
25+
config = spi_init(HSPI, 1, spi_mode_tx);
26+
TFT_DC_INIT;
27+
delay(1);
28+
29+
uint8_t data[15] = {0};
30+
31+
data[0] = 0x39;
32+
data[1] = 0x2C;
33+
data[2] = 0x00;
34+
data[3] = 0x34;
35+
data[4] = 0x02;
36+
transmitCmdData(0xCB, data, 5);
37+
38+
data[0] = 0x00;
39+
data[1] = 0XC1;
40+
data[2] = 0X30;
41+
transmitCmdData(0xCF, data, 3);
42+
43+
data[0] = 0x85;
44+
data[1] = 0x00;
45+
data[2] = 0x78;
46+
transmitCmdData(0xE8, data, 3);
47+
48+
data[0] = 0x00;
49+
data[1] = 0x00;
50+
transmitCmdData(0xEA, data, 2);
51+
52+
data[0] = 0x64;
53+
data[1] = 0x03;
54+
data[2] = 0X12;
55+
data[3] = 0X81;
56+
transmitCmdData(0xED, data, 4);
57+
58+
data[0] = 0x20;
59+
transmitCmdData(0xF7, data, 1);
60+
61+
data[0] = 0x23; //VRH[5:0]
62+
transmitCmdData(0xC0, data, 1); //Power control
63+
64+
data[0] = 0x10; //SAP[2:0];BT[3:0]
65+
transmitCmdData(0xC1, data, 1); //Power control
66+
67+
data[0] = 0x3e; //Contrast
68+
data[1] = 0x28;
69+
transmitCmdData(0xC5, data, 2); //VCM control
70+
71+
data[0] = 0x86; //--
72+
transmitCmdData(0xC7, data, 1); //VCM control2
73+
74+
data[0] = 0x48; //C8
75+
transmitCmdData(0x36, data, 1); // Memory Access Control
76+
77+
data[0] = 0x55;
78+
transmitCmdData(0x3A, data, 1);
79+
80+
data[0] = 0x00;
81+
data[1] = 0x18;
82+
transmitCmdData(0xB1, data, 2);
83+
84+
data[0] = 0x08;
85+
data[1] = 0x82;
86+
data[2] = 0x27;
87+
transmitCmdData(0xB6, data, 3); // Display Function Control
88+
89+
data[0] = 0x00;
90+
transmitCmdData(0xF2, data, 1); // 3Gamma Function Disable
91+
92+
data[0] = 0x01;
93+
transmitCmdData(0x26, data, 1); //Gamma curve selected
94+
95+
data[0] = 0x0F;
96+
data[1] = 0x31;
97+
data[2] = 0x2B;
98+
data[3] = 0x0C;
99+
data[4] = 0x0E;
100+
data[5] = 0x08;
101+
data[6] = 0x4E;
102+
data[7] = 0xF1;
103+
data[8] = 0x37;
104+
data[9] = 0x07;
105+
data[10] = 0x10;
106+
data[11] = 0x03;
107+
data[12] = 0x0E;
108+
data[13] = 0x09;
109+
data[14] = 0x00;
110+
transmitCmdData(0xE0, data, 15); //Set Gamma
111+
112+
data[0] = 0x00;
113+
data[1] = 0x0E;
114+
data[2] = 0x14;
115+
data[3] = 0x03;
116+
data[4] = 0x11;
117+
data[5] = 0x07;
118+
data[6] = 0x31;
119+
data[7] = 0xC1;
120+
data[8] = 0x48;
121+
data[9] = 0x08;
122+
data[10] = 0x0F;
123+
data[11] = 0x0C;
124+
data[12] = 0x31;
125+
data[13] = 0x36;
126+
data[14] = 0x0F;
127+
transmitCmdData(0xE1, data, 15); //Set Gamma
128+
129+
transmitCmd(0x11); //Exit Sleep
130+
delay(120);
131+
132+
transmitCmd(0x29); //Display on
133+
transmitCmd(0x2c);
134+
spi_wait_ready();
135+
}
136+
137+
void Adafruit_ILI9341::drawPixel(int16_t x, int16_t y, uint16_t color) {
138+
139+
if((x < 0) ||(x >= _width) || (y < 0) || (y >= _height)) return;
140+
setAddrWindow(x,y,x+1,y+1);
141+
transmitData(SWAPBYTES(color));
142+
}
143+
144+
145+
void Adafruit_ILI9341::drawFastVLine(int16_t x, int16_t y, int16_t h,
146+
uint16_t color) {
147+
148+
// Rudimentary clipping
149+
if((x >= _width) || (y >= _height)) return;
150+
151+
if((y+h-1) >= _height)
152+
h = _height-y;
153+
154+
setAddrWindow(x, y, x, y+h-1);
155+
transmitData(SWAPBYTES(color), h);
156+
}
157+
158+
void Adafruit_ILI9341::drawFastHLine(int16_t x, int16_t y, int16_t w,
159+
uint16_t color) {
160+
161+
// Rudimentary clipping
162+
if((x >= _width) || (y >= _height)) return;
163+
if((x+w-1) >= _width) w = _width-x;
164+
setAddrWindow(x, y, x+w-1, y);
165+
transmitData(SWAPBYTES(color), w);
166+
}
167+
168+
void Adafruit_ILI9341::fillScreen(uint16_t color) {
169+
fillRect(0, 0, _width, _height, color);
170+
}
171+
172+
// fill a rectangle
173+
void Adafruit_ILI9341::fillRect(int16_t x, int16_t y, int16_t w, int16_t h,
174+
uint16_t color) {
175+
176+
// rudimentary clipping (drawChar w/big text requires this)
177+
if((x >= _width) || (y >= _height)) return;
178+
if((x + w - 1) >= _width) w = _width - x;
179+
if((y + h - 1) >= _height) h = _height - y;
180+
181+
setAddrWindow(x, y, x+w-1, y+h-1);
182+
transmitData(SWAPBYTES(color), h*w);
183+
}
184+
185+
186+
// Pass 8-bit (each) R,G,B, get back 16-bit packed color
187+
uint16_t Adafruit_ILI9341::color565(uint8_t r, uint8_t g, uint8_t b) {
188+
return ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3);
189+
}
190+
191+
192+
#define MADCTL_MY 0x80
193+
#define MADCTL_MX 0x40
194+
#define MADCTL_MV 0x20
195+
#define MADCTL_ML 0x10
196+
#define MADCTL_RGB 0x00
197+
#define MADCTL_BGR 0x08
198+
#define MADCTL_MH 0x04
199+
200+
void Adafruit_ILI9341::setRotation(uint8_t m) {
201+
202+
uint8_t data;
203+
rotation = m % 4; // can't be higher than 3
204+
switch (rotation) {
205+
case 0:
206+
data = MADCTL_MX | MADCTL_BGR;
207+
_width = ILI9341_TFTWIDTH;
208+
_height = ILI9341_TFTHEIGHT;
209+
break;
210+
case 1:
211+
data = MADCTL_MV | MADCTL_BGR;
212+
_width = ILI9341_TFTHEIGHT;
213+
_height = ILI9341_TFTWIDTH;
214+
break;
215+
case 2:
216+
data = MADCTL_MY | MADCTL_BGR;
217+
_width = ILI9341_TFTWIDTH;
218+
_height = ILI9341_TFTHEIGHT;
219+
break;
220+
case 3:
221+
data = MADCTL_MX | MADCTL_MY | MADCTL_MV | MADCTL_BGR;
222+
_width = ILI9341_TFTHEIGHT;
223+
_height = ILI9341_TFTWIDTH;
224+
break;
225+
}
226+
transmitCmdData(ILI9341_MADCTL, &data, 1);
227+
}
228+
229+
230+
void Adafruit_ILI9341::invertDisplay(boolean i) {
231+
transmitCmd(i ? ILI9341_INVON : ILI9341_INVOFF);
232+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
#ifndef _ADAFRUIT_ILI9341H_
2+
#define _ADAFRUIT_ILI9341H_
3+
4+
#include "Adafruit_GFX.h"
5+
6+
extern "C"
7+
{
8+
#include <c_types.h>
9+
#include <osapi.h>
10+
#include <gpio.h>
11+
#include "driver\hspi.h"
12+
}
13+
14+
#define ILI9341_TFTWIDTH 240
15+
#define ILI9341_TFTHEIGHT 320
16+
17+
#define ILI9341_NOP 0x00
18+
#define ILI9341_SWRESET 0x01
19+
#define ILI9341_RDDID 0x04
20+
#define ILI9341_RDDST 0x09
21+
22+
#define ILI9341_SLPIN 0x10
23+
#define ILI9341_SLPOUT 0x11
24+
#define ILI9341_PTLON 0x12
25+
#define ILI9341_NORON 0x13
26+
27+
#define ILI9341_RDMODE 0x0A
28+
#define ILI9341_RDMADCTL 0x0B
29+
#define ILI9341_RDPIXFMT 0x0C
30+
#define ILI9341_RDIMGFMT 0x0A
31+
#define ILI9341_RDSELFDIAG 0x0F
32+
33+
#define ILI9341_INVOFF 0x20
34+
#define ILI9341_INVON 0x21
35+
#define ILI9341_GAMMASET 0x26
36+
#define ILI9341_DISPOFF 0x28
37+
#define ILI9341_DISPON 0x29
38+
39+
#define ILI9341_CASET 0x2A
40+
#define ILI9341_PASET 0x2B
41+
#define ILI9341_RAMWR 0x2C
42+
#define ILI9341_RAMRD 0x2E
43+
44+
#define ILI9341_PTLAR 0x30
45+
#define ILI9341_MADCTL 0x36
46+
#define ILI9341_PIXFMT 0x3A
47+
48+
#define ILI9341_FRMCTR1 0xB1
49+
#define ILI9341_FRMCTR2 0xB2
50+
#define ILI9341_FRMCTR3 0xB3
51+
#define ILI9341_INVCTR 0xB4
52+
#define ILI9341_DFUNCTR 0xB6
53+
54+
#define ILI9341_PWCTR1 0xC0
55+
#define ILI9341_PWCTR2 0xC1
56+
#define ILI9341_PWCTR3 0xC2
57+
#define ILI9341_PWCTR4 0xC3
58+
#define ILI9341_PWCTR5 0xC4
59+
#define ILI9341_VMCTR1 0xC5
60+
#define ILI9341_VMCTR2 0xC7
61+
62+
#define ILI9341_RDID1 0xDA
63+
#define ILI9341_RDID2 0xDB
64+
#define ILI9341_RDID3 0xDC
65+
#define ILI9341_RDID4 0xDD
66+
67+
#define ILI9341_GMCTRP1 0xE0
68+
#define ILI9341_GMCTRN1 0xE1
69+
/*
70+
#define ILI9341_PWCTR6 0xFC
71+
72+
*/
73+
74+
// Color definitions
75+
#define ILI9341_BLACK 0x0000
76+
#define ILI9341_BLUE 0x001F
77+
#define ILI9341_RED 0xF800
78+
#define ILI9341_GREEN 0x07E0
79+
#define ILI9341_CYAN 0x07FF
80+
#define ILI9341_MAGENTA 0xF81F
81+
#define ILI9341_YELLOW 0xFFE0
82+
#define ILI9341_WHITE 0xFFFF
83+
84+
#define TFT_DC_DATA GPIO_OUTPUT_SET(2, 1)
85+
#define TFT_DC_COMMAND GPIO_OUTPUT_SET(2, 0)
86+
#define TFT_DC_INIT PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2); TFT_DC_DATA
87+
88+
#define MAKEWORD(b1, b2, b3, b4) (uint32_t(b1) | ((b2) << 8) | ((b3) << 16) | ((b4) << 24))
89+
#define SWAPBYTES(i) ((i>>8) | (i<<8))
90+
91+
class Adafruit_ILI9341 : public Adafruit_GFX {
92+
93+
private:
94+
uint8_t tabcolor;
95+
spi_config config;
96+
void transmitCmdData(uint8_t cmd, const uint8_t *data, uint8_t numDataByte);
97+
inline void transmitData(uint16_t data) {spi_wait_ready(); spi_send_uint16(data);}
98+
inline void transmitCmdData(uint8_t cmd, uint32_t data) {spi_wait_ready(); TFT_DC_COMMAND; spi_send_uint8(cmd); spi_wait_ready(); TFT_DC_DATA; spi_send_uint32(data);}
99+
inline void transmitData(uint16_t data, int32_t repeats){spi_wait_ready(); spi_send_uint16_r(data, repeats);}
100+
inline void transmitCmd(uint8_t cmd){spi_wait_ready(); TFT_DC_COMMAND; spi_send_uint8(cmd);spi_wait_ready(); TFT_DC_DATA;}
101+
inline void drawPixelInternal(int16_t x, int16_t y, uint16_t color) { if((x < 0) ||(x >= _width) || (y < 0) || (y >= _height)) return;
102+
setAddrWindow(x,y,x+1,y+1);
103+
transmitData(SWAPBYTES(color));
104+
}
105+
106+
public:
107+
Adafruit_ILI9341() : Adafruit_GFX(ILI9341_TFTWIDTH, ILI9341_TFTHEIGHT), tabcolor(0){}
108+
109+
void begin(),
110+
fillScreen(uint16_t color),
111+
drawPixel(int16_t x, int16_t y, uint16_t color),
112+
drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color),
113+
drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color),
114+
fillRect(int16_t x, int16_t y, int16_t w, int16_t h,
115+
uint16_t color),
116+
setRotation(uint8_t r),
117+
invertDisplay(boolean i);
118+
inline void setAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1)
119+
{ transmitCmdData(ILI9341_CASET, MAKEWORD(x0 >> 8, x0 & 0xFF, x1 >> 8, x1 & 0xFF));
120+
transmitCmdData(ILI9341_PASET, MAKEWORD(y0 >> 8, y0 & 0xFF, y1 >> 8, y1 & 0xFF));
121+
transmitCmd(ILI9341_RAMWR); // write to RAM
122+
}
123+
uint16_t color565(uint8_t r, uint8_t g, uint8_t b);
124+
};
125+
126+
#endif

0 commit comments

Comments
 (0)