/* * 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\r\n"); return status; } status = ecat_buffer_sdo_.init(ECT_SII_RXMBXADR, ECT_SII_TXMBXADR); if(status != true) { DebugP_log((char*)"ecat_buffer_sdo_.init() failed\r\n"); 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\r\n"); return status; } status = ecat_buffer_pdo_.init(ECT_PDOOUTPUTADR, ECT_PDOINPUTADR); if(status != true) { DebugP_log((char*)"ecat_buffer_pdo_.init() failed\r\n"); return status; } status = ecat_.enable_PDI(); if(status != true) { DebugP_log((char*)"ecat_.enable_PDI() failed\r\n"); return status; } status = ecat_.init_to_preop(); if(status != true) { DebugP_log((char*)"ecat_.init_to_preop() failed\r\n"); 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\r\n"); 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\r\n"); return status; } status = ecat_buffer_pdo_.init_fmmu(fmmu::FMMU0, fmmu::FMMU1); if(status != true) { DebugP_log((char*)"ecat_buffer_pdo_.init_fmmu() failed\r\n"); return status; } ecat_pdo_fmmu_.init(callback); status = ecat_.preop_to_safeop(); if(status != true) { DebugP_log((char*)"ecat_.preop_to_safeop() failed\r\n"); return status; } status = ecat_.safeop_to_op(); if(status != true) { DebugP_log((char*)"ecat_.safeop_to_op() failed\r\n"); return status; } return status; } std::vector& EthEcatApi::get_ecat_pdo_map() { return ecat_sdo_mailbox_.get_pdo_map(); } }