6 #ifndef CONTAINER_CT_MODULE_H
7 #define CONTAINER_CT_MODULE_H
9 #include "ct_helpers.h"
11 #include "ps_parameter.h"
13 #include "visit_helper.h"
14 #include "visit_struct.h"
21 namespace mcx::container {
88 enum class ModuleErrors { NO_ERROR = 0, NO_CALLBACK_DEFINED = 1, CALLBACK_FAILED = 2, WRONG_STATE = 3 };
94 enum class ModuleEvents { EMPTY = -1, STOP = 0, START = 1, PAUSE = 2, ACK = 0xFF };
143 parameter_server::UserGroup owner_group, uint32_t permissions = parameter_server::default_permissions);
198 void setName(
const char* name);
350 template <
typename T>
353 for (
auto& module : module_array) {
354 createSubmodule(&module, fmt::format(
"{}{:02d}", basename, ++idx).c_str());
365 void setType(
const char* name);
383 template <
size_t buffer_size = parameter_server::DEFAULT_INPUT_BUFFER_LENGTH>
408 template <
typename T,
size_t buffer_size = parameter_server::DEFAULT_INPUT_BUFFER_LENGTH,
409 add_visitable::EnableIfNotVisitable<T> =
true>
412 parameter_server::Unit param_unit = parameter_server::Unit::undefined);
439 template <
typename T,
size_t buffer_size = parameter_server::DEFAULT_INPUT_BUFFER_LENGTH,
440 add_visitable::EnableIfVisitable<T> =
true>
443 parameter_server::Unit param_unit = parameter_server::Unit::undefined);
471 template <
typename T,
size_t buffer_size = parameter_server::DEFAULT_INPUT_BUFFER_LENGTH>
473 parameter_server::DataType data_type, T* value_ptr,
size_t length = 1,
474 parameter_server::Unit param_unit = parameter_server::Unit::undefined);
521 inline void updateLinks() {
522 if (local_branch_.isLinkUpdated()) {
523 local_branch_.updateLink();
527 inline void updateInputs() {
528 if (local_branch_.isInputUpdated()) {
529 local_branch_.updateInput();
532 if (local_branch_.isOverwriteInputUpdated()) {
533 local_branch_.overwriteInput();
537 parameter_server::ParamHandle
addParameter(
const char* name, parameter_server::ParameterType param_type,
538 uint32_t data_type, int32_t data_type_size, parameter_server::Unit unit,
539 void* value_ptr, uint32_t origin_length, uint32_t buffer_length);
541 bool createWrapper();
548 ModuleStates new_state,
const std::function<
bool(
Module*)>&, std::mutex* switch_guard);
550 uint64_t dt_micro_s_{};
551 uint64_t utilization_{};
552 std::string module_name_{
"Undefined"};
553 std::string module_type_;
554 parameter_server::Parameter* root_ptr_{};
555 parameter_server::Parameter local_branch_;
556 std::vector<Module*> submodules_;
562 mutable std::mutex switch_guard_;
572 dt_micro_s_ = micro_sec;
573 for (
auto& m : submodules_) {
574 m->setDtMicroSec(micro_sec);
584 template <
size_t buffer_size>
586 char* str_ptr,
size_t length) {
588 parameter_server::DataType data_type = parameter_server::DataType::STRING;
589 parameter_server::Unit param_unit = parameter_server::Unit::undefined;
591 return addParameter<char, buffer_size>(
id, param_type, data_type, str_ptr, length, param_unit);
594 template <
typename T,
size_t buffer_size, add_visitable::EnableIfNotVisitable<T>>
597 parameter_server::Unit param_unit ) {
598 auto type = mcx::getType(*value_ptr);
599 return addParameter<T, buffer_size>(
id, param_type, std::get<0>(type), value_ptr, length, param_unit);
602 template <
typename T,
size_t buffer_size, add_visitable::EnableIfVisitable<T>>
604 T* value_ptr,
size_t length, parameter_server::Unit) {
605 log_assert(length == 1,
"addParameter for the visitable structures does not support length > 1");
606 add_visitable::ParamHandleMap params_handle_map;
607 auto root = add_visitable::addParameterVisitableArrayImpl<buffer_size>(
608 &local_branch_, &local_branch_, params_handle_map,
nullptr,
id, param_type, *value_ptr);
612 template <
typename T,
size_t buffer_size>
614 parameter_server::DataType data_type, T* value_ptr,
size_t length,
615 parameter_server::Unit param_unit) {
616 size_t type_size =
sizeof(T);
617 return addParameter(
id, param_type,
static_cast<unsigned int>(data_type),
static_cast<int32_t
>(type_size), param_unit,
618 value_ptr,
static_cast<uint32_t
>(length),
static_cast<uint32_t
>(buffer_size));
623 #endif // CONTAINER_CT_MODULE_H