set_char() based on bit array instead of char array

This commit is contained in:
marschap
2006-04-25 18:23:51 +00:00
parent f121223845
commit ce37984afc
2 changed files with 252 additions and 322 deletions
+251 -321
View File
@@ -76,6 +76,31 @@
#include "lcd_lib.h" #include "lcd_lib.h"
#include "CFontz-charmap.h" #include "CFontz-charmap.h"
#define b_______ 0x00
#define b_____X_ 0x03
#define b_____XX 0x03
#define b____X__ 0x04
#define b____XX_ 0x06
#define b____XXX 0x07
#define b___X___ 0x08
#define b___XX__ 0x09
#define b___X_X_ 0x0A
#define b___XXX_ 0x0E
#define b___XXXX 0x0F
#define b__X____ 0x10
#define b__X___X 0x11
#define b__X_X_X 0x15
#define b__X_XX_ 0x16
#define b__XX___ 0x18
#define b__XX_XX 0x1B
#define b__XXX__ 0x1C
#define b__XXX_X 0x1D
#define b__XXXX_ 0x1E
#define b__XXXXX 0x1F
#define b_XXX___ 0x38
#define b_XXXXXX 0x3F
#define CFP_KEY_UP 1 #define CFP_KEY_UP 1
#define CFP_KEY_DOWN 2 #define CFP_KEY_DOWN 2
#define CFP_KEY_LEFT 3 #define CFP_KEY_LEFT 3
@@ -848,78 +873,11 @@ static void
CFontzPacket_init_vbar (Driver *drvthis) CFontzPacket_init_vbar (Driver *drvthis)
{ {
PrivateData *p = drvthis->private_data; PrivateData *p = drvthis->private_data;
char a[] = {
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, 1, 1,
};
char b[] = {
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, 1, 1,
0, 1, 1, 1, 1, 1,
};
char c[] = {
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, 1, 1,
0, 1, 1, 1, 1, 1,
0, 1, 1, 1, 1, 1,
};
char d[] = {
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, 1, 1,
0, 1, 1, 1, 1, 1,
0, 1, 1, 1, 1, 1,
0, 1, 1, 1, 1, 1,
};
char e[] = {
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 1,
0, 1, 1, 1, 1, 1,
0, 1, 1, 1, 1, 1,
0, 1, 1, 1, 1, 1,
0, 1, 1, 1, 1, 1,
};
char f[] = {
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 1,
0, 1, 1, 1, 1, 1,
0, 1, 1, 1, 1, 1,
0, 1, 1, 1, 1, 1,
0, 1, 1, 1, 1, 1,
0, 1, 1, 1, 1, 1,
};
char g[] = {
0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 1,
0, 1, 1, 1, 1, 1,
0, 1, 1, 1, 1, 1,
0, 1, 1, 1, 1, 1,
0, 1, 1, 1, 1, 1,
0, 1, 1, 1, 1, 1,
0, 1, 1, 1, 1, 1,
};
if (p->ccmode != vbar) { if (p->ccmode != vbar) {
unsigned char vBar[p->cellheight];
int i;
if (p->ccmode != standard) { if (p->ccmode != standard) {
/* Not supported(yet) */ /* Not supported(yet) */
report(RPT_WARNING, "%s: init_vbar: cannot combine two modes using user defined characters", report(RPT_WARNING, "%s: init_vbar: cannot combine two modes using user defined characters",
@@ -928,13 +886,13 @@ CFontzPacket_init_vbar (Driver *drvthis)
} }
p->ccmode = vbar; p->ccmode = vbar;
CFontzPacket_set_char(drvthis, 1, a); memset(vBar, 0x00, sizeof(vBar));
CFontzPacket_set_char(drvthis, 2, b);
CFontzPacket_set_char(drvthis, 3, c); for (i = 1; i < p->cellheight; i++) {
CFontzPacket_set_char(drvthis, 4, d); // add pixel line per pixel line ...
CFontzPacket_set_char(drvthis, 5, e); vBar[p->cellheight - i] = 0xFF;
CFontzPacket_set_char(drvthis, 6, f); CFontzPacket_set_char(drvthis, i, vBar);
CFontzPacket_set_char(drvthis, 7, g); }
} }
} }
@@ -946,68 +904,11 @@ static void
CFontzPacket_init_hbar (Driver *drvthis) CFontzPacket_init_hbar (Driver *drvthis)
{ {
PrivateData *p = drvthis->private_data; PrivateData *p = drvthis->private_data;
char a[] = {
1, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0,
};
char b[] = {
1, 1, 0, 0, 0, 0,
1, 1, 0, 0, 0, 0,
1, 1, 0, 0, 0, 0,
1, 1, 0, 0, 0, 0,
1, 1, 0, 0, 0, 0,
1, 1, 0, 0, 0, 0,
1, 1, 0, 0, 0, 0,
1, 1, 0, 0, 0, 0,
};
char c[] = {
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,
};
char d[] = {
1, 1, 1, 1, 0, 0,
1, 1, 1, 1, 0, 0,
1, 1, 1, 1, 0, 0,
1, 1, 1, 1, 0, 0,
1, 1, 1, 1, 0, 0,
1, 1, 1, 1, 0, 0,
1, 1, 1, 1, 0, 0,
1, 1, 1, 1, 0, 0,
};
char e[] = {
1, 1, 1, 1, 1, 0,
1, 1, 1, 1, 1, 0,
1, 1, 1, 1, 1, 0,
1, 1, 1, 1, 1, 0,
1, 1, 1, 1, 1, 0,
1, 1, 1, 1, 1, 0,
1, 1, 1, 1, 1, 0,
1, 1, 1, 1, 1, 0,
};
char f[] = {
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, 1, 1, 1,
1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1,
};
if (p->ccmode != hbar) { if (p->ccmode != hbar) {
unsigned char hBar[p->cellheight];
int i;
if (p->ccmode != standard) { if (p->ccmode != standard) {
/* Not supported(yet) */ /* Not supported(yet) */
report(RPT_WARNING, "%s: init_hbar: cannot combine two modes using user defined characters", report(RPT_WARNING, "%s: init_hbar: cannot combine two modes using user defined characters",
@@ -1016,12 +917,13 @@ CFontzPacket_init_hbar (Driver *drvthis)
} }
p->ccmode = hbar; p->ccmode = hbar;
CFontzPacket_set_char(drvthis, 1, a); memset(hBar, 0x00, sizeof(hBar));
CFontzPacket_set_char(drvthis, 2, b);
CFontzPacket_set_char(drvthis, 3, c); for (i = 1; i <= p->cellwidth; i++) {
CFontzPacket_set_char(drvthis, 4, d); // fill pixel columns from left to right.
CFontzPacket_set_char(drvthis, 5, e); memset(hBar, 0xFF & ~((1 << (p->cellwidth - i)) - 1), sizeof(hBar)-1);
CFontzPacket_set_char(drvthis, 6, f); CFontzPacket_set_char(drvthis, i, hBar);
}
} }
} }
@@ -1072,78 +974,79 @@ CFontzPacket_init_num(Driver *drvthis)
{ {
PrivateData *p = drvthis->private_data; PrivateData *p = drvthis->private_data;
char bignum_ccs[8][CELLWIDTH*CELLHEIGHT] = { unsigned char bignum_ccs[8][CELLHEIGHT] = {
{ 1, 1, 1, 0, 0, 0, [0]
1, 1, 1, 0, 0, 0, { b_XXX___,
1, 1, 1, 0, 0, 0, b_XXX___,
1, 1, 1, 0, 0, 0, b_XXX___,
0, 0, 0, 0, 0, 0, b_XXX___,
0, 0, 0, 0, 0, 0, b_______,
0, 0, 0, 0, 0, 0, b_______,
0, 0, 0, 0, 0, 0 }, b_______,
b_______ },
{ 0, 0, 0, 1, 1, 1, [1]
0, 0, 0, 1, 1, 1, { b____XXX,
0, 0, 0, 1, 1, 1, b____XXX,
0, 0, 0, 1, 1, 1, b____XXX,
1, 1, 1, 0, 0, 0, b____XXX,
1, 1, 1, 0, 0, 0, b_XXX___,
1, 1, 1, 0, 0, 0, b_XXX___,
1, 1, 1, 0, 0, 0 }, b_XXX___,
b_XXX___ },
{ 1, 1, 1, 1, 1, 1, [2]
1, 1, 1, 1, 1, 1, { b_XXXXXX,
1, 1, 1, 1, 1, 1, b_XXXXXX,
1, 1, 1, 1, 1, 1, b_XXXXXX,
0, 0, 0, 0, 0, 0, b_XXXXXX,
0, 0, 0, 0, 0, 0, b_______,
0, 0, 0, 0, 0, 0, b_______,
0, 0, 0, 0, 0, 0 }, b_______,
b_______ },
{ 0, 0, 0, 0, 0, 0, [3]
0, 0, 0, 0, 0, 0, { b_______,
0, 0, 0, 0, 0, 0, b_______,
0, 0, 0, 0, 0, 0, b_______,
1, 1, 1, 0, 0, 0, b_______,
1, 1, 1, 0, 0, 0, b_XXX___,
1, 1, 1, 0, 0, 0, b_XXX___,
1, 1, 1, 0, 0, 0 }, b_XXX___,
b_XXX___ },
{ 1, 1, 1, 0, 0, 0, [4]
1, 1, 1, 0, 0, 0, { b_XXX___,
1, 1, 1, 0, 0, 0, b_XXX___,
1, 1, 1, 0, 0, 0, b_XXX___,
0, 0, 0, 1, 1, 1, b_XXX___,
0, 0, 0, 1, 1, 1, b____XXX,
0, 0, 0, 1, 1, 1, b____XXX,
0, 0, 0, 1, 1, 1 }, b____XXX,
b____XXX },
{ 0, 0, 0, 0, 0, 0, [5]
0, 0, 0, 0, 0, 0, { b_______,
0, 0, 0, 0, 0, 0, b_______,
0, 0, 0, 0, 0, 0, b_______,
1, 1, 1, 1, 1, 1, b_______,
1, 1, 1, 1, 1, 1, b_XXXXXX,
1, 1, 1, 1, 1, 1, b_XXXXXX,
1, 1, 1, 1, 1, 1 }, b_XXXXXX,
b_XXXXXX },
{ 1, 1, 1, 0, 0, 0, [6]
1, 1, 1, 0, 0, 0, { b_XXX___,
1, 1, 1, 0, 0, 0, b_XXX___,
1, 1, 1, 0, 0, 0, b_XXX___,
1, 1, 1, 0, 0, 0, b_XXX___,
1, 1, 1, 0, 0, 0, b_XXX___,
1, 1, 1, 0, 0, 0, b_XXX___,
1, 1, 1, 0, 0, 0 }, b_XXX___,
b_XXX___ },
{ 0, 0, 0, 1, 1, 1, [7]
0, 0, 0, 1, 1, 1, { b____XXX,
0, 0, 0, 1, 1, 1, b____XXX,
0, 0, 0, 1, 1, 1, b____XXX,
0, 0, 0, 0, 0, 0, b____XXX,
0, 0, 0, 0, 0, 0, b_______,
0, 0, 0, 0, 0, 0, b_______,
0, 0, 0, 0, 0, 0 } b_______,
b_______ }
}; };
if (p->ccmode != bignum) { if (p->ccmode != bignum) {
@@ -1281,11 +1184,12 @@ CFontzPacket_get_free_chars (Driver *drvthis)
* The input is just an array of characters... * The input is just an array of characters...
*/ */
MODULE_EXPORT void MODULE_EXPORT void
CFontzPacket_set_char (Driver *drvthis, int n, char *dat) CFontzPacket_set_char (Driver *drvthis, int n, unsigned char *dat)
{ {
PrivateData *p = drvthis->private_data; PrivateData *p = drvthis->private_data;
unsigned char out[9]; unsigned char out[9];
int row, col; unsigned char mask = (1 << p->cellwidth) - 1;
int row;
if ((n < 0) || (n >= NUM_CCs)) if ((n < 0) || (n >= NUM_CCs))
return; return;
@@ -1295,13 +1199,7 @@ CFontzPacket_set_char (Driver *drvthis, int n, char *dat)
out[0] = n; /* Custom char to define. xxx */ out[0] = n; /* Custom char to define. xxx */
for (row = 0; row < p->cellheight; row++) { for (row = 0; row < p->cellheight; row++) {
int letter = 0; out[row+1] = dat[row] & mask;
for (col = 0; col < p->cellwidth; col++) {
letter <<= 1;
letter |= (dat[(row * p->cellwidth) + col] > 0);
}
out[row+1] = letter;
} }
send_bytes_message(p->fd, CF633_Set_LCD_Special_Character_Data, 9, out); send_bytes_message(p->fd, CF633_Set_LCD_Special_Character_Data, 9, out);
} }
@@ -1314,96 +1212,128 @@ MODULE_EXPORT int
CFontzPacket_icon (Driver *drvthis, int x, int y, int icon) CFontzPacket_icon (Driver *drvthis, int x, int y, int icon)
{ {
PrivateData *p = drvthis->private_data; PrivateData *p = drvthis->private_data;
char icons[8][6 * 8] = {
/* Empty Heart */ static unsigned char heart_open[] =
{ { b__XXXXX,
0, 1, 1, 1, 1, 1, b__X_X_X,
0, 1, 0, 1, 0, 1, b_______,
0, 0, 0, 0, 0, 0, b_______,
0, 0, 0, 0, 0, 0, b_______,
0, 0, 0, 0, 0, 0, b__X___X,
0, 1, 0, 0, 0, 1, b__XX_XX,
0, 1, 1, 0, 1, 1, b__XXXXX };
0, 1, 1, 1, 1, 1, static unsigned char heart_filled[] =
}, { b__XXXXX,
/* Filled Heart */ b__X_X_X,
{ b___X_X_,
0, 1, 1, 1, 1, 1, b___XXX_,
0, 1, 0, 1, 0, 1, b___XXX_,
0, 0, 1, 0, 1, 0, b__X_X_X,
0, 0, 1, 1, 1, 0, b__XX_XX,
0, 0, 1, 1, 1, 0, b__XXXXX };
0, 1, 0, 1, 0, 1, static unsigned char arrow_up[] =
0, 1, 1, 0, 1, 1, { b____X__,
0, 1, 1, 1, 1, 1, b___XXX_,
}, b__X_X_X,
/* arrow_up */ b____X__,
{ b____X__,
0, 0, 0, 1, 0, 0, b____X__,
0, 0, 1, 1, 1, 0, b____X__,
0, 1, 0, 1, 0, 1, b_______ };
0, 0, 0, 1, 0, 0, static unsigned char arrow_down[] =
0, 0, 0, 1, 0, 0, { b____X__,
0, 0, 0, 1, 0, 0, b____X__,
0, 0, 0, 1, 0, 0, b____X__,
0, 0, 0, 0, 0, 0, b____X__,
}, b__X_X_X,
/* arrow_down */ b___XXX_,
{ b____X__,
0, 0, 0, 1, 0, 0, b_______ };
0, 0, 0, 1, 0, 0, /*
0, 0, 0, 1, 0, 0, static unsigned char arrow_left[] =
0, 0, 0, 1, 0, 0, { b_______,
0, 1, 0, 1, 0, 1, b____X__,
0, 0, 1, 1, 1, 0, b___X___,
0, 0, 0, 1, 0, 0, b__XXXXX,
0, 0, 0, 0, 0, 0, b___X___,
}, b____X__,
/* checkbox_off */ b_______,
{ b_______ };
0, 0, 0, 0, 0, 0, static unsigned char arrow_right[] =
0, 0, 0, 0, 0, 0, { b_______,
0, 1, 1, 1, 1, 1, b____X__,
0, 1, 0, 0, 0, 1, b_____X_,
0, 1, 0, 0, 0, 1, b__XXXXX,
0, 1, 0, 0, 0, 1, b_____X_,
0, 1, 1, 1, 1, 1, b____X__,
0, 0, 0, 0, 0, 0, b_______,
}, b_______ };
/* checkbox_on */ */
{ static unsigned char checkbox_off[] =
0, 0, 0, 1, 0, 0, { b_______,
0, 0, 0, 1, 0, 0, b_______,
0, 1, 1, 1, 0, 1, b__XXXXX,
0, 1, 0, 1, 1, 0, b__X___X,
0, 1, 0, 1, 0, 1, b__X___X,
0, 1, 0, 0, 0, 1, b__X___X,
0, 1, 1, 1, 1, 1, b__XXXXX,
0, 0, 0, 0, 0, 0, b_______ };
}, static unsigned char checkbox_on[] =
/* checkbox_gray */ { b____X__,
{ b____X__,
0, 0, 0, 0, 0, 0, b__XXX_X,
0, 0, 0, 0, 0, 0, b__X_XX_,
0, 1, 1, 1, 1, 1, b__X_X_X,
0, 1, 0, 1, 0, 1, b__X___X,
0, 1, 1, 0, 1, 1, b__XXXXX,
0, 1, 0, 1, 0, 1, b_______ };
0, 1, 1, 1, 1, 1, static unsigned char checkbox_gray[] =
0, 0, 0, 0, 0, 0, { b_______,
}, b_______,
/* Ellipsis */ b__XXXXX,
{ b__X_X_X,
0, 0, 0, 0, 0, 0, b__XX_XX,
0, 0, 0, 0, 0, 0, b__X_X_X,
0, 0, 0, 0, 0, 0, b__XXXXX,
0, 0, 0, 0, 0, 0, b_______ };
0, 0, 0, 0, 0, 0, /*
0, 0, 0, 0, 0, 0, static unsigned char selector_left[] =
0, 0, 0, 0, 0, 0, { b___X___,
0, 1, 0, 1, 0, 1, b___XX__,
}, b___XXX_,
}; b___XXXX,
b___XXX_,
b___XX__,
b___X___,
b_______ };
static unsigned char selector_right[] =
{ b_____X_,
b____XX_,
b___XXX_,
b__XXXX_,
b___XXX_,
b____XX_,
b_____X_,
b_______ };
static unsigned char ellipsis[] =
{ b_______,
b_______,
b_______,
b_______,
b_______,
b_______,
b__X_X_X,
b_______ };
static unsigned char block_filled[] =
{ b__XXXXX,
b__XXXXX,
b__XXXXX,
b__XXXXX,
b__XXXXX,
b__XXXXX,
b__XXXXX,
b__XXXXX };
*/
/* Yes we know, this is a VERY BAD implementation :-) */ /* Yes we know, this is a VERY BAD implementation :-) */
switch (icon) { switch (icon) {
@@ -1414,16 +1344,16 @@ CFontzPacket_icon (Driver *drvthis, int x, int y, int icon)
CFontzPacket_raw_chr(drvthis, x, y, 31); CFontzPacket_raw_chr(drvthis, x, y, 31);
break; break;
case ICON_HEART_FILLED: case ICON_HEART_FILLED:
CFontzPacket_set_char(drvthis, 0, icons[1]); CFontzPacket_set_char(drvthis, 0, heart_filled);
CFontzPacket_chr(drvthis, x, y, 0); CFontzPacket_chr(drvthis, x, y, 0);
break; break;
case ICON_HEART_OPEN: case ICON_HEART_OPEN:
CFontzPacket_set_char(drvthis, 0, icons[0]); CFontzPacket_set_char(drvthis, 0, heart_open);
CFontzPacket_chr(drvthis, x, y, 0); CFontzPacket_chr(drvthis, x, y, 0);
break; break;
case ICON_ARROW_UP: case ICON_ARROW_UP:
if (p->model == 633) { if (p->model == 633) {
CFontzPacket_set_char(drvthis, 1, icons[2]); CFontzPacket_set_char(drvthis, 1, arrow_up);
CFontzPacket_chr(drvthis, x, y, 1); CFontzPacket_chr(drvthis, x, y, 1);
} }
else else
@@ -1431,7 +1361,7 @@ CFontzPacket_icon (Driver *drvthis, int x, int y, int icon)
break; break;
case ICON_ARROW_DOWN: case ICON_ARROW_DOWN:
if (p->model == 633) { if (p->model == 633) {
CFontzPacket_set_char(drvthis, 2, icons[3]); CFontzPacket_set_char(drvthis, 2, arrow_down);
CFontzPacket_chr(drvthis, x, y, 2); CFontzPacket_chr(drvthis, x, y, 2);
} }
else else
@@ -1450,15 +1380,15 @@ CFontzPacket_icon (Driver *drvthis, int x, int y, int icon)
CFontzPacket_raw_chr(drvthis, x, y, 0xDF); CFontzPacket_raw_chr(drvthis, x, y, 0xDF);
break; break;
case ICON_CHECKBOX_OFF: case ICON_CHECKBOX_OFF:
CFontzPacket_set_char(drvthis, 3, icons[4]); CFontzPacket_set_char(drvthis, 3, checkbox_off);
CFontzPacket_chr(drvthis, x, y, 3); CFontzPacket_chr(drvthis, x, y, 3);
break; break;
case ICON_CHECKBOX_ON: case ICON_CHECKBOX_ON:
CFontzPacket_set_char(drvthis, 4, icons[5]); CFontzPacket_set_char(drvthis, 4, checkbox_on);
CFontzPacket_chr(drvthis, x, y, 4); CFontzPacket_chr(drvthis, x, y, 4);
break; break;
case ICON_CHECKBOX_GRAY: case ICON_CHECKBOX_GRAY:
CFontzPacket_set_char(drvthis, 5, icons[6]); CFontzPacket_set_char(drvthis, 5, checkbox_gray);
CFontzPacket_chr(drvthis, x, y, 5); CFontzPacket_chr(drvthis, x, y, 5);
break; break;
case ICON_SELECTOR_AT_LEFT: case ICON_SELECTOR_AT_LEFT:
+1 -1
View File
@@ -38,7 +38,7 @@ MODULE_EXPORT int CFontzPacket_icon(Driver *drvthis, int x, int y, int icon);
MODULE_EXPORT void CFontzPacket_cursor (Driver *drvthis, int x, int y, int state); MODULE_EXPORT void CFontzPacket_cursor (Driver *drvthis, int x, int y, int state);
MODULE_EXPORT int CFontzPacket_get_free_chars (Driver *drvthis); MODULE_EXPORT int CFontzPacket_get_free_chars (Driver *drvthis);
MODULE_EXPORT void CFontzPacket_set_char (Driver *drvthis, int n, char *dat); MODULE_EXPORT void CFontzPacket_set_char (Driver *drvthis, int n, unsigned char *dat);
MODULE_EXPORT int CFontzPacket_get_contrast (Driver *drvthis); MODULE_EXPORT int CFontzPacket_get_contrast (Driver *drvthis);
MODULE_EXPORT void CFontzPacket_set_contrast (Driver *drvthis, int promille); MODULE_EXPORT void CFontzPacket_set_contrast (Driver *drvthis, int promille);