6 #ifndef MOTORCORTEX_LIB_ECAT_DOMAIN_H
7 #define MOTORCORTEX_LIB_ECAT_DOMAIN_H
9 #include "ecat_domainbase.h"
10 #include "ps_handlers.h"
11 #include "ps_parameter.h"
12 #include "utl_cmdparser.h"
39 std::vector<PdoData> entries;
40 std::vector<ParameterLink> links;
48 std::vector<ParameterLink> links;
49 std::vector<SdoData> entries;
52 using MemoryPool = std::vector<uint64_t*>;
55 Domain(
const std::string& name,
const std::string& path,
const std::string& filename);
57 Domain(
const std::string& path,
const std::string& filename);
59 Domain(
const std::string& path, tinyxml2::XMLElement* domain_xml, std::string version);
63 [[nodiscard]]
const char* getName()
const;
65 [[nodiscard]]
const char* getPath()
const;
67 [[nodiscard]]
const char* fileName()
const;
69 [[nodiscard]]
const char* getFullPath()
const;
73 [[nodiscard]]
bool hasError()
const;
75 [[nodiscard]]
double getDtSec()
const;
77 static std::tuple<parameter_server::DataType, size_t, size_t> toParamDataType(
DataTypeDesc data_type_desc);
80 static size_t bitsToBytes(
size_t bits);
82 static void updateInputs(
const uint8_t* data, std::vector<PdoData>& pdo_inputs);
84 static bool updateOutputs(std::vector<PdoData>& pdo_outputs, uint8_t* data);
87 void updateProcessData(DomainState state, uint8_t* data,
unsigned int length)
override;
89 std::list<SdoId> updateServiceQueue()
override;
96 void setDtSec(
double sec);
101 std::vector<Domain::PdoData>& pdo_inputs);
104 std::vector<PdoData>& pdo_outputs);
107 std::vector<SdoData>& sdos);
114 static inline uint64_t toggleBits(uint64_t l, uint64_t r) {
return ((1UL << r) - 1UL) ^ ((1UL << l) - 1UL); }
116 static parameter_server::ParameterType toParamDir(EcatDirection dir, utils::SystemMode system_mode);
118 static bool cutPdoDataTree(std::vector<PdoData>& pdos);
120 static bool hasNamedChildren(
const EcatPdoInfo& entry);
122 Domain::PdoData addPdoEntry(
const std::string& path,
const EcatPdoInfo& entry, EcatDirection dir,
124 std::vector<uint64_t*>& mem_pool);
127 utils::SystemMode system_mode, std::vector<SdoData>& sdos);
131 std::string filename_;
132 std::string full_path_;
136 tinyxml2::XMLElement* element{};
138 [[nodiscard]]
bool isLoaded()
const {
return element; }
142 std::vector<PdoData> pdo_inputs_;
143 std::vector<PdoData> pdo_outputs_;
144 std::vector<SdoData> sdos_;
145 MemoryPool memory_pool_;
147 DomainState state_{DomainState::DOMAIN_OFF};
154 } update_domain_sdos_{};
156 double error_counter;
157 double no_error_counter;
159 double error_timeout;
160 double no_error_timeout;
161 } timing_{0, 0, 0.001, 1.0, 1.0};
168 #endif // MOTORCORTEX_LIB_ECAT_DOMAIN_H