Current ESP32 SDK does not support "std::optional"

This commit is contained in:
folkert van heusden 2022-03-22 11:20:11 +01:00
parent 7649ab6b29
commit 6190a3e562
6 changed files with 10 additions and 11 deletions

View file

@ -34,14 +34,14 @@ uint8_t console::get_char()
void console::operator()() void console::operator()()
{ {
while(!*terminate) { while(!*terminate) {
auto c = wait_for_char(500); int c = wait_for_char(500);
if (c.has_value() == false) if (c == -1)
continue; continue;
if (c == 3) if (c == 3)
*terminate = true; *terminate = true;
else else
buffer.push_back(c.value()); buffer.push_back(c);
} }
} }

View file

@ -1,7 +1,6 @@
#pragma once #pragma once
#include <atomic> #include <atomic>
#include <optional>
#include <thread> #include <thread>
#include <vector> #include <vector>
@ -16,7 +15,7 @@ private:
std::vector<char> buffer; std::vector<char> buffer;
protected: protected:
virtual std::optional<char> wait_for_char(const int timeout) = 0; virtual int wait_for_char(const int timeout) = 0;
public: public:
console(std::atomic_bool *const terminate); console(std::atomic_bool *const terminate);

View file

@ -25,14 +25,14 @@ console_ncurses::~console_ncurses()
endwin(); endwin();
} }
std::optional<char> console_ncurses::wait_for_char(const int timeout) int console_ncurses::wait_for_char(const int timeout)
{ {
struct pollfd fds[] = { { STDIN_FILENO, POLLIN, timeout } }; struct pollfd fds[] = { { STDIN_FILENO, POLLIN, timeout } };
if (poll(fds, 1, 0) == 1 && fds[0].revents) if (poll(fds, 1, 0) == 1 && fds[0].revents)
return getch(); return getch();
return { }; return -1;
} }
void console_ncurses::put_char(const char c) void console_ncurses::put_char(const char c)

View file

@ -11,7 +11,7 @@ private:
NEWWIN *w_main { nullptr }; NEWWIN *w_main { nullptr };
protected: protected:
std::optional<char> wait_for_char(const int timeout) override; int wait_for_char(const int timeout) override;
public: public:
console_ncurses(std::atomic_bool *const terminate); console_ncurses(std::atomic_bool *const terminate);

View file

@ -25,14 +25,14 @@ console_posix::~console_posix()
error_exit(true, "~console_posix: tcsetattr failed"); error_exit(true, "~console_posix: tcsetattr failed");
} }
std::optional<char> console_posix::wait_for_char(const int timeout) int console_posix::wait_for_char(const int timeout)
{ {
struct pollfd fds[] = { { STDIN_FILENO, POLLIN, timeout } }; struct pollfd fds[] = { { STDIN_FILENO, POLLIN, timeout } };
if (poll(fds, 1, 0) == 1 && fds[0].revents) if (poll(fds, 1, 0) == 1 && fds[0].revents)
return getchar(); return getchar();
return { }; return -1;
} }
void console_posix::put_char(const char c) void console_posix::put_char(const char c)

View file

@ -9,7 +9,7 @@ private:
struct termios org_tty_opts { 0 }; struct termios org_tty_opts { 0 };
protected: protected:
std::optional<char> wait_for_char(const int timeout) override; int wait_for_char(const int timeout) override;
public: public:
console_posix(std::atomic_bool *const terminate); console_posix(std::atomic_bool *const terminate);