#include #include #include #include #include #include #include #include "lcd.h" #include "text.h" #include "drv_base.h" lcd_logical_driver *text; ////////////////////////////////////////////////////////////////////////// ////////////////////// For Text-Mode Output ////////////////////////////// ////////////////////////////////////////////////////////////////////////// int text_init(lcd_logical_driver *driver, char *args) { text = driver; if(!driver->framebuf) { driver->close(); return -1; } driver->wid = 20; driver->hgt = 4; driver->cellwid = 5; driver->cellhgt = 8; driver->clear = (void *)-1; driver->string = (void *)-1; driver->chr = (void *)-1; driver->vbar = text_vbar; driver->init_vbar = NULL; driver->hbar = text_hbar; driver->init_hbar = NULL; driver->num = (void *)-1; driver->init_num = NULL; driver->init = text_init; driver->close = text_close; driver->flush = text_flush; driver->flush_box = NULL; driver->contrast = NULL; driver->backlight = NULL; driver->set_char = NULL; driver->icon = NULL; driver->draw_frame = text_draw_frame; driver->getkey = NULL; return 200; // 200 is arbitrary. (must be 1 or more) } void text_close() { drv_base_close(); } ///////////////////////////////////////////////////////////////// // Clears the LCD screen // void text_clear() { memset(lcd.framebuf, ' ', lcd.wid*lcd.hgt); } ////////////////////////////////////////////////////////////////// // Flushes all output to the lcd... // void text_flush() { text_draw_frame(lcd.framebuf); } ///////////////////////////////////////////////////////////////// // Prints a string on the lcd display, at position (x,y). The // upper-left is (1,1), and the lower right should be (20,4). // void text_string(int x, int y, char string[]) { int i; x -= 1; // Convert 1-based coords to 0-based... y -= 1; for(i=0; string[i]; i++) { lcd.framebuf[(y*lcd.wid) + x + i] = string[i]; } } ///////////////////////////////////////////////////////////////// // Prints a character on the lcd display, at position (x,y). The // upper-left is (1,1), and the lower right should be (20,4). // void text_chr(int x, int y, char c) { y--; x--; lcd.framebuf[(y*lcd.wid) + x] = c; } int text_contrast(int contrast) { // printf("Contrast: %i\n", contrast); return 0; } void text_backlight(int on) { /* if(on) { printf("Backlight ON\n"); } else { printf("Backlight OFF\n"); } */ } void text_init_vbar() { // printf("Vertical bars.\n"); } void text_init_hbar() { // printf("Horizontal bars.\n"); } void text_init_num() { // printf("Big Numbers.\n"); } void text_num(int x, int num) { // printf("BigNum(%i, %i)\n", x, num); } void text_set_char(int n, char *dat) { // printf("Set Character %i\n", n); } ///////////////////////////////////////////////////////////////// // Draws a vertical bar; erases entire column onscreen. // void text_vbar(int x, int len) { int y; for(y=lcd.hgt; y > 0 && len>0; y--) { text_chr(x, y, '|'); len -= lcd.cellhgt; } } ///////////////////////////////////////////////////////////////// // Draws a horizontal bar to the right. // void text_hbar(int x, int y, int len) { for(; x<=lcd.wid && len>0; x++) { text_chr(x,y,'-'); len -= lcd.cellwid; } } void text_flush_box(int lft, int top, int rgt, int bot) { text_flush(); } void text_draw_frame(char *dat) { int i, j; char out[LCD_MAX_WIDTH]; if(!dat) return; // printf("Frame (%ix%i): \n%s\n", lcd.wid, lcd.hgt, dat); for(i=0; i