first commit

This commit is contained in:
2022-08-24 07:59:16 +02:00
commit adfe5792c4
259 changed files with 77719 additions and 0 deletions
+137
View File
@@ -0,0 +1,137 @@
/*
* BasicTerm.cpp
* Provides basic ANSI/VT220 terminal control over a serial interface
* Copyright 2011 Trannie Carter <borys@nottwo.org>
* Licensed for use under the terms of the GNU Lesser General Public License v3
*/
#include "BasicTerm.h"
BasicTerm::BasicTerm(Stream *ser) {
serial = ser;
}
int BasicTerm::available(void) {
return serial->available();
}
int BasicTerm::peek(void) {
return serial->peek();
}
int BasicTerm::read(void) {
return serial->read();
}
void BasicTerm::flush(void) {
serial->flush();
}
size_t BasicTerm::write(uint8_t c) {
return serial->write(c);
}
void BasicTerm::init(void) {
serial->print(F("\x1b\x63"));
}
void BasicTerm::cls(void) {
serial->print(F("\x1b[2J"));
}
void BasicTerm::position(uint8_t row, uint8_t col) {
serial->print(F("\x1b["));
serial->print((uint8_t)row + 1);
serial->print(F(";"));
serial->print((uint8_t)col + 1);
serial->print(F("H"));
}
void BasicTerm::show_cursor(boolean show) {
if(show) {
serial->print(F("\x1b[?25h"));
} else {
serial->print(F("\x1b[?25l"));
}
}
int16_t BasicTerm::get_key(void) {
int16_t key;
uint16_t when;
key = serial->read();
if(key == 0x1b) { /* escape sequence */
when = millis();
while(serial->available() < 2) {
if(((uint16_t) millis() - when) > 1000) {
return key;
}
}
key = serial->read();
switch(key) {
case '[':
key = serial->read();
switch(key) {
case 'A':
return BT_KEY_UP;
case 'B':
return BT_KEY_DOWN;
case 'C':
return BT_KEY_RIGHT;
case 'D':
return BT_KEY_LEFT;
default:
return key;
}
break;
case 'O':
key = serial->read();
switch(key) {
case 'P':
return BT_KEY_F(1);
case 'Q':
return BT_KEY_F(2);
case 'R':
return BT_KEY_F(3);
case 'S':
return BT_KEY_F(4);
default:
return key;
}
break;
default:
return key;
}
}
return key;
}
void BasicTerm::set_attribute(uint8_t attr) {
if(attr & BT_REVERSE) {
serial->print(F("\x1b[7m"));
}
if(attr & BT_UNDERLINE) {
serial->print(F("\x1b[4m"));
}
if(attr & BT_BOLD) {
serial->print(F("\x1b[1m"));
}
if(attr & BT_BLINK) {
serial->print(F("\x1b[5m"));
}
if(attr == BT_NORMAL) {
serial->print(F("\x1b[0m"));
}
}
void BasicTerm::set_color(uint8_t fg, uint8_t bg) {
serial->print(F("\x1b["));
serial->print(30 + fg);
serial->print(";");
serial->print(40 + bg);
serial->print("m");
}
+60
View File
@@ -0,0 +1,60 @@
/*
* BasicTerm.h
* Provides basic ANSI/VT220 terminal control over a serial interface
* Copyright 2011 Trannie Carter <borys@nottwo.org>
* Licensed for use under the terms of the GNU Lesser General Public License v3
*/
#ifndef BASICTERM_H
#define BASICTERM_H
#include <Arduino.h>
class BasicTerm : public Stream {
#define BT_NORMAL 0
#define BT_BOLD 1
#define BT_UNDERLINE 2
#define BT_BLINK 4
#define BT_REVERSE 8
#define BT_BLACK 0
#define BT_RED 1
#define BT_GREEN 2
#define BT_YELLOW 3
#define BT_BLUE 4
#define BT_MAGENTA 5
#define BT_CYAN 6
#define BT_WHITE 7
#define BT_KEY_UNKNOWN 0401
#define BT_KEY_DOWN 0402
#define BT_KEY_UP 0403
#define BT_KEY_LEFT 0404
#define BT_KEY_RIGHT 0405
#define BT_KEY_F0 0410
#define BT_KEY_F(n) (BT_KEY_F0 + (n))
private:
Stream *serial;
public:
BasicTerm(Stream *);
void init(void);
void cls(void);
void position(uint8_t, uint8_t);
void show_cursor(boolean);
void set_attribute(uint8_t);
void set_color(uint8_t, uint8_t);
int16_t get_key(void);
virtual int available(void);
virtual int peek(void);
virtual int read(void);
virtual void flush(void);
virtual size_t write(uint8_t);
using Print::write;
};
#endif