corrected typo introduced yesterday; add bignum support for the 20x4 displays (e.g. CF635)
This commit is contained in:
+194
-16
@@ -266,7 +266,7 @@ CFontz633_init (Driver *drvthis, char *args)
|
|||||||
}
|
}
|
||||||
p->offbrightness = tmp;
|
p->offbrightness = tmp;
|
||||||
|
|
||||||
/* Which speed CF633 support 19200 only, CF631USB use 115200. */
|
/* Which speed ? CF633 support 19200 only, CF631 & CF635 USB use 115200. */
|
||||||
tmp = drvthis->config_get_int (drvthis->name, "Speed", 0, DEFAULT_SPEED);
|
tmp = drvthis->config_get_int (drvthis->name, "Speed", 0, DEFAULT_SPEED);
|
||||||
debug (RPT_INFO,"CFontzPacket_init: Speed (in config) is '%d'", tmp);
|
debug (RPT_INFO,"CFontzPacket_init: Speed (in config) is '%d'", tmp);
|
||||||
if (tmp == 19200) speed = B19200;
|
if (tmp == 19200) speed = B19200;
|
||||||
@@ -679,7 +679,7 @@ CFontz633_backlight (Driver *drvthis, int on)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* OK631
|
/*
|
||||||
* Get rid of the blinking curson
|
* Get rid of the blinking curson
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
@@ -720,7 +720,7 @@ CFontz633_no_fan_report (Driver *drvthis)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* KO631
|
/*
|
||||||
* Stop the reporting of any temperature.
|
* Stop the reporting of any temperature.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
@@ -734,7 +734,7 @@ CFontz633_no_temp_report (Driver *drvthis)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* OK631
|
/*
|
||||||
* Reset the display bios
|
* Reset the display bios
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
@@ -969,20 +969,198 @@ CFontz633_hbar (Driver *drvthis, int x, int y, int len, int promille, int option
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Inits big numbers
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
CFontz633_init_num(Driver *drvthis)
|
||||||
|
{
|
||||||
|
PrivateData *p = drvthis->private_data;
|
||||||
|
|
||||||
|
char bignum_ccs[8][CELLWIDTH*CELLHEIGHT] = {
|
||||||
|
{ 1, 1, 1, 0, 0, 0,
|
||||||
|
1, 1, 1, 0, 0, 0,
|
||||||
|
1, 1, 1, 0, 0, 0,
|
||||||
|
1, 1, 1, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0 },
|
||||||
|
|
||||||
|
{ 0, 0, 0, 1, 1, 1,
|
||||||
|
0, 0, 0, 1, 1, 1,
|
||||||
|
0, 0, 0, 1, 1, 1,
|
||||||
|
0, 0, 0, 1, 1, 1,
|
||||||
|
1, 1, 1, 0, 0, 0,
|
||||||
|
1, 1, 1, 0, 0, 0,
|
||||||
|
1, 1, 1, 0, 0, 0,
|
||||||
|
1, 1, 1, 0, 0, 0 },
|
||||||
|
|
||||||
|
{ 1, 1, 1, 1, 1, 1,
|
||||||
|
1, 1, 1, 1, 1, 1,
|
||||||
|
1, 1, 1, 1, 1, 1,
|
||||||
|
1, 1, 1, 1, 1, 1,
|
||||||
|
0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0 },
|
||||||
|
|
||||||
|
{ 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0,
|
||||||
|
1, 1, 1, 0, 0, 0,
|
||||||
|
1, 1, 1, 0, 0, 0,
|
||||||
|
1, 1, 1, 0, 0, 0,
|
||||||
|
1, 1, 1, 0, 0, 0 },
|
||||||
|
|
||||||
|
{ 1, 1, 1, 0, 0, 0,
|
||||||
|
1, 1, 1, 0, 0, 0,
|
||||||
|
1, 1, 1, 0, 0, 0,
|
||||||
|
1, 1, 1, 0, 0, 0,
|
||||||
|
0, 0, 0, 1, 1, 1,
|
||||||
|
0, 0, 0, 1, 1, 1,
|
||||||
|
0, 0, 0, 1, 1, 1,
|
||||||
|
0, 0, 0, 1, 1, 1 },
|
||||||
|
|
||||||
|
{ 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0,
|
||||||
|
1, 1, 1, 1, 1, 1,
|
||||||
|
1, 1, 1, 1, 1, 1,
|
||||||
|
1, 1, 1, 1, 1, 1,
|
||||||
|
1, 1, 1, 1, 1, 1 },
|
||||||
|
|
||||||
|
{ 1, 1, 1, 0, 0, 0,
|
||||||
|
1, 1, 1, 0, 0, 0,
|
||||||
|
1, 1, 1, 0, 0, 0,
|
||||||
|
1, 1, 1, 0, 0, 0,
|
||||||
|
1, 1, 1, 0, 0, 0,
|
||||||
|
1, 1, 1, 0, 0, 0,
|
||||||
|
1, 1, 1, 0, 0, 0,
|
||||||
|
1, 1, 1, 0, 0, 0 },
|
||||||
|
|
||||||
|
{ 0, 0, 0, 1, 1, 1,
|
||||||
|
0, 0, 0, 1, 1, 1,
|
||||||
|
0, 0, 0, 1, 1, 1,
|
||||||
|
0, 0, 0, 1, 1, 1,
|
||||||
|
0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
|
if (p->ccmode != bignum) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (p->ccmode != standard) {
|
||||||
|
/* Not supported (yet) */
|
||||||
|
report(RPT_WARNING, "CFontz633_init_num: Cannot combine two modes using user defined characters");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
p->ccmode = bignum;
|
||||||
|
|
||||||
|
for (i = 0; i < NUM_CCs; i++)
|
||||||
|
CFontz633_set_char(drvthis, i, bignum_ccs[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Writes a big number.
|
* Writes a big number.
|
||||||
* This is not supported on 633 because we only have 2 lines...
|
* Only works on 4-line displays
|
||||||
*/
|
*/
|
||||||
MODULE_EXPORT void
|
MODULE_EXPORT void
|
||||||
CFontz633_num (Driver *drvthis, int x, int num)
|
CFontz633_num(Driver *drvthis, int x, int num)
|
||||||
{
|
{
|
||||||
/*
|
PrivateData *p = drvthis->private_data;
|
||||||
PrivateData *p = drvthis->private_data;
|
|
||||||
unsigned char out[5];
|
|
||||||
|
|
||||||
snprintf (out, sizeof(out), "%c%c%c", 28, x, num);
|
/* each bignum is constructed in a 3 x 4 matrix and consists
|
||||||
write (p->fd, out, 3);
|
* of only the 8 characters defined above as well as ' '
|
||||||
*/
|
*
|
||||||
|
* The following table defines the 11 big numbers '0'-'9', ':'
|
||||||
|
* and the custom base characters they consist of
|
||||||
|
*/
|
||||||
|
char bignum_map[11][4][3] = {
|
||||||
|
{ /* 0: */
|
||||||
|
{ 1, 2, 3 },
|
||||||
|
{ 6, 32, 6 },
|
||||||
|
{ 6, 32, 6 },
|
||||||
|
{ 7, 2, 32 } },
|
||||||
|
{ /* 1: */
|
||||||
|
{ 7, 6, 32 },
|
||||||
|
{ 32, 6, 32 },
|
||||||
|
{ 32, 6, 32 },
|
||||||
|
{ 7, 2, 32 } },
|
||||||
|
{ /* 2: */
|
||||||
|
{ 1, 2, 3 },
|
||||||
|
{ 32, 5, 0 },
|
||||||
|
{ 1, 32, 32 },
|
||||||
|
{ 2, 2, 0 } },
|
||||||
|
{ /* 3: */
|
||||||
|
{ 1, 2, 3 },
|
||||||
|
{ 32, 5, 0 },
|
||||||
|
{ 3, 32, 6 },
|
||||||
|
{ 7, 2, 32 } },
|
||||||
|
{ /* 4: */
|
||||||
|
{ 32, 3, 6 },
|
||||||
|
{ 1, 32, 6 },
|
||||||
|
{ 2, 2, 6 },
|
||||||
|
{ 32, 32, 0 } },
|
||||||
|
{ /* 5: */
|
||||||
|
{ 1, 2, 0 },
|
||||||
|
{ 2, 2, 3 },
|
||||||
|
{ 3, 32, 6 },
|
||||||
|
{ 7, 2, 32 } },
|
||||||
|
{ /* 6: */
|
||||||
|
{ 1, 2, 32 },
|
||||||
|
{ 6, 5, 32 },
|
||||||
|
{ 6, 32, 6 },
|
||||||
|
{ 7, 2, 32 } },
|
||||||
|
{ /* 7: */
|
||||||
|
{ 2, 2, 6 },
|
||||||
|
{ 32, 1, 32 },
|
||||||
|
{ 32, 6, 32 },
|
||||||
|
{ 32, 0, 32 } },
|
||||||
|
{ /* 8: */
|
||||||
|
{ 1, 2, 3 },
|
||||||
|
{ 4, 5, 0 },
|
||||||
|
{ 6, 32, 6 },
|
||||||
|
{ 7, 2, 32 } },
|
||||||
|
{ /* 9: */
|
||||||
|
{ 1, 2, 3 },
|
||||||
|
{ 4, 3, 6 },
|
||||||
|
{ 32, 1, 32 },
|
||||||
|
{ 7, 32, 32 } },
|
||||||
|
{ /* colon: */
|
||||||
|
{ 32, 32, 32 },
|
||||||
|
{ 0, 32, 32 },
|
||||||
|
{ 0, 32, 32 },
|
||||||
|
{ 32, 32, 32 } }
|
||||||
|
};
|
||||||
|
|
||||||
|
if (num < 0 || num > 11)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ((p->width >= 20) && (p->height >= 4)) {
|
||||||
|
int y = (p->height - 2) / 2; /* center vertically */
|
||||||
|
int x2, y2;
|
||||||
|
|
||||||
|
CFontz633_init_num(drvthis);
|
||||||
|
|
||||||
|
for (x2 = 0; x2 <= 2; x2++) {
|
||||||
|
for (y2 = 0; y2 <= 3; y2++) {
|
||||||
|
CFontz633_chr(drvthis, x+x2, y+y2, bignum_map[num][y2][x2]);
|
||||||
|
}
|
||||||
|
if (num == 10)
|
||||||
|
x2 = 2; /* = break, for colon only */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
CFontz633_chr(drvthis, x, p->height / 2, (num >= 11) ? ':' : (num + '0'));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1191,7 +1369,7 @@ CFontz633_icon (Driver *drvthis, int x, int y, int icon)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* OK631
|
/*
|
||||||
* Clears the LCD screen
|
* Clears the LCD screen
|
||||||
*/
|
*/
|
||||||
MODULE_EXPORT void
|
MODULE_EXPORT void
|
||||||
@@ -1204,7 +1382,7 @@ CFontz633_clear (Driver *drvthis)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* OK631
|
/*
|
||||||
* Hardware clears the LCD screen
|
* Hardware clears the LCD screen
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
@@ -1216,7 +1394,7 @@ CFontz633_hardware_clear (Driver *drvthis)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* OK631
|
/*
|
||||||
* Prints a string on the lcd display, at position (x,y). The
|
* Prints a string on the lcd display, at position (x,y). The
|
||||||
* upper-left is (1,1), and the lower right should be (p->width, p->height).
|
* upper-left is (1,1), and the lower right should be (p->width, p->height).
|
||||||
*/
|
*/
|
||||||
@@ -1235,7 +1413,7 @@ CFontz633_string (Driver *drvthis, int x, int y, char string[])
|
|||||||
if ((y * p->width) + x + i > (p->width * p->height))
|
if ((y * p->width) + x + i > (p->width * p->height))
|
||||||
break;
|
break;
|
||||||
p->framebuf[(y * p->width) + x + i] = (p->model == 633)
|
p->framebuf[(y * p->width) + x + i] = (p->model == 633)
|
||||||
? c
|
? string[i]
|
||||||
: CFontz_charmap[(unsigned) string[i]];
|
: CFontz_charmap[(unsigned) string[i]];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user