Add write que to microcontroller to avoid overringing the mcu buffer while not stalling the applicaiton
This commit is contained in:
parent
24c168cf64
commit
34769049f9
2 changed files with 34 additions and 19 deletions
|
|
@ -1,8 +1,5 @@
|
|||
#include "microcontroller.h"
|
||||
|
||||
#include <chrono>
|
||||
#include <thread>
|
||||
|
||||
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__<<writeTimer.isActive();
|
||||
}
|
||||
|
||||
Microcontroller::~Microcontroller()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue