brw1

Dependencies:   mbed

Committer:
reiniermarcel
Date:
Mon Nov 30 11:13:18 2015 +0000
Revision:
0:a115ff47d1c1
ok

Who changed what in which revision?

UserRevisionLine numberNew contents of line
reiniermarcel 0:a115ff47d1c1 1 /* mbed TextDisplay Display Library Base Class
reiniermarcel 0:a115ff47d1c1 2 * Copyright (c) 2007-2009 sford
reiniermarcel 0:a115ff47d1c1 3 * Released under the MIT License: http://mbed.org/license/mit
reiniermarcel 0:a115ff47d1c1 4 */
reiniermarcel 0:a115ff47d1c1 5
reiniermarcel 0:a115ff47d1c1 6 #include "TextDisplay.h"
reiniermarcel 0:a115ff47d1c1 7
reiniermarcel 0:a115ff47d1c1 8 //#define DEBUG "Text"
reiniermarcel 0:a115ff47d1c1 9 // ...
reiniermarcel 0:a115ff47d1c1 10 // INFO("Stuff to show %d", var); // new-line is automatically appended
reiniermarcel 0:a115ff47d1c1 11 //
reiniermarcel 0:a115ff47d1c1 12 #if (defined(DEBUG) && !defined(TARGET_LPC11U24))
reiniermarcel 0:a115ff47d1c1 13 #define INFO(x, ...) std::printf("[INF %s %3d] "x"\r\n", DEBUG, __LINE__, ##__VA_ARGS__);
reiniermarcel 0:a115ff47d1c1 14 #define WARN(x, ...) std::printf("[WRN %s %3d] "x"\r\n", DEBUG, __LINE__, ##__VA_ARGS__);
reiniermarcel 0:a115ff47d1c1 15 #define ERR(x, ...) std::printf("[ERR %s %3d] "x"\r\n", DEBUG, __LINE__, ##__VA_ARGS__);
reiniermarcel 0:a115ff47d1c1 16 #else
reiniermarcel 0:a115ff47d1c1 17 #define INFO(x, ...)
reiniermarcel 0:a115ff47d1c1 18 #define WARN(x, ...)
reiniermarcel 0:a115ff47d1c1 19 #define ERR(x, ...)
reiniermarcel 0:a115ff47d1c1 20 #endif
reiniermarcel 0:a115ff47d1c1 21
reiniermarcel 0:a115ff47d1c1 22 TextDisplay::TextDisplay(const char *name) : Stream(name)
reiniermarcel 0:a115ff47d1c1 23 {
reiniermarcel 0:a115ff47d1c1 24 _row = 0;
reiniermarcel 0:a115ff47d1c1 25 _column = 0;
reiniermarcel 0:a115ff47d1c1 26 if (name == NULL) {
reiniermarcel 0:a115ff47d1c1 27 _path = NULL;
reiniermarcel 0:a115ff47d1c1 28 } else {
reiniermarcel 0:a115ff47d1c1 29 _path = new char[strlen(name) + 2];
reiniermarcel 0:a115ff47d1c1 30 sprintf(_path, "/%s", name);
reiniermarcel 0:a115ff47d1c1 31 }
reiniermarcel 0:a115ff47d1c1 32 }
reiniermarcel 0:a115ff47d1c1 33
reiniermarcel 0:a115ff47d1c1 34 int TextDisplay::_putc(int value)
reiniermarcel 0:a115ff47d1c1 35 {
reiniermarcel 0:a115ff47d1c1 36 INFO("_putc(%d)", value);
reiniermarcel 0:a115ff47d1c1 37 if(value == '\n') {
reiniermarcel 0:a115ff47d1c1 38 _column = 0;
reiniermarcel 0:a115ff47d1c1 39 _row++;
reiniermarcel 0:a115ff47d1c1 40 if(_row >= rows()) {
reiniermarcel 0:a115ff47d1c1 41 _row = 0;
reiniermarcel 0:a115ff47d1c1 42 }
reiniermarcel 0:a115ff47d1c1 43 } else {
reiniermarcel 0:a115ff47d1c1 44 character(_column, _row, value);
reiniermarcel 0:a115ff47d1c1 45 _column++;
reiniermarcel 0:a115ff47d1c1 46 if(_column >= columns()) {
reiniermarcel 0:a115ff47d1c1 47 _column = 0;
reiniermarcel 0:a115ff47d1c1 48 _row++;
reiniermarcel 0:a115ff47d1c1 49 if(_row >= rows()) {
reiniermarcel 0:a115ff47d1c1 50 _row = 0;
reiniermarcel 0:a115ff47d1c1 51 }
reiniermarcel 0:a115ff47d1c1 52 }
reiniermarcel 0:a115ff47d1c1 53 }
reiniermarcel 0:a115ff47d1c1 54 return value;
reiniermarcel 0:a115ff47d1c1 55 }
reiniermarcel 0:a115ff47d1c1 56
reiniermarcel 0:a115ff47d1c1 57 // crude cls implementation, should generally be overwritten in derived class
reiniermarcel 0:a115ff47d1c1 58 RetCode_t TextDisplay::cls(uint16_t layers)
reiniermarcel 0:a115ff47d1c1 59 {
reiniermarcel 0:a115ff47d1c1 60 INFO("cls()");
reiniermarcel 0:a115ff47d1c1 61 locate(0, 0);
reiniermarcel 0:a115ff47d1c1 62 for(int i=0; i<columns()*rows(); i++) {
reiniermarcel 0:a115ff47d1c1 63 putc(' ');
reiniermarcel 0:a115ff47d1c1 64 }
reiniermarcel 0:a115ff47d1c1 65 return noerror;
reiniermarcel 0:a115ff47d1c1 66 }
reiniermarcel 0:a115ff47d1c1 67
reiniermarcel 0:a115ff47d1c1 68 RetCode_t TextDisplay::locate(textloc_t column, textloc_t row)
reiniermarcel 0:a115ff47d1c1 69 {
reiniermarcel 0:a115ff47d1c1 70 INFO("locate(%d,%d)", column, row);
reiniermarcel 0:a115ff47d1c1 71 _column = column;
reiniermarcel 0:a115ff47d1c1 72 _row = row;
reiniermarcel 0:a115ff47d1c1 73 return noerror;
reiniermarcel 0:a115ff47d1c1 74 }
reiniermarcel 0:a115ff47d1c1 75
reiniermarcel 0:a115ff47d1c1 76 int TextDisplay::_getc()
reiniermarcel 0:a115ff47d1c1 77 {
reiniermarcel 0:a115ff47d1c1 78 return -1;
reiniermarcel 0:a115ff47d1c1 79 }
reiniermarcel 0:a115ff47d1c1 80
reiniermarcel 0:a115ff47d1c1 81 RetCode_t TextDisplay::foreground(uint16_t color)
reiniermarcel 0:a115ff47d1c1 82 {
reiniermarcel 0:a115ff47d1c1 83 //INFO("foreground(%4X)", color);
reiniermarcel 0:a115ff47d1c1 84 _foreground = color;
reiniermarcel 0:a115ff47d1c1 85 return noerror;
reiniermarcel 0:a115ff47d1c1 86 }
reiniermarcel 0:a115ff47d1c1 87
reiniermarcel 0:a115ff47d1c1 88 RetCode_t TextDisplay::background(uint16_t color)
reiniermarcel 0:a115ff47d1c1 89 {
reiniermarcel 0:a115ff47d1c1 90 //INFO("background(%4X)", color);
reiniermarcel 0:a115ff47d1c1 91 _background = color;
reiniermarcel 0:a115ff47d1c1 92 return noerror;
reiniermarcel 0:a115ff47d1c1 93 }
reiniermarcel 0:a115ff47d1c1 94
reiniermarcel 0:a115ff47d1c1 95 bool TextDisplay::claim(FILE *stream)
reiniermarcel 0:a115ff47d1c1 96 {
reiniermarcel 0:a115ff47d1c1 97 if ( _path == NULL) {
reiniermarcel 0:a115ff47d1c1 98 fprintf(stderr, "claim requires a name to be given in the instantiator of the TextDisplay instance!\r\n");
reiniermarcel 0:a115ff47d1c1 99 return false;
reiniermarcel 0:a115ff47d1c1 100 }
reiniermarcel 0:a115ff47d1c1 101 if (freopen(_path, "w", stream) == NULL) {
reiniermarcel 0:a115ff47d1c1 102 return false; // Failed, should not happen
reiniermarcel 0:a115ff47d1c1 103 }
reiniermarcel 0:a115ff47d1c1 104 // make sure we use line buffering
reiniermarcel 0:a115ff47d1c1 105 setvbuf(stdout, NULL, _IOLBF, columns());
reiniermarcel 0:a115ff47d1c1 106 return true;
reiniermarcel 0:a115ff47d1c1 107 }
reiniermarcel 0:a115ff47d1c1 108