configuration option ConnectionType for sed1330 (Benjamin Wiedmann)
This commit is contained in:
@@ -24,7 +24,7 @@ v.0.5dev (ongoing development)
|
||||
* make Brightness & OffBrightness run-time configurable in CFontz & MtxOrb
|
||||
* add support for Iface and ProcSize screens for OS X / Darwin (Eric Pooch)
|
||||
* update & fix serialVFD driver (Stefan Herdler)
|
||||
+ Hitachi SP14Q002 support & another connection type to sed1330 (Benjamin Wiedmann)
|
||||
+ Hitachi SP14Q002 support & ConnectionType setting for sed1330 (Benjamin Wiedmann)
|
||||
* replace obsolete index() by strchr() (Guillaume LECERF)
|
||||
|
||||
v.0.5.1
|
||||
|
||||
@@ -701,9 +701,12 @@ Port=0x378
|
||||
# Note: Currently only tested with G321D & SP14Q002.
|
||||
Type=G321D
|
||||
|
||||
# Width x Height of a character cell in pixels (legal: 6x7 - 8x16; default: 6x10)
|
||||
# Width x Height of a character cell in pixels [legal: 6x7 - 8x16; default: 6x10]
|
||||
CellSize=6x10
|
||||
|
||||
# Select what type of connection [legal: classic, bitshaker; default: classic]
|
||||
ConnectionType=classic
|
||||
|
||||
|
||||
## Seiko Epson 1520 driver ##
|
||||
[sed1520]
|
||||
|
||||
@@ -6,13 +6,9 @@ Please send a message to the mailing list if you have any question.
|
||||
|
||||
Things for the short term:
|
||||
- Use centralized command message parsing engine (more secure)
|
||||
- allow bignum library to use user-defined characters different
|
||||
from 0 - N but from M - (M+N)
|
||||
- more features for existing display drivers
|
||||
(e.g. adapt them to bignum library)
|
||||
- documentation (any help is appreciated)
|
||||
- ConnectionType configuration parameter for the sed1330 driver to
|
||||
distinguish between the default and bitshaker (a.k.a. yasedw) wiring
|
||||
|
||||
Things for the longer term:
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ the connections given here are also correct for your display !
|
||||
</para>
|
||||
|
||||
|
||||
Ordered by LCD pins
|
||||
ConnectionType <literal>classic</literal> ordered by LCD pins
|
||||
<screen>
|
||||
<![CDATA[
|
||||
LCD pin? <---> pin LPT port
|
||||
@@ -52,7 +52,7 @@ the connections given here are also correct for your display !
|
||||
]]>
|
||||
</screen>
|
||||
|
||||
Or ordered by the LPT port pins:
|
||||
ConnectionType <literal>classic</literal> ordered by LPT port pins
|
||||
<screen>
|
||||
<![CDATA[
|
||||
LCD pin? <---> pin LPT port
|
||||
@@ -172,6 +172,48 @@ use the following circuit.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
<command>ConnectionType=</command>
|
||||
<arg choice="plain">
|
||||
<group choice="req">
|
||||
<arg choice="plain"><literal><emphasis>classic</emphasis></literal></arg>
|
||||
<arg choice="plain"><literal>bitshaker</literal></arg>
|
||||
</group>
|
||||
</arg>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Select the type of the wiring.
|
||||
</para>
|
||||
|
||||
<informaltable>
|
||||
<tgroup cols="2">
|
||||
<thead>
|
||||
<row>
|
||||
<entry>ConnectionType</entry>
|
||||
<entry>Wiring</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry><literal>classic</literal></entry>
|
||||
<entry>^WR = LPT pin 16, A0 = LPT pin 17, ^RESET = LPT pin 1</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>bitshaker</literal></entry>
|
||||
<entry>^WR = LPT pin 1, A0 = LPT pin 14, ^RESET = LPT pin 16</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</informaltable>
|
||||
|
||||
<para>
|
||||
If not given, it defaults to <literal>classic</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
<command>Port=</command>
|
||||
@@ -201,17 +243,57 @@ use the following circuit.
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Type of LCD module.
|
||||
Type of LCD module. Besised other things (internal setup) this configuration setting
|
||||
detrmines the size of the display in pixels.
|
||||
</para>
|
||||
|
||||
<informaltable>
|
||||
<tgroup cols="2">
|
||||
<thead>
|
||||
<row>
|
||||
<entry>Type</entry>
|
||||
<entry>Size (in pixels)</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry><literal>G321D</literal></entry>
|
||||
<entry>320 x 200</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>G121C</literal></entry>
|
||||
<entry>128 x 128</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>G242C</literal></entry>
|
||||
<entry>240 x 128</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>G191D</literal></entry>
|
||||
<entry>192 x 192</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>G2446</literal></entry>
|
||||
<entry>240 x 64</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>SP14Q002</literal></entry>
|
||||
<entry>320 x 240</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</informaltable>
|
||||
|
||||
<note><para>
|
||||
The G321D and SP14Q002 are the only ones that this driver is tested with currently.
|
||||
Currently the G321D and SP14Q002 are the only ones that this driver is tested with.
|
||||
</para></note>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<para>
|
||||
Contrary to other drivers the character size of an LCD is not given given directly.
|
||||
Contrary to other drivers the character size of an LCD using the sed1330i
|
||||
driver is not given directly.
|
||||
Instead it is determined by the pixel size of the display, which is derived from
|
||||
the display type setting and the character cell size.
|
||||
</para>
|
||||
|
||||
+61
-43
@@ -47,9 +47,14 @@
|
||||
* - built for parport version of this interface: Wallbraun Electronics lcdinterface
|
||||
* (specifications here: http://wallbraun-electronics.de/produkte/lcdinterface/index.html)
|
||||
* - wiring scheme used: "bitshaker" (called "yasedw" in serdisplib)
|
||||
* --> default wiring: wr=16; a0=17; rd=01; cs=14
|
||||
* --> yasedw wiring: wr=01; a0=14; rd=16; cs=17
|
||||
*
|
||||
* --> classic wiring: wr=16; a0=17; rd=01; cs=14
|
||||
* --> bitshaker wiring: wr=01; a0=14; rd=16; cs=17
|
||||
* December 2006, Benjamin Wiedmann (additional changes, fixup)
|
||||
* - wiring scheme can now be changed at run time using "ConnectionType" config parameter
|
||||
* in sed1330 driver section
|
||||
* Usage of ConnectionType in LCDd.conf:
|
||||
* ConnectionType=<classic|bitshaker>
|
||||
* - if no ConnectionType is set it defaults to "classic" wiring
|
||||
*
|
||||
* IMPORTANT: MODULES OTHER THAN G321D
|
||||
* ===================================
|
||||
@@ -187,6 +192,11 @@
|
||||
* type=G191D
|
||||
* type=G2446
|
||||
* type=SP14Q002
|
||||
*
|
||||
* You can also change the wiring scheme by using the ConnectionType= option:
|
||||
* ConnectionType=<classic|bitshaker>
|
||||
* If not set, classic wiring is used.
|
||||
*
|
||||
* The port= value should be set to the LPT port address that the LCD is
|
||||
* connected to. Examples:
|
||||
* port=0x378
|
||||
@@ -218,35 +228,6 @@
|
||||
#define KEYPAD_AUTOREPEAT_DELAY 500
|
||||
#define KEYPAD_AUTOREPEAT_FREQ 15
|
||||
|
||||
// LPT lines
|
||||
|
||||
// should we use the bitshaker wiring?
|
||||
//#define WIRING_BITSHAKER
|
||||
|
||||
#ifdef WIRING_BITSHAKER
|
||||
|
||||
// use BITSHAKER / YASEDW wiring
|
||||
|
||||
// pin 14
|
||||
#define A0 nLF
|
||||
// pin 16
|
||||
#define nRESET INIT
|
||||
// pin 1
|
||||
#define nWR STRB
|
||||
|
||||
#else
|
||||
|
||||
// use default wiring
|
||||
|
||||
// pin 17
|
||||
#define A0 SEL
|
||||
// pin 1
|
||||
#define nRESET STRB
|
||||
// pin 16
|
||||
#define nWR INIT
|
||||
|
||||
#endif
|
||||
|
||||
// Command definitions
|
||||
#define CMD_SYSTEM_SET 0x40
|
||||
#define CMD_SLEEP_IN 0x53
|
||||
@@ -283,12 +264,23 @@
|
||||
#define SCR2_H 0x06
|
||||
|
||||
typedef struct p {
|
||||
|
||||
// display type
|
||||
int type;
|
||||
|
||||
// wiring scheme variables to be set by sed1330_init()
|
||||
int A0;
|
||||
int nRESET;
|
||||
int nWR;
|
||||
|
||||
// which lpt port to use
|
||||
int port;
|
||||
|
||||
unsigned char * framebuf_text;
|
||||
unsigned char * lcd_contents_text;
|
||||
unsigned char * framebuf_graph;
|
||||
unsigned char * lcd_contents_graph;
|
||||
|
||||
int width, height;
|
||||
int cellwidth, cellheight;
|
||||
int graph_width, graph_height;
|
||||
@@ -309,7 +301,6 @@ typedef struct p {
|
||||
struct timeval pressed_key_time;
|
||||
|
||||
int stuckinputs;
|
||||
|
||||
} PrivateData;
|
||||
|
||||
static char *defaultKeyMapDirect[KEYPAD_MAXX] = { "Enter", "Up", "Down", "Escape", "F1" };
|
||||
@@ -422,6 +413,33 @@ sed1330_init( Driver * drvthis )
|
||||
}
|
||||
report(RPT_INFO, "%s: Using LCD type %s", drvthis->name, s);
|
||||
|
||||
// Set wiring scheme to be used
|
||||
//
|
||||
// Valid ConnectionTypes:
|
||||
// - classic (default)
|
||||
// - bitshaker
|
||||
//
|
||||
// Get ConnectionType, if no type is set, default to "classic" wiring so it even
|
||||
// works with config files missing that ConnectionType entry in sed1330 driver section
|
||||
s = drvthis->config_get_string(drvthis->name, "ConnectionType", 0, "classic");
|
||||
|
||||
// Set wiring initialization parameters based on ConnectionType
|
||||
if (strcmp(s, "classic") == 0) {
|
||||
// Use classic wiring
|
||||
p->A0 = SEL; // port 17
|
||||
p->nRESET = STRB; // port 1
|
||||
p->nWR = INIT; // port 16
|
||||
} else if(strcmp(s, "bitshaker") == 0) {
|
||||
// Use bitshaker wiring
|
||||
p->A0 = nLF; // port 14
|
||||
p->nRESET = INIT; // port 16
|
||||
p->nWR = STRB; // port 1
|
||||
} else {
|
||||
report(RPT_ERR, "%s: Unknown ConnectionType %s", drvthis->name, s);
|
||||
return -1;
|
||||
}
|
||||
report(RPT_INFO, "%s: Using ConnectionType %s", drvthis->name, s);
|
||||
|
||||
// Keypad ?
|
||||
p->have_keypad = drvthis->config_get_bool(drvthis->name, "keypad", 0, 0);
|
||||
|
||||
@@ -523,12 +541,12 @@ sed1330_init( Driver * drvthis )
|
||||
// INITIALIZE THE LCD
|
||||
// End reset-state
|
||||
debug(RPT_DEBUG, "%s: initializing LCD", __FUNCTION__);
|
||||
port_out(p->port+2, (nWR) ^ OUTMASK); // raise ^RD and ^WR
|
||||
port_out(p->port+2, (nRESET|nWR) ^ OUTMASK); // lower RESET
|
||||
port_out(p->port+2, (p->nWR) ^ OUTMASK); // raise ^RD and ^WR
|
||||
port_out(p->port+2, (p->nRESET|p->nWR) ^ OUTMASK); // lower RESET
|
||||
uPause(200);
|
||||
port_out(p->port+2, (nWR) ^ OUTMASK); // raise RESET
|
||||
port_out(p->port+2, (p->nWR) ^ OUTMASK); // raise RESET
|
||||
uPause(200);
|
||||
port_out(p->port+2, (nRESET|nWR) ^ OUTMASK); // lower RESET
|
||||
port_out(p->port+2, (p->nRESET|p->nWR) ^ OUTMASK); // lower RESET
|
||||
uPause(4000);
|
||||
|
||||
switch (p->type) {
|
||||
@@ -596,16 +614,16 @@ sed1330_command( PrivateData * p, char command, int datacount, unsigned char * d
|
||||
int i;
|
||||
int port = p->port;
|
||||
|
||||
port_out(port+2, (nRESET|nWR|A0) ^ OUTMASK); // set A0 to indicate command
|
||||
port_out(port+2, (p->nRESET|p->nWR|p->A0) ^ OUTMASK); // set A0 to indicate command
|
||||
port_out(port, command); // set up p
|
||||
port_out(port+2, (nRESET|A0) ^ OUTMASK); // activate ^WR
|
||||
port_out(port+2, (nRESET|nWR|A0) ^ OUTMASK); // deactivate ^WR again
|
||||
port_out(port+2, (nRESET|nWR) ^ OUTMASK); // clear A0 to indicate p
|
||||
port_out(port+2, (p->nRESET|p->A0) ^ OUTMASK); // activate ^WR
|
||||
port_out(port+2, (p->nRESET|p->nWR|p->A0) ^ OUTMASK); // deactivate ^WR again
|
||||
port_out(port+2, (p->nRESET|p->nWR) ^ OUTMASK); // clear A0 to indicate p
|
||||
|
||||
for (i = 0; i < datacount; i++) {
|
||||
port_out(port, data[i]); // set up data
|
||||
port_out(port+2, (nRESET) ^ OUTMASK); // activate ^WR
|
||||
port_out(port+2, (nRESET|nWR) ^ OUTMASK); // deactivate ^WR again
|
||||
port_out(port+2, (p->nRESET) ^ OUTMASK); // activate ^WR
|
||||
port_out(port+2, (p->nRESET|p->nWR) ^ OUTMASK); // deactivate ^WR again
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user