15 #ifndef ETHERCAT_INTERFACE__EC_MASTER_HPP_
16 #define ETHERCAT_INTERFACE__EC_MASTER_HPP_
52 virtual void update(uint32_t domain = 0);
60 virtual void stop() {running_ =
false;}
85 interval_ = 1000000000.0 / frequency;
95 volatile bool running_ =
false;
98 std::chrono::time_point<std::chrono::system_clock> start_t_, curr_t_;
104 void registerPDOInDomain(
105 uint16_t alias, uint16_t position,
106 std::vector<uint32_t> & channel_indices,
107 DomainInfo * domain_info,
111 void checkDomainState(uint32_t domain);
114 void checkMasterState();
117 void checkSlaveStates();
120 static void printWarning(
const std::string & message);
123 ec_master_t * master_ = NULL;
124 ec_master_state_t master_state_ = {};
129 explicit DomainInfo(ec_master_t * master);
132 ec_domain_t * domain = NULL;
133 ec_domain_state_t domain_state = {};
134 uint8_t * domain_pd = NULL;
138 std::vector<ec_pdo_entry_reg_t> domain_regs;
149 std::vector<Entry> entries;
153 std::map<uint32_t, DomainInfo *> domain_info_;
159 ec_slave_config_t * config = NULL;
160 ec_slave_config_state_t config_state = {0};
163 std::vector<SlaveInfo> slave_info_;
166 uint64_t update_counter_ = 0;
170 uint32_t check_state_frequency_ = 10;
Definition: ec_master.hpp:32
virtual uint64_t elapsedCycles()
void readData(uint32_t domain=0)
virtual double elapsedTime()
static void setCtrlCHandler(SIMPLECAT_EXIT_CALLBACK user_callback=NULL)
virtual void update(uint32_t domain=0)
void(* SIMPLECAT_CONTRL_CALLBACK)(void)
Definition: ec_master.hpp:56
static void setThreadRealTime()
void writeData(uint32_t domain=0)
int configSlaveSdo(uint16_t slave_position, SdoConfigEntry sdo_config, uint32_t *abort_code)
configure slave using SDO
EcMaster(const int master=0)
void setCtrlFrequency(double frequency)
Definition: ec_master.hpp:83
void(* SIMPLECAT_EXIT_CALLBACK)(int)
Definition: ec_master.hpp:71
virtual void run(SIMPLECAT_CONTRL_CALLBACK user_callback)
static void setThreadHighPriority()
virtual void stop()
Definition: ec_master.hpp:60
void addSlave(uint16_t alias, uint16_t position, EcSlave *slave)
add a slave device to the master alias and position can be found by running the following command /op...
uint32_t getInterval()
Definition: ec_master.hpp:88
Definition: ec_slave.hpp:32
Definition: ec_sdo_manager.hpp:31
Definition: ec_master.hpp:29
Definition: ec_master.hpp:142
uint32_t * offset
Definition: ec_master.hpp:145
uint32_t * bit_position
Definition: ec_master.hpp:146
int num_pdos
Definition: ec_master.hpp:144
EcSlave * slave
Definition: ec_master.hpp:143