diff --git a/aalegacy.cpp b/aalegacy.cpp index 3c9f2ff..70e84c9 100644 --- a/aalegacy.cpp +++ b/aalegacy.cpp @@ -185,102 +185,7 @@ double gSetSpeedLimit = -1, gSetMinSpeedLimit = -1, gSetThrottleSpeedLimit = -1; #define BATTERY 3 #define BIB 4 -/* -class BCThemeSwitchButton : public QPushButton { - Q_OBJECT -public: - explicit BCThemeSwitchButton(QWidget *parent = nullptr) - : QPushButton(parent), m_isDarkMode(true) - { - // 1. Visuelles Setup: Flach, keine Ränder, Hand-Cursor - setFlat(true); - setCursor(Qt::PointingHandCursor); - setFixedSize(32, 24); // Kleiner Footprint im StatusBar - - // CSS: Transparent, damit es sich nahtlos in den StatusBar einfügt - // Schriftgröße etwas erhöhen, damit die Emojis gut erkennbar sind - setStyleSheet(R"( - QPushButton { - border: none; - background-color: transparent; - font-size: 14pt; - } - QPushButton:hover { - background-color: rgba(128, 128, 128, 30); // Leichter Hover-Effekt - border-radius: 4px; - } - )"); - - // 2. Initialer Status (Startet im Dark Mode -> zeigt Mond) - updateIcon(); - - // 3. Klick verbinden - connect(this, &QPushButton::clicked, this, &BCThemeSwitchButton::toggle); - } - -signals: - void themeChanged(bool isDark); - -private slots: - void toggle() { - m_isDarkMode = !m_isDarkMode; - updateIcon(); - emit themeChanged(m_isDarkMode); - } - -private: - void updateIcon() { - // Logik: - // Ist Dark Mode an? Zeige Mond (oder Sonne, je nach Geschmack). - // Hier: Zeige das Symbol des AKTUELLEN Modus. - setText(m_isDarkMode ? "🌙" : "☀️"); - setToolTip(m_isDarkMode ? "Switch to Light Mode" : "Switch to Dark Mode"); - } - - bool m_isDarkMode; -}; -*/ - -/* -class MainWindow : public QMainWindow -{ - Q_OBJECT -public: - MainWindow(QWidget *parent = nullptr) - : QMainWindow(parent) - { - setWindowTitle("Fluent Theme Switcher"); - resize(800, 600); - - // --- STATUSBAR SETUP --- - QStatusBar *statBar = statusBar(); - - // Optional: Normale Nachricht links - statBar->showMessage("Ready"); - - // 1. Unseren Switcher erstellen - BCThemeSwitchButton *themeBtn = new BCThemeSwitchButton(this); - - // 2. WICHTIG: Rechts hinzufügen - statBar->addPermanentWidget(themeBtn); - - // 3. Signal verbinden: Button klick -> Theme ändern - connect(themeBtn, &BCThemeSwitchButton::themeChanged, this, [this](bool isDark){ - if (isDark) { - applyFluentDarkTheme(*qApp); // Funktion von vorhin - statusBar()->showMessage("Dark Mode Activated", 3000); - } else { - applyFluentLightTheme(*qApp); // Funktion von vorhin - statusBar()->showMessage("Light Mode Activated", 3000); - } - }); - - // Initiale Anwendung (Dark Mode) - applyFluentDarkTheme(*qApp); -} -}; -*/ char *getNodeName(unsigned char id) { diff --git a/bcdrivertinycan.cpp b/bcdrivertinycan.cpp index b676dfa..8453b29 100644 --- a/bcdrivertinycan.cpp +++ b/bcdrivertinycan.cpp @@ -135,19 +135,28 @@ BCDriver::DriverStateResult BCDriverTinyCan::setConsoleSlaveMode() { uint32_t console = static_cast(BCDevice::ID::Console); - uint8_t slaveFlag = static_cast(BC::ID::Cons_Status_Slave); + uint8_t slaveFlag = static_cast (BC::ID::Cons_Status_Slave); qDebug() << "XXX BCDriverTinyCan::Driver Init: putting Console in slave mode ... "; - // Console already in slave mode. good! - if( readRawByte( console, slaveFlag ) ) - return DriverState::DeviceReady; + TransmitResult isSlave = 0; + // Already slave? + isSlave = readRawByte( console, slaveFlag ); + if( isSlave.has_value() ) + { + qDebug() << "Console responded: " << isSlave.value(); + if( isSlave.value() == 1 ) + { + qDebug() << "Console already in slave mode. good!"; + return DriverState::DeviceReady; + } + } qDebug() << "BCDriverTinyCan::BCDriverTinyCan::XXX Driver Init: putting Console in slave mode ... "; unsigned int retry = cTimeOuts; - TransmitResult isSlave = 0; + do { writeRawByte( console, slaveFlag, 1 ); @@ -185,17 +194,75 @@ void BCDriverTinyCan::resetDriver() TransmitResult BCDriverTinyCan::readRawByte( uint32_t deviceID, uint8_t registerID ) const { + qDebug() << " --- CAN Read Byte: Device: "<< deviceID << " register: " << registerID << " TRY! "; + + struct TCanMsg msg; + int err, retry = 20; + int timeout = 80; + + unsigned char receipient = (unsigned char) deviceID; + unsigned char reg = (unsigned char) registerID; + + msg.MsgFlags = 0L; + msg.Id = receipient; + msg.MsgLen = 2; + msg.MsgData[0] = 0x00; + msg.MsgData[1] = reg; + + CanTransmit(0, &msg, 1); + + while(timeout-- && CanTransmitGetCount(0)) + bc::delay_millis( cTIMEOUT_MS ); + + if (timeout == -1) + qDebug() << "error: could not send value to node "; + +retry: + + timeout = 80; + while(timeout-- && !CanReceiveGetCount(0)) + bc::delay_millis( cTIMEOUT_MS ); + + if (timeout == -1) + { + qDebug() << "error: no response from node"; + return 0; + } + + if ((err = CanReceive(0, &msg, 1)) > 0) + { + qDebug() << " retry: " << retry << " BIB:" << BC::ID::ID_Bib << " msg.Id: " << msg.Id << " msg.MsgLen: " << msg.MsgLen << " msg.MsgData[1]: " << msg.MsgData[1] << " reg: " << reg; + if (--retry && (msg.Id != (uint32_t)BC::ID::ID_Bib|| msg.MsgLen != 4 || msg.MsgData[1] != reg)) + goto retry; + + if (!retry) + { + qDebug() << "XXX error: no response from node: " << err; + return 0; + } + qDebug() << " --- CAN Read Byte: Device: "<< deviceID << " register: " << registerID << " BYTE: " << (uint32_t) msg.MsgData[3]; + return (unsigned int) msg.MsgData[3]; + } + else + { + qDebug() << "Error:" < + @see www.bigxionflasher.org + + Bionx Bike Info + © 2018 Thorsten Schmidt (tschmidt@ts-soft.de) + @see www.ts-soft.de + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + @see https://github.com/bikemike/bionx-bikeinfo + + ***************************************************************************/ + + +#include + +BCThemeSwitchButton::BCThemeSwitchButton(QWidget *parent ) + : QPushButton(parent), _isDarkMode(true) +{ + // 1. Visuelles Setup: Flach, keine Ränder, Hand-Cursor + setFlat(true); + setCursor(Qt::PointingHandCursor); + setFixedSize(24, 24); // Kleiner Footprint im StatusBar + + // CSS: Transparent, damit es sich nahtlos in den StatusBar einfügt + // Schriftgröße etwas erhöhen, damit die Emojis gut erkennbar sind + setStyleSheet(R"( + QPushButton { + border: none; + background-color: transparent; + font-size: 11pt; + } + QPushButton:hover { + background-color: rgba(128, 128, 128, 30); // Leichter Hover-Effekt + border-radius: 24px; + } + )"); + + // 2. Initialer Status (Startet im Dark Mode -> zeigt Mond) + updateIcon(); + + // 3. Klick verbinden + connect(this, &QPushButton::clicked, this, &BCThemeSwitchButton::toggle); +} + + + +void BCThemeSwitchButton::toggle() +{ + _isDarkMode = !_isDarkMode; + updateIcon(); + emit themeChanged(_isDarkMode); +} + + +void BCThemeSwitchButton::updateIcon() +{ + // Logik: + // Ist Dark Mode an? Zeige Mond (oder Sonne, je nach Geschmack). + // Hier: Zeige das Symbol des AKTUELLEN Modus. + setText(_isDarkMode ? "🌙" : "☀️"); + setToolTip(_isDarkMode ? "Switch to Light Mode" : "Switch to Dark Mode"); +} + + +/// ----------------------------------------------------------------------------------- +/// ----------------------------------------------------------------------------------- + + + + +BCDriverStateWidget::BCDriverStateWidget(QWidget* parent) + : QWidget(parent) +{ + QHBoxLayout* layout = new QHBoxLayout(this); + layout->setContentsMargins(10, 2, 10, 2); + layout->setSpacing(8); + + _label = new QLabel(this); + _label->setStyleSheet("font-weight: 500;"); // Medium weight + + _led = new QLabel(this); + _led->setFixedSize(12, 12); + + layout->addWidget(_label); + layout->addWidget(_led); + + // Startzustand + onDriverStateChanged(BCDriver::DriverState::NotPresent, "Not Present"); +} + + + +// Hauptfunktion zum Setzen des Status +// 'customMessage' ist optional. Wenn leer, wird ein Standardtext genommen. +void BCDriverStateWidget::onDriverStateChanged(BCDriver::DriverState state, const QString& customMessage) +{ + _state = state; + qDebug() << " --- StateWidget: " << state << " - " << customMessage; + // Standard-Texte, falls keine Nachricht übergeben wurde + QString text = customMessage; + if (text.isEmpty()) + { + switch (_state) + { + case BCDriver::DriverState::DeviceReady: + text = "Device Ready"; + break; + + case BCDriver::DriverState::Error: + text = "Driver Error"; + break; + + default: + text = "Not Present"; + break; + } + } + _label->setText(text); + + updateStyle(); +} + + +void BCDriverStateWidget::updateStyle() +{ + QString ledStyle; + QString labelColor; + QString toolTipText; + + switch (_state) + { + case BCDriver::DriverState::DeviceReady: + // FLUENT GREEN (Success) + ledStyle = "background-color: #107C10; border: 1px solid #0E600E;#FF5F1F; #FF8C00;<- das isses #FF6700"; + labelColor = "#FFFFFF"; // Weiß (Hervorgehoben) + toolTipText = "Verbindung erfolgreich hergestellt."; + break; + + case BCDriver::DriverState::Error: + // FLUENT RED (Critical) + ledStyle = "background-color: #C42B1C; border: 1px solid #A80000;"; + labelColor = "#FF99A4"; // Ein helleres Rot für Text, damit es auf Dunkel lesbar ist + toolTipText = "Kritischer Fehler bei der Verbindung!"; + break; + + default: + // FLUENT GRAY (Neutral) + // Wir machen es dunkelgrau mit hellem Rand -> "Ausgeschaltet"-Look + ledStyle = "background-color: #3B3B3B; border: 1px solid #606060;"; + labelColor = "#9E9E9E"; // Ausgegrauter Text + toolTipText = "System ist offline."; + break; + } + + // Styles anwenden (immer rund machen) + _led->setStyleSheet(ledStyle + "border-radius: 6px;"); + + // Textfarbe setzen + _label->setStyleSheet(QString("color: %1; font-weight: %2;") + .arg(labelColor) + .arg(_state == BCDriver::DriverState::DeviceReady ? "bold" : "normal")); + + setToolTip(toolTipText); +} + + + + + diff --git a/bcguihelpers.h b/bcguihelpers.h new file mode 100644 index 0000000..4b2d480 --- /dev/null +++ b/bcguihelpers.h @@ -0,0 +1,97 @@ +/*************************************************************************** + + BionxControl + © 2025 -2026 christoph holzheuer + christoph.holzheuer@gmail.com + + Using: + + mhs_can_drv.c + © 2011 - 2023 by MHS-Elektronik GmbH & Co. KG, Germany + Klaus Demlehner, klaus@mhs-elektronik.de + @see www.mhs-elektronik.de + + Based on Bionx data type descriptions from: + + BigXionFlasher USB V 0.2.4 rev. 97 + © 2011-2013 by Thomas Koenig + @see www.bigxionflasher.org + + Bionx Bike Info + © 2018 Thorsten Schmidt (tschmidt@ts-soft.de) + @see www.ts-soft.de + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + @see https://github.com/bikemike/bionx-bikeinfo + + ***************************************************************************/ + + +#ifndef BCGUIHELPERS_H +#define BCGUIHELPERS_H + +#include +#include +#include + +#include + + +class BCThemeSwitchButton : public QPushButton +{ + Q_OBJECT + +public: + + explicit BCThemeSwitchButton(QWidget *parent = nullptr); + +signals: + + void themeChanged(bool isDark); + +private slots: + + void toggle(); + +private: + + void updateIcon(); + + bool _isDarkMode; + +}; + + + +/// ----------------------------------------------------------------------------------- +/// ----------------------------------------------------------------------------------- + + +class BCDriverStateWidget : public QWidget +{ + Q_OBJECT + +public: + + explicit BCDriverStateWidget(QWidget *parent = nullptr); + +public slots: + + // Hauptfunktion zum Setzen des Status + // 'customMessage' ist optional. Wenn leer, wird ein Standardtext genommen. + void onDriverStateChanged(BCDriver::DriverState state, const QString& customMessage = QString()); + +private: + + void updateStyle(); + + QLabel* _led; + QLabel* _label; + BCDriver::DriverState _state; + +}; + +#endif // BCGUIHELPERS_H diff --git a/bctransmitter.cpp b/bctransmitter.cpp index 9b04c27..0b45489 100644 --- a/bctransmitter.cpp +++ b/bctransmitter.cpp @@ -204,7 +204,7 @@ void BCTransmitter::processValue() TransmitResult BCTransmitter::readByteValue( uint32_t deviceID, uint8_t registerID ) { - qDebug() << " --- YES: Read ByteValue: " << registerID; + //qDebug() << " --- YES: Read ByteValue: " << registerID; // Wir lesen nur ein Byte und gut. return _canDriver->readRawByte( deviceID, registerID ); } @@ -212,7 +212,7 @@ TransmitResult BCTransmitter::readByteValue( uint32_t deviceID, uint8_t register TransmitResult BCTransmitter::readWordValue( uint32_t deviceID, uint8_t registerID ) { - qDebug() << " --- YES: Read WordValue: " << registerID; + //qDebug() << " --- YES: Read WordValue: " << registerID; uint32_t result{}; // hi byte Leseversuch. diff --git a/bcvaluemodel.cpp b/bcvaluemodel.cpp index 28dd96f..5079ce9 100644 --- a/bcvaluemodel.cpp +++ b/bcvaluemodel.cpp @@ -88,9 +88,9 @@ void BCValueModel::onValueUpdated( int row, BCValue::State state, const QString& BCValue& value = *(_valueList[row].get()); QModelIndex idx = index(row,1); - qDebug(); - qDebug() << " --- OLD:"; - value.dumpValue(); + //qDebug(); + //qDebug() << " --- OLD:"<< newVisisbleValue; + //value.dumpValue(); value.state = state; @@ -99,8 +99,8 @@ void BCValueModel::onValueUpdated( int row, BCValue::State state, const QString& value.visibleValue = newVisisbleValue; } - qDebug() << " NEW: " << newVisisbleValue << ""; - value.dumpValue(); + //qDebug() << " --- NEW: " << newVisisbleValue; + //value.dumpValue(); // wir schicken auf jeden fall einen update request emit dataChanged(idx, idx, {Qt::DisplayRole, Qt::EditRole}); diff --git a/resources/96/bottom.png b/resources/96/bottom.png deleted file mode 100644 index bf1949d..0000000 Binary files a/resources/96/bottom.png and /dev/null differ diff --git a/resources/96/browser-download.png b/resources/96/browser-download.png deleted file mode 100644 index e29f13e..0000000 Binary files a/resources/96/browser-download.png and /dev/null differ diff --git a/resources/96/cab_extract.png b/resources/96/cab_extract.png deleted file mode 100644 index c266ab8..0000000 Binary files a/resources/96/cab_extract.png and /dev/null differ diff --git a/resources/96/document-export.png b/resources/96/document-export.png deleted file mode 100644 index a48c806..0000000 Binary files a/resources/96/document-export.png and /dev/null differ diff --git a/resources/96/document-import.png b/resources/96/document-import.png deleted file mode 100644 index b74531d..0000000 Binary files a/resources/96/document-import.png and /dev/null differ diff --git a/resources/96/document-revert.png b/resources/96/document-revert.png deleted file mode 100644 index 58e62c1..0000000 Binary files a/resources/96/document-revert.png and /dev/null differ diff --git a/resources/96/document-save-as.png b/resources/96/document-save-as.png deleted file mode 100644 index 67c38ee..0000000 Binary files a/resources/96/document-save-as.png and /dev/null differ diff --git a/resources/96/document-save.png b/resources/96/document-save.png deleted file mode 100644 index e29f13e..0000000 Binary files a/resources/96/document-save.png and /dev/null differ diff --git a/resources/96/go-jump.png b/resources/96/go-jump.png deleted file mode 100644 index dde9987..0000000 Binary files a/resources/96/go-jump.png and /dev/null differ diff --git a/resources/96/gtk-apply.png b/resources/96/gtk-apply.png deleted file mode 100644 index 4d7baf1..0000000 Binary files a/resources/96/gtk-apply.png and /dev/null differ diff --git a/resources/96/gtk-goto-first-ltr.png b/resources/96/gtk-goto-first-ltr.png deleted file mode 100644 index ed710d1..0000000 Binary files a/resources/96/gtk-goto-first-ltr.png and /dev/null differ diff --git a/resources/96/gtk-goto-last-ltr.png b/resources/96/gtk-goto-last-ltr.png deleted file mode 100644 index c337a0b..0000000 Binary files a/resources/96/gtk-goto-last-ltr.png and /dev/null differ diff --git a/resources/96/gtk-revert-to-saved-ltr.png b/resources/96/gtk-revert-to-saved-ltr.png deleted file mode 100644 index 58e62c1..0000000 Binary files a/resources/96/gtk-revert-to-saved-ltr.png and /dev/null differ diff --git a/resources/96/gtk-revert-to-saved-rtl.png b/resources/96/gtk-revert-to-saved-rtl.png deleted file mode 100644 index 58e62c1..0000000 Binary files a/resources/96/gtk-revert-to-saved-rtl.png and /dev/null differ diff --git a/resources/96/gtk-save.png b/resources/96/gtk-save.png deleted file mode 100644 index e29f13e..0000000 Binary files a/resources/96/gtk-save.png and /dev/null differ diff --git a/resources/96/gtk-undo-ltr.png b/resources/96/gtk-undo-ltr.png deleted file mode 100644 index e879b42..0000000 Binary files a/resources/96/gtk-undo-ltr.png and /dev/null differ diff --git a/resources/96/object-rotate-left.png b/resources/96/object-rotate-left.png deleted file mode 100644 index 927abf5..0000000 Binary files a/resources/96/object-rotate-left.png and /dev/null differ diff --git a/resources/96/object-rotate-right.png b/resources/96/object-rotate-right.png deleted file mode 100644 index ab21f3e..0000000 Binary files a/resources/96/object-rotate-right.png and /dev/null differ diff --git a/resources/96/reload.png b/resources/96/reload.png deleted file mode 100644 index 502394b..0000000 Binary files a/resources/96/reload.png and /dev/null differ diff --git a/resources/96/rotate.png b/resources/96/rotate.png deleted file mode 100644 index ab21f3e..0000000 Binary files a/resources/96/rotate.png and /dev/null differ diff --git a/resources/96/stock_bottom.png b/resources/96/stock_bottom.png deleted file mode 100644 index bf1949d..0000000 Binary files a/resources/96/stock_bottom.png and /dev/null differ diff --git a/resources/96/stock_mail-send-receive.png b/resources/96/stock_mail-send-receive.png deleted file mode 100644 index 5be2a73..0000000 Binary files a/resources/96/stock_mail-send-receive.png and /dev/null differ diff --git a/resources/96/view-refresh96.png b/resources/96/view-refresh96.png deleted file mode 100644 index 502394b..0000000 Binary files a/resources/96/view-refresh96.png and /dev/null differ diff --git a/resources/TinyCan_812.exe b/resources/TinyCan_812.exe new file mode 100644 index 0000000..72941d6 Binary files /dev/null and b/resources/TinyCan_812.exe differ diff --git a/resources/bikeinfo.xml b/resources/bikeinfo.xml index a3319df..abb0327 100644 --- a/resources/bikeinfo.xml +++ b/resources/bikeinfo.xml @@ -1,24 +1,17 @@ - - + + + + @@ -37,6 +30,7 @@ QString ValueType; +