projeto de corrida

Dependencies:   TermControl

Committer:
diegocavalcanti
Date:
Sat Dec 10 13:43:20 2016 +0000
Revision:
0:476c153c1126
projeto

Who changed what in which revision?

UserRevisionLine numberNew contents of line
diegocavalcanti 0:476c153c1126 1 #ifndef TERMCONTROL_H
diegocavalcanti 0:476c153c1126 2 #define TERMCONTROL_H
diegocavalcanti 0:476c153c1126 3 #include "mbed.h"
diegocavalcanti 0:476c153c1126 4 #include <string>
diegocavalcanti 0:476c153c1126 5 //0x1B is escape
diegocavalcanti 0:476c153c1126 6 //#define FLASH_STRING const char * const
diegocavalcanti 0:476c153c1126 7
diegocavalcanti 0:476c153c1126 8 /** A simple class for sending VT100 terminal escape codes for handling things such as moving the cursor and clearing the screen
diegocavalcanti 0:476c153c1126 9 */
diegocavalcanti 0:476c153c1126 10 class TermControl
diegocavalcanti 0:476c153c1126 11 {
diegocavalcanti 0:476c153c1126 12 public:
diegocavalcanti 0:476c153c1126 13 TermControl()
diegocavalcanti 0:476c153c1126 14 {
diegocavalcanti 0:476c153c1126 15
diegocavalcanti 0:476c153c1126 16 }
diegocavalcanti 0:476c153c1126 17 /** @Param term The stream to send the escape codes to
diegocavalcanti 0:476c153c1126 18 */
diegocavalcanti 0:476c153c1126 19 TermControl(Stream* term)
diegocavalcanti 0:476c153c1126 20 {
diegocavalcanti 0:476c153c1126 21 Term=term;
diegocavalcanti 0:476c153c1126 22 }
diegocavalcanti 0:476c153c1126 23 void SetTerminal(Stream* term)
diegocavalcanti 0:476c153c1126 24 {
diegocavalcanti 0:476c153c1126 25 Term=term;
diegocavalcanti 0:476c153c1126 26 }
diegocavalcanti 0:476c153c1126 27 Stream* GetTerminal()
diegocavalcanti 0:476c153c1126 28 {
diegocavalcanti 0:476c153c1126 29 return Term;
diegocavalcanti 0:476c153c1126 30 }
diegocavalcanti 0:476c153c1126 31 //terminal control
diegocavalcanti 0:476c153c1126 32 /** Resets the terminal to defaults
diegocavalcanti 0:476c153c1126 33 */
diegocavalcanti 0:476c153c1126 34 void Reset()
diegocavalcanti 0:476c153c1126 35 {
diegocavalcanti 0:476c153c1126 36 Print("\x1Bc");
diegocavalcanti 0:476c153c1126 37 }
diegocavalcanti 0:476c153c1126 38 /** Clears the screen
diegocavalcanti 0:476c153c1126 39 */
diegocavalcanti 0:476c153c1126 40 void Clear()
diegocavalcanti 0:476c153c1126 41 {
diegocavalcanti 0:476c153c1126 42 Term->printf("\x1B[2J");
diegocavalcanti 0:476c153c1126 43 }
diegocavalcanti 0:476c153c1126 44 /** Prints the specified string at coordinates x,y
diegocavalcanti 0:476c153c1126 45 * The cursor position is not changed
diegocavalcanti 0:476c153c1126 46 *
diegocavalcanti 0:476c153c1126 47 * @param x The X coordinate, or column
diegocavalcanti 0:476c153c1126 48 * @param y The Y coordinate, or row
diegocavalcanti 0:476c153c1126 49 * @param s The string to print
diegocavalcanti 0:476c153c1126 50 */
diegocavalcanti 0:476c153c1126 51 void PrintAt(int x, int y, string s)
diegocavalcanti 0:476c153c1126 52 {
diegocavalcanti 0:476c153c1126 53 SaveCursor();
diegocavalcanti 0:476c153c1126 54 ResetCursor();
diegocavalcanti 0:476c153c1126 55 SetCursor(x,y);
diegocavalcanti 0:476c153c1126 56 Print(s);
diegocavalcanti 0:476c153c1126 57 RestoreCursor();
diegocavalcanti 0:476c153c1126 58 }
diegocavalcanti 0:476c153c1126 59 //todo void PrintfAt(int x, int y, string f, ...);
diegocavalcanti 0:476c153c1126 60 /** Get a character from the terminal stream
diegocavalcanti 0:476c153c1126 61 */
diegocavalcanti 0:476c153c1126 62 char GetChar()
diegocavalcanti 0:476c153c1126 63 {
diegocavalcanti 0:476c153c1126 64 return Term->getc();
diegocavalcanti 0:476c153c1126 65 }
diegocavalcanti 0:476c153c1126 66 /** Sets the cursor's position to x,y
diegocavalcanti 0:476c153c1126 67 */
diegocavalcanti 0:476c153c1126 68 void SetCursor(int x, int y)
diegocavalcanti 0:476c153c1126 69 {
diegocavalcanti 0:476c153c1126 70 Term->printf("\x1B[%i;%iH",y,x);
diegocavalcanti 0:476c153c1126 71 }
diegocavalcanti 0:476c153c1126 72 /** Resets the cursor to (0,0), the top left hand corner of the screen
diegocavalcanti 0:476c153c1126 73 */
diegocavalcanti 0:476c153c1126 74 void ResetCursor()
diegocavalcanti 0:476c153c1126 75 {
diegocavalcanti 0:476c153c1126 76 Term->printf("\x1B[H");
diegocavalcanti 0:476c153c1126 77 }
diegocavalcanti 0:476c153c1126 78 /** Saves the cursor on the display-side. It can only remember one cursor position at a time.
diegocavalcanti 0:476c153c1126 79 * ie, this can't be nested
diegocavalcanti 0:476c153c1126 80 */
diegocavalcanti 0:476c153c1126 81 void SaveCursor()
diegocavalcanti 0:476c153c1126 82 {
diegocavalcanti 0:476c153c1126 83 Term->printf("\x1B[s");
diegocavalcanti 0:476c153c1126 84 }
diegocavalcanti 0:476c153c1126 85 /** Restores the cursor on the display-side. It can only remember and store one cursor position at a time.
diegocavalcanti 0:476c153c1126 86 * ie, this can't be nested
diegocavalcanti 0:476c153c1126 87 */
diegocavalcanti 0:476c153c1126 88 void RestoreCursor()
diegocavalcanti 0:476c153c1126 89 {
diegocavalcanti 0:476c153c1126 90 Term->printf("\x1B[u");
diegocavalcanti 0:476c153c1126 91 }
diegocavalcanti 0:476c153c1126 92 /** Enables a scrolling "window" at the specified beginning and ending rows
diegocavalcanti 0:476c153c1126 93 * @param begin The beginning row
diegocavalcanti 0:476c153c1126 94 * @param end The ending row
diegocavalcanti 0:476c153c1126 95 */
diegocavalcanti 0:476c153c1126 96 void EnableScrolling(int begin, int end) //begin and end are row numbers
diegocavalcanti 0:476c153c1126 97 {
diegocavalcanti 0:476c153c1126 98 Term->printf("\x1B[%i;%ir",begin,end);
diegocavalcanti 0:476c153c1126 99 }
diegocavalcanti 0:476c153c1126 100 /** Scrolls down the scrolling "window" by 1 line. Note, EnableScrolling is required before this can be called
diegocavalcanti 0:476c153c1126 101 */
diegocavalcanti 0:476c153c1126 102 void ScrollDown()
diegocavalcanti 0:476c153c1126 103 {
diegocavalcanti 0:476c153c1126 104 Term->printf("\x1BD");
diegocavalcanti 0:476c153c1126 105 }
diegocavalcanti 0:476c153c1126 106 /** Scrolls up the scrolling "window" by 1 line. Note, EnableScrolling is required before this can be called
diegocavalcanti 0:476c153c1126 107 */
diegocavalcanti 0:476c153c1126 108 void ScrollUp()
diegocavalcanti 0:476c153c1126 109 {
diegocavalcanti 0:476c153c1126 110 Term->printf("\x1BM");
diegocavalcanti 0:476c153c1126 111 }
diegocavalcanti 0:476c153c1126 112 /** Erases the current line the cursor is on.
diegocavalcanti 0:476c153c1126 113 */
diegocavalcanti 0:476c153c1126 114 void EraseLine()
diegocavalcanti 0:476c153c1126 115 {
diegocavalcanti 0:476c153c1126 116 Term->printf("\x1B[2K");
diegocavalcanti 0:476c153c1126 117 }
diegocavalcanti 0:476c153c1126 118 /** Prints the specified string to the string at the current cursor position
diegocavalcanti 0:476c153c1126 119 */
diegocavalcanti 0:476c153c1126 120 void Print(string s)
diegocavalcanti 0:476c153c1126 121 {
diegocavalcanti 0:476c153c1126 122 Term->puts(s.c_str());
diegocavalcanti 0:476c153c1126 123 }
diegocavalcanti 0:476c153c1126 124
diegocavalcanti 0:476c153c1126 125
diegocavalcanti 0:476c153c1126 126 private:
diegocavalcanti 0:476c153c1126 127 Stream *Term;
diegocavalcanti 0:476c153c1126 128 };
diegocavalcanti 0:476c153c1126 129
diegocavalcanti 0:476c153c1126 130
diegocavalcanti 0:476c153c1126 131
diegocavalcanti 0:476c153c1126 132
diegocavalcanti 0:476c153c1126 133 #endif