Bugfixes and improvements for new hardware

This commit is contained in:
Jan Käberich 2020-09-14 23:13:32 +02:00
parent 7d9d5e27eb
commit 4cbd60e62d
33 changed files with 747 additions and 193 deletions

View file

@ -357,9 +357,11 @@ void Device::ReceivedData()
break;
case Protocol::PacketType::Ack:
emit AckReceived();
// transmissionFinished(TransmissionResult::Ack);
break;
case Protocol::PacketType::Nack:
emit NackReceived();
// transmissionFinished(TransmissionResult::Nack);
break;
default:
break;
@ -389,7 +391,7 @@ QString Device::serial() const
void Device::startNextTransmission()
{
if(transmissionQueue.empty() || !m_connected) {
if(transmissionQueue.isEmpty() || !m_connected) {
// nothing more to transmit
transmissionActive = false;
return;
@ -416,9 +418,13 @@ void Device::transmissionFinished(TransmissionResult result)
{
transmissionTimer.stop();
// remove transmitted packet
auto t = transmissionQueue.dequeue();
if(t.callback) {
t.callback(result);
if(!transmissionQueue.isEmpty()) {
auto t = transmissionQueue.dequeue();
if(t.callback) {
t.callback(result);
}
startNextTransmission();
} else {
transmissionActive = false;
}
startNextTransmission();
}

View file

@ -57,6 +57,7 @@ void FirmwareUpdateDialog::on_bStart_clicked()
abortWithError("Invalid magic header constant");
return;
}
file->seek(0);
state = State::ErasingFLASH;
connect(dev, &Device::AckReceived, this, &FirmwareUpdateDialog::receivedAck);
connect(dev, &Device::NackReceived, this, &FirmwareUpdateDialog::receivedNack);
@ -73,6 +74,7 @@ void FirmwareUpdateDialog::addStatus(QString line)
void FirmwareUpdateDialog::abortWithError(QString error)
{
timer.stop();
disconnect(dev, &Device::AckReceived, this, &FirmwareUpdateDialog::receivedAck);
disconnect(dev, &Device::NackReceived, this, &FirmwareUpdateDialog::receivedNack);
@ -129,9 +131,10 @@ void FirmwareUpdateDialog::receivedAck()
state = State::TriggeringUpdate;
dev->SendCommandWithoutPayload(Protocol::PacketType::PerformFirmwareUpdate);
timer.start(5000);
} else {
sendNextFirmwareChunk();
timer.start(1000);
}
sendNextFirmwareChunk();
timer.start(1000);
break;
case State::TriggeringUpdate:
addStatus("Rebooting device...");
@ -149,7 +152,15 @@ void FirmwareUpdateDialog::receivedAck()
void FirmwareUpdateDialog::receivedNack()
{
abortWithError("Nack received, device does not support firmware update");
switch(state) {
case State::ErasingFLASH:
abortWithError("Nack received, device does not support firmware update");
break;
default:
abortWithError("Nack received, something went wrong");
break;
}
}
void FirmwareUpdateDialog::sendNextFirmwareChunk()