view o3pack.cpp @ 2:177f640940f2

Update exception class and cleanup redifinitions During firmware download and exception caused the application to stop. Rootcause was the defference between QT5 and QT6 exception and string handling which is updated now. In addition some old definitions were removed to avoid compiler warnings.
author Ideenmodellierer
date Fri, 28 Nov 2025 19:57:35 +0100
parents 0b3630a29ad8
children
line wrap: on
line source

#include <QApplication>
#include <QDir>
#include <QProgressBar>
#include <QProgressDialog>
#include <QtDebug>

#include "HexFile.h"

//////////////////////////////////////////////////////////////////////////////
static unsigned char frogSecretKey[16] = {
    111, 85, 190, 69,
    108,254, 242, 19,
    231, 49, 248,255,
    233, 48, 176,241
};
static unsigned char ostc3SecretKey[16] = {
    241,233, 176, 48,
     69,111, 190, 85,
    255,231, 248, 49,
     19,108, 242,254
};

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    app.processEvents();

    //---- Parse parameters --------------------------------------------------
    QString in, out;
    QDir current;
    bool force = false;
    bool ostc3 = true;

    if( argc < 2 ) goto Usage;

    if( QString(argv[1]).toLower() == "-frog" ) {
        ostc3 = false;
        argc--, argv++;
    } else if(  QString(argv[1]).toLower() == "-ostc3" ) {
        ostc3 = true;
        argc--, argv++;
    }

    in  = QDir::cleanPath(current.absoluteFilePath(argv[1]));
    out = QDir::cleanPath(current.absoluteFilePath(argv[2]));
    if( argv[2] == QString("-f") && argc >= 3 ) {
        out = QDir::cleanPath(current.absoluteFilePath(argv[3]));
        force = true;
    }

    //---- Check parameters consistency --------------------------------------
    {
        QFileInfo fi(in);
        if( ! fi.exists() || ! fi.isReadable() ) {
            qWarning().nospace() << "Cannot read input file " << in;
            goto Usage;
        }
    }

    {
        QFileInfo fo(out);
        if( fo.exists() ) {
            if( !force ) {
                qWarning().nospace() << "File " << out << " exists. Use -f to force overwrite.";
                goto Usage;
            }

            if( !fo.isWritable() ) {
                qWarning().nospace() << "Cannot write to " << out << ". Protected file ?";
                goto Usage;
            }
            current.remove(out);
        }
    }

    //---- Load the HEX file -------------------------------------------------
    {
        QProgressBar* progress = new QProgressBar(0);
        progress->setFormat("Loading %p%");
        progress->show();

        try {
            HexFile hex;
            hex.allocate(0x20000);

            hex.load(in, progress);
            hex.sqwiz(0x1E000);

            char sum[10];
            sprintf(sum, "%08X", hex.checksum());
            qDebug() << "Checksum " << sum;

    //---- Save encrypted HEX file -------------------------------------------
            progress->setFormat("Saving %p%");
            hex.saveEncrypted(out, (ostc3 ? ostc3SecretKey : frogSecretKey), progress);
        }
        catch(const char* msg) {
            qWarning() << "Failed: " << msg;
        }

        delete progress;
    }

    //---- End --------------------------------------------------------------
    return 0;

Usage:
    qWarning() << "Usage:" << endl
               << "    " << QString(app.arguments()[0]).section('/', -1).section('\\',-1)
               << "[-frog|-ostc3]"
               << " input.hex [-f] output.hex";
    exit(-1);
}