ugfx/drivers/gdisp/SSD1963/board_SSD1963_template.h

149 lines
4.1 KiB
C

/*
* 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 */
/** @} */