Changeset 888
- Timestamp:
- 08/27/08 05:30:06 (3 months ago)
- Files:
-
- 1 modified
-
trunk/drv_D4D.c (modified) (27 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/drv_D4D.c
r887 r888 2 2 * $URL: https://ssl.bulix.org/svn/lcd4linux/trunk/drv_D4D.c $ 3 3 * 4 * lcd4linux driver for 4D Systems serial displays4 * LCD4Linux driver for 4D Systems Display Graphics Modules 5 5 * 6 6 * Copyright (C) 2008 Sven Killig <sven@killig.de> … … 105 105 if (fd < 0) 106 106 return -1; 107 fcntl(fd, F_SETFL, 0); 107 fcntl(fd, F_SETFL, 0); /* blocking read */ 108 108 return 0; 109 109 } … … 120 120 { 121 121 char ret[1]; 122 while (drv_generic_serial_read(ret, sizeof(ret)) != 1) { 123 usleep(1); /* loop should be unneccessary */ 124 } 125 /* drv_generic_serial_poll(ret,1); */ 122 while (drv_generic_serial_read(ret, sizeof(ret)) != 1) 123 usleep(1); /* loop should be unneccessary */ 126 124 if (ret[0] == 0x15) { 127 125 error("NAK!"); … … 144 142 static void drv_D4D_send_nowait_extra(const char *data, const unsigned int len, unsigned char pos1, unsigned char pos2) 145 143 { 144 /* possibly leave out bytes at pos1 and pos2 for older protocol format */ 146 145 if (EXTRA) { 147 146 drv_D4D_send_nowait(data, len); … … 182 181 int i, k = 0; 183 182 184 if (!SECTOR) { 183 if (!SECTOR) { /* font in ROM */ 185 184 186 185 for (i = 0; i < len; i++) { … … 206 205 } 207 206 208 char cmd[] = { 's', col, row, FONT, msb(FG_COLOR), lsb(FG_COLOR) }; 207 char cmd[] = { 's', col, row, FONT, msb(FG_COLOR), lsb(FG_COLOR) }; /* normal chars */ 209 208 drv_D4D_send_nowait(cmd, sizeof(cmd)); 210 209 if (len > 256) … … 215 214 drv_D4D_send(cmdNull, 1); 216 215 217 char cmd_user[] = { 'D', 0, 0, 0, 0, 0, msb(FG_COLOR), lsb(FG_COLOR) }; 216 char cmd_user[] = { 'D', 0, 0, 0, 0, 0, msb(FG_COLOR), lsb(FG_COLOR) }; /* user defined symbols */ 218 217 for (i = 0; i < k; i++) { 219 218 cmd_user[2] = user_char[i]; … … 223 222 drv_D4D_send_extra(cmd_user, sizeof(cmd_user), 1, 4); 224 223 } 225 } else { 224 } else { /* font on SD card */ 226 225 int sec; 227 226 char cmd_sd[] = { '@', 'I', 0, msb(row * YRES), lsb(row * YRES), XRES, msb(YRES), lsb(YRES), 16, 0, 0, 0 }; … … 240 239 static void drv_D4D_defchar(const int ascii, const unsigned char *matrix) 241 240 { 242 /* error("drv_D4D_defchar"); */241 /* error("drv_D4D_defchar"); */ 243 242 char cmd[11]; 244 243 int i; … … 257 256 static void drv_D4D_blit(const int row, const int col, const int height, const int width) 258 257 { 259 /* error("drv_D4D_blit(%i, %i, %i, %i)",row, col, height, width); */258 /* error("drv_D4D_blit(%i, %i, %i, %i)",row, col, height, width); */ 260 259 int r, c; 261 260 RGBA rgb, pixel0_0, pixel; … … 264 263 265 264 265 /* optimization: single colour rectangle? */ 266 266 pixel0_0 = drv_generic_graphic_rgb(0, 0); 267 267 char unicolor = 1; … … 297 297 color = RGB_24to16(rgb.R, rgb.G, rgb.B); 298 298 colorArray[0] = msb(color); 299 drv_D4D_send_nowait(colorArray, 1); /* doesn't w ork if sent together (error: "partial write(/dev/tts/1): len=2 ret=1") */299 drv_D4D_send_nowait(colorArray, 1); /* doesn't werk if sent together (error: "partial write(/dev/tts/1): len=2 ret=1") */ 300 300 /* colorArray[1]=lsb(color); */ 301 301 colorArray[0] = lsb(color); 302 302 drv_D4D_send_nowait(colorArray, 1); 303 303 } 304 /*drv_D4D_send_nowait(colorArray, MODE/8); */304 /* drv_D4D_send_nowait(colorArray, MODE/8); */ 305 305 } 306 306 } … … 320 320 drv_D4D_send(cmd, sizeof(cmd)); 321 321 322 /* CONTRAST_ =contrast; */322 /* CONTRAST_=contrast; */ 323 323 return contrast; 324 324 } … … 327 327 static int drv_D4D_start(const char *section) 328 328 { 329 info("drv_D4D_start()");329 /* error("drv_D4D_start()"); */ 330 330 int contrast; 331 331 int xres_cfg = -1, yres_cfg = -1; … … 355 355 int i; 356 356 for (i = 0; i < 2; i++) { 357 switch ( answer[3 + i]) {357 switch ((unsigned char) answer[3 + i]) { 358 358 case 0x22: 359 359 res[i] = 220; … … 375 375 res[i] = 176; 376 376 break; 377 case 0x96: /* Fixme: case label value exceeds maximum value for type */377 case 0x96: 378 378 res[i] = 96; 379 379 break; 380 380 case 0x24: 381 res[i] = 240; /* undocumented? */382 break; 381 res[i] = 240; 382 break; /* undocumented? */ 383 383 default: 384 error ("Fixme"); 384 error("Can't detect display dimensions!"); 385 return -1; 385 386 } 386 387 } … … 402 403 } 403 404 404 if (yres_cfg == -1) { 405 if (yres_cfg == -1) { /* font on SD card */ 405 406 SECTOR = xres_cfg * 512; 406 407 char setAddress[] = … … 442 443 DCOLS = DCOLS / XRES; 443 444 DROWS = DROWS / YRES; 444 switch (yres_cfg) { 445 case 8: 446 FONT = 1; 445 switch (yres_cfg) { /* font in ROM */ 446 case 8: /* FONT=1; break; */ 447 switch (xres_cfg) { 448 case 6: 449 FONT = 0; 450 break; 451 case 8: 452 FONT = 1; 453 break; 454 default: 455 error("%s: unknown width in %s.Font '%s' from %s", Name, section, s, cfg_source()); 456 return -1; 457 }; 447 458 break; 448 459 case 12: … … 452 463 FONT = 3; 453 464 break; 454 } 455 if (xres_cfg == 5) 456 FONT = 0; 457 } 458 459 printf("XRES=%i; YRES=%i, DCOLS=%i; DROWS=%d; FONT=%d; SECTOR=%i; SECTOR_SIZE=%i\n", XRES, YRES, DCOLS, DROWS, FONT, 460 SECTOR, SECTOR_SIZE); 465 case -1: 466 break; 467 default: 468 error("%s: unknown height in %s.Font '%s' from %s", Name, section, s, cfg_source()); 469 return -1; 470 } 471 /* if(xres_cfg==6) FONT=0; */ 472 } 473 474 info("XRES=%i, YRES=%i; DCOLS=%i, DROWS=%d; FONT=%d, SECTOR=%i, SECTOR_SIZE=%i\n", XRES, YRES, DCOLS, DROWS, 475 FONT, SECTOR, SECTOR_SIZE); 461 476 462 477 … … 467 482 drv_D4D_send(powerOn, sizeof(powerOn)); 468 483 469 /* char background[] = {'B', msb(BG_COLOR), lsb(BG_COLOR)}; 484 /*! */ 485 /*char background[] = {'B', msb(BG_COLOR), lsb(BG_COLOR)}; 470 486 drv_D4D_send(background, sizeof(background)); */ 471 487 } … … 479 495 480 496 if (!MODE) { 481 unsigned char buffer[] = { 0x18, 0x24, 0x24, 0x18, 0, 0, 0, 0 }; /* degree */497 unsigned char buffer[] = { 0x18, 0x24, 0x24, 0x18, 0, 0, 0, 0 }; /* degree */ 482 498 drv_D4D_defchar(CHAR0, buffer); 483 499 CHARS--; … … 511 527 512 528 513 int lastVal[48 * 40 * 2]; /* MAX_WIDGETS*2 */529 int lastVal[48 * 40 * 2]; /* ToDo: MAX_WIDGETS*2 */ 514 530 int drv_D4D_bar_draw(WIDGET * W) 515 531 { 532 /* optimizations: 533 - draw filled rectangles instead of user defined bar characters 534 - cache last values */ 535 516 536 WIDGET_BAR *Bar = W->data; 517 537 int row, col, len, res, max, val1, val2; … … 553 573 val[1] = val2; 554 574 int i, vals; 555 if (val1 == val2 && lastVal[row * DCOLS + col] == lastVal[row * DCOLS + col + DROWS * DCOLS]) 575 int lastValIndex0 = row * DCOLS + col; 576 int cells = DROWS * DCOLS; 577 if (val1 == val2 && lastVal[lastValIndex0] == lastVal[lastValIndex0 + cells]) 556 578 vals = 1; 557 579 else 558 580 vals = 2; 559 581 for (i = 0; i < vals; i++) { 560 int lastValIndex = row * DCOLS + col + DROWS * DCOLS * (i + 1);582 int lastValIndex = lastValIndex0 + cells * (i /*+1 */ ); 561 583 int y1 = row * YRES + (YRES / 2) * i; 562 584 cmd[2] = msb(y1); 563 585 cmd[3] = lsb(y1); 564 int y2 = y1 + (YRES ) / vals - 1; /* YRES-1 */586 int y2 = y1 + (YRES /*-1*/ ) / vals - 1; 565 587 cmd[5] = msb(y2); 566 588 cmd[6] = lsb(y2); … … 625 647 int drv_D4D_list(void) 626 648 { 627 printf("4D Systems serial displays");649 printf("4D Systems Display Graphics Modules"); 628 650 return 0; 629 651 } … … 690 712 691 713 drv_generic_text_bar_add_segment(0, 0, 255, 32); 692 /* drv_generic_text_bar_add_segment(255, 255, 255, 31); */ /* ASCII 255 = block */693 714 694 715 … … 715 736 int drv_D4D_quit(const int quiet) 716 737 { 717 error("drv_D4D_quit()");738 /* error("drv_D4D_quit()"); */ 718 739 719 740 info("%s: shutting down.", Name); … … 734 755 } 735 756 757 /* fade */ 736 758 /*int i; 737 759 for(i=CONTRAST_;i>=0;i--) {
