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