feat(UML-1493): Добавил таймаут чтения записи PDO

This commit is contained in:
algin 2023-06-08 12:51:15 +03:00
parent af754ca3d2
commit ac6e7845ad
3 changed files with 16 additions and 10 deletions

View File

@ -81,8 +81,9 @@ public:
void process(); void process();
template<typename... DataTypes> template<typename... DataTypes>
void pdo_write(address::Offset offset, DataTypes&... data) { bool pdo_write(uint32_t timeout_ticks, address::Offset offset, DataTypes&... data) {
custom_promise::WritePromise<DataTypes...> promise{offset, data...}; custom_promise::WritePromise<DataTypes...> promise{offset, data...};
auto future = promise.get_future();
mutex_write_.lock(); mutex_write_.lock();
@ -90,12 +91,15 @@ public:
mutex_write_.unlock(); mutex_write_.unlock();
promise.get_future().get(); future.get(timeout_ticks);
return future.is_ready();
} }
template<typename... DataTypes> template<typename... DataTypes>
void pdo_read(address::Offset offset, DataTypes&... data) { bool pdo_read(uint32_t timeout_ticks, address::Offset offset, DataTypes&... data) {
custom_promise::ReadPromise<DataTypes...> promise{offset, data...}; custom_promise::ReadPromise<DataTypes...> promise{offset, data...};
auto future = promise.get_future();
mutex_read_.lock(); mutex_read_.lock();
@ -103,7 +107,9 @@ public:
mutex_read_.unlock(); mutex_read_.unlock();
promise.get_future().get(); future.get(timeout_ticks);
return future.is_ready();
} }

View File

@ -37,13 +37,13 @@ public:
} }
template<typename... DataTypes> template<typename... DataTypes>
static void pdo_write(address::Offset offset, DataTypes&... data) { static bool pdo_write(uint32_t timeout_ticks, address::Offset offset, DataTypes&... data) {
get_ecat_pdo_fmmu().pdo_write<DataTypes...>(offset, data...); return get_ecat_pdo_fmmu().pdo_write<DataTypes...>(timeout_ticks, offset, data...);
} }
template<typename... DataTypes> template<typename... DataTypes>
static void pdo_read(address::Offset offset, DataTypes&... data) { static bool pdo_read(uint32_t timeout_ticks, address::Offset offset, DataTypes&... data) {
get_ecat_pdo_fmmu().pdo_read<DataTypes...>(offset, data...); return get_ecat_pdo_fmmu().pdo_read<DataTypes...>(timeout_ticks, offset, data...);
} }
static void pdo_write_async(custom_promise::IPromise& promise) { static void pdo_write_async(custom_promise::IPromise& promise) {

View File

@ -80,9 +80,9 @@ public:
return ready_; return ready_;
} }
custom_tuple<DataTypes&...> get() { custom_tuple<DataTypes&...> get(uint32_t timeout_ticks = SystemP_WAIT_FOREVER) {
ready_ = false; ready_ = false;
sem_.pend(); sem_.pend(timeout_ticks);
return data_tuple_; return data_tuple_;
} }