mirror of
https://xff.cz/git/u-boot/
synced 2025-09-01 08:42:12 +02:00
dm: video: Add a uclass for the text console
The existing LCD/video interface suffers from conflating the bitmap display with text output on that display. As a result the implementation is more complex than it needs to me. We can support multiple text console drivers. Create a separate uclass to support this, with its own API. Signed-off-by: Simon Glass <sjg@chromium.org> Acked-by: Anatolij Gustschin <agust@denx.de>
This commit is contained in:
136
include/video_console.h
Normal file
136
include/video_console.h
Normal file
@@ -0,0 +1,136 @@
|
||||
/*
|
||||
* Copyright (c) 2015 Google, Inc
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#ifndef __video_console_h
|
||||
#define __video_console_h
|
||||
|
||||
/**
|
||||
* struct vidconsole_priv - uclass-private data about a console device
|
||||
*
|
||||
* @sdev: stdio device, acting as an output sink
|
||||
* @curr_col: Current text column (0=left)
|
||||
* @curr_row: Current row (0=top)
|
||||
* @rows: Number of text rows
|
||||
* @cols: Number of text columns
|
||||
*/
|
||||
struct vidconsole_priv {
|
||||
struct stdio_dev sdev;
|
||||
int curr_col;
|
||||
int curr_row;
|
||||
int rows;
|
||||
int cols;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct vidconsole_ops - Video console operations
|
||||
*
|
||||
* These operations work on either an absolute console position (measured
|
||||
* in pixels) or a text row number (measured in rows, where each row consists
|
||||
* of an entire line of text - typically 16 pixels).
|
||||
*/
|
||||
struct vidconsole_ops {
|
||||
/**
|
||||
* putc_xy() - write a single character to a position
|
||||
*
|
||||
* @dev: Device to write to
|
||||
* @x: Pixel X position (0=left-most pixel)
|
||||
* @y: Pixel Y position (0=top-most pixel)
|
||||
* @ch: Character to write
|
||||
* @return 0 if OK, -ve on error
|
||||
*/
|
||||
int (*putc_xy)(struct udevice *dev, uint x, uint y, char ch);
|
||||
|
||||
/**
|
||||
* move_rows() - Move text rows from one place to another
|
||||
*
|
||||
* @dev: Device to adjust
|
||||
* @rowdst: Destination text row (0=top)
|
||||
* @rowsrc: Source start text row
|
||||
* @count: Number of text rows to move
|
||||
* @return 0 if OK, -ve on error
|
||||
*/
|
||||
int (*move_rows)(struct udevice *dev, uint rowdst, uint rowsrc,
|
||||
uint count);
|
||||
|
||||
/**
|
||||
* set_row() - Set the colour of a text row
|
||||
*
|
||||
* Every pixel contained within the text row is adjusted
|
||||
*
|
||||
* @dev: Device to adjust
|
||||
* @row: Text row to adjust (0=top)
|
||||
* @clr: Raw colour (pixel value) to write to each pixel
|
||||
* @return 0 if OK, -ve on error
|
||||
*/
|
||||
int (*set_row)(struct udevice *dev, uint row, int clr);
|
||||
};
|
||||
|
||||
/* Get a pointer to the driver operations for a video console device */
|
||||
#define vidconsole_get_ops(dev) ((struct vidconsole_ops *)(dev)->driver->ops)
|
||||
|
||||
/**
|
||||
* vidconsole_putc_xy() - write a single character to a position
|
||||
*
|
||||
* @dev: Device to write to
|
||||
* @x: Pixel X position (0=left-most pixel)
|
||||
* @y: Pixel Y position (0=top-most pixel)
|
||||
* @ch: Character to write
|
||||
* @return 0 if OK, -ve on error
|
||||
*/
|
||||
int vidconsole_putc_xy(struct udevice *dev, uint x, uint y, char ch);
|
||||
|
||||
/**
|
||||
* vidconsole_move_rows() - Move text rows from one place to another
|
||||
*
|
||||
* @dev: Device to adjust
|
||||
* @rowdst: Destination text row (0=top)
|
||||
* @rowsrc: Source start text row
|
||||
* @count: Number of text rows to move
|
||||
* @return 0 if OK, -ve on error
|
||||
*/
|
||||
int vidconsole_move_rows(struct udevice *dev, uint rowdst, uint rowsrc,
|
||||
uint count);
|
||||
|
||||
/**
|
||||
* vidconsole_set_row() - Set the colour of a text row
|
||||
*
|
||||
* Every pixel contained within the text row is adjusted
|
||||
*
|
||||
* @dev: Device to adjust
|
||||
* @row: Text row to adjust (0=top)
|
||||
* @clr: Raw colour (pixel value) to write to each pixel
|
||||
* @return 0 if OK, -ve on error
|
||||
*/
|
||||
int vidconsole_set_row(struct udevice *dev, uint row, int clr);
|
||||
|
||||
/**
|
||||
* vidconsole_put_char() - Output a character to the current console position
|
||||
*
|
||||
* Outputs a character to the console and advances the cursor. This function
|
||||
* handles wrapping to new lines and scrolling the console. Special
|
||||
* characters are handled also: \n, \r, \b and \t.
|
||||
*
|
||||
* The device always starts with the cursor at position 0,0 (top left). It
|
||||
* can be adjusted manually using vidconsole_position_cursor().
|
||||
*
|
||||
* @dev: Device to adjust
|
||||
* @ch: Character to write
|
||||
* @return 0 if OK, -ve on error
|
||||
*/
|
||||
int vidconsole_put_char(struct udevice *dev, char ch);
|
||||
|
||||
/**
|
||||
* vidconsole_position_cursor() - Move the text cursor
|
||||
*
|
||||
* @dev: Device to adjust
|
||||
* @col: New cursor text column
|
||||
* @row: New cursor text row
|
||||
* @return 0 if OK, -ve on error
|
||||
*/
|
||||
void vidconsole_position_cursor(struct udevice *dev, unsigned col,
|
||||
unsigned row);
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user