update serialVFD driver (Stefan Herdler)

This commit is contained in:
marschap
2006-05-20 14:38:18 +00:00
parent c6a1f841a7
commit 8ba4e54a3b
6 changed files with 511 additions and 665 deletions
+28 -14
View File
@@ -644,30 +644,44 @@ Port=0x378
## Serial VFD driver ## ## Serial VFD driver ##
## Drives various (see below) serial 5x7dot VFD's. ## ## Drives various (see below) serial 5x7dot VFD's. ##
[serialVFD] [serialVFD]
# device where the VFD is. Usual values are /dev/ttyS0 and /dev/ttyS1
# Specifies the displaytype.[default: 0]
# 0 NEC (FIPC8367 based) VFDs.
# 1 KD Rev 2.1.
# 2 Noritake VFDs (*).
# 3 Futaba VFDs
# (* most should work, not testet yet.)
Type=0
# "no" if display connected serial, "yes" if connected parallel. [default: no(=serial)]
use_parallel=no
# Number of Custom-Characters [default: displaytype dependent]
#Custom-Characters=0
# Portaddress where the LPT is. Used in parallelmode only. Usual values are 0x278, 0x378 and 0x3BC
Port=0x378
# Device to use in serial mode. Usual values are /dev/ttyS0 and /dev/ttyS1
Device=/dev/ttyS1 Device=/dev/ttyS1
# Specifies the size of the VFD. # Specifies the size of the VFD.
Size=20x2 Size=20x2
# Specifies the display type [default: 0] # Set the initial brightness [default: 1000; legal: 0 - 1000]
# 0 NEC (FIPC8367 based) VFDs. # (4 steps 0-250, 251-500, 501-750, 751-1000)
# 1 KD Rev 2.1. Brightness=1000
# 2 Noritake VFDs (*). # Set the initial off-brightness [default: 0; legal: 0 - 1000]
# 3 Futaba VFDs (*). # This value is used when the display is normally
# (* most should work, not tested yet.) # switched off in case LCDd is inactive
Type=1 # (4 steps 0-250, 251-500, 501-750, 751-1000)
OffBrightness=0
# Display brightness [default: 255].
# 0 min ... 255 max ... 1000 also max
# (4 steps 0-64, 65-128, 129-192, 193-1000)
Brightness=255
# set the serial port speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200] # set the serial port speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200]
Speed=9600 Speed=9600
# enable ISO 8859 1 compatibility [default: yes; legal: yes, no] # enable ISO 8859 1 compatibility [default: yes; legal: yes, no]
ISO_8859_1=yes #ISO_8859_1=yes
+1 -1
View File
@@ -169,7 +169,7 @@ SED1330/SED1335 (aka S1D13300/S1D13305) based graphical displays
122x32 pixel graphic displays based on SED1520 controllers 122x32 pixel graphic displays based on SED1520 controllers
.TP .TP
.B serialVFD .B serialVFD
NEC FIPC8367 based serial VFDs NEC (FIPC8367 based) and FUTABA VFDs
.TP .TP
.B sli .B sli
Wirz SLI driver (unknown) Wirz SLI driver (unknown)
+253 -77
View File
@@ -2,69 +2,116 @@
<title>The serialVFD Driver</title> <title>The serialVFD Driver</title>
<para> <para>
This section talks about using LCDproc with LCD displays that use the This section talks about using LCDproc with VFD character-displays build by NEC, FUTABA and NORITAKE.
serialVFD chipset.
</para> </para>
<sect2 id="serialVFD-connections">
<title>Connections</title> <para>
The serialVFD-driver is working with NEC FIPC8367 based VFDs
and the "KD Rev 2.1" (an ATMEL AT90S.... based FM20X2KB-AB replacement).
It is also known to work on FUTABA VFDs.</para>
<para>
The driver should operate most of NEC, Futaba and Noritake 7x5 dot VFDs with
serial(rs232) and/or parallel interface. See the following table for testing-status.
Feedback is welcome.
The serialVFD-driver should work with all NEC FIPC8367 based VFDs: <table><title>serialVFD: Display Status</title>
NEC FC20X2JA <tgroup cols="5">
NEC FM20X2KB-AB
NEC FC20X1SA-AB/AA
...
Tested only on: NEC FM20X2KB-AB
The driver also works (tested) on "KD Rev 2.1" (an ATMEL AT90S....
based FM20X2KB-AB replacement).
Note: Above char. 128 the FIPC-displays and KD's charactersets
are different.
The driver may work or will be easy to get working on the following
Displays / Controllers (not tested!).
<table>
<tgroup cols="2">
<thead> <thead>
<row> <row>
<entry>Display</entry> <entry>Display</entry>
<entry>Controller</entry> <entry>Controller</entry>
<entry>Serial</entry>
<entry>Parallel</entry>
<entry>Display tested</entry>
<entry>Remark</entry>
</row> </row>
</thead> </thead>
<tbody> <tbody>
<row> <row>
<entry>FUTABA M204SD01AA</entry> <entry>NEC FM20X2KB-AB</entry>
<entry>FUTABA 5P00A016</entry> <entry>NEC FIPC8367</entry>
<entry>Ok</entry>
<entry>Ok</entry>
<entry>Yes</entry>
<entry> </entry>
</row> </row>
<row>
<entry>NEC FC20X2JA</entry>
<entry>NEC FIPC8367</entry>
<entry>(Ok)</entry>
<entry>(Ok)</entry>
<entry>No</entry>
<entry>Same Controller as on FM20X2KB-AB</entry>
</row>
<row>
<entry>NEC FC20X1SA-AB/AA</entry>
<entry>NEC FIPC8367</entry>
<entry>(Ok)</entry>
<entry>(Ok)</entry>
<entry>No</entry>
<entry>Same Controller as on FM20X2KB-AB</entry>
</row>
<row>
<entry>KD Rev 2.1</entry>
<entry>AT90S....
microcontroller</entry>
<entry>Ok</entry>
<entry>Ok</entry>
<entry>Yes</entry>
<entry> </entry>
</row>
<row>
<entry>FUTABA M402SD06GJ</entry>
<entry>?</entry>
<entry>(?)*</entry>
<entry>Ok</entry>
<entry>Yes</entry>
<entry>(* perhaps no compatible baudrate, not tested)
The display has no user-characters set <command>Custom-Characters=0</command>
in <filename>LCDd.conf.</filename></entry>
</row>
<row>
<entry>FUTABA M204SD01AA</entry>
<entry>FUTABA 5P00A016</entry>
<entry>(Ok)</entry>
<entry>(Ok)</entry>
<entry>No</entry>
<entry> </entry>
</row>
<row> <row>
<entry>Noritake CU20026SCPB-T</entry> <entry>Noritake CU20026SCPB-T</entry>
<entry>(microcontroller)</entry> <entry>microcontroller</entry>
<entry>(Ok)</entry>
<entry>(Ok)</entry>
<entry>No</entry>
<entry> </entry>
</row> </row>
<row> <row>
<entry>Noritake CU20045SCPB-T28A</entry> <entry>Noritake CU20045SCPB-T28A</entry>
<entry>?</entry> <entry>?</entry>
<entry>(Ok)</entry>
<entry>(Ok)</entry>
<entry>No</entry>
<entry> </entry>
</row> </row>
</tbody> </tbody>
</tgroup> </tgroup>
</table> </table>
() feature not tested.
... or compatible.
(most Futaba/Noritake 7x5 dot VFDs with serial(rs232) interface
(including serial(rs232)/parallel types))
<para>
Maybe there are little changes in the commands to do to get all
functions to work correctly. But because of the similarity of the
protocols, it wont be much work.
</para> </para>
<para> <para>
If you want to add a new device to the driver add a new section If your display isn't working 100% satisfactorily you can add a new device with modified hardware
to the displaytype-switch-case in the init-function and fill it commands to the driver if you want. To do that you have to add a new section to the display-
with the correct commands for the display. <command>Type=</command>-switch-case in <filename>./server/drivers/serialVFD-displays.c</filename>
(Try which displaytype works best with your display, copy and modify and to write a new "load"function with the correct commands for the display.(Try which display-<command>Type=</command>
it's section that is the easiest way I guess.) works best with your display, copy, rename and modify this function that is the easiest way I guess.)
</para> </para>
<para> <para>
@@ -78,24 +125,25 @@ running. It may take a few minutes until the next full refresh makes
the display show everything correctly. the display show everything correctly.
</para> </para>
<para>
To enable the bignumbers on 2-line displays (only this driver supports
this yet) you have to edit <filename>clients/lcdproc/chrono.c</filename>
before compiling.
In function <function>big_clock_screen</function> you have to replace the
<literal>4</literal> by a <literal>2</literal> in this line:
<code>if (lcd_hgt &lt; 4)</code>
</para>
<sect2 id="serialVFD-connections">
<title>Connecting The Display</title>
<para>The Connections shown have been tested successfully.</para>
<warning><para>Always cross-check with your datasheet, before connecting your display!
Displays of same manufacturer may have different pin assignments!</para></warning>
<para>With this example connections it will be easy to connect displays with different connector
pin-layouts, the pins are commonly named equal in the datasheet.<para>
<sect3 id="serialVFD-serial-connections">
<title>Serial Connections</title>
<para> <para>
This driver uses the serial mode of the displays.
It is NOT possible to connect most of the displays directly to the It is NOT possible to connect most of the displays directly to the
serialport. The signal has to be inverted. I use the following serialport. The signal has to be inverted. I use the following
circuit to do that job. circuit to do that job.
</para> </para>
<figure> <figure>
<title>serialVFD: Connecting the display</title> <title>serialVFD: Serial Inverter</title>
<screen> <screen>
<![CDATA[ <![CDATA[
Computer Display Computer Display
@@ -121,9 +169,9 @@ pin(signal) |
| --->- A* | --->- A*
| E| | | E| |
| | | | | |
5(GND) --------o----------o----o----------------- GND 5(GND) --------o----------o----o--------------o-- GND
|*
Shield ------------------------------------------ Shield ---------------------------------------o
optional optional
*connect near display *connect near display
@@ -131,25 +179,27 @@ optional
</screen> </screen>
</figure> </figure>
The pins on the different displays vary. <para>The pins on the different displays vary.</para>
<para><title>NEC Displays (FM20X2KB-AB):</title></para>
FM20X2KB-AB: <para>CN1:</para>
<screen><![CDATA[
CN1:
Pin 33 &lt;--- RxD Pin 33 &lt;--- RxD
(Testmode: connect pins 25 and 26, then power up) (Testmode: connect pins 25 and 26, then power up)
]]></screen>
CN2: <para>CN2:</para>
<screen><![CDATA[
Pin 1 &lt;--- +5V Pin 1 &lt;--- +5V
Pin 2 &lt;--- GND Pin 2 &lt;--- GND
]]></screen>
<para><title>KD Rev 2.1:</title></para>
KD Rev 2.1: <para>
The blue connector (6pin in a row) (the important one!):
blue connector (6pin in a row) (the important one!): </para>
<screen> <screen>
<![CDATA[ <![CDATA[
-------------------------------- --------------------------------
@@ -163,33 +213,147 @@ blue connector (6pin in a row) (the important one!):
Hold the display in that position where you can read Hold the display in that position where you can read
the "KD Rev 2.1" marking normally! the "KD Rev 2.1" marking normally!
</para> </para>
</tip> </tip>
gray connector (10pin 2 rows): <para>The gray connector (10pin 2 rows):</para>
Do not use. (the ATMEL ISP connector I guess) <screen>
<![CDATA[Do not use. (the ATMEL ISP connector I guess)
The two jumpers next to the gray connector: ]]>
Normally not used. </screen>
<para>The two jumpers next to the gray connector:</para>
<screen>
<![CDATA[Normally not used.
You can activate two different testmodes with them. You can activate two different testmodes with them.
]]>
</screen>
</sect3>
<sect3 id="serialVFD-parallel-connections">
<title>Parallel Connections</title>
<para><title>NEC Displays (FM20X2KB-AB):</title></para>
<para>CN1:</para>
<screen><![CDATA[
parallel Port: Display (NEC):
Pin: Name: Name: Pin:
1 /STROBE -------------- /WR 1
2 D0 -------------- D0 15
3 D1 -------------- D1 13
4 D2 -------------- D2 11
5 D3 -------------- D3 9
6 D4 -------------- D4 7
7 D5 -------------- D5 5
8 D6 -------------- D6 3
9 D7 -------------- D7 1
10 /ACK --o
|
11 BUSY --o----------- BUSY 27
o-- /CS 23
|
18 - 25 GND ------------o-- GND 2,4,6,8,10,12,14,16,18,20,22,24,26,28,20,32,34
|*
Shield -------------------o
optional
*connect near display
]]></screen>
<para>CN2:</para>
<screen><![CDATA[
Pin 1 &lt;--- +5V
Pin 2 &lt;--- GND
]]></screen>
<para><title>FUTABA Displays (M402SD06GJ):</title></para>
<screen><![CDATA[
parallel Port: Display (FUTABA):
Pin: Name: Name: Pin:
1 /STROBE -------------- /WR 1
2 D0 -------------- D0 15
3 D1 -------------- D1 13
4 D2 -------------- D2 11
5 D3 -------------- D3 9
6 D4 -------------- D4 7
7 D5 -------------- D5 5
8 D6 -------------- D6 3
9 D7 -------------- D7 1
10 /ACK --o
|
11 BUSY --o----------- BUSY 20
o-- /SEL 23
|
18 - 25 GND ------------o-- GND 10,12,14
|*
Shield -------------------o
optional
0-- TEST 16
|
+5V -------o-- +5V 2,4,6
*connect near display
]]></screen>
</sect3>
</sect2> </sect2>
<!-- ## Serial VFD driver ## --> <!-- ## Serial VFD driver ## -->
<sect2 id="serialVFD-config"> <sect2 id="serialVFD-config">
<title>Configuration in LCDd.conf</title> <title>Configuration in LCDd.conf</title>
<sect3> <sect3>
<title>[serialVFD]</title> <title>[serialVFD]</title>
<variablelist> <variablelist>
<varlistentry>
<term>
<command>use_parallel=</command>
<arg choice="plain">
<group choice="req">
<arg choice="plain"><literal><emphasis>yes</emphasis></literal></arg>
<arg choice="plain"><literal>no</literal></arg>
</group>
</arg>
</term>
<listitem><para>
"<literal>no</literal>" if display connected serial, "<literal>yes</literal>" if connected parallel [default: <literal>no</literal>(serial)].
</para></listitem>
</varlistentry>
<varlistentry>
<term>
<command>Port=</command>
<arg choice="plain"><replaceable>PORT</replaceable></arg>
</term>
<listitem><para>
Portaddress where the LPT is. Used in parallelmode only. Usual values are 0x278, 0x378 and 0x3BC [default: <literal>0x278</literal>].
</para></listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term> <term>
<command>Device=</command> <command>Device=</command>
<arg choice="plain"><replaceable>DEVICE</replaceable></arg> <arg choice="plain"><replaceable>DEVICE</replaceable></arg>
</term> </term>
<listitem><para> <listitem><para>
Device where the VFD is. Usual values are <filename>/dev/ttyS0</filename> and <filename>/dev/ttyS1</filename> Device to use in serial mode. Usual values are <filename>/dev/ttyS0</filename> and <filename>/dev/ttyS1</filename>
Default: <filename>/dev/lcd</filename> [default: <filename>/dev/lcd</filename>].
</para></listitem>
</varlistentry>
<varlistentry>
<term>
<command>Custom-Characters=</command>
<arg choice="plain"><replaceable>CUSTOM-CHARACTERS</replaceable></arg>
</term>
<listitem><para>
Number of Custom-Characters [default: Display-<command>Type</command> dependent].
</para></listitem> </para></listitem>
</varlistentry> </varlistentry>
@@ -204,7 +368,7 @@ You can activate two different testmodes with them.
</term> </term>
<listitem><para> <listitem><para>
Specifies the size of the VFD. Specifies the size of the VFD.
default: <literal>20x2</literal> [default: <literal>20x2</literal>]
</para></listitem> </para></listitem>
</varlistentry> </varlistentry>
@@ -247,7 +411,7 @@ You can activate two different testmodes with them.
</tgroup> </tgroup>
</informaltable> </informaltable>
<note><para> <note><para>
Options 3 and 4 should work, but have not been tested yet. Feedback is welcome. Noritake VFDs have not been tested yet. Feedback is welcome.
</para></note> </para></note>
</listitem> </listitem>
</varlistentry> </varlistentry>
@@ -258,9 +422,21 @@ You can activate two different testmodes with them.
<arg choice="plain"><replaceable>BRIGHTNESS</replaceable></arg> <arg choice="plain"><replaceable>BRIGHTNESS</replaceable></arg>
</term> </term>
<listitem><para> <listitem><para>
Display brightness [default: 255]. Set the initial brightness [default: 1000; legal: 0 - 1000]
0 min ... 255 max ... 1000 also max (4 steps 0-250, 251-500, 501-750, 751-1000)
(4 steps 0-64, 65-128, 129-192, 193-1000) </para></listitem>
</varlistentry>
<varlistentry>
<term>
<command>OffBrightness=</command>
<arg choice="plain"><replaceable>OFFBRIGHTNESS</replaceable></arg>
</term>
<listitem><para>
Set the initial off-brightness [default: 0; legal: 0 - 1000].
This value is used when the display is normally
switched off in case LCDd is inactive.
(4 steps 0-250, 251-500, 501-750, 751-1000)
</para></listitem> </para></listitem>
</varlistentry> </varlistentry>
@@ -279,7 +455,7 @@ You can activate two different testmodes with them.
</term> </term>
<listitem><para> <listitem><para>
Set the the baud rate communication with the VFD. Set the the baud rate communication with the VFD.
If not given, it defaults to <literal>9600</literal>. If not given [default <literal>9600</literal>].
</para></listitem> </para></listitem>
</varlistentry> </varlistentry>
@@ -294,7 +470,7 @@ You can activate two different testmodes with them.
</arg> </arg>
</term> </term>
<listitem><para> <listitem><para>
Enable ISO-8859-1 compatibility. Ddefault is <literal>yes</literal>. Enable ISO-8859-1 compatibility [default is <literal>yes</literal>].
</para></listitem> </para></listitem>
</varlistentry> </varlistentry>
</variablelist> </variablelist>
+1 -1
View File
@@ -80,7 +80,7 @@ NoritakeVFD_SOURCES = lcd.h lcd_lib.h NoritakeVFD.c NoritakeVFD.h report.h
pyramid_SOURCES = lcd.h pylcd.c pylcd.h pyramid_SOURCES = lcd.h pylcd.c pylcd.h
sed1330_SOURCES = lcd.h sed1330.h sed1330.c port.h lpt-port.h timing.h report.h sed1330_SOURCES = lcd.h sed1330.h sed1330.c port.h lpt-port.h timing.h report.h
sed1520_SOURCES = lcd.h sed1520.c sed1520.h sed1520fm.c sed1520fm.h port.h report.h sed1520_SOURCES = lcd.h sed1520.c sed1520.h sed1520fm.c sed1520fm.h port.h report.h
serialVFD_SOURCES = lcd.h lcd_lib.h serialVFD.c serialVFD.h report.h adv_bignum.h serialVFD_SOURCES = lcd.h lcd_lib.h serialVFD.c serialVFD.h report.h adv_bignum.h serialVFD_displays.c serialVFD_displays.h serialVFD_io.c serialVFD_io.h
stv5730_SOURCES = lcd.h stv5730.c stv5730.h report.h stv5730_SOURCES = lcd.h stv5730.c stv5730.h report.h
svga_SOURCES = lcd.h svgalib_drv.c svgalib_drv.h report.h svga_SOURCES = lcd.h svgalib_drv.c svgalib_drv.h report.h
t6963_SOURCES = lcd.h lcd_lib.h t6963.c t6963.h t6963_font.h report.h t6963_SOURCES = lcd.h lcd_lib.h t6963.c t6963.h t6963_font.h report.h
+190 -571
View File
File diff suppressed because it is too large Load Diff
+38 -1
View File
@@ -6,7 +6,7 @@
driver. driver.
It may contain parts of other drivers of this package too. It may contain parts of other drivers of this package too.
2006-02-13 Version 0.2: everything should work (not all hardware tested!) 2006-05-16 Version 0.3: everything should work (not all hardware tested!)
This program is free software; you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -26,6 +26,8 @@
#define SERIALVFD_H #define SERIALVFD_H
#include "lcd.h" #include "lcd.h"
#include "adv_bignum.h" #include "adv_bignum.h"
#include "serialVFD_displays.h"
#include "serialVFD_io.h"
#define CCMODE_STANDARD 0 /* only char 0 is used for heartbeat */ #define CCMODE_STANDARD 0 /* only char 0 is used for heartbeat */
#define CCMODE_VBAR 1 #define CCMODE_VBAR 1
@@ -63,8 +65,43 @@ MODULE_EXPORT void serialVFD_set_char (Driver *drvthis, int n, unsigned char *da
MODULE_EXPORT int serialVFD_get_brightness (Driver *drvthis, int state); MODULE_EXPORT int serialVFD_get_brightness (Driver *drvthis, int state);
MODULE_EXPORT void serialVFD_set_brightness (Driver *drvthis, int state, int promille); MODULE_EXPORT void serialVFD_set_brightness (Driver *drvthis, int state, int promille);
MODULE_EXPORT void serialVFD_backlight (Driver *drvthis, int on);
MODULE_EXPORT void serialVFD_output (Driver *drvthis, int state); MODULE_EXPORT void serialVFD_output (Driver *drvthis, int state);
MODULE_EXPORT void serialVFD_num (Driver * drvthis, int x, int num); MODULE_EXPORT void serialVFD_num (Driver * drvthis, int x, int num);
MODULE_EXPORT int serialVFD_get_free_chars (Driver *drvthis); MODULE_EXPORT int serialVFD_get_free_chars (Driver *drvthis);
MODULE_EXPORT const char * serialVFD_get_info( Driver *drvthis ); MODULE_EXPORT const char * serialVFD_get_info( Driver *drvthis );
typedef struct driver_private_data {
int use_parallel; // use parallel?
unsigned int port; // Port in parallel mode
char device[200]; // Device in serial mode
int fd;
int speed; // Speed in serial mode
/* dimensions */
int width, height;
int cellwidth, cellheight;
/* framebuffer and buffer for old LCD contents */
unsigned char *framebuf;
unsigned char *backingstore;
/* defineable characters */
int ccmode;
int on_brightness;
int off_brightness;
int hw_brightness;
int customchars;
int ISO_8859_1;
unsigned int refresh_timer;
unsigned char charmap[128];
int display_type; // display type
int last_custom; // last custom character written
char custom_char[31][7]; // stored custom characters
char custom_char_store[31][7]; // custom characters backingstore
char hw_cmd[10][4]; // hardwarespecific commands
int usr_chr_dot_assignment[57]; // how to setup usercharacters
unsigned int usr_chr_mapping[31];// where to place the usercharacters (0..30) in the asciicode
int hbar_cc_offset; // character offset of the bars
int vbar_cc_offset; // character offset of the bars
char info[255];
} PrivateData;
#endif #endif