sitara_depot/components/free_rtos/ethernet_industry/eth_ecat_buffer.cpp

59 lines
1.7 KiB
C++

/*
* 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<SyncManager, 4> EcatBufferSlave::sync_managers_;
constexpr std::array<address::Offset, 4> EcatBufferSlave::fmmu_regs_;
void EthEcatBuffer::init(uint16_t rx_eeprom_addr, uint16_t tx_eeprom_addr) {
std::vector<EcatSlave>& 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_info_from_eeprom<command::FP>(eeprom);
}
*/
for(EcatBufferSlave& buffer_slave : buffer_slaves_) {
buffer_slave.read_buffer_info_from_eeprom<command::FP>(eeprom, rx_eeprom_addr, tx_eeprom_addr);
}
}
void EthEcatBuffer::init_sync_manager(sync_manager sm_write, sync_manager sm_read) {
telegram::EcatTelegram& telegram = ecat_.get_telegram();
for(EcatBufferSlave& buffer_slave : buffer_slaves_) {
buffer_slave.init_sync_manager<command::FP>(telegram, sm_write, sm_read);
}
}
void EthEcatBuffer::init_fmmu(fmmu fmmu_write, fmmu fmmu_read) {
telegram::EcatTelegram& telegram = ecat_.get_telegram();
for(EcatBufferSlave& buffer_slave : buffer_slaves_) {
buffer_slave.init_fmmu_write<command::FP>(telegram, fmmu_write, fmmu_global_properties_);
}
for(EcatBufferSlave& buffer_slave : buffer_slaves_) {
buffer_slave.init_fmmu_read<command::FP>(telegram, fmmu_read, fmmu_global_properties_);
}
}
}
}