diff --git a/bcmainwindow.cpp b/bcmainwindow.cpp index 568f27f..5564c50 100644 --- a/bcmainwindow.cpp +++ b/bcmainwindow.cpp @@ -52,6 +52,9 @@ BCMainWindow::BCMainWindow(QWidget *parent) setupUi(this); + // den pimp-my-ride-button schalten wir vorerst aus. + _pimpButton->hide(); + // Wir schreiben den 'initMainWindow()' Aufruf mit Hilfe des // timers in die Event-Queue, damit er erst ausgeführt wird, // wenn das Fenster sichtbar ist. @@ -74,17 +77,6 @@ BCMainWindow::~BCMainWindow() _worker.wait(); // Warten bis Thread wirklich fertig ist } - -/** - * @brief Setzt den Headerlabel ( == die Device-Bezeichnung ) - * @param headerLabel Der headerLabel - */ - -void BCMainWindow::setHeaderLabel( const QString& headerText) -{ - _headerLabel->setText( " BionxControl: " + headerText ); -} - /** * @brief Initialisiert alle Komponenten des MainWindows. */ @@ -95,63 +87,62 @@ void BCMainWindow::initMainWindow() // Lambda um die buttons mit ihren Actions zu verbinden auto configureAction = [&]( QToolButton* button, QAction* action, BCDevice::ID deviceID ) { - // Action an den Button binden button->setDefaultAction( action); - // new way: die DeviceID muss aber explizit vom Lambda eingefanden werden. connect( action, &QAction::triggered, this, [this,deviceID]() - { - onShowDevicePanel( deviceID ); - }); + { + onShowDevicePanel( deviceID ); + }); if( _devicePanels.contains(deviceID) ) - { - BCDeviceView* currentPanel = _devicePanels[deviceID]; - // ... und ihre device ID - currentPanel->setDeviceID( deviceID ); - // Wenn ein Device (entspricht einem Datenmodel) fertig eingelesen wurde, - // wird es weitergereicht. - // Problem: alle Panels bekommen alle Datenmodelle angeboten. - connect( &_dataManager, &BCXmlLoader::valueListReady, currentPanel, &BCDeviceView::onValueListReady ); - } + { + BCDeviceView* currentPanel = _devicePanels[deviceID]; + // ... und ihre device ID + currentPanel->setDeviceID( deviceID ); + // Wenn ein Device (entspricht einem Datenmodel) fertig eingelesen wurde, + // wird es weitergereicht. + // Problem: alle Panels bekommen alle Datenmodelle angeboten. + connect( &_dataManager, &BCXmlLoader::valueListReady, currentPanel, &BCDeviceView::onValueListReady ); + } }; // Wir wollen die Devices den Views zuordnen können _devicePanels[BCDevice::ID::Console] = _consolePanel; _devicePanels[BCDevice::ID::Battery] = _batteryPanel; _devicePanels[BCDevice::ID::Motor] = _motorPanel; - _devicePanels[BCDevice::ID::Pimp] = _pimpPanel; + //_devicePanels[BCDevice::ID::Pimp] = _pimpPanel; - // Die actions an die Buttons binden + // Die actions an die Buttons binden configureAction(_motorButton, _motorAction, BCDevice::ID::Motor ); configureAction(_consoleButton, _consoleAction, BCDevice::ID::Console ); configureAction(_batteryButton, _batteryAction, BCDevice::ID::Battery ); - configureAction(_pimpButton, _pimpAction, BCDevice::ID::Pimp ); + //configureAction(_pimpButton, _pimpAction, BCDevice::ID::Pimp ); + /* bool m_isDarkMode = false; QString icon = m_isDarkMode ? "☀️" : "🌙"; fitzeButton->setText(icon); QString style = QString( - "QPushButton {" - " background-color: %1;" - " border: 1px solid %2;" - " border-radius: 6px;" - " font-size: 12pt;" - " padding: 0px;" - "}" - "QPushButton:hover {" - " background-color: %3;" - "}" - ).arg(m_isDarkMode ? "#2B2B2B" : "#FFFFFF") - .arg(m_isDarkMode ? "#3F3F3F" : "#E1DFDD") - .arg(m_isDarkMode ? "#3A3A3A" : "#F9F9F9"); + "QPushButton {" + " background-color: %1;" + " border: 1px solid %2;" + " border-radius: 6px;" + " font-size: 12pt;" + " padding: 0px;" + "}" + "QPushButton:hover {" + " background-color: %3;" + "}" + ).arg(m_isDarkMode ? "#2B2B2B" : "#FFFFFF") + .arg(m_isDarkMode ? "#3F3F3F" : "#E1DFDD") + .arg(m_isDarkMode ? "#3A3A3A" : "#F9F9F9"); fitzeButton->setStyleSheet(style); - - // besser: model::emit dataChanged - // also: emit dataChanged(index, index, {Qt::DisplayRole, Qt::EditRole, ValueRole}); + */ + // besser: model::emit dataChanged + // also: emit dataChanged(index, index, {Qt::DisplayRole, Qt::EditRole, ValueRole}); connect( _connectButton, &QToolButton::clicked, &_transmitter, &BCTransmitter::onToggleConnectionState ); connect( _syncButton, &QToolButton::clicked, this, &BCMainWindow::onSyncDeviceView ); connect( &_transmitter, &BCTransmitter::valueUpdated, this, &BCMainWindow::onValueUpdated ); @@ -161,18 +152,19 @@ void BCMainWindow::initMainWindow() connect(this, &BCMainWindow::requestValueUpdate, &_transmitter, &BCTransmitter::enqueueValue); connect(&_worker, &QThread::finished, &_transmitter, &QObject::deleteLater); + connect( &_transmitter, &BCTransmitter::driverStateChanged, this, &BCMainWindow::onDriverStateChanged ); + // transmitter starten _worker.start(); // die Daten des eBikes laden _dataManager.loadXmlBikeData(":/bikeinfo.xml"_L1); - _consoleAction->trigger(); - - connect( &_transmitter, &BCTransmitter::driverStateChanged, this, &BCMainWindow::onDriverStateChanged ); - + //_consoleAction->trigger(); + _batteryAction->trigger(); } + void BCMainWindow::initStatusBar() { // __fix @@ -203,6 +195,17 @@ void BCMainWindow::initStatusBar() } +/** + * @brief Setzt den Headerlabel ( == die Device-Bezeichnung ) + * @param headerLabel Der headerLabel + */ + +void BCMainWindow::setHeaderLabel( const QString& headerText) +{ + _headerLabel->setText( " BionxControl: " + headerText ); +} + + void BCMainWindow::autoConnect() { // __fix! diff --git a/bcvaluetype.cpp b/bcvaluetype.cpp index 6ebf01f..5a3efdf 100644 --- a/bcvaluetype.cpp +++ b/bcvaluetype.cpp @@ -102,6 +102,7 @@ BCValueType::BCValueType() } + BCValueType::BCValueType(QString unitKey_, QString unitLabel_, double factor_, optDouble min_, optDouble max_ ) : unitLabel{unitLabel_}, factor{factor_}, min{min_}, max{max_} { @@ -110,28 +111,6 @@ BCValueType::BCValueType(QString unitKey_, QString unitLabel_, double factor_, o } -QString BCValueType::readRawValueX(const BCAbstractTransmitter& transmitter , const BCValue& value) const -{ - qDebug() << " --- READ X!"; - /* - uint32_t devID = static_cast(deviceID); - uint8_t regID = static_cast (registerID); - - // wir sind hier im anderen thread! nicht einfach so reinschreiben, nur lesen - if( valueType->readValueFunc ) - { - uint32_t result = valueType->readValueFunc( transmitter, devID, regID ); - return valueType->formatValue( result ); - } - */ - return QString(); -} - -void BCValueType::writeRawValueX( const BCAbstractTransmitter& transmitter, const BCValue& value ) const -{ - qDebug() << " --- WRITE X!"; -} - QString BCValueType::formatValue( uint32_t value ) const { if( factor == 1 ) @@ -147,17 +126,20 @@ std::optional BCValueType::fetchReadValueFunction( const QString& { { "Byte", readByteValue }, { "Word", readWordValue }, + { "Assist", readByteValue }, + + { "Kmh", readByteValue }, { "Percent",readByteValue }, { "KWh", readByteValue }, { "Watt", readByteValue }, { "Km", readByteValue }, - { "Kmh", readByteValue }, + { "Mm", readByteValue }, { "Sec", readByteValue }, { "Degree", readByteValue }, { "SoC", readByteValue }, { "Odo", readByteValue }, - { "Assist", readByteValue } + }; if( !s_bcReadValueFunctions.contains( unitTypeKey ) ) @@ -170,11 +152,12 @@ std::optional BCValueType::fetchValueType( const QString& unitType { static QHash s_bcDataTypes { - { "Byte", new BCValueType( "Byte", "", 1.5625F) }, - { "Word", new BCValueType( "Word", "", 1.5625F) } + { "Byte", new BCValueType( "Byte", "", 1.5625F) }, + { "Word", new BCValueType( "Word", "", 1.5625F) }, + { "Percent", new BCValueType( "Byte", "%", 1.5625 ) }, + { "AssInit", new BCValueType( "Byte", "", 1.0, 0 ,4 ) }, + { "Assist", new BCValueType( "Byte", "%", 0,400 ) } /* - { "Float", new BCValueType( "", 1.5625F) }, - { "Percent",new BCValueType( "%", 1.5625 ) }, { "KWh", new BCValueType( "kwh", 1.5625 ) }, { "Watt", new BCValueType( "w", 1.5625 ) }, { "Km", new BCValueType( "km", 1.5625 ) }, @@ -184,7 +167,7 @@ std::optional BCValueType::fetchValueType( const QString& unitType { "Degree", new BCValueType( "°C", 1.0 ) }, { "SoC", new BCValueType( "%", 1.5625 ) }, { "Odo", new BCValueType( "km", 1.5625 ) }, - { "Assist", new BCValueType( "", 0 ,4 ) }, + { "Assist", new BCValueType( "%" ) }, */ }; diff --git a/bcvaluetype.h b/bcvaluetype.h index 3d94faa..b4a5ca3 100644 --- a/bcvaluetype.h +++ b/bcvaluetype.h @@ -76,9 +76,6 @@ public: BCValueType(); BCValueType( QString unitKey_, QString unitLabel_, double factor_= 1.0, optDouble min_=std::nullopt, optDouble max_= std::nullopt ); - QString readRawValueX ( const BCAbstractTransmitter& transmitter, const BCValue& value ) const; - void writeRawValueX( const BCAbstractTransmitter& transmitter, const BCValue& value ) const; - virtual QString formatValue( uint32_t value ) const; QString unitLabel; @@ -86,6 +83,8 @@ public: optDouble min; optDouble max; ReadValueFunc readValueFunc; + //ReadValueFunc readValueFunc; + static std::optional fetchValueType( const QString& unitTypeKey ); static std::optional fetchReadValueFunction( const QString& unitTypeKey ); diff --git a/bcxmlloader.cpp b/bcxmlloader.cpp index 0b487ab..3e90034 100644 --- a/bcxmlloader.cpp +++ b/bcxmlloader.cpp @@ -103,16 +103,6 @@ void BCXmlLoader::loadXmlBikeData( const QString& fileName ) printAttrs (_xml); // Wir wollen die Device-ID aus dem XML Tag ermitteln const char* deviceKey = _xml.attributes().value("Type"_L1).toLatin1().constData(); - /* - auto optDeviceID = bcDeviceEnum.keyToValue64(deviceKey); - //_currentDeviceID = BCDevice::ID( deviceID.value_or( BCDevice::ID::Invalid ) ); - if( optDeviceID.has_value()) - { - qDebug() << " --- Device: " << _xml.name() << ": " << deviceType << " : " << optDeviceID; - BCDevice::ID currentDeviceID = BCDevice::ID( optDeviceID.value() ); - loadXmlBikeDeviceData(currentDeviceID); - } - */ bool ok; auto optDeviceID = bcDeviceEnum.keyToValue(deviceKey,&ok); //_currentDeviceID = BCDevice::ID( deviceID.value_or( BCDevice::ID::Invalid ) ); diff --git a/doc/BigXionFlasher USB V 0.docx b/doc/BigXionFlasher USB V 0.docx new file mode 100644 index 0000000..749d61c Binary files /dev/null and b/doc/BigXionFlasher USB V 0.docx differ diff --git a/resources/bikeinfo.xml b/resources/bikeinfo.xml index 43d6e8c..9b55d5f 100644 --- a/resources/bikeinfo.xml +++ b/resources/bikeinfo.xml @@ -3,53 +3,44 @@ - - - - + + + - - - - - + + + + + - - + + - + - + - - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + +