From c7cf52be3951304f57cb82cae2b168cdc5de3b3a Mon Sep 17 00:00:00 2001 From: zedamota Date: Wed, 27 Jul 2011 19:39:08 +0100 Subject: [PATCH] Added embedded and gcs version info to exported uavobjects file. --- .../src/plugins/config/smartsavebutton.cpp | 1 - .../devicedescriptorstruct.h | 2 +- .../plugins/uavobjectutil/uavobjectutil.pro | 3 +- .../uavobjectutil/uavobjectutilmanager.cpp | 47 +++++++++++++++++++ .../uavobjectutil/uavobjectutilmanager.h | 6 ++- .../uavsettingsimportexport.cpp | 13 ++++- .../uavsettingsimportexport.h | 2 +- .../uavsettingsimportexport.pro | 2 +- .../uploader/devicedescriptorstruct.cpp | 5 -- .../src/plugins/uploader/devicewidget.cpp | 4 +- .../plugins/uploader/runningdevicewidget.cpp | 2 +- .../src/plugins/uploader/uploader.pro | 6 +-- .../plugins/uploader/uploadergadgetwidget.cpp | 37 --------------- .../plugins/uploader/uploadergadgetwidget.h | 1 - 14 files changed, 73 insertions(+), 58 deletions(-) rename ground/openpilotgcs/src/plugins/{uploader => uavobjectutil}/devicedescriptorstruct.h (96%) delete mode 100644 ground/openpilotgcs/src/plugins/uploader/devicedescriptorstruct.cpp diff --git a/ground/openpilotgcs/src/plugins/config/smartsavebutton.cpp b/ground/openpilotgcs/src/plugins/config/smartsavebutton.cpp index 720e06c15..ed5abf2c7 100644 --- a/ground/openpilotgcs/src/plugins/config/smartsavebutton.cpp +++ b/ground/openpilotgcs/src/plugins/config/smartsavebutton.cpp @@ -24,7 +24,6 @@ void smartSaveButton::processClick() bool error=false; ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); UAVObjectUtilManager* utilMngr = pm->getObject(); - qDebug()<<"smartbutton:save"; foreach(UAVObject * obj,objects) { up_result=false; diff --git a/ground/openpilotgcs/src/plugins/uploader/devicedescriptorstruct.h b/ground/openpilotgcs/src/plugins/uavobjectutil/devicedescriptorstruct.h similarity index 96% rename from ground/openpilotgcs/src/plugins/uploader/devicedescriptorstruct.h rename to ground/openpilotgcs/src/plugins/uavobjectutil/devicedescriptorstruct.h index 037ecede0..c44fb73c0 100644 --- a/ground/openpilotgcs/src/plugins/uploader/devicedescriptorstruct.h +++ b/ground/openpilotgcs/src/plugins/uavobjectutil/devicedescriptorstruct.h @@ -30,7 +30,7 @@ public: break; } } - deviceDescriptorStruct(); + deviceDescriptorStruct(){} }; #endif // DEVICEDESCRIPTORSTRUCT_H diff --git a/ground/openpilotgcs/src/plugins/uavobjectutil/uavobjectutil.pro b/ground/openpilotgcs/src/plugins/uavobjectutil/uavobjectutil.pro index 2776a2d25..92e490542 100644 --- a/ground/openpilotgcs/src/plugins/uavobjectutil/uavobjectutil.pro +++ b/ground/openpilotgcs/src/plugins/uavobjectutil/uavobjectutil.pro @@ -6,7 +6,8 @@ include(uavobjectutil_dependencies.pri) HEADERS += uavobjectutil_global.h \ uavobjectutilmanager.h \ - uavobjectutilplugin.h + uavobjectutilplugin.h \ + devicedescriptorstruct.h SOURCES += uavobjectutilmanager.cpp \ uavobjectutilplugin.cpp diff --git a/ground/openpilotgcs/src/plugins/uavobjectutil/uavobjectutilmanager.cpp b/ground/openpilotgcs/src/plugins/uavobjectutil/uavobjectutilmanager.cpp index 67d30aadb..b5070c269 100644 --- a/ground/openpilotgcs/src/plugins/uavobjectutil/uavobjectutilmanager.cpp +++ b/ground/openpilotgcs/src/plugins/uavobjectutil/uavobjectutilmanager.cpp @@ -652,4 +652,51 @@ int UAVObjectUtilManager::getTelemetrySerialPortSpeeds(QComboBox *comboBox) return 0; // OK } +deviceDescriptorStruct UAVObjectUtilManager::getBoardDescriptionStruct() +{ + deviceDescriptorStruct ret; + descriptionToStructure(getBoardDescription(),&ret); + return ret; +} + +bool UAVObjectUtilManager::descriptionToStructure(QByteArray desc, deviceDescriptorStruct *struc) +{ + if (desc.startsWith("OpFw")) { + // This looks like a binary with a description at the end + /* + # 4 bytes: header: "OpFw" + # 4 bytes: GIT commit tag (short version of SHA1) + # 4 bytes: Unix timestamp of compile time + # 2 bytes: target platform. Should follow same rule as BOARD_TYPE and BOARD_REVISION in board define files. + # 26 bytes: commit tag if it is there, otherwise "Unreleased". Zero-padded + # ---- 40 bytes limit --- + # 20 bytes: SHA1 sum of the firmware. + # 40 bytes: free for now. + */ + + // Note: the ARM binary is big-endian: + quint32 gitCommitTag = desc.at(7)&0xFF; + for (int i=1;i<4;i++) { + gitCommitTag = gitCommitTag<<8; + gitCommitTag += desc.at(7-i) & 0xFF; + } + struc->gitTag=QString::number(gitCommitTag,16); + quint32 buildDate = desc.at(11)&0xFF; + for (int i=1;i<4;i++) { + buildDate = buildDate<<8; + buildDate += desc.at(11-i) & 0xFF; + } + struc->buildDate= QDateTime::fromTime_t(buildDate).toUTC().toString("yyyyMMdd HH:mm"); + QByteArray targetPlatform = desc.mid(12,2); + // TODO: check platform compatibility + QString dscText = QString(desc.mid(14,26)); + struc->boardType=(int)targetPlatform.at(0); + struc->boardRevision=(int)targetPlatform.at(1); + struc->description=dscText; + return true; + } + return false; + +} + // ****************************** diff --git a/ground/openpilotgcs/src/plugins/uavobjectutil/uavobjectutilmanager.h b/ground/openpilotgcs/src/plugins/uavobjectutil/uavobjectutilmanager.h index 298374862..6c7782b25 100644 --- a/ground/openpilotgcs/src/plugins/uavobjectutil/uavobjectutilmanager.h +++ b/ground/openpilotgcs/src/plugins/uavobjectutil/uavobjectutilmanager.h @@ -35,14 +35,14 @@ #include "uavobjectmanager.h" #include "uavobject.h" #include "objectpersistence.h" - +#include "devicedescriptorstruct.h" #include #include #include #include #include #include - +#include class UAVOBJECTUTIL_EXPORT UAVObjectUtilManager: public QObject { Q_OBJECT @@ -65,6 +65,8 @@ public: QByteArray getBoardCPUSerial(); quint32 getFirmwareCRC(); QByteArray getBoardDescription(); + deviceDescriptorStruct getBoardDescriptionStruct(); + static bool descriptionToStructure(QByteArray desc,deviceDescriptorStruct * struc); UAVObjectManager* getObjectManager(); void saveObjectToSD(UAVObject *obj); diff --git a/ground/openpilotgcs/src/plugins/uavsettingsimportexport/uavsettingsimportexport.cpp b/ground/openpilotgcs/src/plugins/uavsettingsimportexport/uavsettingsimportexport.cpp index c55c22357..342b845e9 100644 --- a/ground/openpilotgcs/src/plugins/uavsettingsimportexport/uavsettingsimportexport.cpp +++ b/ground/openpilotgcs/src/plugins/uavsettingsimportexport/uavsettingsimportexport.cpp @@ -218,10 +218,21 @@ QString UAVSettingsImportExportPlugin::createXMLDocument( QDomDocument doc(docName); QDomElement root = doc.createElement(isSettings ? "settings" : "data"); doc.appendChild(root); + QDomElement versionInfo =doc.createElement("versionInfo"); + root.appendChild(versionInfo); + QDomElement fw=doc.createElement("Embedded"); + UAVObjectUtilManager* utilMngr = pm->getObject(); + fw.setAttribute("gitcommittag",utilMngr->getBoardDescriptionStruct().gitTag); + fw.setAttribute("fwtag",utilMngr->getBoardDescriptionStruct().description); + fw.setAttribute("cpuSerial",QString(utilMngr->getBoardCPUSerial().toHex())); + + versionInfo.appendChild(fw); + QDomElement gcs=doc.createElement("GCS"); + gcs.setAttribute("revision",QString::fromLatin1(Core::Constants::GCS_REVISION_STR)); + versionInfo.appendChild(gcs); // iterate over settings objects QList< QList > objList = objManager->getDataObjects(); - foreach (QList list, objList) { foreach (UAVDataObject* obj, list) { if (obj->isSettings() == isSettings) { diff --git a/ground/openpilotgcs/src/plugins/uavsettingsimportexport/uavsettingsimportexport.h b/ground/openpilotgcs/src/plugins/uavsettingsimportexport/uavsettingsimportexport.h index e69938b8c..ff8972227 100644 --- a/ground/openpilotgcs/src/plugins/uavsettingsimportexport/uavsettingsimportexport.h +++ b/ground/openpilotgcs/src/plugins/uavsettingsimportexport/uavsettingsimportexport.h @@ -30,7 +30,7 @@ #include #include "uavobjectutil/uavobjectutilmanager.h" #include "importsummary.h" - +#include "../../../../../build/ground/openpilotgcs/gcsversioninfo.h" class UAVSettingsImportExportPlugin : public ExtensionSystem::IPlugin { Q_OBJECT diff --git a/ground/openpilotgcs/src/plugins/uavsettingsimportexport/uavsettingsimportexport.pro b/ground/openpilotgcs/src/plugins/uavsettingsimportexport/uavsettingsimportexport.pro index b653864ed..fcdc11ae6 100644 --- a/ground/openpilotgcs/src/plugins/uavsettingsimportexport/uavsettingsimportexport.pro +++ b/ground/openpilotgcs/src/plugins/uavsettingsimportexport/uavsettingsimportexport.pro @@ -6,7 +6,7 @@ TARGET = UAVSettingsImportExport include(../../openpilotgcsplugin.pri) include(uavsettingsimportexport_dependencies.pri) - + HEADERS += uavsettingsimportexport.h \ importsummary.h SOURCES += uavsettingsimportexport.cpp \ diff --git a/ground/openpilotgcs/src/plugins/uploader/devicedescriptorstruct.cpp b/ground/openpilotgcs/src/plugins/uploader/devicedescriptorstruct.cpp deleted file mode 100644 index ffbc2cb69..000000000 --- a/ground/openpilotgcs/src/plugins/uploader/devicedescriptorstruct.cpp +++ /dev/null @@ -1,5 +0,0 @@ -#include "devicedescriptorstruct.h" - -deviceDescriptorStruct::deviceDescriptorStruct() -{ -} diff --git a/ground/openpilotgcs/src/plugins/uploader/devicewidget.cpp b/ground/openpilotgcs/src/plugins/uploader/devicewidget.cpp index 238d21bef..e2d2c0148 100644 --- a/ground/openpilotgcs/src/plugins/uploader/devicewidget.cpp +++ b/ground/openpilotgcs/src/plugins/uploader/devicewidget.cpp @@ -180,7 +180,7 @@ void deviceWidget::freeze() */ bool deviceWidget::populateBoardStructuredDescription(QByteArray desc) { - if(UploaderGadgetWidget::descriptionToStructure(desc,&onBoardDescrition)) + if(UAVObjectUtilManager::descriptionToStructure(desc,&onBoardDescrition)) { myDevice->lblGitTag->setText(onBoardDescrition.gitTag); myDevice->lblBuildDate->setText(onBoardDescrition.buildDate); @@ -210,7 +210,7 @@ bool deviceWidget::populateBoardStructuredDescription(QByteArray desc) } bool deviceWidget::populateLoadedStructuredDescription(QByteArray desc) { - if(UploaderGadgetWidget::descriptionToStructure(desc,&LoadedDescrition)) + if(UAVObjectUtilManager::descriptionToStructure(desc,&LoadedDescrition)) { myDevice->lblGitTagL->setText(LoadedDescrition.gitTag); myDevice->lblBuildDateL->setText( LoadedDescrition.buildDate); diff --git a/ground/openpilotgcs/src/plugins/uploader/runningdevicewidget.cpp b/ground/openpilotgcs/src/plugins/uploader/runningdevicewidget.cpp index e45dbad83..0db22efb0 100644 --- a/ground/openpilotgcs/src/plugins/uploader/runningdevicewidget.cpp +++ b/ground/openpilotgcs/src/plugins/uploader/runningdevicewidget.cpp @@ -110,7 +110,7 @@ void runningDeviceWidget::populate() QByteArray description = utilMngr->getBoardDescription(); deviceDescriptorStruct devDesc; - if(UploaderGadgetWidget::descriptionToStructure(description,&devDesc)) + if(UAVObjectUtilManager::descriptionToStructure(description,&devDesc)) { if(devDesc.description.startsWith("release",Qt::CaseInsensitive)) { diff --git a/ground/openpilotgcs/src/plugins/uploader/uploader.pro b/ground/openpilotgcs/src/plugins/uploader/uploader.pro index 32424509b..05742868d 100755 --- a/ground/openpilotgcs/src/plugins/uploader/uploader.pro +++ b/ground/openpilotgcs/src/plugins/uploader/uploader.pro @@ -22,8 +22,7 @@ HEADERS += uploadergadget.h \ SSP/qssp.h \ SSP/qsspt.h \ SSP/common.h \ - runningdevicewidget.h \ - devicedescriptorstruct.h + runningdevicewidget.h SOURCES += uploadergadget.cpp \ uploadergadgetconfiguration.cpp \ uploadergadgetfactory.cpp \ @@ -36,8 +35,7 @@ SOURCES += uploadergadget.cpp \ SSP/port.cpp \ SSP/qssp.cpp \ SSP/qsspt.cpp \ - runningdevicewidget.cpp \ - devicedescriptorstruct.cpp + runningdevicewidget.cpp OTHER_FILES += Uploader.pluginspec FORMS += \ diff --git a/ground/openpilotgcs/src/plugins/uploader/uploadergadgetwidget.cpp b/ground/openpilotgcs/src/plugins/uploader/uploadergadgetwidget.cpp index d2667730c..397533c2b 100755 --- a/ground/openpilotgcs/src/plugins/uploader/uploadergadgetwidget.cpp +++ b/ground/openpilotgcs/src/plugins/uploader/uploadergadgetwidget.cpp @@ -27,44 +27,7 @@ #include "uploadergadgetwidget.h" #define DFU_DEBUG true -bool UploaderGadgetWidget::descriptionToStructure(QByteArray desc,deviceDescriptorStruct * struc) -{ - if (desc.startsWith("OpFw")) { - // This looks like a binary with a description at the end - /* - # 4 bytes: header: "OpFw" - # 4 bytes: GIT commit tag (short version of SHA1) - # 4 bytes: Unix timestamp of compile time - # 2 bytes: target platform. Should follow same rule as BOARD_TYPE and BOARD_REVISION in board define files. - # 26 bytes: commit tag if it is there, otherwise "Unreleased". Zero-padded - # ---- 40 bytes limit --- - # 20 bytes: SHA1 sum of the firmware. - # 40 bytes: free for now. - */ - // Note: the ARM binary is big-endian: - quint32 gitCommitTag = desc.at(7)&0xFF; - for (int i=1;i<4;i++) { - gitCommitTag = gitCommitTag<<8; - gitCommitTag += desc.at(7-i) & 0xFF; - } - struc->gitTag=QString::number(gitCommitTag,16); - quint32 buildDate = desc.at(11)&0xFF; - for (int i=1;i<4;i++) { - buildDate = buildDate<<8; - buildDate += desc.at(11-i) & 0xFF; - } - struc->buildDate= QDateTime::fromTime_t(buildDate).toUTC().toString("yyyyMMdd HH:mm"); - QByteArray targetPlatform = desc.mid(12,2); - // TODO: check platform compatibility - QString dscText = QString(desc.mid(14,26)); - struc->boardType=(int)targetPlatform.at(0); - struc->boardRevision=(int)targetPlatform.at(1); - struc->description=dscText; - return true; - } - return false; -} UploaderGadgetWidget::UploaderGadgetWidget(QWidget *parent) : QWidget(parent) { m_config = new Ui_UploaderWidget(); diff --git a/ground/openpilotgcs/src/plugins/uploader/uploadergadgetwidget.h b/ground/openpilotgcs/src/plugins/uploader/uploadergadgetwidget.h index 81d39e44f..075dc18a0 100755 --- a/ground/openpilotgcs/src/plugins/uploader/uploadergadgetwidget.h +++ b/ground/openpilotgcs/src/plugins/uploader/uploadergadgetwidget.h @@ -68,7 +68,6 @@ public: ~UploaderGadgetWidget(); typedef enum { IAP_STATE_READY, IAP_STATE_STEP_1, IAP_STATE_STEP_2, IAP_STEP_RESET, IAP_STATE_BOOTLOADER} IAPStep; void log(QString str); - static bool descriptionToStructure(QByteArray desc,deviceDescriptorStruct * struc); public slots: void onAutopilotConnect();