OSCR
Open Source Cartridge Reader
Loading...
Searching...
No Matches
Serial.h
1/********************************************************************
2 * Open Source Cartridge Reader *
3 ********************************************************************/
4#pragma once
5#if !defined(OSCR_HARDWARE_OUTPUTS_SERIAL_H_)
6# define OSCR_HARDWARE_OUTPUTS_SERIAL_H_
7
8# include "config.h"
9
10# if defined(ENABLE_SERIAL_OUTPUT) || defined(ENABLE_UPDATER)
11
12# include "common/specializations.h"
13
14namespace OSCR::Serial
15{
16 constexpr char const ending = '\n';
17 constexpr char const ending2 = '\r';
18 constexpr uint8_t const commandMax = 32;
19 constexpr uint8_t const ansiEsc[2] = { 0x1B, 0x5B };
20
21 extern uint32_t const baud;
22
23 extern char command[commandMax];
24 char const * getCommandPointer();
25 uint8_t const * getCommandMaxPointer();
26
27 extern void begin();
28 extern void begin(uint32_t b);
29 extern void end();
30
31 extern void setup();
32
33 extern int read();
34
35 extern void printLine(void);
36
37 extern void flush();
38 extern void flushSync();
39
40 extern bool echo(bool toggle);
41 extern bool echo();
42
43 extern bool getCommand();
44
46
47 extern int available();
48 extern int availableForWrite();
49
50 extern size_t write(uint8_t const byte);
51 extern size_t write(char const chr);
52 extern size_t write(uint8_t const * buffer, size_t size);
53 extern size_t write(char const * buffer, size_t size);
54
55 extern void printLine(void);
56
57 template <typename T,
58 OSCR::Util::enable_if_t<!(OSCR::Util::is_number<T>::value), bool> Enable = true,
59 OSCR::Util::enable_if_t<!(OSCR::Util::is_printable<T>::value), bool> NonPrintable = true>
60 extern void print(T string);
61
62 template <typename T,
63 OSCR::Util::enable_if_t<!(OSCR::Util::is_number<T>::value), bool> Enable = true,
64 OSCR::Util::enable_if_t<!(OSCR::Util::is_printable<T>::value), bool> NonPrintable = true>
65 extern void printLine(T string);
66
67 template <typename Tint,
68 OSCR::Util::enable_if_t<OSCR::Util::is_integer<Tint>::value, bool> Enable = true>
69 extern void print(Tint number, int base = DEC);
70
71 template <typename Tint,
72 OSCR::Util::enable_if_t<OSCR::Util::is_integer<Tint>::value, bool> Enable = true>
73 extern void printLine(Tint number, int base = DEC);
74
75 extern void printLineSync(void);
76
77 template <typename T,
78 OSCR::Util::enable_if_t<!(OSCR::Util::is_number<T>::value), bool> Enable = true,
79 OSCR::Util::enable_if_t<!(OSCR::Util::is_printable<T>::value), bool> NonPrintable = true>
80 extern void printSync(T string);
81
82 template <typename T,
83 OSCR::Util::enable_if_t<!(OSCR::Util::is_number<T>::value), bool> Enable = true,
84 OSCR::Util::enable_if_t<!(OSCR::Util::is_printable<T>::value), bool> NonPrintable = true>
85 extern void printLineSync(T string);
86
87 template <typename Tint,
88 OSCR::Util::enable_if_t<OSCR::Util::is_integer<Tint>::value, bool> Enable = true>
89 extern void printSync(Tint number, int base = DEC);
90
91 template <typename Tint,
92 OSCR::Util::enable_if_t<OSCR::Util::is_integer<Tint>::value, bool> Enable = true>
93 extern void printLineSync(Tint number, int base = DEC);
94
95 template <bool prfx = true,
96 typename T,
97 OSCR::Util::if_is_any_unsigned_t<T> Enable = true>
98 extern void printHex(T number);
99
100 template <bool prfx = true,
101 typename T,
102 OSCR::Util::if_is_any_unsigned_t<T> Enable = true>
103 extern void printHexLine(T number);
104
105 extern void gotoLast();
106
108
109# if defined(ENABLE_SERIAL_OUTPUT)
110
112
113 extern void printLine(void);
114
115 template <typename T,
116 OSCR::Util::enable_if_t<!(OSCR::Util::is_number<T>::value), bool> Enable,
117 OSCR::Util::enable_if_t<!(OSCR::Util::is_printable<T>::value), bool> NonPrintable>
118 extern void print(T string);
119
120 template <typename T,
121 OSCR::Util::enable_if_t<!(OSCR::Util::is_number<T>::value), bool> Enable,
122 OSCR::Util::enable_if_t<!(OSCR::Util::is_printable<T>::value), bool> NonPrintable>
123 extern void printLine(T string);
124
125 template <typename Tint,
126 OSCR::Util::enable_if_t<OSCR::Util::is_integer<Tint>::value, bool> Enable>
127 extern void print(Tint number, int base);
128
129 template <typename Tint,
130 OSCR::Util::enable_if_t<OSCR::Util::is_integer<Tint>::value, bool> Enable>
131 extern void printLine(Tint number, int base);
132
134
135# endif /* ENABLE_SERIAL_OUTPUT */
136
137} /* namespace OSCR::UI */
138
139# endif /* ENABLE_SERIAL_OUTPUT || ENABLE_UPDATER */
140
141#endif /* !OSCR_HARDWARE_OUTPUTS_SERIAL_H_ */
void gotoLast()
Definition serial.cpp:83
void printHexLine(T number)
Definition interfaces.cpp:106
void printHex(T number)
Definition interfaces.cpp:93