From 58678161dffd48c7ecfaedf8aa8a49ec118defe4 Mon Sep 17 00:00:00 2001 From: Olliver Schinagl Date: Tue, 16 Jun 2015 08:47:06 +0200 Subject: [griffin.hmi] disable all dbus calls, add some very initial procedure dbus stuff Signed-off-by: Olliver Schinagl --- src/eulogium.c | 134 +++++++++++++++++++++++++++++++++++----------- src/eulogium.h | 2 + src/eulogium_procedures.c | 49 +++++++++++++++++ src/eulogium_procedures.h | 23 ++++++++ 4 files changed, 178 insertions(+), 30 deletions(-) create mode 100644 src/eulogium_procedures.c create mode 100644 src/eulogium_procedures.h diff --git a/src/eulogium.c b/src/eulogium.c index 70cff7c..9fe4d2c 100644 --- a/src/eulogium.c +++ b/src/eulogium.c @@ -16,6 +16,7 @@ #include "eulogium.h" #include "eulogium_item_list.h" #include "eulogium_private.h" +#include "eulogium_procedures.h" #include "gettext.h" @@ -1306,7 +1307,7 @@ static void _print_abort_cb(void *data, Evas_Object *obj EINA_UNUSED, void *even { struct eulogium_data *eulogium = data; - eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "abortPrint", _on_print_abort_ret, eulogium, -1, ""); + //eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "abortPrint", _on_print_abort_ret, eulogium, -1, ""); } static void _print_ignore_cb(void *data, Evas_Object *obj, void *event_info) @@ -1899,8 +1900,8 @@ static Eina_Bool _timer_progress_data_update_cb(void *data) static double progress = 0; static double time = -1; - eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getProgress", _on_get_progress_ret, &eulogium->print.progress, -1, ""); - eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getTime", _on_get_time_ret, &eulogium->print.time, -1, ""); + //eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getProgress", _on_get_progress_ret, &eulogium->print.progress, 2, ""); + //eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getTime", _on_get_time_ret, &eulogium->print.time, 2, ""); if (eulogium->printer.status != status) { elm_object_text_set(eulogium->status, _(griffin_print_status[eulogium->printer.status])); @@ -1982,7 +1983,7 @@ static Eina_Bool _timer_print_unblock_cb(void *data) eulogium->print.block = EINA_FALSE; /* XXX: Cleanup eulogium structures? Right now they get overwritten. */ timeout = 10; /* TODO, use same configurable as above */ - eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getStatus", _on_get_status_ret, eulogium, -1, ""); + //eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getStatus", _on_get_status_ret, eulogium, -1, ""); eulogium->progress_data_refresh = NULL; return ECORE_CALLBACK_CANCEL; } @@ -2161,7 +2162,7 @@ static void _cleared_bed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *even { struct eulogium_data *eulogium = data; - eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "clearedPrinter", _on_cleared_printer_ret, eulogium, -1, ""); + //eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "clearedPrinter", _on_cleared_printer_ret, eulogium, -1, ""); } Evas_Object *eulogium_clear_print_bed(struct eulogium_data *eulogium) @@ -2214,8 +2215,8 @@ static void _cb_select_file(void *data, Evas_Object *obj EINA_UNUSED, void *even menu_open_dir(eulogium, new_dir); } else { eulogium_print_data_set(eulogium, filepath); - eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "startPrint", _on_start_print_ret, eulogium, -1, "sss", - eulogium->print.name, eulogium->print.file, eulogium->print.flags); + //eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "startPrint", _on_start_print_ret, eulogium, -1, "sss", + // eulogium->print.name, eulogium->print.file, eulogium->print.flags); } } } @@ -2763,7 +2764,8 @@ static void eulogium_setup(struct eulogium_data *eulogium) while (screen_data.screen[screen_data.count].type != END) screen_data.count++; - /* This is silly and will get fixed in the refactoring */ + /* This is silly, barding redonkylous and will get fixed in the refactoring */ + eulogium->procedures = procedures_init(); eulogium->mounts = NULL; eulogium->progress_data_refresh = NULL; eulogium->print.name = NULL; @@ -2808,22 +2810,6 @@ static void on_name_owner_changed(void *data EINA_UNUSED, const char *bus, const printf("Bus=%s | old=%s | new=%s\n", bus, old_id, new_id); } -static void _on_get_error_ret(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) -{ - const char *errname, *errmsg, *errormsg; - - if (eldbus_message_error_get(msg, &errname, &errmsg)) { - EINA_LOG_ERR("%s %s", errname, errmsg); - return; - } - if (!eldbus_message_arguments_get(msg, "s", &errormsg)) { - EINA_LOG_ERR("Message content does not match expected \"s\" signature. (%s)", eldbus_message_signature_get(msg)); - return; - } - EINA_LOG_ERR("%s", errormsg); - /* TODO Call generic error screen in case of trouble here? */ -} - static void _on_get_print_name_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) { struct eulogium_data *eulogium = data; @@ -2872,7 +2858,7 @@ static void eulogium_printer_status_set(struct eulogium_data *eulogium, struct _ (eulogium->printer.status == SLICING) || (eulogium->printer.status == PRINTING) || (eulogium->printer.status == COOLING))) { - eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getPrintName", _on_get_print_name_ret, eulogium, -1, ""); + //eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getPrintName", _on_get_print_name_ret, eulogium, -1, ""); /* For griffin-0.1 this is technically a 'race' condition, as we may not have the name yet */ if (!eulogium->print.block_active) { if (eulogium->print.block) { @@ -2892,7 +2878,7 @@ static void eulogium_printer_status_set(struct eulogium_data *eulogium, struct _ break; case (DISCONNECTED): /* fall through */ case (ERROR): - eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getError", _on_get_error_ret, eulogium, -1, ""); + //eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getError", _on_get_error_ret, eulogium, -1, ""); content = eulogium_generic_error(eulogium, 4); break; case (IDLE): @@ -3189,6 +3175,90 @@ static void _on_unit_removed_ret(void *data, const Eldbus_Message *msg) /* TODO: UI Stuff/signals */ } +static void _on_get_available_procedures_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) +{ + const char *errname, *errmsg; + struct eulogium_data *eulogium = data; + Eldbus_Message_Iter *array, *avail_proc_struct; + char *key; + Eina_Bool executable; + + if (eldbus_message_error_get(msg, &errname, &errmsg)) { + EINA_LOG_ERR("%s %s", errname, errmsg); + return; + } + if (!eldbus_message_arguments_get(msg, "a(sb)", &array)) { + EINA_LOG_ERR("Message content does not match expected \"a(sb)\" signature."); + return; + } + while (eldbus_message_iter_get_and_next(array, 'r', &avail_proc_struct)) { + if (eldbus_message_iter_arguments_get(avail_proc_struct, "sb", &key, &executable)) { + uint_fast16_t i; + + for (i = 0; eulogium->procedures[i].key ; i++) { + if (strncmp(key, eulogium->procedures[i].key, eulogium->procedures[i].keylen)) { + eulogium->procedures[i].executable = executable; + eulogium->procedures[i].available = EINA_TRUE; + } else { + EINA_LOG_WARN("Procedure not found: '%s'", key); + } + } + } + } +} + +static void _on_get_active_procedures_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) +{ + const char *errname, *errmsg; + struct eulogium_data *eulogium = data; + Eldbus_Message_Iter *array, *act_proc_struct; + char *key, *step; + + if (eldbus_message_error_get(msg, &errname, &errmsg)) { + EINA_LOG_ERR("%s %s", errname, errmsg); + return; + } + if (!eldbus_message_arguments_get(msg, "a(ss)", &array)) { + EINA_LOG_ERR("Message content does not match expected \"a(ss)\" signature."); + return; + } + while (eldbus_message_iter_get_and_next(array, 'r', &act_proc_struct)) { + if (eldbus_message_iter_arguments_get(act_proc_struct, "ss", &key, &step)) { + uint_fast16_t i; + + for (i = 0; eulogium->procedures[i].key ; i++) { + if (strncmp(key, eulogium->procedures[i].key, eulogium->procedures[i].keylen)) { + eulogium->procedures[i].step = step; + } else { + EINA_LOG_WARN("Procedure not found: '%s'", key); + } + } + } + } +} + +static void _on_get_error_ret(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) +{ + const char *errname, *errmsg, *errormsg; + + if (eldbus_message_error_get(msg, &errname, &errmsg)) { + EINA_LOG_ERR("%s %s", errname, errmsg); + return; + } + if (!eldbus_message_arguments_get(msg, "s", &errormsg)) { + EINA_LOG_ERR("Message content does not match expected \"s\" signature. (%s)", eldbus_message_signature_get(msg)); + return; + } + if (strlen(errormsg) > 0) + EINA_LOG_ERR("Printer Error '%s' received", errormsg); + /* TODO Call generic error screen in case of trouble here? */ +} + +static void _on_error_ret(void *data, const Eldbus_Message *msg) +{ + _on_get_error_ret(data, msg, NULL); +} + static int eulogium_dbus_init(struct eulogium_data *eulogium) { Eldbus_Object *obj; @@ -3244,10 +3314,14 @@ static int eulogium_dbus_init(struct eulogium_data *eulogium) * and the statusChanged signal may not have been fired yet */ /* TODO: put signal/method name strings in macro/LUT */ - eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getFileHandlers", _on_get_file_handlers_ret, eulogium, -1, ""); - eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getStatus", _on_get_status_ret, eulogium, -1, ""); - eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getPrintName", _on_get_print_name_ret, eulogium, -1, ""); - eldbus_proxy_signal_handler_add(eulogium->dbus.proxy[PRINTER], "statusChanged", _on_status_changed_ret, eulogium); + eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getError", _on_get_error_ret, eulogium, -1, ""); + eldbus_proxy_signal_handler_add(eulogium->dbus.proxy[PRINTER], "onError", _on_error_ret, eulogium); + eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getAvailableProcedures", _on_get_available_procedures_ret, eulogium, -1, ""); + eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getActiveProcedures", _on_get_active_procedures_ret, eulogium, -1, ""); + //eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getFileHandlers", _on_get_file_handlers_ret, eulogium, -1, ""); + //eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getStatus", _on_get_status_ret, eulogium, -1, ""); + //eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getPrintName", _on_get_print_name_ret, eulogium, -1, ""); + //eldbus_proxy_signal_handler_add(eulogium->dbus.proxy[PRINTER], "statusChanged", _on_status_changed_ret, eulogium); eldbus_proxy_signal_handler_add(proxy, "UnitNew", _on_unit_new_ret, eulogium); eldbus_proxy_signal_handler_add(proxy, "UnitRemoved", _on_unit_removed_ret, eulogium); diff --git a/src/eulogium.h b/src/eulogium.h index f46d22f..5ef8468 100644 --- a/src/eulogium.h +++ b/src/eulogium.h @@ -7,6 +7,7 @@ #include #include +#include "eulogium_procedures.h" #include "eulogium_item_list.h" enum screen_type { @@ -99,6 +100,7 @@ struct eulogium_data { struct dbus_data dbus; Eina_List *mounts; void *data; + struct procedure_data *procedures; }; struct button_cb { diff --git a/src/eulogium_procedures.c b/src/eulogium_procedures.c new file mode 100644 index 0000000..99e7a6b --- /dev/null +++ b/src/eulogium_procedures.c @@ -0,0 +1,49 @@ +/* + * eulogium_procedures, available procedures + * + * Copyright (c) 2015 Ultimaker B.V. + * Author: Olliver Schinagl + * + * SPDX-License-Identifier: AGPL-3.0+ + */ + +#include + +#include "eulogium_private.h" +#include "eulogium_procedures.h" + +#define _PROC_PRINT "PRINT" +#define _PROC_HEATUP_HOTEND "HEATUP_HOTEND" +#define _PROC_POST_PRINT "POST_PRINT" +#define _PROC_PRE_PRINT_SETUP "PRE_PRINT_SETUP" + +static struct procedure_data procedures[] = { + { + .key = _PROC_PRINT, + .keylen = sizeof(_PROC_PRINT), + .executable = EINA_FALSE, + .available = EINA_FALSE, + }, { + .key = _PROC_HEATUP_HOTEND, + .keylen = sizeof(_PROC_HEATUP_HOTEND), + .executable = EINA_FALSE, + .available = EINA_FALSE, + }, { + .key = _PROC_POST_PRINT, + .keylen = sizeof(_PROC_POST_PRINT), + .executable = EINA_FALSE, + .available = EINA_FALSE, + }, { + .key = _PROC_PRE_PRINT_SETUP, + .keylen = sizeof(_PROC_PRE_PRINT_SETUP), + .executable = EINA_FALSE, + .available = EINA_FALSE, + }, { + NULL /* sentinel */ + } +}; + +struct procedure_data *procedures_init(void) +{ + return procedures; +}; diff --git a/src/eulogium_procedures.h b/src/eulogium_procedures.h new file mode 100644 index 0000000..40a87a6 --- /dev/null +++ b/src/eulogium_procedures.h @@ -0,0 +1,23 @@ +/* + * eulogium_procedures, available procedures + * + * Copyright (c) 2015 Ultimaker B.V. + * Author: Olliver Schinagl + * + * SPDX-License-Identifier: AGPL-3.0+ + */ + +#ifndef _EULOGIUM_PROCEDURES_H +#define _EULOGIUM_PROCEDURES_H + +struct procedure_data { + char *key; + uint_fast16_t keylen; + Eina_Bool available; + Eina_Bool executable; + char *step; +}; + +struct procedure_data *procedures_init(void); + +#endif /* _EULOGIUM_PRIVATE_H */ -- cgit v0.12