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];
|
||||
file->read(header, sizeof(header));
|
||||
if(strncmp(header, "VNA!", 4)) {
|
||||
if(strncmp(header, dev->getFirmwareMagicString().toStdString().c_str(), 4)) {
|
||||
abortWithError("Invalid magic header constant");
|
||||
return;
|
||||
}
|
||||
|
@ -108,6 +108,7 @@ LibreVNADriver::LibreVNADriver()
|
||||
connected = false;
|
||||
skipOwnPacketHandling = false;
|
||||
SApoints = 0;
|
||||
hardwareVersion = 0;
|
||||
setSynchronization(Synchronization::Disabled, false);
|
||||
|
||||
auto manual = new QAction("Manual Control");
|
||||
@ -182,7 +183,7 @@ std::set<DeviceDriver::Flag> LibreVNADriver::getFlags()
|
||||
QString LibreVNADriver::getStatus()
|
||||
{
|
||||
QString ret;
|
||||
ret.append("HW Rev.");
|
||||
ret.append("HW ");
|
||||
ret.append(info.hardware_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");
|
||||
@ -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.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 = {
|
||||
Feature::VNA, Feature::VNAFrequencySweep, Feature::VNALogSweep, Feature::VNAPowerSweep, Feature::VNAZeroSpan,
|
||||
Feature::Generator,
|
||||
@ -658,11 +660,29 @@ void LibreVNADriver::updateIFFrequencies()
|
||||
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
|
||||
{
|
||||
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)
|
||||
{
|
||||
Protocol::PacketInfo p;
|
||||
|
@ -182,6 +182,8 @@ public:
|
||||
|
||||
unsigned int getMaxAmplitudePoints() const;
|
||||
|
||||
QString getFirmwareMagicString();
|
||||
|
||||
signals:
|
||||
void receivedAnswer(const LibreVNADriver::TransmissionResult &result);
|
||||
void receivedPacket(const Protocol::PacketInfo& packet);
|
||||
@ -190,10 +192,12 @@ protected slots:
|
||||
void handleReceivedPacket(const Protocol::PacketInfo& packet);
|
||||
protected:
|
||||
void updateIFFrequencies();
|
||||
QString hardwareVersionToString(uint8_t version);
|
||||
|
||||
bool connected;
|
||||
QString serial;
|
||||
Info info;
|
||||
uint8_t hardwareVersion;
|
||||
unsigned int limits_maxAmplitudePoints;
|
||||
|
||||
Protocol::DeviceStatusV1 lastStatus;
|
||||
|
Loading…
Reference in New Issue
Block a user