diff --git a/server/drivers/sed1330.c b/server/drivers/sed1330.c index 83dc6b2..2647253 100644 --- a/server/drivers/sed1330.c +++ b/server/drivers/sed1330.c @@ -133,7 +133,7 @@ * | | * '-' * | - * O Vlc (= -24V ) + * O Vlc (= -24V) * * The G242C generates -24V internally. It is available on Vlc. * @@ -251,11 +251,10 @@ typedef struct p { int type; int port; - char * keymap[KEYPAD_MAXX]; - char * framebuf_text; - char * lcd_contents_text; - char * framebuf_graph; - char * lcd_contents_graph; + unsigned char * framebuf_text; + unsigned char * lcd_contents_text; + unsigned char * framebuf_graph; + unsigned char * lcd_contents_graph; int width, height; int cellwidth, cellheight; int graph_width, graph_height; @@ -319,111 +318,115 @@ sed1330_init( Driver * drvthis ) PrivateData * p; char data[8]; - debug( RPT_DEBUG, "%s( %p )", __FUNCTION__, drvthis ); - + debug(RPT_DEBUG, "%s( %p )", __FUNCTION__, drvthis); // Alocate and store private p - p = (PrivateData *) malloc( sizeof(PrivateData) ); - if( ! p ) + p = (PrivateData *) calloc(1, sizeof(PrivateData)); + if (p == NULL) return -1; - if( drvthis->store_private_ptr( drvthis, p ) ) + if (drvthis->store_private_ptr(drvthis, p)) return -1; - // Clear keymap - memset( p->keymap, 0, sizeof(p->keymap) ); + // initialize PrivateData + p->framebuf_text = NULL; + p->lcd_contents_text = NULL; + p->framebuf_graph = NULL; + p->lcd_contents_graph = NULL; // READ THE CONFIG FILE // Port - p->port = drvthis->config_get_int( drvthis->name, "port", 0, 0x278 ); + p->port = drvthis->config_get_int(drvthis->name, "Port", 0, 0x278); // Char size - s = drvthis->config_get_string( drvthis->name, "cellsize", 0, NULL ); - if( !s ) { - s = "6x10"; - } - if( sscanf( s, "%dx%d", &(p->cellwidth), &(p->cellheight)) != 2 ) { - report( RPT_ERR, "SED1330: cannot interpret cellsize value: %s", s ); + s = drvthis->config_get_string(drvthis->name, "CellSize", 0, "6x10"); + if (sscanf(s, "%dx%d", &(p->cellwidth), &(p->cellheight)) != 2) { + report(RPT_ERR, "%s: cannot interpret CellSize %s", + drvthis->name, s); return -1; } - if( p->cellwidth < 6 || p->cellwidth > 8 - || p->cellheight < 7 || p->cellheight > 16 ) { - report( RPT_ERR, "SED1330: cellsize exceeds allowed range of 6x7 to 8x16" ); + if ((p->cellwidth < 6) || (p->cellwidth > 8) + || (p->cellheight < 7) || (p->cellheight > 16)) { + report(RPT_ERR, "%s: CellSize exceeds allowed range of 6x7 to 8x16", + drvthis->name); return -1; } // Type - s = drvthis->config_get_string( drvthis->name, "type", 0, NULL ); - if( !s ) { - report( RPT_ERR, "SED1330: you need to specify the display type" ); + s = drvthis->config_get_string(drvthis->name, "Type", 0, NULL); + if (s == NULL) { + report(RPT_ERR, "%s: you need to specify the display type", + drvthis->name); return -1; - } else if( strcmp( s, "G321D" ) == 0 ) { + } else if (strcmp(s, "G321D") == 0) { p->type = TYPE_G321D; p->graph_width = 320; p->graph_height = 200; - } else if( strcmp( s, "G121C" ) == 0 ) { + } else if (strcmp(s, "G121C") == 0) { p->type = TYPE_G121C; p->graph_width = 128; p->graph_height = 128; - } else if( strcmp( s, "G242C" ) == 0 ) { + } else if (strcmp(s, "G242C") == 0) { p->type = TYPE_G242C; p->graph_width = 240; p->graph_height = 128; - } else if( strcmp( s, "G191D" ) == 0 ) { + } else if (strcmp(s, "G191D") == 0) { p->type = TYPE_G191D; p->graph_width = 192; p->graph_height = 192; - } else if( strcmp( s, "G2446" ) == 0 ) { + } else if (strcmp(s, "G2446") == 0) { p->type = TYPE_G2446; p->graph_width = 240; p->graph_height = 64; } else { - report( RPT_ERR, "SED1330: Unknown display type: %s", s ); + report(RPT_ERR, "%s: Unknown display type %s", drvthis->name, s); return -1; } - report( RPT_INFO, "SED1330: Using LCD type: %s", s ); + report(RPT_INFO, "%s: Using LCD type %s", drvthis->name, s); // Keypad ? - p->have_keypad = drvthis->config_get_bool( drvthis->name, "keypad", 0, 0 ); + p->have_keypad = drvthis->config_get_bool(drvthis->name, "keypad", 0, 0); // Keymap - if ( p->have_keypad ) { + if (p->have_keypad) { int x, y; // Read keymap - for( x=0; xkeyMapDirect[x] = defaultKeyMapDirect[x]; // Read config value - sprintf( buf, "keydirect_%1d", x+1 ); - s = drvthis->config_get_string( drvthis->name, buf, 0, NULL ); + sprintf(buf, "keydirect_%1d", x+1); + s = drvthis->config_get_string(drvthis->name, buf, 0, NULL); // Was a key specified in the config file ? - if( s ) { - p->keyMapDirect[x] = strdup( s ); - report( RPT_INFO, "SED1330: Direct key %d: \"%s\"", x, s ); + if (s != NULL) { + p->keyMapDirect[x] = strdup(s); + report(RPT_INFO, "%s: Direct key %d: \"%s\"", + drvthis->name, x, s ); } } - for( x=0; xkeyMapMatrix[y][x] = defaultKeyMapMatrix[y][x]; // Read config value - sprintf( buf, "keymatrix_%1d_%d", x+1, y+1 ); - s = drvthis->config_get_string( drvthis->name, buf, 0, NULL ); + sprintf(buf, "keymatrix_%1d_%d", x+1, y+1); + s = drvthis->config_get_string(drvthis->name, buf, 0, NULL); // Was a key specified in the config file ? - if( s ) { - p->keyMapMatrix[y][x] = strdup( s ); - report( RPT_INFO, "SED1330: Matrix key %d,%d: \"%s\"", x, y, s ); + if (s != NULL) { + p->keyMapMatrix[y][x] = strdup(s); + report(RPT_INFO, "%s: Matrix key %d,%d: \"%s\"", + drvthis->name, x, y, s); } } } @@ -432,57 +435,66 @@ sed1330_init( Driver * drvthis ) // Calculate some sizes p->width = p->graph_width / p->cellwidth; p->height = p->graph_height / p->cellheight; - p->bytesperline = (p->graph_width - 1 ) / p->cellwidth + 1; - p->textlines_in_memory = (p->graph_height - 1 ) / p->cellheight + 1; + p->bytesperline = (p->graph_width - 1) / p->cellwidth + 1; + p->textlines_in_memory = (p->graph_height - 1) / p->cellheight + 1; - report( RPT_INFO, "SED1330: Text size: %dx%d", p->width, p->height ); - report( RPT_INFO, "SED1330: Cell size: %dx%d", p->cellwidth, p->cellheight ); - report( RPT_INFO, "SED1330: Graphical size: %dx%d", p->graph_width, p->graph_height ); + report(RPT_INFO, "%s: Text size: %dx%d", drvthis->name, p->width, p->height); + report(RPT_INFO, "%s: Cell size: %dx%d", drvthis->name, p->cellwidth, p->cellheight); + report(RPT_INFO, "%s: Graphical size: %dx%d", drvthis->name, p->graph_width, p->graph_height); // Allocate framebuffer - p->framebuf_text = (unsigned char *) malloc( p->bytesperline * p->textlines_in_memory ); - if( ! p->framebuf_text ) + p->framebuf_text = (unsigned char *) malloc(p->bytesperline * p->textlines_in_memory); + if (p->framebuf_text == NULL) { + report(RPT_ERR, "%s: error allocating text framebuffer", drvthis->name); return -1; - memset( p->framebuf_text, ' ', p->bytesperline * p->textlines_in_memory ); + } + memset(p->framebuf_text, ' ', p->bytesperline * p->textlines_in_memory); - p->lcd_contents_text = (unsigned char *) malloc( p->bytesperline * p->textlines_in_memory ); - if( ! p->lcd_contents_text ) + p->lcd_contents_text = (unsigned char *) malloc(p->bytesperline * p->textlines_in_memory); + if (p->lcd_contents_text == NULL) { + report(RPT_ERR, "%s: error allocating lcd_contents_text", drvthis->name); return -1; - memset( p->lcd_contents_text, 0, p->bytesperline * p->textlines_in_memory ); + } + memset(p->lcd_contents_text, 0, p->bytesperline * p->textlines_in_memory); - p->framebuf_graph = (unsigned char *) malloc( p->bytesperline * p->graph_height ); - if( ! p->framebuf_graph ) + p->framebuf_graph = (unsigned char *) malloc(p->bytesperline * p->graph_height); + if (p->framebuf_graph == NULL) { + report(RPT_ERR, "%s: error allocating graphical framebuffer", drvthis->name); return -1; - memset( p->framebuf_graph, 0, p->bytesperline * p->graph_height ); + } + memset(p->framebuf_graph, 0, p->bytesperline * p->graph_height); - p->lcd_contents_graph = (unsigned char *) malloc( p->bytesperline * p->graph_height ); - if( ! p->lcd_contents_graph ) + p->lcd_contents_graph = (unsigned char *) malloc(p->bytesperline * p->graph_height); + if (p->lcd_contents_graph == NULL) { + report(RPT_ERR, "%s: error allocating lcd_contents_graph", drvthis->name); return -1; - memset( p->lcd_contents_graph, 0xFF, p->bytesperline * p->graph_height ); + } + memset(p->lcd_contents_graph, 0xFF, p->bytesperline * p->graph_height); // Arrange for access to port - debug( RPT_DEBUG, "%s: getting port access", __FUNCTION__ ); + debug(RPT_DEBUG, "%s: getting port access", __FUNCTION__); port_access(p->port); port_access(p->port+1); port_access(p->port+2); 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; } // INITIALIZE THE LCD // End reset-state - debug( RPT_DEBUG, "%s: initializing LCD", __FUNCTION__ ); - port_out( p->port+2, (nWR) ^ OUTMASK ); // raise ^RD and ^WR - port_out( p->port+2, (nRESET|nWR) ^ OUTMASK ); // lower RESET - uPause( 200 ); - port_out( p->port+2, (nWR) ^ OUTMASK ); // raise RESET - uPause( 200 ); - port_out( p->port+2, (nRESET|nWR) ^ OUTMASK ); // lower RESET - uPause( 4000 ); + debug(RPT_DEBUG, "%s: initializing LCD", __FUNCTION__); + port_out(p->port+2, (nWR) ^ OUTMASK); // raise ^RD and ^WR + port_out(p->port+2, (nRESET|nWR) ^ OUTMASK); // lower RESET + uPause(200); + port_out(p->port+2, (nWR) ^ OUTMASK); // raise RESET + uPause(200); + port_out(p->port+2, (nRESET|nWR) ^ OUTMASK); // lower RESET + uPause(4000); - switch( p->type ) { + switch (p->type) { case TYPE_G321D: data[4] = 0x38; break; @@ -511,22 +523,24 @@ sed1330_init( Driver * drvthis ) data[5] = p->graph_height - 1; data[6] = p->bytesperline; data[7] = 0; - sed1330_command( p, CMD_SYSTEM_SET, 8, data ); + sed1330_command(p, CMD_SYSTEM_SET, 8, data); // TODO: The memory locations need to be calculated ! - sed1330_command( p, CMD_SCROLL, 6, ((char[6]) {SCR1_L,SCR1_H,0xC7,SCR2_L,SCR2_H,0xC7}) ); // screen1 and screen2 memory locations + sed1330_command(p, CMD_SCROLL, 6, ((char[6]) {SCR1_L,SCR1_H,0xC7,SCR2_L,SCR2_H,0xC7})); // screen1 and screen2 memory locations data[0] = p->cellwidth-1; data[1] = 7; - sed1330_command( p, CMD_CSR_FORM, 2, data ); // set cursor size + sed1330_command(p, CMD_CSR_FORM, 2, data); // set cursor size - sed1330_command( p, CMD_HDOT_SCR, 1, ((char[1]) {0x00}) ); // horizontal pixel shift=0 - sed1330_command( p, CMD_OVLAY, 1, ((char[1]) {0x01}) ); // XOR mode, screen1 text, screen3 text (screen2 and screen4 are always graph) - sed1330_command( p, CMD_DISP_DIS, 1, ((char[1]) {0x14}) ); // display off,set cursor off, screen1 on, screen2 on, screen3 off - sed1330_command( p, CMD_CSR_DIR_R, 0, NULL ); // cursor move right + sed1330_command(p, CMD_HDOT_SCR, 1, ((char[1]) {0x00})); // horizontal pixel shift=0 + sed1330_command(p, CMD_OVLAY, 1, ((char[1]) {0x01})); // XOR mode, screen1 text, screen3 text (screen2 and screen4 are always graph) + sed1330_command(p, CMD_DISP_DIS, 1, ((char[1]) {0x14})); // display off,set cursor off, screen1 on, screen2 on, screen3 off + sed1330_command(p, CMD_CSR_DIR_R, 0, NULL); // cursor move right - sed1330_flush( drvthis ); // Clear the contents of the LCD - sed1330_command( p, CMD_DISP_EN, 0, NULL ); // And display on + sed1330_flush(drvthis); // Clear the contents of the LCD + sed1330_command(p, CMD_DISP_EN, 0, NULL); // And display on + + report(RPT_DEBUG, "%s: init() done", drvthis->name); return 0; } @@ -542,16 +556,16 @@ sed1330_command( PrivateData * p, char command, int datacount, char * data ) int i; int port = p->port; - port_out( port+2, (nRESET|nWR|A0) ^ OUTMASK ); // set A0 to indicate command - port_out( port, command ); // set up p - port_out( port+2, (nRESET|A0) ^ OUTMASK ); // activate ^WR - port_out( port+2, (nRESET|nWR|A0) ^ OUTMASK ); // deactivate ^WR again - port_out( port+2, (nRESET|nWR) ^ OUTMASK ); // clear A0 to indicate p + port_out(port+2, (nRESET|nWR|A0) ^ OUTMASK); // set A0 to indicate command + port_out(port, command); // set up p + port_out(port+2, (nRESET|A0) ^ OUTMASK); // activate ^WR + port_out(port+2, (nRESET|nWR|A0) ^ OUTMASK); // deactivate ^WR again + port_out(port+2, (nRESET|nWR) ^ OUTMASK); // clear A0 to indicate p - for( i=0; iprivate_data; - debug( RPT_DEBUG, "%s()", __FUNCTION__ ); + debug(RPT_DEBUG, "%s()", __FUNCTION__); - free( p ); + if (p != NULL) { + int i, j; + + for (i = 0; i < KEYPAD_MAXX; i++) { + if (p->keyMapDirect[i] != NULL) + free(p->keyMapDirect[i]); + for (j = 0; j < KEYPAD_MAXY; j++) { + if (p->keyMapMatrix[i][j] != NULL) + free(p->keyMapMatrix[i][j]); + } + } + + if (p->framebuf_text != NULL) + free(p->framebuf_text); + if (p->lcd_contents_text != NULL) + free(p->lcd_contents_text); + if (p->framebuf_graph != NULL) + free(p->framebuf_graph); + if (p->lcd_contents_graph != NULL) + free(p->lcd_contents_graph); + + free(p); + } + drvthis->store_private_ptr(drvthis, NULL); } @@ -578,7 +615,7 @@ sed1330_width( Driver * drvthis ) { PrivateData * p = drvthis->private_data; - debug( RPT_INFO, "%s()", __FUNCTION__ ); + debug(RPT_INFO, "%s()", __FUNCTION__); return p->width; } @@ -592,7 +629,7 @@ sed1330_height( Driver * drvthis ) { PrivateData * p = drvthis->private_data; - debug( RPT_INFO, "%s()", __FUNCTION__ ); + debug(RPT_INFO, "%s()", __FUNCTION__); return p->height; } @@ -606,10 +643,10 @@ sed1330_clear( Driver * drvthis ) { PrivateData * p = drvthis->private_data; - debug( RPT_DEBUG, "%s()", __FUNCTION__ ); + debug(RPT_DEBUG, "%s()", __FUNCTION__); - memset( p->framebuf_text, ' ', p->bytesperline * p->textlines_in_memory); - memset( p->framebuf_graph, 0, p->bytesperline * p->graph_height ); + memset(p->framebuf_text, ' ', p->bytesperline * p->textlines_in_memory); + memset(p->framebuf_graph, '\0', p->bytesperline * p->graph_height); } @@ -620,30 +657,30 @@ MODULE_EXPORT void sed1330_string( Driver * drvthis, int x, int y, char *str ) { PrivateData * p = drvthis->private_data; - char * dest; + unsigned char * dest; int offset, len; - debug( RPT_DEBUG, "%s( x=%d, y=%d, str=\"%s\" )", __FUNCTION__, x, y, str ); + debug(RPT_DEBUG, "%s( x=%d, y=%d, str=\"%s\" )", __FUNCTION__, x, y, str); - if( y < 1 || y > p->height ) { + if ((y < 1) || (y > p->height)) { return; // outside framebuf } // Calculate offset and length to write - if( x < 1 ) { + if (x < 1) { offset = (1 - x); x = 1; } else { offset = 0; } len = strlen(str) - offset; - if( len > p->width - x + 1 ) { + if (len > p->width - x + 1) { len = p->width - x + 1; } // Calculate destination address dest = p->framebuf_text + (y-1)*p->bytesperline + (x-1); // And write - memcpy( dest, str, len ); + memcpy(dest, str, len); } @@ -655,9 +692,9 @@ sed1330_chr( Driver * drvthis, int x, int y, char c ) { PrivateData * p = drvthis->private_data; - debug( RPT_DEBUG, "%s( x=%d, y=%d, c='%c' )", __FUNCTION__, x, y, c ); + debug(RPT_DEBUG, "%s( x=%d, y=%d, c='%c' )", __FUNCTION__, x, y, c); - if( y < 1 || y > p->height || x < 1 || x > p->width ) { + if ((y < 1) || (y > p->height) || (x < 1) || (x > p->width)) { return; // outside framebuf } p->framebuf_text[(y-1)*p->bytesperline + (x-1)] = c; @@ -674,53 +711,52 @@ sed1330_flush( Driver * drvthis ) unsigned int pos, start_pos, nr_equal, fblen, len, cursor_pos; char csrloc[2]; - debug( RPT_DEBUG, "%s()", __FUNCTION__ ); + debug(RPT_DEBUG, "%s()", __FUNCTION__); - /* sed1330_command( p, CMD_DISP_EN, 1, ((char[1]) {0x14}) ); // cursor off */ + /* sed1330_command(p, CMD_DISP_EN, 1, ((char[1]) {0x14})); // cursor off */ // TODO: Flickering here needs to be prevented fblen = p->bytesperline * p->textlines_in_memory; - for( pos=0; poslcd_contents_text[pos] == p->framebuf_text[pos] ) { + for (nr_equal = 0; poslcd_contents_text[pos] == p->framebuf_text[pos]) { nr_equal ++; } else { nr_equal = 0; } } len = pos - start_pos - nr_equal; - if( len > 0 ) { + if (len > 0) { cursor_pos = start_pos + 256 * SCR1_H + SCR1_L; csrloc[0] = cursor_pos % 256; csrloc[1] = cursor_pos / 256; - sed1330_command( p, CMD_CSRW, 2, csrloc ); - sed1330_command( p, CMD_MWRITE, len, p->framebuf_text + start_pos ); - memcpy( p->lcd_contents_text + start_pos, p->framebuf_text + start_pos, len ); + sed1330_command(p, CMD_CSRW, 2, csrloc); + sed1330_command(p, CMD_MWRITE, len, p->framebuf_text + start_pos); + memcpy(p->lcd_contents_text + start_pos, p->framebuf_text + start_pos, len); } } fblen = p->bytesperline * p->graph_height; - for( pos=0; poslcd_contents_graph[pos] == p->framebuf_graph[pos] ) { + for (nr_equal = 0; pos < fblen && nr_equal < 4; pos++) { + if (p->lcd_contents_graph[pos] == p->framebuf_graph[pos]) { nr_equal ++; } else { nr_equal = 0; } } len = pos - start_pos - nr_equal; - if( len > 0 ) { + if (len > 0) { cursor_pos = start_pos + 256 * SCR2_H + SCR2_L; csrloc[0] = cursor_pos % 256; csrloc[1] = cursor_pos / 256; - sed1330_command( p, CMD_CSRW, 2, csrloc ); - sed1330_command( p, CMD_MWRITE, len, p->framebuf_graph + start_pos ); - memcpy( p->lcd_contents_graph + start_pos, p->framebuf_graph + start_pos, len ); + sed1330_command(p, CMD_CSRW, 2, csrloc); + sed1330_command(p, CMD_MWRITE, len, p->framebuf_graph + start_pos); + memcpy(p->lcd_contents_graph + start_pos, p->framebuf_graph + start_pos, len); } } - } @@ -732,7 +768,7 @@ sed1330_backlight( Driver * drvthis, int on ) { //PrivateData * p = drvthis->private_data; - debug( RPT_DEBUG, "%s( on=%d )", __FUNCTION__, on ); + debug(RPT_DEBUG, "%s( on=%d )", __FUNCTION__, on); // unimplemented } @@ -748,21 +784,21 @@ sed1330_rect ( PrivateData * p, int x1, int y1, int x2, int y2, char pattern ) int x, y; // Swap coordinates if needed - if( x1>x2 ) { + if (x1 > x2) { int swap; - swap=x1; - x1=x2; - x2=swap; + swap = x1; + x1 = x2; + x2 = swap; } - if( y1>y2 ) { + if (y1 > y2) { int swap; - swap=y1; - y1=y2; - y2=swap; + swap = y1; + y1 = y2; + y2 = swap; } - for( x=x1; x<=x2; x++ ) { - for( y=y1; y<=y2; y++ ) { - sed1330_set_pixel( p, x, y, pattern ); + for (x = x1; x <= x2; x++) { + for (y = y1; y <= y2; y++) { + sed1330_set_pixel(p, x, y, pattern); } } } @@ -782,36 +818,36 @@ sed1330_line ( PrivateData * p, int x1, int y1, int x2, int y2, char pattern ) /* Swap coordinates if needed. We want to draw the line from left * to right. */ - if( x1>x2 ) { + if (x1 > x2) { int swap; - swap=x1; x1=x2; x2=swap; - swap=y1; y1=y2; y2=swap; + swap = x1; x1 = x2; x2 = swap; + swap = y1; y1 = y2; y2 = swap; } /* Draw from left to right... */ more_x = 1; - for( x=x1, y=y1; x<=x2; x++ ) { - + for (x = x1, y = y1; x <= x2; x++) { int more_y = 1; /* always draw one pixel */ - while( more_y ) { + + while (more_y) { /* set the pixel */ - sed1330_set_pixel( p, x, y, pattern ); + sed1330_set_pixel(p, x, y, pattern); /* Check what we need to do next */ - if( y1 < y2 ) { - more_y = (y<=y2); - if( x1 != x2 ) { + if (y1 < y2) { + more_y = (y <= y2); + if (x1 != x2) { more_y &= ((float)y+0.5-y1) < ((float) x+0.5-x1) * (y2-y1) / ((float) x2-x1) ; } } else { more_y = (y>=y2); - if( x1 != x2 ) { + if (x1 != x2) { more_y &= ((float)y+0.5-y1) > ((float) x+0.5-x1) * (y2-y1) / ((float) x2-x1) ; } } /* Increment y if we should draw a other pixel for this x value */ - if( more_y ) { - if( y1 < y2 ) { + if (more_y) { + if (y1 < y2) { y ++; } else { y --; @@ -836,7 +872,7 @@ sed1330_set_pixel( PrivateData * p, int x, int y, int value ) bytepos = y*p->bytesperline + x/p->cellwidth; bitmask = 0x80 >> (x % p->cellwidth); - if( value ) { + if (value) { p->framebuf_graph[bytepos] |= bitmask; /* set it */ } else { p->framebuf_graph[bytepos] &= ~bitmask; /* clear it */ @@ -852,9 +888,10 @@ sed1330_vbar( Driver * drvthis, int x, int y, int len, int promille, int pattern { PrivateData * p = drvthis->private_data; - debug( RPT_DEBUG, "%s( x=%d, y=%d, len=%d, promille=%d, pattern=%d )", __FUNCTION__, x, y, len, promille, pattern ); + debug(RPT_DEBUG, "%s( x=%d, y=%d, len=%d, promille=%d, pattern=%d )", __FUNCTION__, x, y, len, promille, pattern); - sed1330_rect ( p, (x-1) * p->cellwidth, y * p->cellheight, x * p->cellwidth - 2, y * p->cellheight - (long) len * p->cellheight * promille / 1000 - 1, 1 ); + sed1330_rect(p, (x-1) * p->cellwidth, y * p->cellheight, + x * p->cellwidth - 2, y * p->cellheight - (long) len * p->cellheight * promille / 1000 - 1, 1); } @@ -867,9 +904,10 @@ sed1330_hbar( Driver * drvthis, int x, int y, int len, int promille, int pattern { PrivateData * p = drvthis->private_data; - debug( RPT_DEBUG, "%s( x=%d, y=%d, len=%d, promille=%d, pattern=%d )", __FUNCTION__, x, y, len, promille, pattern ); + debug(RPT_DEBUG, "%s( x=%d, y=%d, len=%d, promille=%d, pattern=%d )", __FUNCTION__, x, y, len, promille, pattern); - sed1330_rect ( p, (x-1) * p->cellwidth, (y-1) * p->cellheight, (x-1) * p->cellwidth + (long) len * p->cellwidth * promille / 1000 - 1, y * p->cellheight - 3, 1 ); + sed1330_rect(p, (x-1) * p->cellwidth, (y-1) * p->cellheight, + (x-1) * p->cellwidth + (long) len * p->cellwidth * promille / 1000 - 1, y * p->cellheight - 3, 1); } @@ -881,7 +919,7 @@ sed1330_num( Driver * drvthis, int x, int y, int num ) { //PrivateData * p = drvthis->private_data; - debug( RPT_DEBUG, "%s( x=%d, y=%d, num=%d )", __FUNCTION__, x, y, num ); + debug(RPT_DEBUG, "%s( x=%d, y=%d, num=%d )", __FUNCTION__, x, y, num); // TODO: add code here :) } @@ -915,17 +953,18 @@ sed1330_heartbeat( Driver * drvthis, int type ) { 0xFF, 0xFF, 0xCF, 0x87, 0x87, 0xCF, 0xFF, 0xFF }, }; - debug( RPT_DEBUG, "%s( type=%d )", __FUNCTION__, type ); + debug(RPT_DEBUG, "%s( type=%d )", __FUNCTION__, type); - if( type == HEARTBEAT_OFF ) return; + if (type == HEARTBEAT_OFF) + return; p->framebuf_text[p->width-1] = ' '; //whichIcon = (! ((timer + 4) & 5)); pos = p->width - 1; - for( n=0; n < p->cellheight; n++ ) { + for (n = 0; n < p->cellheight; n++) { //p->framebuf_graph[pos] = heartdata[whichIcon][n]; - if( n < 8 ) { + if (n < 8) { p->framebuf_graph[pos] = bouncing_ball[timer][n]; } else { p->framebuf_graph[pos] = 0; @@ -944,9 +983,9 @@ sed1330_heartbeat( Driver * drvthis, int type ) MODULE_EXPORT int sed1330_icon( Driver * drvthis, int x, int y, int icon ) { - switch( icon ) { + switch (icon) { case ICON_BLOCK_FILLED: - sed1330_chr( drvthis, x, y, 255 ); + sed1330_chr(drvthis, x, y, 255); break; default: return -1; @@ -966,13 +1005,14 @@ sed1330_get_key(Driver *drvthis) char * keystr = NULL; struct timeval curr_time, time_diff; - if( ! p->have_keypad ) return NULL; + if (!p->have_keypad) + return NULL; gettimeofday(&curr_time,NULL); scancode = sed1330_scankeypad(p); - if( scancode ) { - if( scancode & 0xF0 ) { + if (scancode) { + if (scancode & 0xF0) { keystr = p->keyMapMatrix[((scancode&0xF0)>>4)-1][(scancode&0x0F)-1]; } else { @@ -980,10 +1020,10 @@ sed1330_get_key(Driver *drvthis) } } - if( keystr != NULL ) { + if (keystr != NULL) { if (keystr == p->pressed_key) { timersub (&curr_time, &(p->pressed_key_time), &time_diff); - if (((time_diff.tv_usec / 1000 + time_diff.tv_sec * 1000) - KEYPAD_AUTOREPEAT_DELAY) < 1000 * p->pressed_key_repetitions / KEYPAD_AUTOREPEAT_FREQ ) { + if (((time_diff.tv_usec / 1000 + time_diff.tv_sec * 1000) - KEYPAD_AUTOREPEAT_DELAY) < 1000 * p->pressed_key_repetitions / KEYPAD_AUTOREPEAT_FREQ) { // The key is already pressed quite some time // but it's not yet time to return a repeated keypress return NULL; @@ -995,7 +1035,8 @@ sed1330_get_key(Driver *drvthis) // It's a new keypress p->pressed_key_time = curr_time; p->pressed_key_repetitions = 0; - report( RPT_INFO, "sed1330_get_key: Key pressed: %s (%d,%d)\n", keystr, scancode&0x0F, (scancode&0xF0)>>4 ); + report(RPT_INFO, "%s: Key pressed: %s (%d,%d)", + drvthis->name, keystr, scancode&0x0F, (scancode&0xF0)>>4); } } @@ -1030,8 +1071,8 @@ unsigned char sed1330_scankeypad(PrivateData *p) // A directly connected key was pressed // Which key was it ? shiftingbit = 1; - for (shiftcount=0; shiftcount=0; exp--) { + for (exp = 3; exp >= 0; exp--) { Ypattern = ((1 << (1 << exp)) - 1) << Yval; keybits = sed1330_readkeypad (p, Ypattern); if (!keybits) { @@ -1061,10 +1102,10 @@ unsigned char sed1330_scankeypad(PrivateData *p) } // Which key is pressed in that row ? - keybits = sed1330_readkeypad (p, 1<port, ~YData & 0x00FF ); + port_out(p->port, ~YData & 0x00FF); // Read inputs readval = ~ port_in (p->port + 1) ^ INMASK; @@ -1097,6 +1138,6 @@ unsigned char sed1330_readkeypad (PrivateData *p, unsigned int YData) ((readval & SELIN) / SELIN <<3) | /* pin 13 */ ((readval & PAPEREND) / PAPEREND <<2) | /* pin 12 */ ((readval & BUSY) / BUSY <<1) | /* pin 11 */ - ((readval & ACK) / ACK )) & ~p->stuckinputs; /* pin 10 */ + ((readval & ACK) / ACK)) & ~p->stuckinputs; /* pin 10 */ }