Dependencies:   mbed

Committer:
ms523
Date:
Wed Jan 20 15:09:13 2010 +0000
Revision:
0:408a2c6feb1f

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ms523 0:408a2c6feb1f 1 /* mbed ANSI/VT100 Terminal Library
ms523 0:408a2c6feb1f 2 * Copyright (c) 2007-2009 sford
ms523 0:408a2c6feb1f 3 * Released under the MIT License: http://mbed.org/license/mit
ms523 0:408a2c6feb1f 4 */
ms523 0:408a2c6feb1f 5
ms523 0:408a2c6feb1f 6 #include "Terminal.h"
ms523 0:408a2c6feb1f 7 #include "mbed.h"
ms523 0:408a2c6feb1f 8
ms523 0:408a2c6feb1f 9 #define ASCII_BLOCK 219
ms523 0:408a2c6feb1f 10 #define ASCII_BORDER_H 205
ms523 0:408a2c6feb1f 11 #define ASCII_BORDER_V 186
ms523 0:408a2c6feb1f 12 #define ASCII_BORDER_TL 201
ms523 0:408a2c6feb1f 13 #define ASCII_BORDER_TR 187
ms523 0:408a2c6feb1f 14 #define ASCII_BORDER_BL 200
ms523 0:408a2c6feb1f 15 #define ASCII_BORDER_BR 188
ms523 0:408a2c6feb1f 16 #define WIDTH 30
ms523 0:408a2c6feb1f 17
ms523 0:408a2c6feb1f 18 Terminal::Terminal(PinName tx, PinName rx) : Serial(tx, rx) {}
ms523 0:408a2c6feb1f 19
ms523 0:408a2c6feb1f 20 void Terminal::cls() {
ms523 0:408a2c6feb1f 21 this->printf("\033[2J");
ms523 0:408a2c6feb1f 22 }
ms523 0:408a2c6feb1f 23
ms523 0:408a2c6feb1f 24 void Terminal::locate(int column, int row) {
ms523 0:408a2c6feb1f 25 // Cursor Home <ESC>[{ROW};{COLUMN}H
ms523 0:408a2c6feb1f 26 this->printf("\033[%d;%dH", row + 1, column + 1);
ms523 0:408a2c6feb1f 27 }
ms523 0:408a2c6feb1f 28
ms523 0:408a2c6feb1f 29 static int rgb888tobgr111(int colour) {
ms523 0:408a2c6feb1f 30 int r = (colour >> 23) & 1;
ms523 0:408a2c6feb1f 31 int g = (colour >> 15) & 1;
ms523 0:408a2c6feb1f 32 int b = (colour >> 7) & 1;
ms523 0:408a2c6feb1f 33 return (b << 2) | (g << 1) | (r << 0);
ms523 0:408a2c6feb1f 34 }
ms523 0:408a2c6feb1f 35
ms523 0:408a2c6feb1f 36 void Terminal::foreground(int colour) {
ms523 0:408a2c6feb1f 37 // Set Attribute Mode <ESC>[{n}m
ms523 0:408a2c6feb1f 38 // Foreground Colours : 30 + bgr
ms523 0:408a2c6feb1f 39 int c = 30 + rgb888tobgr111(colour);
ms523 0:408a2c6feb1f 40 this->printf("\033[%dm", c);
ms523 0:408a2c6feb1f 41 }
ms523 0:408a2c6feb1f 42
ms523 0:408a2c6feb1f 43 void Terminal::background(int colour) {
ms523 0:408a2c6feb1f 44 // Set Attribute Mode <ESC>[{n}m
ms523 0:408a2c6feb1f 45 // Background Colours : 40 + bgr
ms523 0:408a2c6feb1f 46 int c = 40 + rgb888tobgr111(colour);
ms523 0:408a2c6feb1f 47 this->printf("\033[%dm", c);
ms523 0:408a2c6feb1f 48 }
ms523 0:408a2c6feb1f 49
ms523 0:408a2c6feb1f 50 void Terminal::box(int x, int y, int w, int h) {
ms523 0:408a2c6feb1f 51 // corners
ms523 0:408a2c6feb1f 52 locate(x, y);
ms523 0:408a2c6feb1f 53 putc(ASCII_BORDER_TL);
ms523 0:408a2c6feb1f 54 locate(x + w - 1, y);
ms523 0:408a2c6feb1f 55 putc(ASCII_BORDER_TR);
ms523 0:408a2c6feb1f 56 locate(x, y + h - 1);
ms523 0:408a2c6feb1f 57 putc(ASCII_BORDER_BL);
ms523 0:408a2c6feb1f 58 locate(x + w - 1, y + h - 1);
ms523 0:408a2c6feb1f 59 putc(ASCII_BORDER_BR);
ms523 0:408a2c6feb1f 60
ms523 0:408a2c6feb1f 61 // top
ms523 0:408a2c6feb1f 62 locate(x + 1, y);
ms523 0:408a2c6feb1f 63 for(int i=0; i<(w-2); i++){
ms523 0:408a2c6feb1f 64 putc(ASCII_BORDER_H);
ms523 0:408a2c6feb1f 65 }
ms523 0:408a2c6feb1f 66
ms523 0:408a2c6feb1f 67 // bottom
ms523 0:408a2c6feb1f 68 locate(x + 1, y + h - 1);
ms523 0:408a2c6feb1f 69 for(int i=0; i<(w-2); i++){
ms523 0:408a2c6feb1f 70 putc(ASCII_BORDER_H);
ms523 0:408a2c6feb1f 71 }
ms523 0:408a2c6feb1f 72
ms523 0:408a2c6feb1f 73 // left
ms523 0:408a2c6feb1f 74 locate(x, y + 1);
ms523 0:408a2c6feb1f 75 for(int i=1; i<(h-1); i++){
ms523 0:408a2c6feb1f 76 putc(ASCII_BORDER_V);
ms523 0:408a2c6feb1f 77 printf("\n");
ms523 0:408a2c6feb1f 78 putc(0x08);
ms523 0:408a2c6feb1f 79 }
ms523 0:408a2c6feb1f 80
ms523 0:408a2c6feb1f 81 // right
ms523 0:408a2c6feb1f 82 locate(x + w - 1, y + 1);
ms523 0:408a2c6feb1f 83 for(int i=1; i<(h-1); i++){
ms523 0:408a2c6feb1f 84 putc(ASCII_BORDER_V);
ms523 0:408a2c6feb1f 85 printf("\n");
ms523 0:408a2c6feb1f 86 putc(0x08);
ms523 0:408a2c6feb1f 87 }
ms523 0:408a2c6feb1f 88 }
ms523 0:408a2c6feb1f 89
ms523 0:408a2c6feb1f 90