From 8d585439bbffb8642282c25e20acbd5b0befe107 Mon Sep 17 00:00:00 2001 From: peri4 Date: Thu, 4 Apr 2024 20:50:44 +0300 Subject: [PATCH] add PIChunkStream::getData(int id) fix some COM on Windows fix PIPacketExtractor --- libs/main/io_devices/piserial.cpp | 11 ++++++----- libs/main/io_utils/pipacketextractor.cpp | 2 ++ libs/main/serialization/pichunkstream.h | 12 ++++++++++++ 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/libs/main/io_devices/piserial.cpp b/libs/main/io_devices/piserial.cpp index 1f7c62de..faf606ad 100644 --- a/libs/main/io_devices/piserial.cpp +++ b/libs/main/io_devices/piserial.cpp @@ -770,11 +770,12 @@ void PISerial::applySettings() { GetCommMask(PRIVATE->hCom, &PRIVATE->mask); SetCommMask(PRIVATE->hCom, EV_RXCHAR); GetCommState(PRIVATE->hCom, &PRIVATE->sdesc); - // piCoutObj << PRIVATE->sdesc.fBinary << PRIVATE->sdesc.fAbortOnError << PRIVATE->sdesc.fDsrSensitivity << PRIVATE->sdesc.fDtrControl - //<< PRIVATE->sdesc.fDummy2 << PRIVATE->sdesc.fErrorChar; - PRIVATE->desc = PRIVATE->sdesc; - PRIVATE->desc.DCBlength = sizeof(PRIVATE->desc); - PRIVATE->desc.BaudRate = convertSpeed(outSpeed()); + piCoutObj << PRIVATE->sdesc.fBinary << PRIVATE->sdesc.fAbortOnError << PRIVATE->sdesc.fDsrSensitivity << PRIVATE->sdesc.fDtrControl + << PRIVATE->sdesc.fDummy2 << PRIVATE->sdesc.fErrorChar; + PRIVATE->desc = PRIVATE->sdesc; + PRIVATE->desc.DCBlength = sizeof(PRIVATE->desc); + PRIVATE->desc.BaudRate = convertSpeed(outSpeed()); + PRIVATE->desc.fDtrControl = DTR_CONTROL_ENABLE; if (dataBitsCount() >= 5 && dataBitsCount() <= 8) PRIVATE->desc.ByteSize = dataBitsCount(); else diff --git a/libs/main/io_utils/pipacketextractor.cpp b/libs/main/io_utils/pipacketextractor.cpp index 0518128b..e875e937 100644 --- a/libs/main/io_utils/pipacketextractor.cpp +++ b/libs/main/io_utils/pipacketextractor.cpp @@ -307,6 +307,7 @@ PIString PIPacketExtractor::constructFullPathDevice() const { bool PIPacketExtractor::openDevice() { if (dev) { if (!dev->isOpened()) return dev->open(); + return dev->isOpened(); } return false; } @@ -315,6 +316,7 @@ bool PIPacketExtractor::openDevice() { bool PIPacketExtractor::closeDevice() { if (dev) { if (dev->isOpened()) return dev->close(); + return !dev->isOpened(); } return false; } diff --git a/libs/main/serialization/pichunkstream.h b/libs/main/serialization/pichunkstream.h index 8da86ed1..4e7373c7 100644 --- a/libs/main/serialization/pichunkstream.h +++ b/libs/main/serialization/pichunkstream.h @@ -144,6 +144,18 @@ public: return ret; } + //! \~english Returns value of chunk with ID \"id\". You should call \a readAll() before using this function! + //! \~russian Возвращает значение чанка с ID \"id\". Необходимо вызвать \a readAll() перед использованием этого метода! + template + T getData(int id) const { + T ret{}; + CacheEntry pos = data_map.value(id); + if (pos.start < 0 || pos.length == 0) return ret; + PIByteArray ba(data_->data(pos.start), pos.length); + if (!ba.isEmpty()) ba >> ret; + return ret; + } + //! \~english Place value of last readed chunk into \"v\" //! \~russian Записывает значение последнего прочитанного чанка в \"v\" template