sitara_depot/components/free_rtos/ethernet_industry/eth_ecat_buffer.cpp

75 lines
2.1 KiB
C++
Raw Permalink Normal View History

/*
* 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_;
bool EthEcatBuffer::init(uint16_t rx_eeprom_addr, uint16_t tx_eeprom_addr) {
const datagram::TEcatWkc expected_wkc = 1;
std::vector<EcatSlave>& 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<command::FP>(eeprom);
}
*/
for(EcatBufferSlave& buffer_slave : buffer_slaves_) {
status = (status && buffer_slave.read_buffer_info_from_eeprom<command::FP>(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<command::FP>(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<command::FP>(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<command::FP>(telegram, expected_wkc, fmmu_read, fmmu_global_properties_));
}
return status;
}
}
}