diff options
author | Olliver Schinagl <o.schinagl@ultimaker.com> | 2015-04-29 13:39:14 (GMT) |
---|---|---|
committer | Olliver Schinagl <o.schinagl@ultimaker.com> | 2015-04-29 13:39:14 (GMT) |
commit | 83a1c274b930f20b5179cdbc7fa41525f2ee9ed3 (patch) | |
tree | 7044b371a12c92ef22bb42d85222dbb86d6c7146 | |
parent | 31d1151f75bcd8610df26d5b6e8bde72567e2402 (diff) | |
download | eulogium-83a1c274b930f20b5179cdbc7fa41525f2ee9ed3.zip eulogium-83a1c274b930f20b5179cdbc7fa41525f2ee9ed3.tar.gz eulogium-83a1c274b930f20b5179cdbc7fa41525f2ee9ed3.tar.bz2 |
Check for print bed status before starting a print
Signed-off-by: Olliver Schinagl <o.schinagl@ultimaker.com>
-rw-r--r-- | src/eulogium.c | 78 |
1 files changed, 74 insertions, 4 deletions
diff --git a/src/eulogium.c b/src/eulogium.c index 9ce88b2..d7f0e3b 100644 --- a/src/eulogium.c +++ b/src/eulogium.c @@ -400,15 +400,70 @@ static void _on_start_print_ret(void *data, const Eldbus_Message *msg, Eldbus_Pe elm_naviframe_item_simple_push(eulogium->navi, content); } -static void eulogium_start_print(struct eulogium_data *eulogium, char *filepath) +static void eulogium_print_start(struct eulogium_data *eulogium) { - eulogium_print_data_set(eulogium, filepath); - eldbus_proxy_call(eulogium->dbus.proxy[HARMA], "startPrint", _on_print_start_ret, eulogium, -1, "sss", - eulogium->print.name, eulogium->print.file, eulogium->print.flags); /* TODO: calling startPrint may have a longer then expected timeout. While unlikely we may want to inform * the user about this via a screen. Difficulty being here, is that we don't want to 'flash' a screen * too shortly but may not want to delay without reason. */ + eldbus_proxy_call(eulogium->dbus.proxy[HARMA], "startPrint", _on_start_print_ret, eulogium, -1, "sss", + eulogium->print.name, eulogium->print.file, eulogium->print.flags); +} + +static void _on_cleared_printer_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) +{ + const char *errname, *errmsg; + Eina_Bool cleared_bed = EINA_FALSE; + struct eulogium_data *eulogium = data; + + if (eldbus_message_error_get(msg, &errname, &errmsg)) { + EINA_LOG_ERR("%s %s", errname, errmsg); + return; + } + if (!eldbus_message_arguments_get(msg, "b", &cleared_bed)) { + EINA_LOG_ERR("Failed to get bed clear status."); + return; + } + if (cleared_bed == EINA_TRUE) { + EINA_LOG_INFO("Bed has been Cleared\n"); + eulogium_print_start(eulogium); + } else { + Evas_Object *content; + + EINA_LOG_WARN("Bed was unable to be Cleared!\n"); + content = eulogium_generic_error(eulogium, 0); /* TODO, proper error codes LUT */ + elm_naviframe_item_simple_push(eulogium->navi, content); + } +} + +static void _clear_bed_and_start_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + struct eulogium_data *eulogium = data; + + eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "clearedPrinter", _on_cleared_printer_ret, eulogium, -1, ""); +} + +void eulogium_clear_print_bed_and_start_print(struct eulogium_data *eulogium) +{ + Evas_Object *content, *obj; + + content = elm_box_add(eulogium->navi); + evas_object_show(content); + + obj = elm_label_add(content); + elm_object_text_set(obj, "Print bed not empty!<br>Empty print bed."); + evas_object_show(obj); + elm_box_pack_end(content, obj); + + /* TODO replace with left/right button call, this is just a quick Hack XXX */ + obj = elm_button_add(content); + elm_object_text_set(obj, "Bed is now clear"); + evas_object_smart_callback_add(obj, "clicked", _clear_bed_and_start_cb, eulogium); + evas_object_show(obj); + elm_box_pack_end(content, obj); + + /* XXX BUG If we fail, we keep on pushing new frames. instead, we need to replace the current frame */ + elm_naviframe_item_simple_push(eulogium->navi, content); } struct _filelist_data { @@ -428,6 +483,21 @@ static void _cb_select_file(void *data, Evas_Object *obj EINA_UNUSED, void *even content = eulogium_print_menu(eulogium, filepath); elm_naviframe_item_simple_push(eulogium->navi, content); } else { + eulogium_print_data_set(eulogium, filepath); + switch (eulogium->printer.status) { + Evas_Object *content; + + case IDLE: + eulogium_print_start(eulogium); + break; + case WAIT_FOR_REMOVAL: + eulogium_clear_print_bed_and_start_print(eulogium); + break; + default: + content = eulogium_generic_error(eulogium, 0); /* TODO, proper error codes LUT */ + elm_naviframe_item_simple_push(eulogium->navi, content); + break; + } } } } |