ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_glcdc.h
Go to the documentation of this file.
1
11
12#pragma once
13
14#ifdef __cplusplus
15extern "C" {
16#endif
17
18#include <stdint.h>
19
20#include "ra8_err.h"
21#include "ra8_glcdc_regs.h"
22
35typedef struct {
36 uint16_t h_active;
37 uint16_t h_front;
38 uint16_t h_back;
39 uint16_t h_sync;
40 uint16_t v_active;
41 uint16_t v_front;
42 uint16_t v_back;
43 uint16_t v_sync;
45
62
74typedef struct {
77 uint16_t width_px;
78 uint16_t height_px;
79 uint16_t pos_x;
80 uint16_t pos_y;
82 uint8_t alpha;
84
94
104
110[[nodiscard]] ra8_err_t ra8_glcdc_init(const ra8_glcdc_config_t* cfg);
111
116[[nodiscard]] ra8_err_t ra8_glcdc_start(bool enable);
117
122typedef void (*ra8_glcdc_event_fn_t)(void* ctx, uint32_t status_mask);
123
128[[nodiscard]] ra8_err_t ra8_glcdc_deinit(void);
129
134[[nodiscard]] ra8_err_t ra8_glcdc_get_status(uint32_t* out_mask);
135
140[[nodiscard]] ra8_err_t ra8_glcdc_clear_status(uint32_t mask);
141
146[[nodiscard]] ra8_err_t ra8_glcdc_attach_handler(ra8_glcdc_event_fn_t fn, void* ctx);
147
161void ra8_glcdc_dispatch(void);
162
167[[nodiscard]] ra8_err_t ra8_glcdc_enter_stop(void);
168
173[[nodiscard]] ra8_err_t ra8_glcdc_exit_stop(void);
174
202
239[[nodiscard]] ra8_err_t ra8_glcdc_layer1_show(uintptr_t fb_addr);
240
267[[nodiscard]] ra8_err_t ra8_glcdc_layer2_show(uintptr_t fb_addr,
268 uint16_t panel_x,
269 uint16_t panel_y,
270 uint16_t fb_w,
271 uint16_t fb_h);
272
300[[nodiscard]] ra8_err_t ra8_glcdc_layer2_chroma_key_enable(uint32_t key_rgb888);
301
320[[nodiscard]] ra8_err_t ra8_glcdc_set_blend(ra8_glcdc_blend_mode_t mode, uint8_t global_alpha);
321
337[[nodiscard]] ra8_err_t ra8_glcdc_set_background_color(uint32_t argb);
338
365[[nodiscard]] ra8_err_t ra8_glcdc_set_clut_double_buffered(uint8_t layer,
366 const uint32_t* clut,
367 uint32_t entries,
368 bool swap_now);
369
385
404[[nodiscard]] ra8_err_t ra8_glcdc_set_brightness(uint8_t r, uint8_t g, uint8_t b);
405
421[[nodiscard]] ra8_err_t ra8_glcdc_set_contrast(uint8_t r, uint8_t g, uint8_t b);
422
423/* =============================================================================
424 * Gamma correction (piecewise-linear LUT per colour channel)
425 * Implemented in libs/ra8_hal/src/ra8_glcdc_gamma.c
426 * =============================================================================
427 */
428
457
476
515 const uint16_t* gain,
516 const uint16_t* threshold,
517 uint8_t count);
518
547[[nodiscard]] ra8_err_t ra8_glcdc_gamma_enable(bool enable);
548
549#ifdef __cplusplus
550}
551#endif
Error Code Definitions for ra8-firmware.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Definition ra8_err.h:546
ra8_err_t ra8_glcdc_layer2_chroma_key_enable(uint32_t key_rgb888)
Enable chroma-key transparency on graphics layer 2.
ra8_err_t ra8_glcdc_set_brightness(uint8_t r, uint8_t g, uint8_t b)
Programme per-channel output brightness.
Definition ra8_glcdc.c:791
void(* ra8_glcdc_event_fn_t)(void *ctx, uint32_t status_mask)
GLCDC event callback (VSYNC / line detect / underflow).
Definition ra8_glcdc.h:122
ra8_err_t ra8_glcdc_attach_handler(ra8_glcdc_event_fn_t fn, void *ctx)
Attach a GLCDC event callback.
Definition ra8_glcdc.c:842
ra8_err_t ra8_glcdc_init(const ra8_glcdc_config_t *cfg)
Initialise GLCDC with the EK-RA8D2 1024x600 timings and the supplied graphics layer 1 framebuffer.
Definition ra8_glcdc.c:662
ra8_err_t ra8_glcdc_enter_stop(void)
Put GLCDC into MSTP-gated stop.
Definition ra8_glcdc.c:862
ra8_err_t ra8_glcdc_set_layer2(const ra8_glcdc_layer2_cfg_t *cfg)
Configure the Graphics 2 (background-image) layer.
ra8_err_t ra8_glcdc_set_background_color(uint32_t argb)
Set the panel-wide background colour shown where neither layer covers a pixel.
ra8_err_t ra8_glcdc_start(bool enable)
Start or stop the panel output.
Definition ra8_glcdc.c:709
ra8_err_t ra8_glcdc_clear_status(uint32_t mask)
Clear GLCDC status flags.
Definition ra8_glcdc.c:835
ra8_err_t ra8_glcdc_layer1_show(uintptr_t fb_addr)
Make graphics layer 1 visible by pointing it at a framebuffer.
ra8_err_t ra8_glcdc_set_contrast(uint8_t r, uint8_t g, uint8_t b)
Programme per-channel output contrast gain.
Definition ra8_glcdc.c:802
ra8_err_t ra8_glcdc_set_clut_double_buffered(uint8_t layer, const uint32_t *clut, uint32_t entries, bool swap_now)
Update a CLUT plane double-buffered, optionally swapping on the next vsync.
ra8_err_t ra8_glcdc_set_blend(ra8_glcdc_blend_mode_t mode, uint8_t global_alpha)
Set the layer-1-over-layer-2 blend mode and global alpha.
ra8_err_t ra8_glcdc_gamma_enable(bool enable)
Enable or disable the GLCDC gamma correction pipeline.
ra8_glcdc_color_channel_t
Selector for the three GLCDC gamma colour channels.
Definition ra8_glcdc.h:451
@ k_ra8_glcdc_ch_r
Red channel -> GAM[0].
Definition ra8_glcdc.h:452
@ k_ra8_glcdc_ch_count
Number of colour channels (sentinel).
Definition ra8_glcdc.h:455
@ k_ra8_glcdc_ch_b
Blue channel -> GAM[2].
Definition ra8_glcdc.h:454
@ k_ra8_glcdc_ch_g
Green channel -> GAM[1].
Definition ra8_glcdc.h:453
ra8_err_t ra8_glcdc_get_status(uint32_t *out_mask)
Read GLCDC status register (VSYNC/HSYNC/underflow).
Definition ra8_glcdc.c:828
ra8_glcdc_blend_mode_t
Compositing mode between Graphics 1 and Graphics 2.
Definition ra8_glcdc.h:89
@ k_ra8_blend_alpha
Per-pixel + global alpha blend (DISPSEL=10+AR).
Definition ra8_glcdc.h:92
@ k_ra8_blend_overwrite
Layer 1 fully covers layer 2 (DISPSEL=01).
Definition ra8_glcdc.h:90
@ k_ra8_blend_normal
Layer 1 over layer 2, no alpha (DISPSEL=10).
Definition ra8_glcdc.h:91
void ra8_glcdc_dispatch(void)
Dispatch a GLCDC event – snapshot + fire callback.
Definition ra8_glcdc.c:850
ra8_err_t ra8_glcdc_layer2_show(uintptr_t fb_addr, uint16_t panel_x, uint16_t panel_y, uint16_t fb_w, uint16_t fb_h)
Make graphics layer 2 visible at an arbitrary panel position.
ra8_err_t ra8_glcdc_set_gamma(ra8_glcdc_color_channel_t channel, const uint16_t *gain, const uint16_t *threshold, uint8_t count)
Programme the piecewise-linear gamma correction table for one channel.
ra8_err_t ra8_glcdc_set_dithering(ra8_glcdc_dither_mode_t mode)
Programme the output dithering mode (PDTHA.SEL).
Definition ra8_glcdc.c:766
ra8_glcdc_dither_mode_t
Output-stage dithering mode for 24bpp -> 18/16bpp panels.
Definition ra8_glcdc.h:99
@ k_ra8_dither_off
No dithering (PDTHA.SEL=0).
Definition ra8_glcdc.h:100
@ k_ra8_dither_truncate
Round/truncate (PDTHA.SEL=2).
Definition ra8_glcdc.h:101
@ k_ra8_dither_2x2
2x2 ordered dither (PDTHA.SEL=3).
Definition ra8_glcdc.h:102
ra8_err_t ra8_glcdc_deinit(void)
Tear down GLCDC (stop + MSTP release).
Definition ra8_glcdc.c:818
ra8_glcdc_gamma_lut_const_t
Piecewise-linear LUT depth constants for the GLCDC gamma correction.
Definition ra8_glcdc.h:473
@ k_ra8_glcdc_gamma_lut_depth
16 segments (8 LUT regs x 2 gains).
Definition ra8_glcdc.h:474
ra8_err_t ra8_glcdc_exit_stop(void)
Exit MSTP-gated stop.
Definition ra8_glcdc.c:868
Graphics LCD Controller (GLCDC) register layout for the RA8D2.
ra8_glcdc_pixel_fmt_t
Pixel format codes written to GRn_FLM6.FORMAT[30:28].
Minimal GLCDC configuration for a single-layer panel.
Definition ra8_glcdc.h:55
ra8_glcdc_pixel_fmt_t format
Pixel format code.
Definition ra8_glcdc.h:59
uint32_t framebuffer_addr
SRAM or SDRAM address.
Definition ra8_glcdc.h:56
ra8_glcdc_timing_t timing
Panel timing (from BSP).
Definition ra8_glcdc.h:60
uint16_t width_px
Visible width.
Definition ra8_glcdc.h:57
uint16_t height_px
Visible height.
Definition ra8_glcdc.h:58
Configuration for the background-image (Graphics 2) layer.
Definition ra8_glcdc.h:74
uint32_t framebuffer_addr
Layer-2 framebuffer base address.
Definition ra8_glcdc.h:75
uint16_t height_px
Layer-2 image height (lines).
Definition ra8_glcdc.h:78
uint16_t pos_x
Top-left X within the panel viewport.
Definition ra8_glcdc.h:79
uint16_t width_px
Layer-2 image width (pixels).
Definition ra8_glcdc.h:77
uint16_t pos_y
Top-left Y within the panel viewport.
Definition ra8_glcdc.h:80
uint32_t line_stride_bytes
Bytes between successive scan lines.
Definition ra8_glcdc.h:76
ra8_glcdc_pixel_fmt_t format
Pixel format code (FLM6.FORMAT).
Definition ra8_glcdc.h:81
uint8_t alpha
Constant alpha 0..255 (AB7.ARCDEF).
Definition ra8_glcdc.h:82
Panel RGB timing the driver programs (accessory parameters).
Definition ra8_glcdc.h:35
uint16_t v_sync
VSYNC pulse width (lines).
Definition ra8_glcdc.h:43
uint16_t v_front
Vertical front porch (lines).
Definition ra8_glcdc.h:41
uint16_t v_active
Active lines per frame.
Definition ra8_glcdc.h:40
uint16_t h_front
Horizontal front porch (px).
Definition ra8_glcdc.h:37
uint16_t h_sync
HSYNC pulse width (px clocks).
Definition ra8_glcdc.h:39
uint16_t h_active
Active pixels per line.
Definition ra8_glcdc.h:36
uint16_t h_back
Horizontal back porch (px).
Definition ra8_glcdc.h:38
uint16_t v_back
Vertical back porch (lines).
Definition ra8_glcdc.h:42