/* * eth_ecat_buffer.cpp * * Created on: May 3, 2023 * Author: algin */ #include "ethernet_industry/eth_ecat_buffer.hpp" namespace free_rtos { namespace ecat_buffer { constexpr std::array EcatBufferSlave::sync_managers_; constexpr std::array EcatBufferSlave::fmmu_regs_; void EthEcatBuffer::init(uint16_t rx_eeprom_addr, uint16_t tx_eeprom_addr) { std::vector& slaves = ecat_.get_slaves(); eeprom::EEPROM& eeprom = ecat_.get_eeprom(); buffer_slaves_.reserve(slaves.size()); for(EcatSlave& slave : slaves) { buffer_slaves_.emplace_back(EcatBufferSlave{slave}); } for(EcatBufferSlave& buffer_slave : buffer_slaves_) { buffer_slave.read_buffer_info_from_eeprom(eeprom, rx_eeprom_addr, tx_eeprom_addr); } } void EthEcatBuffer::init_sync_manager(sync_manager sm_write, sync_manager sm_read) { datagram::EcatTelegram& telegram = ecat_.get_telegram(); for(EcatBufferSlave& buffer_slave : buffer_slaves_) { buffer_slave.init_sync_manager(telegram, sm_write, sm_read); } } void EthEcatBuffer::init_fmmu(fmmu fmmu_write, fmmu fmmu_read) { datagram::EcatTelegram& telegram = ecat_.get_telegram(); for(EcatBufferSlave& buffer_slave : buffer_slaves_) { buffer_slave.init_fmmu_write(telegram, fmmu_write, fmmu_global_properties_); } for(EcatBufferSlave& buffer_slave : buffer_slaves_) { buffer_slave.init_fmmu_read(telegram, fmmu_read, fmmu_global_properties_); } } } }