diff --git a/LCDd.conf b/LCDd.conf
index 352ca70..3198247 100644
--- a/LCDd.conf
+++ b/LCDd.conf
@@ -622,12 +622,18 @@ Size=16x2
## LIS MCE 2005 driver ##
[lis]
-# USB device to use [default: /dev/ttyUSB0]
-Device=/dev/ttyUSB0
-
# Set the initial brightness [default: 1000; legal: 0 - 1000]
-Brightness=1000
+# 0-250 = 25%, 251-500 = 50%, 501-750 = 75%, 751-1000 = 100%
+#Brightness=1000
+# Columns by lines (default 20x2)
+#Size=20x2
+
+# USB Vendor ID (default 0x0403)
+VendorID=0x0403
+
+# USB Product ID (default 0x6001
+ProductID=0x6001
##The driver for the VFD of the Medion MD8800 PC ##
diff --git a/docs/lcdproc-user/drivers/lis.docbook b/docs/lcdproc-user/drivers/lis.docbook
index 0be0a50..ef949bf 100644
--- a/docs/lcdproc-user/drivers/lis.docbook
+++ b/docs/lcdproc-user/drivers/lis.docbook
@@ -3,13 +3,47 @@
This section talks about using LCDproc with the VLSystem L.I.S
- MCE 2005 Vacuum Flourescent Display based on the FTDI USB-to-serial
+ MCE 2005 Vacuum Flourescent Display (VFD) based on the FTDI USB-to-serial
converter, the Microchip PIC-16F716 microcontroller, and
- the NEC UPD16314 display driver that can be obtained at
- VLSys.
+ the NEC UPD16314 display driver manufactured by
+ VLSystem.
+
+Features
+
+
+This device uses a vacuum flourescent display of 20 characters by 2 lines. Each each
+character is 5 pixels wide by 8 pixels high. The device is connected by USB. The FTDI chip
+translates the USB protocol to serial expected by the VFD driver chip, an NEC UPD16314. A
+programmable interrupt controller (PIC), the PIC16F716 by Microchip, provides the glue
+between the FTDI and the NEC chips.
+
+
+
+
+
+
+Requirements
+
+
+The driver depends on libftdi, version 0.8 or higher, from
+
+http://www.intra2net.com/opensource/ftdi/.
+
+
+
+
+Compiling
+
+
+Make sure that the L.I.S files are built when you run configure. This
+can be done by specifying "--enable-drivers=all" or by
+"--enable-drivers=lis".
+
+
+
Configuration in LCDd.conf
@@ -17,30 +51,62 @@
[lis]
+
+
+ Size=
+
+ WIDTH
+ x
+ HEIGHT
+
+
+
+ Set the display size. The default 20x2 should be safe
+ for most if not all users, since the device seeems to be made only with
+ this one size.
+ But who knowns …
+
+
+
+
+ VendorID=
+
+ VENDORID
+
+
+
+ USB Vendor ID
+ [default: 0x0403].
+
+
+
+
+ ProductID=
+
+ PRODUCTID
+
+
+
+ USB Product ID
+ [default: 0x6001].
+
+
Brightness=
BRIGHTNESS
-
- Set the initial brightness [default: 1000; legal: 0 - 1000]
-
-
-
- Select the LCD size [default: 20x4]
-
+
+
+ Set the initial brightness [default: 1000;
+ legal: 0 - 1000. Values
+ between 0 and 250 give 25% brightness, 251 to 500 give 50% brightness,
+ 501 and 750, give 75% brightness, and values higher than 751 give 100%
+ brightness.
+
+
-
-
- Device=
- DEVICE
-
-
- USB device to use. Usual values are /dev/ttyUSB0, /dev/ttyUSB1, etc.
- [default: /dev/ttyUSB0].
-
-
diff --git a/server/drivers/lis.c b/server/drivers/lis.c
index bfbbadd..d96691b 100644
--- a/server/drivers/lis.c
+++ b/server/drivers/lis.c
@@ -7,8 +7,7 @@
* This driver uses the libftdi library to interface to the FTDI chip. Make
* sure kernel module ftdi_sio doesn't claim the device.
*
- * Based on the ula200 driver Copyright (C) 2006, Bernhard Walle
- * and the CrystalFontz 633 driver Copyright (C) 2002 David GLAUDE
+ * Based on: ula200 driver Copyright (C) 2006, Bernhard Walle
*
* Copyright (c) 2007, Daryl Fonseca-Holt
*
@@ -33,6 +32,16 @@
* was which line would be written at column 1.
*/
+/* CHANGES:
+ *
+ * 2007/05/22 Removed useless Device= config option.
+ * Added VendorID= and ProductID= config
+ * option parsting. Moved constants to
+ * lis.h where they belong. Added
+ * lis_cellheight() and lis_cellwidth().
+ * Completely commented out lis_test() to
+ * save memory.
+ */
#include
#include
#include
@@ -57,7 +66,7 @@
#include "lcd_lib.h"
#include "timing.h"
-void lis_test(Driver *drvthis);
+// void lis_test(Driver *drvthis);
/* Vars for the server core */
MODULE_EXPORT char *api_version = API_VERSION;
@@ -66,17 +75,6 @@ MODULE_EXPORT int supports_multiple = 1;
MODULE_EXPORT char *symbol_prefix = "lis_";
-///////////////////////////////////////////////////////////////////////////////
-// constants
-//
-#define DISPLAY_VENDOR_ID 0x0403
-#define DISPLAY_PRODUCT_ID 0x6001
-
-#define CELLWIDTH 5
-#define CELLHEIGHT 8
-
-#define DEFAULT_BRIGHTNESS 750
-
/*
* Charactar mapping for UPD16314 device by Daryl Fonseca-Holt
* taken from Mark Haemmerling's HD44780 table.
@@ -96,81 +94,49 @@ MODULE_EXPORT char *symbol_prefix = "lis_";
*/
const unsigned char UPD16314_charmap[] = {
- /* #0 */
- 0, 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 */
- 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 */
- 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, 47, 93, 94, 95,
- /* #96 */
- 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 */
- 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 */
- 160, 33, 236, 237, 164, 92, 124, 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 */
- 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, 217, 218, 219, 220, 221, 223, 224,
- /* #224 */
- 224, 225, 226, 227, 228, 229, 230, 231,
- 232, 233, 234, 235, 237, 237, 238, 239,
- 240, 241, 242, 243, 244, 245, 246, 247,
- 248, 249, 250, 251, 252, 253, 254, 3
+ /* #0 */
+ 0, 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 */
+ 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 */
+ 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, 47, 93, 94, 95,
+ /* #96 */
+ 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 */
+ 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 */
+ 160, 33, 236, 237, 164, 92, 124, 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 */
+ 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, 217, 218, 219, 220, 221, 223, 224,
+ /* #224 */
+ 224, 225, 226, 227, 228, 229, 230, 231,
+ 232, 233, 234, 235, 237, 237, 238, 239,
+ 240, 241, 242, 243, 244, 245, 246, 247,
+ 248, 249, 250, 251, 252, 253, 254, 3
};
-///////////////////////////////////////////////////////////////////////////////
-// private data types
-//
-typedef struct {
-
- // the handle for the USB FTDI library
- struct ftdi_context ftdic;
-
- // the width and the height (in number of characters) of the library
- int width, height;
-
- // The framebuffer and the framebuffer for the last contents (incr. update)
- unsigned char *framebuf;
-
- // dirty line flags
- unsigned int *line_flags;
-
- // child thread flag
- int child_flag;
-
- // parent thread flag
- int parent_flag;
-
- // display brightness 0-1000
- int brightness;
-
- // custom characters loaded
- int cc_flag;
-
-} PrivateData;
-
-
///////////////////////////////////////////////////////////////////////////////
// Write a command to the display.
//
@@ -182,18 +148,18 @@ typedef struct {
static int
lis_ftdi_write_command(Driver *drvthis, unsigned char *data, int length)
{
- PrivateData *p = (PrivateData *) drvthis->private_data;
- int err;
+ PrivateData *p = (PrivateData *) drvthis->private_data;
+ int err;
- err = ftdi_write_data(&p->ftdic, data, length);
- if (err < 0) {
- report(RPT_WARNING, "%s: ftdi_write_data failed with %d", drvthis->name, err);
- return -1;
- }
+ err = ftdi_write_data(&p->ftdic, data, length);
+ if (err < 0) {
+ report(RPT_WARNING, "%s: ftdi_write_data failed with %d", drvthis->name, err);
+ return -1;
+ }
- timing_uPause(16000);
+ timing_uPause(16000);
- return 0;
+ return 0;
}
//////////////////////////////////////////////////////////////////////////////
@@ -202,30 +168,30 @@ lis_ftdi_write_command(Driver *drvthis, unsigned char *data, int length)
static int
lis_ftdi_line_to_display(Driver *drvthis, int line, unsigned char *string, int len)
{
- PrivateData *p = (PrivateData *) drvthis->private_data;
- unsigned char buffer[128];
- int err;
- int i;
+ PrivateData *p = (PrivateData *) drvthis->private_data;
+ unsigned char buffer[128];
+ int err;
+ int i;
- if (len > p->width || line < 1 || line > p->height) {
- return -EINVAL;
- }
- buffer[0] = 0xA0 + line;
- buffer[1] = 0;
- buffer[2] = 0xA7;
+ if (len > p->width || line < 1 || line > p->height) {
+ return -EINVAL;
+ }
+ buffer[0] = 0xA0 + line;
+ buffer[1] = 0;
+ buffer[2] = 0xA7;
- for (i=0; i < len; i++) {
- buffer[i+3] = UPD16314_charmap[(unsigned char)string[i]];
- }
- buffer[i+3] = 0x00;
+ for (i=0; i < len; i++) {
+ buffer[i+3] = UPD16314_charmap[(unsigned char)string[i]];
+ }
+ buffer[i+3] = 0x00;
- err = lis_ftdi_write_command(drvthis, buffer, len+4);
- if (err < 0) {
- report(RPT_WARNING, "%s: lis_ftdi_string: "
- "lis_ftdi_write_command() failed", drvthis->name);
- }
+ err = lis_ftdi_write_command(drvthis, buffer, len+4);
+ if (err < 0) {
+ report(RPT_WARNING, "%s: lis_ftdi_string: "
+ "lis_ftdi_write_command() failed", drvthis->name);
+ }
- return err;
+ return err;
}
@@ -256,103 +222,103 @@ static int
lis_load_custom_chars(Driver *drvthis)
{
PrivateData *p = (PrivateData *) drvthis->private_data;
- int i, col, row, err;
+ int i, col, row, err;
unsigned char buffer[65];
char custom_chars[8][CELLHEIGHT*CELLHEIGHT] = {
- { 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0 },
- { 1, 0, 0, 0, 0, /* 1-5 characters used by hbar() */
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0 },
- { 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0 },
- { 1, 1, 1, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 1, 1, 0, 0 },
- { 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 0 },
- { 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1 },
- { 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1,
- 1, 0, 0, 0, 1,
- 1, 0, 0, 0, 1,
- 1, 0, 0, 0, 1,
- 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1,
- 1, 0, 1, 0, 1,
- 1, 1, 0, 1, 1,
- 1, 0, 1, 0, 1,
- 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0 }};
+ { 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 },
+ { 1, 0, 0, 0, 0, /* 1-5 characters used by hbar() */
+ 1, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0 },
+ { 1, 1, 0, 0, 0,
+ 1, 1, 0, 0, 0,
+ 1, 1, 0, 0, 0,
+ 1, 1, 0, 0, 0,
+ 1, 1, 0, 0, 0,
+ 1, 1, 0, 0, 0,
+ 1, 1, 0, 0, 0,
+ 1, 1, 0, 0, 0 },
+ { 1, 1, 1, 0, 0,
+ 1, 1, 1, 0, 0,
+ 1, 1, 1, 0, 0,
+ 1, 1, 1, 0, 0,
+ 1, 1, 1, 0, 0,
+ 1, 1, 1, 0, 0,
+ 1, 1, 1, 0, 0,
+ 1, 1, 1, 0, 0 },
+ { 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 0 },
+ { 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1 },
+ { 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1,
+ 1, 0, 0, 0, 1,
+ 1, 0, 0, 0, 1,
+ 1, 0, 0, 0, 1,
+ 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0 },
+ { 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1,
+ 1, 0, 1, 0, 1,
+ 1, 1, 0, 1, 1,
+ 1, 0, 1, 0, 1,
+ 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0 }};
buffer[0] = 0xAD; // command to write CGRAM at 0
- for (i = 0; i < 8; i++)
- {
+ for (i = 0; i < 8; i++)
+ {
- /* build the buffer */
- for (row = 0; row < CELLHEIGHT; row++) {
- unsigned char value = 0;
+ /* build the buffer */
+ for (row = 0; row < CELLHEIGHT; row++) {
+ unsigned char value = 0;
- for (col = 0; col < CELLWIDTH; col++) {
+ for (col = 0; col < CELLWIDTH; col++) {
value <<= 1;
value |= (custom_chars[i][(row * CELLWIDTH) + col] > 0) ? 1 : 0;
- }
+ }
buffer[(i*8)+row+1] = value;
- }
- }
- err = lis_ftdi_write_command(drvthis, buffer, 65);
- if (err < 0) {
- report(RPT_WARNING, "%s: lis_load_custom_chars(): "
- "lis_ftdi_write_command() failed", drvthis->name);
- }
+ }
+ }
+ err = lis_ftdi_write_command(drvthis, buffer, 65);
+ if (err < 0) {
+ report(RPT_WARNING, "%s: lis_load_custom_chars(): "
+ "lis_ftdi_write_command() failed", drvthis->name);
+ }
else
p->cc_flag = 1;
- return err;
+ return err;
}
//////////////////////////////////////////////////////////////////////////////
-// Seperate thread to keep a read up on the USB device at all times
+// Separate thread to keep a read up on the USB device at all times
int
lis_read_thread(void *arg)
{
@@ -388,7 +354,7 @@ lis_set_brightness(Driver *drvthis, int state, int promille)
PrivateData *p = (PrivateData *) drvthis->private_data;
if (promille < 0 || promille > 1000)
- return -EINVAL;
+ return -EINVAL;
buffer[0] = 0xA5;
if ( promille < 251 )
@@ -400,11 +366,11 @@ lis_set_brightness(Driver *drvthis, int state, int promille)
else
buffer[1] = 0x0; // 100%
- err = ftdi_write_data(&p->ftdic, buffer, 2);
- if (err < 0) {
- report(RPT_WARNING, "%s: lis_set_brightness(): ftdi_write_data failed with %d", drvthis->name, err);
- return err;
- }
+ err = ftdi_write_data(&p->ftdic, buffer, 2);
+ if (err < 0) {
+ report(RPT_WARNING, "%s: lis_set_brightness(): ftdi_write_data failed with %d", drvthis->name, err);
+ return err;
+ }
else
p->brightness = promille;
return 0;
@@ -448,8 +414,8 @@ lis_init(Driver *drvthis)
// Get and parse size
s = drvthis->config_get_string( drvthis->name, "size", 0, "20x2");
if ((sscanf(s, "%dx%d", &(p->width), &(p->height)) != 2)
- || (p->width <= 0) || (p->width > LCD_MAX_WIDTH)
- || (p->height <= 0) || (p->height > LCD_MAX_HEIGHT)) {
+ || (p->width <= 0) || (p->width > LCD_MAX_WIDTH)
+ || (p->height <= 0) || (p->height > LCD_MAX_HEIGHT)) {
report(RPT_ERR, "%s: cannot read Size %s", drvthis->name, s);
return -1;
}
@@ -471,6 +437,9 @@ lis_init(Driver *drvthis)
}
p->brightness = count;
+ p->VendorID = drvthis->config_get_int(drvthis->name, "VendorID", 0, DISPLAY_VENDOR_ID);
+ p->ProductID = drvthis->config_get_int(drvthis->name, "ProductID", 0, DISPLAY_PRODUCT_ID);
+
/* End of config file parsing */
@@ -492,9 +461,12 @@ lis_init(Driver *drvthis)
// (&p->ftdic)->usb_read_timeout = 20;
// open the device
- err = ftdi_usb_open(&p->ftdic, DISPLAY_VENDOR_ID, DISPLAY_PRODUCT_ID);
+ err = ftdi_usb_open(&p->ftdic, p->VendorID, p->ProductID);
if (err < 0) {
- report(RPT_ERR, "%s: cannot open USB device", drvthis->name);
+ report(RPT_ERR, "%s: cannot open USB device %x:%x",
+ drvthis->name
+ p->VendorID,
+ p->ProductID);
goto err_framebuf;
}
@@ -1042,11 +1014,11 @@ lis_init(Driver *drvthis)
// don't know what this does exactly
buffer[0] = 0xA4;
buffer[1] = 0x7d;
- err = ftdi_write_data(&p->ftdic, buffer, 2);
- if (err < 0) {
- report(RPT_WARNING, "%s: ftdi_write_data failed with %d", drvthis->name, err);
- goto err_ftdi;
- }
+ err = ftdi_write_data(&p->ftdic, buffer, 2);
+ if (err < 0) {
+ report(RPT_WARNING, "%s: ftdi_write_data failed with %d", drvthis->name, err);
+ goto err_ftdi;
+ }
timing_uPause(3*16000);
@@ -1054,7 +1026,7 @@ lis_init(Driver *drvthis)
buffer[1] = 0xAA;
for(count = 0; count < 10; count++) {
err = ftdi_write_data(&p->ftdic, buffer, 2);
- if (err < 0) {
+ if (err < 0) {
report(RPT_WARNING, "%s: ftdi_write_data failed with %d", drvthis->name, err);
goto err_ftdi;
}
@@ -1182,12 +1154,12 @@ lis_init(Driver *drvthis)
// timing_uPause(2*16000);
// not sure about this
- buffer[0] = 0xA0;
- err = lis_ftdi_write_command(drvthis, buffer, 1);
- if (err < 0) {
- report(RPT_WARNING, "%s: lis_ftdi_clear: "
- "lis_ftdi_write_command failed", drvthis->name);
- }
+ buffer[0] = 0xA0;
+ err = lis_ftdi_write_command(drvthis, buffer, 1);
+ if (err < 0) {
+ report(RPT_WARNING, "%s: lis_ftdi_clear: "
+ "lis_ftdi_write_command failed", drvthis->name);
+ }
timing_uPause(10*16000);
@@ -1235,7 +1207,7 @@ lis_close(Driver *drvthis)
ftdi_deinit(&p->ftdic);
if (p->framebuf != NULL)
- free(p->framebuf);
+ free(p->framebuf);
free(p);
}
@@ -1277,6 +1249,7 @@ lis_clear (Driver *drvthis)
memset(p->framebuf + (line * p->width), ' ', p->width);
p->line_flags[line] = 1;
}
+ p->ccmode = standard;
}
///////////////////////////////////////////////////////////////////////////////
@@ -1448,6 +1421,9 @@ lis_hbar(Driver *drvthis, int x, int y, int len, int promille, int options)
}
+
+
+#if 0
void
lis_test(Driver *drvthis)
{
@@ -1463,3 +1439,4 @@ lis_test(Driver *drvthis)
lis_flush(drvthis);
}
}
+#endif
diff --git a/server/drivers/lis.h b/server/drivers/lis.h
index d14bb1a..b3fe442 100644
--- a/server/drivers/lis.h
+++ b/server/drivers/lis.h
@@ -1,21 +1,21 @@
/*
- Based on the lis driver Copyright (C) 2006, Bernhard Walle
- Copyright (c) 2007, Daryl Fonseca-Holt
+ Based on the lis driver Copyright (C) 2006, Bernhard Walle
+ Copyright (c) 2007, Daryl Fonseca-Holt
- 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
- any later version.
+ 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
+ any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 */
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 */
#ifndef LIS_H
#define LIS_H
@@ -27,6 +27,55 @@
# define false 0
#endif
+///////////////////////////////////////////////////////////////////////////////
+// constants
+//
+#define DISPLAY_VENDOR_ID 0x0403
+#define DISPLAY_PRODUCT_ID 0x6001
+
+#define CELLWIDTH 5
+#define CELLHEIGHT 8
+
+#define DEFAULT_BRIGHTNESS 1000
+
+
+///////////////////////////////////////////////////////////////////////////////
+// private data types
+//
+typedef struct {
+
+ // the handle for the USB FTDI library
+ struct ftdi_context ftdic;
+
+ // the width and the height (in number of characters) of the library
+ int width, height;
+
+ // The framebuffer and the framebuffer for the last contents (incr. update)
+ unsigned char *framebuf;
+
+ // dirty line flags
+ unsigned int *line_flags;
+
+ // child thread flag
+ int child_flag;
+
+ // parent thread flag
+ int parent_flag;
+
+ // display brightness 0-1000
+ int brightness;
+
+ // custom characters loaded?
+ int cc_flag;
+
+ // USB Vendor ID
+ int VendorID;
+
+ // USB Product ID
+ int ProductID;
+
+} PrivateData;
+
MODULE_EXPORT int lis_init(Driver *drvthis);
MODULE_EXPORT void lis_close (Driver *drvthis);
MODULE_EXPORT int lis_width (Driver *drvthis);
@@ -34,11 +83,9 @@ MODULE_EXPORT int lis_height (Driver *drvthis);
MODULE_EXPORT void lis_clear (Driver * drvthis);
MODULE_EXPORT void lis_string (Driver * drvthis, int x, int y, char string[]);
MODULE_EXPORT void lis_chr (Driver * drvthis, int x, int y, char c);
-MODULE_EXPORT void lis_set_char (Driver * drvthis, int n, char *dat);
MODULE_EXPORT void lis_flush (Driver * drvthis);
MODULE_EXPORT void lis_vbar (Driver * drvthis, int x, int y, int len, int promille, int options);
MODULE_EXPORT void lis_hbar (Driver * drvthis, int x, int y, int len, int promille, int options);
-MODULE_EXPORT void lis_num (Driver * drvthis, int x, int num);
MODULE_EXPORT int lis_icon(Driver * drvthis, int x, int y, int icon);
#endif /* LIS_H */