ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_epaper.h
Go to the documentation of this file.
1
71
72#pragma once
73
74#ifdef __cplusplus
75extern "C" {
76#endif
77
78#include <stddef.h>
79#include <stdint.h>
80
81#include "ra8_err.h"
82#include "ra8_spi_bus_ops.h"
83
112
148typedef struct {
149 uint8_t init;
150 uint8_t du;
151 uint8_t gc16;
152 uint8_t a2;
154
186
208
213typedef enum : uint8_t {
216
254
267
312
317typedef struct {
318 uint16_t x;
319 uint16_t y;
320 uint16_t width;
321 uint16_t height;
323
324/* =============================================================================
325 * Lifecycle
326 * =============================================================================
327 */
328
366[[nodiscard]] ra8_err_t ra8_epaper_init(const ra8_epaper_cfg_t* cfg);
367
398
428[[nodiscard]] ra8_err_t ra8_epaper_image_bytes(const ra8_epaper_area_t* area,
430 size_t* out_bytes);
431
461[[nodiscard]] bool ra8_epaper_area_is_aligned(const ra8_epaper_area_t* area,
463
508[[nodiscard]] ra8_err_t
510
551[[nodiscard]] ra8_err_t ra8_epaper_waveform_cfg_for_lut(const char* lut_version,
553
592[[nodiscard]] ra8_err_t ra8_epaper_validate_cfg(const ra8_epaper_cfg_t* cfg);
593
629[[nodiscard]] bool ra8_epaper_geometry_agrees(const ra8_epaper_dev_info_t* info,
630 const ra8_epaper_cfg_t* cfg);
631
658
711[[nodiscard]] ra8_err_t
712ra8_epaper_decode_dev_info(const uint16_t* words, size_t count, ra8_epaper_dev_info_t* out_info);
713
747[[nodiscard]] ra8_err_t ra8_epaper_get_vcom(uint16_t* out_mv);
748
819[[nodiscard]] ra8_err_t ra8_epaper_set_vcom(uint16_t mv);
820
844[[nodiscard]] bool ra8_epaper_vcom_verified(void);
845
892[[nodiscard]] ra8_err_t ra8_epaper_load_image(const ra8_epaper_area_t* area,
893 const uint8_t* buf,
894 size_t buf_len,
896 ra8_epaper_endian_t endian);
897
943[[nodiscard]] ra8_err_t ra8_epaper_display_area(const ra8_epaper_area_t* area,
944 ra8_epaper_waveform_t waveform);
945
965[[nodiscard]] ra8_err_t ra8_epaper_sleep(void);
966
967#ifdef __cplusplus
968}
969#endif
ra8_err_t ra8_epaper_align_area(ra8_epaper_area_t *area, ra8_epaper_pixel_format_t pf, uint16_t panel_width)
Grow area outward onto the alignment grid its depth requires.
ra8_epaper_pixel_format_t
Source pixel depth for a ra8_epaper_load_image transfer.
Definition ra8_epaper.h:180
@ k_ra8_epaper_pf_1bpp
1 bpp bi-level, 8 px per byte (A2).
Definition ra8_epaper.h:181
@ k_ra8_epaper_pf_4bpp
4 bpp, 2 px per byte – preferred.
Definition ra8_epaper.h:183
@ k_ra8_epaper_pf_2bpp
2 bpp, 4 px per byte.
Definition ra8_epaper.h:182
@ k_ra8_epaper_pf_8bpp
8 bpp, one byte per pixel.
Definition ra8_epaper.h:184
ra8_err_t ra8_epaper_display_area(const ra8_epaper_area_t *area, ra8_epaper_waveform_t waveform)
Refresh the indicated rectangle on the physical panel.
Definition ra8_epaper.c:927
ra8_err_t ra8_epaper_dev_info(ra8_epaper_dev_info_t *out_info)
Hand back the GET_DEV_INFO block captured during init.
Definition ra8_epaper.c:701
ra8_epaper_dev_info_limits_t
Sizing of the GET_DEV_INFO (0x0302) response block.
Definition ra8_epaper.h:213
@ k_ra8_epaper_ver_chars
Chars in a FW / LUT version string.
Definition ra8_epaper.h:214
ra8_err_t ra8_epaper_validate_cfg(const ra8_epaper_cfg_t *cfg)
Validate a panel descriptor without touching any hardware.
ra8_epaper_waveform_t
Symbolic IT8951 panel-refresh waveform selectors.
Definition ra8_epaper.h:106
@ k_ra8_epaper_wf_init
INIT - flush to white, slowest.
Definition ra8_epaper.h:107
@ k_ra8_epaper_wf_a2
A2 - black/white only, fastest.
Definition ra8_epaper.h:110
@ k_ra8_epaper_wf_gc16
GC16 - 16-grey full quality.
Definition ra8_epaper.h:109
@ k_ra8_epaper_wf_du
DU - direct update, 1 bpp, fast.
Definition ra8_epaper.h:108
ra8_err_t ra8_epaper_set_vcom(uint16_t mv)
Programme the controller's VCOM, verify it, and grant the INV-VCOM-1 permit.
Definition ra8_epaper.c:730
ra8_err_t ra8_epaper_init(const ra8_epaper_cfg_t *cfg)
Bring up the IT8951 panel against the injected SPI bus seam.
Definition ra8_epaper.c:654
ra8_epaper_endian_t
Source-buffer endianness flag for the LD_IMG_AREA transfer.
Definition ra8_epaper.h:263
@ k_ra8_epaper_endian_big
Host buffer is big-endian.
Definition ra8_epaper.h:265
@ k_ra8_epaper_endian_little
Host buffer is little-endian.
Definition ra8_epaper.h:264
ra8_err_t ra8_epaper_sleep(void)
Drop the panel into deep-sleep (~15 uA per Waveshare AN).
Definition ra8_epaper.c:961
bool ra8_epaper_area_is_aligned(const ra8_epaper_area_t *area, ra8_epaper_pixel_format_t pf)
Report whether area satisfies the depth's X/width alignment.
ra8_err_t ra8_epaper_get_vcom(uint16_t *out_mv)
Read the controller's current VCOM setting, in millivolts.
Definition ra8_epaper.c:711
ra8_err_t ra8_epaper_load_image(const ra8_epaper_area_t *area, const uint8_t *buf, size_t buf_len, ra8_epaper_pixel_format_t pf, ra8_epaper_endian_t endian)
Push a packed greyscale buffer into the controller's frame RAM.
Definition ra8_epaper.c:837
ra8_err_t ra8_epaper_decode_dev_info(const uint16_t *words, size_t count, ra8_epaper_dev_info_t *out_info)
Decode a raw GET_DEV_INFO word block into a device-info struct.
ra8_err_t ra8_epaper_waveform_cfg_for_lut(const char *lut_version, ra8_epaper_waveform_cfg_t *out_cfg)
Fill a waveform map from a controller-reported LUT version.
ra8_epaper_geom_limits_t
Geometry / waveform constants the driver enforces.
Definition ra8_epaper.h:204
@ k_ra8_epaper_wf_mode_max
Highest valid LUT mode number.
Definition ra8_epaper.h:206
@ k_ra8_epaper_align_1bpp_px
4-byte (32 px) X/W grid for 1 bpp.
Definition ra8_epaper.h:205
uint8_t ra8_epaper_bits_per_pixel(ra8_epaper_pixel_format_t pf)
Bits per pixel carried by a ra8_epaper_pixel_format_t.
bool ra8_epaper_geometry_agrees(const ra8_epaper_dev_info_t *info, const ra8_epaper_cfg_t *cfg)
Report whether reported panel geometry matches the descriptor.
ra8_err_t ra8_epaper_image_bytes(const ra8_epaper_area_t *area, ra8_epaper_pixel_format_t pf, size_t *out_bytes)
Bytes a packed source buffer needs for area at depth pf.
bool ra8_epaper_vcom_verified(void)
Report whether the INV-VCOM-1 permit is currently held.
Definition ra8_epaper.c:781
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
Injected SPI-bus seam consumed by Ring-3 SPI device drivers.
Rectangle descriptor (top-left + size) used by load + display.
Definition ra8_epaper.h:317
uint16_t x
Top-left X in panel coords (0 = left).
Definition ra8_epaper.h:318
uint16_t y
Top-left Y in panel coords (0 = top).
Definition ra8_epaper.h:319
uint16_t height
Height in pixels.
Definition ra8_epaper.h:321
uint16_t width
Width in pixels.
Definition ra8_epaper.h:320
Configuration descriptor for ra8_epaper_init.
Definition ra8_epaper.h:304
uint16_t panel_height
Native panel height in pixels.
Definition ra8_epaper.h:310
uint16_t reset_pin
(port<<8)|pin – panel /RESET line.
Definition ra8_epaper.h:307
uint16_t panel_width
Native panel width in pixels.
Definition ra8_epaper.h:309
ra8_epaper_waveform_cfg_t waveform
Panel's LUT waveform mode numbers.
Definition ra8_epaper.h:306
uint16_t busy_pin
(port<<8)|pin – panel HRDY input.
Definition ra8_epaper.h:308
ra8_spi_bus_ops_t bus
Injected SPI transfer seam (app-bound).
Definition ra8_epaper.h:305
Decoded GET_DEV_INFO (0x0302) response.
Definition ra8_epaper.h:247
uint32_t image_buf_base
Controller frame-RAM base.
Definition ra8_epaper.h:250
char fw_version[k_ra8_epaper_ver_chars+1U]
Firmware version, NUL-term.
Definition ra8_epaper.h:251
char lut_version[k_ra8_epaper_ver_chars+1U]
LUT version, NUL-terminated.
Definition ra8_epaper.h:252
uint16_t panel_width
Reported panel width (px).
Definition ra8_epaper.h:248
uint16_t panel_height
Reported panel height (px).
Definition ra8_epaper.h:249
Per-panel map from ra8_epaper_waveform_t onto LUT mode numbers.
Definition ra8_epaper.h:148
uint8_t init
LUT mode number for INIT (flush to white).
Definition ra8_epaper.h:149
uint8_t du
LUT mode number for DU (direct update).
Definition ra8_epaper.h:150
uint8_t a2
LUT mode number for A2 (bi-level, fastest).
Definition ra8_epaper.h:152
uint8_t gc16
LUT mode number for GC16 (16-grey quality).
Definition ra8_epaper.h:151
Caller-filled SPI transfer seam: one full-duplex byte exchange.