Simplify firmware path construction

Use QString::asprintf() instead of a buffer.
Convert to a C string using qPrintable().
This commit is contained in:
Kyle Guinn 2021-11-09 18:47:02 -06:00
parent 19ae371cee
commit 5ba50892e9
3 changed files with 14 additions and 38 deletions

View File

@ -148,14 +148,11 @@ int androidUsbDriver::get_new_bootloader_ctx(libusb_device **device_ptr, libusb_
int androidUsbDriver::flashFirmware(void){
//File name
char fname[128];
qDebug() << "\n\n\n\n\n\n\n\nFLASHING FIRMWARE....\n\n\n\n\n\n\n";
sprintf(fname, "assets:/firmware/labrafirm_%04x_%02x.hex", EXPECTED_FIRMWARE_VERSION, DEFINED_EXPECTED_VARIANT);
qDebug() << "FLASHING " << fname;
//Copy to somewhere that fopen can access
QFile asset_file(fname);
QFile asset_file(QString::asprintf("assets:/firmware/labrafirm_%04x_%02x.hex", EXPECTED_FIRMWARE_VERSION, DEFINED_EXPECTED_VARIANT));
qDebug() << "FLASHING " << asset_file.fileName();
qDebug() << "asset_file.exists()" << asset_file.exists();
QString filePath = QStandardPaths::writableLocation( QStandardPaths::StandardLocation::AppDataLocation );
@ -174,12 +171,6 @@ int androidUsbDriver::flashFirmware(void){
}
} else qDebug() << "File not found in assets";
std::string filePath_stdstr = filePath.toStdString();
char filePath_cstring[256];
strcpy(filePath_cstring, filePath_stdstr.c_str());
qDebug() << "File path is" << filePath_cstring;
if(connected) {
//Switch from application mode to bootloader mode. Otherwise assume we are in bootloader.
bootloaderJump();
@ -231,7 +222,7 @@ int androidUsbDriver::flashFirmware(void){
char command1[256];
sprintf(command1, "dfu-programmer atxmega32a4u erase --force --debug 300");
char command2[256];
sprintf(command2, "dfu-programmer atxmega32a4u flash %s --debug 300", filePath_cstring);
sprintf(command2, "dfu-programmer atxmega32a4u flash %s --debug 300", qPrintable(filePath));
char command3[256];
sprintf(command3, "dfu-programmer atxmega32a4u launch");
char command4[256];

View File

@ -340,10 +340,7 @@ void unixUsbDriver::backupCleanup(){
int unixUsbDriver::flashFirmware(void){
#ifndef PLATFORM_ANDROID
char fname[128];
qDebug() << "\n\n\n\n\n\n\n\nFIRMWARE MISMATCH!!!! FLASHING....\n\n\n\n\n\n\n";
sprintf(fname, "/firmware/labrafirm_%04x_%02x.hex", EXPECTED_FIRMWARE_VERSION, DEFINED_EXPECTED_VARIANT);
qDebug() << "FLASHING " << fname;
signalFirmwareFlash();
QApplication::processEvents();
@ -354,18 +351,15 @@ int unixUsbDriver::flashFirmware(void){
//Get location of firmware file
QString dirString = QCoreApplication::applicationDirPath();
dirString.append(fname);
QByteArray array = dirString.toLocal8Bit();
char* buffer = array.data();
//qDebug() << buffer;
dirString.append(QString::asprintf("/firmware/labrafirm_%04x_%02x.hex", EXPECTED_FIRMWARE_VERSION, DEFINED_EXPECTED_VARIANT));
qDebug() << "FLASHING " << dirString;
//Set up interface to dfuprog
int exit_code = 1;
char command1[256];
sprintf(command1, "dfu-programmer atxmega32a4u erase --force");
char command2[256];
sprintf(command2, "dfu-programmer atxmega32a4u flash %s", buffer);
sprintf(command2, "dfu-programmer atxmega32a4u flash %s", qPrintable(dirString));
char command3[256];
sprintf(command3, "dfu-programmer atxmega32a4u launch");
char command4[256];
@ -416,13 +410,8 @@ int unixUsbDriver::flashFirmware(void){
void unixUsbDriver::manualFirmwareRecovery(void){
#ifndef PLATFORM_ANDROID
//Get location of firmware file
char fname[128];
sprintf(fname, "/firmware/labrafirm_%04x_%02x.hex", EXPECTED_FIRMWARE_VERSION, DEFINED_EXPECTED_VARIANT);
QString dirString = QCoreApplication::applicationDirPath();
dirString.append(fname);
QByteArray array = dirString.toLocal8Bit();
char* buffer = array.data();
dirString.append(QString::asprintf("/firmware/labrafirm_%04x_%02x.hex", EXPECTED_FIRMWARE_VERSION, DEFINED_EXPECTED_VARIANT));
//Vars
QMessageBox manualFirmwareMessages;
@ -435,7 +424,7 @@ void unixUsbDriver::manualFirmwareRecovery(void){
char eraseCommand[256];
sprintf(eraseCommand, "dfu-programmer atxmega32a4u erase --force");
char flashCommand[256];
sprintf(flashCommand, "dfu-programmer atxmega32a4u flash %s", buffer);
sprintf(flashCommand, "dfu-programmer atxmega32a4u flash %s", qPrintable(dirString));

View File

@ -327,10 +327,7 @@ void winUsbDriver::shutdownProcedure(){
}
int winUsbDriver::flashFirmware(void){
char fname[64];
qDebug() << "\n\n\n\n\n\n\n\nFIRMWARE MISMATCH!!!! FLASHING....\n\n\n\n\n\n\n";
sprintf(fname, "labrafirm_%04x_%02x.hex", EXPECTED_FIRMWARE_VERSION, DEFINED_EXPECTED_VARIANT);
qDebug() << "FLASHING " << fname;
signalFirmwareFlash();
QApplication::processEvents();
@ -339,12 +336,14 @@ int winUsbDriver::flashFirmware(void){
//Go to bootloader mode
bootloaderJump();
//Set up interface to dfuprog
//Get location of firmware file
QString dfuprog_location = QCoreApplication::applicationDirPath();
dfuprog_location.append("/firmware/dfu-programmer");
QString file_location = QCoreApplication::applicationDirPath();
file_location.append("/firmware/");
file_location.append(fname);
file_location.append(QString::asprintf("/firmware/labrafirm_%04x_%02x.hex", EXPECTED_FIRMWARE_VERSION, DEFINED_EXPECTED_VARIANT));
qDebug() << "FLASHING " << file_location;
//Set up interface to dfuprog
QProcess dfu_exe;
QStringList args_stage1;
args_stage1 << "atxmega32a4u" << "erase" << "--force";
@ -411,11 +410,8 @@ int winUsbDriver::flashFirmware(void){
void winUsbDriver::manualFirmwareRecovery(void){
//Get location of firmware file
char fname[128];
sprintf(fname, "/firmware/labrafirm_%04x_%02x.hex", EXPECTED_FIRMWARE_VERSION, DEFINED_EXPECTED_VARIANT);
QString file_location = QCoreApplication::applicationDirPath();
file_location.append(fname);
file_location.append(QString::asprintf("/firmware/labrafirm_%04x_%02x.hex", EXPECTED_FIRMWARE_VERSION, DEFINED_EXPECTED_VARIANT));
//Set up interface to dfuprog
QString dfuprog_location = QCoreApplication::applicationDirPath();