sitara_depot/components/free_rtos/ethernet_industry/eth_ecat_api.cpp

130 lines
2.9 KiB
C++
Raw Normal View History

/*
* eth_ecat_api.cpp
*
* Created on: May 29, 2023
* Author: algin
*/
#include "free_rtos/ethernet_industry/eth_ecat_api.hpp"
namespace free_rtos {
bool EthEcatApi::config_init(TEthMacPorts port_id, uint16_t address_base, uint32_t period_microsec, ecat_pdo_fmmu::ProcessCallback callback) {
bool status = false;
ecat_.Init(port_id, period_microsec);
status = ecat_.config_init(address_base);
if(status != true) {
DebugP_log((char*)"config_init() failed");
return status;
}
status = ecat_buffer_sdo_.init(ECT_SII_RXMBXADR, ECT_SII_TXMBXADR);
if(status != true) {
DebugP_log((char*)"ecat_buffer_sdo_.init() failed");
return status;
}
status = ecat_buffer_sdo_.init_sync_manager(sync_manager::SYNC_M0, sync_manager::SYNC_M1);
if(status != true) {
DebugP_log((char*)"ecat_buffer_sdo_.init_sync_manager() failed");
return status;
}
status = ecat_buffer_pdo_.init(ECT_PDOOUTPUTADR, ECT_PDOINPUTADR);
if(status != true) {
DebugP_log((char*)"ecat_buffer_pdo_.init() failed");
return status;
}
status = ecat_.enable_PDI();
if(status != true) {
DebugP_log((char*)"ecat_.enable_PDI() failed");
return status;
}
status = ecat_.init_to_preop();
if(status != true) {
DebugP_log((char*)"ecat_.init_to_preop() failed");
return status;
}
ecat_sdo_mailbox_.init();
status = ecat_sdo_mailbox_.read_pdo_map(ECT_RXPDOMAPINDEX, ECT_TXPDOMAPINDEX);
if(status != true) {
DebugP_log((char*)"ecat_sdo_mailbox_.read_pdo_map() failed");
return status;
}
// Override buffer properties from eeprom for PDO
#ifdef COMX
ecat_buffer_pdo_.set_buffer_offset(ecat_sdo_mailbox_.get_pdo_map());
#endif
ecat_buffer_pdo_.set_buffer_length(ecat_sdo_mailbox_.get_pdo_map());
status = ecat_buffer_pdo_.init_sync_manager(sync_manager::SYNC_M2, sync_manager::SYNC_M3);
if(status != true) {
DebugP_log((char*)"ecat_buffer_pdo_.init_sync_manager() failed");
return status;
}
status = ecat_buffer_pdo_.init_fmmu(fmmu::FMMU0, fmmu::FMMU1);
if(status != true) {
DebugP_log((char*)"ecat_buffer_pdo_.init_fmmu() failed");
return status;
}
ecat_pdo_fmmu_.init(callback);
status = ecat_.preop_to_safeop();
if(status != true) {
DebugP_log((char*)"ecat_.preop_to_safeop() failed");
return status;
}
status = ecat_.safeop_to_op();
if(status != true) {
DebugP_log((char*)"ecat_.safeop_to_op() failed");
return status;
}
return status;
}
void EthEcatApi::process() {
ecat_pdo_fmmu_.process();
}
void EthEcatApi::process_fake(uint32_t period_microsec, ecat_pdo_fmmu::ProcessCallback callback) {
ecat_pdo_fmmu_.process_fake(period_microsec, callback);
}
std::vector<ecat_buffer::PDOMap>& EthEcatApi::get_ecat_pdo_map() {
return ecat_sdo_mailbox_.get_pdo_map();
}
}