Zephyr API Documentation  3.6.0
A Scalable Open Source RTOS
3.6.0
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
auxdisplay.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2022-2023 Jamie McCrae
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
12#ifndef ZEPHYR_INCLUDE_DRIVERS_AUXDISPLAY_H_
13#define ZEPHYR_INCLUDE_DRIVERS_AUXDISPLAY_H_
14
22#include <stdint.h>
23#include <stddef.h>
24#include <zephyr/kernel.h>
25#include <zephyr/device.h>
26
27#ifdef __cplusplus
28extern "C" {
29#endif
30
32#define AUXDISPLAY_LIGHT_NOT_SUPPORTED 0
33
36
41
46
51
53};
54
59
62
64};
65
72
75};
76
81
84
87
90
93
96
99
102};
103
108
111
114};
115
120
127
132};
133
145typedef int (*auxdisplay_display_on_t)(const struct device *dev);
146
152typedef int (*auxdisplay_display_off_t)(const struct device *dev);
153
159typedef int (*auxdisplay_cursor_set_enabled_t)(const struct device *dev, bool enabled);
160
166typedef int (*auxdisplay_position_blinking_set_enabled_t)(const struct device *dev,
167 bool enabled);
168
174typedef int (*auxdisplay_cursor_shift_set_t)(const struct device *dev, uint8_t direction,
175 bool display_shift);
176
182typedef int (*auxdisplay_cursor_position_set_t)(const struct device *dev,
183 enum auxdisplay_position type,
184 int16_t x, int16_t y);
185
191typedef int (*auxdisplay_cursor_position_get_t)(const struct device *dev, int16_t *x,
192 int16_t *y);
193
199typedef int (*auxdisplay_display_position_set_t)(const struct device *dev,
200 enum auxdisplay_position type,
201 int16_t x, int16_t y);
202
208typedef int (*auxdisplay_display_position_get_t)(const struct device *dev, int16_t *x,
209 int16_t *y);
210
216typedef int (*auxdisplay_capabilities_get_t)(const struct device *dev,
217 struct auxdisplay_capabilities *capabilities);
218
224typedef int (*auxdisplay_clear_t)(const struct device *dev);
225
232typedef int (*auxdisplay_brightness_get_t)(const struct device *dev, uint8_t *brightness);
233
239typedef int (*auxdisplay_brightness_set_t)(const struct device *dev, uint8_t brightness);
240
247typedef int (*auxdisplay_backlight_get_t)(const struct device *dev, uint8_t *backlight);
248
254typedef int (*auxdisplay_backlight_set_t)(const struct device *dev, uint8_t backlight);
255
261typedef int (*auxdisplay_is_busy_t)(const struct device *dev);
262
268typedef int (*auxdisplay_custom_character_set_t)(const struct device *dev,
269 struct auxdisplay_character *character);
270
276typedef int (*auxdisplay_write_t)(const struct device *dev, const uint8_t *data, uint16_t len);
277
283typedef int (*auxdisplay_custom_command_t)(const struct device *dev,
284 struct auxdisplay_custom_data *command);
285
286__subsystem struct auxdisplay_driver_api {
287 auxdisplay_display_on_t display_on;
288 auxdisplay_display_off_t display_off;
289 auxdisplay_cursor_set_enabled_t cursor_set_enabled;
290 auxdisplay_position_blinking_set_enabled_t position_blinking_set_enabled;
291 auxdisplay_cursor_shift_set_t cursor_shift_set;
292 auxdisplay_cursor_position_set_t cursor_position_set;
293 auxdisplay_cursor_position_get_t cursor_position_get;
294 auxdisplay_display_position_set_t display_position_set;
295 auxdisplay_display_position_get_t display_position_get;
296 auxdisplay_capabilities_get_t capabilities_get;
297 auxdisplay_clear_t clear;
298 auxdisplay_brightness_get_t brightness_get;
299 auxdisplay_brightness_set_t brightness_set;
300 auxdisplay_backlight_get_t backlight_get;
301 auxdisplay_backlight_set_t backlight_set;
302 auxdisplay_is_busy_t is_busy;
303 auxdisplay_custom_character_set_t custom_character_set;
304 auxdisplay_write_t write;
305 auxdisplay_custom_command_t custom_command;
306};
307
321__syscall int auxdisplay_display_on(const struct device *dev);
322
323static inline int z_impl_auxdisplay_display_on(const struct device *dev)
324{
325 struct auxdisplay_driver_api *api = (struct auxdisplay_driver_api *)dev->api;
326
327 if (!api->display_on) {
328 return -ENOSYS;
329 }
330
331 return api->display_on(dev);
332}
333
343__syscall int auxdisplay_display_off(const struct device *dev);
344
345static inline int z_impl_auxdisplay_display_off(const struct device *dev)
346{
347 struct auxdisplay_driver_api *api = (struct auxdisplay_driver_api *)dev->api;
348
349 if (!api->display_off) {
350 return -ENOSYS;
351 }
352
353 return api->display_off(dev);
354}
355
366__syscall int auxdisplay_cursor_set_enabled(const struct device *dev,
367 bool enabled);
368
369static inline int z_impl_auxdisplay_cursor_set_enabled(const struct device *dev,
370 bool enabled)
371{
372 struct auxdisplay_driver_api *api = (struct auxdisplay_driver_api *)dev->api;
373
374 if (!api->cursor_set_enabled) {
375 return -ENOSYS;
376 }
377
378 return api->cursor_set_enabled(dev, enabled);
379}
380
391__syscall int auxdisplay_position_blinking_set_enabled(const struct device *dev,
392 bool enabled);
393
394static inline int z_impl_auxdisplay_position_blinking_set_enabled(const struct device *dev,
395 bool enabled)
396{
397 struct auxdisplay_driver_api *api = (struct auxdisplay_driver_api *)dev->api;
398
399 if (!api->position_blinking_set_enabled) {
400 return -ENOSYS;
401 }
402
403 return api->position_blinking_set_enabled(dev, enabled);
404}
405
419__syscall int auxdisplay_cursor_shift_set(const struct device *dev,
420 uint8_t direction, bool display_shift);
421
422static inline int z_impl_auxdisplay_cursor_shift_set(const struct device *dev,
423 uint8_t direction,
424 bool display_shift)
425{
426 struct auxdisplay_driver_api *api = (struct auxdisplay_driver_api *)dev->api;
427
428 if (!api->cursor_shift_set) {
429 return -ENOSYS;
430 }
431
432 if (direction >= AUXDISPLAY_DIRECTION_COUNT) {
433 return -EINVAL;
434 }
435
436 return api->cursor_shift_set(dev, direction, display_shift);
437}
438
452__syscall int auxdisplay_cursor_position_set(const struct device *dev,
453 enum auxdisplay_position type,
454 int16_t x, int16_t y);
455
456static inline int z_impl_auxdisplay_cursor_position_set(const struct device *dev,
457 enum auxdisplay_position type,
458 int16_t x, int16_t y)
459{
460 struct auxdisplay_driver_api *api = (struct auxdisplay_driver_api *)dev->api;
461
462 if (!api->cursor_position_set) {
463 return -ENOSYS;
464 } else if (type >= AUXDISPLAY_POSITION_COUNT) {
465 return -EINVAL;
466 } else if (type == AUXDISPLAY_POSITION_ABSOLUTE && (x < 0 || y < 0)) {
467 return -EINVAL;
468 }
469
470 return api->cursor_position_set(dev, type, x, y);
471}
472
485__syscall int auxdisplay_cursor_position_get(const struct device *dev,
486 int16_t *x, int16_t *y);
487
488static inline int z_impl_auxdisplay_cursor_position_get(const struct device *dev,
489 int16_t *x, int16_t *y)
490{
491 struct auxdisplay_driver_api *api = (struct auxdisplay_driver_api *)dev->api;
492
493 if (!api->cursor_position_get) {
494 return -ENOSYS;
495 }
496
497 return api->cursor_position_get(dev, x, y);
498}
499
513__syscall int auxdisplay_display_position_set(const struct device *dev,
514 enum auxdisplay_position type,
515 int16_t x, int16_t y);
516
517static inline int z_impl_auxdisplay_display_position_set(const struct device *dev,
518 enum auxdisplay_position type,
519 int16_t x, int16_t y)
520{
521 struct auxdisplay_driver_api *api = (struct auxdisplay_driver_api *)dev->api;
522
523 if (!api->display_position_set) {
524 return -ENOSYS;
525 } else if (type >= AUXDISPLAY_POSITION_COUNT) {
526 return -EINVAL;
527 } else if (type == AUXDISPLAY_POSITION_ABSOLUTE && (x < 0 || y < 0)) {
528 return -EINVAL;
529 }
530
531 return api->display_position_set(dev, type, x, y);
532}
533
546__syscall int auxdisplay_display_position_get(const struct device *dev,
547 int16_t *x, int16_t *y);
548
549static inline int z_impl_auxdisplay_display_position_get(const struct device *dev,
550 int16_t *x, int16_t *y)
551{
552 struct auxdisplay_driver_api *api = (struct auxdisplay_driver_api *)dev->api;
553
554 if (!api->display_position_get) {
555 return -ENOSYS;
556 }
557
558 return api->display_position_get(dev, x, y);
559}
560
570__syscall int auxdisplay_capabilities_get(const struct device *dev,
571 struct auxdisplay_capabilities *capabilities);
572
573static inline int z_impl_auxdisplay_capabilities_get(const struct device *dev,
574 struct auxdisplay_capabilities *capabilities)
575{
576 struct auxdisplay_driver_api *api = (struct auxdisplay_driver_api *)dev->api;
577
578 return api->capabilities_get(dev, capabilities);
579}
580
591__syscall int auxdisplay_clear(const struct device *dev);
592
593static inline int z_impl_auxdisplay_clear(const struct device *dev)
594{
595 struct auxdisplay_driver_api *api = (struct auxdisplay_driver_api *)dev->api;
596
597 return api->clear(dev);
598}
599
610__syscall int auxdisplay_brightness_get(const struct device *dev,
611 uint8_t *brightness);
612
613static inline int z_impl_auxdisplay_brightness_get(const struct device *dev,
614 uint8_t *brightness)
615{
616 struct auxdisplay_driver_api *api = (struct auxdisplay_driver_api *)dev->api;
617
618 if (!api->brightness_get) {
619 return -ENOSYS;
620 }
621
622 return api->brightness_get(dev, brightness);
623}
624
636__syscall int auxdisplay_brightness_set(const struct device *dev,
637 uint8_t brightness);
638
639static inline int z_impl_auxdisplay_brightness_set(const struct device *dev,
640 uint8_t brightness)
641{
642 struct auxdisplay_driver_api *api = (struct auxdisplay_driver_api *)dev->api;
643
644 if (!api->brightness_set) {
645 return -ENOSYS;
646 }
647
648 return api->brightness_set(dev, brightness);
649}
650
661__syscall int auxdisplay_backlight_get(const struct device *dev,
662 uint8_t *backlight);
663
664static inline int z_impl_auxdisplay_backlight_get(const struct device *dev,
665 uint8_t *backlight)
666{
667 struct auxdisplay_driver_api *api = (struct auxdisplay_driver_api *)dev->api;
668
669 if (!api->backlight_get) {
670 return -ENOSYS;
671 }
672
673 return api->backlight_get(dev, backlight);
674}
675
687__syscall int auxdisplay_backlight_set(const struct device *dev,
688 uint8_t backlight);
689
690static inline int z_impl_auxdisplay_backlight_set(const struct device *dev,
691 uint8_t backlight)
692{
693 struct auxdisplay_driver_api *api = (struct auxdisplay_driver_api *)dev->api;
694
695 if (!api->backlight_set) {
696 return -ENOSYS;
697 }
698
699 return api->backlight_set(dev, backlight);
700}
701
712__syscall int auxdisplay_is_busy(const struct device *dev);
713
714static inline int z_impl_auxdisplay_is_busy(const struct device *dev)
715{
716 struct auxdisplay_driver_api *api = (struct auxdisplay_driver_api *)dev->api;
717
718 if (!api->is_busy) {
719 return -ENOSYS;
720 }
721
722 return api->is_busy(dev);
723}
724
745__syscall int auxdisplay_custom_character_set(const struct device *dev,
746 struct auxdisplay_character *character);
747
748static inline int z_impl_auxdisplay_custom_character_set(const struct device *dev,
749 struct auxdisplay_character *character)
750{
751 struct auxdisplay_driver_api *api = (struct auxdisplay_driver_api *)dev->api;
752
753 if (!api->custom_character_set) {
754 return -ENOSYS;
755 }
756
757 return api->custom_character_set(dev, character);
758}
759
771__syscall int auxdisplay_write(const struct device *dev, const uint8_t *data,
772 uint16_t len);
773
774static inline int z_impl_auxdisplay_write(const struct device *dev,
775 const uint8_t *data, uint16_t len)
776{
777 struct auxdisplay_driver_api *api = (struct auxdisplay_driver_api *)dev->api;
778
779 return api->write(dev, data, len);
780}
781
793__syscall int auxdisplay_custom_command(const struct device *dev,
794 struct auxdisplay_custom_data *data);
795
796static inline int z_impl_auxdisplay_custom_command(const struct device *dev,
797 struct auxdisplay_custom_data *data)
798{
799 struct auxdisplay_driver_api *api = (struct auxdisplay_driver_api *)dev->api;
800
801 if (!api->custom_command) {
802 return -ENOSYS;
803 }
804
805 return api->custom_command(dev, data);
806}
807
808#ifdef __cplusplus
809}
810#endif
811
816#include <syscalls/auxdisplay.h>
817
818#endif /* ZEPHYR_INCLUDE_DRIVERS_AUXDISPLAY_H_ */
int auxdisplay_display_position_set(const struct device *dev, enum auxdisplay_position type, int16_t x, int16_t y)
Set display position on an auxiliary display.
int auxdisplay_brightness_get(const struct device *dev, uint8_t *brightness)
Get the current brightness level of an auxiliary display.
int auxdisplay_display_position_get(const struct device *dev, int16_t *x, int16_t *y)
Get current display position on an auxiliary display.
int auxdisplay_write(const struct device *dev, const uint8_t *data, uint16_t len)
Write data to auxiliary display screen at current position.
int auxdisplay_backlight_set(const struct device *dev, uint8_t backlight)
Update the backlight level of an auxiliary display.
int auxdisplay_is_busy(const struct device *dev)
Check if an auxiliary display driver is busy.
int auxdisplay_brightness_set(const struct device *dev, uint8_t brightness)
Update the brightness level of an auxiliary display.
int auxdisplay_cursor_position_get(const struct device *dev, int16_t *x, int16_t *y)
Get current cursor on an auxiliary display.
int auxdisplay_capabilities_get(const struct device *dev, struct auxdisplay_capabilities *capabilities)
Fetch capabilities (and details) of auxiliary display.
auxdisplay_direction
Used for setting character append position.
Definition: auxdisplay.h:56
int auxdisplay_display_off(const struct device *dev)
Turn display off.
int auxdisplay_position_blinking_set_enabled(const struct device *dev, bool enabled)
Set cursor blinking status on an auxiliary display.
int auxdisplay_cursor_set_enabled(const struct device *dev, bool enabled)
Set cursor enabled status on an auxiliary display.
uint32_t auxdisplay_mode_t
Used to describe the mode of an auxiliary (text) display.
Definition: auxdisplay.h:35
int auxdisplay_custom_command(const struct device *dev, struct auxdisplay_custom_data *data)
Send a custom command to the display (if supported by driver)
auxdisplay_position
Used for moving the cursor or display position.
Definition: auxdisplay.h:38
int auxdisplay_cursor_position_set(const struct device *dev, enum auxdisplay_position type, int16_t x, int16_t y)
Set cursor (and write position) on an auxiliary display.
int auxdisplay_clear(const struct device *dev)
Clear display of auxiliary display and return to home position (note that this does not reset the dis...
int auxdisplay_custom_character_set(const struct device *dev, struct auxdisplay_character *character)
Sets a custom character in the display, the custom character struct must contain the pixel data for t...
int auxdisplay_backlight_get(const struct device *dev, uint8_t *backlight)
Get the backlight level details of an auxiliary display.
int auxdisplay_cursor_shift_set(const struct device *dev, uint8_t direction, bool display_shift)
Set cursor shift after character write and display shift.
int auxdisplay_display_on(const struct device *dev)
Turn display on.
@ AUXDISPLAY_DIRECTION_LEFT
Each character will be placed to the left of existing characters.
Definition: auxdisplay.h:61
@ AUXDISPLAY_DIRECTION_COUNT
Definition: auxdisplay.h:63
@ AUXDISPLAY_DIRECTION_RIGHT
Each character will be placed to the right of existing characters.
Definition: auxdisplay.h:58
@ AUXDISPLAY_POSITION_COUNT
Definition: auxdisplay.h:52
@ AUXDISPLAY_POSITION_ABSOLUTE
Moves to specified X,Y position.
Definition: auxdisplay.h:40
@ AUXDISPLAY_POSITION_RELATIVE
Shifts current position by +/- X,Y position, does not take display direction into consideration.
Definition: auxdisplay.h:45
@ AUXDISPLAY_POSITION_RELATIVE_DIRECTION
Shifts current position by +/- X,Y position, takes display direction into consideration.
Definition: auxdisplay.h:50
#define EINVAL
Invalid argument.
Definition: errno.h:61
#define ENOSYS
Function not implemented.
Definition: errno.h:83
Public kernel APIs.
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
__UINT16_TYPE__ uint16_t
Definition: stdint.h:89
__INT16_TYPE__ int16_t
Definition: stdint.h:73
Structure holding display capabilities.
Definition: auxdisplay.h:78
struct auxdisplay_light brightness
Brightness details for display (if supported)
Definition: auxdisplay.h:89
uint8_t custom_characters
Number of custom characters supported by display (0 if unsupported)
Definition: auxdisplay.h:95
auxdisplay_mode_t mode
Display-specific data (e.g.
Definition: auxdisplay.h:86
uint16_t columns
Number of character columns.
Definition: auxdisplay.h:80
struct auxdisplay_light backlight
Backlight details for display (if supported)
Definition: auxdisplay.h:92
uint8_t custom_character_width
Width (in pixels) of a custom character, supplied custom characters should match.
Definition: auxdisplay.h:98
uint8_t custom_character_height
Height (in pixels) of a custom character, supplied custom characters should match.
Definition: auxdisplay.h:101
uint16_t rows
Number of character rows.
Definition: auxdisplay.h:83
Structure for a custom character.
Definition: auxdisplay.h:117
uint8_t character_code
Will be updated with custom character index to use in the display write function to disaplay this cus...
Definition: auxdisplay.h:131
uint8_t * data
Custom character pixel data, a character must be valid for a display consisting of a uint8 array of s...
Definition: auxdisplay.h:126
uint8_t index
Custom character index on the display.
Definition: auxdisplay.h:119
Structure for a custom command.
Definition: auxdisplay.h:105
uint32_t options
Display-driver specific options for command.
Definition: auxdisplay.h:113
uint16_t len
Length of supplied data.
Definition: auxdisplay.h:110
uint8_t * data
Raw command data to be sent.
Definition: auxdisplay.h:107
Light levels for brightness and/or backlight.
Definition: auxdisplay.h:69
uint8_t minimum
Minimum light level supported.
Definition: auxdisplay.h:71
uint8_t maximum
Maximum light level supported.
Definition: auxdisplay.h:74
Runtime device structure (in ROM) per driver instance.
Definition: device.h:387
void * data
Address of the device instance private data.
Definition: device.h:397
const void * api
Address of the API structure exposed by the device instance.
Definition: device.h:393