From 343f54aecc7109969d264a122b2fa722d25c9054 Mon Sep 17 00:00:00 2001 From: Olliver Schinagl Date: Fri, 24 Apr 2015 17:11:34 +0200 Subject: Initial dbus support This patch adds initial dbus support for 3 interfaces for griffin; printer, led and harma. This interfaces are unused for now. Signed-off-by: Olliver Schinagl --- src/eulogium.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/eulogium.h | 9 ++++++++- 2 files changed, 70 insertions(+), 1 deletion(-) diff --git a/src/eulogium.c b/src/eulogium.c index 1fe5ca4..781ec17 100644 --- a/src/eulogium.c +++ b/src/eulogium.c @@ -966,6 +966,65 @@ static void eulogium_setup(struct eulogium_data *eulogium) eulogium_button_cb_data_set(&but_return, eulogium); } +/* TODO May need this later to change certain connections to objects */ +static void on_name_owner_changed(void *data EINA_UNUSED, const char *bus, const char *old_id, const char *new_id) +{ + printf("Bus=%s | old=%s | new=%s\n", bus, old_id, new_id); +} + +static int eulogium_dbus_init(struct eulogium_data *eulogium) +{ + Eldbus_Object *obj; + + eulogium->dbus.conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SYSTEM); + if (!eulogium->dbus.conn) { + EINA_LOG_CRIT("Could not get system dbus."); + return -ECONNREFUSED; + } + + /* TODO: Make nice loop that gets BUS/PATH from a predefined array */ + obj = eldbus_object_get(eulogium->dbus.conn, "nl.ultimaker.harma", "/nl/ultimaker/harma"); + if (!obj) { + EINA_LOG_WARN("Could not get nl.ultimaker.harma object."); + return -EFAULT; + } + + eulogium->dbus.proxy[HARMA] = eldbus_proxy_get(obj, "nl.ultimaker"); + if (!eulogium->dbus.proxy[HARMA]) { + EINA_LOG_WARN("Could not get dbus proxy."); + return -EFAULT; + } + eldbus_name_owner_changed_callback_add(eulogium->dbus.conn, "nl.ultimaker.harma", on_name_owner_changed, eulogium->dbus.conn, EINA_TRUE); + + obj = eldbus_object_get(eulogium->dbus.conn, "nl.ultimaker.led", "/nl/ultimaker/led"); + if (!obj) { + return -EFAULT; + EINA_LOG_WARN("Could not get nl.ultimaker.led object."); + } + + eulogium->dbus.proxy[LED] = eldbus_proxy_get(obj, "nl.ultimaker"); + if (!eulogium->dbus.proxy[LED]) { + EINA_LOG_WARN("Could not get dbus proxy."); + return -EFAULT; + } + eldbus_name_owner_changed_callback_add(eulogium->dbus.conn, "nl.ultimaker.led", on_name_owner_changed, eulogium->dbus.conn, EINA_TRUE); + + obj = eldbus_object_get(eulogium->dbus.conn, "nl.ultimaker.printer", "/nl/ultimaker/printer"); + if (!obj) { + EINA_LOG_WARN("Could not get nl.ultimaker.printer object."); + return -EFAULT; + } + + eulogium->dbus.proxy[PRINTER] = eldbus_proxy_get(obj, "nl.ultimaker"); + if (!eulogium->dbus.proxy[PRINTER]) { + EINA_LOG_WARN("Could not get dbus proxy."); + return -EFAULT; + } + eldbus_name_owner_changed_callback_add(eulogium->dbus.conn, "nl.ultimaker.printer", on_name_owner_changed, eulogium->dbus.conn, EINA_TRUE); + + return 0; +} + EAPI_MAIN int elm_main(int argc, char **argv) { Eina_Bool quit_option = EINA_FALSE; @@ -1035,6 +1094,9 @@ EAPI_MAIN int elm_main(int argc, char **argv) elm_config_focus_highlight_enabled_set(EINA_FALSE); elm_config_focus_highlight_animate_set(EINA_FALSE); + if (eulogium_dbus_init(&eulogium)) + EINA_LOG_CRIT("Griffin D-Bus initialization failed!"); + window = elm_win_add(NULL, PACKAGE_NAME, ELM_WIN_BASIC); if (!window) return EXIT_FAILURE; diff --git a/src/eulogium.h b/src/eulogium.h index e5b8b9d..b8b7089 100644 --- a/src/eulogium.h +++ b/src/eulogium.h @@ -32,10 +32,17 @@ struct print_data { float material; }; +enum proxy_idx { + HARMA, + LED, + PRINTER, + LAST /* sentinel */ +}; + struct dbus_data { Eldbus_Connection *conn; Eldbus_Pending *pending; - Eldbus_Proxy *proxy; + Eldbus_Proxy *proxy[LAST]; }; struct eulogium_data { -- cgit v0.12