59 lines
1.7 KiB
C++
59 lines
1.7 KiB
C++
/*
|
|
* 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<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_);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
}
|