]>
Commit | Line | Data |
---|---|---|
83510766 SG |
1 | /* |
2 | * Copyright (c) 2015 Google, Inc | |
3 | * | |
4 | * SPDX-License-Identifier: GPL-2.0+ | |
5 | */ | |
6 | ||
7 | #ifndef __video_console_h | |
8 | #define __video_console_h | |
9 | ||
10 | /** | |
11 | * struct vidconsole_priv - uclass-private data about a console device | |
12 | * | |
13 | * @sdev: stdio device, acting as an output sink | |
14 | * @curr_col: Current text column (0=left) | |
15 | * @curr_row: Current row (0=top) | |
16 | * @rows: Number of text rows | |
17 | * @cols: Number of text columns | |
18 | */ | |
19 | struct vidconsole_priv { | |
20 | struct stdio_dev sdev; | |
21 | int curr_col; | |
22 | int curr_row; | |
23 | int rows; | |
24 | int cols; | |
25 | }; | |
26 | ||
27 | /** | |
28 | * struct vidconsole_ops - Video console operations | |
29 | * | |
30 | * These operations work on either an absolute console position (measured | |
31 | * in pixels) or a text row number (measured in rows, where each row consists | |
32 | * of an entire line of text - typically 16 pixels). | |
33 | */ | |
34 | struct vidconsole_ops { | |
35 | /** | |
36 | * putc_xy() - write a single character to a position | |
37 | * | |
38 | * @dev: Device to write to | |
39 | * @x: Pixel X position (0=left-most pixel) | |
40 | * @y: Pixel Y position (0=top-most pixel) | |
41 | * @ch: Character to write | |
42 | * @return 0 if OK, -ve on error | |
43 | */ | |
44 | int (*putc_xy)(struct udevice *dev, uint x, uint y, char ch); | |
45 | ||
46 | /** | |
47 | * move_rows() - Move text rows from one place to another | |
48 | * | |
49 | * @dev: Device to adjust | |
50 | * @rowdst: Destination text row (0=top) | |
51 | * @rowsrc: Source start text row | |
52 | * @count: Number of text rows to move | |
53 | * @return 0 if OK, -ve on error | |
54 | */ | |
55 | int (*move_rows)(struct udevice *dev, uint rowdst, uint rowsrc, | |
56 | uint count); | |
57 | ||
58 | /** | |
59 | * set_row() - Set the colour of a text row | |
60 | * | |
61 | * Every pixel contained within the text row is adjusted | |
62 | * | |
63 | * @dev: Device to adjust | |
64 | * @row: Text row to adjust (0=top) | |
65 | * @clr: Raw colour (pixel value) to write to each pixel | |
66 | * @return 0 if OK, -ve on error | |
67 | */ | |
68 | int (*set_row)(struct udevice *dev, uint row, int clr); | |
69 | }; | |
70 | ||
71 | /* Get a pointer to the driver operations for a video console device */ | |
72 | #define vidconsole_get_ops(dev) ((struct vidconsole_ops *)(dev)->driver->ops) | |
73 | ||
74 | /** | |
75 | * vidconsole_putc_xy() - write a single character to a position | |
76 | * | |
77 | * @dev: Device to write to | |
78 | * @x: Pixel X position (0=left-most pixel) | |
79 | * @y: Pixel Y position (0=top-most pixel) | |
80 | * @ch: Character to write | |
81 | * @return 0 if OK, -ve on error | |
82 | */ | |
83 | int vidconsole_putc_xy(struct udevice *dev, uint x, uint y, char ch); | |
84 | ||
85 | /** | |
86 | * vidconsole_move_rows() - Move text rows from one place to another | |
87 | * | |
88 | * @dev: Device to adjust | |
89 | * @rowdst: Destination text row (0=top) | |
90 | * @rowsrc: Source start text row | |
91 | * @count: Number of text rows to move | |
92 | * @return 0 if OK, -ve on error | |
93 | */ | |
94 | int vidconsole_move_rows(struct udevice *dev, uint rowdst, uint rowsrc, | |
95 | uint count); | |
96 | ||
97 | /** | |
98 | * vidconsole_set_row() - Set the colour of a text row | |
99 | * | |
100 | * Every pixel contained within the text row is adjusted | |
101 | * | |
102 | * @dev: Device to adjust | |
103 | * @row: Text row to adjust (0=top) | |
104 | * @clr: Raw colour (pixel value) to write to each pixel | |
105 | * @return 0 if OK, -ve on error | |
106 | */ | |
107 | int vidconsole_set_row(struct udevice *dev, uint row, int clr); | |
108 | ||
109 | /** | |
110 | * vidconsole_put_char() - Output a character to the current console position | |
111 | * | |
112 | * Outputs a character to the console and advances the cursor. This function | |
113 | * handles wrapping to new lines and scrolling the console. Special | |
114 | * characters are handled also: \n, \r, \b and \t. | |
115 | * | |
116 | * The device always starts with the cursor at position 0,0 (top left). It | |
117 | * can be adjusted manually using vidconsole_position_cursor(). | |
118 | * | |
119 | * @dev: Device to adjust | |
120 | * @ch: Character to write | |
121 | * @return 0 if OK, -ve on error | |
122 | */ | |
123 | int vidconsole_put_char(struct udevice *dev, char ch); | |
124 | ||
125 | /** | |
126 | * vidconsole_position_cursor() - Move the text cursor | |
127 | * | |
128 | * @dev: Device to adjust | |
129 | * @col: New cursor text column | |
130 | * @row: New cursor text row | |
131 | * @return 0 if OK, -ve on error | |
132 | */ | |
133 | void vidconsole_position_cursor(struct udevice *dev, unsigned col, | |
134 | unsigned row); | |
135 | ||
136 | #endif |