Simulate domain state

This commit is contained in:
Bjarne von Horn 2024-07-05 11:06:05 +02:00
parent 4795be145a
commit 013aafc329
2 changed files with 11 additions and 1 deletions

View File

@ -26,9 +26,9 @@
#include <sstream> #include <sstream>
#include <string> #include <string>
#include <utility> #include <utility>
#include <unordered_set>
#include <iterator> #include <iterator>
static std::vector<size_t> getPermutationVector(size_t count); static std::vector<size_t> getPermutationVector(size_t count);
size_t pdo::sizeInBytes() const size_t pdo::sizeInBytes() const
@ -61,10 +61,13 @@ ec_domain::ec_domain(rtipc *rtipc, const char *prefix) : rt_group(rtipc_create_g
int ec_domain::activate(int domain_id) int ec_domain::activate(int domain_id)
{ {
std::unordered_set<uint32_t> slaves;
connected.resize(mapped_pdos.size()); connected.resize(mapped_pdos.size());
size_t idx = 0; size_t idx = 0;
for (const auto &pdo : mapped_pdos) for (const auto &pdo : mapped_pdos)
{ {
slaves.insert(pdo.slave_address.getCombined());
void *rt_pdo = nullptr; void *rt_pdo = nullptr;
char buf[512]; char buf[512];
const auto fmt = snprintf(buf, sizeof(buf), "%s/%d/%08X/%04X", prefix, domain_id, pdo.slave_address.getCombined(), pdo.pdo_index); const auto fmt = snprintf(buf, sizeof(buf), "%s/%d/%08X/%04X", prefix, domain_id, pdo.slave_address.getCombined(), pdo.pdo_index);
@ -95,6 +98,7 @@ int ec_domain::activate(int domain_id)
++idx; ++idx;
} }
activated_ = true; activated_ = true;
numSlaves = slaves.size();
return 0; return 0;
} }
@ -153,6 +157,9 @@ int ecrt_domain_state(
information. */ information. */
) )
{ {
state->working_counter = domain->getNumSlaves();
state->redundancy_active = 0;
state->wc_state = EC_WC_COMPLETE;
return 0; return 0;
} }

View File

@ -165,6 +165,7 @@ private:
rtipc_group *rt_group; rtipc_group *rt_group;
const char *prefix; const char *prefix;
bool activated_ = false; bool activated_ = false;
size_t numSlaves = 0;
public: public:
explicit ec_domain(struct rtipc *rtipc, const char *prefix); explicit ec_domain(struct rtipc *rtipc, const char *prefix);
@ -180,6 +181,8 @@ public:
int process(); int process();
int queue(); int queue();
size_t getNumSlaves() const { return numSlaves; }
ssize_t map(ec_slave_config const &config, unsigned int syncManager, ssize_t map(ec_slave_config const &config, unsigned int syncManager,
uint16_t pdo_index); uint16_t pdo_index);
}; };