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);
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

View File

@@ -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;
}

View File

@@ -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<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\"
//! \~russian Записывает значение последнего прочитанного чанка в \"v\"
template<typename T>