From 60dd623ddd1a4c6e1fed45129ed99ad8d0decfbe Mon Sep 17 00:00:00 2001 From: Federico Amedeo Izzo Date: Sun, 4 Oct 2020 17:21:24 +0200 Subject: [PATCH] graphics.h: Add initial version --- openrtx/include/interfaces/graphics.h | 128 ++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 openrtx/include/interfaces/graphics.h diff --git a/openrtx/include/interfaces/graphics.h b/openrtx/include/interfaces/graphics.h new file mode 100644 index 00000000..0decb9d8 --- /dev/null +++ b/openrtx/include/interfaces/graphics.h @@ -0,0 +1,128 @@ +/*************************************************************************** + * Copyright (C) 2020 by Federico Amedeo Izzo IU2NUO, * + * Niccolò Izzo IU2KIN * + * Silvano Seva IU2KWO * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 3 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, see * + ***************************************************************************/ + +#ifndef GRAPHICS_H +#define GRAPHICS_H + +#include +#include +#include + +/** + * Standard high-level graphic interface for all display types. + * This interface is based on the lower level interface display.h + * Many methods of graphics.h are basically calls to methods in display.h. + * + * On top of basic framebuffer and backlight control, graphics.h implements + * graphics primitives for drawing fonts and shapes + * + *********************** HOW TO MANAGE FRAMEBUFFER ***************************** + * + * This driver allocates the framebuffer as a block of linearly addressed memory + * equivalent to an array of SCREEN_HEIGHT*SCREEN_WIDTH elements. + * With respect to it, screen is indexed in this way: + * + * (0,0) + * +-------> x + * | + * | o (X,Y) + * | + * v + * y + * + * then to set the value of the pixel having coordinates (X,Y), framebuffer has + * to be indexed in this way: buf[X + Y*SCREEN_WIDTH]. + * + */ + +/** + * This function calls the correspondent method of the low level interface display.h + * It initializes the display and sets the backlight to zero. + */ +void graphics_init(); + +/** + * This function calls the correspondent method of the low level interface display.h + * It turns off backlight, shuts down backlight control and deallocates the framebuffer. + */ +void graphics_terminate(); + +/** + * This function calls the correspondent method of the low level interface display.h + * Get screen width in pixels. + * @return screen width, in pixels. + */ +uint16_t graphics_screenWidth(); + +/** + * This function calls the correspondent method of the low level interface display.h + * Get screen height in pixels. + * @return screen height, in pixels. + */ +uint16_t graphics_screenHeight(); + +/** + * This function calls the correspondent method of the low level interface display.h + * Set screen backlight to a given level. + * @param level: backlight level, from 0 (backlight off) to 255 (backlight at + * full brightness). + */ +void graphics_setBacklightLevel(uint8_t level); + +/** + * This function calls the correspondent method of the low level interface display.h + * Copy a given section, between two given rows, of framebuffer content to the + * display. + * @param startRow: first row of the framebuffer section to be copied + * @param endRow: last row of the framebuffer section to be copied + */ +void graphics_renderRows(uint8_t startRow, uint8_t endRow); + +/** + * This function calls the correspondent method of the low level interface display.h + * Copy framebuffer content to the display internal buffer. To be called + * whenever there is need to update the display. + */ +void graphics_render(); + +/** + * This function calls the correspondent method of the low level interface display.h + * Check if framebuffer is being copied to the screen or not, in which case it + * can be modified without problems. + * @return false if rendering is not in progress. + */ +bool graphics_renderingInProgress(); + +/** + * This function calls the correspondent method of the low level interface display.h + * Get pointer to framebuffer. Being this a standard interface for all the + * low-level display drivers, this function returns a pointer to void: it's up + * to the caller performing the correct cast to one of the standard types used + * for color coding. + * Changes to the framebuffer will not be reflected on the display until + * graphics_render() or graphics_renderRows() are called. + * + * + * WARNING: no bound check is performed! Do not call free() on the pointer + * returned, doing so will destroy the framebuffer! + * @return pointer to framebuffer. + */ +void *graphics_getFrameBuffer(); + +#endif /* GRAPHICS_H */