diff --git a/docs/lcdproc-user/drivers/picolcd.docbook b/docs/lcdproc-user/drivers/picolcd.docbook
index 03d296f..eddec8b 100644
--- a/docs/lcdproc-user/drivers/picolcd.docbook
+++ b/docs/lcdproc-user/drivers/picolcd.docbook
@@ -1,139 +1,231 @@
- The Mini-Box USB LCD (picoLCD 20x2) Driver (picolcd)
+The Mini-Box USB LCD (picoLCD 20x2) Driver (picolcd)
+
+
+ This section covers the installation and use of the Mini-Box USB LCD (picoLCD
+ 20x2) display.
+
+
+ The picoLCD page indicates that the device can be connected via I2C or USART.
+ This lcdproc driver, however, is limited to the USB connected model.
+
+
+
+ Setting up the picoLCD
- This section covers the installation and use of the Mini-Box USB LCD (picoLCD
- 20x2) display.
+ The picoLCD device as used by this driver is USB connected and may be purchased
+ with an internal USB header connector (5-pin to 5-pin) or an external cable
+ (Type-A to 5-pin). See: .
+ It may also come pre-installed on systems like the Mini-Box M300:
+ .
- The picoLCD page indicates that the device can be connected via I2C or USART.
- This lcdproc driver, however, is limited to the USB connected model.
+ Using the USB LCD with this driver requires the usblcd library from Mini-box.com
+ (avaiable at ).i
+ The usblcd library
+ requires libusb and libhcd. Your distribution may or may not already provide
+ these libraries. The only kernel driver required is the USB host controller
+ driver (uhci_hcd on the M300) required to fire up the usb bus to which the LCD is
+ attached.
-
- Setting up the picoLCD
+
+ Lastly, the usbfs file system must be mounted on /proc/bus/usb.
+ mount -t usbfs usbfs /proc/bus/usb
+
+
+ Once connected and with libusblcd, libusb and libhid installed, testing the USB LCD
+ can be done with the usblcd program that comes with the usblcd
+ library.
+ You can also change the USB LCD's initial display (what it shows when you
+ initialize the device) by using the usblcd binary's
+ splash command.
+
+
+ To use the picolcd with lcdproc, add picolcd to the lcdproc configure drivers option
+ (or use all) and then start LCDd with the "-d picolcd" option. The driver has
+ sane default options and the options that are user configurable are limited to mostly
+ simple items, like contrast and which keys to lights up.
+
+
-
- The picoLCD device as used by this driver is USB connected and may be purchased
- with an internal USB header connector (5-pin to 5-pin) or an external cable
- (Type-A to 5-pin). See: http://www.mini-box.com/picoLCD-20x2-OEM. It may also
- come pre-installed on systems like the Mini-Box M300:
- http://www.mini-box.com/Mini-Box-M300-LCD.
-
-
- Using the USB LCD with this driver requires the usblcd library from Mini-box.com
- (avaiable at http://www.mini-box.com/picoLCD-20x2-OEM). The usblcd library
- requires libusb and libhcd. Your distribution may or may not already provide
- these libraries. The only kernel driver required is the USB host controller
- driver (uhci_hcd on the M300) required to fire up the usb bus to which the LCD is
- attached.
-
-
- Lastly, the usbfs file system must be mounted on /proc/bus/usb.
- mount -t usbfs usbfs /proc/bus/usb
-
-
- Once connected and with libusblcd, libusb and libhid installed, testing the USB LCD
- can be done with the "usblcd" program that comes with the usblcd library. You can
- also change the USB LCD's initial display (what it shows when you initialize the
- device) by using the usblcd binary's "splash" command.
-
-
- To use the picolcd with lcdproc, add picolcd to the lcdproc configure drivers option
- (or use all) and then start LCDd with the "-d picolcd" option. The driver has
- sane default options and the options that are user configurable are limited to mostly
- simple items, like contrast and which keys to lights up.
-
-
-
-
- Contrast: 0-1000. 0 is visible, and 1000 is not on my M300. Default is 0.
-
-
- Keylights: 0/1. 0 turns off the key LEDs and 1 turns them on. Default is 1.
-
-
-
-
- Key0Light: if Keylights is set to 1, you can disable the directional pad LED by
- setting this value to 0. Default is 1.
-
-
-
-
- Key1Light: if Keylights is set to 1, you can disable the F1 LED by setting this value
- to 0. Default is 1.
-
-
-
-
- Key2Light: if Keylights is set to 1, you can disable the F2 LED by setting this value
- to 0. Default is 1.
-
-
-
-
- Key3Light: if Keylights is set to 1, you can disable the F3 LED by setting this value
- to 0. Default is 1.
-
-
-
-
- Key4Light: if Keylights is set to 1, you can disable the F4 LED by setting this value
- to 0. Default is 1.
-
-
-
-
- Key5Light: if Keylights is set to 1, you can disable the F5 LED by setting this value
- to 0. Default is 1.
-
-
-
-
- KeyTimeout: (Advanced) This value controls how long LCDd waits for a key press when
- get_key is called. The value represents microseconds and the default is 500 or .5
- seconds. Lowering this value will make LCDd more responsive but also causes LCDd to use
- more CPU time and, as the timeout grows shorter, key presses become harder to detect.
- Larger values make key presses more reliable if somewhat slow to take effect.
-
-
-
- picolcd driver status
+
+Configuration in LCDd.conf
+
+
+[picolcd]
+
+
+
+
+ Contrast=
+ CONTRAST
+
+
+ Contrast: 0-1000. 0 is visible, and 1000 is not on my M300. Default is 0.
+
+
+
+
+ KeyLights=
+
+
+ yes
+ no
+
+
+
+
+ Allow key LEDs to be turned on or off. Default is yes.
+
+
+
+
+ Key0Light=
+
+
+ yes
+ no
+
+
+
+
+ If Keylights is set, you can disable the directional pad LED by
+ setting this value to no. Default is yes.
+
+
+
+
+ Key1Light=
+
+
+ yes
+ no
+
+
+
+
+ If Keylights is set, you can disable the F1 LED by setting this value
+ to no. Default is yes.
+
+
+
+
+ Key2Light=
+
+
+ yes
+ no
+
+
+
+
+ If Keylights is set, you can disable the F2 LED by setting this value
+ to no. Default is yes.
+
+
+
+
+ Key3Light=
+
+
+ yes
+ no
+
+
+
+
+ If Keylights is set, you can disable the F3 LED by setting this value
+ to no. Default is yes.
+
+
+
+
+ Key4Light=
+
+
+ yes
+ no
+
+
+
+
+ If Keylights is set, you can disable the F4 LED by setting this value
+ to no. Default is yes.
+
+
+
+
+ Key5Light=
+
+
+ yes
+ no
+
+
+
+
+ If Keylights is set, you can disable the F5 LED by setting this value
+ to no. Default is yes.
+
+
+
+
+ KeyTimeout=
+ DURATION
+
+
+ (Advanced) This value controls how long LCDd waits for a key press when
+ get_key() is called. The value represents microseconds and the default is 500
+ or .5 seconds. Lowering this value will make LCDd more responsive but also causes LCDd to use
+ more CPU time and, as the timeout grows shorter, key presses become harder to detect.
+ Larger values make key presses more reliable if somewhat slow to take effect.
+
+
+
+
+
+
+
+
+ picolcd driver status
+
+
+ The lcdproc picolcd driver relies upon Mini-Box's usblcd library to setup the USB/HID
+ interface. Unfortunately the usblcd library is very thin and tends to put function
+ results on stdout/stderr instead of in return values. They (Mini-Box) really had
+ scripting interfaces in mind.
+
+
+ The primary example of this is that I had to write a replacement (get_key_events) for
+ usblcd's read_events so that I could get the key presses back to the calling function
+ instead of on stdout. usblcd also has a large number of function shells for which no
+ code exists yet. I am not an expert on HID and USB coding, but if and as time permits
+ and hardware is available I will try and improve this drivers access to the hardware in
+ order to get back data (get_contrast for example) and to potentially drive multiple
+ pcioLCDs at once (or pick the one we want out of many).
+
+
+ To sum up, this driver right now stabs and hopes since response data is lacking.
+
+
+ The hardware also reports key-up events. Normally this would be of no issue (they are
+ usually a 0 or 'no key') except that when keys are used in combonation, the key-up
+ event may actually come back as multiple events depending on how the user released the
+ keys. If the key-up event for a multiple key press comes back as two events, the first
+ up event will actually look like a new key press. The algorithm in get_key tries to
+ deal with this in a sane way and toss out all key-up events for now. The hardware is
+ touchy and both combo key-down and key-up actions may be reported as mutiple events if
+ the user is more than a tenth of a second (maybe less?) off in motions.
+
+
+
+
+ Copyright
+
+ The lcdproc picolcd driver was written by Gatewood Green (woody@nitrosecurity.com)
+ or (woody@linif.org) and paid for by NitroSecurity, Inc (nitrosecurity.com).
+
+
-
- The lcdproc picolcd driver relies upon Mini-Box's usblcd library to setup the USB/HID
- interface. Unfortunately the usblcd library is very thin and tends to put function
- results on stdout/stderr instead of in return values. They (Mini-Box) really had
- scripting interfaces in mind.
-
-
- The primary example of this is that I had to write a replacement (get_key_events) for
- usblcd's read_events so that I could get the key presses back to the calling function
- instead of on stdout. usblcd also has a large number of function shells for which no
- code exists yet. I am not an expert on HID and USB coding, but if and as time permits
- and hardware is available I will try and improve this drivers access to the hardware in
- order to get back data (get_contrast for example) and to potentially drive multiple
- pcioLCDs at once (or pick the one we want out of many).
-
-
- To sum up, this driver right now stabs and hopes since response data is lacking.
-
-
- The hardware also reports key-up events. Normally this would be of no issue (they are
- usually a 0 or 'no key') except that when keys are used in combonation, the key-up
- event may actually come back as multiple events depending on how the user released the
- keys. If the key-up event for a multiple key press comes back as two events, the first
- up event will actually look like a new key press. The algorithm in get_key tries to
- deal with this in a sane way and toss out all key-up events for now. The hardware is
- touchy and both combo key-down and key-up actions may be reported as mutiple events if
- the user is more than a tenth of a second (maybe less?) off in motions.
-
-
-
- Copyright
-
- The lcdproc picolcd driver was written by Gatewood Green (woody@nitrosecurity.com)
- or (woody@linif.org) and paid for by NitroSecurity, Inc (nitrosecurity.com).
-
-
diff --git a/docs/lcdproc-user/lcdproc-user.docbook b/docs/lcdproc-user/lcdproc-user.docbook
index 70cf007..af5e917 100644
--- a/docs/lcdproc-user/lcdproc-user.docbook
+++ b/docs/lcdproc-user/lcdproc-user.docbook
@@ -39,6 +39,7 @@
+
diff --git a/server/drivers/picolcd.c b/server/drivers/picolcd.c
index 2a5656f..0a80484 100644
--- a/server/drivers/picolcd.c
+++ b/server/drivers/picolcd.c
@@ -3,6 +3,7 @@
*
* (c) 2007 NitroSecurity, Inc.
* Written by Gatewood Green or
+ * (c) 2007 Peter Marschall - adapted coding style and reporting to LCDproc
*
* License: GPL (same as usblcd and lcdPROC)
*
@@ -45,8 +46,16 @@
/* lcdPROC includes */
#include "lcd.h"
#include "picolcd.h"
+
+/* Debug mode: un-comment to turn on debugging messages in the server */
+/* #define DEBUG 1 */
+
#include "report.h"
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
/* These three includes are the Mini-box.com libusblcd (usblcd) and company. */
#include
#include
@@ -59,9 +68,6 @@
#include
#include
-/* This is a hack */
-#define API_VERSION "0.5"
-
/* 12 keys plus a 0 placeholder */
#define KEYPAD_MAX 13
#define KEYPAD_LIGHTS 6
@@ -71,8 +77,6 @@
#define DEFAULT_KEYLIGHTS 1 /* On */
#define DEFAULT_TIMEOUT 500 /* Half second */
-/* Set this to 1 and get lots of cruft on stderr when using "LCDd -f 1 -d picolcd" */
-#define DEBUG_PICO 0
/* PrivateData struct */
typedef struct pd {
@@ -107,8 +111,8 @@ static char * keymap[KEYPAD_MAX] = {
};
/* Private function definitions */
-void get_key_event ( usblcd_operations *self, lcd_packet *packet, int timeout );
-void set_key_lights ( usblcd_operations *self, int keys[], int state );
+void get_key_event (usblcd_operations *self, lcd_packet *packet, int timeout);
+void set_key_lights (usblcd_operations *self, int keys[], int state);
/* lcd_logical_driver Variables */
MODULE_EXPORT char *api_version = API_VERSION;
@@ -117,193 +121,180 @@ MODULE_EXPORT int supports_multiple = 1;
MODULE_EXPORT char *symbol_prefix = "picoLCD_";
/* lcd_logical_driver Manditory functions */
-MODULE_EXPORT int picoLCD_init( Driver *drvthis ) {
+MODULE_EXPORT int picoLCD_init(Driver *drvthis) {
PrivateData *pd;
int x;
- pd = ( PrivateData * ) malloc( sizeof( PrivateData ) );
+ pd = (PrivateData *) malloc(sizeof(PrivateData));
- if ( ! pd )
+ if (! pd)
return -1;
- if ( drvthis->store_private_ptr( drvthis, pd ) )
+ if (drvthis->store_private_ptr(drvthis, pd))
return -1;
pd->lcd = new_usblcd_operations();
- pd->lcd->init( pd->lcd );
+ pd->lcd->init(pd->lcd);
pd->width = 20; /* hard coded (mfg spec) */
pd->height = 2; /* hard coded (mfg spec) */
pd->info = "picoLCD: Supports the LCD as installed on the M300 (http://www.mini-box.com/Mini-Box-M300-LCD) ";
- for ( x = 0; x < KEYPAD_LIGHTS; x++ )
+ for (x = 0; x < KEYPAD_LIGHTS; x++)
pd->key_light[x] = 1; /* individual lights on */
- pd->contrast = drvthis->config_get_int( drvthis->name, "Contrast", 0, DEFAULT_CONTRAST );
- pd->backlight = drvthis->config_get_bool( drvthis->name, "BackLight", 0, DEFAULT_BACKLIGHT );
- pd->keylights = drvthis->config_get_bool( drvthis->name, "KeyLights", 0, DEFAULT_KEYLIGHTS ); /* key lights with LCD Backlight? */
- pd->key_timeout = drvthis->config_get_int( drvthis->name, "KeyTimeout", 0, DEFAULT_TIMEOUT );
+ pd->contrast = drvthis->config_get_int( drvthis->name, "Contrast", 0, DEFAULT_CONTRAST );
+ pd->backlight = drvthis->config_get_bool(drvthis->name, "BackLight", 0, DEFAULT_BACKLIGHT);
+ pd->keylights = drvthis->config_get_bool(drvthis->name, "KeyLights", 0, DEFAULT_KEYLIGHTS); /* key lights with LCD Backlight? */
+ pd->key_timeout = drvthis->config_get_int( drvthis->name, "KeyTimeout", 0, DEFAULT_TIMEOUT );
/* These allow individual lights to be disabled */
- pd->key_light[0] = drvthis->config_get_bool( drvthis->name, "Key0Light", 0, 1 ); /* Directional PAD */
- pd->key_light[1] = drvthis->config_get_bool( drvthis->name, "Key1Light", 0, 1 ); /* F1 */
- pd->key_light[2] = drvthis->config_get_bool( drvthis->name, "Key2Light", 0, 1 ); /* F2 */
- pd->key_light[3] = drvthis->config_get_bool( drvthis->name, "Key3Light", 0, 1 ); /* F3 */
- pd->key_light[4] = drvthis->config_get_bool( drvthis->name, "Key4Light", 0, 1 ); /* F4 */
- pd->key_light[5] = drvthis->config_get_bool( drvthis->name, "Key5Light", 0, 1 ); /* F5 */
+ pd->key_light[0] = drvthis->config_get_bool(drvthis->name, "Key0Light", 0, 1); /* Directional PAD */
+ pd->key_light[1] = drvthis->config_get_bool(drvthis->name, "Key1Light", 0, 1); /* F1 */
+ pd->key_light[2] = drvthis->config_get_bool(drvthis->name, "Key2Light", 0, 1); /* F2 */
+ pd->key_light[3] = drvthis->config_get_bool(drvthis->name, "Key3Light", 0, 1); /* F3 */
+ pd->key_light[4] = drvthis->config_get_bool(drvthis->name, "Key4Light", 0, 1); /* F4 */
+ pd->key_light[5] = drvthis->config_get_bool(drvthis->name, "Key5Light", 0, 1); /* F5 */
- for ( x = 0; x < KEYPAD_MAX; x++ )
+ for (x = 0; x < KEYPAD_MAX; x++)
pd->key_matrix[x] = keymap[x];
- pd->framebuf = ( unsigned char * ) malloc( pd->width * pd->height + 1 );
- if ( pd->framebuf == NULL ) {
- report( RPT_ERR, "%s: unable to create framebuf.\n", __FUNCTION__ );
+ pd->framebuf = (unsigned char *) malloc(pd->width * pd->height + 1);
+ if (pd->framebuf == NULL) {
+ report(RPT_ERR, "%s: unable to create framebuf.\n", __FUNCTION__);
return -1;
}
- memset( pd->framebuf, ' ', pd->width * pd->height );
+ memset(pd->framebuf, ' ', pd->width * pd->height);
pd->framebuf[pd->width * pd->height] = 0;
- pd->lstframe = ( unsigned char * ) malloc( pd->width * pd->height + 1 );
- if ( pd->lstframe == NULL ) {
- report( RPT_ERR, "%s: unable to create lstframe.\n", __FUNCTION__ );
+ pd->lstframe = (unsigned char *) malloc(pd->width * pd->height + 1);
+ if (pd->lstframe == NULL) {
+ report(RPT_ERR, "%s: unable to create lstframe.\n", __FUNCTION__);
return -1;
}
- memset( pd->lstframe, ' ', pd->width * pd->height );
+ memset(pd->lstframe, ' ', pd->width * pd->height);
pd->lstframe[pd->width * pd->height] = 0;
- if ( pd->backlight )
- picoLCD_backlight( drvthis, 1 );
- if ( ! pd->keylights )
- set_key_lights( pd->lcd, pd->key_light, 0 );
+ if (pd->backlight)
+ picoLCD_backlight(drvthis, 1);
+ if (! pd->keylights)
+ set_key_lights(pd->lcd, pd->key_light, 0);
else
- picoLCD_backlight( drvthis, 0 );
+ picoLCD_backlight(drvthis, 0);
- picoLCD_set_contrast( drvthis, pd->contrast );
+ picoLCD_set_contrast(drvthis, pd->contrast);
- report( RPT_INFO, "picolcd: init complete\n", __FUNCTION__ );
-
- if ( DEBUG_PICO )
- fprintf( stderr, "picolcd: init complete\n" );
+ report(RPT_INFO, "picolcd: init complete\n", __FUNCTION__);
return 0;
}
-MODULE_EXPORT void picoLCD_close( Driver *drvthis ) {
+MODULE_EXPORT void picoLCD_close(Driver *drvthis) {
PrivateData *pd = drvthis->private_data;
- pd->lcd->close( pd->lcd ); /* This actually does not do anything in usblcd (yet?) */
+ pd->lcd->close(pd->lcd); /* This actually does not do anything in usblcd (yet?) */
- if ( DEBUG_PICO )
- fprintf( stderr, "picolcd: close complete\n" );
+ debug(RPT_DEBUG, "picolcd: close complete\n");
}
/* lcd_logical_driver Essential output functions */
-MODULE_EXPORT int picoLCD_width( Driver *drvthis ) {
+MODULE_EXPORT int picoLCD_width(Driver *drvthis) {
PrivateData *pd = drvthis->private_data;
return pd->width;
}
-MODULE_EXPORT int picoLCD_height( Driver *drvthis ) {
+MODULE_EXPORT int picoLCD_height(Driver *drvthis) {
PrivateData *pd = drvthis->private_data;
return pd->height;
}
-MODULE_EXPORT void picoLCD_clear( Driver *drvthis ) {
+MODULE_EXPORT void picoLCD_clear(Driver *drvthis) {
PrivateData *pd = drvthis->private_data;
- memset( pd->framebuf, ' ', pd->width * pd->height );
+ memset(pd->framebuf, ' ', pd->width * pd->height);
- if ( DEBUG_PICO )
- fprintf( stderr, "picolcd: clear complete\n" );
+ debug(RPT_DEBUG, "picolcd: clear complete\n");
}
-MODULE_EXPORT void picoLCD_flush( Driver *drvthis ) {
+MODULE_EXPORT void picoLCD_flush(Driver *drvthis) {
PrivateData *pd = drvthis->private_data;
unsigned char *fb = pd->framebuf;
unsigned char *lf = pd->lstframe;
static char text[48];
int i, line, offset;
- if ( DEBUG_PICO )
- fprintf( stderr, "picolcd: flush started\n" );
+ debug(RPT_DEBUG, "picolcd: flush started\n");
- for ( line = 0; line < pd->height; line++ ) {
- memset( text, 0, 48 );
+ for (line = 0; line < pd->height; line++) {
+ memset(text, 0, 48);
offset = line * pd->width;
fb = pd->framebuf + offset;
lf = pd->lstframe + offset;
- for ( i = 0; i < pd->width; i++ ) {
- if ( *fb++ != *lf++ ) {
- strncpy( text, pd->framebuf + offset, pd->width );
- pd->lcd->settext( pd->lcd, line, 0, text );
- memcpy( pd->lstframe + offset, pd->framebuf + offset, pd->width );
+ for (i = 0; i < pd->width; i++) {
+ if (*fb++ != *lf++) {
+ strncpy(text, pd->framebuf + offset, pd->width);
+ pd->lcd->settext(pd->lcd, line, 0, text);
+ memcpy(pd->lstframe + offset, pd->framebuf + offset, pd->width);
- if ( DEBUG_PICO )
- fprintf( stderr, "picolcd: flush wrote line %d (%s)\n", line + 1, text );
+ debug(RPT_DEBUG, "picolcd: flush wrote line %d (%s)\n", line + 1, text);
break;
}
}
}
- if ( DEBUG_PICO )
- fprintf( stderr, "picolcd: flush complete\n\t(%s)\n\t(%s)\n", pd->framebuf, pd->lstframe );
+ debug(RPT_DEBUG, "picolcd: flush complete\n\t(%s)\n\t(%s)\n", pd->framebuf, pd->lstframe);
}
-MODULE_EXPORT void picoLCD_string( Driver *drvthis, int x, int y, char *str ) {
+MODULE_EXPORT void picoLCD_string(Driver *drvthis, int x, int y, char *str) {
PrivateData *pd = drvthis->private_data;
char *dest;
int len;
- if ( DEBUG_PICO )
- fprintf( stderr, "picolcd: string start (%s)\n", str );
+ debug(RPT_DEBUG, "picolcd: string start (%s)\n", str);
- if ( y < 1 || y > pd->height )
+ if (y < 1 || y > pd->height)
return;
- if ( x < 1 || x > pd->width )
+ if (x < 1 || x > pd->width)
return;
- len = strlen( str );
- if ( len + x > pd->width ) {
- if ( DEBUG_PICO )
- fprintf( stderr, "picolcd: string overlength (>%d). Start: %d Length: %d (%s)\n", pd->width, x, len ,str );
+ len = strlen(str);
+ if (len + x > pd->width) {
+ debug(RPT_DEBUG, "picolcd: string overlength (>%d). Start: %d Length: %d (%s)\n", pd->width, x, len ,str);
len = pd->width - x; /* Copy what we can */
}
x--; y--; /* Convert 1-based to 0-based */
- dest = pd->framebuf + ( y * pd->width + x );
- memcpy( dest, str, len * sizeof(char) );
+ dest = pd->framebuf + (y * pd->width + x);
+ memcpy(dest, str, len * sizeof(char));
- if ( DEBUG_PICO )
- fprintf( stderr, "picolcd: string complete (%s)\n", str );
+ debug(RPT_DEBUG, "picolcd: string complete (%s)\n", str);
}
-MODULE_EXPORT void picoLCD_chr( Driver *drvthis, int x, int y, char chr ) {
+MODULE_EXPORT void picoLCD_chr(Driver *drvthis, int x, int y, char chr) {
PrivateData *pd = drvthis->private_data;
char *dest;
- if ( DEBUG_PICO )
- fprintf( stderr, "picolcd: chr start (%c)\n", chr );
+ debug(RPT_DEBUG, "picolcd: chr start (%c)\n", chr);
- if ( y < 1 || y > pd->height )
+ if (y < 1 || y > pd->height)
return;
- if ( x < 1 || x > pd->width )
+ if (x < 1 || x > pd->width)
return;
x--; y--; /* Convert 1-based to 0-based */
- dest = pd->framebuf + ( y * pd->width + x );
- memcpy( dest, &chr, sizeof(char) );
+ dest = pd->framebuf + (y * pd->width + x);
+ memcpy(dest, &chr, sizeof(char));
- if ( DEBUG_PICO )
- fprintf( stderr, "picolcd: chr complete (%c)\n", chr );
+ debug(RPT_DEBUG, "picolcd: chr complete (%c)\n", chr);
}
/* lcd_logical_driver Essential input functions */
-MODULE_EXPORT char *picoLCD_get_key( Driver *drvthis ) {
+MODULE_EXPORT char *picoLCD_get_key(Driver *drvthis) {
PrivateData *pd = drvthis->private_data;
lcd_packet *keydata;
char *keystr;
@@ -311,51 +302,44 @@ MODULE_EXPORT char *picoLCD_get_key( Driver *drvthis ) {
int key_pass = 0;
int two_keys = 0;
- if ( DEBUG_PICO )
- fprintf( stderr, "picolcd: get_key start (timeout %d)\n", pd->key_timeout );
+ debug(RPT_DEBUG, "picolcd: get_key start (timeout %d)\n", pd->key_timeout);
- keydata = malloc( sizeof( lcd_packet ) );
+ keydata = malloc(sizeof(lcd_packet));
- while ( ! keys_read ) {
- get_key_event( pd->lcd, keydata, pd->key_timeout );
- if ( DEBUG_PICO )
- fprintf( stderr, "picolcd: get_key got an event\n" );
+ while (! keys_read) {
+ get_key_event(pd->lcd, keydata, pd->key_timeout);
+ debug(RPT_DEBUG, "picolcd: get_key got an event\n");
- if ( keydata->type == IN_REPORT_KEY_STATE ) {
- if ( ! keydata->data[1] && key_pass ) {
- if ( DEBUG_PICO )
- fprintf( stderr, "picolcd: get_key got all clear\n" );
+ if (keydata->type == IN_REPORT_KEY_STATE) {
+ if (! keydata->data[1] && key_pass) {
+ debug(RPT_DEBUG, "picolcd: get_key got all clear\n");
/* Got a <0, 0> key-up event after reading a valid key press event */
keys_read++; /* All clear */
- } else if ( ! keydata->data[2] && ! two_keys ) {
- if ( DEBUG_PICO )
- fprintf( stderr, "picolcd: get_key got one key\n" );
+ } else if (! keydata->data[2] && ! two_keys) {
+ debug(RPT_DEBUG, "picolcd: get_key got one key\n");
/* We got one key (but not after a two key event and before and all clear) */
keystr = pd->key_matrix[keydata->data[1]];
} else {
/* We got two keys */
- if ( DEBUG_PICO )
- fprintf( stderr, "picolcd: get_key got two keys\n" );
+ debug(RPT_DEBUG, "picolcd: get_key got two keys\n");
two_keys++;
- sprintf( keystr, "%s+%s", pd->key_matrix[keydata->data[1]], pd->key_matrix[keydata->data[2]] );
+ sprintf(keystr, "%s+%s", pd->key_matrix[keydata->data[1]], pd->key_matrix[keydata->data[2]]);
}
key_pass++; /* This hack allows us to deal with receiving left over <0,0> first */
} else {
- if ( DEBUG_PICO )
- fprintf( stderr, "picolcd: get_key got non-key data or timeout\n" );
+ debug(RPT_DEBUG, "picolcd: get_key got non-key data or timeout\n");
/* We got IR or otherwise bad data */
return NULL;
}
}
- free( keydata );
+ free(keydata);
- if ( DEBUG_PICO )
- fprintf( stderr, "picolcd: get_key complete (%s)\n", keystr );
+ debug(RPT_DEBUG, "picolcd: get_key complete (%s)\n", keystr);
- if ( ! strlen( keystr ) )
+ if (! strlen(keystr))
return NULL;
return keystr;
@@ -406,80 +390,80 @@ MODULE_EXPORT char *picoLCD_get_key( Driver *drvthis ) {
/* lcd_logical_driver User-defined character functions */
/* lcd_logical_driver Hardware functions */
-/*MODULE_EXPORT int picoLCD_get_contrast( Driver *drvthis ) {
+/*MODULE_EXPORT int picoLCD_get_contrast(Driver *drvthis) {
PrivateData *pd = drvthis->private_data;
}*/
-MODULE_EXPORT int picoLCD_set_contrast( Driver *drvthis, int promille ) {
+MODULE_EXPORT int picoLCD_set_contrast(Driver *drvthis, int promille) {
PrivateData *pd = drvthis->private_data;
int inv; /* The hardware seems to go dark on higher values, so we turn it around */
- if ( promille <= 1000 && promille > 0 ) {
+ if (promille <= 1000 && promille > 0) {
inv = 1000 - promille;
- pd->lcd->contrast( pd->lcd, ( int ) ( inv / 1000 * 40 ) );
+ pd->lcd->contrast(pd->lcd, (int) (inv / 1000 * 40));
return 0;
- } else if ( promille > 1000 ) {
- pd->lcd->contrast( pd->lcd, 0 );
+ } else if (promille > 1000) {
+ pd->lcd->contrast(pd->lcd, 0);
return 0;
- } else if ( promille <= 0 ) {
- pd->lcd->contrast( pd->lcd, 40 );
+ } else if (promille <= 0) {
+ pd->lcd->contrast(pd->lcd, 40);
return 0;
} else {
return -1;
}
}
-/*MODULE_EXPORT int picoLCD_get_brightness( Driver *drvthis, int state ) {
+/*MODULE_EXPORT int picoLCD_get_brightness(Driver *drvthis, int state) {
PrivateData *pd = drvthis->private_data;
}*/
-/*MODULE_EXPORT int picoLCD_set_brightness( Driver *drvthis, int state, int promille ) {
+/*MODULE_EXPORT int picoLCD_set_brightness(Driver *drvthis, int state, int promille) {
PrivateData *pd = drvthis->private_data;
}*/
-MODULE_EXPORT void picoLCD_backlight( Driver *drvthis, int state ) {
+MODULE_EXPORT void picoLCD_backlight(Driver *drvthis, int state) {
PrivateData *pd = drvthis->private_data;
- if ( state == 0 ) {
- pd->lcd->backlight( pd->lcd, state );
- set_key_lights( pd->lcd, pd->key_light, state );
+ if (state == 0) {
+ pd->lcd->backlight(pd->lcd, state);
+ set_key_lights(pd->lcd, pd->key_light, state);
return;
}
- if ( state == 1 ) {
- pd->lcd->backlight( pd->lcd, state );
- if ( pd->keylights )
- set_key_lights( pd->lcd, pd->key_light, state );
+ if (state == 1) {
+ pd->lcd->backlight(pd->lcd, state);
+ if (pd->keylights)
+ set_key_lights(pd->lcd, pd->key_light, state);
return;
}
return;
}
-/*MODULE_EXPORT int picoLCD_output( Driver *drvthis, int state ) {
+/*MODULE_EXPORT int picoLCD_output(Driver *drvthis, int state) {
PrivateData *pd = drvthis->private_data;
}*/
/* lcd_logical_driver Informational functions */
-MODULE_EXPORT char *picoLCD_get_info( Driver *drvthis ) {
+MODULE_EXPORT char *picoLCD_get_info(Driver *drvthis) {
PrivateData *pd = drvthis->private_data;
return pd->info;
}
/* Private functions */
-void get_key_event ( usblcd_operations *self, lcd_packet *packet, int timeout ) {
+void get_key_event (usblcd_operations *self, lcd_packet *packet, int timeout) {
int ret;
- memset( packet->data, 0, 255 );
+ memset(packet->data, 0, 255);
packet->type = 0;
- ret = usb_interrupt_read( self->hid->hiddev->handle, USB_ENDPOINT_IN + 1, packet->data, _USBLCD_MAX_DATA_LEN, timeout );
- if ( ret > 0 ) {
- switch ( packet->data[0] ) {
+ ret = usb_interrupt_read(self->hid->hiddev->handle, USB_ENDPOINT_IN + 1, packet->data, _USBLCD_MAX_DATA_LEN, timeout);
+ if (ret > 0) {
+ switch (packet->data[0]) {
case IN_REPORT_KEY_STATE: {
packet->type = IN_REPORT_KEY_STATE;
} break;
@@ -493,28 +477,28 @@ void get_key_event ( usblcd_operations *self, lcd_packet *packet, int timeout )
}
}
-void set_key_lights ( usblcd_operations *self, int keys[], int state ) {
- if ( state ) {
+void set_key_lights (usblcd_operations *self, int keys[], int state) {
+ if (state) {
/* Only LEDs we want on */
- if ( keys[0] )
- self->setled( self, 0, 1 );
- if ( keys[1] )
- self->setled( self, 1, 1 );
- if ( keys[2] )
- self->setled( self, 2, 1 );
- if ( keys[3] )
- self->setled( self, 3, 1 );
- if ( keys[4] )
- self->setled( self, 4, 1 );
- if ( keys[5] )
- self->setled( self, 5, 1 );
+ if (keys[0])
+ self->setled(self, 0, 1);
+ if (keys[1])
+ self->setled(self, 1, 1);
+ if (keys[2])
+ self->setled(self, 2, 1);
+ if (keys[3])
+ self->setled(self, 3, 1);
+ if (keys[4])
+ self->setled(self, 4, 1);
+ if (keys[5])
+ self->setled(self, 5, 1);
} else {
/* All LEDs off */
- self->setled( self, 0, 0 );
- self->setled( self, 1, 0 );
- self->setled( self, 2, 0 );
- self->setled( self, 3, 0 );
- self->setled( self, 4, 0 );
- self->setled( self, 5, 0 );
+ self->setled(self, 0, 0);
+ self->setled(self, 1, 0);
+ self->setled(self, 2, 0);
+ self->setled(self, 3, 0);
+ self->setled(self, 4, 0);
+ self->setled(self, 5, 0);
}
}
diff --git a/server/drivers/picolcd.h b/server/drivers/picolcd.h
index 2e91ce9..d39beaa 100644
--- a/server/drivers/picolcd.h
+++ b/server/drivers/picolcd.h
@@ -26,31 +26,31 @@ struct _lcd_packet {
unsigned int type;
};
-MODULE_EXPORT int picoLCD_init ( Driver *drvthis );
-MODULE_EXPORT void picoLCD_close ( Driver *drvthis );
-MODULE_EXPORT int picoLCD_width ( Driver *drvthis );
-MODULE_EXPORT int picoLCD_height ( Driver *drvthis );
-MODULE_EXPORT void picoLCD_clear ( Driver *drvthis );
-MODULE_EXPORT void picoLCD_flush ( Driver *drvthis );
-MODULE_EXPORT void picoLCD_string ( Driver *drvthis, int x, int y, char *str );
-MODULE_EXPORT void picoLCD_chr ( Driver *drvthis, int x, int y, char c );
+MODULE_EXPORT int picoLCD_init(Driver *drvthis);
+MODULE_EXPORT void picoLCD_close(Driver *drvthis);
+MODULE_EXPORT int picoLCD_width(Driver *drvthis);
+MODULE_EXPORT int picoLCD_height(Driver *drvthis);
+MODULE_EXPORT void picoLCD_clear(Driver *drvthis);
+MODULE_EXPORT void picoLCD_flush(Driver *drvthis);
+MODULE_EXPORT void picoLCD_string(Driver *drvthis, int x, int y, char *str);
+MODULE_EXPORT void picoLCD_chr(Driver *drvthis, int x, int y, char c);
-MODULE_EXPORT char *picoLCD_get_key ( Driver *drvthis );
+MODULE_EXPORT char *picoLCD_get_key(Driver *drvthis);
-//MODULE_EXPORT void picoLCD_vbar ( Driver *drvthis, int x, int y, int len, int promille, int options );
-//MODULE_EXPORT void picoLCD_hbar ( Driver *drvthis, int x, int y, int len, int promille, int options );
-//MODULE_EXPORT void picoLCD_num ( Driver *drvthis, int x, int y, int num );
-//MODULE_EXPORT void picoLCD_heartbeat ( Driver *drvthis, int state );
-//MODULE_EXPORT void picoLCD_icon ( Driver *drvthis, int x, int y, int icon );
-//MODULE_EXPORT void picoLCD_cursor ( Driver *drvthis, int x, int y, int type );
+//MODULE_EXPORT void picoLCD_vbar(Driver *drvthis, int x, int y, int len, int promille, int options);
+//MODULE_EXPORT void picoLCD_hbar(Driver *drvthis, int x, int y, int len, int promille, int options);
+//MODULE_EXPORT void picoLCD_num(Driver *drvthis, int x, int y, int num);
+//MODULE_EXPORT void picoLCD_heartbeat(Driver *drvthis, int state);
+//MODULE_EXPORT void picoLCD_icon(Driver *drvthis, int x, int y, int icon);
+//MODULE_EXPORT void picoLCD_cursor(Driver *drvthis, int x, int y, int type);
-//MODULE_EXPORT int picoLCD_get_contrast ( Driver *drvthis );
-MODULE_EXPORT int picoLCD_set_contrast ( Driver *drvthis, int promille );
-//MODULE_EXPORT int picoLCD_get_brightness ( Driver *drvthis, int state );
-//MODULE_EXPORT int picoLCD_set_brightness ( Driver *drvthis, int state, int promille );
-MODULE_EXPORT void picoLCD_backlight ( Driver *drvthis, int promille );
-//MODULE_EXPORT void picoLCD_output ( Driver *drvthis, int state );
+//MODULE_EXPORT int picoLCD_get_contrast(Driver *drvthis);
+MODULE_EXPORT int picoLCD_set_contrast(Driver *drvthis, int promille);
+//MODULE_EXPORT int picoLCD_get_brightness (Driver *drvthis, int state);
+//MODULE_EXPORT int picoLCD_set_brightness (Driver *drvthis, int state, int promille);
+MODULE_EXPORT void picoLCD_backlight(Driver *drvthis, int promille);
+//MODULE_EXPORT void picoLCD_output(Driver *drvthis, int state);
-MODULE_EXPORT char *picoLCD_get_info ( Driver *drvthis );
+MODULE_EXPORT char *picoLCD_get_info(Driver *drvthis);
#endif