mirror of
https://github.com/wichtounet/thor-os.git
synced 2025-09-14 06:56:51 -04:00
Prepare non-canonical mode
This commit is contained in:
parent
19e3a6d24d
commit
ede66a39a6
@ -24,6 +24,7 @@ struct virtual_terminal {
|
||||
|
||||
circular_buffer<char, INPUT_BUFFER_SIZE> input_buffer;
|
||||
circular_buffer<char, 2 * INPUT_BUFFER_SIZE> canonical_buffer;
|
||||
circular_buffer<size_t, 3 * INPUT_BUFFER_SIZE> raw_buffer;
|
||||
|
||||
sleep_queue input_queue;
|
||||
|
||||
@ -38,6 +39,12 @@ struct virtual_terminal {
|
||||
*/
|
||||
size_t read_input_can(char* buffer, size_t max);
|
||||
|
||||
/*!
|
||||
* \brief Reads non-canonical input in the given buffer
|
||||
* \return the keyboard scan code
|
||||
*/
|
||||
size_t read_input_raw();
|
||||
|
||||
virtual_terminal(){}
|
||||
|
||||
virtual_terminal(const virtual_terminal& rhs) = delete;
|
||||
|
@ -71,7 +71,13 @@ void stdio::virtual_terminal::send_input(char key){
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//TODO
|
||||
// The complete processing of the key will be done by the
|
||||
// userspace program
|
||||
raw_buffer.push(key);
|
||||
|
||||
if(!input_queue.empty()){
|
||||
input_queue.wake_up();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -93,6 +99,14 @@ size_t stdio::virtual_terminal::read_input_can(char* buffer, size_t max){
|
||||
}
|
||||
}
|
||||
|
||||
size_t stdio::virtual_terminal::read_input_raw(){
|
||||
if(raw_buffer.empty()){
|
||||
input_queue.sleep();
|
||||
}
|
||||
|
||||
return raw_buffer.pop();
|
||||
}
|
||||
|
||||
void stdio::init_terminals(){
|
||||
for(size_t i = 0; i < MAX_TERMINALS; ++i){
|
||||
auto& terminal = terminals[i];
|
||||
|
Loading…
x
Reference in New Issue
Block a user