committed by
Norman Feske
parent
411469930a
commit
9479cfb2ca
@@ -1 +1 @@
|
|||||||
96bc07a2a74638e198454cf6cee9cbb1176dd51e
|
403606ea514978342866dcc1522459da180d8d50
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
LICENSE := GPLv2
|
LICENSE := GPLv2
|
||||||
VERSION := 1.7.6
|
VERSION := 1.8.6
|
||||||
DOWNLOADS := synergy_micro.archive
|
DOWNLOADS := synergy_micro.archive
|
||||||
|
|
||||||
URL(synergy_micro) := https://github.com/symless/synergy/archive/v$(VERSION)-stable.tar.gz
|
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
|
DIR(synergy_micro) := src/lib/synergy_micro
|
||||||
|
|
||||||
TAR_OPT(synergy_micro) := --strip-components 3 synergy-$(VERSION)-stable/src/micro
|
TAR_OPT(synergy_micro) := --strip-components 3 synergy-$(VERSION)-stable/src/micro
|
||||||
|
|||||||
@@ -3,6 +3,11 @@ if ![have_installed synergys] {
|
|||||||
exit -1
|
exit -1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if {[have_spec linux]} {
|
||||||
|
puts "\Synergy scenarios not supported on Linux.\n"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
proc append_synergy_build_components { } {
|
proc append_synergy_build_components { } {
|
||||||
global build_components
|
global build_components
|
||||||
append build_components { drivers/nic server/synergy_input }
|
append build_components { drivers/nic server/synergy_input }
|
||||||
|
|||||||
@@ -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
|
source ${genode_dir}/repos/base/run/platform_drv.inc
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -26,17 +26,15 @@ create_boot_directory
|
|||||||
append config {
|
append config {
|
||||||
<config verbose="yes">
|
<config verbose="yes">
|
||||||
<parent-provides>
|
<parent-provides>
|
||||||
<service name="ROM"/>
|
|
||||||
<service name="CPU"/>
|
<service name="CPU"/>
|
||||||
|
<service name="IO_MEM"/>
|
||||||
|
<service name="IO_PORT"/>
|
||||||
|
<service name="IRQ"/>
|
||||||
|
<service name="LOG"/>
|
||||||
<service name="PD"/>
|
<service name="PD"/>
|
||||||
<service name="RAM"/>
|
<service name="RAM"/>
|
||||||
<service name="RM"/>
|
<service name="RM"/>
|
||||||
<service name="LOG"/>
|
<service name="ROM"/>
|
||||||
<service name="IRQ"/>
|
|
||||||
<service name="IO_MEM"/>
|
|
||||||
<service name="IO_PORT"/>
|
|
||||||
<service name="CAP"/>
|
|
||||||
<service name="SIGNAL"/>
|
|
||||||
</parent-provides>
|
</parent-provides>
|
||||||
<default-route>
|
<default-route>
|
||||||
<any-service>
|
<any-service>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
# Instantiate two Synergy clients
|
# 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
|
source ${genode_dir}/repos/base/run/platform_drv.inc
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -20,8 +20,7 @@
|
|||||||
#include <nitpicker_session/connection.h>
|
#include <nitpicker_session/connection.h>
|
||||||
#include <timer_session/connection.h>
|
#include <timer_session/connection.h>
|
||||||
#include <os/static_root.h>
|
#include <os/static_root.h>
|
||||||
#include <os/signal_rpc_dispatcher.h>
|
#include <base/attached_rom_dataspace.h>
|
||||||
#include <os/config.h>
|
|
||||||
#include <libc/component.h>
|
#include <libc/component.h>
|
||||||
|
|
||||||
/* Synergy includes */
|
/* Synergy includes */
|
||||||
@@ -40,11 +39,10 @@ extern "C" {
|
|||||||
|
|
||||||
using namespace Genode;
|
using namespace Genode;
|
||||||
|
|
||||||
Timer::Session *timer()
|
|
||||||
{
|
Constructible<Attached_rom_dataspace> config;
|
||||||
static Timer::Connection _timer;
|
Constructible<Timer::Connection> timer;
|
||||||
return &_timer;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct Session_component : Input::Session_component
|
struct Session_component : Input::Session_component
|
||||||
{
|
{
|
||||||
@@ -55,8 +53,8 @@ struct Session_component : Input::Session_component
|
|||||||
uSynergyBool button_right;
|
uSynergyBool button_right;
|
||||||
uSynergyBool button_middle;
|
uSynergyBool button_middle;
|
||||||
|
|
||||||
Session_component()
|
Session_component(Genode::Env &env)
|
||||||
: socket_fd(-1) { }
|
: Input::Session_component(env, env.ram()), socket_fd(-1) { }
|
||||||
|
|
||||||
~Session_component()
|
~Session_component()
|
||||||
{
|
{
|
||||||
@@ -90,7 +88,7 @@ static uSynergyBool connect(uSynergyCookie cookie)
|
|||||||
char addr[INET_ADDRSTRLEN];
|
char addr[INET_ADDRSTRLEN];
|
||||||
unsigned long port = 24800;
|
unsigned long port = 24800;
|
||||||
|
|
||||||
Xml_node config_node = config()->xml_node();
|
Xml_node config_node = config->xml();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
config_node.attribute("addr").value(addr, sizeof(addr));
|
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;
|
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); }
|
void trace_callback(uSynergyCookie cookie, const char *text) { Genode::log(text); }
|
||||||
|
|
||||||
@@ -233,17 +231,18 @@ struct Synergy_thread : Thread
|
|||||||
|
|
||||||
enum {
|
enum {
|
||||||
MAX_NAME_LEN = 256,
|
MAX_NAME_LEN = 256,
|
||||||
WEIGHT = Cpu_session::Weight::DEFAULT_WEIGHT,
|
|
||||||
STACK_SIZE = 1024*sizeof(long)
|
STACK_SIZE = 1024*sizeof(long)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Genode::Env &env;
|
||||||
|
|
||||||
char screen_name[MAX_NAME_LEN];
|
char screen_name[MAX_NAME_LEN];
|
||||||
uSynergyContext context;
|
uSynergyContext context;
|
||||||
Signal_receiver config_rec;
|
Signal_receiver config_rec;
|
||||||
Signal_context config_ctx;
|
Signal_context config_ctx;
|
||||||
|
|
||||||
Synergy_thread(Session_component &session)
|
Synergy_thread(Genode::Env &env, Session_component &session)
|
||||||
: Thread(WEIGHT, "synergy_ep", STACK_SIZE)
|
: Thread(env, "uSynergy", STACK_SIZE), env(env)
|
||||||
{
|
{
|
||||||
*screen_name = 0;
|
*screen_name = 0;
|
||||||
uSynergyInit(&context);
|
uSynergyInit(&context);
|
||||||
@@ -261,7 +260,7 @@ struct Synergy_thread : Thread
|
|||||||
context.m_mouseCallback = &mouse_callback; /* Callback for mouse events */
|
context.m_mouseCallback = &mouse_callback; /* Callback for mouse events */
|
||||||
context.m_keyboardCallback = &keyboard_callback; /* Callback for keyboard 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()
|
~Synergy_thread()
|
||||||
@@ -278,7 +277,7 @@ struct Synergy_thread : Thread
|
|||||||
* TODO: detect changes to network config
|
* TODO: detect changes to network config
|
||||||
* and trigger a reconnect if appropriate.
|
* and trigger a reconnect if appropriate.
|
||||||
*/
|
*/
|
||||||
Xml_node config_node = config()->xml_node();
|
Xml_node config_node = config->xml();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
config_node.attribute("addr");;
|
config_node.attribute("addr");;
|
||||||
@@ -299,8 +298,9 @@ struct Synergy_thread : Thread
|
|||||||
* then make a simple resolution client that wraps that.
|
* then make a simple resolution client that wraps that.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
Genode::log("probing Nitpicker service");
|
||||||
try {
|
try {
|
||||||
Framebuffer::Connection conn;
|
Nitpicker::Connection conn { env, "dimension" };
|
||||||
Framebuffer::Mode mode = conn.mode();
|
Framebuffer::Mode mode = conn.mode();
|
||||||
|
|
||||||
context.m_clientWidth = mode.width();
|
context.m_clientWidth = mode.width();
|
||||||
@@ -308,8 +308,9 @@ struct Synergy_thread : Thread
|
|||||||
return true;
|
return true;
|
||||||
} catch (...) { }
|
} catch (...) { }
|
||||||
|
|
||||||
|
Genode::log("probing Framebuffer service");
|
||||||
try {
|
try {
|
||||||
Nitpicker::Connection conn;
|
Framebuffer::Connection conn { env, Framebuffer::Mode() };
|
||||||
Framebuffer::Mode mode = conn.mode();
|
Framebuffer::Mode mode = conn.mode();
|
||||||
|
|
||||||
context.m_clientWidth = mode.width();
|
context.m_clientWidth = mode.width();
|
||||||
@@ -322,6 +323,7 @@ struct Synergy_thread : Thread
|
|||||||
*
|
*
|
||||||
* XXX: drop pointer events without a screen?
|
* XXX: drop pointer events without a screen?
|
||||||
*/
|
*/
|
||||||
|
Genode::log("using a virtual screen area");
|
||||||
context.m_clientWidth = context.m_clientHeight = 64;
|
context.m_clientWidth = context.m_clientHeight = 64;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -335,7 +337,7 @@ struct Synergy_thread : Thread
|
|||||||
{
|
{
|
||||||
while (!update_config()) {
|
while (!update_config()) {
|
||||||
config_rec.wait_for_signal();
|
config_rec.wait_for_signal();
|
||||||
config()->reload();
|
config->update();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
@@ -343,7 +345,7 @@ struct Synergy_thread : Thread
|
|||||||
if (config_rec.pending()) {
|
if (config_rec.pending()) {
|
||||||
while (!update_config())
|
while (!update_config())
|
||||||
config_rec.wait_for_signal();
|
config_rec.wait_for_signal();
|
||||||
config()->reload();
|
config->update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -358,31 +360,31 @@ using namespace Genode;
|
|||||||
|
|
||||||
struct Main
|
struct Main
|
||||||
{
|
{
|
||||||
Genode::Entrypoint &ep;
|
Genode::Env &env;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Input session provided to our client
|
* Input session provided to our client
|
||||||
*/
|
*/
|
||||||
Session_component session_component;
|
Session_component session_component { env };
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Attach root interface to the entry point
|
* Attach root interface to the entry point
|
||||||
*/
|
*/
|
||||||
Static_root<Input::Session> input_root { ep.manage(session_component) };
|
Static_root<Input::Session> input_root { env.ep().manage(session_component) };
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Additional thread for processing incoming events.
|
* Additional thread for processing incoming events.
|
||||||
*/
|
*/
|
||||||
Synergy_thread synergy_thread { session_component };
|
Synergy_thread synergy_thread { env, session_component };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*/
|
*/
|
||||||
Main(Genode::Entrypoint &ep) : ep(ep)
|
Main(Genode::Env &env) : env(env)
|
||||||
{
|
{
|
||||||
session_component.event_queue().enabled(true);
|
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();
|
synergy_thread.start();
|
||||||
}
|
}
|
||||||
@@ -393,4 +395,9 @@ struct Main
|
|||||||
** Component **
|
** 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);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user