summaryrefslogtreecommitdiffstats
path: root/src/procedures.h
blob: cb6fd8a296a7b0b01058da53ff90aa9356a16420 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
/*
 * procedures, available procedures
 *
 * Copyright (c) 2015 Ultimaker B.V.
 * Author: Olliver Schinagl <o.schinagl@ultimaker.com>
 *
 * SPDX-License-Identifier:	AGPL-3.0+
 */

#ifndef _PROCEDURES_H
#define _PROCEDURES_H

#include <Ecore.h>
#include <Eina.h>
#include <Eldbus.h>
#include <stdint.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 { /* XXX this will cause problems and has to change as we want to iterate over this list */
	PROC_NONE = 0,
	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_MATERIAL_UNLOAD,
	PROC_MATERIAL_LOAD,
	PROC_MATERIAL_CHANGE,
	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_PROGRESS,
	PROC_META_SLIDER,
	PROC_META_SPINNER,
};

struct event_info {
	double in;
	Ecore_Timer *timer;
	int type;
};

struct meta_data {
	enum meta_type type;
	void *data;
};

struct procedure_data {
	const char *key;
	enum procedure_key proc_key;
	enum procedure_status status;
	Eina_Bool wizard;
	const char *sig; /* XXX can go */
	const char *para; /* TODO va_list to go with sig? */
	Eina_Bool available; /* XXX can go */
	Eina_Bool executable; /* XXX can go */
	void (*parser)(void *data, const void *key, Eldbus_Message_Iter *variant);
	enum meta_type type; /* TODO remove in favor of meta \/ */
	void *meta; /* TODO remove in favor of meta \/. */
//	struct meta_data meta;
	const struct procedure_msg *msgs; /* XXX can go */
	const struct procedure_step *_steps; /* TODO optional? maybe we don't even have to know the list */
	const struct procedure_step *step_active;
	struct event_info event;
};

struct eulogium_data; /* XXX remove later when struct eulogium gets refactored. */

struct procedure_data *procedures_init(Eldbus_Proxy *proxy);
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 procedure_data *procedure, struct eulogium_data *eulogium);
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);

void *procedure_meta_data_get(struct procedure_data *procedure);
enum meta_type procedure_meta_type_get(struct procedure_data *procedure);
void procedure_meta_set(struct procedure_data *procedure, enum meta_type type, 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_getall(void);
void procedure_metadata_poll_start(struct procedure_data *procedure);
void procedure_metadata_poll_stop(struct procedure_data *procedure);
Eldbus_Pending *procedure_target_set(const enum procedure_key proc_key);

void procedures_shutdown(void);

#endif /* _PROCEDURES_H */