158 lines
4.8 KiB
Plaintext
158 lines
4.8 KiB
Plaintext
This document describes the driver API of v0.4 of LCDproc.
|
|
|
|
The API consists of several functions to tell the driver that
|
|
certains actions should be performed, and some data. I consider
|
|
the data part of the API, because this data is transfered
|
|
between core and driver.
|
|
|
|
OVERVIEW OF OPERATION
|
|
|
|
The API is best descibed by starting with the struct lcd_logical_driver
|
|
which is defined in server/drivers/lcd.h.
|
|
|
|
The various variables and functions in this struct are filled by the server
|
|
with default values and functions. It is then passed to the driver while
|
|
calling the init function of the driver. The driver can decide to change
|
|
values and to override functions.
|
|
|
|
typedef struct lcd_logical_driver {
|
|
// Size in cells of the LCD
|
|
int wid, hgt;
|
|
// Size of each LCD cell, in pixels
|
|
int cellwid, cellhgt;
|
|
// Frame buffer...
|
|
char *framebuf;
|
|
|
|
// Functions which might be the same for all drivers...
|
|
void (*clear) ();
|
|
void (*string) (int x, int y, char lcd[]);
|
|
|
|
void (*chr) (int x, int y, char c);
|
|
void (*vbar) (int x, int len);
|
|
void (*hbar) (int x, int y, int len);
|
|
void (*init_num) ();
|
|
void (*num) (int x, int num);
|
|
|
|
// Functions which should probably be implemented in each driver...
|
|
int (*init) (struct lcd_logical_driver * driver, char *args);
|
|
void (*close) ();
|
|
void (*flush) ();
|
|
void (*flush_box) (int lft, int top, int rgt, int bot);
|
|
int (*contrast) (int contrast);
|
|
void (*backlight) (int on);
|
|
void (*output) (int on);
|
|
void (*set_char) (int n, char *dat);
|
|
void (*icon) (int which, char dest);
|
|
void (*init_vbar) ();
|
|
void (*init_hbar) ();
|
|
void (*draw_frame) ();
|
|
|
|
// Returns 0 for "no key pressed", or (A-Z).
|
|
char (*getkey) ();
|
|
|
|
// more?
|
|
|
|
} lcd_logical_driver;
|
|
|
|
The various parts are meant for the following:
|
|
|
|
1. Several variables
|
|
These vars are meant to tell the server how many characters wide and high the
|
|
LCD is, and what size the definable characters are.
|
|
|
|
2. Framebuf
|
|
The framebuffer can be written to by server and client in the 0.4 version.
|
|
Therefor the framebuffer must always be of the size wid*hgt. It holds the
|
|
display contents, line after line.
|
|
|
|
3. Functions which might be the same for all drivers
|
|
These functions are usually implemented by server's internal functions that
|
|
perform standard operations. Placing a char in the framebuffer etc. are
|
|
all equal in all drivers and therefor are implemented in the server.
|
|
This behaviour probably changes in v0.5.
|
|
|
|
4. Functions which should probably be implemented in each driver
|
|
These functions are probably different for all drivers.
|
|
|
|
|
|
FUNCTIONS IN DETAIL
|
|
|
|
void (*clear) ();
|
|
// Clears the framebuffer
|
|
|
|
void (*string) (int x, int y, char lcd[]);
|
|
// Places a string in the framebuffer
|
|
// All coordinates are 1-based, (1,1) is top left.
|
|
|
|
void (*chr) (int x, int y, char c);
|
|
// Places a char in the framebuffer
|
|
|
|
void (*vbar) (int x, int len);
|
|
// Draws a vertical bar at horizontal position x and with length len.
|
|
// init_vbar will be called once before this functions.
|
|
|
|
void (*hbar) (int x, int y, int len);
|
|
// Draws a horizontal bar at position x,y and with length len.
|
|
// init_hbar will be called once before this functions.
|
|
|
|
void (*init_num) ();
|
|
// Initializes the big number displaying. A big number should have a width
|
|
// of 4 characters, and a spacing of 1 character.
|
|
|
|
void (*num) (int x, int num);
|
|
// Displays a big number at position x.
|
|
|
|
int (*init) (struct lcd_logical_driver * driver, char *args);
|
|
// The init function
|
|
// Starts up the LCD and initializes the struct with correct values and
|
|
// correct function pointers.
|
|
|
|
void (*close) ();
|
|
// Shuts down the connection with the LCD.
|
|
|
|
void (*flush) ();
|
|
// Flushes the framebuffer to the LCD.
|
|
|
|
void (*flush_box) (int lft, int top, int rgt, int bot);
|
|
// Flushes only a part of the framebuffer to the LCD.
|
|
// Not called by the server currently.
|
|
|
|
int (*contrast) (int contrast);
|
|
// Sets the contrast to the given value.
|
|
// Many displays do not support software setting of contrast.
|
|
|
|
void (*backlight) (int on);
|
|
// Sets the backlight to brightness 'on'.
|
|
// Often hardware can only support on and off, in that case any value
|
|
// of on>0 will switch the backlight on.
|
|
|
|
void (*output) (int on);
|
|
// Sets the output value. Some displays/wirings have a general purpose
|
|
// output, which can be controlled by calling this function. See the
|
|
// 'output' command in the 'widget language'.
|
|
|
|
void (*set_char) (int n, char *dat);
|
|
// Define a character
|
|
|
|
void (*icon) (int which, char dest);
|
|
// Define a character to be a standard icon. Is used for the heartbeat.
|
|
|
|
void (*init_vbar) ();
|
|
// Initializes the LCD to display vertical bars
|
|
|
|
void (*init_hbar) ();
|
|
// Initializes the LCD to display horizontal bars
|
|
|
|
void (*draw_frame) ();
|
|
// Unclear function.
|
|
// Not called by the server currently.
|
|
|
|
char (*getkey) ();
|
|
// Checks if a key has been pressed on the device.
|
|
// Returns 0 for "no key pressed", or a character for the key.
|
|
// These characters do not always match the keypad-layout.
|
|
|
|
|
|
First version, Joris Robijn, 20011016
|
|
|