diff --git a/server/drivers/pylcd.c b/server/drivers/pylcd.c index 3b96ddd..d24bc66 100644 --- a/server/drivers/pylcd.c +++ b/server/drivers/pylcd.c @@ -4,7 +4,8 @@ This is the LCDproc driver for the "pylcd" device from Pyramid. Copyright (C) 2005 Silvan Marco Fin - + Copyright (C) 2006 coresystems GmbH + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or @@ -21,6 +22,19 @@ */ +/* + * This driver controls the programmable LC-Display from + * Pyramid Computer GmbH. For more information see + * http://www.pyramid.de/e/produkte/server/pyramid-lcd.php + * + * Contact Thomas Riewe for further + * information on the LCD. + * + * Changes: + * 2006-02-20 Stefan Reinauer + * - add support for onboard LEDs via "output" command + */ + #include #include #include @@ -195,6 +209,22 @@ int initTTY(int FD) return 0; } +/* This function sets all LEDs according to the private data structure */ + +int set_leds(pylcd_private_data *status) +{ + int i; + char tele[3]="L00"; + + for (i=0; i<7; i++) { + tele[1]=i+'1'; + tele[2]=status->led[i]?'1':'0'; + send_tele(status, tele); + } + + return 0; +} + /* Driver functions according to current API-Version */ /* Basic functions */ @@ -239,7 +269,6 @@ MODULE_EXPORT int pylcd_init (Driver *drvthis, char *args) status->last_key_time = timestamp(status); status->last_buf_time = timestamp(status); - /* Acknowledge all telegramms, the device may yet be sending. (Reset doesn't clear telegramms, darn protocol ... ) */ @@ -265,6 +294,10 @@ MODULE_EXPORT int pylcd_init (Driver *drvthis, char *args) strcpy(status->framebuffer, "D "); status->FB_modified=1; + for (i=0; i<7; i++) + status->led[i]=0; + set_leds(status); + return 0; }; @@ -382,9 +415,19 @@ MODULE_EXPORT void mydriver_set_contrast (Driver *drvthis, int promille){}; MODULE_EXPORT int mydriver_get_brightness (Driver *drvthis, int state){return 0;}; MODULE_EXPORT void mydriver_set_brightness (Driver *drvthis, int state, int promille){}; MODULE_EXPORT void mydriver_backlight (Driver *drvthis, int on) -MODULE_EXPORT void mydriver_output (Driver *drvthis, int state){}; */ +MODULE_EXPORT void pylcd_output (Driver *drvthis, int state) +{ + pylcd_private_data *status = (pylcd_private_data *) drvthis->private_data; + int i; + + for (i = 0; i < 7; i++) + status->led[i] = state & (1 << i); + + set_leds(status); +}; + /* Key functions */ MODULE_EXPORT char *pylcd_get_key (Driver *drvthis) diff --git a/server/drivers/pylcd.h b/server/drivers/pylcd.h index 4b70da4..9fe0523 100644 --- a/server/drivers/pylcd.h +++ b/server/drivers/pylcd.h @@ -57,6 +57,7 @@ typedef struct int C_x; int C_y; int C_state; + char led[7]; } pylcd_private_data; #endif