Skip to content

Commit d25099b

Browse files
committed
kedei_trash.cpp
kedei_trash.h
1 parent d6dd968 commit d25099b

File tree

2 files changed

+410
-0
lines changed

2 files changed

+410
-0
lines changed

kedei_trash.cpp

Lines changed: 386 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,386 @@
1+
#include <stdio.h>
2+
#include <stdint.h>
3+
#include <bcm2835.h>
4+
#include <unistd.h>
5+
#include "kedei_trash.h"
6+
7+
int spi_open(void) {
8+
int r;
9+
uint32_t v;
10+
11+
r = bcm2835_init(); // return 0 on fail
12+
if (r != 1) return -1;
13+
14+
bcm2835_spi_begin();
15+
bcm2835_spi_setBitOrder(BCM2835_SPI_BIT_ORDER_MSBFIRST); // MSB bit goes first
16+
bcm2835_spi_setDataMode(BCM2835_SPI_MODE3); // mode 0
17+
bcm2835_spi_setClockDivider(BCM2835_SPI_CLOCK_DIVIDER_8 ); // SPI_CLK 31.25MHz - MAX
18+
//bcm2835_spi_setClockDivider(BCM2835_SPI_CLOCK_DIVIDER_64);
19+
bcm2835_spi_chipSelect(BCM2835_SPI_CS1); // CS1 - for now, with TP CS0 will be used too
20+
// setup both SPI.CSx
21+
bcm2835_spi_setChipSelectPolarity(BCM2835_SPI_CS0, LOW); // CS0 - active Low
22+
bcm2835_spi_setChipSelectPolarity(BCM2835_SPI_CS1, LOW); // CS1 - active Low
23+
24+
v = bcm2835_version();
25+
fprintf(stdout, "bcm2835 library version: %u (0x%08x)\n", v,v);
26+
27+
return 0; // OK!
28+
29+
}
30+
31+
#define bcm2835_peri_set_bits(paddr, a, b) (*paddr = a | *paddr)
32+
#define bcm2835_peri_read_nb(paddr) (*paddr)
33+
34+
void spi_write2(const char* tbuf, const char *tbuf2)
35+
{
36+
volatile static uint32_t* paddr = bcm2835_spi0 + BCM2835_SPI0_CS/4;
37+
volatile static uint32_t* fifo = bcm2835_spi0 + BCM2835_SPI0_FIFO/4;
38+
39+
bcm2835_peri_set_bits(paddr, BCM2835_SPI0_CS_TA | BCM2835_SPI0_CS_CLEAR, BCM2835_SPI0_CS_TA);
40+
*fifo = tbuf[1];
41+
*fifo = tbuf[0];
42+
*fifo = tbuf[2];
43+
while (!(bcm2835_peri_read_nb(paddr) & BCM2835_SPI0_CS_DONE));
44+
bcm2835_peri_set_bits(paddr, BCM2835_SPI0_CS_TA | BCM2835_SPI0_CS_CLEAR, BCM2835_SPI0_CS_TA);
45+
*fifo = tbuf2[0];
46+
*fifo = tbuf2[1];
47+
while (!(bcm2835_peri_read_nb(paddr) & BCM2835_SPI0_CS_DONE));
48+
49+
}
50+
51+
void lcd_data8(uint8_t *data) {
52+
static char b1[3] = { 0, 0, 0x15 }, b2[2] = { 0, 0x1f};
53+
b1[1] = data[0];
54+
b1[0] = data[1];
55+
// printf("%02x", b1[1]);
56+
// printf("%02x,", b1[0]);
57+
spi_write2(b1, b2);
58+
}
59+
60+
void lcd_data(uint16_t data) {
61+
static char b1[3] = { 0, 0, 0x15 }, b2[2] = { 0, 0x1f};
62+
*(uint16_t *)b1 = data;
63+
// printf("%02x", b1[1]);
64+
// printf("%02x,", b1[0]);
65+
spi_write2(b1, b2);
66+
}
67+
68+
void lcd_cmd(uint8_t cmd) {
69+
static char b1[3] = { 0, 0, 0x11 }, b2[2] = { 0, 0x1B};
70+
b1[0] = cmd;
71+
// printf("\n%02x:", cmd);
72+
// b1[0] = ((char *)&data)[1];
73+
// b1[1] = ((char *)&data)[0];
74+
spi_write2(b1, b2);
75+
}
76+
77+
#define SPI_TRANSFER(cmd, ...) do \
78+
{ \
79+
int16_t dbuf[] = { __VA_ARGS__ }; \
80+
int len = sizeof(dbuf)/(sizeof(int16_t)); \
81+
lcd_cmd(cmd); \
82+
for(int ix = 0; ix < len; ix++) \
83+
lcd_data(dbuf[ix]); \
84+
} while(0);
85+
86+
void lcd_setptr(void) {
87+
lcd_cmd(0x002b);
88+
lcd_data(0x0000);
89+
lcd_data(0x0000); // 0
90+
lcd_data(0x0001);
91+
lcd_data(0x003f); //319
92+
93+
lcd_cmd(0x002a);
94+
lcd_data(0x0000);
95+
lcd_data(0x0000); // 0
96+
lcd_data(0x0001);
97+
lcd_data(0x00df); // 479
98+
99+
lcd_cmd(0x002c);
100+
}
101+
102+
void lcd_setarea(uint16_t x, uint16_t y) {
103+
lcd_cmd(0x002b);
104+
lcd_data(y>>8);
105+
lcd_data(0x00ff&y);
106+
lcd_data(0x0001);
107+
lcd_data(0x003f);
108+
109+
lcd_cmd(0x002a);
110+
lcd_data(x>>8) ;
111+
lcd_data(0x00ff&x) ;
112+
lcd_data(0x0001);
113+
lcd_data(0x00df);
114+
lcd_cmd(0x002c);
115+
}
116+
117+
void lcd_setarea2(uint16_t sx, uint16_t sy, uint16_t x, uint16_t y) {
118+
119+
if (sx>479) sx=0;
120+
if (sy>319) sy=0;
121+
if (x>479) x=479;
122+
if (y>319) y=319;
123+
124+
lcd_cmd(0x002b);
125+
lcd_data(sy>>8) ;
126+
lcd_data(0x00ff&sy);
127+
lcd_data(y>>8);
128+
lcd_data(0x00ff&y);
129+
130+
lcd_cmd(0x002a);
131+
lcd_data(sx>>8) ;
132+
lcd_data(0x00ff&sx) ;
133+
lcd_data(x>>8);
134+
lcd_data(0x00ff&x);
135+
136+
lcd_cmd(0x002c);
137+
}
138+
139+
void lcd_fill(uint16_t color565) {
140+
// static char b1[3] = { 0, 0, 0x15 }, b2[2] = { 0, 0x1f};
141+
// b1[0] = ((char *)&color565)[1];
142+
// b1[1] = ((char *)&color565)[0];
143+
lcd_setptr();
144+
for(int x=0; x<153601;x++) {
145+
lcd_data(color565);
146+
// bcm2835_spi_writenb(b1, 3);
147+
// bcm2835_spi_writenb(b2, 2);
148+
}
149+
}
150+
151+
void lcd_fill2(uint16_t sx, uint16_t sy, uint16_t x, uint16_t y, uint16_t color565) {
152+
uint16_t tmp=0;
153+
int cnt;
154+
if (sx>479) sx=0;
155+
if (sy>319) sy=0;
156+
if (x>479) x=479;
157+
if (y>319) y=319;
158+
159+
if (sx>x) {
160+
tmp=sx;
161+
sx=x;
162+
x=tmp;
163+
}
164+
165+
if (sy>y) {
166+
tmp=sy;
167+
sy=y;
168+
y=tmp;
169+
}
170+
171+
cnt = (y-sy) * (x-sx);
172+
lcd_setarea2(sx,sy,x,y);
173+
for(int t=0;t<cnt;t++) {
174+
lcd_data(color565);
175+
}
176+
}
177+
178+
void lcd_init()
179+
{
180+
SPI_TRANSFER(0x0);
181+
usleep(50);
182+
SPI_TRANSFER(0x1);
183+
usleep(1000);
184+
SPI_TRANSFER(0x00B0, 0x0);
185+
SPI_TRANSFER(0x0011);
186+
// lcd_cmd(0x0011);
187+
// SPI_TRANSFER(0x11);
188+
usleep(50);
189+
190+
SPI_TRANSFER(0x00B0, 0x02, 0, 0, 0);
191+
// lcd_cmd(0x00B3);
192+
// lcd_data(0x0002);
193+
// lcd_data(0x0000);
194+
// lcd_data(0x0000);
195+
// lcd_data(0x0000);
196+
197+
SPI_TRANSFER(0xc0, 0x10, 0x003B, 0x0000, 0x0002, 0x0000, 0x0001, 0x0000, 0x0043);
198+
// lcd_cmd(0x00C0);
199+
// lcd_data(0x0010);//13
200+
// lcd_data(0x003B);//480
201+
// lcd_data(0x0000);
202+
// lcd_data(0x0002);
203+
// lcd_data(0x0000);
204+
// lcd_data(0x0001);
205+
// lcd_data(0x0000);//NW
206+
// lcd_data(0x0043);
207+
208+
SPI_TRANSFER(0x00C1, 0x0008, 0x0016, 0x0008, 0x0008);
209+
// lcd_cmd(0x00C1);
210+
// lcd_data(0x0008);//w_data(0x0008);
211+
// lcd_data(0x0016);//w_data(0x0016);//CLOCK
212+
// lcd_data(0x0008);
213+
// lcd_data(0x0008);
214+
215+
SPI_TRANSFER(0x00C4, 0x0011, 0x0007, 0x0003, 0x0003);
216+
// lcd_cmd(0x00C4);
217+
// lcd_data(0x0011);
218+
// lcd_data(0x0007);
219+
// lcd_data(0x0003);
220+
// lcd_data(0x0003);
221+
222+
SPI_TRANSFER(0x00C6, 0x0000);
223+
// lcd_cmd(0x00C6);
224+
// lcd_data(0x0000);
225+
226+
SPI_TRANSFER(0x00C8, 0x0003, 0x0003, 0x0013, 0x005C, \
227+
0x0003, 0x0007, 0x0014, 0x0008, 0x0000, \
228+
0x0021, 0x0008, 0x0014, 0x0007, 0x0053, \
229+
0x000C, 0x0013, 0x0003, 0x0021, 0x0000);
230+
lcd_cmd(0x00C8); //GAMMA
231+
// lcd_data(0x0003);
232+
// lcd_data(0x0003);
233+
// lcd_data(0x0013);
234+
// lcd_data(0x005C);
235+
// lcd_data(0x0003);
236+
// lcd_data(0x0007);
237+
// lcd_data(0x0014);
238+
// lcd_data(0x0008);
239+
// lcd_data(0x0000);
240+
// lcd_data(0x0021);
241+
// lcd_data(0x0008);
242+
// lcd_data(0x0014);
243+
// lcd_data(0x0007);
244+
// lcd_data(0x0053);
245+
// lcd_data(0x000C);
246+
// lcd_data(0x0013);
247+
// lcd_data(0x0003);
248+
// lcd_data(0x0003);
249+
// lcd_data(0x0021);
250+
// lcd_data(0x0000);
251+
252+
SPI_TRANSFER(0x0035, 0x0000);
253+
// lcd_cmd(0x0035);
254+
// lcd_data(0x0000);
255+
256+
SPI_TRANSFER(0x0036, 0x0028);
257+
// lcd_cmd(0x0036);
258+
// lcd_data(0x0028);
259+
260+
SPI_TRANSFER(0x003A, 0x0055);
261+
// lcd_cmd(0x003A);
262+
// lcd_data(0x0055); //55 lgh
263+
264+
SPI_TRANSFER(0x0044, 0x0000, 0x0001);
265+
// lcd_cmd(0x0044);
266+
// lcd_data(0x0000);
267+
// lcd_data(0x0001);
268+
269+
SPI_TRANSFER(0x00B6, 0x0000, 0x0002, 0x003B);
270+
// lcd_cmd(0x00B6);
271+
// lcd_data(0x0000);
272+
// lcd_data(0x0002); //220 GS SS SM ISC[3:0]
273+
// lcd_data(0x003B);
274+
275+
SPI_TRANSFER(0x00D0, 0x0007, 0x0007, 0x001D);
276+
// lcd_cmd(0x00D0);
277+
// lcd_data(0x0007);
278+
// lcd_data(0x0007); //VCI1
279+
// lcd_data(0x001D); //VRH
280+
281+
SPI_TRANSFER(0x00D1, 0x0000, 0x0003, 0x0000);
282+
// lcd_cmd(0x00D1);
283+
// lcd_data(0x0000);
284+
// lcd_data(0x0003); //VCM
285+
// lcd_data(0x0000); //VDV
286+
287+
SPI_TRANSFER(0x00D2, 0x0003, 0x0014, 0x0004);
288+
// lcd_cmd(0x00D2);
289+
// lcd_data(0x0003);
290+
// lcd_data(0x0014);
291+
// lcd_data(0x0004);
292+
293+
SPI_TRANSFER(0xE0, 0x1f, 0x2C, 0x2C, 0x0B, 0x0C, 0x04, 0x4C, 0x64, 0x36, 0x03, 0x0E, 0x01, 0x10, 0x01, 0x00);
294+
// lcd_cmd(0xE0);
295+
// lcd_data(0x1f);
296+
// lcd_data(0x2C);
297+
// lcd_data(0x2C);
298+
// lcd_data(0x0B);
299+
// lcd_data(0x0C);
300+
// lcd_data(0x04);
301+
// lcd_data(0x4C);
302+
// lcd_data(0x64);
303+
// lcd_data(0x36);
304+
// lcd_data(0x03);
305+
// lcd_data(0x0E);
306+
// lcd_data(0x01);
307+
// lcd_data(0x10);
308+
// lcd_data(0x01);
309+
// lcd_data(0x00);
310+
311+
SPI_TRANSFER(0XE1, 0x1f, 0x3f, 0x3f, 0x0f, 0x1f, 0x0f, 0x7f, 0x32, 0x36, 0x04, 0x0B, 0x00, 0x19, 0x14, 0x0F);
312+
// lcd_cmd(0XE1);
313+
// lcd_data(0x1f);
314+
// lcd_data(0x3f);
315+
// lcd_data(0x3f);
316+
// lcd_data(0x0f);
317+
// lcd_data(0x1f);
318+
// lcd_data(0x0f);
319+
// lcd_data(0x7f);
320+
// lcd_data(0x32);
321+
// lcd_data(0x36);
322+
// lcd_data(0x04);
323+
// lcd_data(0x0B);
324+
// lcd_data(0x00);
325+
// lcd_data(0x19);
326+
// lcd_data(0x14);
327+
// lcd_data(0x0F);
328+
329+
SPI_TRANSFER(0xE2, 0x0f, 0x0f, 0x0f);
330+
// lcd_cmd(0xE2);
331+
// lcd_data(0x0f);
332+
// lcd_data(0x0f);
333+
// lcd_data(0x0f);
334+
335+
SPI_TRANSFER(0xE3, 0x0f, 0x0f, 0x0f);
336+
// lcd_cmd(0xE3);
337+
// lcd_data(0x0f);
338+
// lcd_data(0x0f);
339+
// lcd_data(0x0f);
340+
341+
SPI_TRANSFER(0x13);
342+
// lcd_cmd(0x13);
343+
344+
SPI_TRANSFER(0x0029);
345+
// lcd_cmd(0x0029);
346+
usleep(20); //mdelay(20);
347+
348+
SPI_TRANSFER(0x00B4, 0x0000);
349+
// lcd_cmd(0x00B4);
350+
// lcd_data(0x0000);
351+
usleep(20); //mdelay(20);
352+
353+
SPI_TRANSFER(0x002C);
354+
// lcd_cmd(0x002C);
355+
356+
SPI_TRANSFER(0x00D2, 0x0003, 0x0014, 0x0004);
357+
// lcd_cmd(0x002A);
358+
// lcd_data(0x0000);
359+
// lcd_data(0x0000);
360+
// lcd_data(0x0001);
361+
// lcd_data(0x000dF);
362+
363+
SPI_TRANSFER(0x002B, 0x0000, 0x0000, 0x0001, 0x003f);
364+
// lcd_cmd(0x002B);
365+
// lcd_data(0x0000);
366+
// lcd_data(0x0000);
367+
// lcd_data(0x0001);
368+
// lcd_data(0x003f);
369+
370+
SPI_TRANSFER(0x002c);
371+
// lcd_cmd(0x002c);
372+
}
373+
374+
extern void ClearScreen();
375+
void InitKeDeiTrash()
376+
{
377+
spi_open();
378+
lcd_init();
379+
lcd_fill(0xfff);
380+
ClearScreen();
381+
}
382+
383+
void DeinitSPIDisplay()
384+
{
385+
ClearScreen();
386+
}

0 commit comments

Comments
 (0)