Compare commits
No commits in common. "b8eaf8066fd84278abe92f8fab2357a1d2ad7f7e" and "b5d7d9ed63b154ec75dfdc999c646d0be6433c68" have entirely different histories.
b8eaf8066f
...
b5d7d9ed63
@ -13,7 +13,7 @@ namespace free_rtos {
|
||||
|
||||
namespace ecat_pdo_fmmu {
|
||||
|
||||
void EthEcatPdoFMMU::init(ProcessCallback callback) {
|
||||
void EthEcatPdoFMMU::init(custom_promise::IPromise *promise_read = nullptr, custom_promise::IPromise *promise_write = nullptr) {
|
||||
std::vector<ecat_buffer::EcatBufferSlave>& buffer_slaves = ecat_buffer_.get_buffer_slaves();
|
||||
|
||||
pdo_fmmu_slaves_.reserve(buffer_slaves.size());
|
||||
@ -22,7 +22,8 @@ void EthEcatPdoFMMU::init(ProcessCallback callback) {
|
||||
pdo_fmmu_slaves_.emplace_back(EcatPdoFMMUSlave{buffer_slave});
|
||||
}
|
||||
|
||||
callback_ = callback;
|
||||
promise_read_ = promise_read;
|
||||
promise_write_ = promise_write;
|
||||
}
|
||||
|
||||
void EthEcatPdoFMMU::wait_op() {
|
||||
@ -134,8 +135,12 @@ void EthEcatPdoFMMU::process() {
|
||||
|
||||
process_read_queue(pdo_read.data(), pdo_read.size());
|
||||
|
||||
if(callback_ != nullptr) {
|
||||
callback_();
|
||||
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());
|
||||
@ -146,7 +151,7 @@ void EthEcatPdoFMMU::process() {
|
||||
}
|
||||
}
|
||||
|
||||
void EthEcatPdoFMMU::process_fake(uint32_t period_microsec, ecat_pdo_fmmu::ProcessCallback callback) {
|
||||
void EthEcatPdoFMMU::process_fake(uint32_t period_microsec = 250, custom_promise::IPromise *promise_read = nullptr, custom_promise::IPromise *promise_write = nullptr) {
|
||||
std::vector<uint8_t> pdo_read(110, 0x00);
|
||||
std::vector<uint8_t> pdo_write(110, 0x00);
|
||||
free_rtos::Timer& ecat_timer = ecat_buffer_.get_ecat().get_ecat_timer();
|
||||
@ -169,8 +174,12 @@ void EthEcatPdoFMMU::process_fake(uint32_t period_microsec, ecat_pdo_fmmu::Proce
|
||||
|
||||
process_read_queue(pdo_read.data(), pdo_read.size());
|
||||
|
||||
if(callback != nullptr) {
|
||||
callback();
|
||||
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());
|
||||
|
||||
@ -18,8 +18,6 @@ namespace free_rtos {
|
||||
|
||||
namespace ecat_pdo_fmmu {
|
||||
|
||||
typedef void (*ProcessCallback)();
|
||||
|
||||
class EcatPdoFMMUSlave {
|
||||
public:
|
||||
EcatPdoFMMUSlave(ecat_buffer::EcatBufferSlave& buffer_slave)
|
||||
@ -52,11 +50,12 @@ 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(ProcessCallback callback = nullptr);
|
||||
void init(custom_promise::IPromise *promise_read, custom_promise::IPromise *promise_write);
|
||||
void process();
|
||||
void process_fake(uint32_t period_microsec = 250, ProcessCallback callback = nullptr);
|
||||
void process_fake(uint32_t period_microsec, custom_promise::IPromise *promise_read, custom_promise::IPromise *promise_write);
|
||||
|
||||
uint32_t get_pdo_counter() {
|
||||
return pdo_counter_;
|
||||
@ -122,7 +121,8 @@ private:
|
||||
queue::Queue<custom_promise::IPromise> queue_write_;
|
||||
queue::Queue<custom_promise::IPromise> queue_read_;
|
||||
|
||||
ProcessCallback callback_{nullptr};
|
||||
custom_promise::IPromise *promise_read_{nullptr};
|
||||
custom_promise::IPromise *promise_write_{nullptr};
|
||||
|
||||
uint32_t pdo_counter_{0};
|
||||
|
||||
@ -179,7 +179,6 @@ private:
|
||||
telegram.transfer(queue);
|
||||
} while(datagram_read.get_all_wkc() < 0x0001);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
} // namespace ecat_pdo_fmmu
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
|
||||
namespace free_rtos {
|
||||
|
||||
bool EthEcatApi::config_init(TEthMacPorts port_id, uint16_t address_base, uint32_t period_microsec, ecat_pdo_fmmu::ProcessCallback callback) {
|
||||
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) {
|
||||
bool status = false;
|
||||
|
||||
ecat_.Init(port_id, period_microsec);
|
||||
@ -41,7 +41,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(callback);
|
||||
ecat_pdo_fmmu_.init(pdo_promise_read, pdo_promise_write);
|
||||
|
||||
status = ecat_.preop_to_safeop();
|
||||
|
||||
@ -62,8 +62,8 @@ 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);
|
||||
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);
|
||||
}
|
||||
|
||||
std::vector<ecat_buffer::PDOMap>& EthEcatApi::get_ecat_pdo_map() {
|
||||
|
||||
@ -28,9 +28,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, ecat_pdo_fmmu::ProcessCallback callback = nullptr);
|
||||
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, ecat_pdo_fmmu::ProcessCallback callback = nullptr);
|
||||
void process_fake(uint32_t period_microsec = 250, custom_promise::IPromise *pdo_promise_read = nullptr, custom_promise::IPromise *pdo_promise_write = nullptr);
|
||||
std::vector<ecat_buffer::PDOMap>& get_ecat_pdo_map();
|
||||
|
||||
uint32_t get_pdo_counter() {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user