summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlliver Schinagl <o.schinagl@ultimaker.com>2015-05-08 13:26:45 (GMT)
committerOlliver Schinagl <o.schinagl@ultimaker.com>2015-05-08 13:26:45 (GMT)
commitb3bbb7f360c866e7ba6536488b86a970fc9043cd (patch)
treee5d4ca8ddba15514dd031ddbc83bb84cbb5dcc6b
parent44972017887901de0ff95a774bf358a2f2fa43d2 (diff)
downloadeulogium-b3bbb7f360c866e7ba6536488b86a970fc9043cd.zip
eulogium-b3bbb7f360c866e7ba6536488b86a970fc9043cd.tar.gz
eulogium-b3bbb7f360c866e7ba6536488b86a970fc9043cd.tar.bz2
fix build by adding _on_status_changed_ret and friends. Also the struct (ns) based messaging protocol is gone and replaced with a string parser
Signed-off-by: Olliver Schinagl <o.schinagl@ultimaker.com>
-rw-r--r--src/eulogium.c97
1 files changed, 82 insertions, 15 deletions
diff --git a/src/eulogium.c b/src/eulogium.c
index 60c465a..53bb4bb 100644
--- a/src/eulogium.c
+++ b/src/eulogium.c
@@ -1234,17 +1234,61 @@ static void _on_get_print_name_ret(void *data, const Eldbus_Message *msg, Eldbus
}
struct _status_msg {
- int16_t i;
+ enum printer_status i;
char *s;
};
static void eulogium_printer_status_set(struct eulogium_data *eulogium, struct _status_msg *status)
{
- EINA_LOG_INFO("Printer status: %s", status->s);
- eulogium->printer.status = status->i;
+ Evas_Object *content = NULL;
+
+ EINA_LOG_WARN("Printer status: %s", status->s);
- if (eulogium->printer.status == ERROR)
+ switch (status->i) {
+ Elm_Object_Item *item;
+ /* Cases missing: First run wizard, heating, cooling */
+#if 0
+ case (FIRST_RUN_WIZARD):
+ content = eulogium_multi_screen_menu(eulogium, eulogium->navi, &screen_data, 0, EINA_TRUE);
+ if (content)
+ elm_naviframe_item_simple_push(eulogium->navi, content);
+ break;
+#endif
+ case (PAUSED): /* fall through TODO: make pause screen with resume/other button */
+ case (PRINTING):
+ eldbus_proxy_call(eulogium->dbus.proxy[HARMA], "getPrintName", _on_get_print_name_ret, eulogium, -1, "");
+ content = eulogium_print_progress(eulogium);
+ break;
+ case (WAIT_FOR_REMOVAL):
+ if (eulogium->printer.status != status->i) {
+ eulogium_print_data_clear(eulogium);
+ content = eulogium_clear_print_bed(eulogium);
+ }
+ break;
+ case (DISCONNECTED): /* fall through */
+ case (ERROR):
eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getError", _on_get_error_ret, eulogium, -1, "");
+ content = eulogium_generic_error(eulogium, 4);
+ break;
+ case (IDLE):
+ /* Pop to the bottom of the stack. TODO: evaluate if a) we want this in a seperate function, b) popping to the bottom may not be the right frame to pop too? */
+ if (eulogium->printer.status != status->i) {
+ eulogium_print_data_clear(eulogium);
+ item = elm_naviframe_bottom_item_get(eulogium->navi);
+ if (item)
+ elm_naviframe_item_pop_to(item); /* XXX what to do else? | XXX stack corrupted after this? (see error log) */
+ else
+ EINA_LOG_CRIT("There is no bottom of the stack!");
+ }
+ break;
+ default:
+ break;
+ }
+ if (content)
+ elm_naviframe_item_simple_push(eulogium->navi, content);
+ /* TODO: When status is printing for example, or waiting_for_Removal, pop to those screens immediatly? */
+
+ eulogium->printer.status = status->i;
}
static void _on_get_file_handlers_ret(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
@@ -1271,28 +1315,51 @@ static void _on_get_file_handlers_ret(void *data EINA_UNUSED, const Eldbus_Messa
free(file_handlers); /* TODO: Return filehandlers via data, free array after use there. Cache results during runtime prob. */
}
-static void _on_status_changed_ret(void *data, const Eldbus_Message *msg)
+static void _on_get_status_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
{
const char *errname, *errmsg;
struct eulogium_data *eulogium = data;
- Eldbus_Message_Iter *iter;
+ char *state;
struct _status_msg status;
if (eldbus_message_error_get(msg, &errname, &errmsg)) {
EINA_LOG_ERR("%s %s", errname, errmsg);
- return;
- }
- if (!eldbus_message_arguments_get(msg, "(ns)", &iter)) {
- EINA_LOG_ERR("Printer status signal failed.");
- return;
- }
- if (!eldbus_message_iter_arguments_get(iter, "ns", &status.i, &status.s)) {
- EINA_LOG_ERR("Signal content does not match expected \"ns\" signature.");
- return;
+ status.i = ERROR;
+ status.s = griffin_print_status[ERROR];
+ } else if (!eldbus_message_arguments_get(msg, "s", &state)) {
+ EINA_LOG_ERR("Message content does not match expected \"s\" signature.");
+ status.i = ERROR;
+ status.s = griffin_print_status[ERROR];
+ } else if (!strncmp(state, "DISCONNECTED", 12)) { /* XXX replace this with something better and maintainable, function, LUT etc */
+ status.i = DISCONNECTED;
+ status.s = griffin_print_status[DISCONNECTED];
+ } else if (!strncmp(state, "ERROR", 5)) {
+ status.i = ERROR;
+ status.s = griffin_print_status[ERROR];
+ } else if (!strncmp(state, "IDLE", 4)) {
+ status.i = IDLE;
+ status.s = griffin_print_status[IDLE];
+ } else if (!strncmp(state, "WAIT_FOR_REMOVAL", 16)) {
+ status.i = WAIT_FOR_REMOVAL;
+ status.s = griffin_print_status[WAIT_FOR_REMOVAL];
+ } else if (!strncmp(state, "PRINTING", 8)) {
+ status.i = PRINTING;
+ status.s = griffin_print_status[PRINTING];
+ } else if (!strncmp(state, "PAUSED", 6)) {
+ status.i = PAUSED;
+ status.s = griffin_print_status[PAUSED];
+ } else {
+ status.i = UNKNOWN;
+ status.s = griffin_print_status[UNKNOWN];
}
eulogium_printer_status_set(eulogium, &status);
}
+static void _on_status_changed_ret(void *data, const Eldbus_Message *msg)
+{
+ _on_get_status_ret(data, msg, NULL);
+}
+
static int eulogium_dbus_init(struct eulogium_data *eulogium)
{
Eldbus_Object *obj;