summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/eulogium.c61
-rw-r--r--src/eulogium.h12
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",
};