blob: 976b27f200ed2181425dd671015d7d69c63784aa [file] [log] [blame]
/*
* Copyright (c) 2018 PHYTEC Messtechnik GmbH
*
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @file
* @brief Public Monochrome Character Framebuffer API
*/
#ifndef __CFB_H__
#define __CFB_H__
#include <zephyr/device.h>
#include <zephyr/drivers/display.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Display Drivers
* @addtogroup display_interfaces Display Drivers
* @{
* @}
*/
/**
* @brief Public Monochrome Character Framebuffer API
* @defgroup monochrome_character_framebuffer Monochrome Character Framebuffer
* @ingroup display_interfaces
* @{
*/
enum cfb_display_param {
CFB_DISPLAY_HEIGH = 0,
CFB_DISPLAY_WIDTH,
CFB_DISPLAY_PPT,
CFB_DISPLAY_ROWS,
CFB_DISPLAY_COLS,
};
enum cfb_font_caps {
CFB_FONT_MONO_VPACKED = BIT(0),
CFB_FONT_MONO_HPACKED = BIT(1),
CFB_FONT_MSB_FIRST = BIT(2),
};
struct cfb_font {
const void *data;
enum cfb_font_caps caps;
uint8_t width;
uint8_t height;
uint8_t first_char;
uint8_t last_char;
};
/**
* @brief Macro for creating a font entry.
*
* @param _name Name of the font entry.
* @param _width Width of the font in pixels
* @param _height Height of the font in pixels.
* @param _caps Font capabilities.
* @param _data Raw data of the font.
* @param _fc Character mapped to first font element.
* @param _lc Character mapped to last font element.
*/
#define FONT_ENTRY_DEFINE(_name, _width, _height, _caps, _data, _fc, _lc) \
static const STRUCT_SECTION_ITERABLE(cfb_font, _name) = { \
.data = _data, \
.caps = _caps, \
.width = _width, \
.height = _height, \
.first_char = _fc, \
.last_char = _lc, \
}
/**
* @brief Print a string into the framebuffer.
*
* @param dev Pointer to device structure for driver instance
* @param str String to print
* @param x Position in X direction of the beginning of the string
* @param y Position in Y direction of the beginning of the string
*
* @return 0 on success, negative value otherwise
*/
int cfb_print(const struct device *dev, char *str, uint16_t x, uint16_t y);
/**
* @brief Clear framebuffer.
*
* @param dev Pointer to device structure for driver instance
* @param clear_display Clear the display as well
*
* @return 0 on success, negative value otherwise
*/
int cfb_framebuffer_clear(const struct device *dev, bool clear_display);
/**
* @brief Invert Pixels.
*
* @param dev Pointer to device structure for driver instance
*
* @return 0 on success, negative value otherwise
*/
int cfb_framebuffer_invert(const struct device *dev);
/**
* @brief Invert Pixels in selected area.
*
* @param dev Pointer to device structure for driver instance
* @param x Position in X direction of the beginning of area
* @param y Position in Y direction of the beginning of area
* @param width Width of area in pixels
* @param height Height of area in pixels
*
* @return 0 on success, negative value otherwise
*/
int cfb_invert_area(const struct device *dev, uint16_t x, uint16_t y,
uint16_t width, uint16_t height);
/**
* @brief Finalize framebuffer and write it to display RAM,
* invert or reorder pixels if necessary.
*
* @param dev Pointer to device structure for driver instance
*
* @return 0 on success, negative value otherwise
*/
int cfb_framebuffer_finalize(const struct device *dev);
/**
* @brief Get display parameter.
*
* @param dev Pointer to device structure for driver instance
* @param cfb_display_param One of the display parameters
*
* @return Display parameter value
*/
int cfb_get_display_parameter(const struct device *dev,
enum cfb_display_param);
/**
* @brief Set font.
*
* @param dev Pointer to device structure for driver instance
* @param idx Font index
*
* @return 0 on success, negative value otherwise
*/
int cfb_framebuffer_set_font(const struct device *dev, uint8_t idx);
/**
* @brief Get font size.
*
* @param dev Pointer to device structure for driver instance
* @param idx Font index
* @param width Pointers to the variable where the font width will be stored.
* @param height Pointers to the variable where the font height will be stored.
*
* @return 0 on success, negative value otherwise
*/
int cfb_get_font_size(const struct device *dev, uint8_t idx, uint8_t *width,
uint8_t *height);
/**
* @brief Get number of fonts.
*
* @param dev Pointer to device structure for driver instance
*
* @return number of fonts
*/
int cfb_get_numof_fonts(const struct device *dev);
/**
* @brief Initialize Character Framebuffer.
*
* @param dev Pointer to device structure for driver instance
*
* @return 0 on success, negative value otherwise
*/
int cfb_framebuffer_init(const struct device *dev);
#ifdef __cplusplus
}
#endif
/**
* @}
*/
#endif /* __CFB_H__ */