diff --git a/.qtcreator/BionxControl.pro.user b/.qtcreator/BionxControl.pro.user index 9389c67..8176cf2 100644 --- a/.qtcreator/BionxControl.pro.user +++ b/.qtcreator/BionxControl.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId @@ -8,7 +8,7 @@ ProjectExplorer.Project.ActiveTarget - 1 + 0 ProjectExplorer.Project.EditorSettings @@ -94,16 +94,16 @@ Desktop true - Desktop Qt 6.10.1 llvm-mingw 64-bit - Desktop Qt 6.10.1 llvm-mingw 64-bit - qt.qt6.6101.win64_llvm_mingw_kit + Desktop Qt 6.10.1 MinGW 64-bit + Desktop Qt 6.10.1 MinGW 64-bit + qt.qt6.6101.win64_mingw_kit 0 0 0 0 - C:\syncMePlease\projects.now\BionxControl\build\Desktop_Qt_6_10_1_llvm_mingw_64_bit-Debug - C:/syncMePlease/projects.now/BionxControl/build/Desktop_Qt_6_10_1_llvm_mingw_64_bit-Debug + C:\syncMePlease\projects.now\BionxControl\build\Desktop_Qt_6_10_1_MinGW_64_bit-Debug + C:/syncMePlease/projects.now/BionxControl/build/Desktop_Qt_6_10_1_MinGW_64_bit-Debug true @@ -165,7 +165,7 @@ -e cpu-cycles --call-graph "dwarf,4096" -F 250 Qt4ProjectManager.Qt4RunConfiguration: - C:/syncMePlease/projects.now/BionxControl/BionxControl.pro + C:/syncMePlease/projects.now/BionxControl/bionxcontrol.pro false true @@ -202,7 +202,7 @@ -e cpu-cycles --call-graph "dwarf,4096" -F 250 Qt4ProjectManager.Qt4RunConfiguration: - C:/syncMePlease/projects.now/BionxControl/BionxControl.pro + C:/syncMePlease/projects.now/BionxControl/bionxcontrol.pro false true @@ -218,16 +218,16 @@ Desktop true - Desktop Qt 6.10.1 MinGW 64-bit - Desktop Qt 6.10.1 MinGW 64-bit - qt.qt6.6101.win64_mingw_kit + Desktop Qt 6.10.1 llvm-mingw 64-bit + Desktop Qt 6.10.1 llvm-mingw 64-bit + qt.qt6.6101.win64_llvm_mingw_kit 0 0 0 0 - C:\syncMePlease\projects.now\BionxControl\build\Desktop_Qt_6_10_1_MinGW_64_bit-Debug - C:/syncMePlease/projects.now/BionxControl/build/Desktop_Qt_6_10_1_MinGW_64_bit-Debug + C:\syncMePlease\projects.now\BionxControl\build\Desktop_Qt_6_10_1_llvm_mingw_64_bit-Debug + C:/syncMePlease/projects.now/BionxControl/build/Desktop_Qt_6_10_1_llvm_mingw_64_bit-Debug true diff --git a/BionxControl.pro b/BionxControl.pro index 78dbac0..fd55afc 100644 --- a/BionxControl.pro +++ b/BionxControl.pro @@ -57,4 +57,4 @@ else: unix:!android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS += target RESOURCES += \ - BionxControl.qrc + bionxcontrol.qrc diff --git a/BionxControl.qrc b/BionxControl.qrc index 9e39b15..b5728e7 100644 --- a/BionxControl.qrc +++ b/BionxControl.qrc @@ -1,6 +1,7 @@ data/bikeinfo.xml - BionxControl.qss + bionxcontrol.qss + data/typeinfo.xml diff --git a/bcmainwindow.cpp b/bcmainwindow.cpp index 57c97f1..f7cfc34 100644 --- a/bcmainwindow.cpp +++ b/bcmainwindow.cpp @@ -35,7 +35,7 @@ BCMainWindow::BCMainWindow(QWidget *parent) : QMainWindow(parent) { setupUi(this); - _valueManager.loadXml(); + _valueManager.loadBikeData(); auto model = _valueManager.getModel( "Console"_L1 ); if( model) _valueView->setModel( *model ); diff --git a/bcvalue.cpp b/bcvalue.cpp index d80e7ba..1bcc83f 100644 --- a/bcvalue.cpp +++ b/bcvalue.cpp @@ -32,6 +32,14 @@ #include +BCValueType::BCValueType( TypeID ID_, QString unitLabel_, optDouble factor_, optDouble min_, optDouble max_ ) + : ID{ID_}, unitLabel{unitLabel_},factor{factor_},min{min_},max{max_} +{ + +} + + + BCValue::BCValue(BCDevice::ID deviceID_, BC::ID targetID_) : deviceID{deviceID_}, targetID{targetID_} { diff --git a/bcvalue.h b/bcvalue.h index bbc2d4b..e7dbf44 100644 --- a/bcvalue.h +++ b/bcvalue.h @@ -40,30 +40,29 @@ /* + Werte haben verschiedene Längen (1,2 und 4 Byte) und werder auf unterschiedliche Art und Weise + ausgelesen und geschrieben (Siehe ODO). Sin können also Wert-Typen zugeordnet werden. Ein Werttyp + lässet über eine ID identifizieren, die mit der phyikalische Einheit des Wertes überschneiden kann, + aber nicht muss: : Km/h, kWh, ODO ... bilden eigene Typen, SoC, Assistence Level sind auch eigene Typen, + Teilen sich jedoch die Einheit '%'. Das ist natürlich annalog zu den ItemTypes: - ein Value hat einen ValueType, der bestimmt folgendes: - long or short or quad - unit (mm, km/h, odo ... ) - - - */ + using optDouble = std::optional; struct BCValueType { + Q_GADGET public: enum class TypeID : uint8_t - { - Invalid = 0x0, - }; - Q_ENUM(TypeID) - - enum class UnitID : uint8_t { Invalid = 0x0, Text, @@ -71,39 +70,27 @@ public: Float, Percent, KWh, + Watt, Km, + Kmh, Mm, Sec, SoC, Odo, + Assist, + AssistFac, Date }; - Q_ENUM(UnitID) + Q_ENUM(TypeID) + BCValueType( TypeID ID_, QString unitLabel_="", optDouble factor_=std::nullopt, optDouble min_=std::nullopt, optDouble max_= std::nullopt ); - static QString getUnitName( UnitID unitID) - { - static QMap s_unitNames - { - {UnitID::Invalid, "" }, - {UnitID::Text, ""}, - {UnitID::Number, ""}, - {UnitID::Float, "" }, - {UnitID::Percent, "%"}, - {UnitID::KWh, "kWh" }, - {UnitID::Km, "km"}, - {UnitID::Mm, "mm"}, - {UnitID::Sec, "s"}, - {UnitID::SoC, "%"}, - {UnitID::Date, ""} - }; - return s_unitNames[unitID]; - } - - UnitID ID; + TypeID ID; + QString unitLabel; + optDouble factor; optDouble min; optDouble max; - optDouble factor; + }; class BCValue @@ -114,18 +101,19 @@ public: BCValue() = default; BCValue( BCDevice::ID deviceID, BC::ID targetID ); - void setLongValue( uint8_t value); - uint8_t getLongValue(); - - QString label; + void setLongValue( uint8_t value); + uint8_t getLongValue(); BCDevice::ID deviceID{BCDevice::ID::Invalid}; BC::ID targetID{BC::ID::Invalid}; BCValueType::TypeID typeID{BCValueType::TypeID::Invalid};; - QVariant defaultValue; + QString label; QVariant value; + QVariant defaultValue; + bool inSync{false}; + bool readOnly{false}; }; // Damit QVariant dieses Struct transportieren kann: diff --git a/bcvaluemanager.cpp b/bcvaluemanager.cpp index 68ad719..96751c0 100644 --- a/bcvaluemanager.cpp +++ b/bcvaluemanager.cpp @@ -28,25 +28,24 @@ ***************************************************************************/ - - #include #include #include - -#include #include #include -#include #include + #include using namespace Qt::StringLiterals; -BCValueManager::BCValueManager() +BCValueManager::BCValueManager(QObject *parent) + : QObject(parent) { + loadTypeData(); + qRegisterMetaType("BCValue"); _transmitter.moveToThread(&_worker); @@ -145,7 +144,7 @@ std::optional BCValueManager::getModel(const QString& key ) return std::nullopt; } -void BCValueManager::loadXml() +void BCValueManager::loadBikeData() { auto printAttrs = [](const QXmlStreamReader& xml) { @@ -195,7 +194,7 @@ void BCValueManager::loadXml() if(deviceID.has_value()) { BCValueList parsedValues; - readDevice( parsedValues ); + loadDeviceData( parsedValues ); if( parsedValues.count() ) { BCValueModel* valueModel = new BCValueModel( this ); @@ -222,7 +221,7 @@ void BCValueManager::loadXml() } -void BCValueManager::readDevice( BCValueList& parsedValues ) +void BCValueManager::loadDeviceData( BCValueList& parsedValues ) { auto printAttrs = [](const QXmlStreamReader& xml) { @@ -271,9 +270,52 @@ void BCValueManager::readDevice( BCValueList& parsedValues ) } } +void BCValueManager::loadTypeData() +{ + /* + Invalid = 0x0, + "Text" + "Number" + "Float" + "Percent" + "KWh" + "Watt" + "Km" + "Kmh" + "Mm" + "Sec" + "SoC" + "Odo" + "Date" + + */ + //_valueTypes.insert( { BCValueType::TypeID::Invalid, "Invalid" } ); + + _valueTypes.insert( "Invalid", { BCValueType::TypeID::Invalid, "Invalid" } ); + _valueTypes.insert( "Text", { BCValueType::TypeID::Text } ); + _valueTypes.insert( "Number", { BCValueType::TypeID::Number } ); + + _valueTypes.insert( "Float", { BCValueType::TypeID::Float, "", 1.5625} ); + _valueTypes.insert( "Percent",{ BCValueType::TypeID::Percent, "%", 1.5625 } ); + _valueTypes.insert( "KWh", { BCValueType::TypeID::KWh, "kwh", 1.5625 } ); + _valueTypes.insert( "Watt", { BCValueType::TypeID::Watt, "w", 1.5625 } ); + _valueTypes.insert( "Km", { BCValueType::TypeID::Km, "km", 1.5625 } ); + _valueTypes.insert( "Kmh", { BCValueType::TypeID::Kmh, "km/h", 0.1 } ); + _valueTypes.insert( "Mm", { BCValueType::TypeID::Mm, "mm", 1.5625 } ); + _valueTypes.insert( "Sec", { BCValueType::TypeID::Sec, "s", 1.5625 } ); + _valueTypes.insert( "SoC", { BCValueType::TypeID::SoC, "%", 1.5625 } ); + _valueTypes.insert( "Odo", { BCValueType::TypeID::Odo, "km", 1.5625 } ); + _valueTypes.insert( "Assist", { BCValueType::TypeID::Assist, "", 0 ,4 } ); + _valueTypes.insert( "Assist", { BCValueType::TypeID::AssistFac, "%" } ); + _valueTypes.insert( "Date", { BCValueType::TypeID::Date } ); + + + + +} // --- NEU: Speichern mit QXmlStreamWriter --- -void BCValueManager::saveXml() +void BCValueManager::saveBikeData() { /* QString fileName = QFileDialog::getSaveFileName(this, "XML speichern", "", "XML Files (*.xml)"); diff --git a/bcvaluemanager.h b/bcvaluemanager.h index 63758d9..672eb3a 100644 --- a/bcvaluemanager.h +++ b/bcvaluemanager.h @@ -47,7 +47,7 @@ class BCValueManager : public QObject public: - BCValueManager( ); + BCValueManager( QObject* parent = nullptr); virtual ~BCValueManager(); std::optional getModel(const QString& key ); @@ -59,8 +59,8 @@ public: public slots: - void loadXml(); - void saveXml(); + void loadBikeData(); + void saveBikeData(); void onToggleConnectionState( bool connect ); signals: @@ -76,9 +76,11 @@ private slots: protected: - void readDevice( BCValueList& parsedValues ); + void loadTypeData(); + void loadDeviceData( BCValueList& parsedValues ); QXmlStreamReader _xml; + QMap _valueTypes; QMap _valueModels; BCDevice::ID _currentDeviceID{BCDevice::ID::Invalid}; QMetaEnum _bcDeviceEnum{QMetaEnum::fromType()}; diff --git a/data/bikeinfo.xml b/data/bikeinfo.xml index 51e9202..8a3a081 100644 --- a/data/bikeinfo.xml +++ b/data/bikeinfo.xml @@ -4,28 +4,28 @@ - - - - + + + + - - - - - + + + + + - - + + - - + + - - + + - - + + @@ -39,7 +39,7 @@