From f8df91f49f884e53dde19b6e73140493bdda657f Mon Sep 17 00:00:00 2001 From: Baptiste Wicht Date: Thu, 18 Aug 2016 20:05:27 +0200 Subject: [PATCH] Read input raw with timeout --- kernel/include/terminal.hpp | 9 ++++++++- kernel/src/terminal.cpp | 14 ++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/kernel/include/terminal.hpp b/kernel/include/terminal.hpp index 874a60cd..4e2191c7 100644 --- a/kernel/include/terminal.hpp +++ b/kernel/include/terminal.hpp @@ -52,10 +52,17 @@ struct virtual_terminal { /*! * \brief Reads non-canonical input in the given buffer - * \return the keyboard scan code + * \return the keyboard key code */ size_t read_input_raw(); + /*! + * \brief Reads non-canonical input in the given buffer, with + * a timeout + * \return the keyboard key code + */ + size_t read_input_raw(size_t ms); + void set_canonical(bool can); virtual_terminal(){} diff --git a/kernel/src/terminal.cpp b/kernel/src/terminal.cpp index add832ad..50305a90 100644 --- a/kernel/src/terminal.cpp +++ b/kernel/src/terminal.cpp @@ -134,6 +134,20 @@ size_t stdio::virtual_terminal::read_input_raw(){ return raw_buffer.pop(); } +size_t stdio::virtual_terminal::read_input_raw(size_t ms){ + if(raw_buffer.empty()){ + if(!ms){ + return static_cast(keycode::INVALID); + } + + if(!input_queue.sleep(ms)){ + return static_cast(keycode::INVALID); + } + } + + return raw_buffer.pop(); +} + void stdio::virtual_terminal::set_canonical(bool can){ logging::logf(logging::log_level::TRACE, "Switched terminal %u canonical mode from %u to %u\n", id, uint64_t(canonical), uint64_t(canonical));