Display Driver API

Note

Display driver is currently only available on 4G platforms

Application Example

waybyte/example-display

API Reference

Header File

Source: include/hw/display.h

#include <hw/display.h>

Functions

int display_init(const struct lcd_drv_t *lcd)

Initialize onchip display controller and LCD controller.

Parameters

lcd – LCD driver structure lcd_drv_t

Returns

0 for success, negative for error

int display_sleep(uint8_t enable)

Enable or disable sleep.

Note

display flush is needed after wakeup from sleep

Parameters

enable – TRUE to enable sleep, FALSE to disable

Returns

0 for success, negative for error

int display_layer_setup(int layer, const struct layer_cfg_t *cfg)

Setup display layer.

Note

Layer 0 is setup by default during initialization with size of LCD panel

Parameters
Returns

0 for success, negative for error

int display_layer_getcfg(int layer, struct layer_cfg_t *cfg)

Get display layer configuration, If layer is not setup cfg will be filled with valid default values and area set to invalid.

Parameters
  • layer – Layer number disp_layer_e

  • cfg – Layer configuration pointer to fill

Returns

0 for success, negative for error

void *display_layer_getbuffer(int layer)

Get display layer buffer. Image data written on buffer will be sent to display on flush.

Parameters

layer – Layer number disp_layer_e

Returns

buffer pointer on success, NULL on error

int display_layer_enable(int layer, uint8_t en)

Enable or disable display layer.

Parameters
  • layer – Layer number disp_layer_e

  • en – TRUE to enable, FALSE to disable layer

Returns

0 for success, negative for error

int display_layer_delete(int layer)

Delete a display layer.

Note

Base Layer 0 cannot be deleted

Parameters

layer – Layer number disp_layer_e

Returns

0 for success, negative for error

int display_flush(const struct lcd_area_t *area, uint8_t sync)

Flush blended display layers on LCD.

Parameters
  • area – area to update, NULL for complete update

  • sync – TRUE - to wait for operation to complete, FALSE - do not wait

Returns

0 for success, negative for error

int display_write_cmd(uint16_t cmd)

Send command to LCD controller.

Parameters

cmd – command to write

Returns

0 for success, negative for error

int display_write_data(uint16_t data)

Send data to LCD controller.

Parameters

data – data to write

Returns

0 for success, negative for error

int display_read_data(uint16_t cmd, uint8_t *data, unsigned len)

Read data from LCD controller, e.g. LCD controller ID.

Parameters
  • cmd – Read command for LCD controller

  • data – data buffer to store read data

  • len – length of data to read (max 4 bytes)

Returns

0 for success, negative for error

void display_wait_transfer(void)

Wait for transfer to complete, this is blocking call.

void display_backlight_enable(uint8_t enabled)

Enable/disable display backlight (if supported by hardware)

Parameters

enabled – TRUE to enable, FALSE disable

int display_clear(uint8_t sync)

Clear display. This function disable all display layers and set display background to default as in config.

Parameters

sync – TRUE - to wait for operation to complete, FALSE - do not wait

Returns

0 for success, negative for error

Structures

struct lcd_area_t

An area.

Area with (w == 0 || h == 0) is nul or invalid area.

Public Members

uint16_t y

Top left position x coordinate

uint16_t w

Top left position y coordinate

uint16_t h

Width of area

struct lcd_ops_t

LCD driver operations.

Public Members

void (*init)(void)

Initialization.

void (*prepare)(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1)

Setup lcd controller area for display data transfer.

Param x0

top left corner x coordinate

Param y0

top left corner y coordinate

Param x1

bottom right corner x coordinate

Param y1

bottom right corner y coordinate

void (*set_direction)(int dir)

Set LCD controller direction.

Note

This function is currently unused (can be set to NULL), Please set LCD direction

during initialization of LCD controller.

Param dir

direction transform to set lcd_dir_e

struct lcd_drv_t

LCD Driver structure.

Public Members

uint32_t init_delay_us

Reset delay in microseconds

uint16_t io_level_mv

Delay in microseconds before driver init is called

uint16_t width

LCD IO Level in millivolts, 0 for default 1800mV, max 3200mV

uint16_t height

Width of LCD panel

uint16_t bg_color

Height of LCD panel

uint8_t output_format

Default background color

uint8_t in_format

LCD output pixel format lcd_outfmt_e

uint8_t spi_linemode

Input data format for Base layer 0 disp_infmt_e

uint8_t cs_polarity

LCD controller SPI interface lcd_spi_linemode_e

uint8_t te_enable

Chip select line polarity, 0 - active low, 1 - active high

uint8_t te_polarity

Enable tearing effect signal detect (FMARK), - TRUE to enable, FALSE to disable

uint16_t te_delay

TE polarity (unused), positive edge default

uint32_t spi_freq

TE detect delay

struct lcd_ops_t ops

SPI frequency in Hz

struct layer_cfg_t

Display layer configuration.

Public Members

uint8_t alpha

input data format disp_infmt_e

uint8_t key_en

blending alpha, 0 for transparent

uint8_t key_mask

whether to enable color key

uint16_t key_color

key color mask

struct lcd_area_t area

key color in RGB565

Enumerations

enum disp_layer_e

Display Controller Layers.

Values:

enumerator DISPLAY_LAYER0

Base/bottom layer

enumerator DISPLAY_LAYER1

Middle layer

enumerator DISPLAY_LAYER2

Top layer

enumerator DISPLAY_LAYER_VIDEO

Video layer, shown above all graphics layers

enum lcd_outfmt_e

LCD controller supported output format.

Values:

enumerator LCD_OUT_FMT_8BIT_RGB332
enumerator LCD_OUT_FMT_8BIT_RGB444
enumerator LCD_OUT_FMT_8BIT_RGB565
enumerator LCD_OUT_FMT_16BIT_RGB332
enumerator LCD_OUT_FMT_16BIT_RGB444
enumerator LCD_OUT_FMT_16BIT_RGB565
enum lcd_spi_linemode_e

LCD controler SPI interface line mode.

Values:

enumerator LCD_SPI_4WIRE
enumerator LCD_SPI_3WIRE
enumerator LCD_SPI_4WIRE_START_BYTE
enumerator LCD_SPI_3WIRE_2LANE
enum lcd_dir_e

Direction transform.

Values:

enumerator LCD_DIR_NORMAL

normal direction

enumerator LCD_DIR_YINV

Y is inverted

enumerator LCD_DIR_XINV

X is inverted

enumerator LCD_DIR_YINV_XINV

both Y and X are inverted

enumerator LCD_DIR_EXCHG

X-Y are swapped

enumerator LCD_DIR_EXCHG_YINV

X-Y are swapped, Y is inverted

enumerator LCD_DIR_EXCHG_XINV

X-Y are swapped, X is inverted

enumerator LCD_DIR_EXCHG_XINV_YINV

X-Y are swapped, both X and Y are inverted

enumerator LCD_DIR_ROTATE_0

alias for rotate 0 degree

enumerator LCD_DIR_ROTATE_90

alias for rotate 90 degree

enumerator LCD_DIR_ROTATE_180

alias for rotate 180 degree

enumerator LCD_DIR_ROTATE_270

alias for rotate 270 degree

enum disp_infmt_e

Input buffer color format.

RGB565 and ARGB8888 format for layer0, 1 and 2 YUV formats are for video layer

Values:

enumerator LCD_IN_FMT_RGB565

RGB565 in little endian, [15:11] R, [10:5] G, [4:0] B

enumerator LCD_IN_FMT_ARGB8888

ARGB8888 in little endian, [31:24] A, [23:16] R, [15:8] G, [7:0] B

enumerator LCD_IN_FMT_YUV422_UYVY

UYVY pixel-packed format

enumerator LCD_IN_FMT_YUV422_YUYV

YUYV pixel-packed format

enumerator LCD_IN_FMT_YUV420_IYUV

IYUV planar format