Zephyr Project API 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
display.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2017 Jan Van Winkel <jan.van_winkel@dxplore.eu>
3 * SPDX-FileCopyrightText: 2026 Abderrahmane JARMOUNI
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
13
14#ifndef ZEPHYR_INCLUDE_DRIVERS_DISPLAY_H_
15#define ZEPHYR_INCLUDE_DRIVERS_DISPLAY_H_
16
30
31#include <zephyr/device.h>
32#include <errno.h>
33#include <stddef.h>
34#include <zephyr/types.h>
36
37#ifdef __cplusplus
38extern "C" {
39#endif
40
270
278#define DISPLAY_BITS_PER_PIXEL(fmt) \
279 ((((fmt & PIXEL_FORMAT_RGB_888) >> 0) * 24U) + \
280 (((fmt & PIXEL_FORMAT_MONO01) >> 1) * 1U) + \
281 (((fmt & PIXEL_FORMAT_MONO10) >> 2) * 1U) + \
282 (((fmt & PIXEL_FORMAT_ARGB_8888) >> 3) * 32U) + \
283 (((fmt & PIXEL_FORMAT_RGB_565) >> 4) * 16U) + \
284 (((fmt & PIXEL_FORMAT_RGB_565X) >> 5) * 16U) + \
285 (((fmt & PIXEL_FORMAT_L_8) >> 6) * 8U) + \
286 (((fmt & PIXEL_FORMAT_AL_88) >> 7) * 16U) + \
287 (((fmt & PIXEL_FORMAT_XRGB_8888) >> 8) * 32U) + \
288 (((fmt & PIXEL_FORMAT_BGR_888) >> 9) * 24U) + \
289 (((fmt & PIXEL_FORMAT_ABGR_8888) >> 10) * 32U) + \
290 (((fmt & PIXEL_FORMAT_RGBA_8888) >> 11) * 32U) + \
291 (((fmt & PIXEL_FORMAT_BGRA_8888) >> 12) * 32U) + \
292 (((fmt & PIXEL_FORMAT_I_4) >> 13) * 4U) + \
293 (((fmt & PIXEL_FORMAT_L_4) >> 14) * 4U) + \
294 (((fmt & PIXEL_FORMAT_YUYV) >> 15) * 16U))
295
323
333
334#if defined(CONFIG_DISPLAY_COLOR_PALETTE) || defined(__DOXYGEN__)
335
347
348#endif /* defined(CONFIG_DISPLAY_COLOR_PALETTE) || defined(__DOXYGEN__) */
349
366#if defined(CONFIG_DISPLAY_COLOR_PALETTE) || defined(__DOXYGEN__)
368 struct display_palette_color color_palette[CONFIG_DISPLAY_COLOR_PALETTE_MAX_SIZE];
369#endif /* defined(CONFIG_DISPLAY_COLOR_PALETTE) || defined(__DOXYGEN__) */
370};
371
385
400
414
424
440typedef enum display_event_result (*display_event_cb_t)(const struct device *dev,
441 uint32_t evt,
442 const struct display_event_data *data,
443 void *user_data);
444
449
454typedef int (*display_blanking_on_api)(const struct device *dev);
455
460typedef int (*display_blanking_off_api)(const struct device *dev);
461
466typedef int (*display_write_api)(const struct device *dev, const uint16_t x,
467 const uint16_t y,
468 const struct display_buffer_descriptor *desc,
469 const void *buf);
470
475typedef int (*display_read_api)(const struct device *dev, const uint16_t x,
476 const uint16_t y,
477 const struct display_buffer_descriptor *desc,
478 void *buf);
479
484typedef int (*display_clear_api)(const struct device *dev);
485
490typedef void *(*display_get_framebuffer_api)(const struct device *dev);
491
496typedef int (*display_set_brightness_api)(const struct device *dev,
497 const uint8_t brightness);
498
503typedef int (*display_set_contrast_api)(const struct device *dev,
504 const uint8_t contrast);
505
510typedef void (*display_get_capabilities_api)(const struct device *dev,
511 struct display_capabilities *
512 capabilities);
513
518typedef int (*display_set_pixel_format_api)(const struct device *dev,
519 const enum display_pixel_format
520 pixel_format);
521
526typedef int (*display_set_orientation_api)(const struct device *dev,
527 const enum display_orientation
528 orientation);
529
534typedef int (*display_register_event_cb_api)(const struct device *dev,
535 display_event_cb_t cb, void *user_data,
536 uint32_t event_mask, bool in_isr,
537 uint32_t *out_reg_handle);
538
543typedef int (*display_unregister_event_cb_api)(const struct device *dev, uint32_t reg_handle);
544
602
605
622static inline int display_write(const struct device *dev, const uint16_t x,
623 const uint16_t y,
624 const struct display_buffer_descriptor *desc,
625 const void *buf)
626{
627 return DEVICE_API_GET(display, dev)->write(dev, x, y, desc, buf);
628}
629
645static inline int display_read(const struct device *dev, const uint16_t x,
646 const uint16_t y,
647 const struct display_buffer_descriptor *desc,
648 void *buf)
649{
650 const struct display_driver_api *api = DEVICE_API_GET(display, dev);
651
652 if (api->read == NULL) {
653 return -ENOSYS;
654 }
655
656 return api->read(dev, x, y, desc, buf);
657}
658
667static inline int display_clear(const struct device *dev)
668{
669 const struct display_driver_api *api = DEVICE_API_GET(display, dev);
670
671 if (api->clear == NULL) {
672 return -ENOSYS;
673 }
674
675 return api->clear(dev);
676}
677
687static inline void *display_get_framebuffer(const struct device *dev)
688{
689 const struct display_driver_api *api = DEVICE_API_GET(display, dev);
690
691 if (api->get_framebuffer == NULL) {
692 return NULL;
693 }
694
695 return api->get_framebuffer(dev);
696}
697
718static inline int display_blanking_on(const struct device *dev)
719{
720 const struct display_driver_api *api = DEVICE_API_GET(display, dev);
721
722 if (api->blanking_on == NULL) {
723 return -ENOSYS;
724 }
725
726 return api->blanking_on(dev);
727}
728
742static inline int display_blanking_off(const struct device *dev)
743{
744 const struct display_driver_api *api = DEVICE_API_GET(display, dev);
745
746 if (api->blanking_off == NULL) {
747 return -ENOSYS;
748 }
749
750 return api->blanking_off(dev);
751}
752
766static inline int display_set_brightness(const struct device *dev,
767 uint8_t brightness)
768{
769 const struct display_driver_api *api = DEVICE_API_GET(display, dev);
770
771 if (api->set_brightness == NULL) {
772 return -ENOSYS;
773 }
774
775 return api->set_brightness(dev, brightness);
776}
777
790static inline int display_set_contrast(const struct device *dev, uint8_t contrast)
791{
792 const struct display_driver_api *api = DEVICE_API_GET(display, dev);
793
794 if (api->set_contrast == NULL) {
795 return -ENOSYS;
796 }
797
798 return api->set_contrast(dev, contrast);
799}
800
807static inline void display_get_capabilities(const struct device *dev,
808 struct display_capabilities *
809 capabilities)
810{
811 __ASSERT(capabilities != NULL, "display_capabilities struct is NULL");
812 memset(capabilities, 0, sizeof(struct display_capabilities));
813 DEVICE_API_GET(display, dev)->get_capabilities(dev, capabilities);
814}
815
829static inline int
831 const enum display_pixel_format pixel_format)
832{
833 const struct display_driver_api *api = DEVICE_API_GET(display, dev);
834
835 if (api->set_pixel_format == NULL) {
836 return -ENOSYS;
837 }
838
839 return api->set_pixel_format(dev, pixel_format);
840}
841
853static inline int display_set_orientation(const struct device *dev,
854 const enum display_orientation
855 orientation)
856{
857 const struct display_driver_api *api = DEVICE_API_GET(display, dev);
858
859 if (api->set_orientation == NULL) {
860 return -ENOSYS;
861 }
862
863 return api->set_orientation(dev, orientation);
864}
865
890static inline int display_register_event_cb(const struct device *dev,
891 display_event_cb_t cb, void *user_data,
892 uint32_t event_mask, bool in_isr,
893 uint32_t *out_reg_handle)
894{
895 __ASSERT(cb != NULL, "Registration failed: callback function pointer is NULL");
896
897 const struct display_driver_api *api = DEVICE_API_GET(display, dev);
898 struct display_capabilities caps;
899
900 if (api->register_event_cb == NULL) {
901 return -ENOSYS;
902 }
903
904 display_get_capabilities(dev, &caps);
905 if (!caps.supported_events) {
906 return -ENOSYS;
907 }
908 if (event_mask == 0 || (~caps.supported_events & event_mask)) {
909 return -EINVAL;
910 }
911
912 return api->register_event_cb(dev, cb, user_data, event_mask, in_isr, out_reg_handle);
913}
914
926static inline int display_unregister_event_cb(const struct device *dev, uint32_t reg_handle)
927{
928 const struct display_driver_api *api = DEVICE_API_GET(display, dev);
929
930 if (api->unregister_event_cb == NULL || api->register_event_cb == NULL) {
931 return -ENOSYS;
932 }
933
934 if (reg_handle == 0U) {
935 return -EINVAL;
936 }
937
938 return api->unregister_event_cb(dev, reg_handle);
939}
940
941#ifdef __cplusplus
942}
943#endif
944
948
949#endif /* ZEPHYR_INCLUDE_DRIVERS_DISPLAY_H_ */
APIs and macros for the Zephyr device model.
#define DEVICE_API_GET(_class, _dev)
Expands to the pointer of a device's API for a given class.
Definition device.h:1486
System error numbers.
display_event
Display event types.
Definition display.h:402
display_screen_info
Display screen information.
Definition display.h:299
int(* display_set_pixel_format_api)(const struct device *dev, const enum display_pixel_format pixel_format)
Callback API to set pixel format used by the display.
Definition display.h:518
static int display_write(const struct device *dev, const uint16_t x, const uint16_t y, const struct display_buffer_descriptor *desc, const void *buf)
Write data to display.
Definition display.h:622
static int display_read(const struct device *dev, const uint16_t x, const uint16_t y, const struct display_buffer_descriptor *desc, void *buf)
Read data from display.
Definition display.h:645
void(* display_get_capabilities_api)(const struct device *dev, struct display_capabilities *capabilities)
Callback API to get display capabilities.
Definition display.h:510
static void * display_get_framebuffer(const struct device *dev)
Get pointer to framebuffer for direct access.
Definition display.h:687
static int display_blanking_off(const struct device *dev)
Turn display blanking off.
Definition display.h:742
static int display_set_orientation(const struct device *dev, const enum display_orientation orientation)
Set display orientation.
Definition display.h:853
display_event_result
Display event callback return flags.
Definition display.h:416
int(* display_write_api)(const struct device *dev, const uint16_t x, const uint16_t y, const struct display_buffer_descriptor *desc, const void *buf)
Callback API for writing data to the display.
Definition display.h:466
static int display_clear(const struct device *dev)
Clear the screen of the display device.
Definition display.h:667
static void display_get_capabilities(const struct device *dev, struct display_capabilities *capabilities)
Get display capabilities.
Definition display.h:807
int(* display_set_brightness_api)(const struct device *dev, const uint8_t brightness)
Callback API to set display brightness.
Definition display.h:496
void *(* display_get_framebuffer_api)(const struct device *dev)
Callback API to get framebuffer pointer.
Definition display.h:490
static int display_set_pixel_format(const struct device *dev, const enum display_pixel_format pixel_format)
Set pixel format used by the display.
Definition display.h:830
static int display_set_contrast(const struct device *dev, uint8_t contrast)
Set the contrast of the display.
Definition display.h:790
static int display_register_event_cb(const struct device *dev, display_event_cb_t cb, void *user_data, uint32_t event_mask, bool in_isr, uint32_t *out_reg_handle)
Register event callback for a display device.
Definition display.h:890
int(* display_read_api)(const struct device *dev, const uint16_t x, const uint16_t y, const struct display_buffer_descriptor *desc, void *buf)
Callback API for reading data from the display.
Definition display.h:475
static int display_unregister_event_cb(const struct device *dev, uint32_t reg_handle)
Unregister event callback for a display device.
Definition display.h:926
int(* display_blanking_off_api)(const struct device *dev)
Callback API to turn off display blanking.
Definition display.h:460
int(* display_register_event_cb_api)(const struct device *dev, display_event_cb_t cb, void *user_data, uint32_t event_mask, bool in_isr, uint32_t *out_reg_handle)
Callback API to register display event callback.
Definition display.h:534
display_pixel_format
Display pixel formats.
Definition display.h:49
display_orientation
Enumeration with possible display orientation.
Definition display.h:327
static int display_blanking_on(const struct device *dev)
Turn display blanking on.
Definition display.h:718
int(* display_blanking_on_api)(const struct device *dev)
@def_driverbackendgroup{Display,display_interface}
Definition display.h:454
static int display_set_brightness(const struct device *dev, uint8_t brightness)
Set the brightness of the display.
Definition display.h:766
enum display_event_result(* display_event_cb_t)(const struct device *dev, uint32_t evt, const struct display_event_data *data, void *user_data)
Called either in ISR context (if arg in_isr=true at register time, see display_register_event_cb ) or...
Definition display.h:440
int(* display_unregister_event_cb_api)(const struct device *dev, uint32_t reg_handle)
Callback API to unregister display event callback.
Definition display.h:543
int(* display_set_contrast_api)(const struct device *dev, const uint8_t contrast)
Callback API to set display contrast.
Definition display.h:503
int(* display_clear_api)(const struct device *dev)
Callback API for clearing the screen of the display.
Definition display.h:484
int(* display_set_orientation_api)(const struct device *dev, const enum display_orientation orientation)
Callback API to set orientation used by the display.
Definition display.h:526
@ DISPLAY_EVENT_FIFO_UNDERFLOW
Fired when a FIFO underflow occurs.
Definition display.h:412
@ DISPLAY_EVENT_LINE_INT
Fired when controller reaches a configured scanline.
Definition display.h:404
@ DISPLAY_EVENT_FRAME_DONE
Fired when a frame transfer to the panel or frame buffer update completes.
Definition display.h:408
@ DISPLAY_EVENT_VSYNC
Fired at vertical sync / start of new frame.
Definition display.h:406
@ SCREEN_INFO_X_ALIGNMENT_WIDTH
Screen has x alignment constrained to width.
Definition display.h:321
@ SCREEN_INFO_EPD
Electrophoretic Display.
Definition display.h:313
@ SCREEN_INFO_DOUBLE_BUFFER
Screen has two alternating ram buffers.
Definition display.h:317
@ SCREEN_INFO_MONO_VTILED
If selected, one octet represents 8 pixels ordered vertically, otherwise ordered horizontally.
Definition display.h:304
@ SCREEN_INFO_MONO_MSB_FIRST
If selected, the MSB represents the first pixel, otherwise MSB represents the last pixel.
Definition display.h:309
@ DISPLAY_EVENT_RESULT_CONTINUE
Let the driver execute its default handling.
Definition display.h:418
@ DISPLAY_EVENT_RESULT_HANDLED
The callback handled the event and the driver should skip its default processing for that event.
Definition display.h:422
@ PIXEL_FORMAT_L_4
4-bit greyscale format with 2 pixels packed per byte.
Definition display.h:248
@ PIXEL_FORMAT_ABGR_8888
32-bit BGR format with 8 bits per component and 8 bits for alpha.
Definition display.h:188
@ PIXEL_FORMAT_RGB_565X
16-bit RGB format packed into two bytes.
Definition display.h:119
@ PIXEL_FORMAT_BGRA_8888
32-bit BGR format with 8 bits per component and 8 bits for alpha.
Definition display.h:216
@ PIXEL_FORMAT_L_8
8-bit Greyscale format
Definition display.h:132
@ PIXEL_FORMAT_XRGB_8888
32-bit RGB format with 8 bits per component and 8 bits unused.
Definition display.h:160
@ PIXEL_FORMAT_BGR_888
24-bit BGR format with 8 bits per component.
Definition display.h:174
@ PIXEL_FORMAT_MONO10
Monochrome (1=Black 0=White).
Definition display.h:78
@ PIXEL_FORMAT_YUYV
Packed YUV 4:2:2 format, two pixels per four bytes.
Definition display.h:268
@ PIXEL_FORMAT_ARGB_8888
32-bit RGB format with 8 bits per component and 8 bits for alpha.
Definition display.h:92
@ PIXEL_FORMAT_AL_88
16-bit Greyscale format with 8-bit luminance and 8-bit for alpha
Definition display.h:146
@ PIXEL_FORMAT_RGBA_8888
32-bit RGB format with 8 bits per component and 8 bits for alpha.
Definition display.h:202
@ PIXEL_FORMAT_MONO01
1-bit monochrome format with 1 bit per pixel, thus each byte represent 8 pixels Two variants,...
Definition display.h:77
@ PIXEL_FORMAT_RGB_565
16-bit RGB format packed into two bytes: 5 red bits [15:11], 6 green bits [10:5], 5 blue bits [4:0].
Definition display.h:107
@ PIXEL_FORMAT_RGB_888
24-bit RGB format with 8 bits per component.
Definition display.h:62
@ PIXEL_FORMAT_I_4
4-bit indexed color format with 2 pixels packed per byte.
Definition display.h:232
@ DISPLAY_ORIENTATION_ROTATED_90
Rotated 90 degrees clockwise.
Definition display.h:329
@ DISPLAY_ORIENTATION_ROTATED_180
Rotated 180 degrees clockwise.
Definition display.h:330
@ DISPLAY_ORIENTATION_NORMAL
No rotation.
Definition display.h:328
@ DISPLAY_ORIENTATION_ROTATED_270
Rotated 270 degrees clockwise.
Definition display.h:331
#define BIT(n)
Unsigned integer with bit position n set (signed in assembly language).
Definition util_macro.h:44
#define EINVAL
Invalid argument.
Definition errno.h:61
#define ENOSYS
Function not implemented.
Definition errno.h:83
#define NULL
Definition iar_missing_defs.h:20
Devicetree pixel format identifiers for display panels.
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT64_TYPE__ uint64_t
Definition stdint.h:91
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
void * memset(void *buf, int c, size_t n)
Runtime device structure (in ROM) per driver instance.
Definition device.h:543
Structure to describe display data buffer layout.
Definition display.h:373
uint16_t pitch
Number of pixels between consecutive rows in the data buffer.
Definition display.h:381
bool frame_incomplete
Indicates that this is not the last write buffer of the frame.
Definition display.h:383
uint16_t height
Data buffer column height in pixels.
Definition display.h:379
uint16_t width
Data buffer row width in pixels.
Definition display.h:377
uint32_t buf_size
Data buffer size in bytes.
Definition display.h:375
Structure holding display capabilities.
Definition display.h:351
uint32_t supported_pixel_formats
Bitwise or of pixel formats supported by the display.
Definition display.h:357
uint16_t x_resolution
Display resolution in the X direction.
Definition display.h:353
uint32_t supported_events
Supported callback events mask, 0 when event callback unsupported.
Definition display.h:365
enum display_orientation current_orientation
Current display orientation.
Definition display.h:363
uint16_t y_resolution
Display resolution in the Y direction.
Definition display.h:355
uint32_t screen_info
Information about display panel.
Definition display.h:359
struct display_palette_color color_palette[CONFIG_DISPLAY_COLOR_PALETTE_MAX_SIZE]
Color palette supported by the display, indexed by pixel value.
Definition display.h:368
enum display_pixel_format current_pixel_format
Currently active pixel format for the display.
Definition display.h:361
@driver_ops{Display}
Definition display.h:548
display_blanking_off_api blanking_off
@driver_ops_optional Turn display blanking off.
Definition display.h:556
display_register_event_cb_api register_event_cb
@driver_ops_optional Register event callback for a display device.
Definition display.h:596
display_set_pixel_format_api set_pixel_format
@driver_ops_optional Set pixel format used by the display.
Definition display.h:588
display_read_api read
@driver_ops_optional Read data from display.
Definition display.h:564
display_set_orientation_api set_orientation
@driver_ops_optional Set display orientation.
Definition display.h:592
display_write_api write
@driver_ops_mandatory Write data to display.
Definition display.h:560
display_unregister_event_cb_api unregister_event_cb
@driver_ops_optional Unregister event callback for a display device.
Definition display.h:600
display_clear_api clear
@driver_ops_optional Clear the screen of the display device.
Definition display.h:568
display_set_brightness_api set_brightness
@driver_ops_optional Set the brightness of the display.
Definition display.h:576
display_get_framebuffer_api get_framebuffer
@driver_ops_optional Get pointer to framebuffer for direct access.
Definition display.h:572
display_blanking_on_api blanking_on
@driver_ops_optional Turn display blanking on.
Definition display.h:552
display_get_capabilities_api get_capabilities
@driver_ops_mandatory Get display capabilities.
Definition display.h:584
display_set_contrast_api set_contrast
@driver_ops_optional Set the contrast of the display.
Definition display.h:580
Display event payload.
Definition display.h:387
uint64_t timestamp
Timestamp to differentiate between events of the same type.
Definition display.h:391
int buffer_id
For DISPLAY_EVENT_FRAME_DONE events, set to -1 if unavailable.
Definition display.h:397
int line
For DISPLAY_EVENT_LINE_INT events, set to -1 if unavailable.
Definition display.h:395
union display_event_data::@100061017135123320367133017032337244011232371151 info
Event info passed by driver to callback.
Structure representing a color palette entry in ARGB8888 format.
Definition display.h:337
uint8_t r
Red component (0-255).
Definition display.h:343
uint8_t b
Blue component (0-255).
Definition display.h:339
uint8_t a
Alpha component (0-255).
Definition display.h:345
uint8_t g
Green component (0-255).
Definition display.h:341