diff --git a/server/drivers/sed1520.c b/server/drivers/sed1520.c index 30470b2..4258abf 100644 --- a/server/drivers/sed1520.c +++ b/server/drivers/sed1520.c @@ -74,12 +74,12 @@ MODULE_EXPORT char *symbol_prefix = "sed1520_"; void writecommand (int value, int chip) { - port_out ( sed1520_lptport,value); - port_out ( sed1520_lptport + 2,WR + CS1 - (chip & CS1) + (chip & CS2)); - port_out ( sed1520_lptport + 2,CS1 - (chip & CS1) + (chip & CS2)); - uPause (IODELAY); - port_out ( sed1520_lptport + 2,WR + CS1 - (chip & CS1) + (chip & CS2)); - uPause (IODELAY); + port_out(sed1520_lptport,value); + port_out(sed1520_lptport + 2,WR + CS1 - (chip & CS1) + (chip & CS2)); + port_out(sed1520_lptport + 2,CS1 - (chip & CS1) + (chip & CS2)); + uPause(IODELAY); + port_out(sed1520_lptport + 2,WR + CS1 - (chip & CS1) + (chip & CS2)); + uPause(IODELAY); } ///////////////////////////////////////////////////////////////// @@ -88,12 +88,12 @@ writecommand (int value, int chip) void writedata (int value, int chip) { - port_out ( sed1520_lptport,value); - port_out ( sed1520_lptport + 2,A0 + WR + CS1 - (chip & CS1) + (chip & CS2)); - port_out ( sed1520_lptport + 2,A0 + CS1 - (chip & CS1) + (chip & CS2)); - uPause (IODELAY); - port_out ( sed1520_lptport + 2,A0 + WR + CS1 - (chip & CS1) + (chip & CS2)); - uPause (IODELAY); + port_out(sed1520_lptport,value); + port_out(sed1520_lptport + 2,A0 + WR + CS1 - (chip & CS1) + (chip & CS2)); + port_out(sed1520_lptport + 2,A0 + CS1 - (chip & CS1) + (chip & CS2)); + uPause(IODELAY); + port_out(sed1520_lptport + 2,A0 + WR + CS1 - (chip & CS1) + (chip & CS2)); + uPause(IODELAY); } ///////////////////////////////////////////////////////////////// @@ -102,7 +102,7 @@ writedata (int value, int chip) void selectpage (int page) { - writecommand (0xB8 + (page & 3), CS1 + CS2); + writecommand(0xB8 + (page & 3), CS1 + CS2); } ///////////////////////////////////////////////////////////////// @@ -111,7 +111,7 @@ selectpage (int page) void selectcolumn (int column, int chip) { - writecommand ((column & 0x7F), chip); + writecommand((column & 0x7F), chip); } ///////////////////////////////////////////////////////////////// @@ -157,35 +157,39 @@ sed1520_init (Driver *drvthis) /* End of config file parsing */ if (timing_init() == -1) { - report(RPT_ERR, "timing_init: failed (%s)\n", strerror(errno)); + report(RPT_ERR, "%s: timing_init() failed (%s)", drvthis->name, strerror(errno)); return -1; } // Allocate our framebuffer - framebuf = malloc (122 * 4); - if (!framebuf) - { - // sed1520_close (); - return -1; + framebuf = malloc(122 * 4); + if (framebuf == NULL) { + report(RPT_ERR, "%s: unable to allocate framebuffer", drvthis->name); + // sed1520_close (); + return -1; } // clear screen memset (framebuf, 0, 122 * 4); // Initialize the Port and the sed1520s - if(port_access(sed1520_lptport)) return -1; - if(port_access(sed1520_lptport+2)) return -1; + if ((port_access(sed1520_lptport)) || (port_access(sed1520_lptport+2))) { + report(RPT_ERR, "%s: unable to access port 0x%03X", drvthis->name, sed1520_lptport); + return -1; + } - port_out (sed1520_lptport,0); - port_out (sed1520_lptport +2,WR + CS2); - writecommand (0xE2, CS1 + CS2); - writecommand (0xAF, CS1 + CS2); - writecommand (0xC0, CS1 + CS2); - selectpage (3); + port_out(sed1520_lptport,0); + port_out(sed1520_lptport +2,WR + CS2); + writecommand(0xE2, CS1 + CS2); + writecommand(0xAF, CS1 + CS2); + writecommand(0xC0, CS1 + CS2); + selectpage(3); cellwidth = 6; cellheight = 8; + report(RPT_DEBUG, "%s: init() done", drvthis->name); + return 0; } @@ -196,7 +200,7 @@ MODULE_EXPORT void sed1520_close (Driver *drvthis) { if (framebuf != NULL) - free (framebuf); + free(framebuf); framebuf = NULL; } @@ -242,7 +246,7 @@ sed1520_cellheight (Driver *drvthis) MODULE_EXPORT void sed1520_clear (Driver *drvthis) { - memset (framebuf, 0, 488); + memset(framebuf, 0, 488); } ///////////////////////////////////////////////////////////////// @@ -253,15 +257,17 @@ MODULE_EXPORT void sed1520_flush (Driver *drvthis) { int i, j; - for (i = 0; i < 4; i++) - { - selectpage (i); - selectcolumn (0, CS2) ; + + for (i = 0; i < 4; i++) { + selectpage(i); + + selectcolumn(0, CS2) ; for (j = 0; j < 61; j++) - writedata (framebuf[j + (i * 122)], CS2); - selectcolumn (0, CS1) ; + writedata(framebuf[j + (i * 122)], CS2); + + selectcolumn(0, CS1) ; for (j = 61; j < 122; j++) - writedata (framebuf[j + (i * 122)], CS1); + writedata(framebuf[j + (i * 122)], CS1); } } @@ -273,13 +279,13 @@ MODULE_EXPORT void sed1520_string (Driver *drvthis, int x, int y, char string[]) { int i; + x--; // Convert 1-based coords to 0-based... y--; - for (i = 0; string[i]; i++) - { - drawchar2fb (x + i, y, string[i]); - } + for (i = 0; string[i] != '\0'; i++) { + drawchar2fb(x + i, y, string[i]); + } } ///////////////////////////////////////////////////////////////// @@ -291,7 +297,7 @@ sed1520_chr (Driver *drvthis, int x, int y, char c) { y--; x--; - drawchar2fb (x, y, c); + drawchar2fb(x, y, c); } ///////////////////////////////////////////////////////////////// @@ -314,41 +320,32 @@ sed1520_num (Driver *drvthis, int x, int num) if (num == 10 && (x < 0 || x > 19)) return; - if (num == 10) - { // Doppelpunkt - for (z = 0; z < 3; z++) - { // Zeilen a 8 Punkte - for (c = 0; c < 6; c++) - { // 6 Spalten + if (num == 10) { // Doppelpunkt + for (z = 0; z < 3; z++) { // Zeilen a 8 Punkte + for (c = 0; c < 6; c++) { // 6 Spalten s = 0; - for (i = 0; i < 8; i++) - { // 8 bits aus zeilen + for (i = 0; i < 8; i++) { // 8 bits aus zeilen s >>= 1; if (*(fontbigdp[(z * 8) + i] + c) == '.') s += 128; - } + } framebuf[(z * 122) + 122 + (x * 6) + c] = s; - } - } - } - else - { - - for (z = 0; z < 3; z++) - { // Zeilen a 8 Punkte - for (c = 0; c < 18; c++) - { // 18 Spalten + } + } + } + else { + for (z = 0; z < 3; z++) { // Zeilen a 8 Punkte + for (c = 0; c < 18; c++) { // 18 Spalten s = 0; - for (i = 0; i < 8; i++) - { // 8 bits aus zeilen + for (i = 0; i < 8; i++) { // 8 bits aus zeilen s >>= 1; if (*(fontbignum[num][z * 8 + i] + c) == '.') s += 128; - } + } framebuf[(z * 122) + 122 + (x * 6) + c] = s; - } - } - } + } + } + } } @@ -364,22 +361,21 @@ sed1520_num (Driver *drvthis, int x, int num) MODULE_EXPORT void sed1520_set_char (Driver *drvthis, int n, char *dat) { - int row, col, i; + if (n < 0 || n > 255) return; if (!dat) return; - for (row = 0; row < 8; row++) - { + + for (row = 0; row < 8; row++) { i = 0; - for (col = 0; col < 6; col++) - { + for (col = 0; col < 6; col++) { i <<= 1; i |= (dat[(row * 6) + col] > 0); - } + } fontmap[n][row] = i; - } + } } @@ -391,18 +387,16 @@ MODULE_EXPORT void sed1520_old_vbar (Driver *drvthis, int x, int len) { int i, j, k; + x--; - - for (j = 0; j < 3; j++) - { + for (j = 0; j < 3; j++) { i = 0; k = 0; - for (i = 0; i < 8; i++) - { + for (i = 0; i < 8; i++) { if (len > i) k += 1 << (7 - i); - } + } framebuf[((3 - j) * 122) + (x * 6)] = 0; framebuf[((3 - j) * 122) + (x * 6) + 1] = 0; @@ -411,8 +405,7 @@ sed1520_old_vbar (Driver *drvthis, int x, int len) framebuf[((3 - j) * 122) + (x * 6) + 4] = k; framebuf[((3 - j) * 122) + (x * 6) + 5] = 0; len -= 8; - } - + } } @@ -424,6 +417,7 @@ MODULE_EXPORT void sed1520_old_hbar (Driver *drvthis, int x, int y, int len) { int i; + x--; y--; @@ -461,18 +455,17 @@ sed1520_icon (Driver *drvthis, int x, int y, int icon) 1, 1, 0, 1, 1, 1, 1, 1, 1, 1 }; - switch( icon ) - { + switch (icon) { case ICON_BLOCK_FILLED: - sed1520_chr( drvthis, x, y, 255 ); + sed1520_chr(drvthis, x, y, 255); break; case ICON_HEART_FILLED: - sed1520_set_char( drvthis, 0, heart_filled ); - sed1520_chr( drvthis, x, y, 0 ); + sed1520_set_char(drvthis, 0, heart_filled); + sed1520_chr(drvthis, x, y, 0); break; case ICON_HEART_OPEN: - sed1520_set_char( drvthis, 0, heart_open ); - sed1520_chr( drvthis, x, y, 0 ); + sed1520_set_char(drvthis, 0, heart_open); + sed1520_chr(drvthis, x, y, 0); break; default: return -1;