From d3d411ceea5c1a4716ad9c50ca0fa2337c6c81f9 Mon Sep 17 00:00:00 2001 From: algin Date: Wed, 26 Jul 2023 15:07:43 +0300 Subject: [PATCH] =?UTF-8?q?Revert=20"feat(UML-1666):=20=D0=94=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D1=80=D0=B5=D0=B3=D0=B8?= =?UTF-8?q?=D1=81=D1=82=D1=80=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D1=87=D0=B8=D0=BA=D0=B0=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D1=86=D0=B5=D1=81=D1=81=D0=B0"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit b5d7d9ed63b154ec75dfdc999c646d0be6433c68. --- .../CoE/eth_ecat_pdo_fmmu.cpp | 25 ++----------------- .../CoE/eth_ecat_pdo_fmmu.hpp | 11 +++----- .../ethernet_industry/eth_ecat_api.cpp | 18 ++++++++++--- .../ethernet_industry/eth_ecat_api.hpp | 16 +++++++++--- 4 files changed, 33 insertions(+), 37 deletions(-) diff --git a/components/free_rtos/ethernet_industry/CoE/eth_ecat_pdo_fmmu.cpp b/components/free_rtos/ethernet_industry/CoE/eth_ecat_pdo_fmmu.cpp index b336a50..42d8079 100644 --- a/components/free_rtos/ethernet_industry/CoE/eth_ecat_pdo_fmmu.cpp +++ b/components/free_rtos/ethernet_industry/CoE/eth_ecat_pdo_fmmu.cpp @@ -13,7 +13,7 @@ namespace free_rtos { namespace ecat_pdo_fmmu { -void EthEcatPdoFMMU::init(custom_promise::IPromise *promise_read = nullptr, custom_promise::IPromise *promise_write = nullptr) { +void EthEcatPdoFMMU::init() { std::vector& buffer_slaves = ecat_buffer_.get_buffer_slaves(); pdo_fmmu_slaves_.reserve(buffer_slaves.size()); @@ -21,9 +21,6 @@ void EthEcatPdoFMMU::init(custom_promise::IPromise *promise_read = nullptr, cust for(ecat_buffer::EcatBufferSlave& buffer_slave : buffer_slaves) { pdo_fmmu_slaves_.emplace_back(EcatPdoFMMUSlave{buffer_slave}); } - - promise_read_ = promise_read; - promise_write_ = promise_write; } void EthEcatPdoFMMU::wait_op() { @@ -134,15 +131,6 @@ void EthEcatPdoFMMU::process() { //read(0, process_data); process_read_queue(pdo_read.data(), pdo_read.size()); - - if(promise_read_ != nullptr) { - promise_read_->set_value(pdo_read.data(), pdo_read.size()); - } - - if(promise_write_ != nullptr) { - promise_write_->set_value(pdo_write.data(), pdo_write.size()); - } - process_write_queue(pdo_write.data(), pdo_write.size()); //write(0, process_data); @@ -151,7 +139,7 @@ void EthEcatPdoFMMU::process() { } } -void EthEcatPdoFMMU::process_fake(uint32_t period_microsec = 250, custom_promise::IPromise *promise_read = nullptr, custom_promise::IPromise *promise_write = nullptr) { +void EthEcatPdoFMMU::process_fake(uint32_t period_microsec = 250) { std::vector pdo_read(110, 0x00); std::vector pdo_write(110, 0x00); free_rtos::Timer& ecat_timer = ecat_buffer_.get_ecat().get_ecat_timer(); @@ -173,15 +161,6 @@ void EthEcatPdoFMMU::process_fake(uint32_t period_microsec = 250, custom_promise //DebugP_log("Tick !\r\n"); process_read_queue(pdo_read.data(), pdo_read.size()); - - if(promise_read != nullptr) { - promise_read->set_value(pdo_read.data(), pdo_read.size()); - } - - if(promise_write != nullptr) { - promise_write->set_value(pdo_write.data(), pdo_write.size()); - } - process_write_queue(pdo_write.data(), pdo_write.size()); pdo_counter_++; diff --git a/components/free_rtos/ethernet_industry/CoE/eth_ecat_pdo_fmmu.hpp b/components/free_rtos/ethernet_industry/CoE/eth_ecat_pdo_fmmu.hpp index 9ee116d..d0d3c29 100644 --- a/components/free_rtos/ethernet_industry/CoE/eth_ecat_pdo_fmmu.hpp +++ b/components/free_rtos/ethernet_industry/CoE/eth_ecat_pdo_fmmu.hpp @@ -50,12 +50,11 @@ private: class EthEcatPdoFMMU { public: - EthEcatPdoFMMU(ecat_buffer::EthEcatBuffer& ecat_buffer) - : ecat_buffer_{ecat_buffer} { } + EthEcatPdoFMMU(ecat_buffer::EthEcatBuffer& ecat_buffer): ecat_buffer_{ecat_buffer} { } - void init(custom_promise::IPromise *promise_read, custom_promise::IPromise *promise_write); + void init(); void process(); - void process_fake(uint32_t period_microsec, custom_promise::IPromise *promise_read, custom_promise::IPromise *promise_write); + void process_fake(uint32_t period_microsec); uint32_t get_pdo_counter() { return pdo_counter_; @@ -121,9 +120,6 @@ private: queue::Queue queue_write_; queue::Queue queue_read_; - custom_promise::IPromise *promise_read_{nullptr}; - custom_promise::IPromise *promise_write_{nullptr}; - uint32_t pdo_counter_{0}; void wait_op(); @@ -179,6 +175,7 @@ private: telegram.transfer(queue); } while(datagram_read.get_all_wkc() < 0x0001); } + }; } // namespace ecat_pdo_fmmu diff --git a/components/free_rtos/ethernet_industry/eth_ecat_api.cpp b/components/free_rtos/ethernet_industry/eth_ecat_api.cpp index 3cbefed..4d50bdd 100644 --- a/components/free_rtos/ethernet_industry/eth_ecat_api.cpp +++ b/components/free_rtos/ethernet_industry/eth_ecat_api.cpp @@ -9,7 +9,17 @@ namespace free_rtos { -bool EthEcatApi::config_init(TEthMacPorts port_id, uint16_t address_base, uint32_t period_microsec, custom_promise::IPromise *pdo_promise_read, custom_promise::IPromise *pdo_promise_write) { +/* + * Порядок инициализации: + * Инициализировать и открыть драйвер eth_.Init(...), eth_.Open() + * Создать служебный поток ecat_task_.Create(...) с вызовом EthEcatApi::process() + * Вызвать EthEcatApi::config_init(...) + * Создать пользовательский поток ecat_task_pdo_.Create(...) + * Для чтения/записи данных в пользовательском потоке вызвать + * pdo_write(...), pdo_read(...) или pdo_write_async(...), pdo_read_async(...) + */ + +bool EthEcatApi::config_init(TEthMacPorts port_id, uint16_t address_base, uint32_t period_microsec = 250) { bool status = false; ecat_.Init(port_id, period_microsec); @@ -41,7 +51,7 @@ bool EthEcatApi::config_init(TEthMacPorts port_id, uint16_t address_base, uint32 ecat_buffer_pdo_.init_sync_manager(sync_manager::SYNC_M2, sync_manager::SYNC_M3); ecat_buffer_pdo_.init_fmmu(fmmu::FMMU0, fmmu::FMMU1); - ecat_pdo_fmmu_.init(pdo_promise_read, pdo_promise_write); + ecat_pdo_fmmu_.init(); status = ecat_.preop_to_safeop(); @@ -62,8 +72,8 @@ void EthEcatApi::process() { ecat_pdo_fmmu_.process(); } -void EthEcatApi::process_fake(uint32_t period_microsec, custom_promise::IPromise *pdo_promise_read, custom_promise::IPromise *pdo_promise_write) { - ecat_pdo_fmmu_.process_fake(period_microsec, pdo_promise_read, pdo_promise_write); +void EthEcatApi::process_fake(uint32_t period_microsec = 250) { + ecat_pdo_fmmu_.process_fake(period_microsec); } std::vector& EthEcatApi::get_ecat_pdo_map() { diff --git a/components/free_rtos/ethernet_industry/eth_ecat_api.hpp b/components/free_rtos/ethernet_industry/eth_ecat_api.hpp index 49dba62..6b6f9ad 100644 --- a/components/free_rtos/ethernet_industry/eth_ecat_api.hpp +++ b/components/free_rtos/ethernet_industry/eth_ecat_api.hpp @@ -18,6 +18,16 @@ namespace free_rtos { +/* + * Порядок инициализации: + * Инициализировать и открыть драйвер eth_.Init(...), eth_.Open() + * Создать служебный поток ecat_task_.Create(...) с вызовом EthEcatApi::process() + * Вызвать EthEcatApi::config_init(...) + * Создать пользовательский поток ecat_task_pdo_.Create(...) + * Для чтения/записи данных в пользовательском потоке вызвать + * pdo_write(...), pdo_read(...) или pdo_write_async(...), pdo_read_async(...) + */ + class EthEcatApi { public: EthEcatApi(Eth *eth) @@ -28,9 +38,9 @@ public: , ecat_sdo_mailbox_{ecat_buffer_sdo_} , ecat_pdo_fmmu_{ecat_buffer_pdo_} { } - bool config_init(TEthMacPorts port_id, uint16_t address_base, uint32_t period_microsec = 250, custom_promise::IPromise *pdo_promise_read = nullptr, custom_promise::IPromise *pdo_promise_write = nullptr); - void process(); - void process_fake(uint32_t period_microsec = 250, custom_promise::IPromise *pdo_promise_read = nullptr, custom_promise::IPromise *pdo_promise_write = nullptr); + bool config_init(TEthMacPorts port_id, uint16_t address_base, uint32_t period_microsec); + void process(); // Внутри бесконечный цикл. Запускать в отдельном потоке + void process_fake(uint32_t period_microsec); std::vector& get_ecat_pdo_map(); uint32_t get_pdo_counter() {