summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorOlliver Schinagl <o.schinagl@ultimaker.com>2015-06-16 06:47:06 (GMT)
committerOlliver Schinagl <o.schinagl@ultimaker.com>2015-06-16 06:47:06 (GMT)
commit58678161dffd48c7ecfaedf8aa8a49ec118defe4 (patch)
treec3522d8465c8e99870cd9912b02cbb0a62b81ad4 /src
parent149f2a7cd778188f363260df5268e08fbdc43297 (diff)
downloadeulogium-58678161dffd48c7ecfaedf8aa8a49ec118defe4.zip
eulogium-58678161dffd48c7ecfaedf8aa8a49ec118defe4.tar.gz
eulogium-58678161dffd48c7ecfaedf8aa8a49ec118defe4.tar.bz2
[griffin.hmi] disable all dbus calls, add some very initial procedure dbus stuff
Signed-off-by: Olliver Schinagl <o.schinagl@ultimaker.com>
Diffstat (limited to 'src')
-rw-r--r--src/eulogium.c134
-rw-r--r--src/eulogium.h2
-rw-r--r--src/eulogium_procedures.c49
-rw-r--r--src/eulogium_procedures.h23
4 files changed, 178 insertions, 30 deletions
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 <Eldbus.h>
#include <stdint.h>
+#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 <o.schinagl@ultimaker.com>
+ *
+ * SPDX-License-Identifier: AGPL-3.0+
+ */
+
+#include <Elementary.h>
+
+#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 <o.schinagl@ultimaker.com>
+ *
+ * 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 */