From b75ef82d2ef18805acb13fdbefdaf0f5c06fe919 Mon Sep 17 00:00:00 2001 From: "yorick.geoffre" Date: Wed, 21 Jun 2023 11:41:57 +0200 Subject: [PATCH] added settings --- src/imagemaster.cpp | 34 + src/imagemaster.h | 9 + src/pollingtimer.h | 11 +- src/qml/pages/FirstPage.qml | 46 +- src/qml/pages/SecondPage.qml | 83 ++- src/src/MLX90640_API.cpp | 9 + src/src/MLX90640_API.h | 51 +- src/src/MLX90640_I2C_Driver.cpp | 4 + src/src/MLX90640_I2C_Driver.h | 1 + src/src/i2cif.h | 1 + src/src/thermi2c.cpp | 2 +- src/thermaldatarenderer.cpp | 26 + src/thermaldatarenderer.h | 5 + src/thermi2c.pro | 2 + src/thermi2c.pro.user | 1187 +------------------------------ src/translations/thermi2c-de.ts | 11 - src/translations/thermi2c.ts | 11 - 17 files changed, 244 insertions(+), 1249 deletions(-) create mode 100644 src/imagemaster.cpp create mode 100644 src/imagemaster.h diff --git a/src/imagemaster.cpp b/src/imagemaster.cpp new file mode 100644 index 0000000..0b04a8c --- /dev/null +++ b/src/imagemaster.cpp @@ -0,0 +1,34 @@ +#include "imagemaster.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +void saveImageFromColorArray(const QVector &colorArray, int width, int height, int scale) { + QImage image(width, height, QImage::Format_ARGB32); + + for (int y = 0; y < height; ++y) { + for (int x = 0; x < width; ++x) { + int index = y * width + x; + image.setPixelColor(x, y, colorArray.at(index)); + } + } + + QImage scaledImage = image.scaled(width * scale, height * scale, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + + QString path = QStandardPaths::writableLocation(QStandardPaths::PicturesLocation); + QString currentDateTime = QDateTime::currentDateTime().toString("yyyyMMdd_HHmmss"); + QString fileName = QDir(path).filePath(currentDateTime + ".png"); + + if (scaledImage.save(fileName)) { + qDebug() << "Image saved successfully"; + } else { + qDebug() << "Failed to save image"; + } +} diff --git a/src/imagemaster.h b/src/imagemaster.h new file mode 100644 index 0000000..fd69d88 --- /dev/null +++ b/src/imagemaster.h @@ -0,0 +1,9 @@ +#ifndef IMAGEMASTER_H +#define IMAGEMASTER_H + +#include +#include + +void saveImageFromColorArray(const QVector &colorArray, int width, int height, int scale); + +#endif // IMAGEMASTER_H diff --git a/src/pollingtimer.h b/src/pollingtimer.h index 88ce5a5..cd46afe 100644 --- a/src/pollingtimer.h +++ b/src/pollingtimer.h @@ -11,6 +11,7 @@ class PollingTimer : public QObject { Q_OBJECT + Q_PROPERTY(unsigned int timeout READ getTimeout WRITE setTimeout NOTIFY timeoutChanged) protected: std::atomic shouldRun; std::thread* myThread = nullptr; @@ -24,7 +25,15 @@ public: PollingTimer(Command* c) : shouldRun(false), _c(c){} Q_INVOKABLE void start(); Q_INVOKABLE void stop(); - Q_INVOKABLE inline void setDelay(const unsigned int& timeout) {this->timeout = timeout;} + unsigned int getTimeout() const {return timeout;} + void setTimeout(const unsigned int& t) { + if (t != timeout) { + timeout = t; + emit timeoutChanged(); + } + } +signals: + void timeoutChanged(); }; #endif // POLLINGTIMER_H diff --git a/src/qml/pages/FirstPage.qml b/src/qml/pages/FirstPage.qml index 3044276..2747bee 100644 --- a/src/qml/pages/FirstPage.qml +++ b/src/qml/pages/FirstPage.qml @@ -2,10 +2,12 @@ import Sailfish.Silica 1.0 import harbour.i2ctool.I2cif 1.0 import melexis.driver 1.0 import QtQuick 2.0 +import QtQuick.Layouts 1.1 Page { id: mainPage property bool isInitialized: false + property bool isRunning: false SilicaListView { anchors.fill: parent @@ -24,11 +26,11 @@ Page { } } } - Column { + ColumnLayout { id: column width: parent.width spacing: Theme.paddingLarge - + anchors.horizontalCenter: parent.horizontalCenter PageHeader { title: "ThermI2C" @@ -49,12 +51,15 @@ Page { id: startButton text: mainPage.isInitialized ? "Stop" : "Start" onClicked: { - if(mainPage.isInitialized){ - mainPage.isInitialized = false; + if(mainPage.isRunning){ + mainPage.isRunning = false; polling_timer.stop(); }else{ - mainPage.isInitialized = true; - mlx90640.fuzzyInit(); + mainPage.isRunning = true; + if(!mainPage.isInitialized){ + mlx90640.fuzzyInit(); + mainPage.isInitialized = true; + } polling_timer.start(); } } @@ -65,13 +70,9 @@ Page { Row { anchors.horizontalCenter: parent.horizontalCenter - anchors.verticalCenter: parent.verticalCenter - anchors.verticalCenterOffset: -100 Grid { id: grid columns: 32 - y: parent.height + height - x: (parent.width + width) / 2 Repeater { id: repeater model: 768 @@ -95,6 +96,31 @@ Page { } } } + Row { + anchors.horizontalCenter: parent.horizontalCenter + spacing: Theme.paddingLarge + + Button { + id: photoButton + text: "📷" + width: 120 + height: 120 + onClicked: { + thermalRenderer.capture() + } + } + + Button { + id: settingsButton + text: "⚙️" + width: 120 + height: 120 + onClicked: { + console.log("Settings button clicked.") + pageStack.push(Qt.resolvedUrl("SecondPage.qml")) + } + } + } } } } diff --git a/src/qml/pages/SecondPage.qml b/src/qml/pages/SecondPage.qml index 6dbadf4..6009e5a 100644 --- a/src/qml/pages/SecondPage.qml +++ b/src/qml/pages/SecondPage.qml @@ -1,30 +1,77 @@ import QtQuick 2.0 import Sailfish.Silica 1.0 +import Sailfish.Pickers 1.0 +import QtQuick.Layouts 1.1 Page { id: page - - // The effective value will be restricted by ApplicationWindow.allowedOrientations allowedOrientations: Orientation.All - SilicaListView { - id: listView - model: 20 - anchors.fill: parent - header: PageHeader { - title: qsTr("Nested Page") + PageHeader { + id: header + title: "Settings Page" + } + + Column { + width: parent.width + spacing: Theme.paddingLarge + anchors.left: parent.left + anchors.right: parent.right + anchors.top: header.bottom + anchors.topMargin: Theme.paddingLarge + + SectionHeader { text: "Performance" } + + Label { + text: "FPS Limit" + anchors.left: parent.left + anchors.leftMargin: Theme.horizontalPageMargin + } + TextField { + id: fpsPicker + width: parent.width - Theme.horizontalPageMargin * 2 + placeholderText: "Enter FPS limit(1-60)" + validator: IntValidator { bottom: 1; top: 60 } + onTextChanged: { + if (fpsPicker.acceptableInput) { + polling_timer.timeout = (1000/parseInt(text, 10)) + } + } + } + + SectionHeader { text: "Display" } + + Label { + text: "Min-Max Value" + anchors.left: parent.left + anchors.leftMargin: Theme.horizontalPageMargin + } + Slider { + id: rangeSlider + width: parent.width - Theme.horizontalPageMargin * 2 + stepSize: 1 + value: 50 + minimumValue: 0 + maximumValue: 100 + onValueChanged: { + // handle value change + } + } + + SectionHeader { text: "Options" } + + Label { + text: "Noise" + anchors.left: parent.left + anchors.leftMargin: Theme.horizontalPageMargin } - delegate: BackgroundItem { - id: delegate - - Label { - x: Theme.horizontalPageMargin - text: qsTr("Item") + " " + index - anchors.verticalCenter: parent.verticalCenter - color: delegate.highlighted ? Theme.highlightColor : Theme.primaryColor + Switch { + id: noiseToggle + anchors.right: parent.right + anchors.rightMargin: Theme.horizontalPageMargin + onCheckedChanged: { + mlx90640.stubMode = checked } - onClicked: console.log("Clicked " + index) } - VerticalScrollDecorator {} } } diff --git a/src/src/MLX90640_API.cpp b/src/src/MLX90640_API.cpp index 1a10849..6933e8a 100644 --- a/src/src/MLX90640_API.cpp +++ b/src/src/MLX90640_API.cpp @@ -23,6 +23,15 @@ int MLX90640::mlx90640_DumpEE(uint8_t slaveAddr, uint16_t *eeData) return mlx90640_I2CRead(slaveAddr, mlx90640_EEPROM_START_ADDRESS, mlx90640_EEPROM_DUMP_NUM, eeData); } +void MLX90640::setStubMode(const bool& val) +{ + if (m_stubMode != val) { + m_stubMode = val; + mlx90640_I2CSetStub(val); + emit stubModeChanged(); + } +} + int MLX90640::mlx90640_SynchFrame(uint8_t slaveAddr) { uint16_t dataReady = 0; diff --git a/src/src/MLX90640_API.h b/src/src/MLX90640_API.h index 44f297e..518a9c4 100644 --- a/src/src/MLX90640_API.h +++ b/src/src/MLX90640_API.h @@ -89,16 +89,26 @@ #include -#define IGNORE_I2C_DISCONNECTS //comment out this line to enable noise generation / demo mode +//#define IGNORE_I2C_DISCONNECTS //comment out this line to enable noise generation / demo mode class MLX90640 : public QObject { Q_OBJECT - +protected: + bool m_stubMode = true; public: Q_PROPERTY(bool initialized READ getInitialized WRITE setInitialized NOTIFY initializedChanged) Q_PROPERTY(QVector imageVect READ getImageVect NOTIFY dataReady) + Q_PROPERTY(bool stubMode READ getStubMode WRITE setStubMode NOTIFY stubModeChanged) + + bool getStubMode() { + return m_stubMode; + } + + void setStubMode(const bool& val); + + QVector getImageVect() const { return this->imageVect; } @@ -176,6 +186,12 @@ public: uint16_t eeMLX90640[832]; try{ status = mlx90640_SetRefreshRate (0x33,0x06); //32hz + if(status != 0 && m_stubMode){ + perlin.fillWithPerlinNoise(imageVect, 32, 24, 1234567); + emit initializedChanged(); + emit dataReady(imageVect); + return; + } int curRR = mlx90640_GetRefreshRate (0x33); fprintf(stderr, "refresh rate: %d\n", curRR); status = mlx90640_SetResolution(0x33,0x00); //16 bit res @@ -188,31 +204,19 @@ public: fprintf(stderr, "dump EEprom...\n"); status = mlx90640_DumpEE (slaveAddress, eeMLX90640); usleep(1000); -#ifndef IGNORE_I2C_DISCONNECTS - if(status != 0){ - perlin.fillWithPerlinNoise(imageVect, 32, 24, 1234567); - emit initializedChanged(); - emit dataReady(imageVect); - return; - } -#endif fprintf(stderr, "extract parameters...\n"); status = mlx90640_ExtractParameters(eeMLX90640, &mlx90640); usleep(1000); - #ifndef IGNORE_I2C_DISCONNECTS - if(status == 0) - getData(); - else{ + + if(status != 0 && m_stubMode){ perlin.fillWithPerlinNoise(imageVect, 32, 24, 1234567); emit dataReady(imageVect); + }else{ + getData(); } - #else - getData(); - #endif }catch(...){ - #ifndef IGNORE_I2C_DISCONNECTS - perlin.fillWithPerlinNoise(imageVect, 32, 24, 1234567); - #endif + if(m_stubMode) + perlin.fillWithPerlinNoise(imageVect, 32, 24, 1234567); } emit initializedChanged(); @@ -236,9 +240,8 @@ public: imageVect[i] = mlx90640Image[i]; } } else { - #ifndef IGNORE_I2C_DISCONNECTS - perlin.fillWithPerlinNoise(imageVect, 32, 24, 1234567); - #endif + if(m_stubMode) + perlin.fillWithPerlinNoise(imageVect, 32, 24, 1234567); } emit dataReady(imageVect); @@ -253,7 +256,6 @@ public: } MLX90640() : imageVect(768){ - fuzzyInit(); } QVector imageVect; @@ -280,5 +282,6 @@ protected: signals: void dataReady(QVector data); void initializedChanged(); + void stubModeChanged(); }; #endif diff --git a/src/src/MLX90640_I2C_Driver.cpp b/src/src/MLX90640_I2C_Driver.cpp index 3ab9044..ac51adc 100644 --- a/src/src/MLX90640_I2C_Driver.cpp +++ b/src/src/MLX90640_I2C_Driver.cpp @@ -36,3 +36,7 @@ int mlx90640_I2CWrite(uint8_t slaveAddr,uint16_t writeAddress, uint16_t data) { return i2cDriverSingleton::getinstance()->i2cWrite(slaveAddr, writeAddress, data); } + +void mlx90640_I2CSetStub(const bool& stubmode){ + i2cDriverSingleton::getinstance()->stubMode = stubmode; +} diff --git a/src/src/MLX90640_I2C_Driver.h b/src/src/MLX90640_I2C_Driver.h index 4b63220..0457ed0 100644 --- a/src/src/MLX90640_I2C_Driver.h +++ b/src/src/MLX90640_I2C_Driver.h @@ -25,4 +25,5 @@ extern int mlx90640_I2CWrite(uint8_t slaveAddr,uint16_t writeAddress, uint16_t data); extern int mlx90640_I2CRead(uint8_t slaveAddr,uint16_t startAddress, uint16_t nMemAddressRead, uint16_t *data); extern void mlx90640_I2CFreqSet(int freq); + extern void mlx90640_I2CSetStub(const bool& stubmode); #endif diff --git a/src/src/i2cif.h b/src/src/i2cif.h index 930f382..a466f6b 100644 --- a/src/src/i2cif.h +++ b/src/src/i2cif.h @@ -38,6 +38,7 @@ public: QString firstTimeDefault(QString index); + bool stubMode = false; signals: void i2cProbingChanged(); void i2cError(); diff --git a/src/src/thermi2c.cpp b/src/src/thermi2c.cpp index 5f79614..cd51887 100644 --- a/src/src/thermi2c.cpp +++ b/src/src/thermi2c.cpp @@ -89,7 +89,7 @@ int main(int argc, char *argv[]) { //when a frame is ready, pass it to the renderer QObject::connect(thermal, SIGNAL(dataReady(QVector)), thermalRenderer, SLOT(receiveNewData(QVector)), Qt::ConnectionType::DirectConnection); - pt->setDelay(100); + pt->setTimeout(100); view.rootContext()->setContextProperty("polling_timer",pt); view.rootContext()->setContextProperty("mlx90640", thermal); diff --git a/src/thermaldatarenderer.cpp b/src/thermaldatarenderer.cpp index ea0799a..c7d2b11 100644 --- a/src/thermaldatarenderer.cpp +++ b/src/thermaldatarenderer.cpp @@ -1,4 +1,5 @@ #include "thermaldatarenderer.h" +#include "imagemaster.h" #include void ThermalDataRenderer::receiveNewData(QVector data) { auto start = std::chrono::high_resolution_clock::now(); @@ -13,9 +14,34 @@ void ThermalDataRenderer::receiveNewData(QVector data) { if(renderBuffer.size() < data.size()) renderBuffer = QVector(data.size()+1); + QVector sortedData = data; + std::sort(sortedData.begin(), sortedData.end()); + + const float lowerPercentile = 0.2f; + const float upperPercentile = 0.98f; + + int lowerIndex = static_cast(lowerPercentile * sortedData.size()); + int upperIndex = static_cast(upperPercentile * sortedData.size()); + + minValue = sortedData[lowerIndex]; + maxValue = sortedData[upperIndex]; + + //fprintf(stderr, "minValue: %f\t", minValue); + //fprintf(stderr, "maxValue: %f\n", maxValue); + + attributers[activeAttributer]->maxValue = maxValue; + attributers[activeAttributer]->minValue= minValue; + + for (int i = 0; i < data.size() && i < renderBuffer.size(); ++i) { renderBuffer[i] = attributers[activeAttributer]->encode(data[i]); } + + if(takeCapture){ + saveImageFromColorArray(renderBuffer, 32, 24, 5); //5 times upscale from 32x24 to 160x120 + takeCapture = false; + } + emit dataChanged(); auto end = std::chrono::high_resolution_clock::now(); auto elapsed = std::chrono::duration_cast(end - start).count(); diff --git a/src/thermaldatarenderer.h b/src/thermaldatarenderer.h index 9e500d8..f08d889 100644 --- a/src/thermaldatarenderer.h +++ b/src/thermaldatarenderer.h @@ -22,6 +22,7 @@ class ThermalDataRenderer : public QObject unsigned int activeAttributer; float minValue = 0.0f; float maxValue = 1.0f; + bool takeCapture = false; public: Q_PROPERTY(QVector> attributers READ getAttributers NOTIFY attributersChanged) Q_PROPERTY(QStringList attributerNames READ getAttributerNames NOTIFY attributerNamesChanged) @@ -44,6 +45,10 @@ public: return QColor(0,0,0); } + Q_INVOKABLE void capture(){ + takeCapture = true; + } + inline void addAttributer(ColorAttributerPtr attributer) { attributers.push_back(attributer); emit attributerNamesChanged(); diff --git a/src/thermi2c.pro b/src/thermi2c.pro index ddb4b35..9807592 100644 --- a/src/thermi2c.pro +++ b/src/thermi2c.pro @@ -17,6 +17,7 @@ CONFIG += sailfishapp SOURCES += src/thermi2c.cpp \ colorattributer.cpp \ command.cpp \ + imagemaster.cpp \ perlin.cpp \ pollingtimer.cpp \ src/mlx90640_API.cpp \ @@ -52,6 +53,7 @@ HEADERS += \ colorattributer.h \ command.h \ datapollcommand.h \ + imagemaster.h \ perlin.h \ pollingtimer.h \ src/mlx90640_API.h \ diff --git a/src/thermi2c.pro.user b/src/thermi2c.pro.user index 0ff2c6d..bad8f72 100644 --- a/src/thermi2c.pro.user +++ b/src/thermi2c.pro.user @@ -1,10 +1,10 @@ - + EnvironmentId - {c60ee680-29c0-4f4f-bc71-809cccb10b9b} + {1c177fcb-1c84-4ca7-bd41-3049d12e47bf} ProjectExplorer.Project.ActiveTarget @@ -79,7 +79,7 @@ true true Builtin.DefaultTidyAndClazy - 6 + 3 @@ -104,8 +104,8 @@ - C:\Users\Onyxa\build-thermi2c-SailfishOS_3_4_0_24_armv7hl_in_Sailfish_SDK_Build_Engine-Debug - C:/Users/Onyxa/build-thermi2c-SailfishOS_3_4_0_24_armv7hl_in_Sailfish_SDK_Build_Engine-Debug + C:\Users\Onyxa\Documents\build-thermi2c-SailfishOS_3_4_0_24_armv7hl_in_Sailfish_SDK_Build_Engine-Debug + C:/Users/Onyxa/Documents/build-thermi2c-SailfishOS_3_4_0_24_armv7hl_in_Sailfish_SDK_Build_Engine-Debug true @@ -161,8 +161,8 @@ - C:\Users\Onyxa\build-thermi2c-SailfishOS_3_4_0_24_armv7hl_in_Sailfish_SDK_Build_Engine-Release - C:/Users/Onyxa/build-thermi2c-SailfishOS_3_4_0_24_armv7hl_in_Sailfish_SDK_Build_Engine-Release + C:\Users\Onyxa\Documents\build-thermi2c-SailfishOS_3_4_0_24_armv7hl_in_Sailfish_SDK_Build_Engine-Release + C:/Users/Onyxa/Documents/build-thermi2c-SailfishOS_3_4_0_24_armv7hl_in_Sailfish_SDK_Build_Engine-Release true @@ -219,8 +219,8 @@ - C:\Users\Onyxa\build-thermi2c-SailfishOS_3_4_0_24_armv7hl_in_Sailfish_SDK_Build_Engine-Profile - C:/Users/Onyxa/build-thermi2c-SailfishOS_3_4_0_24_armv7hl_in_Sailfish_SDK_Build_Engine-Profile + C:\Users\Onyxa\Documents\build-thermi2c-SailfishOS_3_4_0_24_armv7hl_in_Sailfish_SDK_Build_Engine-Profile + C:/Users/Onyxa/Documents/build-thermi2c-SailfishOS_3_4_0_24_armv7hl_in_Sailfish_SDK_Build_Engine-Profile true @@ -275,7 +275,7 @@ - true + false QmakeProjectManager.MerPrepareTargetStep @@ -406,7 +406,7 @@ true - C:/Users/Onyxa/thermi2c + C:/Users/Onyxa/Documents/thermi2c/src false -1 3 @@ -414,8 +414,8 @@ 1 thermi2c (on %{Device:Name}) - QmakeProjectManager.MerRunConfiguration:C:/Users/Onyxa/thermi2c/thermi2c.pro - C:/Users/Onyxa/thermi2c/thermi2c.pro + QmakeProjectManager.MerRunConfiguration:C:/Users/Onyxa/Documents/thermi2c/src/thermi2c.pro + C:/Users/Onyxa/Documents/thermi2c/src/thermi2c.pro 1 false true @@ -425,1168 +425,9 @@ 1 - - ProjectExplorer.Project.Target.1 - - Mer.Device.Type - SailfishOS-3.4.0.24-aarch64 (in Sailfish SDK Build Engine) - SailfishOS-3.4.0.24-aarch64 (in Sailfish SDK Build Engine) - SailfishOS-3.4.0.24-aarch64.default - 0 - 0 - 0 - - 0 - false - - - - - C:\Users\Onyxa\build-thermi2c-SailfishOS_3_4_0_24_aarch64_in_Sailfish_SDK_Build_Engine-Debug - C:/Users/Onyxa/build-thermi2c-SailfishOS_3_4_0_24_aarch64_in_Sailfish_SDK_Build_Engine-Debug - - - true - Mer.MerSdkStartStep - - - true - QtProjectManager.QMakeBuildStep - false - - - - true - Qt4ProjectManager.MakeStep - - 3 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - true - Mer.MerSdkStartStep - - - reset - true - Mer.MerClearBuildEnvironmentStep - - - true - Qt4ProjectManager.MakeStep - clean - - 3 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - - Debug - Qt4ProjectManager.Qt4BuildConfiguration - 2 - 1 - - - false - - - - - C:\Users\Onyxa\build-thermi2c-SailfishOS_3_4_0_24_aarch64_in_Sailfish_SDK_Build_Engine-Release - C:/Users/Onyxa/build-thermi2c-SailfishOS_3_4_0_24_aarch64_in_Sailfish_SDK_Build_Engine-Release - - - true - Mer.MerSdkStartStep - - - true - QtProjectManager.QMakeBuildStep - false - - - - true - Qt4ProjectManager.MakeStep - - 3 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - true - Mer.MerSdkStartStep - - - reset - true - Mer.MerClearBuildEnvironmentStep - - - true - Qt4ProjectManager.MakeStep - clean - - 3 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - - Release - Qt4ProjectManager.Qt4BuildConfiguration - 0 - 1 - - - 0 - false - - - - - C:\Users\Onyxa\build-thermi2c-SailfishOS_3_4_0_24_aarch64_in_Sailfish_SDK_Build_Engine-Profile - C:/Users/Onyxa/build-thermi2c-SailfishOS_3_4_0_24_aarch64_in_Sailfish_SDK_Build_Engine-Profile - - - true - Mer.MerSdkStartStep - - - true - QtProjectManager.QMakeBuildStep - false - - - - true - Qt4ProjectManager.MakeStep - - 3 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - true - Mer.MerSdkStartStep - - - reset - true - Mer.MerClearBuildEnvironmentStep - - - true - Qt4ProjectManager.MakeStep - clean - - 3 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - - Profile - Qt4ProjectManager.Qt4BuildConfiguration - 0 - 1 - 0 - - 3 - - - - false - QmakeProjectManager.MerPrepareTargetStep - - - true - QmakeProjectManager.MerRpmBuildStep - - - --sdk - true - QmakeProjectManager.MerRpmDeployStep - - 3 - Deploy - Deploy - ProjectExplorer.BuildSteps.Deploy - - 1 - - false - QmakeProjectManager.MerRpmDeployConfiguration - - - - - true - QmakeProjectManager.MerRpmBuildStep - - - true - QmakeProjectManager.MerRpmValidationStep - - 2 - Deploy - Deploy - ProjectExplorer.BuildSteps.Deploy - - 1 - - false - QmakeProjectManager.MerMb2RpmBuildConfiguration - - - - - true - QmakeProjectManager.MerPrepareTargetStep - - - true - QmakeProjectManager.MerMakeInstallBuildStep - - - --rsync - true - QmakeProjectManager.MerRsyncDeployStep - - 3 - Deploy - Deploy - ProjectExplorer.BuildSteps.Deploy - - 1 - - false - QmakeProjectManager.MerRSyncDeployConfiguration - - 3 - - dwarf - - cpu-cycles - - - 250 - - -e - cpu-cycles - --call-graph - dwarf,4096 - -F - 250 - - -F - true - 4096 - false - false - 1000 - - true - - - false - false - false - false - true - 0.01 - 10 - true - kcachegrind - 1 - - 25 - - 1 - true - false - true - - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - - true - C:/Users/Onyxa/thermi2c - false - -1 - 3 - - 1 - - thermi2c - QmakeProjectManager.MerRunConfiguration:C:/Users/Onyxa/thermi2c/thermi2c.pro - C:/Users/Onyxa/thermi2c/thermi2c.pro - 1 - false - true - false - true - - 1 - - - - ProjectExplorer.Project.Target.2 - - Mer.Device.Type - SailfishOS-3.4.0.24-i486 (in Sailfish SDK Build Engine) - SailfishOS-3.4.0.24-i486 (in Sailfish SDK Build Engine) - SailfishOS-3.4.0.24-i486.default - 0 - 0 - 0 - - 0 - false - - - - - C:\Users\Onyxa\build-thermi2c-SailfishOS_3_4_0_24_i486_in_Sailfish_SDK_Build_Engine-Debug - C:/Users/Onyxa/build-thermi2c-SailfishOS_3_4_0_24_i486_in_Sailfish_SDK_Build_Engine-Debug - - - true - Mer.MerSdkStartStep - - - true - QtProjectManager.QMakeBuildStep - false - - - - true - Qt4ProjectManager.MakeStep - - 3 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - true - Mer.MerSdkStartStep - - - reset - true - Mer.MerClearBuildEnvironmentStep - - - true - Qt4ProjectManager.MakeStep - clean - - 3 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - - Debug - Qt4ProjectManager.Qt4BuildConfiguration - 2 - 1 - - - false - - - - - C:\Users\Onyxa\build-thermi2c-SailfishOS_3_4_0_24_i486_in_Sailfish_SDK_Build_Engine-Release - C:/Users/Onyxa/build-thermi2c-SailfishOS_3_4_0_24_i486_in_Sailfish_SDK_Build_Engine-Release - - - true - Mer.MerSdkStartStep - - - true - QtProjectManager.QMakeBuildStep - false - - - - true - Qt4ProjectManager.MakeStep - - 3 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - true - Mer.MerSdkStartStep - - - reset - true - Mer.MerClearBuildEnvironmentStep - - - true - Qt4ProjectManager.MakeStep - clean - - 3 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - - Release - Qt4ProjectManager.Qt4BuildConfiguration - 0 - 1 - - - 0 - false - - - - - C:\Users\Onyxa\build-thermi2c-SailfishOS_3_4_0_24_i486_in_Sailfish_SDK_Build_Engine-Profile - C:/Users/Onyxa/build-thermi2c-SailfishOS_3_4_0_24_i486_in_Sailfish_SDK_Build_Engine-Profile - - - true - Mer.MerSdkStartStep - - - true - QtProjectManager.QMakeBuildStep - false - - - - true - Qt4ProjectManager.MakeStep - - 3 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - true - Mer.MerSdkStartStep - - - reset - true - Mer.MerClearBuildEnvironmentStep - - - true - Qt4ProjectManager.MakeStep - clean - - 3 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - - Profile - Qt4ProjectManager.Qt4BuildConfiguration - 0 - 1 - 0 - - 3 - - - - true - QmakeProjectManager.MerPrepareTargetStep - - - true - QmakeProjectManager.MerRpmBuildStep - - - --sdk - true - QmakeProjectManager.MerRpmDeployStep - - 3 - Deploy - Deploy - ProjectExplorer.BuildSteps.Deploy - - 1 - - false - QmakeProjectManager.MerRpmDeployConfiguration - - - - - true - QmakeProjectManager.MerRpmBuildStep - - 1 - Deploy - Deploy - ProjectExplorer.BuildSteps.Deploy - - 1 - - false - QmakeProjectManager.MerMb2RpmBuildConfiguration - - - - - true - QmakeProjectManager.MerPrepareTargetStep - - - true - QmakeProjectManager.MerMakeInstallBuildStep - - - --rsync - true - QmakeProjectManager.MerRsyncDeployStep - - 3 - Deploy - Deploy - ProjectExplorer.BuildSteps.Deploy - - 1 - - false - QmakeProjectManager.MerRSyncDeployConfiguration - - 3 - - dwarf - - cpu-cycles - - - 250 - - -e - cpu-cycles - --call-graph - dwarf,4096 - -F - 250 - - -F - true - 4096 - false - false - 1000 - - true - - - false - false - false - false - true - 0.01 - 10 - true - kcachegrind - 1 - - 25 - - 1 - true - false - true - - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - - true - C:/Users/Onyxa/thermi2c - false - -1 - 3 - - 2 - - ProjectExplorer.CustomExecutableRunConfiguration - - false - true - false - true - - - dwarf - - cpu-cycles - - - 250 - - -e - cpu-cycles - --call-graph - dwarf,4096 - -F - 250 - - -F - true - 4096 - false - false - 1000 - - true - - - false - false - false - false - true - 0.01 - 10 - true - kcachegrind - 1 - - 25 - - 1 - true - false - true - - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - - true - C:/Users/Onyxa/thermi2c - false - -1 - 3 - - 1 - - QmakeProjectManager.MerCustomRunConfiguration: - - 1 - false - true - false - true - - 2 - - - - ProjectExplorer.Project.Target.3 - - Mer.Device.Type - SailfishOS-4.5.0.18-aarch64 (in Sailfish SDK Build Engine) - SailfishOS-4.5.0.18-aarch64 (in Sailfish SDK Build Engine) - SailfishOS-4.5.0.18-aarch64.default - 0 - 0 - 0 - - 0 - false - - - - - C:\Users\Onyxa\build-thermi2c-SailfishOS_4_5_0_18_aarch64_in_Sailfish_SDK_Build_Engine-Debug - C:/Users/Onyxa/build-thermi2c-SailfishOS_4_5_0_18_aarch64_in_Sailfish_SDK_Build_Engine-Debug - - - true - Mer.MerSdkStartStep - - - true - QtProjectManager.QMakeBuildStep - false - - - - true - Qt4ProjectManager.MakeStep - - 3 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - true - Mer.MerSdkStartStep - - - reset - true - Mer.MerClearBuildEnvironmentStep - - - true - Qt4ProjectManager.MakeStep - clean - - 3 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - - Debug - Qt4ProjectManager.Qt4BuildConfiguration - 2 - 1 - - - false - - - - - C:\Users\Onyxa\build-thermi2c-SailfishOS_4_5_0_18_aarch64_in_Sailfish_SDK_Build_Engine-Release - C:/Users/Onyxa/build-thermi2c-SailfishOS_4_5_0_18_aarch64_in_Sailfish_SDK_Build_Engine-Release - - - true - Mer.MerSdkStartStep - - - true - QtProjectManager.QMakeBuildStep - false - - - - true - Qt4ProjectManager.MakeStep - - 3 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - true - Mer.MerSdkStartStep - - - reset - true - Mer.MerClearBuildEnvironmentStep - - - true - Qt4ProjectManager.MakeStep - clean - - 3 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - - Release - Qt4ProjectManager.Qt4BuildConfiguration - 0 - 1 - - - 0 - false - - - - - C:\Users\Onyxa\build-thermi2c-SailfishOS_4_5_0_18_aarch64_in_Sailfish_SDK_Build_Engine-Profile - C:/Users/Onyxa/build-thermi2c-SailfishOS_4_5_0_18_aarch64_in_Sailfish_SDK_Build_Engine-Profile - - - true - Mer.MerSdkStartStep - - - true - QtProjectManager.QMakeBuildStep - false - - - - true - Qt4ProjectManager.MakeStep - - 3 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - true - Mer.MerSdkStartStep - - - reset - true - Mer.MerClearBuildEnvironmentStep - - - true - Qt4ProjectManager.MakeStep - clean - - 3 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - - Profile - Qt4ProjectManager.Qt4BuildConfiguration - 0 - 1 - 0 - - 3 - - - - true - QmakeProjectManager.MerPrepareTargetStep - - - true - QmakeProjectManager.MerRpmBuildStep - - - --sdk - true - QmakeProjectManager.MerRpmDeployStep - - 3 - Deploy - Deploy - ProjectExplorer.BuildSteps.Deploy - - 1 - - false - QmakeProjectManager.MerRpmDeployConfiguration - - - - - true - QmakeProjectManager.MerRpmBuildStep - - 1 - Deploy - Deploy - ProjectExplorer.BuildSteps.Deploy - - 1 - - false - QmakeProjectManager.MerMb2RpmBuildConfiguration - - - - - true - QmakeProjectManager.MerPrepareTargetStep - - - true - QmakeProjectManager.MerMakeInstallBuildStep - - - --rsync - true - QmakeProjectManager.MerRsyncDeployStep - - 3 - Deploy - Deploy - ProjectExplorer.BuildSteps.Deploy - - 1 - - false - QmakeProjectManager.MerRSyncDeployConfiguration - - 3 - - dwarf - - cpu-cycles - - - 250 - - -e - cpu-cycles - --call-graph - dwarf,4096 - -F - 250 - - -F - true - 4096 - false - false - 1000 - - true - - - false - false - false - false - true - 0.01 - 10 - true - kcachegrind - 1 - - 25 - - 1 - true - false - true - - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - - true - C:/Users/Onyxa/thermi2c - false - -1 - 3 - - 2 - - ProjectExplorer.CustomExecutableRunConfiguration - - false - true - false - true - - - dwarf - - cpu-cycles - - - 250 - - -e - cpu-cycles - --call-graph - dwarf,4096 - -F - 250 - - -F - true - 4096 - false - false - 1000 - - true - - - false - false - false - false - true - 0.01 - 10 - true - kcachegrind - 1 - - 25 - - 1 - true - false - true - - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - - true - C:/Users/Onyxa/thermi2c - false - -1 - 3 - - 1 - - Custom Executable2 - QmakeProjectManager.MerCustomRunConfiguration: - - 1 - false - true - false - true - - 2 - - ProjectExplorer.Project.TargetCount - 4 + 1 ProjectExplorer.Project.Updater.FileVersion diff --git a/src/translations/thermi2c-de.ts b/src/translations/thermi2c-de.ts index 8de5b6e..4b7499a 100644 --- a/src/translations/thermi2c-de.ts +++ b/src/translations/thermi2c-de.ts @@ -8,15 +8,4 @@ Mein Cover - - SecondPage - - Nested Page - Unterseite - - - Item - Element - - diff --git a/src/translations/thermi2c.ts b/src/translations/thermi2c.ts index a088806..6c0a8ab 100644 --- a/src/translations/thermi2c.ts +++ b/src/translations/thermi2c.ts @@ -8,15 +8,4 @@ - - SecondPage - - Nested Page - - - - Item - - -