add PIChunkStream::getData(int id)

fix some COM on Windows
fix PIPacketExtractor
This commit is contained in:
2024-04-04 20:50:44 +03:00
parent ebf2b08bb1
commit 8d585439bb
3 changed files with 20 additions and 5 deletions

View File

@@ -770,11 +770,12 @@ void PISerial::applySettings() {
GetCommMask(PRIVATE->hCom, &PRIVATE->mask); GetCommMask(PRIVATE->hCom, &PRIVATE->mask);
SetCommMask(PRIVATE->hCom, EV_RXCHAR); SetCommMask(PRIVATE->hCom, EV_RXCHAR);
GetCommState(PRIVATE->hCom, &PRIVATE->sdesc); GetCommState(PRIVATE->hCom, &PRIVATE->sdesc);
// piCoutObj << PRIVATE->sdesc.fBinary << PRIVATE->sdesc.fAbortOnError << PRIVATE->sdesc.fDsrSensitivity << PRIVATE->sdesc.fDtrControl piCoutObj << PRIVATE->sdesc.fBinary << PRIVATE->sdesc.fAbortOnError << PRIVATE->sdesc.fDsrSensitivity << PRIVATE->sdesc.fDtrControl
//<< PRIVATE->sdesc.fDummy2 << PRIVATE->sdesc.fErrorChar; << PRIVATE->sdesc.fDummy2 << PRIVATE->sdesc.fErrorChar;
PRIVATE->desc = PRIVATE->sdesc; PRIVATE->desc = PRIVATE->sdesc;
PRIVATE->desc.DCBlength = sizeof(PRIVATE->desc); PRIVATE->desc.DCBlength = sizeof(PRIVATE->desc);
PRIVATE->desc.BaudRate = convertSpeed(outSpeed()); PRIVATE->desc.BaudRate = convertSpeed(outSpeed());
PRIVATE->desc.fDtrControl = DTR_CONTROL_ENABLE;
if (dataBitsCount() >= 5 && dataBitsCount() <= 8) if (dataBitsCount() >= 5 && dataBitsCount() <= 8)
PRIVATE->desc.ByteSize = dataBitsCount(); PRIVATE->desc.ByteSize = dataBitsCount();
else else

View File

@@ -307,6 +307,7 @@ PIString PIPacketExtractor::constructFullPathDevice() const {
bool PIPacketExtractor::openDevice() { bool PIPacketExtractor::openDevice() {
if (dev) { if (dev) {
if (!dev->isOpened()) return dev->open(); if (!dev->isOpened()) return dev->open();
return dev->isOpened();
} }
return false; return false;
} }
@@ -315,6 +316,7 @@ bool PIPacketExtractor::openDevice() {
bool PIPacketExtractor::closeDevice() { bool PIPacketExtractor::closeDevice() {
if (dev) { if (dev) {
if (dev->isOpened()) return dev->close(); if (dev->isOpened()) return dev->close();
return !dev->isOpened();
} }
return false; return false;
} }

View File

@@ -144,6 +144,18 @@ public:
return ret; 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<typename T>
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\" //! \~english Place value of last readed chunk into \"v\"
//! \~russian Записывает значение последнего прочитанного чанка в \"v\" //! \~russian Записывает значение последнего прочитанного чанка в \"v\"
template<typename T> template<typename T>