Terminal Library - To interface with a termainal application (e.g. Terterm) to give some more functionallity

Dependents:   TestConsoleLib MAX32600MBED_MAX31723_Temperature_Sensor

Committer:
ms523
Date:
Sun Nov 21 08:33:20 2010 +0000
Revision:
0:3bea6f596c03

        

Who changed what in which revision?

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