diff options
author | Olliver Schinagl <o.schinagl@ultimaker.com> | 2015-06-02 14:20:41 (GMT) |
---|---|---|
committer | Olliver Schinagl <o.schinagl@ultimaker.com> | 2015-06-12 05:30:15 (GMT) |
commit | 07a57037464054da02a7e2528ad25a711137c6b1 (patch) | |
tree | 43067d28f511921e4ac1f611f1bc832ec30ff5df | |
parent | 4819a5dab4ffc2cf3def96a9b2ea665687560d8f (diff) | |
download | eulogium-07a57037464054da02a7e2528ad25a711137c6b1.zip eulogium-07a57037464054da02a7e2528ad25a711137c6b1.tar.gz eulogium-07a57037464054da02a7e2528ad25a711137c6b1.tar.bz2 |
[griffin.display] Add more states based on the dummy printer
The dummy printer is giving us more states and allows for more advanced
screens (for now). Update the progress screen with more information
Signed-off-by: Olliver Schinagl <o.schinagl@ultimaker.com>
-rw-r--r-- | src/eulogium.c | 61 | ||||
-rw-r--r-- | src/eulogium.h | 12 |
2 files changed, 62 insertions, 11 deletions
diff --git a/src/eulogium.c b/src/eulogium.c index ecf8f80..93c89b8 100644 --- a/src/eulogium.c +++ b/src/eulogium.c @@ -546,18 +546,33 @@ Evas_Object *eulogium_split_screen(Evas_Object *parent, Evas_Object *top, Evas_O static void _on_get_progress_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) { const char *errname, *errmsg; - struct eulogium_data *eulogium = data; + double *progress = data; if (eldbus_message_error_get(msg, &errname, &errmsg)) { EINA_LOG_ERR("%s %s", errname, errmsg); return; } - if (!eldbus_message_arguments_get(msg, "d", &eulogium->print.progress)) { + if (!eldbus_message_arguments_get(msg, "d", progress)) { EINA_LOG_ERR("Failed to get print progress."); return; } } +static void _on_get_time_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) +{ + const char *errname, *errmsg; + uint_fast32_t *time = data; + + if (eldbus_message_error_get(msg, &errname, &errmsg)) { + EINA_LOG_ERR("%s %s", errname, errmsg); + return; + } + if (!eldbus_message_arguments_get(msg, "u", time)) { + EINA_LOG_ERR("Failed to get remaining print time."); + return; + } +} + static Eina_Bool _timer_progress_data_update_cb(void *data) { struct eulogium_data *eulogium = data; @@ -565,10 +580,13 @@ static Eina_Bool _timer_progress_data_update_cb(void *data) static double progress = 0; static double time = -1; - eldbus_proxy_call(eulogium->dbus.proxy[HARMA], "getProgress", _on_get_progress_ret, eulogium, -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, ""); if (eulogium->printer.status != status) { elm_object_text_set(eulogium->status, griffin_print_status[eulogium->printer.status]); + if (eulogium->printer.status == COOLING) + elm_progressbar_inverted_set(eulogium->progress, EINA_TRUE); status = eulogium->printer.status; } if (eulogium->print.progress != progress) { @@ -1302,10 +1320,22 @@ static void eulogium_printer_status_set(struct eulogium_data *eulogium, struct _ break; #endif case (PAUSED): /* fall through TODO: make pause screen with resume/other button */ + case (HEATING): /* fall through */ + case (SLICING): /* fall through */ case (PRINTING): /* fall through */ - eldbus_proxy_call(eulogium->dbus.proxy[HARMA], "getPrintName", _on_get_print_name_ret, eulogium, -1, ""); - content = eulogium_print_progress(eulogium); - break; + case (COOLING): + /* Check if the previous state was already one of the printing states. + * If the state was one of the various printing states, do nothing. + */ + if (!((eulogium->printer.status == PAUSED) || + (eulogium->printer.status == HEATING) || + (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, ""); + content = eulogium_print_progress(eulogium); + } + break; case (WAIT_FOR_REMOVAL): if (eulogium->printer.status != status->i) { eulogium_print_data_clear(eulogium); @@ -1393,15 +1423,27 @@ static void _on_get_status_ret(void *data, const Eldbus_Message *msg, Eldbus_Pen } else if (!strncmp(state, "ERROR", 5)) { status.i = ERROR; status.s = griffin_print_status[ERROR]; + } else if (!strncmp(state, "FIRST_RUN_WIZZARD", 17)) { + status.i = FIRST_RUN_WIZZARD; + status.s = griffin_print_status[FIRST_RUN_WIZZARD]; } 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, "SLICING", 7)) { + status.i = SLICING; + status.s = griffin_print_status[SLICING]; + } else if (!strncmp(state, "HEATING", 7)) { + status.i = HEATING; + status.s = griffin_print_status[HEATING]; } else if (!strncmp(state, "PRINTING", 8)) { status.i = PRINTING; status.s = griffin_print_status[PRINTING]; + } else if (!strncmp(state, "COOLING", 7)) { + status.i = COOLING; + status.s = griffin_print_status[COOLING]; + } 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, "PAUSED", 6)) { status.i = PAUSED; status.s = griffin_print_status[PAUSED]; @@ -1721,6 +1763,7 @@ static int eulogium_dbus_init(struct eulogium_data *eulogium) /* TODO: put signal/method name strings in macro/LUT */ eldbus_proxy_call(eulogium->dbus.proxy[HARMA], "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); diff --git a/src/eulogium.h b/src/eulogium.h index ca9c1b6..39acd0b 100644 --- a/src/eulogium.h +++ b/src/eulogium.h @@ -19,9 +19,13 @@ enum printer_status { UNKNOWN, DISCONNECTED, ERROR, - WAIT_FOR_REMOVAL, + FIRST_RUN_WIZZARD, IDLE, + SLICING, + HEATING, PRINTING, + COOLING, + WAIT_FOR_REMOVAL, PAUSED, }; @@ -29,9 +33,13 @@ char *griffin_print_status[] = { "Unknown", "Disconnected", "Error", - "Wait for Removal", + "First Run Wizard", "IDLE", + "Slicing", + "Heating", "Printing:", + "Cooling down", + "Wait for Removal", "Paused", }; |