Safeguard against writing a wrong firmware to a different hardware version
This commit is contained in:
parent
0fd9d35a5d
commit
8ac9707242
@ -59,7 +59,7 @@ void FirmwareUpdateDialog::on_bStart_clicked()
|
|||||||
}
|
}
|
||||||
char header[24];
|
char header[24];
|
||||||
file->read(header, sizeof(header));
|
file->read(header, sizeof(header));
|
||||||
if(strncmp(header, "VNA!", 4)) {
|
if(strncmp(header, dev->getFirmwareMagicString().toStdString().c_str(), 4)) {
|
||||||
abortWithError("Invalid magic header constant");
|
abortWithError("Invalid magic header constant");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -108,6 +108,7 @@ LibreVNADriver::LibreVNADriver()
|
|||||||
connected = false;
|
connected = false;
|
||||||
skipOwnPacketHandling = false;
|
skipOwnPacketHandling = false;
|
||||||
SApoints = 0;
|
SApoints = 0;
|
||||||
|
hardwareVersion = 0;
|
||||||
setSynchronization(Synchronization::Disabled, false);
|
setSynchronization(Synchronization::Disabled, false);
|
||||||
|
|
||||||
auto manual = new QAction("Manual Control");
|
auto manual = new QAction("Manual Control");
|
||||||
@ -182,7 +183,7 @@ std::set<DeviceDriver::Flag> LibreVNADriver::getFlags()
|
|||||||
QString LibreVNADriver::getStatus()
|
QString LibreVNADriver::getStatus()
|
||||||
{
|
{
|
||||||
QString ret;
|
QString ret;
|
||||||
ret.append("HW Rev.");
|
ret.append("HW ");
|
||||||
ret.append(info.hardware_version);
|
ret.append(info.hardware_version);
|
||||||
ret.append(" FW "+info.firmware_version);
|
ret.append(" FW "+info.firmware_version);
|
||||||
ret.append(" Temps: "+QString::number(lastStatus.temp_source)+"°C/"+QString::number(lastStatus.temp_LO1)+"°C/"+QString::number(lastStatus.temp_MCU)+"°C");
|
ret.append(" Temps: "+QString::number(lastStatus.temp_source)+"°C/"+QString::number(lastStatus.temp_LO1)+"°C/"+QString::number(lastStatus.temp_MCU)+"°C");
|
||||||
@ -555,8 +556,9 @@ void LibreVNADriver::handleReceivedPacket(const Protocol::PacketInfo &packet)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hardwareVersion = packet.info.hardware_version;
|
||||||
info.firmware_version = QString::number(packet.info.FW_major)+"."+QString::number(packet.info.FW_minor)+"."+QString::number(packet.info.FW_patch);
|
info.firmware_version = QString::number(packet.info.FW_major)+"."+QString::number(packet.info.FW_minor)+"."+QString::number(packet.info.FW_patch);
|
||||||
info.hardware_version = QString::number(packet.info.hardware_version)+QString(packet.info.HW_Revision);
|
info.hardware_version = hardwareVersionToString(packet.info.hardware_version)+" Rev."+QString(packet.info.HW_Revision);
|
||||||
info.supportedFeatures = {
|
info.supportedFeatures = {
|
||||||
Feature::VNA, Feature::VNAFrequencySweep, Feature::VNALogSweep, Feature::VNAPowerSweep, Feature::VNAZeroSpan,
|
Feature::VNA, Feature::VNAFrequencySweep, Feature::VNALogSweep, Feature::VNAPowerSweep, Feature::VNAZeroSpan,
|
||||||
Feature::Generator,
|
Feature::Generator,
|
||||||
@ -658,11 +660,29 @@ void LibreVNADriver::updateIFFrequencies()
|
|||||||
SendPacket(p);
|
SendPacket(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString LibreVNADriver::hardwareVersionToString(uint8_t version)
|
||||||
|
{
|
||||||
|
switch(version) {
|
||||||
|
case 1: return "1";
|
||||||
|
case 255: return "PT";
|
||||||
|
default: return "Unknown";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
unsigned int LibreVNADriver::getMaxAmplitudePoints() const
|
unsigned int LibreVNADriver::getMaxAmplitudePoints() const
|
||||||
{
|
{
|
||||||
return limits_maxAmplitudePoints;
|
return limits_maxAmplitudePoints;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString LibreVNADriver::getFirmwareMagicString()
|
||||||
|
{
|
||||||
|
switch(hardwareVersion) {
|
||||||
|
case 1: return "VNA!";
|
||||||
|
case 255: return "VNPT";
|
||||||
|
default: return "XXXX";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool LibreVNADriver::sendWithoutPayload(Protocol::PacketType type, std::function<void(TransmissionResult)> cb)
|
bool LibreVNADriver::sendWithoutPayload(Protocol::PacketType type, std::function<void(TransmissionResult)> cb)
|
||||||
{
|
{
|
||||||
Protocol::PacketInfo p;
|
Protocol::PacketInfo p;
|
||||||
|
@ -182,6 +182,8 @@ public:
|
|||||||
|
|
||||||
unsigned int getMaxAmplitudePoints() const;
|
unsigned int getMaxAmplitudePoints() const;
|
||||||
|
|
||||||
|
QString getFirmwareMagicString();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void receivedAnswer(const LibreVNADriver::TransmissionResult &result);
|
void receivedAnswer(const LibreVNADriver::TransmissionResult &result);
|
||||||
void receivedPacket(const Protocol::PacketInfo& packet);
|
void receivedPacket(const Protocol::PacketInfo& packet);
|
||||||
@ -190,10 +192,12 @@ protected slots:
|
|||||||
void handleReceivedPacket(const Protocol::PacketInfo& packet);
|
void handleReceivedPacket(const Protocol::PacketInfo& packet);
|
||||||
protected:
|
protected:
|
||||||
void updateIFFrequencies();
|
void updateIFFrequencies();
|
||||||
|
QString hardwareVersionToString(uint8_t version);
|
||||||
|
|
||||||
bool connected;
|
bool connected;
|
||||||
QString serial;
|
QString serial;
|
||||||
Info info;
|
Info info;
|
||||||
|
uint8_t hardwareVersion;
|
||||||
unsigned int limits_maxAmplitudePoints;
|
unsigned int limits_maxAmplitudePoints;
|
||||||
|
|
||||||
Protocol::DeviceStatusV1 lastStatus;
|
Protocol::DeviceStatusV1 lastStatus;
|
||||||
|
Loading…
Reference in New Issue
Block a user