File: lcd.h

package info (click to toggle)
lcdproc 0.5.9-3
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster, sid
  • size: 5,064 kB
  • sloc: ansic: 59,645; sh: 1,740; perl: 681; makefile: 417
file content (216 lines) | stat: -rw-r--r-- 8,231 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
/** \file server/drivers/lcd.h
 * This file defines the LCDd-driver API
 *
 * It is written to facilitate loadable driver modules.
 * There should be no further interaction between driver and server core
 * other that via this API.
 *
 * Driver writer notes
 * ~~~~~~~~~~~~~~~~~~~
 * See documentation in the docs/lcdproc-dev/ directory.
 *
 * DO NOT MIX DRIVER ALLOCATED AND CORE ALLOCATED MEMORY.
 * With this I mean that the server core should NEVER WRITE in memory
 * allocated by the driver, and vice versa. Also the driver resp. core
 * should free or realloc the memory that it has allocated. You can always
 * simply copy a string if its data space is not 'yours'.
 */

/*-
 * This file is part of LCDd, the lcdproc server.
 *
 * This file is released under the GNU General Public License. Refer to the
 * COPYING file distributed with this package.
 *
 * Copyright (c) 1999, William Ferrell, Selene Scriven
 *		 2001, Joris Robijn
 */

#ifndef LCD_H
#define LCD_H

#include <stddef.h>

/* Maximum supported sizes */
#define LCD_MAX_WIDTH 256
#define LCD_MAX_HEIGHT 256

/* Standard supported sizes */
#define LCD_DEFAULT_WIDTH 20
#define LCD_DEFAULT_HEIGHT 4
#define LCD_DEFAULT_CELLWIDTH 5
#define LCD_DEFAULT_CELLHEIGHT 8

/* Backlight data */
#define BACKLIGHT_OFF 0
#define BACKLIGHT_ON  1

/* Icons. If a driver does not support an icon, it can return -1 from the
 * icon function, and let the core place a replacement character.
 */
/* Icons below are one character wide */
#define ICON_BLOCK_FILLED	0x100
#define ICON_HEART_OPEN		0x108
#define ICON_HEART_FILLED	0x109
#define ICON_ARROW_UP		0x110
#define ICON_ARROW_DOWN		0x111
#define ICON_ARROW_LEFT		0x112
#define ICON_ARROW_RIGHT	0x113
#define ICON_CHECKBOX_OFF	0x120
#define ICON_CHECKBOX_ON	0x121
#define ICON_CHECKBOX_GRAY	0x122
#define ICON_SELECTOR_AT_LEFT	0x128
#define ICON_SELECTOR_AT_RIGHT	0x129
#define ICON_ELLIPSIS		0x130

/* Icons below are two characters wide */
#define ICON_STOP		0x200	/* should look like  []  */
#define ICON_PAUSE		0x201	/* should look like  ||  */
#define ICON_PLAY		0x202	/* should look like  >   */
#define ICON_PLAYR		0x203	/* should llok like  <   */
#define ICON_FF			0x204	/* should look like  >>  */
#define ICON_FR			0x205	/* should look like  <<  */
#define ICON_NEXT		0x206	/* should look like  >|  */
#define ICON_PREV		0x207	/* should look like  |<  */
#define ICON_REC		0x208	/* should look like  ()  */

/* Icon numbers from 0 to 0x0FF could be used for client defined chars.
 * However this is not implemented and there are no crystalized ideas
 * about how to do it. get_free_chars and set_char should be used, but a
 * lot of things in that area might need to be changed.
 */

/* Heartbeat data */
#define HEARTBEAT_OFF 0
#define HEARTBEAT_ON 1

/* Patterns for hbar / vbar, mostly (if not all) UNIMPLEMENTED */
#define BAR_POS		0x001 /* default
				 Promilles allowed: 0 to 1000
				 The zero-point is at the left or bottom */
#define BAR_NEG		0x002 /* the bar grows in negative direction
				 Promilles allowed: -1000 to 0
				 The zero-point is at the left or top */
#define BAR_POS_AND_NEG	0x003 /* the bars can grow in both directions
				 Promilles allowed: -1000 to 1000
				 The zero-point is in the center */
#define BAR_PATTERN_FILLED	0x000 /* default */
#define BAR_PATTERN_OPEN	0x010
#define BAR_PATTERN_STRIPED	0x020
#define BAR_SEAMLESS		0x040
#define BAR_WITH_PERCENTAGE	0x100

/* Cursor types */
#define CURSOR_OFF 0
#define CURSOR_DEFAULT_ON 1
#define CURSOR_BLOCK 4
#define CURSOR_UNDER 5

/* Type of characters currently stored in CGRAM. */
typedef enum {
	standard,		/* one char is used for heartbeat */
	vbar,			/* vertical bars */
	hbar,			/* horizontal bars */
	icons,			/* standard icons */
	custom,			/* custom settings */
	bignum,			/* big numbers */
} CGmode;

/* What does the shared module handle look like on the current platform? */
#define MODULE_HANDLE void*

/* And how do we define the exported functions */
#define MODULE_EXPORT

typedef struct lcd_logical_driver {

	/* For explanation of variables and functions see docs/API-v0.5.txt */

	/******** Variables in the driver module ********/
	/* The driver loader will look for symbols with these names ! */

	char **api_version;
	int *stay_in_foreground;	/* Does this driver require to be in foreground ?   */
	int *supports_multiple;		/* Does this driver support multiple instances ?    */
	char **symbol_prefix;		/* What should alternatively be prepended to the function names ? */


	/******** Functions in the driver module ********/
	/* The driver loader will look for symbols with these names ! */

	/* mandatory functions (necessary for all drivers) */
	int (*init)		(struct lcd_logical_driver *drvthis);
	void (*close)		(struct lcd_logical_driver *drvthis);

	/* essential output functions (necessary for output drivers) */
	int (*width)		(struct lcd_logical_driver *drvthis);
	int (*height)		(struct lcd_logical_driver *drvthis);
	void (*clear)		(struct lcd_logical_driver *drvthis);
	void (*flush)		(struct lcd_logical_driver *drvthis);
	void (*string)		(struct lcd_logical_driver *drvthis, int x, int y, const char *str);
	void (*chr)		(struct lcd_logical_driver *drvthis, int x, int y, char c);

	/* essential input functions (necessary for all input drivers) */
	const char *(*get_key)	(struct lcd_logical_driver *drvthis);

	/* extended output functions (optional; core provides alternatives) */
	void (*vbar)		(struct lcd_logical_driver *drvthis, int x, int y, int len, int promille, int pattern);
	void (*hbar)		(struct lcd_logical_driver *drvthis, int x, int y, int len, int promille, int pattern);
	void (*num)		(struct lcd_logical_driver *drvthis, int x, int num);
	void (*heartbeat)	(struct lcd_logical_driver *drvthis, int state);
	int (*icon)		(struct lcd_logical_driver *drvthis, int x, int y, int icon);
	void (*cursor)		(struct lcd_logical_driver *drvthis, int x, int y, int type);

	/* user-defined character functions, are those still supported ? */
	void (*set_char)	(struct lcd_logical_driver *drvthis, int n, unsigned char *dat);
	int (*get_free_chars)	(struct lcd_logical_driver *drvthis);
	int (*cellwidth)	(struct lcd_logical_driver *drvthis);
	int (*cellheight)	(struct lcd_logical_driver *drvthis);

	/* Hardware functions */
	int (*get_contrast)	(struct lcd_logical_driver *drvthis);
	void (*set_contrast)	(struct lcd_logical_driver *drvthis, int promille);
	int (*get_brightness)	(struct lcd_logical_driver *drvthis, int state);
	void (*set_brightness)	(struct lcd_logical_driver *drvthis, int state, int promille);
	void (*backlight)	(struct lcd_logical_driver *drvthis, int on);
	void (*output)		(struct lcd_logical_driver *drvthis, int state);

	/* informational functions */
	const char * (*get_info) (struct lcd_logical_driver *drvthis);


	/******** Variables in server core available for drivers ********/

	char *name;		/* Name of this driver */
	char *filename;		/* Filename of the shared module */

	MODULE_HANDLE module_handle;	/* The handle of the loaded shared module
					   Is platform specific */

	void *private_data;	/* Filled by server by calling store_private_ptr()
				   Driver should cast this to it's own
				   private structure pointer */


	/******** Functions in server core available for drivers ********/

	int (*store_private_ptr) (struct lcd_logical_driver * driver, void * private_data);
	/* Store the driver's private data */

	/* Configfile functions */
	/* See configfile.h for descriptions and usage. */

	short (*config_get_bool)	(const char *sectionname, const char *keyname, int skip, short default_value);
	long int (*config_get_int)	(const char *sectionname, const char *keyname, int skip, long int default_value);
	double (*config_get_float)	(const char *sectionname, const char *keyname, int skip, double default_value);
	const char *( *config_get_string)(const char *sectionname, const char *keyname, int skip, const char *default_value);
	int (*config_has_section)	(const char *sectionname);
	int (*config_has_key)		(const char *sectionname, const char *keyname);

	/* Display properties functions (for drivers that adapt to other loaded drivers) */
	int (*request_display_width) ();
	int (*request_display_height) ();

} Driver;

#endif