/* * eulogium_procedures, available procedures * * Copyright (c) 2015 Ultimaker B.V. * Author: Olliver Schinagl * * SPDX-License-Identifier: AGPL-3.0+ */ #include #include #include #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); }