From 7bac1ec7e57241de3a6e360be40ac6730d9ef4a4 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Thu, 16 Jul 2020 15:58:34 +0200 Subject: [PATCH] Adapter for connecting input and event servers This is an intermediate helper component for the transition of input servers into event clients. It works analogously to the input_event_bridge but it connects servers instead of clients. In particular, it can act as glue between a traditional input driver that provides an input service and the event filter that provides an event service. Thanks to this component, each driver can be migrated to the event-client interface individually. Issue #3827 --- .../recipes/src/input_event_client/content.mk | 2 + repos/os/recipes/src/input_event_client/hash | 1 + .../recipes/src/input_event_client/used_apis | 4 ++ repos/os/src/app/input_event_client/main.cc | 48 +++++++++++++++++++ repos/os/src/app/input_event_client/target.mk | 3 ++ 5 files changed, 58 insertions(+) create mode 100644 repos/os/recipes/src/input_event_client/content.mk create mode 100644 repos/os/recipes/src/input_event_client/hash create mode 100644 repos/os/recipes/src/input_event_client/used_apis create mode 100644 repos/os/src/app/input_event_client/main.cc create mode 100644 repos/os/src/app/input_event_client/target.mk diff --git a/repos/os/recipes/src/input_event_client/content.mk b/repos/os/recipes/src/input_event_client/content.mk new file mode 100644 index 0000000000..ae87fc393e --- /dev/null +++ b/repos/os/recipes/src/input_event_client/content.mk @@ -0,0 +1,2 @@ +SRC_DIR = src/app/input_event_client +include $(GENODE_DIR)/repos/base/recipes/src/content.inc diff --git a/repos/os/recipes/src/input_event_client/hash b/repos/os/recipes/src/input_event_client/hash new file mode 100644 index 0000000000..9ebc90d75a --- /dev/null +++ b/repos/os/recipes/src/input_event_client/hash @@ -0,0 +1 @@ +2020-07-16 e6f7f44533e117edd6eb6c79d271ccacef345bb1 diff --git a/repos/os/recipes/src/input_event_client/used_apis b/repos/os/recipes/src/input_event_client/used_apis new file mode 100644 index 0000000000..a2645a0156 --- /dev/null +++ b/repos/os/recipes/src/input_event_client/used_apis @@ -0,0 +1,4 @@ +base +os +event_session +input_session diff --git a/repos/os/src/app/input_event_client/main.cc b/repos/os/src/app/input_event_client/main.cc new file mode 100644 index 0000000000..085f87dccb --- /dev/null +++ b/repos/os/src/app/input_event_client/main.cc @@ -0,0 +1,48 @@ +/* + * \brief Application for connecting an input server with an event server + * \author Norman Feske + * \date 2020-07-16 + */ + +/* + * Copyright (C) 2020 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. + */ + +/* Genode includes */ +#include +#include +#include + +namespace Input_event_client { + using namespace Genode; + struct Main; +} + + +struct Input_event_client::Main +{ + Env &_env; + + Input::Connection _input { _env }; + Event::Connection _event { _env }; + + Signal_handler
_input_handler { _env.ep(), *this, &Main::_handle_input }; + + void _handle_input() + { + _event.with_batch([&] (Event::Session_client::Batch &batch) { + _input.for_each_event([&] (Input::Event const &event) { + batch.submit(event); }); }); + } + + Main(Env &env) : _env(env) { _input.sigh(_input_handler); } +}; + + +void Component::construct(Genode::Env &env) +{ + static Input_event_client::Main inst(env); +} diff --git a/repos/os/src/app/input_event_client/target.mk b/repos/os/src/app/input_event_client/target.mk new file mode 100644 index 0000000000..df2209809a --- /dev/null +++ b/repos/os/src/app/input_event_client/target.mk @@ -0,0 +1,3 @@ +TARGET = input_event_client +SRC_CC = main.cc +LIBS = base