version 3.17.1

add PINonTriviallyCopyable struct
add PISerial check for error on Windows on every read()
This commit is contained in:
2024-04-10 20:49:27 +03:00
parent 1b67000887
commit a745f803b3
3 changed files with 23 additions and 3 deletions

View File

@@ -3,7 +3,7 @@ cmake_policy(SET CMP0017 NEW) # need include() with .cmake
project(PIP) project(PIP)
set(PIP_MAJOR 3) set(PIP_MAJOR 3)
set(PIP_MINOR 17) set(PIP_MINOR 17)
set(PIP_REVISION 0) set(PIP_REVISION 1)
set(PIP_SUFFIX ) set(PIP_SUFFIX )
set(PIP_COMPANY SHS) set(PIP_COMPANY SHS)
set(PIP_DOMAIN org.SHS) set(PIP_DOMAIN org.SHS)

View File

@@ -668,4 +668,18 @@ private:
}; };
//! \~\brief
//! \~english Inherit from this class to make your class non-trivially copyable.
//! \~russian Наследуйтесь от этого класса чтобы сделать свой класс нетривиально копируемым.
struct PIP_EXPORT PINonTriviallyCopyable {
PINonTriviallyCopyable() noexcept = default;
PINonTriviallyCopyable(const PINonTriviallyCopyable &) noexcept = default;
PINonTriviallyCopyable(PINonTriviallyCopyable &&) noexcept;
PINonTriviallyCopyable & operator=(const PINonTriviallyCopyable &) noexcept = default;
PINonTriviallyCopyable & operator=(PINonTriviallyCopyable &&) noexcept = default;
~PINonTriviallyCopyable() = default;
};
inline PINonTriviallyCopyable::PINonTriviallyCopyable(PINonTriviallyCopyable &&) noexcept = default;
#endif // PIBASE_H #endif // PIBASE_H

View File

@@ -868,6 +868,13 @@ ssize_t PISerial::readDevice(void * read_to, ssize_t max_size) {
if (!canRead()) return -1; if (!canRead()) return -1;
if (sending) return -1; if (sending) return -1;
// piCoutObj << "read ..." << PRIVATE->hCom << max_size; // piCoutObj << "read ..." << PRIVATE->hCom << max_size;
DWORD mask = 0;
if (GetCommMask(PRIVATE->hCom, &mask) == FALSE) {
piCoutObj << "read error" << errorString();
stop();
close();
return 0;
}
memset(&(PRIVATE->overlap), 0, sizeof(PRIVATE->overlap)); memset(&(PRIVATE->overlap), 0, sizeof(PRIVATE->overlap));
PRIVATE->overlap.hEvent = PRIVATE->event.getEvent(); PRIVATE->overlap.hEvent = PRIVATE->event.getEvent();
PRIVATE->readed = 0; PRIVATE->readed = 0;
@@ -885,8 +892,7 @@ ssize_t PISerial::readDevice(void * read_to, ssize_t max_size) {
GetOverlappedResult(PRIVATE->hCom, &(PRIVATE->overlap), &(PRIVATE->readed), FALSE); GetOverlappedResult(PRIVATE->hCom, &(PRIVATE->overlap), &(PRIVATE->readed), FALSE);
} else } else
return -1; return -1;
// piCoutObj << "read done" << PRIVATE->readed; // piCoutObj << "read" << (PRIVATE->readed) << errorString();
// piCoutObj << "read" << (PRIVATE->readed) << errorString();
return PRIVATE->readed; return PRIVATE->readed;
#else #else
if (!canRead()) return -1; if (!canRead()) return -1;