more precise using PIIODevice::reading_now flag, Warning! one should use it manually now

small enum fix for pip_cmg
This commit is contained in:
2022-10-27 20:58:43 +03:00
parent 609ff8e9c8
commit e46cfdc4bd
11 changed files with 51 additions and 18 deletions

View File

@@ -798,7 +798,9 @@ ssize_t PISerial::readDevice(void * read_to, ssize_t max_size) {
if (sending) return -1;
// piCoutObj << "com event ...";
//piCoutObj << "read ..." << PRIVATE->hCom;
reading_now = true;
ReadFile(PRIVATE->hCom, read_to, max_size, &PRIVATE->readed, 0);
reading_now = false;
DWORD err = GetLastError();
//piCout << err;
if (err == ERROR_BAD_COMMAND || err == ERROR_ACCESS_DENIED) {
@@ -810,11 +812,13 @@ ssize_t PISerial::readDevice(void * read_to, ssize_t max_size) {
return PRIVATE->readed;
#else
if (!canRead()) return -1;
reading_now = true;
ssize_t ret = ::read(fd, read_to, max_size);
reading_now = false;
if (ret < 0) {
int err = errno;
if (err == EBADF || err == EFAULT || err == EINVAL || err == EIO) {
PIThread::stop(false);
softStopThreadedRead();
close();
return 0;
}