OSCR
Open Source Cartridge Reader
Loading...
Searching...
No Matches
SerialANSI.h
1/********************************************************************
2* Open Source Cartridge Reader *
3********************************************************************/
4#pragma once
5#if !defined(OSCR_HARDWARE_OUTPUTS_SERIAL_ANSI_H_)
6# define OSCR_HARDWARE_OUTPUTS_SERIAL_ANSI_H_
7
8# include "config.h"
9
10# if defined(ENABLE_SERIAL_ANSI)
11
12# include "common/Types.h"
13# include "common/specializations.h"
14
15namespace OSCR::Serial
16{
17 namespace ANSI
18 {
19 extern char const PROGMEM ESC[];
20 extern char const PROGMEM SEP[];
21 extern char const PROGMEM END[];
22 extern char const PROGMEM CLEAR[];
23 extern char const PROGMEM TITLE[];
24 extern char const PROGMEM CURSOR[];
25 extern char const PROGMEM SHOW[];
26 extern char const PROGMEM HIDE[];
27
28 extern char const PROGMEM C_SAVE[];
29 extern char const PROGMEM C_RESTORE[];
30 extern char const PROGMEM C_HOME[];
31 extern char const PROGMEM C_ERASE_LINE[];
32 extern char const PROGMEM C_ERASE_DIR[];
33 extern char const PROGMEM C_MOVE_UP[];
34 extern char const PROGMEM C_MOVE_DOWN[];
35 extern char const PROGMEM C_MOVE_FORWARD[];
36 extern char const PROGMEM C_MOVE_BACKWARD[];
37
38 // Escape sequence prefix for input events (arrow keys)
39 inline constexpr uint8_t const inputEsc[2] = { 0x1B, 0x5B };
40
41 extern Foreground foreground;
42 extern Background background;
43 extern Cursor cursor;
44
45 template <typename T,
46 OSCR::Util::enable_if_t<OSCR::Util::is_format<T>::value, bool> Enable = true>
47 inline uint8_t code(T _code)
48 {
49 return static_cast<uint8_t>(_code);
50 }
51
52 extern void format(uint8_t code);
53 extern void format(Format code);
54 extern void format(Format codes[], uint8_t size);
55
56 template <typename T,
57 OSCR::Util::enable_if_t<OSCR::Util::is_format<T>::value, bool> Enable = true>
58 inline void format(T code)
59 {
60 format(static_cast<uint8_t>(code));
61 }
62
63 extern void showCursor();
64 extern void hideCursor();
65
66 extern void saveCursorPos();
67 extern void restoreCursorPos();
68
69 extern void moveCursor(uint8_t row, uint8_t col = 0);
70
71 extern void moveCursorUp(uint8_t rows = 1);
72 extern void moveCursorDown(uint8_t rows = 1);
73 extern void moveCursorForward(uint8_t cols = 1);
74 extern void moveCursorBackward(uint8_t cols = 1);
75
76 extern void eraseToEnd();
77 extern void eraseToStart();
78 extern void eraseLine();
79 extern void eraseDown();
80 extern void eraseUp();
81
82 extern void setForeground(Foreground fg);
83 extern void setBackground(Background bg);
84
85 extern void apply(bool resetStyles = true);
86
87 extern void clear(bool reset = true);
88 extern void reset();
89
90 template <typename T>
91 void bold(T text)
92 {
93 Serial::ANSI::format(Style::Bold);
94 OSCR::Serial::print(text);
95 Serial::ANSI::format(Style::Reset);
96 }
97
98 template <typename T>
99 void boldLine(T text)
100 {
101 bold(text);
102 OSCR::Serial::printLine();
103 }
104
105 extern void boldUpper(char const * str);
106 extern void boldUpper(__FlashStringHelper const * flashStr);
107
108 extern void boldUpperLine(char const * str);
109 extern void boldUpperLine(__FlashStringHelper const * flashStr);
110 }
111}
112
113# endif /* ENABLE_SERIAL_ANSI */
114
115#endif /* OSCR_HARDWARE_OUTPUTS_SERIAL_ANSI_H_ */
void clear()
Definition ascii.cpp:59