VSF Documented
vsf_disp_mipi_spi_lcd.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17#ifndef __VSF_DISP_MIPI_SPI_LCD_H__
18#define __VSF_DISP_MIPI_SPI_LCD_H__
19
20/*============================ INCLUDES ======================================*/
21
23
24#if VSF_USE_UI == ENABLED && VSF_DISP_USE_MIPI_SPI_LCD == ENABLED
25
26#include "kernel/vsf_kernel.h"
27#include "hal/vsf_hal.h"
28
29#if defined(__VSF_DISP_MIPI_SPI_LCD_CLASS_IMPLEMENT)
30# define __VSF_CLASS_IMPLEMENT__
31#endif
32
33#include "utilities/ooc_class.h"
34
35#ifdef __cplusplus
36extern "C" {
37#endif
38
39// TODO: add scrolling demo
40
41/*============================ MACROS ========================================*/
42
43#if VSF_HAL_USE_SPI != ENABLED
44# error "need VSF_HAL_USE_SPI"
45#endif
46
47#ifndef VSF_DISP_MIPI_SPI_LCD_SUPPORT_HARDWARE_RESET
48# define VSF_DISP_MIPI_SPI_LCD_SUPPORT_HARDWARE_RESET ENABLED
49#endif
50
51#ifndef VSF_DISP_MIPI_SPI_LCD_USING_VSF_GPIO
52# define VSF_DISP_MIPI_SPI_LCD_USING_VSF_GPIO ENABLED
53#endif
54
55#define VSF_DISP_MIPI_SPI_LCD_SPI_8BITS_MODE 0
56#define VSF_DISP_MIPI_SPI_LCD_SPI_9BITS_MODE 1
57
58#ifndef VSF_DISP_MIPI_SPI_LCD_SPI_MODE
59# define VSF_DISP_MIPI_SPI_LCD_SPI_MODE VSF_DISP_MIPI_SPI_LCD_SPI_8BITS_MODE
60#endif
61
62#if (VSF_DISP_MIPI_SPI_LCD_SPI_MODE != VSF_DISP_MIPI_SPI_LCD_SPI_8BITS_MODE)\
63 && (VSF_DISP_MIPI_SPI_LCD_SPI_MODE != VSF_DISP_MIPI_SPI_LCD_SPI_9BITS_MODE)
64# error "vsf_disp_mipi_spi_lcd: error spi mode"
65#endif
66
67#if VSF_DISP_MIPI_SPI_LCD_SPI_MODE == VSF_DISP_MIPI_SPI_LCD_SPI_9BITS_MODE
68# error "TODO: support 9bit spi mode"
69#endif
70
132#define VSF_DISP_MIPI_SPI_LCD_INITSEQ(__LCD_SEQ, __PIXEL_FORMAT, __MODE, ...) \
133 VSF_DISP_MIPI_LCD_INITSEQ(__LCD_SEQ, \
134 MIPI_DCS_CMD_SET_ADDRESS_MODE(__MODE), \
135 MIPI_DCS_CMD_SET_PIXEL_FORMAT(__PIXEL_FORMAT), \
136 ##__VA_ARGS__ \
137 )
138
139#define VSF_DISP_MIPI_SPI_LCD_REFRESH_SEQ_LEN \
140 (1 + 1 + 4) + (1 + 1 + 4) + (1 + 1 + 4 + 4)
141
142
143// MACROs for specified LCD
144
145#define VSF_DISP_ST7789V_SPI_INITSEQ(__PIXEL_FORMAT, __MODE, ...) \
146 VSF_DISP_MIPI_SPI_LCD_INITSEQ(VSF_DISP_MIPI_LCD_ST7789V_BASE, \
147 __PIXEL_FORMAT, __MODE, \
148 ##__VA_ARGS__ \
149 )
150
151/*============================ TYPES =========================================*/
152
154 public_member(
155 implement(vk_disp_t)
156 vsf_spi_t *spi;
157 uint32_t clock_hz;
158 const uint8_t *init_seq;
159 const uint16_t init_seq_len;
160#if VSF_DISP_MIPI_SPI_LCD_USING_VSF_GPIO == ENABLED
161 struct {
162 vsf_gpio_t * gpio;
163 uint32_t pin_mask;
164 } reset, dcx;
165#endif
167
168 private_member(
169 vsf_teda_t teda;
170
171 vk_disp_area_t area;
172 uint8_t *cur_buffer;
173
175
176 struct {
177 const uint8_t *buf;
178 uint16_t max_cnt;
179 uint16_t cur_cnt;
180 } seq;
181
182 struct {
183 uint8_t cmd;
184 uint32_t param_size;
185 void *param_buffer;
186 } cmd;
188};
189
190/*============================ GLOBAL VARIABLES ==============================*/
191
193
194/*============================ PROTOTYPES ====================================*/
195
196// return true if te is not supported, or return false and call vsf_disp_mipi_te_line_ready when te is ready
198extern void vsf_disp_mipi_te_line_ready(vk_disp_mipi_spi_lcd_t *disp_mipi_spi_lcd);
199
200#ifdef __cplusplus
201}
202#endif
203
204#endif // VSF_USE_UI
205#endif // __VSF_DISP_MIPI_SPI_LCD_H__
Definition vsf_disp.h:151
Definition vsf_disp_mipi_spi_lcd.h:153
Definition vsf_disp.h:176
Definition vsf_eda.h:834
#define vsf_class(__name)
Definition ooc_class.h:48
unsigned short uint16_t
Definition stdint.h:7
unsigned uint32_t
Definition stdint.h:9
unsigned char uint8_t
Definition stdint.h:5
Definition vsf_disp.h:146
Definition vsf_template_gpio.h:720
SPI instance structure, used for SPI Multi Class support, not needed in non Multi Class mode.
Definition vsf_template_spi.h:766
bool vsf_disp_mipi_spi_lcd_wait_te_line_ready(vk_disp_mipi_spi_lcd_t *disp_mipi_spi_lcd)
Definition vsf_disp_mipi_spi_lcd.c:104
#define VSF_DISP_MIPI_SPI_LCD_REFRESH_SEQ_LEN
Definition vsf_disp_mipi_spi_lcd.h:139
const vk_disp_drv_t vk_disp_drv_mipi_spi_lcd
Definition vsf_disp_mipi_spi_lcd.c:90
void vsf_disp_mipi_te_line_ready(vk_disp_mipi_spi_lcd_t *disp_mipi_spi_lcd)
Definition vsf_disp_mipi_spi_lcd.c:98