migrate to async IO model

new PIIODevice::interrupt() virtual method
new PIWaitEvent private class
PIEthernet and PISerial basically tested on Windows and Linux
This commit is contained in:
2022-11-05 23:43:07 +03:00
parent e48d0ebaab
commit 8a5e72c723
15 changed files with 498 additions and 209 deletions

View File

@@ -90,19 +90,17 @@ public:
//! \~english Information about serial device
//! \~russian Информация о последовательном устройстве
struct PIP_EXPORT DeviceInfo {
DeviceInfo();
//! \~english Returns string representation of USB ID in format "xxxx:xxxx" (vID:pID)
//! \~russian Возвращает строковое представление USB ID в формате "xxxx:xxxx" (vID:pID)
PIString id() const;
//! \~english USB Vendor ID
//! \~russian USB Vendor ID
uint vID;
uint vID = 0;
//! \~english USB Product ID
//! \~russian USB Product ID
uint pID;
uint pID = 0;
//! \~english Path to device, e.g. "COM2" or "/dev/ttyUSB0"
//! \~russian Путь к устройству, например "COM2" или "/dev/ttyUSB0"
@@ -240,6 +238,8 @@ public:
//! \~russian Пишет в порт байтовый массив "data". Возвращает если количество записанных байт = размер "data"
bool send(const PIByteArray & data) {return send(data.data(), data.size_s());}
void interrupt() override;
//! \~english Returns all available speeds for serial devices
//! \~russian Возвращает все возможные скорости для устройств
static PIVector<int> availableSpeeds();
@@ -310,8 +310,8 @@ protected:
bool closeDevice() override;
PRIVATE_DECLARATION(PIP_EXPORT)
int fd, vtime;
bool sending;
int fd = -1, vtime = 10;
std::atomic_bool sending;
PITimeMeasurer tm_;
};