From 8de9f8e8261e0102cd3f47546c136e5f7ef4eed1 Mon Sep 17 00:00:00 2001 From: 3djc Date: Wed, 31 Aug 2016 09:11:12 +0200 Subject: [PATCH 01/12] Disable Horus --- companion/src/mainwindow.cpp | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/companion/src/mainwindow.cpp b/companion/src/mainwindow.cpp index be359f1d3..6958b4a4a 100644 --- a/companion/src/mainwindow.cpp +++ b/companion/src/mainwindow.cpp @@ -920,15 +920,34 @@ void MainWindow::about() void MainWindow::updateMenus() { bool hasMdiChild = (activeMdiChild() != 0); - saveAct->setEnabled(hasMdiChild); - saveAsAct->setEnabled(hasMdiChild); - pasteAct->setEnabled(hasMdiChild ? activeMdiChild()->hasPasteData() : false); - writeEepromAct->setEnabled(hasMdiChild); - separatorAct->setVisible(hasMdiChild); - bool hasSelection = (activeMdiChild() && activeMdiChild()->hasSelection()); - cutAct->setEnabled(hasSelection); - copyAct->setEnabled(hasSelection); + + if(GetCurrentFirmware()->getBoard()== BOARD_HORUS) { + newAct->setEnabled(false); + openAct->setEnabled(false); + saveAct->setEnabled(false); + saveAsAct->setEnabled(false); + writeEepromAct->setEnabled(false); + readEepromAct->setEnabled(false); + writeBackupToRadioAct->setEnabled(false); + readBackupToFileAct->setEnabled(false); + cutAct->setEnabled(false); + copyAct->setEnabled(false); + pasteAct->setEnabled(false); + } else { + newAct->setEnabled(true); + openAct->setEnabled(true); + saveAct->setEnabled(hasMdiChild); + saveAsAct->setEnabled(hasMdiChild); + cutAct->setEnabled(hasSelection); + copyAct->setEnabled(hasSelection); + pasteAct->setEnabled(hasMdiChild ? activeMdiChild()->hasPasteData() : false); + writeEepromAct->setEnabled(hasMdiChild); + readEepromAct->setEnabled(true); + writeBackupToRadioAct->setEnabled(true); + readBackupToFileAct->setEnabled(true); + } + separatorAct->setVisible(hasMdiChild); simulateAct->setEnabled(hasSelection); printAct->setEnabled(hasSelection); loadbackupAct->setEnabled(hasMdiChild); From a8394b640088813c819b39b8d852fa565d7bdd71 Mon Sep 17 00:00:00 2001 From: 3djc Date: Wed, 31 Aug 2016 09:12:35 +0200 Subject: [PATCH 02/12] Cosmetic --- companion/src/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/companion/src/mainwindow.cpp b/companion/src/mainwindow.cpp index 6958b4a4a..ed651016c 100644 --- a/companion/src/mainwindow.cpp +++ b/companion/src/mainwindow.cpp @@ -922,7 +922,7 @@ void MainWindow::updateMenus() bool hasMdiChild = (activeMdiChild() != 0); bool hasSelection = (activeMdiChild() && activeMdiChild()->hasSelection()); - if(GetCurrentFirmware()->getBoard()== BOARD_HORUS) { + if(GetCurrentFirmware()->getBoard() == BOARD_HORUS) { newAct->setEnabled(false); openAct->setEnabled(false); saveAct->setEnabled(false); From 585302d8a92b9c21311ef0dce01fd0174f309e25 Mon Sep 17 00:00:00 2001 From: 3djc Date: Wed, 31 Aug 2016 10:00:56 +0200 Subject: [PATCH 03/12] Disable recent file --- companion/src/mainwindow.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/companion/src/mainwindow.cpp b/companion/src/mainwindow.cpp index ed651016c..4f4286edc 100644 --- a/companion/src/mainwindow.cpp +++ b/companion/src/mainwindow.cpp @@ -934,6 +934,7 @@ void MainWindow::updateMenus() cutAct->setEnabled(false); copyAct->setEnabled(false); pasteAct->setEnabled(false); + recentFileMenu->setEnabled(false); } else { newAct->setEnabled(true); openAct->setEnabled(true); @@ -946,6 +947,7 @@ void MainWindow::updateMenus() readEepromAct->setEnabled(true); writeBackupToRadioAct->setEnabled(true); readBackupToFileAct->setEnabled(true); + recentFileMenu->setEnabled(true); } separatorAct->setVisible(hasMdiChild); simulateAct->setEnabled(hasSelection); From 2ebd89159c8874a4edde101f428ffa89329100d8 Mon Sep 17 00:00:00 2001 From: 3djc Date: Wed, 31 Aug 2016 10:23:24 +0200 Subject: [PATCH 04/12] Recent files fix --- companion/src/mainwindow.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/companion/src/mainwindow.cpp b/companion/src/mainwindow.cpp index 4f4286edc..0ccdd7095 100644 --- a/companion/src/mainwindow.cpp +++ b/companion/src/mainwindow.cpp @@ -934,7 +934,8 @@ void MainWindow::updateMenus() cutAct->setEnabled(false); copyAct->setEnabled(false); pasteAct->setEnabled(false); - recentFileMenu->setEnabled(false); + for (int i=0; isetEnabled(false); } else { newAct->setEnabled(true); openAct->setEnabled(true); @@ -947,7 +948,8 @@ void MainWindow::updateMenus() readEepromAct->setEnabled(true); writeBackupToRadioAct->setEnabled(true); readBackupToFileAct->setEnabled(true); - recentFileMenu->setEnabled(true); + for (int i=0; isetEnabled(false); } separatorAct->setVisible(hasMdiChild); simulateAct->setEnabled(hasSelection); From fc4b43dfb10e7f0c9c744777f59461dda8ce2225 Mon Sep 17 00:00:00 2001 From: 3djc Date: Wed, 31 Aug 2016 10:38:45 +0200 Subject: [PATCH 05/12] Disable drag drop --- companion/src/mainwindow.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/companion/src/mainwindow.cpp b/companion/src/mainwindow.cpp index 0ccdd7095..c702c5f54 100644 --- a/companion/src/mainwindow.cpp +++ b/companion/src/mainwindow.cpp @@ -1471,6 +1471,8 @@ void MainWindow::dragEnterEvent(QDragEnterEvent *event) void MainWindow::dropEvent(QDropEvent *event) { + if(GetCurrentFirmware()->getBoard()== BOARD_HORUS) + return; QList urls = event->mimeData()->urls(); if (urls.isEmpty()) return; From 6bdb40ec81ddaba910c2053bb414616dec724ed0 Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Wed, 31 Aug 2016 10:50:44 +0200 Subject: [PATCH 06/12] Recent files fix --- companion/src/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/companion/src/mainwindow.cpp b/companion/src/mainwindow.cpp index c702c5f54..31e5967a6 100644 --- a/companion/src/mainwindow.cpp +++ b/companion/src/mainwindow.cpp @@ -949,7 +949,7 @@ void MainWindow::updateMenus() writeBackupToRadioAct->setEnabled(true); readBackupToFileAct->setEnabled(true); for (int i=0; isetEnabled(false); + recentFileActs[i]->setEnabled(true); } separatorAct->setVisible(hasMdiChild); simulateAct->setEnabled(hasSelection); From 842eb3e93ac618e8c7b39196b14861c7b6362478 Mon Sep 17 00:00:00 2001 From: 3djc Date: Wed, 31 Aug 2016 11:09:11 +0200 Subject: [PATCH 07/12] Prevent flash read --- companion/src/mainwindow.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/companion/src/mainwindow.cpp b/companion/src/mainwindow.cpp index 31e5967a6..44325e12a 100644 --- a/companion/src/mainwindow.cpp +++ b/companion/src/mainwindow.cpp @@ -934,6 +934,7 @@ void MainWindow::updateMenus() cutAct->setEnabled(false); copyAct->setEnabled(false); pasteAct->setEnabled(false); + readFlashAct->setEnabled(false); for (int i=0; isetEnabled(false); } else { @@ -948,6 +949,7 @@ void MainWindow::updateMenus() readEepromAct->setEnabled(true); writeBackupToRadioAct->setEnabled(true); readBackupToFileAct->setEnabled(true); + readFlashAct->setEnabled(true); for (int i=0; isetEnabled(true); } From 161f3be468745cc6a139378097f22259f2f9bad4 Mon Sep 17 00:00:00 2001 From: 3djc Date: Wed, 31 Aug 2016 12:07:51 +0200 Subject: [PATCH 08/12] Fix FSIZE for Horus --- companion/src/firmwareinterface.h | 2 +- companion/src/mainwindow.cpp | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/companion/src/firmwareinterface.h b/companion/src/firmwareinterface.h index 6f78e82ba..852afed6e 100644 --- a/companion/src/firmwareinterface.h +++ b/companion/src/firmwareinterface.h @@ -19,7 +19,7 @@ #include #include -#define MAX_FSIZE (512*1024) +#define MAX_FSIZE (GetCurrentFirmware()->getBoard() == BOARD_HORUS) ? (2048*1024) : (512*1024) #define SPLASH_WIDTH (128) #define SPLASH_HEIGHT (64) #define SPLASHX9D_WIDTH (212) diff --git a/companion/src/mainwindow.cpp b/companion/src/mainwindow.cpp index 44325e12a..31e5967a6 100644 --- a/companion/src/mainwindow.cpp +++ b/companion/src/mainwindow.cpp @@ -934,7 +934,6 @@ void MainWindow::updateMenus() cutAct->setEnabled(false); copyAct->setEnabled(false); pasteAct->setEnabled(false); - readFlashAct->setEnabled(false); for (int i=0; isetEnabled(false); } else { @@ -949,7 +948,6 @@ void MainWindow::updateMenus() readEepromAct->setEnabled(true); writeBackupToRadioAct->setEnabled(true); readBackupToFileAct->setEnabled(true); - readFlashAct->setEnabled(true); for (int i=0; isetEnabled(true); } From 03c969fa3c9f9ea7689ea0f11ffd0601f6e57f74 Mon Sep 17 00:00:00 2001 From: 3djc Date: Wed, 31 Aug 2016 12:28:02 +0200 Subject: [PATCH 09/12] MAX_FSIZE moved to Horus max dfu args adjusted for Horus --- companion/src/firmwareinterface.h | 2 +- companion/src/radiointerface.cpp | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/companion/src/firmwareinterface.h b/companion/src/firmwareinterface.h index 852afed6e..ae7ffb1e6 100644 --- a/companion/src/firmwareinterface.h +++ b/companion/src/firmwareinterface.h @@ -19,7 +19,7 @@ #include #include -#define MAX_FSIZE (GetCurrentFirmware()->getBoard() == BOARD_HORUS) ? (2048*1024) : (512*1024) +#define MAX_FSIZE (2048*1024) #define SPLASH_WIDTH (128) #define SPLASH_HEIGHT (64) #define SPLASHX9D_WIDTH (212) diff --git a/companion/src/radiointerface.cpp b/companion/src/radiointerface.cpp index dc8d1359a..df5e0a427 100644 --- a/companion/src/radiointerface.cpp +++ b/companion/src/radiointerface.cpp @@ -66,7 +66,10 @@ QStringList getDfuArgs(const QString & cmd, const QString & filename) burnConfigDialog bcd; QString memory = "0x08000000"; if (cmd == "-U") { - memory.append(QString(":%1").arg(MAX_FSIZE)); + if(GetCurrentFirmware()->getBoard() == BOARD_HORUS) + memory.append(QString(":%1").arg(MAX_FSIZE)); + else + memory.append(QString(":%1").arg(512*1024)); } args << bcd.getDFUArgs(); if (!filename.endsWith(".dfu")) { From c994260c85017fec79ad09f474126a26e70e88bd Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Wed, 31 Aug 2016 14:28:14 +0200 Subject: [PATCH 10/12] Arguably cleaner flash size retrieval --- companion/src/eeprominterface.cpp | 27 +++++++++++++++++++++++++++ companion/src/eeprominterface.h | 11 +++++++++++ companion/src/firmwareinterface.cpp | 8 ++++---- companion/src/firmwareinterface.h | 1 - companion/src/radiointerface.cpp | 5 +---- 5 files changed, 43 insertions(+), 9 deletions(-) diff --git a/companion/src/eeprominterface.cpp b/companion/src/eeprominterface.cpp index 069de327b..8ff58eb7b 100644 --- a/companion/src/eeprominterface.cpp +++ b/companion/src/eeprominterface.cpp @@ -1765,6 +1765,33 @@ QString getBoardName(BoardEnum board) } } +const int Firmware::getFlashSize() +{ + switch (board) { + case BOARD_STOCK: + return FSIZE_STOCK; + case BOARD_M128: + return FSIZE_M128; + case BOARD_MEGA2560: + case BOARD_GRUVIN9X: + return FSIZE_GRUVIN9X; + case BOARD_SKY9X: + return FSIZE_SKY9X; + case BOARD_9XRPRO: + case BOARD_AR9X: + return FSIZE_9XRPRO; + case BOARD_TARANIS: + case BOARD_TARANIS_PLUS: + case BOARD_TARANIS_X9E: + case BOARD_FLAMENCO: + return FSIZE_TARANIS; + case BOARD_HORUS: + return FSIZE_HORUS; + default: + return 0; + } +} + Firmware * GetFirmware(QString id) { foreach(Firmware * firmware, firmwares) { diff --git a/companion/src/eeprominterface.h b/companion/src/eeprominterface.h index 4baf3e596..1adf9cf8e 100644 --- a/companion/src/eeprominterface.h +++ b/companion/src/eeprominterface.h @@ -37,6 +37,15 @@ #define EESIZE_9XRPRO (128*4096) #define EESIZE_MAX EESIZE_9XRPRO +#define FSIZE_STOCK (64*1024) +#define FSIZE_M128 (128*1024) +#define FSIZE_GRUVIN9X (256*1024) +#define FSIZE_TARANIS (512*1024) +#define FSIZE_SKY9X (256*1024) +#define FSIZE_9XRPRO (512*1024) +#define FSIZE_HORUS (2048*1024) +#define FSIZE_MAX FSIZE_HORUS + QString getBoardName(BoardEnum board); #define IS_9X(board) (board==BOARD_STOCK || board==BOARD_M128) @@ -1671,6 +1680,8 @@ class Firmware { virtual bool isTelemetrySourceAvailable(int source) = 0; virtual int isAvailable(PulsesProtocol proto, int port=0) = 0; + + const int getFlashSize(); public: QList languages; diff --git a/companion/src/firmwareinterface.cpp b/companion/src/firmwareinterface.cpp index 889cd427a..209b3e92c 100644 --- a/companion/src/firmwareinterface.cpp +++ b/companion/src/firmwareinterface.cpp @@ -44,7 +44,7 @@ int getFileType(const QString &fullFileName) } FirmwareInterface::FirmwareInterface(const QString &filename): - flash(MAX_FSIZE, 0), + flash(FSIZE_MAX, 0), flashSize(0), versionId(0), eepromVersion(0), @@ -59,11 +59,11 @@ FirmwareInterface::FirmwareInterface(const QString &filename): QFile file(filename); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { // reading HEX TEXT file QTextStream inputStream(&file); - flashSize = HexInterface(inputStream).load((uint8_t *)flash.data(), MAX_FSIZE); + flashSize = HexInterface(inputStream).load((uint8_t *)flash.data(), FSIZE_MAX); file.close(); if (flashSize == 0) { file.open(QIODevice::ReadOnly); - flashSize = file.read((char *)flash.data(), MAX_FSIZE); + flashSize = file.read((char *)flash.data(), FSIZE_MAX); } } } @@ -342,7 +342,7 @@ bool FirmwareInterface::isValid() unsigned int FirmwareInterface::save(QString fileName) { - uint8_t binflash[MAX_FSIZE]; + uint8_t binflash[FSIZE_MAX]; memcpy(&binflash, flash.constData(), flashSize); QFile file(fileName); diff --git a/companion/src/firmwareinterface.h b/companion/src/firmwareinterface.h index ae7ffb1e6..0171d91ea 100644 --- a/companion/src/firmwareinterface.h +++ b/companion/src/firmwareinterface.h @@ -19,7 +19,6 @@ #include #include -#define MAX_FSIZE (2048*1024) #define SPLASH_WIDTH (128) #define SPLASH_HEIGHT (64) #define SPLASHX9D_WIDTH (212) diff --git a/companion/src/radiointerface.cpp b/companion/src/radiointerface.cpp index df5e0a427..efc0b3e57 100644 --- a/companion/src/radiointerface.cpp +++ b/companion/src/radiointerface.cpp @@ -66,10 +66,7 @@ QStringList getDfuArgs(const QString & cmd, const QString & filename) burnConfigDialog bcd; QString memory = "0x08000000"; if (cmd == "-U") { - if(GetCurrentFirmware()->getBoard() == BOARD_HORUS) - memory.append(QString(":%1").arg(MAX_FSIZE)); - else - memory.append(QString(":%1").arg(512*1024)); + memory.append(QString(":%1").arg(GetCurrentFirmware()->getFlashSize())); } args << bcd.getDFUArgs(); if (!filename.endsWith(".dfu")) { From 37a0258b19b31da66360cf69e90beaa29ed96531 Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Wed, 31 Aug 2016 21:57:53 +0200 Subject: [PATCH 11/12] No more 2MB array on the stack --- companion/src/firmwareinterface.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/companion/src/firmwareinterface.cpp b/companion/src/firmwareinterface.cpp index 209b3e92c..b9f578d48 100644 --- a/companion/src/firmwareinterface.cpp +++ b/companion/src/firmwareinterface.cpp @@ -342,7 +342,10 @@ bool FirmwareInterface::isValid() unsigned int FirmwareInterface::save(QString fileName) { - uint8_t binflash[FSIZE_MAX]; + uint8_t *binflash = (uint8_t*)malloc(FSIZE_MAX); + if (binflash == NULL) { + return -1; + } memcpy(&binflash, flash.constData(), flashSize); QFile file(fileName); From f6b43ae40f93674d8b2b7332b2afe589f7fcf17c Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Wed, 31 Aug 2016 22:11:00 +0200 Subject: [PATCH 12/12] Don't leave a big dangling array... --- companion/src/firmwareinterface.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/companion/src/firmwareinterface.cpp b/companion/src/firmwareinterface.cpp index b9f578d48..49e488bce 100644 --- a/companion/src/firmwareinterface.cpp +++ b/companion/src/firmwareinterface.cpp @@ -353,6 +353,7 @@ unsigned int FirmwareInterface::save(QString fileName) if (fileType == FILE_TYPE_HEX) { if (!file.open(QIODevice::ReadWrite | QIODevice::Truncate | QIODevice::Text)) { //reading HEX TEXT file + free(binflash); return -1; } QTextStream outputStream(&file); @@ -361,6 +362,7 @@ unsigned int FirmwareInterface::save(QString fileName) } else { if (!file.open(QIODevice::ReadWrite | QIODevice::Truncate)) { //reading HEX TEXT file + free(binflash); return -1; } file.write((char*)binflash, flashSize); @@ -368,5 +370,6 @@ unsigned int FirmwareInterface::save(QString fileName) file.close(); + free(binflash); return flashSize; }