u-boot/include/video_osd.h
Mario Six 39a336f116 drivers: Add OSD uclass
Some devices offer a text-based OSD (on-screen display) that can be
programmatically controlled (i.e. text displayed on).

Add a uclass to support such devices.

Reviewed-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Mario Six <mario.six@gdsys.cc>
2018-09-28 18:26:32 +02:00

193 lines
6.7 KiB
C

/* SPDX-License-Identifier: GPL-2.0+ */
/*
* (C) Copyright 2017
* Mario Six, Guntermann & Drunck GmbH, mario.six@gdsys.cc
*/
#ifndef _VIDEO_OSD_H_
#define _VIDEO_OSD_H_
struct video_osd_info {
/* The width of the OSD display in columns */
uint width;
/* The height of the OSD display in rows */
uint height;
/* The major version of the OSD device */
uint major_version;
/* The minor version of the OSD device */
uint minor_version;
};
/**
* struct video_osd_ops - driver operations for OSD uclass
*
* The OSD uclass implements support for text-oriented on-screen displays,
* which are taken to be devices that independently display a graphical
* text-based overlay over the video output of an associated display.
*
* The functions defined by the uclass support writing text to the display in
* either a generic form (by specifying a string, a driver-specific color value
* for the text, and screen coordinates in rows and columns) or a
* driver-specific form (by specifying "raw" driver-specific data to display at
* a given coordinate).
*
* Functions to read device information and set the size of the virtual OSD
* screen (in rows and columns) are also supported.
*
* Drivers should support these operations unless otherwise noted. These
* operations are intended to be used by uclass code, not directly from
* other code.
*/
struct video_osd_ops {
/**
* get_info() - Get information about a OSD instance
*
* A OSD instance may keep some internal data about itself. This
* function can be used to access this data.
*
* @dev: OSD instance to query.
* @info: Pointer to a structure that takes the information read
* from the OSD instance.
* @return 0 if OK, -ve on error.
*/
int (*get_info)(struct udevice *dev, struct video_osd_info *info);
/**
* set_mem() - Write driver-specific text data to OSD screen
*
* The passed data are device-specific, and it's up to the driver how
* to interpret them. How the count parameter is interpreted is also
* driver-specific; most likely the given data will be written to the
* OSD count times back-to-back, which is e.g. convenient for filling
* areas of the OSD with a single character.
*
* For example a invocation of
*
* video_osd_set_mem(dev, 0, 0, "A", 1, 10);
*
* will write the device-specific text data "A" to the positions (0, 0)
* to (9, 0) on the OSD.
*
* Device-specific text data may, e.g. be a special encoding of glyphs
* to display and color values in binary format.
*
* @dev: OSD instance to write to.
* @col: Horizontal character coordinate to write to.
* @row Vertical character coordinate to write to.
* @buf: Array containing device-specific data to write to the
* specified coordinate on the OSD screen.
* @buflen: Length of the data in the passed buffer (in byte).
* @count: Write count many repetitions of the given text data
* @return 0 if OK, -ve on error.
*/
int (*set_mem)(struct udevice *dev, uint col, uint row, u8 *buf,
size_t buflen, uint count);
/**
* set_size() - Set the position and dimension of the OSD's
* writeable window
*
* @dev: OSD instance to write to.
* @col The number of characters in the window's columns
* @row The number of characters in the window's rows
* @return 0 if OK, -ve on error.
*/
int (*set_size)(struct udevice *dev, uint col, uint row);
/**
* print() - Print a string in a given color to specified coordinates
* on the OSD
*
* @dev: OSD instance to write to.
* @col The x-coordinate of the position the string should be
* written to
* @row The y-coordinate of the position the string should be
* written to
* @color: The color in which the specified string should be
* printed; the interpretation of the value is
* driver-specific, and possible values should be defined
* e.g. in a driver include file.
* @text: The string data that should be printed on the OSD
* @return 0 if OK, -ve on error.
*/
int (*print)(struct udevice *dev, uint col, uint row, ulong color,
char *text);
};
#define video_osd_get_ops(dev) ((struct video_osd_ops *)(dev)->driver->ops)
/**
* video_osd_get_info() - Get information about a OSD instance
*
* A OSD instance may keep some internal data about itself. This function can
* be used to access this data.
*
* @dev: OSD instance to query.
* @info: Pointer to a structure that takes the information read from the
* OSD instance.
* @return 0 if OK, -ve on error.
*/
int video_osd_get_info(struct udevice *dev, struct video_osd_info *info);
/**
* video_osd_set_mem() - Write text data to OSD memory
*
* The passed data are device-specific, and it's up to the driver how to
* interpret them. How the count parameter is interpreted is also
* driver-specific; most likely the given data will be written to the OSD count
* times back-to-back, which is e.g. convenient for filling areas of the OSD
* with a single character.
*
* For example a invocation of
*
* video_osd_set_mem(dev, 0, 0, "A", 1, 10);
*
* will write the device-specific text data "A" to the positions (0, 0) to (9,
* 0) on the OSD.
*
* Device-specific text data may, e.g. be a special encoding of glyphs to
* display and color values in binary format.
*
* @dev: OSD instance to write to.
* @col: Horizontal character coordinate to write to.
* @row Vertical character coordinate to write to.
* @buf: Array containing device-specific data to write to the specified
* coordinate on the OSD screen.
* @buflen: Length of the data in the passed buffer (in byte).
* @count: Write count many repetitions of the given text data
* @return 0 if OK, -ve on error.
*/
int video_osd_set_mem(struct udevice *dev, uint col, uint row, u8 *buf,
size_t buflen, uint count);
/**
* video_osd_set_size() - Set the position and dimension of the OSD's
* writeable window
*
* @dev: OSD instance to write to.
* @col The number of characters in the window's columns
* @row The number of characters in the window's rows
* @return 0 if OK, -ve on error.
*/
int video_osd_set_size(struct udevice *dev, uint col, uint row);
/**
* video_osd_print() - Print a string in a given color to specified coordinates
* on the OSD
*
* @dev: OSD instance to write to.
* @col The x-coordinate of the position the string should be written
* to
* @row The y-coordinate of the position the string should be written
* to
* @color: The color in which the specified string should be printed; the
* interpretation of the value is driver-specific, and possible
* values should be defined e.g. in a driver include file.
* @text: The string data that should be printed on the OSD
* @return 0 if OK, -ve on error.
*/
int video_osd_print(struct udevice *dev, uint col, uint row, ulong color,
char *text);
#endif /* !_VIDEO_OSD_H_ */