/* * \brief Buffer for storing decoded characters * \author Norman Feske * \date 2011-06-06 */ /* * Copyright (C) 2011-2019 Genode Labs GmbH * * This file is part of the Genode OS framework, which is distributed * under the terms of the GNU Affero General Public License version 3. */ #ifndef _TERMINAL__READ_BUFFER_H_ #define _TERMINAL__READ_BUFFER_H_ #include #include #include namespace Terminal { class Read_buffer; enum { READ_BUFFER_SIZE = 4096 }; } class Terminal::Read_buffer : public Genode::Ring_buffer { private: Genode::Signal_context_capability _sigh_cap { }; public: /** * Register signal handler for read-avail signals */ void sigh(Genode::Signal_context_capability cap) { _sigh_cap = cap; } /** * Add element into read buffer and emit signal */ void add(unsigned char c) { Genode::Ring_buffer::add(c); if (_sigh_cap.valid()) Genode::Signal_transmitter(_sigh_cap).submit(); } void add(Codepoint code) { /* send Unicode in a burst of UTF-8 */ Genode::String<5> utf8(code); char const *str = utf8.string(); while (*str) Genode::Ring_buffer::add(*str++); if (_sigh_cap.valid()) Genode::Signal_transmitter(_sigh_cap).submit(); } void add(char const *str) { while (*str) add(*str++); } }; #endif /* _TERMINAL__READ_BUFFER_H_ */