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();
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...};
auto future = promise.get_future();
mutex_write_.lock();
@ -90,12 +91,15 @@ public:
mutex_write_.unlock();
promise.get_future().get();
future.get(timeout_ticks);
return future.is_ready();
}
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...};
auto future = promise.get_future();
mutex_read_.lock();
@ -103,7 +107,9 @@ public:
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>
static void pdo_write(address::Offset offset, DataTypes&... data) {
get_ecat_pdo_fmmu().pdo_write<DataTypes...>(offset, data...);
static bool pdo_write(uint32_t timeout_ticks, address::Offset offset, DataTypes&... data) {
return get_ecat_pdo_fmmu().pdo_write<DataTypes...>(timeout_ticks, offset, data...);
}
template<typename... DataTypes>
static void pdo_read(address::Offset offset, DataTypes&... data) {
get_ecat_pdo_fmmu().pdo_read<DataTypes...>(offset, data...);
static bool pdo_read(uint32_t timeout_ticks, address::Offset offset, DataTypes&... data) {
return get_ecat_pdo_fmmu().pdo_read<DataTypes...>(timeout_ticks, offset, data...);
}
static void pdo_write_async(custom_promise::IPromise& promise) {

View File

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