From 9479cfb2cab4d3d864bcc543703da33e9a0e7ad8 Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Thu, 19 Jan 2017 15:11:18 +0100 Subject: [PATCH] server/synergy_input: API update Ref #57 --- ports/synergy_micro.hash | 2 +- ports/synergy_micro.port | 4 +- run/synergy.inc | 5 +++ run/synergy.run | 14 +++---- run/synergy_nitpicker.run | 2 +- src/server/synergy_input/main.cc | 63 ++++++++++++++++++-------------- 6 files changed, 50 insertions(+), 40 deletions(-) diff --git a/ports/synergy_micro.hash b/ports/synergy_micro.hash index 6b5c263..68d9356 100644 --- a/ports/synergy_micro.hash +++ b/ports/synergy_micro.hash @@ -1 +1 @@ -96bc07a2a74638e198454cf6cee9cbb1176dd51e +403606ea514978342866dcc1522459da180d8d50 diff --git a/ports/synergy_micro.port b/ports/synergy_micro.port index a6177b1..8ec2ea9 100644 --- a/ports/synergy_micro.port +++ b/ports/synergy_micro.port @@ -1,9 +1,9 @@ LICENSE := GPLv2 -VERSION := 1.7.6 +VERSION := 1.8.6 DOWNLOADS := synergy_micro.archive URL(synergy_micro) := https://github.com/symless/synergy/archive/v$(VERSION)-stable.tar.gz -SHA(synergy_micro) := 01936476040b85c08d1077c4dd9614303c78f69b +SHA(synergy_micro) := a07bf95d0c3bf8a2be4044a7557fb13792ff1867 DIR(synergy_micro) := src/lib/synergy_micro TAR_OPT(synergy_micro) := --strip-components 3 synergy-$(VERSION)-stable/src/micro diff --git a/run/synergy.inc b/run/synergy.inc index 6ac063f..e829a75 100644 --- a/run/synergy.inc +++ b/run/synergy.inc @@ -3,6 +3,11 @@ if ![have_installed synergys] { exit -1 } +if {[have_spec linux]} { + puts "\Synergy scenarios not supported on Linux.\n" + exit +} + proc append_synergy_build_components { } { global build_components append build_components { drivers/nic server/synergy_input } diff --git a/run/synergy.run b/run/synergy.run index 0a56a52..847ae55 100644 --- a/run/synergy.run +++ b/run/synergy.run @@ -1,4 +1,4 @@ -source ${genode_dir}/repos/emery/run/synergy.inc +source ${genode_dir}/repos/world/run/synergy.inc source ${genode_dir}/repos/base/run/platform_drv.inc # @@ -26,17 +26,15 @@ create_boot_directory append config { - + + + + - - - - - - + diff --git a/run/synergy_nitpicker.run b/run/synergy_nitpicker.run index 86dca0d..08a1122 100644 --- a/run/synergy_nitpicker.run +++ b/run/synergy_nitpicker.run @@ -2,7 +2,7 @@ # Instantiate two Synergy clients # -source ${genode_dir}/repos/emery/run/synergy.inc +source ${genode_dir}/repos/world/run/synergy.inc source ${genode_dir}/repos/base/run/platform_drv.inc # diff --git a/src/server/synergy_input/main.cc b/src/server/synergy_input/main.cc index 364ea6f..b4fca7b 100644 --- a/src/server/synergy_input/main.cc +++ b/src/server/synergy_input/main.cc @@ -20,8 +20,7 @@ #include #include #include -#include -#include +#include #include /* Synergy includes */ @@ -40,11 +39,10 @@ extern "C" { using namespace Genode; -Timer::Session *timer() -{ - static Timer::Connection _timer; - return &_timer; -} + +Constructible config; +Constructible timer; + struct Session_component : Input::Session_component { @@ -55,8 +53,8 @@ struct Session_component : Input::Session_component uSynergyBool button_right; uSynergyBool button_middle; - Session_component() - : socket_fd(-1) { } + Session_component(Genode::Env &env) + : Input::Session_component(env, env.ram()), socket_fd(-1) { } ~Session_component() { @@ -90,7 +88,7 @@ static uSynergyBool connect(uSynergyCookie cookie) char addr[INET_ADDRSTRLEN]; unsigned long port = 24800; - Xml_node config_node = config()->xml_node(); + Xml_node config_node = config->xml(); try { config_node.attribute("addr").value(addr, sizeof(addr)); @@ -146,9 +144,9 @@ uSynergyBool receive(uSynergyCookie cookie, uint8_t *buffer, int maxLength, int* return USYNERGY_TRUE; } -void sleep(uSynergyCookie, int timeMs) { timer()->msleep(timeMs); } +void sleep(uSynergyCookie, int timeMs) { timer->msleep(timeMs); } -uint32_t get_time() { return timer()->elapsed_ms(); } +uint32_t get_time() { return timer->elapsed_ms(); } void trace_callback(uSynergyCookie cookie, const char *text) { Genode::log(text); } @@ -233,17 +231,18 @@ struct Synergy_thread : Thread enum { MAX_NAME_LEN = 256, - WEIGHT = Cpu_session::Weight::DEFAULT_WEIGHT, STACK_SIZE = 1024*sizeof(long) }; + Genode::Env &env; + char screen_name[MAX_NAME_LEN]; uSynergyContext context; Signal_receiver config_rec; Signal_context config_ctx; - Synergy_thread(Session_component &session) - : Thread(WEIGHT, "synergy_ep", STACK_SIZE) + Synergy_thread(Genode::Env &env, Session_component &session) + : Thread(env, "uSynergy", STACK_SIZE), env(env) { *screen_name = 0; uSynergyInit(&context); @@ -261,7 +260,7 @@ struct Synergy_thread : Thread context.m_mouseCallback = &mouse_callback; /* Callback for mouse events */ context.m_keyboardCallback = &keyboard_callback; /* Callback for keyboard events */ - config()->sigh(config_rec.manage(&config_ctx)); + config->sigh(config_rec.manage(&config_ctx)); } ~Synergy_thread() @@ -278,7 +277,7 @@ struct Synergy_thread : Thread * TODO: detect changes to network config * and trigger a reconnect if appropriate. */ - Xml_node config_node = config()->xml_node(); + Xml_node config_node = config->xml(); try { config_node.attribute("addr");; @@ -299,8 +298,9 @@ struct Synergy_thread : Thread * then make a simple resolution client that wraps that. */ + Genode::log("probing Nitpicker service"); try { - Framebuffer::Connection conn; + Nitpicker::Connection conn { env, "dimension" }; Framebuffer::Mode mode = conn.mode(); context.m_clientWidth = mode.width(); @@ -308,8 +308,9 @@ struct Synergy_thread : Thread return true; } catch (...) { } + Genode::log("probing Framebuffer service"); try { - Nitpicker::Connection conn; + Framebuffer::Connection conn { env, Framebuffer::Mode() }; Framebuffer::Mode mode = conn.mode(); context.m_clientWidth = mode.width(); @@ -322,6 +323,7 @@ struct Synergy_thread : Thread * * XXX: drop pointer events without a screen? */ + Genode::log("using a virtual screen area"); context.m_clientWidth = context.m_clientHeight = 64; return true; } @@ -335,7 +337,7 @@ struct Synergy_thread : Thread { while (!update_config()) { config_rec.wait_for_signal(); - config()->reload(); + config->update(); } for (;;) { @@ -343,7 +345,7 @@ struct Synergy_thread : Thread if (config_rec.pending()) { while (!update_config()) config_rec.wait_for_signal(); - config()->reload(); + config->update(); } } } @@ -358,31 +360,31 @@ using namespace Genode; struct Main { - Genode::Entrypoint &ep; + Genode::Env &env; /* * Input session provided to our client */ - Session_component session_component; + Session_component session_component { env }; /* * Attach root interface to the entry point */ - Static_root input_root { ep.manage(session_component) }; + Static_root input_root { env.ep().manage(session_component) }; /* * Additional thread for processing incoming events. */ - Synergy_thread synergy_thread { session_component }; + Synergy_thread synergy_thread { env, session_component }; /** * Constructor */ - Main(Genode::Entrypoint &ep) : ep(ep) + Main(Genode::Env &env) : env(env) { session_component.event_queue().enabled(true); - Genode::env()->parent()->announce(ep.manage(input_root)); + env.parent().announce(env.ep().manage(input_root)); synergy_thread.start(); } @@ -393,4 +395,9 @@ struct Main ** Component ** ***************/ -void Libc::Component::construct(Genode::Env &env) { static Main inst(env.ep()); } +void Libc::Component::construct(Libc::Env &env) +{ + config.construct(env, "config"); + timer.construct(env, "uSynergy"); + static Main inst(env); +}