summaryrefslogtreecommitdiffstats
path: root/src/procedures.h
blob: 08ce1d6edf52484fd13d6b40913e0696a2cf9043 (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
/*
 * 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 <Eina.h>
#include <Eldbus.h>
#include <stdint.h>

enum procedure_status {
	PROC_READY,
	PROC_ACTIVE,
	PROC_FINISHED,
};

enum procedure_key {
	PROC_NONE,
	PROC_BED_HOME,
	PROC_BED_LEVEL,
	PROC_HOTEND_SWITCH,
	PROC_HOTEND_LEVEL,
	PROC_PRINT,
	PROC_BED_HEATUP,
	PROC_HOTEND_HEATUP_0,
	PROC_HOTEND_HEATUP_1,
	PROC_PRINT_SPEED,
	PROC_FAN_SPEED,
	PROC_FLOW_RATE,
	PROC_LAST, /* sentinel */
};

enum steps {
	PROC_RUN_PRE_PRINT_SETUP,
	STEP_PRINTING,
	PROC_POST_PRINT,
	PROC_WAIT_FOR_CLEANUP,
	STEP_HEATING,
	STEP_SPEEDING,
	STEP_FLOWING,
	STEP_HOMEING,
};

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 procedure_data {
	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 */
	const struct procedure_msg *msgs;
	const struct procedure_step *_steps; /* TODO optional? maybe we don't even have to know the list */
	struct procedure_step *step_active;
};

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

struct procedure_data *procedures_init(Eldbus_Proxy *proxy);
void procedure_meta_getall(void);
const 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_metadata_get(enum procedure_key proc_key);
Eldbus_Pending *procedure_target_set(const enum procedure_key proc_key);

void procedures_shutdown(void);

#endif /* _PROCEDURES_H */