diff --git a/docs/lcdproc-user/drivers/serialVFD.docbook b/docs/lcdproc-user/drivers/serialVFD.docbook index 3b9146f..202e827 100644 --- a/docs/lcdproc-user/drivers/serialVFD.docbook +++ b/docs/lcdproc-user/drivers/serialVFD.docbook @@ -82,7 +82,15 @@ The driver should operate most of NEC, Futaba and Noritake 7x5 dot VFDs with No - + + Samsung 20S204DA2 + ? + Ok + Ok + Yes + The display is FUTABA compatible (hard and software). Set Custom-Characters=0 + in LCDd.conf. + Noritake CU20026SCPB-T @@ -197,14 +205,14 @@ optional CN1: CN2: @@ -241,6 +249,20 @@ You can activate two different testmodes with them. + +FUTABA Displays (M402SD06GJ): + + + @@ -256,7 +278,7 @@ You can activate two different testmodes with them. 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 ]]> CN2: @@ -291,7 +313,7 @@ Pin 2 <--- 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 diff --git a/server/drivers/serialVFD.c b/server/drivers/serialVFD.c index f0b98ba..0ae8554 100644 --- a/server/drivers/serialVFD.c +++ b/server/drivers/serialVFD.c @@ -320,8 +320,13 @@ serialVFD_vbar (Driver *drvthis, int x, int y, int len, int promille, int option { 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, int y, int len, int promille, int option { 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, int y, int icon) 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 diff --git a/server/drivers/serialVFD.h b/server/drivers/serialVFD.h index f4a09da..311c167 100644 --- a/server/drivers/serialVFD.h +++ b/server/drivers/serialVFD.h @@ -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]; diff --git a/server/drivers/serialVFD_displays.c b/server/drivers/serialVFD_displays.c index be74ed7..ddf3a27 100644 --- a/server/drivers/serialVFD_displays.c +++ b/server/drivers/serialVFD_displays.c @@ -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++)