diff --git a/src/microcontroller.cpp b/src/microcontroller.cpp index 340bc6e..0bf8690 100644 --- a/src/microcontroller.cpp +++ b/src/microcontroller.cpp @@ -1,8 +1,5 @@ #include "microcontroller.h" -#include -#include - void Microcontroller::relayToggle(int state, int relay) { char buffer[8]; @@ -49,22 +46,34 @@ void Microcontroller::setAuxPwm(int duty) void Microcontroller::write(const QByteArray& buffer) { - if(_port != nullptr) + writeQue.enqueue(buffer); + if(!writeTimer.isActive()) { - _port->write(buffer); - _port->waitForBytesWritten(1000); + writeTimer.setInterval(0); + writeTimer.start(); } - std::this_thread::sleep_for(std::chrono::milliseconds(40)); } void Microcontroller::write(char* buffer, const size_t length) { - if(_port != nullptr) + write(QByteArray(buffer, length)); +} + +void Microcontroller::onWriteTimerTimeout() +{ + writeTimer.setInterval(50); + if(connected()) { - _port->write(buffer, length); - _port->waitForBytesWritten(1000); + if(!writeQue.empty()) + { + QByteArray data = writeQue.dequeue(); + _port->write(data); + } + else + { + writeTimer.stop(); + } } - std::this_thread::sleep_for(std::chrono::milliseconds(40)); } void Microcontroller::setPattern(int pattern) @@ -82,8 +91,10 @@ void Microcontroller::startSunrise() bool Microcontroller::connected() { - if(_port != nullptr) return _port->isOpen(); - else return false; + if(_port != nullptr) + return _port->isOpen(); + else + return false; } void Microcontroller::refresh() @@ -93,13 +104,17 @@ void Microcontroller::refresh() //housekeeping -Microcontroller::Microcontroller(QIODevice* port) +Microcontroller::Microcontroller(QIODevice* port): Microcontroller() { setIODevice(port); } Microcontroller::Microcontroller() { + writeTimer.setInterval(50); + writeTimer.setSingleShot(false); + connect(&writeTimer, &QTimer::timeout, this, &Microcontroller::onWriteTimerTimeout); + qDebug()<<__func__< #include #include -#include #include -#include +#include +#include #include #include #include "items/item.h" @@ -32,13 +32,12 @@ private: bool listMode = false; - //uint8_t _auxState = 0; - QIODevice* _port = nullptr; + QQueue writeQue; + QTimer writeTimer; std::vector< std::shared_ptr > relayList; - QScopedPointer loop; QString _buffer; void processMicroReturn(); @@ -75,6 +74,7 @@ public slots: private slots: void isReadyRead(); + void onWriteTimerTimeout(); signals: void textRecived(const QString string);