Basically i glued Peter Drescher and Simon Ford libs in a GraphicsDisplay class, then derived TFT or LCD class (which inherits Protocols class), then the most derived ones (Inits), which are per-display and are the only part needed to be adapted to diff hw.

Fork of UniGraphic by GraphicsDisplay

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers TextDisplay.cpp Source File

TextDisplay.cpp

00001 /* mbed TextDisplay Display Library Base Class
00002  * Copyright (c) 2007-2009 sford
00003  * Released under the MIT License: http://mbed.org/license/mit
00004  */
00005  
00006 #include "TextDisplay.h"
00007 
00008 TextDisplay::TextDisplay(const char *name) : Stream(name){
00009     _row = 0;
00010     _column = 0;
00011     if (name == NULL) {
00012         _path = NULL;
00013     } else {
00014         _path = new char[strlen(name) + 2];
00015         sprintf(_path, "/%s", name);
00016     }
00017 }
00018     
00019 int TextDisplay::_putc(int value) {
00020     if(value == '\n') {
00021         _column = 0;
00022         _row++;
00023         if(_row >= rows()) {
00024             _row = 0;
00025         }
00026     } else {
00027         character(_column, _row, value);
00028         _column++;
00029         if(_column >= columns()) {
00030             _column = 0;
00031             _row++;
00032             if(_row >= rows()) {
00033                 _row = 0;
00034             }
00035         }
00036     }
00037     return value;
00038 }
00039 
00040 // crude cls implementation, should generally be overwritten in derived class
00041 void TextDisplay::cls() {
00042     locate(0, 0);
00043     for(int i=0; i<columns()*rows(); i++) {
00044         putc(' ');
00045     }
00046 }
00047 
00048 void TextDisplay::locate(int column, int row) {
00049     _column = column;
00050     _row = row;
00051 }
00052 
00053 int TextDisplay::_getc() {
00054     return -1;
00055 }
00056         
00057 void TextDisplay::foreground(uint16_t colour) {
00058     _foreground = colour;
00059 }
00060 
00061 void TextDisplay::background(uint16_t colour) {
00062     _background = colour;
00063 }
00064 
00065 bool TextDisplay::claim (FILE *stream) {
00066     if ( _path == NULL) {
00067         fprintf(stderr, "claim requires a name to be given in the instantioator of the TextDisplay instance!\r\n");
00068         return false;
00069     }
00070     if (freopen(_path, "w", stream) == NULL) {
00071         // Failed, should not happen
00072         return false;
00073     }
00074     // make sure we use line buffering
00075     setvbuf(stdout, NULL, _IOLBF, columns());
00076     return true;
00077 }