[Lcdproc] serialVFD update

Stefan Herdler herdler@gmx.de
Sun Aug 13 23:42:02 2006


This is a multi-part message in MIME format.
--------------030305020108040402090404
Content-Type: text/plain; charset=ISO-8859-15; format=flowed
Content-Transfer-Encoding: 7bit

Hallo,

here is the next update for the  serialVFD-driver.

Changes since last version:
- The driver has been successfully tested with the* *Samsung 20S204DA2* 
*VFD.
- Improvements in the support of displays without usercharacters.
- Update of the documentation.

Regards,
Stefan


--------------030305020108040402090404
Content-Type: text/plain;
 name="serialVFD.docbook.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="serialVFD.docbook.diff"

--- ../../../../cvs/lcdproc/docs/lcdproc-user/drivers/serialVFD.docbook	2006-06-18 19:28:57.000000000 +0200
+++ ./serialVFD.docbook	2006-08-13 23:15:49.000000000 +0200
@@ -82,7 +82,15 @@ The driver should operate most of NEC, F
       <entry>No</entry>
       <entry> </entry>
     </row>
-
+  <row>
+      <entry>Samsung 20S204DA2</entry>
+      <entry>?</entry>
+      <entry>Ok</entry>
+      <entry>Ok</entry>
+      <entry>Yes</entry>
+      <entry>The display is FUTABA compatible (hard and software). Set <command>Custom-Characters=0</command>
+ in <filename>LCDd.conf.</filename> </entry>
+    </row>
 
     <row>
       <entry>Noritake CU20026SCPB-T</entry>
@@ -197,14 +205,14 @@ optional
 
 <para>CN1:</para>
 <screen><![CDATA[
-Pin 33 &lt;--- RxD
+Pin 33 ------- RxD
 (Testmode: connect pins 25 and 26, then power up)
 ]]></screen>
 
 <para>CN2:</para>
 <screen><![CDATA[
-Pin 1  &lt;--- +5V
-Pin 2  &lt;--- GND
+Pin 1  ------- +5V
+Pin 2  ------- GND
 ]]></screen>
 </sect4>
 
@@ -241,6 +249,20 @@ You can activate two different testmodes
 </screen>
 </sect4>
 
+<sect4 id="serialVFD-serial-connections-FUTABA">
+<title>FUTABA Displays (M402SD06GJ):</title>
+<screen><![CDATA[Pin 2   ------ +5V
+Pin 4   ------ +5V
+Pin 6   ------ +5V
+
+Pin 10  ------ GND
+Pin 12  ------ GND
+Pin 14  ------ GND
+
+Pin 19  ------ RxD
+]]></screen>
+</sect4>
+
 
 </sect3>
 
@@ -256,7 +278,7 @@ You can activate two different testmodes
 parallel Port:			Display (NEC):
 Pin: 	Name:			Name:   Pin:
 
-1	/STROBE --------------	/WR	1
+1	/STROBE --------------	/WR	17
 2	D0      --------------	D0	15
 3	D1      --------------	D1	13
 4	D2      --------------	D2	11
@@ -280,8 +302,8 @@ optional
 ]]></screen>
 <para>CN2:</para>
 <screen><![CDATA[
-Pin 1  &lt;--- +5V
-Pin 2  &lt;--- GND
+Pin 1  ------ +5V
+Pin 2  ------ GND
 ]]></screen>
 </sect4>
 
@@ -291,7 +313,7 @@ Pin 2  &lt;--- GND
 parallel Port:			Display (FUTABA):
 Pin: 	Name:			Name:   Pin:
 
-1	/STROBE --------------	/WR	1
+1	/STROBE --------------	/WR	17
 2	D0      --------------	D0	15
 3	D1      --------------	D1	13
 4	D2      --------------	D2	11

--------------030305020108040402090404
Content-Type: text/plain;
 name="serialvfd_bars_patch.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="serialvfd_bars_patch.diff"

--- ../cvs/lcdproc/server/drivers/serialVFD.c	2006-06-21 23:25:45.000000000 +0200
+++ ./server/drivers/serialVFD.c	2006-07-31 02:01:35.000000000 +0200
@@ -320,8 +320,13 @@ serialVFD_vbar (Driver *drvthis, int x, 
 {
 	PrivateData *p = drvthis->private_data;
 
-	serialVFD_init_vbar(drvthis);
-	lib_vbar_static(drvthis, x, y, len, promille, options, p->cellheight, p->vbar_cc_offset);
+	if (p->customchars >= p->cellheight || p->predefined_vbar == 1){
+		serialVFD_init_vbar(drvthis);
+		lib_vbar_static(drvthis, x, y, len, promille, options, p->cellheight, p->vbar_cc_offset);
+	}
+	else{
+		lib_vbar_static(drvthis, x, y, len, promille, options, 2, 0x5E);
+	}
 }
 
 /////////////////////////////////////////////////////////////////
@@ -333,9 +338,13 @@ serialVFD_hbar (Driver *drvthis, int x, 
 {
 	PrivateData *p = drvthis->private_data;
 
-	serialVFD_init_hbar(drvthis);
-	lib_hbar_static(drvthis, x, y, len, promille, options, p->cellwidth, p->hbar_cc_offset);
-
+	if (p->customchars >= p->cellwidth || p->predefined_hbar == 1){
+		serialVFD_init_hbar(drvthis);
+		lib_hbar_static(drvthis, x, y, len, promille, options, p->cellwidth, p->hbar_cc_offset);
+	}
+	else{
+		lib_hbar_static(drvthis, x, y, len, promille, options, 2, 0x2C);
+	}
 }
 
 
@@ -534,14 +543,22 @@ serialVFD_icon (Driver *drvthis, int x, 
 			serialVFD_chr(drvthis, x, y, 127);
 			break;
 		case ICON_HEART_FILLED:
-		        p->ccmode = CCMODE_STANDARD;
-			serialVFD_set_char(drvthis, 0, heart_filled);
-			serialVFD_chr(drvthis, x, y, 0);
+			if (p->customchars > 0){
+		        	p->ccmode = CCMODE_STANDARD;
+				serialVFD_set_char(drvthis, 0, heart_filled);
+				serialVFD_chr(drvthis, x, y, 0);
+			}
+			else
+				serialVFD_icon(drvthis, x, y, ICON_BLOCK_FILLED);
 			break;
 		case ICON_HEART_OPEN:
-		        p->ccmode = CCMODE_STANDARD;
-			serialVFD_set_char(drvthis, 0, heart_open);
-			serialVFD_chr(drvthis, x, y, 0);
+			if (p->customchars > 0){
+				p->ccmode = CCMODE_STANDARD;
+				serialVFD_set_char(drvthis, 0, heart_open);
+				serialVFD_chr(drvthis, x, y, 0);
+			}
+			else
+				serialVFD_chr(drvthis, x, y, 0x23);
 			break;
 		default:
 			return -1; // Let the core do other icons
--- ../cvs/lcdproc/server/drivers/serialVFD.h	2006-05-20 16:38:18.000000000 +0200
+++ ./server/drivers/serialVFD.h	2006-07-29 23:47:36.000000000 +0200
@@ -89,6 +89,8 @@ typedef struct driver_private_data {
 	int off_brightness;
 	int hw_brightness;
 	int customchars;
+	int predefined_hbar;
+	int predefined_vbar;
 	int ISO_8859_1;
 	unsigned int refresh_timer;
 	unsigned char charmap[128];
--- ../cvs/lcdproc/server/drivers/serialVFD_displays.c	2006-06-21 23:25:45.000000000 +0200
+++ ./server/drivers/serialVFD_displays.c	2006-07-30 00:10:52.000000000 +0200
@@ -70,6 +70,8 @@ serialVFD_load_NEC_FIPC (Driver *drvthis
 				p->customchars=1;	// number of custom characters the display provides
 			p->vbar_cc_offset=5;	// character offset of the bars
 			p->hbar_cc_offset=12;	// character offset of the bars
+			p->predefined_hbar=1;   // the display has predefined hbar-characters
+			p->predefined_vbar=1;   // the display has predefined vbar-characters
 
 			// hardwarespecific commands:
 			//  hw_cmd[Command][data]  = 	{{commandlength , command 1},
@@ -145,6 +147,8 @@ serialVFD_load_KD (Driver *drvthis)
 				p->customchars=31;	// number of custom characters the display provides
 			p->vbar_cc_offset=0;	// character offset of the bars
 			p->hbar_cc_offset=0;	// character offset of the bars
+			p->predefined_hbar=0;   // the display has predefined hbar-characters
+			p->predefined_vbar=0;   // the display has predefined vbar-characters
 
 			// hardwarespecific commands:
 			//  hw_cmd[Command][data]  = 	{{commandlength , command 1},
@@ -220,6 +224,8 @@ serialVFD_load_Noritake (Driver *drvthis
 				p->customchars=16;	// number of custom characters the display provides
 			p->vbar_cc_offset=0;	// character offset of the bars
 			p->hbar_cc_offset=0;	// character offset of the bars
+			p->predefined_hbar=0;   // the display has predefined hbar-characters
+			p->predefined_vbar=0;   // the display has predefined vbar-characters
 
 			// hardwarespecific commands:
 			//  hw_cmd[Command][data]  = 	{{commandlength , command 1},
@@ -269,8 +275,10 @@ serialVFD_load_Futaba (Driver *drvthis)
 
 			if (p->customchars == -83)
 				p->customchars=3;	// number of custom characters the display provides
-			p->vbar_cc_offset=0x30;	// character offset of the bars
-			p->hbar_cc_offset=0x30;	// character offset of the bars
+			p->vbar_cc_offset=0;	// character offset of the bars
+			p->hbar_cc_offset=0;	// character offset of the bars
+			p->predefined_hbar=0;   // the display has predefined hbar-characters
+			p->predefined_vbar=0;   // the display has predefined vbar-characters

 			// hardwarespecific commands:
 			//  hw_cmd[Command][data]  = 	{{commandlength , command 1},
@@ -283,7 +291,7 @@ serialVFD_load_Futaba (Driver *drvthis)
 						{2	,0x10, 0x00},	// pos1
 						{1	,0x10,},	// move cursor
 						{1	,0x1F},		// reset
-						{1	,0x11},  	// init
+						{2	,0x11,0x14},  	// init
 						{1	,0x03}, 	// set user char
 						{1	,0x09}}; 	// tab
 			for (tmp=0;tmp < (10) ;tmp++)

--------------030305020108040402090404--