20#define MAX_FILE_SIZE 9000
21#define EC_MAX_OCTET_STRING_LENGTH 128
22#define DEFTYPE_ENUM_START 0x800u
23#define DEFTYPE_ENUM_END 0xFFFu
25class IghEthercatSlave;
30 explicit IghEthercatMaster(
Notifier ¬ifier, uint32_t master_id = 0);
31 ~IghEthercatMaster()
override;
38 size_t start()
override;
60 int32_t
execute(uint64_t pending_signals)
override;
81 std::list<VirtualDevice *>
get_slaves()
override;
103 std::variant<MotionMasterError, std::list<std::string>> get_file_list(
104 uint16_t absolute_slave_position);
114 std::variant<MotionMasterError, std::vector<uint8_t>> read_file(
115 uint16_t absolute_slave_position,
const std::string &file_name);
128 const std::string &file_name,
129 const std::vector<uint8_t> &content,
130 std::function<
void(uint8_t)> progress_callback);
141 const std::string &file_name);
154 int32_t write_sii(uint16_t absolute_slave_position,
155 const std::vector<uint8_t> &content);
164 static uint8_t get_slave_state(IghEthercatSlave &slave);
173 uint8_t get_slave_state(uint16_t absolute_slave_position);
186 bool request_slave_state_switch(IghEthercatSlave &slave, uint8_t al_state);
199 bool request_slave_state_switch(uint16_t absolute_slave_position,
212 bool set_slave_state(IghEthercatSlave &slave, uint8_t al_state);
224 bool set_slave_state(uint16_t absolute_slave_position, uint8_t al_state);
235 IghOdEntry::Error sdo_upload(IghOdEntry &od_entry,
bool blocking =
true);
245 IghOdEntry::Error sdo_download(IghOdEntry &od_entry,
bool blocking =
true);
249 ec_master_t *master_;
252 ec_domain_t *domain_ =
nullptr;
253 uint8_t *process_data_ =
nullptr;
254 std::vector<ec_pdo_entry_reg_t> domain_reg_;
257 ec_master_state_t master_state_{};
258 ec_domain_state_t domain_state_{};
262 std::map<uint16_t, std::unique_ptr<EthercatSlave>> slaveMap;
266 std::atomic_bool running_;
267 bool pdo_communication_possible_ =
false;
275 void update_master_state();
283 void update_all_slave_states();
313 std::tuple<uint16_t, uint16_t> init_slave(IghEthercatSlave &slave,
314 uint16_t absolute_slave_position,
315 uint16_t reference_alias,
316 uint16_t relative_position);
328 void setup_slave(IghEthercatSlave &slave);
337 void refresh_slave(IghEthercatSlave &slave);
346 void setup_default_pdos(IghEthercatSlave &slave);
355 void setup_pdos(IghEthercatSlave &slave);
365 static void setup_sdo_requests(IghEthercatSlave &slave, IghOdEntry &od_entry);
376 IghOdEntry::Error upload_via_sdo_request_blocking(IghOdEntry &od_entry);
387 static IghOdEntry::Error upload_via_sdo_request(IghOdEntry &od_entry);
396 static IghOdEntry::Error read_value_from_sdo_request(IghOdEntry &od_entry);
407 IghOdEntry::Error download_via_sdo_request_blocking(IghOdEntry &od_entry);
418 static IghOdEntry::Error download_via_sdo_request(IghOdEntry &od_entry);
427 static IghOdEntry::Error write_value_to_sdo_request(IghOdEntry &od_entry);
440 bool is_supported(IghEthercatSlave &slave);
447 void setup_od_entries(IghEthercatSlave &slave);
460 void config_detected_smm(IghEthercatSlave &slave);
467 static void setup_sync_managers(IghEthercatSlave &slave);
476 void cache_files(IghEthercatSlave &slave);
486 static void init_hardware_id(IghEthercatSlave &slave);
495 std::string get_ecat_foe_error_message(
int error_code);
505 const std::string &file_name);
516 std::variant<MotionMasterError, std::vector<uint8_t>> get_file_content(
517 uint16_t absolute_slave_position,
const std::string &file_name);
529 std::list<std::string> do_get_file_list(IghEthercatSlave &slave);
541 bool write_file_as_parts(uint16_t absolute_slave_position,
542 const std::string &file_name,
543 const std::vector<uint8_t> &content,
544 std::function<
void(uint8_t)> progress_callback);
557 int32_t set_file_content(uint16_t absolute_slave_position,
558 const std::string &file_name,
559 const std::vector<uint8_t> &content);
569 static std::list<std::string>
get_file_parts(std::list<std::string> file_list,
570 const std::string &file_name);
581 const std::string &file_name);
Definition: ethercat_master.h:9
virtual std::list< VirtualDevice * > get_slaves()=0
Get all of the available slaves.
virtual void stop()=0
Stop the EtherCAT master.
virtual size_t restart()=0
Restart the EtherCAT master.
virtual bool is_running()=0
Check if the EtherCAT master is currently running.
virtual bool disable_all_slaves()=0
Switch all slaves to PREOP.
virtual void abort_all_client_requests()=0
virtual size_t start()=0
Start the EtherCAT master.
virtual int32_t execute(uint64_t pending_signals)=0
Main EtherCAT master loop function to be executed at one millisecond interval.
virtual int get_slaves_responding()=0
Return the number of slaves actually responding on the bus.
Definition: motion_master_error.h:6
Definition: notifier.h:10
std::list< std::string > get_file_parts(std::list< std::string > file_list, const std::string &file_name)
Process the provided file list and find the file or its parts.
Definition: util.cc:1576