diff options
Diffstat (limited to 'src/procedures.h')
-rw-r--r-- | src/procedures.h | 159 |
1 files changed, 150 insertions, 9 deletions
diff --git a/src/procedures.h b/src/procedures.h index 79e23eb..44d1498 100644 --- a/src/procedures.h +++ b/src/procedures.h @@ -1,5 +1,5 @@ /* - * eulogium_procedures, available procedures + * procedures, available procedures * * Copyright (c) 2015 Ultimaker B.V. * Author: Olliver Schinagl <o.schinagl@ultimaker.com> @@ -7,23 +7,164 @@ * SPDX-License-Identifier: AGPL-3.0+ */ -#ifndef _EULOGIUM_PROCEDURES_H -#define _EULOGIUM_PROCEDURES_H +#ifndef _PROCEDURES_H +#define _PROCEDURES_H +#include <Ecore.h> #include <Eina.h> #include <Eldbus.h> #include <stdint.h> -#include "print_data.h" +#include "gettext.h" + +#define LABEL_PROC_NONE N_("None") +#define LABEL_PROC_BED_MOVE N_("Moving buildplate") +#define LABEL_PROC_BED_HEATUP N_("Heating buildplate") +#define LABEL_PROC_HOTEND_HEATUP_0 N_("Heating left hotend") +#define LABEL_PROC_HOTEND_HEATUP_1 N_("Heating right hotend") +#define LABEL_PROC_HOTEND_ACTIVE_SET N_("Switching active hotend") +#define LABEL_PROC_PRINT_SPEED N_("Print speed") +#define LABEL_PROC_FAN_SPEED N_("Fan speed") +#define LABEL_PROC_FLOW_RATE N_("Flow rate") +#define LABEL_PROC_RETRACTION_LENGTH N_("Retraction length") +#define LABEL_PROC_RETRACTION_SPEED N_("Retraction speed") +#define LABEL_PROC_RETRACTION_ZHOP N_("Retraction Z-Hop") +#define LABEL_PROC_BED_LEVEL_AUTO N_("Autolevel buildplate") +#define LABEL_PROC_BED_RAISE N_("Raise buildplate") +#define LABEL_PROC_BED_HOME N_("Lower buildplate") +#define LABEL_PROC_MATERIAL_MOVE_0 N_("Move material left") +#define LABEL_PROC_MATERIAL_MOVE_1 N_("Move material right") +#define LABEL_PROC_JERK_XY N_("Jerk X/Y") +#define LABEL_PROC_JERK_Z N_("Jerk Z") +#define LABEL_PROC_CURRENT_XY N_("Current X/Y") +#define LABEL_PROC_CURRENT_Z N_("Current Z") +#define LABEL_PROC_CURRENT_E N_("Current E") +#define LABEL_PROC_PRINT N_("Printing") +#define LABEL_PROC_FIRMWARE_UPDATE N_("Updating firmware") +#define LABEL_PROC_LAST N_("Unknown") + +enum procedure_status { + PROC_READY, + PROC_ACTIVE, + PROC_FINISHED, +}; + +enum procedure_key { + PROC_NONE, + PROC_BED_MOVE, + PROC_BED_HEATUP, + PROC_HOTEND_HEATUP_0, + PROC_HOTEND_HEATUP_1, + PROC_HOTEND_ACTIVE_SET, + PROC_PRINT_SPEED, + PROC_FAN_SPEED, + PROC_FLOW_RATE, + PROC_RETRACTION_LENGTH, + PROC_RETRACTION_SPEED, + PROC_RETRACTION_ZHOP, + PROC_BED_LEVEL_AUTO, + PROC_BED_RAISE, + PROC_BED_HOME, + PROC_HEAD_HOME, + PROC_MATERIAL_MOVE_0, + PROC_MATERIAL_MOVE_1, + PROC_JERK_XY, + PROC_JERK_Z, + PROC_CURRENT_XY, + PROC_CURRENT_Z, + PROC_CURRENT_E, + PROC_PRINT, + PROC_FIRMWARE_UPDATE, + PROC_LAST, /* sentinel */ +}; + +enum steps { + PROC_RUN_PRE_PRINT_SETUP, + STEP_PRINTING, + PROC_POST_PRINT, + PROC_WAIT_FOR_CLEANUP, + STEP_HEATING, + STEP_MOVING, + STEP_SPEEDING, + STEP_FLOWING, + STEP_HOMEING, + STEP_LENGTHENING, + STEP_HOPPING, + STEP_RAISING, + STEP_AUTOMATIC_BED_LEVELING, + STEP_CURRENTING, + STEP_JERKING, + STEP_WAITING, + STEP_SWITCHING, + STEP_FIRMWARE_UPDATE_CHECKING, + STEP_FIRMWARE_UPDATE_WRITING, + STEP_FIRMWARE_UPDATE_VERIFYING, +}; + +struct procedure_step { + const char *key; + const enum steps step; +}; + +enum msgs { + PROC_MSG_PRINTER_CLEANED, +}; + +struct procedure_msg { + const char *key; + const enum msgs msg; +}; + +enum meta_type { + PROC_META_NONE, + PROC_META_PRINT, + PROC_META_DIAL, +}; + +struct poll_data { + double in; + Ecore_Timer *timer; + int event; +}; struct procedure_data { - char *key; - uint_fast16_t keylen; + const char *key; + enum procedure_status status; + const char *sig; + const char *para; /* TODO va_list to go with sig? */ Eina_Bool available; Eina_Bool executable; + void (*parser)(void *data, const void *key, Eldbus_Message_Iter *variant); + void *meta; /* TODO every proc. has meta data, some needs to be periodically updated (print_data), others on signal changes. needs enum guard to identify which meta we have. */ + const struct procedure_msg *msgs; + const struct procedure_step *_steps; /* TODO optional? maybe we don't even have to know the list */ + const struct procedure_step *step_active; + struct poll_data poll; }; -struct procedure_data *procedures_init(void); -Eldbus_Pending *procedure_start_print(Eldbus_Proxy *proxy, struct print_data *print); +struct eulogium_data; /* XXX remove later when struct eulogium gets refactored. */ + +struct procedure_data *procedures_init(Eldbus_Proxy *proxy); +void procedure_meta_getall(void); +struct procedure_data *procedure_get(const char *key); +const struct procedure_step *procedure_step_get(const struct procedure_data *proc, const char *key); +void procedure_process_step(struct eulogium_data *eulogium, struct procedure_data *procedure); +Eldbus_Pending *procedure_message(const struct procedure_data *proc, const struct procedure_msg *msg); + +struct print_data; /* XXX only here until print_start gets simplified */ +Eldbus_Pending *procedure_print_start(const struct print_data *print); +Eldbus_Pending *procedure_print_printer_cleaned(void); +Eldbus_Pending *procedure_print_progress_get(struct procedure_data *procedure); + +void *procedure_meta_get(struct procedure_data *procedure); +void procedure_meta_set(struct procedure_data *procedure, void *data); + +Eldbus_Pending *procedure_start_simple(const enum procedure_key proc_key); +Eldbus_Pending *procedure_metadata_get(const struct procedure_data *procedure); +Eldbus_Pending *procedure_metadata_key_get(enum procedure_key proc_key); +void procedure_metadata_poll(struct procedure_data *procedure, Eina_Bool polling); +Eldbus_Pending *procedure_target_set(const enum procedure_key proc_key); + +void procedures_shutdown(void); -#endif /* _EULOGIUM_PRIVATE_H */ +#endif /* _PROCEDURES_H */ |