[Lcdproc] Fwd: driver for Aopen XC-Cube's VFD display

Karsten kafe69@gmx.net
Tue Mar 13 22:25:01 2007


--Boundary-00=_hRy9Fxx954891Wc
Content-Type: text/plain;
  charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

Hi Peter,

thanks for your hints. I have updated my work and hope to fulfill the=20
requirements:=20

> Hi Karsten,
>
> Thanks for your contribution to LCDproc.
>
> A few comments though (that currently stop me from adding it to CVS
> immediately).
> * I am missing documentation.
> =C2=A0 Without documentation, it is very hard for other users
> =C2=A0 to make use of the driver.
> =C2=A0 Please see =C2=A0
> http://lcdproc.sourceforge.net/docs/current-dev.html#add-your-driver
> =C2=A0 and the documentation about existing drivers what I want here.
>
I looked at the guide and existing docs and tried to do it similar.=20

> And a few side notes / questions
> * The args argument to the init() function of the drivers is not
>   supported anymore. Please consider removing it.
O.K.

> * The driver does not use a private data structure but uses static
>   variables. Please consider switching to using a PrivateData *p.
O.K.

> * The driver uses the range [0-255] for its brightness settings.
>   The default range for LCDproc drivers is [0-1000]
O.K.

> * The driver does not seem to support custom characters.
> =C2=A0 Is it because the hardware does not support them, or is
> =C2=A0 is simply because of the (early) driver version ?
The display is a segment-type alphanumeric display, so it doesn't support=20
custom characters.

> * Are you willing to act as a "maintainer" for the driver ?
>   And to fix bugs in it, .... ?
>
I will try my best as long as my spare time (not very much) and knowledge (=
I'm=20
not a skilled software engineer at all...) allow it.

Attached is the new patch.

Thanks

Karsten


--Boundary-00=_hRy9Fxx954891Wc
Content-Type: text/x-diff;
  charset="utf-8";
  name="lcdproc-0.5.1_ea65_20070313.diff"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="lcdproc-0.5.1_ea65_20070313.diff"

=2D-- /home/karsten/Prog/lcdproc_EA65/CVS-20070304/lcdproc/acinclude.m4	200=
7-02-04 22:14:55.000000000 +0100
+++ /home/karsten/Prog/lcdproc_EA65/CVS-KF/lcdproc/acinclude.m4	2007-03-06 =
22:58:01.000000000 +0100
@@ -5,7 +5,7 @@
 	[  --enable-drivers=3D<list> compile drivers for LCDs in <list>,]
 	[                  which is a comma-separated list of drivers.]
 	[                  Possible drivers are:]
=2D	[                    bayrad,CFontz,CFontz633,CFontzPacket,curses,CwLnx,=
EyeboxOne,]
+	[                    bayrad,CFontz,CFontz633,CFontzPacket,curses,CwLnx,ea=
65,EyeboxOne,]
 	[                    g15,glcdlib,glk,hd44780,icp_a106,imon,IOWarrior,irma=
n,]
 	[                    joy,lb216,lcdm001,lcterm,lirc,MD8800,ms6931,mtc_s162=
09x,]
 	[                    MtxOrb,NoritakeVFD,pyramid,sed1330,sed1520,serialPOS=
,]
@@ -15,7 +15,7 @@
 	drivers=3D"$enableval",
 	drivers=3D[bayrad,CFontz,CFontz633,curses,CwLnx,glk,lb216,lcdm001,MtxOrb,=
pyramid,text])
=20
=2DallDrivers=3D[bayrad,CFontz,CFontz633,CFontzPacket,curses,CwLnx,EyeboxOn=
e,g15,glcdlib,glk,hd44780,icp_a106,imon,IOWarrior,irman,joy,lb216,lcdm001,l=
cterm,lirc,MD8800,ms6931,mtc_s16209x,MtxOrb,NoritakeVFD,pyramid,sed1330,sed=
1520,serialPOS,serialVFD,sli,stv5730,svga,t6963,text,tyan,ula200,xosd]
+allDrivers=3D[bayrad,CFontz,CFontz633,CFontzPacket,curses,CwLnx,ea65,Eyebo=
xOne,g15,glcdlib,glk,hd44780,icp_a106,imon,IOWarrior,irman,joy,lb216,lcdm00=
1,lcterm,lirc,MD8800,ms6931,mtc_s16209x,MtxOrb,NoritakeVFD,pyramid,sed1330,=
sed1520,serialPOS,serialVFD,sli,stv5730,svga,t6963,text,tyan,ula200,xosd]
=20
 drivers=3D`echo $drivers | sed -e 's/,/ /g'`
=20
@@ -124,6 +124,10 @@
 			DRIVERS=3D"$DRIVERS CwLnx${SO}"
 			actdrivers=3D["$actdrivers CwLnx"]
 			;;
+		ea65)
+			DRIVERS=3D"$DRIVERS ea65${SO}"
+			actdrivers=3D["$actdrivers ea65"]
+			;;
 		EyeboxOne)
 			DRIVERS=3D"$DRIVERS EyeboxOne${SO}"
 			actdrivers=3D["$actdrivers EyeboxOne"]
=2D-- /home/karsten/Prog/lcdproc_EA65/CVS-20070304/lcdproc//server/drivers/=
Makefile.am	2007-02-04 22:14:55.000000000 +0100
+++ /home/karsten/Prog/lcdproc_EA65/CVS-KF/lcdproc//server/drivers/Makefile=
=2Eam	2007-03-06 23:05:07.000000000 +0100
@@ -19,7 +19,7 @@
 #LIBS =3D
=20
 pkglib_PROGRAMS =3D @DRIVERS@
=2DEXTRA_PROGRAMS =3D bayrad CFontz CFontz633 CFontzPacket curses CwLnx Eye=
boxOne g15 glcdlib glk hd44780 icp_a106 imon IOWarrior irman joy lb216 lcdm=
001 lcterm lirc MD8800 ms6931 mtc_s16209x MtxOrb NoritakeVFD pyramid sed133=
0 sed1520 serialPOS serialVFD stv5730 svga t6963 text tyan sli ula200 xosd
+EXTRA_PROGRAMS =3D bayrad CFontz CFontz633 CFontzPacket curses CwLnx ea65 =
EyeboxOne g15 glcdlib glk hd44780 icp_a106 imon IOWarrior irman joy lb216 l=
cdm001 lcterm lirc MD8800 ms6931 mtc_s16209x MtxOrb NoritakeVFD pyramid sed=
1330 sed1520 serialPOS serialVFD stv5730 svga t6963 text tyan sli ula200 xo=
sd
 noinst_LIBRARIES =3D libLCD.a libbignum.a
=20
 IOWarrior_CFLAGS =3D   @libusb_cflags@ $(AM_CFLAGS)
@@ -64,6 +64,7 @@
 CFontzPacket_SOURCES =3D lcd.h lcd_lib.h CFontzPacket.c CFontzPacket.h CFo=
ntz-charmap.h CFontz633io.c CFontz633io.h report.h adv_bignum.h
 curses_SOURCES =3D     lcd.h curses_drv.h curses_drv.c report.h
 CwLnx_SOURCES =3D      lcd.h lcd_lib.h CwLnx.c CwLnx.h report.h
+ea65_SOURCES =3D       lcd.h ea65.h ea65.c report.h
 EyeboxOne_SOURCES =3D   lcd.h lcd_lib.h EyeboxOne.c EyeboxOne.h report.h
 g15_SOURCES =3D 	      lcd.h lcd_lib.h g15.h g15-num.c g15.c report.h
 glcdlib_SOURCES =3D    lcd.h lcd_lib.h glcdlib.h glcdlib.c report.h
=2D-- /home/karsten/Prog/lcdproc_EA65/CVS-20070304/lcdproc/LCDd.conf	2007-0=
2-04 22:14:55.000000000 +0100
+++ /home/karsten/Prog/lcdproc_EA65/CVS-KF/lcdproc/LCDd.conf	2007-03-13 22:=
59:47.000000000 +0100
@@ -279,6 +279,21 @@
 #keypad_test_mode=3Dyes
=20
=20
+## ea65 driver for the Display on the AOpen XC-Cube AV EA65 media barebone=
 ##
+[ea65]
+
+# Device is fixed /dev/ttyS1
+# Width and Height are fixed 9x1
+
+# As the VFD is self luminescent we don't have a backlight
+# But we can use the backlight functions to control the front LEDs
+# Brightness 0 to 299 -> LEDs off
+# Brightness 300 to 699 -> LEDs half bright
+# Brightness 700 to 1000 -> LEDs full bright
+Brightness=3D500
+# OffBrightness is the the value used for the 'backlight off' state
+OffBrightness=3D0
+
=20
 ## EyeboxOne driver ##
 [EyeboxOne]
@@ -353,17 +368,17 @@
=20
=20
 ## optional:
=2DBrightness=3D50			# Brightness (in %) if applicable
=2DContrast=3D50			# Contrast (in %) if applicable
=2DBacklight=3Dno			# Backlight if applicable
=2DUpsideDown=3Dno			# flip image upside down
=2DInvert=3Dno			# invert light/dark pixels
=2DShowDebugFrame=3Dno		# turns on/off 1 pixel thick debugging
=2D				# border whithin the usable text area,
=2D				# for setting up TextResolution and
=2D				# MinFontFaceSize (if using FT2);
=2DShowBigBorder=3Dno		# border around the unused area
=2DShowThinBorder=3Dyes		# border around the unused area
+Brightness=3D50                   # Brightness (in %) if applicable
+Contrast=3D50                     # Contrast (in %) if applicable
+Backlight=3Dno                    # Backlight if applicable
+UpsideDown=3Dno                   # flip image upside down
+Invert=3Dno                       # invert light/dark pixels
+ShowDebugFrame=3Dno               # turns on/off 1 pixel thick debugging
+                                # border whithin the usable text area,
+                                # for setting up TextResolution and
+                                # MinFontFaceSize (if using FT2);
+ShowBigBorder=3Dno                # border around the unused area
+ShowThinBorder=3Dyes              # border around the unused area
 PixelShiftX=3D0
 PixelShiftY=3D2
=20
=2D-- /home/karsten/Prog/lcdproc_EA65/CVS-20070304/lcdproc/server/drivers/e=
a65.c	1970-01-01 01:00:00.000000000 +0100
+++ /home/karsten/Prog/lcdproc_EA65/CVS-KF/lcdproc/server/drivers/ea65.c	20=
07-03-13 20:23:27.000000000 +0100
@@ -0,0 +1,318 @@
+/*  This is the LCDproc driver for the vfd on the Aopen EA65, based on
+    the Crystal Fontz driver.
+
+    Copyright (C) 2004 ????
+
+    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.
+
+    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., 59 Temple Place, Suite 330, Boston, MA  02111-1307 */
+
+/*Initial modification of CFontz driver by Kent Williams (c) 2005*/
+/*some additions and updates by Karsten Festag (c) 2007*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <termios.h>
+#include <fcntl.h>
+#include <string.h>
+#include <errno.h>
+#include <syslog.h>
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "lcd.h"
+#include "ea65.h"
+#include "report.h"
+#include "lcd_lib.h"
+
+typedef struct driver_private_data {
+        int fd;
+        int brightness;
+        int offbrightness;
+        int width;
+        int height;
+        unsigned char *framebuf;
+} PrivateData;
+
+// Vars for the server core
+MODULE_EXPORT char *api_version =3D API_VERSION;
+MODULE_EXPORT int stay_in_foreground =3D 1;
+MODULE_EXPORT int supports_multiple =3D 0;
+MODULE_EXPORT int does_input =3D 0;
+MODULE_EXPORT int does_output =3D 1;
+MODULE_EXPORT char *symbol_prefix =3D "EA65_";
+
+/////////////////////////////////////////////////////////////////
+// Opens com port and sets baud correctly...
+//
+MODULE_EXPORT int
+EA65_init (Driver * drvthis)
+{
+        debug(RPT_INFO, "EA65: init(%p)", drvthis);
+
+        /* device is fixed */
+        char device[] =3D "/dev/ttyS1";
+        /*speed is fixed at 9600*/
+        int speed =3D B9600;
+
+        /* Allocate and store private data */
+        PrivateData *p;
+        p =3D (PrivateData *) malloc(sizeof(PrivateData));
+        if (p =3D=3D NULL)
+                return -1;
+        if (drvthis->store_private_ptr(drvthis, p))
+                return -1;
+
+        //// initialize private data=20
+        // Width and Height are fixed
+        p->width =3D 9;
+        p->height =3D 1;
+        // Make sure the frame buffer is there...
+        p->framebuf =3D (unsigned char *) malloc (p->width * p->height);
+        memset (p->framebuf, ' ', p->width * p->height);
+
+        //// Read config file
+        // Which backlight brightness
+        p->brightness =3D drvthis->config_get_int ( drvthis->name , "Brigh=
tness" , 0 , DEFAULT_BRIGHTNESS);
+        if (0 <=3D p->brightness && p->brightness <=3D 1000) {
+                if (p->brightness < 300) {
+                        p->brightness =3D 0x00;           // command char =
that turns button LEDs off
+                } else if (p->brightness >=3D 700 ) {
+                        p->brightness =3D 0x01;           // command char =
that turns button LEDs on full
+                } else {
+                        p->brightness =3D 0x02;           // command char =
that turns button LEDs on half
+                }
+        } else {
+                report (RPT_WARNING, "EA65_init: Brightness must be betwee=
n 0 and 1000. Using default value.\n");
+                p->brightness =3D DEFAULT_BRIGHTNESS;
+        }
+
+        // Which backlight-off "brightness"
+        p->offbrightness =3D drvthis->config_get_int ( drvthis->name , "Of=
fBrightness" , 0 , DEFAULT_OFFBRIGHTNESS);
+        if (0 <=3D p->offbrightness && p->offbrightness <=3D 1000) {
+                if (p->offbrightness < 300) {
+                        p->offbrightness =3D 0x00;           // command ch=
ar that turns button LEDs off
+                } else if (p->offbrightness >=3D 700) {
+                        p->offbrightness =3D 0x01;           // command ch=
ar that turns button LEDs on full
+                } else {
+                        p->offbrightness =3D 0x02;           // command ch=
ar that turns button LEDs on half
+                }
+        } else {
+                report (RPT_WARNING, "EA65_init: OffBrightness must be bet=
ween 0 and 1000. Using default value.\n");
+                p->offbrightness =3D DEFAULT_OFFBRIGHTNESS;
+        }
+
+        // Set up io port correctly, and open it...
+        debug( RPT_DEBUG, "EA65: Opening serial device: %s", device);
+        struct termios portset;
+        p->fd =3D open (device, O_RDWR | O_NOCTTY | O_NDELAY);
+        if (p->fd =3D=3D -1) {
+                report (RPT_ERR, "EA65_init: failed (%s)\n", strerror (err=
no));
+                return -1;
+        }
+        tcgetattr (p->fd, &portset);
+
+#ifdef HAVE_CFMAKERAW
+        // The easy way
+        cfmakeraw( &portset );
+#else
+        // The hard way
+        portset.c_iflag &=3D ~( IGNBRK | BRKINT | PARMRK | ISTRIP
+                           | INLCR | IGNCR | ICRNL | IXON );
+        portset.c_oflag &=3D ~OPOST;
+        portset.c_lflag &=3D ~( ECHO | ECHONL | ICANON | ISIG | IEXTEN );
+        portset.c_cflag &=3D ~( CSIZE | PARENB | CRTSCTS );
+        portset.c_cflag |=3D CS8 | CREAD | CLOCAL ;
+#endif
+
+        // Set port speed
+        cfsetospeed (&portset, speed);
+        cfsetispeed (&portset, B0);
+
+        // Do it...
+        tcsetattr (p->fd, TCSANOW, &portset);
+
+        report (RPT_DEBUG, "EA65_init: done\n");
+
+        return 0;
+}
+
+/////////////////////////////////////////////////////////////////
+// Clean-up
+//
+MODULE_EXPORT void
+EA65_close (Driver *drvthis)
+{
+        PrivateData *p =3D (PrivateData *) drvthis->private_data;
+
+        close (p->fd);
+
+        if(p->framebuf) free (p->framebuf);
+        p->framebuf =3D NULL;
+}
+
+/////////////////////////////////////////////////////////////////
+// Returns the display width
+//
+MODULE_EXPORT int
+EA65_width (Driver *drvthis)
+{
+        PrivateData *p =3D (PrivateData *) drvthis->private_data;
+
+        return p->width;
+}
+
+/////////////////////////////////////////////////////////////////
+// Returns the display height
+//
+MODULE_EXPORT int
+EA65_height (Driver *drvthis)
+{
+        PrivateData *p =3D (PrivateData *) drvthis->private_data;
+
+        return p->height;
+}
+
+//////////////////////////////////////////////////////////////////
+// Flushes all output to the lcd...
+//
+MODULE_EXPORT void
+EA65_flush (Driver *drvthis)
+{
+        char out[6];
+        int i;
+        PrivateData *p =3D (PrivateData *) drvthis->private_data;
+
+        // Need to check for and deal with unsupported chars or the displa=
y gets a little upset
+        for (i=3D0; i < p->width * p->height; i++) {
+                if ( (p->framebuf[i] >=3D 224 && p->framebuf[i] <=3D 253) =
||     // is a lowercase accented letter
+                        (p->framebuf[i] >=3D 97 && p->framebuf[i] <=3D 122=
) ) {   // is a lowercase letter
+                        p->framebuf[i] -=3D 32;              // -> convert=
 to upper case
+                }
+                if (p->framebuf[i] >=3D 48 && p->framebuf[i] <=3D 57) { } =
          // is a number -> do nothing
+                else if (p->framebuf[i] >=3D 65 && p->framebuf[i] <=3D 90)=
 { }    // is a uppercase letter -> do nothing
+                else if (p->framebuf[i] =3D=3D 42 || p->framebuf[i] =3D=3D=
 43 ||
+                         p->framebuf[i] =3D=3D 45 || p->framebuf[i] =3D=3D=
 47 ) { }   // is +,-,/,* -> do nothing
+                  // Now lets replace some accented characters with remote=
ly similar looking ones
+                else if (p->framebuf[i] =3D=3D 223) p->framebuf[i] =3D 83;=
 // use an "S" instead of "=C3=9F"
+                else if (p->framebuf[i] >=3D 192 && p->framebuf[i] <=3D 19=
7)   // use an "A"
+                        p->framebuf[i] =3D 65;
+                else if (p->framebuf[i] >=3D 200 && p->framebuf[i] <=3D 20=
3)   // use an "E"
+                        p->framebuf[i] =3D 69;
+                else if (p->framebuf[i] >=3D 204 && p->framebuf[i] <=3D 20=
7)   // use an "I"
+                        p->framebuf[i] =3D 73;
+                else if (p->framebuf[i] >=3D 210 && p->framebuf[i] <=3D 21=
4)   // use an "O"
+                        p->framebuf[i] =3D 79;
+                else if (p->framebuf[i] >=3D 217 && p->framebuf[i] <=3D 22=
0)   // use an "U"
+                        p->framebuf[i] =3D 85;=20
+                else p->framebuf[i] =3D 32;  // other characters replaced =
by a space
+        }
+        snprintf(out, sizeof(out), "%c%c%c%c%c", 0xa0, 0x00, 0x80, 0x8a, 0=
x8a);
+        write(p->fd, out, 5);
+        write(p->fd, p->framebuf, p->width * p->height);
+}
+
+/////////////////////////////////////////////////////////////////
+// Prints a character on the lcd display, at position (x,y).  The
+// upper-left is (1,1), and the lower right should be (9,1).
+//
+MODULE_EXPORT void
+EA65_chr (Driver * drvthis, int x, int y, char c)
+{
+        PrivateData *p =3D (PrivateData *) drvthis->private_data;
+
+        y--;
+        x--;
+
+        //if (c < 32 && c >=3D 0)
+        //      c +=3D 128;
+
+        // For V2 of the firmware to get the block to display right
+        //if (newfirmware && c=3D=3D-1) {
+        //      c=3D214;
+        //}
+
+        p->framebuf[(y * p->width) + x] =3D c;
+}
+
+/////////////////////////////////////////////////////////////////
+// Sets the backlight on or off
+//
+MODULE_EXPORT void
+EA65_backlight (Driver * drvthis, int on)
+{
+        PrivateData *p =3D (PrivateData *) drvthis->private_data;
+
+        char out[6];
+        if (on) {
+                snprintf (out, sizeof(out), "%c%c%c%c%c", 0xa0, 0x00, 0x50=
, 0x81, p->brightness);
+        } else {
+                snprintf (out, sizeof(out), "%c%c%c%c%c", 0xa0, 0x00, 0x50=
, 0x81, p->offbrightness);
+        }
+        write (p->fd, out, 5);
+}
+
+/////////////////////////////////////////////////////////////////
+// Clears the LCD screen
+//
+MODULE_EXPORT void
+EA65_clear (Driver * drvthis)
+{
+        PrivateData *p =3D (PrivateData *) drvthis->private_data;
+
+        memset (p->framebuf, ' ', p->width * p->height);
+
+}
+
+/////////////////////////////////////////////////////////////////
+// Prints a string on the lcd display, at position (x,y).  The
+// upper-left is (1,1), and the lower right should be (9,1).
+//
+MODULE_EXPORT void
+EA65_string (Driver * drvthis, int x, int y, char string[])
+{
+        PrivateData *p =3D (PrivateData *) drvthis->private_data;
+
+        int i;
+
+        x -=3D 1;                                                   // Con=
vert 1-based coords to 0-based...
+        y -=3D 1;
+
+        for (i =3D 0; string[i]; i++) {
+
+                // Check for buffer overflows...
+                if ((y * p->width) + x + i > (p->width * p->height))
+                        break;
+                p->framebuf[(y * p->width) + x + i] =3D string[i];
+        }
+}
+
+/////////////////////////////////////////////////////////////////
+//// Turns the recording LED on or off as desired.
+////
+MODULE_EXPORT void
+EA65_output (Driver * drvthis, int on)
+{
+        PrivateData *p =3D (PrivateData *) drvthis->private_data;
+
+        char out[6];
+        if (on) {
+                snprintf (out, sizeof(out), "%c%c%c%c%c", 0xa0,0x00,0x32,0=
x81,0x01);
+        } else {
+                snprintf (out, sizeof(out), "%c%c%c%c%c", 0xa0,0x00,0x32,0=
x81,0x00);
+        }
+        write (p->fd, out, 5);
+}
=2D-- /home/karsten/Prog/lcdproc_EA65/CVS-20070304/lcdproc/server/drivers/e=
a65.h	1970-01-01 01:00:00.000000000 +0100
+++ /home/karsten/Prog/lcdproc_EA65/CVS-KF/lcdproc/server/drivers/ea65.h	20=
07-03-12 23:07:22.000000000 +0100
@@ -0,0 +1,21 @@
+#ifndef EA65_H
+#define EA65_H
+
+#include "lcd.h"
+
+#define DEFAULT_BRIGHTNESS 500
+#define DEFAULT_OFFBRIGHTNESS 0
+
+MODULE_EXPORT int  EA65_init (Driver * drvthis);
+MODULE_EXPORT void EA65_close (Driver * drvthis);
+MODULE_EXPORT int  EA65_width (Driver * drvthis);
+MODULE_EXPORT int  EA65_height (Driver * drvthis);
+MODULE_EXPORT void EA65_clear (Driver * drvthis);
+MODULE_EXPORT void EA65_flush (Driver * drvthis);
+MODULE_EXPORT void EA65_string (Driver * drvthis, int x, int y, char strin=
g[]);
+MODULE_EXPORT void EA65_chr (Driver * drvthis, int x, int y, char c);
+
+MODULE_EXPORT void EA65_brightness (Driver * drvthis, int promille);
+MODULE_EXPORT void EA65_output (Driver * drvthis, int on);
+
+#endif
=2D-- /home/karsten/Prog/lcdproc_EA65/CVS-20070304/lcdproc/docs/LCDd.8.in	2=
006-10-01 18:23:39.000000000 +0200
+++ /home/karsten/Prog/lcdproc_EA65/CVS-KF/lcdproc/docs/LCDd.8.in	2007-03-1=
3 20:58:41.000000000 +0100
@@ -99,6 +99,9 @@
 .B CwLnx
 serial/USB displays by Cwlinux (http://www.cwlinux.com)
 .TP
+.B ea65
+VFD front panel display on Aopen XC Cube EA65 media barebone
+.TP
 .B EyeboxOne
 LCD display on the EyeboxOne (http://www.rightvision.com)
 .TP
=2D-- /home/karsten/Prog/lcdproc_EA65/CVS-20070304/lcdproc/docs/lcdproc-use=
r/drivers/ea65.docbook	1970-01-01 01:00:00.000000000 +0100
+++ /home/karsten/Prog/lcdproc_EA65/CVS-KF/lcdproc/docs/lcdproc-user/driver=
s/ea65.docbook	2007-03-13 21:53:29.000000000 +0100
@@ -0,0 +1,77 @@
+<sect1 id=3D"ea65">
+<title>The ea65 driver</title>
+
+<para>
+      This section describes the ea65 driver which works with the front pa=
nel
+      VFD display on the AOpen XC Cube-AV EA65 media barebone.
+</para>
+
+<sect2 id=3D"ea65-features">
+        <title>EA65 front panel VFD </title>
+        <para>
+          The AOpen XC Cube-AV is a barebone designed for using as a media=
 center.
+          It comes with a front panel display which is capable of displayi=
ng one line=20
+          of 9 characters.=20
+        </para>
+        <para>
+          The display is internally connected to the serial port (/dev/tty=
S1)
+          with a rate of 9600 baud
+        </para>
+        <para>
+          The display uses 13 segments per character. That's why the drive=
r provides=20
+          no custom characters like the ones for dot matrix displays do.
+        </para>
+        <para>
+          The front panel furthermore has 9 keys which are illuminated by =
blue LEDs.=20
+          The LEDs can be controlled with the backlight functions. The key=
s are not=20
+          supported by this driver. The red LED (RECORD) can be controlled=
 with the=20
+          output command of LCDd.
+        </para>
+</sect2>
+
+<sect2 id=3D"ea65-config">
+<title>Configuration in LCDd.conf</title>
+
+<sect3 id=3D"ea65-config-section">
+<title>[ea65]</title>
+
+<variablelist>
+<varlistentry>
+  <term>
+    <command>Brightness=3D</command>
+    <arg choice=3D"plain"><replaceable>BRIGHTNESS</replaceable></arg>
+  </term>
+  <listitem><para>
+    Set the brightness for the front LEDs if backlight is switched on.
+    Legal values for <replaceable>BRIGHTNESS</replaceable> are in the range
+    between <literal>0</literal> and <literal>1000</literal>.
+    Values under <literal>300</literal> set the LEDs off.
+    Values between <literal>300</literal> and <literal>700</literal> turn
+    on the LEDs with half brightness.
+    Values above <literal>700</literal> turn on the LEDs with full brightn=
ess.
+    If not given, it defaults to <literal>500</literal>.
+  </para></listitem>
+</varlistentry>
+<varlistentry>
+  <term>
+    <command>OffBrightness=3D</command>
+    <arg choice=3D"plain"><replaceable>OFFBRIGHTNESS</replaceable></arg>
+  </term>
+  <listitem><para>
+    Set the brightness for the front LEDs if backlight is switched off.
+    Legal values for <replaceable>OFFBRIGHTNESS</replaceable> are in the r=
ange
+    between <literal>0</literal> and <literal>1000</literal>.
+    Values under <literal>300</literal> set the LEDs off.
+    Values between <literal>300</literal> and <literal>700</literal> turn
+    on the LEDs with half brightness.
+    Values above <literal>700</literal> turn on the LEDs with full brightn=
ess.
+    If not given, it defaults to <literal>0</literal>.
+  </para></listitem>
+</varlistentry>
+</variablelist>
+
+</sect3>
+
+</sect2>
+
+</sect1>
=2D-- /home/karsten/Prog/lcdproc_EA65/CVS-20070304/lcdproc/docs/lcdproc-use=
r/lcdproc-user.docbook	2007-02-04 22:14:55.000000000 +0100
+++ /home/karsten/Prog/lcdproc_EA65/CVS-KF/lcdproc/docs/lcdproc-user/lcdpro=
c-user.docbook	2007-03-13 21:54:39.000000000 +0100
@@ -19,6 +19,7 @@
   <!ENTITY CFontzPacket SYSTEM "drivers/CFontzPacket.docbook">
   <!ENTITY curses SYSTEM "drivers/curses.docbook">
   <!ENTITY CwLnx SYSTEM "drivers/CwLnx.docbook">
+  <!ENTITY ea65 SYSTEM "drivers/ea65.docbook">
   <!ENTITY EyeboxOne SYSTEM "drivers/eyeboxone.docbook">
   <!ENTITY g15 SYSTEM "drivers/g15.docbook">
   <!ENTITY glcdlib SYSTEM "drivers/glcdlib.docbook">
=2D-- /home/karsten/Prog/lcdproc_EA65/CVS-20070304/lcdproc/docs/lcdproc-use=
r/drivers.docbook	2007-02-04 22:14:55.000000000 +0100
+++ /home/karsten/Prog/lcdproc_EA65/CVS-KF/lcdproc/docs/lcdproc-user/driver=
s.docbook	2007-03-13 21:55:11.000000000 +0100
@@ -13,6 +13,7 @@
 &CFontzPacket;
 &curses;
 &CwLnx;
+&ea65;
 &EyeboxOne;
 &g15;
 &glcdlib;

--Boundary-00=_hRy9Fxx954891Wc--