diff --git a/main.cpp b/main.cpp index fe580593..cc6e2c18 100644 --- a/main.cpp +++ b/main.cpp @@ -45,12 +45,14 @@ int main() { CONNECTU(PICout::Notifier::object(), finished, &a, pcf); PIString buffer = "my buff:"; PICout(&buffer, 1) << "int 10 ->" << 10 << ", time ->" << PITime::current();*/ - PIString s("str"); - piCout << s; - piCout << s.quoted(); - piCout << s.quoted(); - piCout << s.quote(); - piCout << s; + PISerial ser(PISerial::availableDevices(false)[0], PISerial::S115200); + piCout << ser.constructFullPath(); + piCout << ser.open(); + ser.startThreadedRead(); + FOREVER { + piCout << ser.isOpened(); + piMSleep(200); + } return 0; /*} diff --git a/src_main/io_devices/piserial.cpp b/src_main/io_devices/piserial.cpp index 4f0363be..f4d4652f 100755 --- a/src_main/io_devices/piserial.cpp +++ b/src_main/io_devices/piserial.cpp @@ -292,7 +292,7 @@ void PISerial::flush() { bool PISerial::closeDevice() { - if (isRunning()) { + if (isRunning() && !isStopping()) { stop(); PIThread::terminate(); } @@ -627,7 +627,13 @@ int PISerial::readDevice(void * read_to, int max_size) { //WaitCommEvent(PRIVATE->hCom, 0, 0); //piCoutObj << "read ..." << PRIVATE->hCom; ReadFile(PRIVATE->hCom, read_to, max_size, &PRIVATE->readed, 0); - //piCoutObj << "read ok" << PRIVATE->readed; + DWORD err = GetLastError(); + if (err == ERROR_BAD_COMMAND) { + PIThread::stop(false); + close(); + return 0; + } + //piCoutObj << "read" << (PRIVATE->readed) << errorString(); return PRIVATE->readed; #else if (!canRead()) return -1; diff --git a/src_main/io_utils/pipacketextractor.h b/src_main/io_utils/pipacketextractor.h index 3d6c1585..85b98b2e 100644 --- a/src_main/io_utils/pipacketextractor.h +++ b/src_main/io_utils/pipacketextractor.h @@ -118,6 +118,9 @@ public: // //! Returns pointer to \a missedPackets() count. Useful for output to PIConsole const ullong * missedPackets_ptr() const {return &missed_packets;} + void appendData(const void * d, int s) {threadedRead(const_cast((const uchar *)d), s);} + void appendData(const PIByteArray & data) {appendData(data.data(), data.size_s());} + EVENT2(packetReceived, uchar * , data, int, size) //! \events