diff --git a/src/console/piscreen.cpp b/src/console/piscreen.cpp index b2ae5ded..0793cb78 100644 --- a/src/console/piscreen.cpp +++ b/src/console/piscreen.cpp @@ -265,10 +265,10 @@ WORD PIScreen::SystemConsole::attributes(const PIScreenTypes::Cell & c) { case White: attr = attr | BACKGROUND_MASK; break; } if ((c.format.flags & Inverse) == Inverse) { - uchar f = c.format.flags & 0xFF; - c.format.flags &= 0xFFFFFF00; + uchar f = attr & 0xFF; + attr &= 0xFFFFFF00; f = (f << 4) | (f >> 4); - c.format.flags |= f; + attr |= f; } return attr; } diff --git a/src/io/piconnection.cpp b/src/io/piconnection.cpp index 7b8ca17c..b1e64d24 100755 --- a/src/io/piconnection.cpp +++ b/src/io/piconnection.cpp @@ -937,7 +937,7 @@ PIIODevice * PIConnection::DevicePool::addDevice(PIConnection * parent, const PI dd->rthread = 0; dd->started = false; } - dd->rthread = new PIThread(dd, threadReadDP); + dd->rthread = new PIThread(dd, __DevicePool_threadReadDP); dd->rthread->setName("__S__connection_" + fp + "_read_thread"); need_start = true; pmode |= PIIODevice::ReadOnly; @@ -1066,12 +1066,13 @@ void PIConnection::DevicePool::run() { } -void PIConnection::DevicePool::threadReadDP(void * ddp) { - DeviceData * dd((DeviceData * )ddp); +void __DevicePool_threadReadDP(void * ddp) { + PIConnection::DevicePool::DeviceData * dd((PIConnection::DevicePool::DeviceData * )ddp); if (dd->dev == 0) {piMSleep(100); return;} PIByteArray ba; ba = dd->dev->read(dd->dev->threadedReadBufferSize()); if (ba.isEmpty()) {piMSleep(10); return;} + dd->dev->threadedRead(ba.data(), ba.size_s()); //piCout << "Readed from" << dd->dev->path() << Hex << ba; __device_pool__->deviceReaded(dd, ba); } diff --git a/src/io/piconnection.h b/src/io/piconnection.h index 294b98e1..9b516fb3 100755 --- a/src/io/piconnection.h +++ b/src/io/piconnection.h @@ -284,6 +284,7 @@ public: class DevicePool: public PIThread { PIOBJECT_SUBCLASS(DevicePool, PIThread) + friend void __DevicePool_threadReadDP(void * ddp); friend class PIConnection; public: DevicePool(); @@ -309,7 +310,6 @@ public: void run(); - static void threadReadDP(void * ddp); void deviceReaded(DeviceData * dd, const PIByteArray & data); typedef PIMap::value_type DDPair; @@ -407,6 +407,8 @@ private: }; +void __DevicePool_threadReadDP(void * ddp); + extern PIConnection::DevicePool * __device_pool__; diff --git a/src/io/piiodevice.h b/src/io/piiodevice.h index b518436d..9a10688c 100755 --- a/src/io/piiodevice.h +++ b/src/io/piiodevice.h @@ -49,6 +49,7 @@ typedef bool (*ReadRetFunc)(void * , uchar * , int ); class PIP_EXPORT PIIODevice: public PIThread { PIOBJECT_SUBCLASS(PIIODevice, PIThread) + friend void __DevicePool_threadReadDP(void * ddp); public: //! Constructs a empty PIIODevice