aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gdisp/SSD1963/board_SSD1963_template.h
blob: 5e1999b8971daf889783d51d398216146a7e7557 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
/*
 * This file is subject to the terms of the GFX License. If a copy of
 * the license was not distributed with this file, you can obtain one at:
 *
 *              http://ugfx.org/license.html
 */

/**
 * @file    drivers/gdisp/SSD1963/board_SSD1963_template.h
 * @brief   GDISP Graphic Driver subsystem board interface for the SSD1963 display.
 *
 * @addtogroup GDISP
 * @{
 */

#ifndef _GDISP_LLD_BOARD_H
#define _GDISP_LLD_BOARD_H

/**
 * @brief	LCD panel specs
 *
 * @note	The timings need to follow the datasheet for your particular TFT/LCD screen
 * 			(the actual screen, not the controller).
 * @note	Datasheets normally use a specific set of timings and acronyms, their value refers
 * 			to the number of pixel clocks. Non-display periods refer to pulses/timings that occur
 * 			before or after the timings that actually put pixels on the screen. Display periods
 * 			refer to pulses/timings that directly put pixels on the screen.
 * @note	HDP: Horizontal Display Period, normally the width - 1<br>
 * 			HT: Horizontal Total period (display + non-display)<br>
 * 			HPS: non-display period between the start of the horizontal sync (LLINE) signal
 * 				and the first display data<br>
 * 			LPS: horizontal sync pulse (LLINE) start location in pixel clocks<br>
 * 			HPW: Horizontal sync Pulse Width<br>
 * 			VDP: Vertical Display period, normally height - 1<br>
 * 			VT: Vertical Total period (display + non-display)<br>
 * 			VPS: non-display period in lines between the start of the frame and the first display
 * 				data in number of lines<br>
 * 			FPS: vertical sync pulse (LFRAME) start location in lines.<br>
 * 			VPW: Vertical sync Pulse Width
 * @note	Here's how to convert them:<br>
 * 				SCREEN_HSYNC_FRONT_PORCH = ( HT - HPS ) - GDISP_SCREEN_WIDTH<br>
 * 				SCREEN_HSYNC_PULSE = HPW<br>
 * 				SCREEN_HSYNC_BACK_PORCH = HPS - HPW<br>
 * 				SCREEN_VSYNC_FRONT_PORCH = ( VT - VPS ) - GDISP_SCREEN_HEIGHT<br>
 * 				SCREEN_VSYNC_PULSE = VPW<br>
 * 				SCREEN_VSYNC_BACK_PORCH = VPS - LPS<br>
 */

static const LCD_Parameters	DisplayTimings[] = {
	// You need one of these array elements per display
	{
		480, 272,								// Panel width and height
		2, 2, 41,								// Horizontal Timings (back porch, front porch, pulse)
		CALC_PERIOD(480,2,2,41),				// Total Horizontal Period (calculated from above line)
		2, 2, 10,								// Vertical Timings (back porch, front porch, pulse)
		CALC_PERIOD(272,2,2,10),				// Total Vertical Period (calculated from above line)
		CALC_FPR(480,272,2,2,41,2,2,10,60ULL)	// FPR - the 60ULL is the frames per second. Note the ULL!
	},
};

/**
 * @brief   Initialise the board for the display.
 *
 * @param[in] g			The GDisplay structure
 *
 * @note	Set the g->board member to whatever is appropriate. For multiple
 * 			displays this might be a pointer to the appropriate register set.
 *
 * @notapi
 */
static inline void init_board(GDisplay *g) {
	(void) g;
}

/**
 * @brief   After the initialisation.
 *
 * @param[in] g			The GDisplay structure
 *
 * @notapi
 */
static inline void post_init_board(GDisplay *g) {
	(void) g;
}

/**
 * @brief   Set or clear the lcd reset pin.
 *
 * @param[in] g			The GDisplay structure
 * @param[in] state		TRUE = lcd in reset, FALSE = normal operation
 * 
 * @notapi
 */
static inline void setpin_reset(GDisplay *g, bool_t state) {
	(void) g;
	(void) state;
}

/**
 * @brief   Take exclusive control of the bus
 *
 * @param[in] g				The GDisplay structure
 *
 * @notapi
 */
static inline void acquire_bus(GDisplay *g) {
	(void) g;
}

/**
 * @brief   Release exclusive control of the bus
 *
 * @param[in] g				The GDisplay structure
 *
 * @notapi
 */
static inline void release_bus(GDisplay *g) {
	(void) g;
}

/**
 * @brief   Send data to the index register.
 *
 * @param[in] g				The GDisplay structure
 * @param[in] index			The index register to set
 *
 * @notapi
 */
static inline void write_index(GDisplay *g, uint16_t index) {
	(void) g;
	(void) index;
}

/**
 * @brief   Send data to the lcd.
 *
 * @param[in] g				The GDisplay structure
 * @param[in] data			The data to send
 * 
 * @notapi
 */
static inline void write_data(GDisplay *g, uint16_t data) {
	(void) g;
	(void) data;
}

#endif /* _GDISP_LLD_BOARD_H */
/** @} */