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
|
/*
* eulogium_procedures, available procedures
*
* Copyright (c) 2015 Ultimaker B.V.
* Author: Olliver Schinagl <o.schinagl@ultimaker.com>
*
* SPDX-License-Identifier: AGPL-3.0+
*/
#include <Eina.h>
#include <Eldbus.h>
#include <stdint.h>
#include "procedures.h"
#include "print_data.h"
#define _PROC_PRINT "PRINT"
#define _PROC_HEATUP_HOTEND "HEATUP_HOTEND"
#define _PROC_POST_PRINT "POST_PRINT"
#define _PROC_PRE_PRINT_SETUP "PRE_PRINT_SETUP"
void _container_basic_variant(Eldbus_Message_Iter *parent, const char type, void *data)
{
Eldbus_Message_Iter *child;
char sig[2] = { '\0' };
sig[0] = type;
child = eldbus_message_iter_container_new(parent, 'v', sig);
eldbus_message_iter_basic_append(child, type, data);
eldbus_message_iter_container_close(parent, child);
}
static struct procedure_data procedures[] = {
{
.key = _PROC_PRINT,
.keylen = sizeof(_PROC_PRINT),
.executable = EINA_FALSE,
.available = EINA_FALSE,
}, {
.key = _PROC_HEATUP_HOTEND,
.keylen = sizeof(_PROC_HEATUP_HOTEND),
.executable = EINA_FALSE,
.available = EINA_FALSE,
}, {
.key = _PROC_POST_PRINT,
.keylen = sizeof(_PROC_POST_PRINT),
.executable = EINA_FALSE,
.available = EINA_FALSE,
}, {
.key = _PROC_PRE_PRINT_SETUP,
.keylen = sizeof(_PROC_PRE_PRINT_SETUP),
.executable = EINA_FALSE,
.available = EINA_FALSE,
}, {
NULL /* sentinel */
}
};
struct procedure_data *procedures_init(void)
{
return procedures;
};
static void _on_start_print_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
{
struct print_data *print = data;
const char *errname, *errmsg;
Eina_Bool print_started = EINA_FALSE;
if (eldbus_message_error_get(msg, &errname, &errmsg)) {
EINA_LOG_ERR("%s %s", errname, errmsg);
return;
}
if (!eldbus_message_arguments_get(msg, "b", &print_started)) {
EINA_LOG_ERR("Failed to start print.");
return;
}
if (print_started == EINA_TRUE) {
EINA_LOG_INFO("Print has been successfully started");
print->block = EINA_FALSE;
} else {
EINA_LOG_ERR("Unable to start print");
}
}
Eldbus_Pending *procedure_start_print(Eldbus_Proxy *proxy, struct print_data *print)
{
Eldbus_Message *msg;
Eldbus_Message_Iter *iter, *dict, *array;
msg = eldbus_proxy_method_call_new(proxy, "startProcedure");
iter = eldbus_message_iter_get(msg);
/* Compose msg sa{sv} */
eldbus_message_iter_basic_append(iter, 's', "PRINT");
array = eldbus_message_iter_container_new(iter, 'a', "{sv}");
dict = eldbus_message_iter_container_new(array, 'e', NULL);
eldbus_message_iter_basic_append(dict, 's', "name");
_container_basic_variant(dict, 's', print->name);
eldbus_message_iter_container_close(array, dict);
dict = eldbus_message_iter_container_new(array, 'e', NULL);
eldbus_message_iter_basic_append(dict, 's', "url");
_container_basic_variant(dict, 's', print->url);
eldbus_message_iter_container_close(array, dict);
eldbus_message_iter_container_close(iter, array);
return eldbus_proxy_send(proxy, msg, &_on_start_print_ret, print, -1);
}
|