cagnulein / qdomyos-zwift

Zwift bridge for smart treadmills and bike/cyclette
https://www.qzfitness.com/
GNU General Public License v3.0
389 stars 111 forks source link

[REQ] Local input for headless mode #938

Closed skoregon closed 1 year ago

skoregon commented 2 years ago

Is your feature request related to a problem? Please describe. I'd like to be able to provide input for speed/incline/stop/start status to my headless pi directly controlling the treadmill.

Describe the solution you'd like I'd like for the headless mode to accept input from an attached usb keyboard, ideally via a config file to set the keys and the corresponding action (a=incline up). More sophisticated options such a bluetooth input or game controller input would work as well and would be wireless, but are not required.

Describe alternatives you've considered Currently use GUI pulled up via VNC on a laptop next to treadmill. It works but having a treadmill next to a laptop is not ideal.

Additional context I appreciate all the effort you put into this project!

This is connected with the headless pi controller for treadmills thread. https://github.com/cagnulein/qdomyos-zwift/issues/525

cagnulein commented 2 years ago

maybe also @drmason789 could be interested on this ;)

cagnulein commented 2 years ago

@skoregon you would like to use this running QZ with the -no-gui switch, isn't it?

skoregon commented 2 years ago

@cagnulein Yes, my apologies for leaving that part out. I would like to have a headless pi using -no-gui switch but still accept keyboard (or game controller) input to trigger speed/incline/start/stop events via qdomyos->GPIO on the raspberry pi.

cagnulein commented 2 years ago

from linux this should be the solution https://stackoverflow.com/questions/7543313/how-to-handle-keypress-events-in-a-qt-console-application

cagnulein commented 2 years ago

@skoregon done, could you please try to pull and build and try?

keys:

q = speed up w = speed down a = inclination up s = inclination down

skoregon commented 2 years ago

When I run qmake I get a warning on a json file qmake WARNING: Failure to find: qdomyos-zwift_metatypes.json

If I ignore it and move forward with make -j4 I get an error in ConsoleReader.h: No such file or directory (see below).

In file included from dirconmanager.h:15, from virtualbike.h:29, from keepbike.h:30, from keepbike.cpp:1: dirconprocessor.h: In copy constructor ‘DirconProcessorCharacteristic::DirconProcessorCharacteristic(const DirconProcessorCharacteristic&)’: dirconprocessor.h:21:5: warning: base class ‘class QObject’ should be explicitly initialized in the copy constructor -Wextra] 21 | DirconProcessorCharacteristic(const DirconProcessorCharacteristic &cp) { this->operator=(cp); } | ^~~~~~~~~ g++ -c -pipe -fno-sized-deallocation -O3 -std=gnu++1z -flto -fno-fat-lto-objects -Wall -Wextra -D_REENTRANT -fPIC -DQT_DEPRECATED_WARNINGS -DIO_UNDER_QT -DSMTP_BUILD -DQT_NO_DEBUG -DQT_CHARTS_LIB -DQT_WIDGETS_LIB -DQT_LOCATION_LIB -DQT_POSITIONINGQUICK_LIB -DQT_QUICKCONTROLS2_LIB -DQT_QUICK_LIB -DQT_MULTIMEDIA_LIB -DQT_GUI_LIB -DQT_BLUETOOTH_LIB -DQT_XML_LIB -DQT_POSITIONING_LIB -DQT_QMLMODELS_LIB -DQT_QML_LIB -DQT_NETWORKAUTH_LIB -DQT_WEBSOCKETS_LIB -DQT_NETWORK_LIB -DQT_TEXTTOSPEECH_LIB -DQT_CORE_LIB -I. -Iqmdnsengine/src/include -Ifit-sdk -Ipurchasing/qmltypes -Ipurchasing/inapp -I/usr/include/aarch64-linux-gnu/qt5 -I/usr/include/aarch64-linux-gnu/qt5/QtCharts -I/usr/include/aarch64-linux-gnu/qt5/QtWidgets -I/usr/include/aarch64-linux-gnu/qt5/QtLocation -I/usr/include/aarch64-linux-gnu/qt5/QtPositioningQuick -I/usr/include/aarch64-linux-gnu/qt5/QtQuickControls2 -I/usr/include/aarch64-linux-gnu/qt5/QtQuick -I/usr/include/aarch64-linux-gnu/qt5/QtMultimedia -I/usr/include/aarch64-linux-gnu/qt5/QtGui -I/usr/include/aarch64-linux-gnu/qt5/QtBluetooth -I/usr/include/aarch64-linux-gnu/qt5/QtXml -I/usr/include/aarch64-linux-gnu/qt5/QtPositioning -I/usr/include/aarch64-linux-gnu/qt5/QtQmlModels -I/usr/include/aarch64-linux-gnu/qt5/QtQml -I/usr/include/aarch64-linux-gnu/qt5/QtNetworkAuth -I/usr/include/aarch64-linux-gnu/qt5/QtWebSockets -I/usr/include/aarch64-linux-gnu/qt5/QtNetwork -I/usr/include/aarch64-linux-gnu/qt5/QtTextToSpeech -I/usr/include/aarch64-linux-gnu/qt5/QtCore -I. -I. -I/usr/lib/aarch64-linux-gnu/qt5/mkspecs/linux-g++ -o kingsmithr2treadmill.o kingsmithr2treadmill.cpp g++ -c -pipe -fno-sized-deallocation -O3 -std=gnu++1z -flto -fno-fat-lto-objects -Wall -Wextra -D_REENTRANT -fPIC -DQT_DEPRECATED_WARNINGS -DIO_UNDER_QT -DSMTP_BUILD -DQT_NO_DEBUG -DQT_CHARTS_LIB -DQT_WIDGETS_LIB -DQT_LOCATION_LIB -DQT_POSITIONINGQUICK_LIB -DQT_QUICKCONTROLS2_LIB -DQT_QUICK_LIB -DQT_MULTIMEDIA_LIB -DQT_GUI_LIB -DQT_BLUETOOTH_LIB -DQT_XML_LIB -DQT_POSITIONING_LIB -DQT_QMLMODELS_LIB -DQT_QML_LIB -DQT_NETWORKAUTH_LIB -DQT_WEBSOCKETS_LIB -DQT_NETWORK_LIB -DQT_TEXTTOSPEECH_LIB -DQT_CORE_LIB -I. -Iqmdnsengine/src/include -Ifit-sdk -Ipurchasing/qmltypes -Ipurchasing/inapp -I/usr/include/aarch64-linux-gnu/qt5 -I/usr/include/aarch64-linux-gnu/qt5/QtCharts -I/usr/include/aarch64-linux-gnu/qt5/QtWidgets -I/usr/include/aarch64-linux-gnu/qt5/QtLocation -I/usr/include/aarch64-linux-gnu/qt5/QtPositioningQuick -I/usr/include/aarch64-linux-gnu/qt5/QtQuickControls2 -I/usr/include/aarch64-linux-gnu/qt5/QtQuick -I/usr/include/aarch64-linux-gnu/qt5/QtMultimedia -I/usr/include/aarch64-linux-gnu/qt5/QtGui -I/usr/include/aarch64-linux-gnu/qt5/QtBluetooth -I/usr/include/aarch64-linux-gnu/qt5/QtXml -I/usr/include/aarch64-linux-gnu/qt5/QtPositioning -I/usr/include/aarch64-linux-gnu/qt5/QtQmlModels -I/usr/include/aarch64-linux-gnu/qt5/QtQml -I/usr/include/aarch64-linux-gnu/qt5/QtNetworkAuth -I/usr/include/aarch64-linux-gnu/qt5/QtWebSockets -I/usr/include/aarch64-linux-gnu/qt5/QtNetwork -I/usr/include/aarch64-linux-gnu/qt5/QtTextToSpeech -I/usr/include/aarch64-linux-gnu/qt5/QtCore -I. -I. -I/usr/lib/aarch64-linux-gnu/qt5/mkspecs/linux-g++ -o main.o main.cpp main.cpp:7:10: fatal error: ConsoleReader.h: No such file or directory 7 | #include "ConsoleReader.h" | ^~~~~ compilation terminated. make: [Makefile:14043: main.o] Error 1 make: Waiting for unfinished jobs.... keepbike.cpp: In member function ‘void keepbike::forceResistance(resistance_t)’: keepbike.cpp:75:13: warning: unused variable ‘down’ [-Wunused-variable] 75 | uint8_t down[] = {0x5b, 0x02, 0xf1, 0x03, 0x5d}; | ^~~~ keepbike.cpp:73:45: warning: unused parameter ‘requestResistance’ [-Wunused-parameter] 73 | void keepbike::forceResistance(resistance_t requestResistance) { | ~~~^~~~~~~ In file included from dirconmanager.h:15, from virtualbike.h:29, from kingsmithr1protreadmill.h:31, from kingsmithr1protreadmill.cpp:1: dirconprocessor.h: In copy constructor ‘DirconProcessorCharacteristic::DirconProcessorCharacteristic(const DirconProcessorCharacteristic&)’: dirconprocessor.h:21:5: warning: base class ‘class QObject’ should be explicitly initialized in the copy constructor -Wextra] 21 | DirconProcessorCharacteristic(const DirconProcessorCharacteristic &cp) { this->operator=(cp); } | ^~~~~~~~~ In file included from dirconmanager.h:15, from virtualbike.h:29, from kingsmithr2treadmill.h:32, from kingsmithr2treadmill.cpp:1: dirconprocessor.h: In copy constructor ‘DirconProcessorCharacteristic::DirconProcessorCharacteristic(const DirconProcessorCharacteristic&)’: dirconprocessor.h:21:5: warning: base class ‘class QObject’ should be explicitly initialized in the copy constructor -Wextra] 21 | DirconProcessorCharacteristic(const DirconProcessorCharacteristic &cp) { this->operator=(cp); } | ^~~~~~~~~ kingsmithr1protreadmill.cpp: In member function ‘void kingsmithr1protreadmill::updateDisplay(uint16_t)’: kingsmithr1protreadmill.cpp:74:54: warning: unused parameter ‘elapsed’ [-Wunused-parameter] 74 | void kingsmithr1protreadmill::updateDisplay(uint16_t elapsed) {} | ~~~^~~~~ kingsmithr1protreadmill.cpp: In member function ‘void kingsmithr1protreadmill::btinit(bool)’: kingsmithr1protreadmill.cpp:379:43: warning: unused parameter ‘startTape’ [-Wunused-parameter] 379 | void kingsmithr1protreadmill::btinit(bool startTape) { | ~^~~~~ kingsmithr2treadmill.cpp: In member function ‘void kingsmithr2treadmill::updateDisplay(uint16_t)’: kingsmithr2treadmill.cpp:89:51: warning: unused parameter ‘elapsed’ [-Wunused-parameter] 89 | void kingsmithr2treadmill::updateDisplay(uint16_t elapsed) {} | ~~~^~~~~ kingsmithr2treadmill.cpp: In member function ‘void kingsmithr2treadmill::characteristicChanged(const QLowEnergyCharacteristic&, const QByteArray&)’: kingsmithr2treadmill.cpp:272:67: warning: ‘QString::SkipEmptyParts’ is deprecated [-Wdeprecated-declarations] 272 | QStringList _props = data.split(QStringLiteral(" "), QString::SkipEmptyParts); | ^~~~~~ In file included from /usr/include/aarch64-linux-gnu/qt5/QtCore/qobject.h:47, from /usr/include/aarch64-linux-gnu/qt5/QtCore/QObject:1, from /usr/include/aarch64-linux-gnu/qt5/QtBluetooth/qbluetoothdevicediscoveryagent.h:46, from /usr/include/aarch64-linux-gnu/qt5/QtBluetooth/QBluetoothDeviceDiscoveryAgent:1, from kingsmithr2treadmill.h:4, from kingsmithr2treadmill.cpp:1: /usr/include/aarch64-linux-gnu/qt5/QtCore/qstring.h:605:9: note: declared here 605 | SkipEmptyParts Q_DECL_ENUMERATOR_DEPRECATED | ^~~~~~ kingsmithr2treadmill.cpp:272:67: warning: ‘QString::SkipEmptyParts’ is deprecated [-Wdeprecated-declarations] 272 | QStringList _props = data.split(QStringLiteral(" "), QString::SkipEmptyParts); | ^~~~~~ In file included from /usr/include/aarch64-linux-gnu/qt5/QtCore/qobject.h:47, from /usr/include/aarch64-linux-gnu/qt5/QtCore/QObject:1, from /usr/include/aarch64-linux-gnu/qt5/QtBluetooth/qbluetoothdevicediscoveryagent.h:46, from /usr/include/aarch64-linux-gnu/qt5/QtBluetooth/QBluetoothDeviceDiscoveryAgent:1, from kingsmithr2treadmill.h:4, from kingsmithr2treadmill.cpp:1: /usr/include/aarch64-linux-gnu/qt5/QtCore/qstring.h:605:9: note: declared here 605 | SkipEmptyParts Q_DECL_ENUMERATOR_DEPRECATED | ^~~~~~ kingsmithr2treadmill.cpp:272:81: warning: ‘QStringList QString::split(const QString&, QString::SplitBehavior, Qt::CaseSensitivity) const’ is deprecated: Use Qt::SplitBehavior variant instead [-Wdeprecated-declarations] 272 | QStringList _props = data.split(QStringLiteral(" "), QString::SkipEmptyParts); | ^ In file included from /usr/include/aarch64-linux-gnu/qt5/QtCore/qobject.h:47, from /usr/include/aarch64-linux-gnu/qt5/QtCore/QObject:1, from /usr/include/aarch64-linux-gnu/qt5/QtBluetooth/qbluetoothdevicediscoveryagent.h:46, from /usr/include/aarch64-linux-gnu/qt5/QtBluetooth/QBluetoothDeviceDiscoveryAgent:1, from kingsmithr2treadmill.h:4, from kingsmithr2treadmill.cpp:1: /usr/include/aarch64-linux-gnu/qt5/QtCore/qstring.h:609:17: note: declared here 609 | QStringList split(const QString &sep, SplitBehavior behavior, | ^~~~~ kingsmithr2treadmill.cpp: In member function ‘void kingsmithr2treadmill::btinit(bool)’: kingsmithr2treadmill.cpp:366:40: warning: unused parameter ‘startTape’ [-Wunused-parameter] 366 | void kingsmithr2treadmill::btinit(bool startTape) { | ~^~~~~

cagnulein commented 2 years ago

sorry @skoregon pull it and build it again, i forgot the case sensitiviness on linux about the file names

skoregon commented 2 years ago

Looks like there might be one more instance hiding somewhere:

(see main.cpp:559:54: error: no matching function below)

irconprocessor.h: In copy constructor ‘DirconProcessorCharacteristic::DirconProcessorCharacteristic(const DirconProcessorCharacteristic&)’: dirconprocessor.h:21:5: warning: base class ‘class QObject’ should be explicitly initialized in the copy constructor [-Wextra] 21 DirconProcessorCharacteristic(const DirconProcessorCharacteristic &cp) { this->operator=(cp); } ^~~~~~~~~ main.cpp: In lambda function: main.cpp:395:42: warning: unused parameter ‘workout_name’ [-Wunused-parameter] 395 [&](QString workout_name, QString instructor) { app->exit(0); }); ~~^~~~~~ main.cpp:395:64: warning: unused parameter ‘instructor’ [-Wunused-parameter] 395 [&](QString workout_name, QString instructor) { app->exit(0); }); ~~^~~~ main.cpp: In function ‘int main(int, char**)’: main.cpp:559:54: error: no matching function for call to ‘ConsoleReader::ConsoleReader()’ 559 ConsoleReader *consoleReader = new ConsoleReader(); ^ In file included from main.cpp:7: ConsoleReader.h:13:5: note: candidate: ‘ConsoleReader::ConsoleReader(bluetooth*)’ 13 ConsoleReader(bluetooth *bt); ^~~~~ ConsoleReader.h:13:5: note: candidate expects 1 argument, 0 provided main.cpp:560:26: error: cannot convert ‘bluetooth*’ to ‘QThread::Priority’ 560 consoleReader->start(&bl); ^~~
bluetooth*

In file included from /usr/include/aarch64-linux-gnu/qt5/QtCore/QThread:1, from gpiotreadmill.h:29, from bluetooth.h:48, from ConsoleReader.h:4, from main.cpp:7: /usr/include/aarch64-linux-gnu/qt5/QtCore/qthread.h:132:16: note: initializing argument 1 of ‘void QThread::start(QThread::Priority)’ 132 | void start(Priority = InheritPriority); | ^~~~~~ g++ -c -pipe -fno-sized-deallocation -O3 -std=gnu++1z -flto -fno-fat-lto-objects -Wall -Wextra -D_REENTRANT -fPIC -DQT_DEPRECATED_WARNINGS -DIO_UNDER_QT -DSMTP_BUILD -DQT_NO_DEBUG -DQT_CHARTS_LIB -DQT_WIDGETS_LIB -DQT_LOCATION_LIB -DQT_POSITIONINGQUICK_LIB -DQT_QUICKCONTROLS2_LIB -DQT_QUICK_LIB -DQT_MULTIMEDIA_LIB -DQT_GUI_LIB -DQT_BLUETOOTH_LIB -DQT_XML_LIB -DQT_POSITIONING_LIB -DQT_QMLMODELS_LIB -DQT_QML_LIB -DQT_NETWORKAUTH_LIB -DQT_WEBSOCKETS_LIB -DQT_NETWORK_LIB -DQT_TEXTTOSPEECH_LIB -DQT_CORE_LIB -I. -Iqmdnsengine/src/include -Ifit-sdk -Ipurchasing/qmltypes -Ipurchasing/inapp -I/usr/include/aarch64-linux-gnu/qt5 -I/usr/include/aarch64-linux-gnu/qt5/QtCharts -I/usr/include/aarch64-linux-gnu/qt5/QtWidgets -I/usr/include/aarch64-linux-gnu/qt5/QtLocation -I/usr/include/aarch64-linux-gnu/qt5/QtPositioningQuick -I/usr/include/aarch64-linux-gnu/qt5/QtQuickControls2 -I/usr/include/aarch64-linux-gnu/qt5/QtQuick -I/usr/include/aarch64-linux-gnu/qt5/QtMultimedia -I/usr/include/aarch64-linux-gnu/qt5/QtGui -I/usr/include/aarch64-linux-gnu/qt5/QtBluetooth -I/usr/include/aarch64-linux-gnu/qt5/QtXml -I/usr/include/aarch64-linux-gnu/qt5/QtPositioning -I/usr/include/aarch64-linux-gnu/qt5/QtQmlModels -I/usr/include/aarch64-linux-gnu/qt5/QtQml -I/usr/include/aarch64-linux-gnu/qt5/QtNetworkAuth -I/usr/include/aarch64-linux-gnu/qt5/QtWebSockets -I/usr/include/aarch64-linux-gnu/qt5/QtNetwork -I/usr/include/aarch64-linux-gnu/qt5/QtTextToSpeech -I/usr/include/aarch64-linux-gnu/qt5/QtCore -I. -I. -I/usr/lib/aarch64-linux-gnu/qt5/mkspecs/linux-g++ -o nautiluselliptical.o nautiluselliptical.cpp make: [Makefile:14158: main.o] Error 1 make: Waiting for unfinished jobs.... In file included from dirconmanager.h:15, from virtualbike.h:29, from nautiluselliptical.h:30, from nautiluselliptical.cpp:1: dirconprocessor.h: In copy constructor ‘DirconProcessorCharacteristic::DirconProcessorCharacteristic(const DirconProcessorCharacteristic&)’: dirconprocessor.h:21:5: warning: base class ‘class QObject’ should be explicitly initialized in the copy constructor [-Wextra] 21 | DirconProcessorCharacteristic(const DirconProcessorCharacteristic &cp) { this->operator=(cp); } | ^~~~~~~~~

cagnulein commented 2 years ago

@skoregon Ops sorry, fixed

skoregon commented 2 years ago

@cagnulein It errored out during Make on the following line:

:(.text.startup+0x5268): undefined reference to `ConsoleReader::ConsoleReader(bluetooth*)' collect2: error: ld returned 1 exit status make: *** [Makefile:1417: qdomyos-zwift] Error 1
skoregon commented 2 years ago

In case more of the error message is needed: T_NETWORKAUTH_LIB -DQT_WEBSOCKETS_LIB -DQT_NETWORK_LIB -DQT_TEXTTOSPEECH_LIB -DQT_CORE_LIB -I. -Iqmdnsengine/src/include -Ifit-sdk -Ipurchasing/qmltypes -Ipurchasing/inapp -I/usr/include/arm-linux-gnueabihf/qt5 -I/usr/include/arm-linux-gnueabihf/qt5/QtCharts -I/usr/include/arm-linux-gnueabihf/qt5/QtWidgets -I/usr/include/arm-linux-gnueabihf/qt5/QtLocation -I/usr/include/arm-linux-gnueabihf/qt5/QtPositioningQuick -I/usr/include/arm-linux-gnueabihf/qt5/QtQuickControls2 -I/usr/include/arm-linux-gnueabihf/qt5/QtQuick -I/usr/include/arm-linux-gnueabihf/qt5/QtMultimedia -I/usr/include/arm-linux-gnueabihf/qt5/QtGui -I/usr/include/arm-linux-gnueabihf/qt5/QtBluetooth -I/usr/include/arm-linux-gnueabihf/qt5/QtXml -I/usr/include/arm-linux-gnueabihf/qt5/QtPositioning -I/usr/include/arm-linux-gnueabihf/qt5/QtQmlModels -I/usr/include/arm-linux-gnueabihf/qt5/QtQml -I/usr/include/arm-linux-gnueabihf/qt5/QtNetworkAuth -I/usr/include/arm-linux-gnueabihf/qt5/QtWebSockets -I/usr/include/arm-linux-gnueabihf/qt5/QtNetwork -I/usr/include/arm-linux-gnueabihf/qt5/QtTextToSpeech -I/usr/include/arm-linux-gnueabihf/qt5/QtCore -I. -I. -I/usr/lib/arm-linux-gnueabihf/qt5/mkspecs/linux-g++ -o moc_inapptransaction.o moc_inapptransaction.cpp g++ -Wl,-O1 -s -pipe -fno-sized-deallocation -O3 -std=gnu++1z -flto -fno-fat-lto-objects -fuse-linker-plugin -Wl,-rpath-link,/usr/lib/arm-linux-gnueabihf -fPIC -o qdomyos-zwift PathController.o characteristicnotifier2a53.o characteristicnotifier2a5b.o characteristicnotifier2acc.o characteristicnotifier2acd.o characteristicnotifier2ad9.o ConsoleReader.o fakeelliptical.o faketreadmill.o kmlworkout.o nautilusbike.o nordictrackelliptical.o nordictrackifitadbbike.o nordictrackifitadbtreadmill.o octanetreadmill.o proformellipticaltrainer.o proformrower.o proformwifibike.o proformwifitreadmill.o abstractserver.o bitmap.o browser.o cache.o dns.o hostname.o mdns.o message.o prober.o provider.o query.o record.o resolver.o server.o service.o activiotreadmill.o bhfitnesselliptical.o bike.o bluetooth.o bluetoothdevice.o characteristicnotifier2a37.o characteristicnotifier2a63.o characteristicnotifier2ad2.o characteristicwriteprocessor2ad9.o bowflext216treadmill.o bowflextreadmill.o chronobike.o concept2skierg.o cscbike.o dirconmanager.o dirconpacket.o dirconprocessor.o domyoselliptical.o domyosrower.o domyostreadmill.o echelonconnectsport.o echelonrower.o echelonstride.o eliterizer.o elitesterzosmart.o elliptical.o eslinkertreadmill.o fakebike.o filedownloader.o fitmetria_fanfit.o fitplusbike.o fitshowtreadmill.o fit.o fit_accumulated_field.o fit_accumulator.o fit_buffer_encode.o fit_buffered_mesg_broadcaster.o fit_buffered_record_mesg_broadcaster.o fit_crc.o fit_date_time.o fit_decode.o fit_developer_field.o fit_developer_field_definition.o fit_developer_field_description.o fit_encode.o fit_factory.o fit_field.o fit_field_base.o fit_field_definition.o fit_mesg.o fit_mesg_broadcaster.o fit_mesg_definition.o fit_mesg_with_event_broadcaster.o fit_profile.o fit_protocol_validator.o fit_unicode.o flywheelbike.o ftmsbike.o ftmsrower.o gpiotreadmill.o gpx.o heartratebelt.o homefitnessbuddy.o homeform.o horizongr7bike.o horizontreadmill.o iconceptbike.o inspirebike.o keepawakehelper.o keepbike.o kingsmithr1protreadmill.o kingsmithr2treadmill.o main.o mcfbike.o metric.o nautiluselliptical.o nautilustreadmill.o npecablebike.o pafersbike.o paferstreadmill.o peloton.o powerzonepack.o proformbike.o proformelliptical.o proformtreadmill.o qfit.o renphobike.o rower.o schwinnic4bike.o screencapture.o sessionline.o shuaa5treadmill.o signalhandler.o simplecrypt.o skandikawiribike.o smartrowrower.o smartspin2k.o emailaddress.o mimeattachment.o mimecontentformatter.o mimefile.o mimehtml.o mimeinlinefile.o mimemessage.o mimemultipart.o mimepart.o mimetext.o quotedprintable.o smtpclient.o snodebike.o solebike.o soleelliptical.o solef80treadmill.o spirittreadmill.o sportsplusbike.o sportstechbike.o strydrunpowersensor.o tacxneo2.o tcpclientinfosender.o technogymmyruntreadmill.o technogymmyruntreadmillrfcomm.o templateinfosender.o templateinfosenderbuilder.o stagesbike.o toorxtreadmill.o treadmill.o truetreadmill.o trxappgateusbbike.o ultrasportbike.o virtualrower.o wahookickrsnapbike.o yesoulbike.o trainprogram.o trxappgateusbtreadmill.o virtualbike.o virtualtreadmill.o m3ibike.o domyosbike.o scanrecordresult.o zwiftworkout.o mainwindow.o charts.o inappproductqmltype.o inappstoreqmltype.o inappproduct.o inapppurchasebackend.o inappstore.o inapptransaction.o qdomyos-zwift_qmltyperegistrations.o qrc_icons.o qrc_qml.o moc_ConsoleReader.o moc_fakeelliptical.o moc_faketreadmill.o moc_nautilusbike.o moc_nordictrackelliptical.o moc_nordictrackifitadbbike.o moc_nordictrackifitadbtreadmill.o moc_octanetreadmill.o moc_proformellipticaltrainer.o moc_proformrower.o moc_proformwifibike.o moc_proformwifitreadmill.o moc_abstractserver.o moc_browser.o moc_cache.o moc_hostname.o moc_prober.o moc_provider.o moc_resolver.o moc_server.o moc_browser_p.o moc_cache_p.o moc_hostname_p.o moc_prober_p.o moc_provider_p.o moc_resolver_p.o moc_server_p.o moc_activiotreadmill.o moc_bhfitnesselliptical.o moc_bike.o moc_bluetooth.o moc_bluetoothdevice.o moc_characteristicnotifier.o moc_characteristicwriteprocessor.o moc_characteristicwriteprocessor2ad9.o moc_bowflext216treadmill.o moc_bowflextreadmill.o moc_chronobike.o moc_concept2skierg.o moc_cscbike.o moc_dirconmanager.o moc_dirconprocessor.o moc_domyoselliptical.o moc_domyosrower.o moc_domyostreadmill.o moc_echelonconnectsport.o moc_echelonrower.o moc_echelonstride.o moc_eliterizer.o moc_elitesterzosmart.o moc_elliptical.o moc_eslinkertreadmill.o moc_fakebike.o moc_filedownloader.o moc_fitmetria_fanfit.o moc_fitplusbike.o moc_ftmsrower.o moc_gpiotreadmill.o moc_homefitnessbuddy.o moc_horizongr7bike.o moc_iconceptbike.o moc_keepbike.o moc_kingsmithr1protreadmill.o moc_kingsmithr2treadmill.o moc_m3ibike.o moc_fitshowtreadmill.o moc_flywheelbike.o moc_ftmsbike.o moc_heartratebelt.o moc_homeform.o moc_horizontreadmill.o moc_inspirebike.o moc_material.o moc_mcfbike.o moc_nautiluselliptical.o moc_nautilustreadmill.o moc_npecablebike.o moc_pafersbike.o moc_paferstreadmill.o moc_peloton.o moc_powerzonepack.o moc_proformbike.o moc_proformelliptical.o moc_proformtreadmill.o moc_qfit.o moc_renphobike.o moc_rower.o moc_schwinnic4bike.o moc_screencapture.o moc_shuaa5treadmill.o moc_skandikawiribike.o moc_smartrowrower.o moc_smartspin2k.o moc_emailaddress.o moc_mimeattachment.o moc_mimecontentformatter.o moc_mimefile.o moc_mimehtml.o moc_mimemultipart.o moc_mimepart.o moc_quotedprintable.o moc_smtpclient.o moc_snodebike.o moc_solebike.o moc_soleelliptical.o moc_solef80treadmill.o moc_spirittreadmill.o moc_sportsplusbike.o moc_sportstechbike.o moc_strydrunpowersensor.o moc_tacxneo2.o moc_tcpclientinfosender.o moc_technogymmyruntreadmill.o moc_technogymmyruntreadmillrfcomm.o moc_templateinfosender.o moc_templateinfosenderbuilder.o moc_stagesbike.o moc_toorxtreadmill.o moc_gpx.o moc_treadmill.o moc_mainwindow.o moc_trainprogram.o moc_truetreadmill.o moc_trxappgateusbbike.o moc_trxappgateusbtreadmill.o moc_ultrasportbike.o moc_virtualbike.o moc_virtualrower.o moc_virtualtreadmill.o moc_domyosbike.o moc_wahookickrsnapbike.o moc_wobjectdefs.o moc_yesoulbike.o moc_charts.o moc_inappproductqmltype.o moc_inappstoreqmltype.o moc_inappproduct.o moc_inapppurchasebackend.o moc_inappstore.o moc_inapptransaction.o -lwiringPi /usr/lib/arm-linux-gnueabihf/libQt5Charts.so /usr/lib/arm-linux-gnueabihf/libQt5Widgets.so /usr/lib/arm-linux-gnueabihf/libQt5Location.so /usr/lib/arm-linux-gnueabihf/libQt5PositioningQuick.so /usr/lib/arm-linux-gnueabihf/libQt5QuickControls2.so /usr/lib/arm-linux-gnueabihf/libQt5Quick.so /usr/lib/arm-linux-gnueabihf/libQt5Multimedia.so /usr/lib/arm-linux-gnueabihf/libQt5Gui.so /usr/lib/arm-linux-gnueabihf/libQt5Bluetooth.so /usr/lib/arm-linux-gnueabihf/libQt5Xml.so /usr/lib/arm-linux-gnueabihf/libQt5Positioning.so /usr/lib/arm-linux-gnueabihf/libQt5QmlModels.so /usr/lib/arm-linux-gnueabihf/libQt5Qml.so /usr/lib/arm-linux-gnueabihf/libQt5NetworkAuth.so /usr/lib/arm-linux-gnueabihf/libQt5WebSockets.so /usr/lib/arm-linux-gnueabihf/libQt5Network.so /usr/lib/arm-linux-gnueabihf/libQt5TextToSpeech.so /usr/lib/arm-linux-gnueabihf/libQt5Core.so -lGLESv2 -lpthread -latomic /usr/bin/ld: /tmp/qdomyos-zwift.xL5612.ltrans39.ltrans.o: in function `main':

:(.text.startup+0x5268): undefined reference to `ConsoleReader::ConsoleReader(bluetooth*)' collect2: error: ld returned 1 exit status make: *** [Makefile:1417: qdomyos-zwift] Error 1
cagnulein commented 2 years ago

@skoregon i found an issue on a call but it's not releated to the linker issue. I suggest to pull it again, make clean and make again, i guess something was dirty in the compiler cache. Let me know

skoregon commented 2 years ago

@cagnulein I get the same error. I am trying to compile it on a Pi zero W if that matters. See attached for the full log. I am just using "make" not "make -j4". I am running the Lite version of the OS. Are there other changes I need to make to get it to compile on a pi zero?

pi@raspberrypi:~/qdomyos-zwift/src $ cat /etc/os-release PRETTY_NAME="Raspbian GNU/Linux 11 (bullseye)" NAME="Raspbian GNU/Linux" VERSION_ID="11" VERSION="11 (bullseye)" VERSION_CODENAME=bullseye ID=raspbian ID_LIKE=debian HOME_URL="http://www.raspbian.org/" SUPPORT_URL="http://www.raspbian.org/RaspbianForums" BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

pi@raspberrypi:~/qdomyos-zwift/src $ cat /sys/firmware/devicetree/base/model Raspberry Pi Zero W Rev 1.1

results.txt

shoulih commented 2 years ago

WARNING: Failure to find: qdomyos-zwift_metatypes.json

is it Ok to ignore this WARNING ?

cagnulein commented 2 years ago

WARNING: Failure to find: qdomyos-zwift_metatypes.json

is it Ok to ignore this WARNING ?

yes it's safe, i'm checking the log

cagnulein commented 2 years ago

I guess I fixed it now. It was always an issue about uppercase and undercase of the files. Do a

make clean qmake make -j2

Let me know and sorry for the issues @shoulih

cagnulein commented 2 years ago

@skoregon

shoulih commented 2 years ago

I guess I fixed it now. It was always an issue about uppercase and undercase of the files. Do a

make clean qmake make -j2

Let me know and sorry for the issues @shoulih

still getting this WARMING:

WARNING: Failure to find: qdomyos-zwift_metatypes.json

root@DietPi:~/qdomyos-zwift# git status On branch master Your branch is up to date with 'origin/master'.

where is file "qdomyos-zwift_metatypes.json" located?

cagnulein commented 2 years ago

@shoulih yes the warning is ok. is it building now?

skoregon commented 2 years ago

@cagnulein Sadly still errors out.

/usr/lib/qt5/bin/qmltyperegistrar --generate-qmltypes=qdomyos-zwift.qmltypes --import-name=org.cagnulein.qdomyoszwift --major-version=1 --minor-version=0 --foreign-types=/usr/lib/arm-linux-gnueabihf/metatypes/qt5charts_metatypes.json,/usr/lib/arm-linux-gnueabihf/metatypes/qt5widgets_metatypes.json,/usr/lib/arm-linux-gnueabihf/metatypes/qt5location_metatypes.json,/usr/lib/arm-linux-gnueabihf/metatypes/qt5positioningquick_metatypes.json,/usr/lib/arm-linux-gnueabihf/metatypes/qt5quickcontrols2_metatypes.json,/usr/lib/arm-linux-gnueabihf/metatypes/qt5quick_metatypes.json,/usr/lib/arm-linux-gnueabihf/metatypes/qt5multimedia_metatypes.json,/usr/lib/arm-linux-gnueabihf/metatypes/qt5gui_metatypes.json,/usr/lib/arm-linux-gnueabihf/metatypes/qt5bluetooth_metatypes.json,/usr/lib/arm-linux-gnueabihf/metatypes/qt5concurrent_metatypes.json,/usr/lib/arm-linux-gnueabihf/metatypes/qt5dbus_metatypes.json,/usr/lib/arm-linux-gnueabihf/metatypes/qt5qmlmodels_metatypes.json,/usr/lib/arm-linux-gnueabihf/metatypes/qt5qml_metatypes.json,/usr/lib/arm-linux-gnueabihf/metatypes/qt5networkauth_metatypes.json,/usr/lib/arm-linux-gnueabihf/metatypes/qt5websockets_metatypes.json,/usr/lib/arm-linux-gnueabihf/metatypes/qt5network_metatypes.json,/usr/lib/arm-linux-gnueabihf/metatypes/qt5xml_metatypes.json,/usr/lib/arm-linux-gnueabihf/metatypes/qt5positioning_metatypes.json,/usr/lib/arm-linux-gnueabihf/metatypes/qt5texttospeech_metatypes.json,/usr/lib/arm-linux-gnueabihf/metatypes/qt5core_metatypes.json,/usr/lib/arm-linux-gnueabihf/metatypes/qt5quicktemplates2_metatypes.json -o qdomyos-zwift_qmltyperegistrations.cpp qdomyos-zwift_metatypes.json Cannot open foreign types file /usr/lib/arm-linux-gnueabihf/metatypes/qt5charts_metatypes.json Cannot open foreign types file /usr/lib/arm-linux-gnueabihf/metatypes/qt5location_metatypes.json Cannot open foreign types file /usr/lib/arm-linux-gnueabihf/metatypes/qt5positioningquick_metatypes.json Cannot open foreign types file /usr/lib/arm-linux-gnueabihf/metatypes/qt5quickcontrols2_metatypes.json Cannot open foreign types file /usr/lib/arm-linux-gnueabihf/metatypes/qt5multimedia_metatypes.json Cannot open foreign types file /usr/lib/arm-linux-gnueabihf/metatypes/qt5bluetooth_metatypes.json Cannot open foreign types file /usr/lib/arm-linux-gnueabihf/metatypes/qt5concurrent_metatypes.json Cannot open foreign types file /usr/lib/arm-linux-gnueabihf/metatypes/qt5dbus_metatypes.json Cannot open foreign types file /usr/lib/arm-linux-gnueabihf/metatypes/qt5networkauth_metatypes.json Cannot open foreign types file /usr/lib/arm-linux-gnueabihf/metatypes/qt5websockets_metatypes.json Cannot open foreign types file /usr/lib/arm-linux-gnueabihf/metatypes/qt5network_metatypes.json Cannot open foreign types file /usr/lib/arm-linux-gnueabihf/metatypes/qt5xml_metatypes.json Cannot open foreign types file /usr/lib/arm-linux-gnueabihf/metatypes/qt5positioning_metatypes.json Cannot open foreign types file /usr/lib/arm-linux-gnueabihf/metatypes/qt5texttospeech_metatypes.json Cannot open foreign types file /usr/lib/arm-linux-gnueabihf/metatypes/qt5quicktemplates2_metatypes.json g++ -c -pipe -fno-sized-deallocation -O3 -std=gnu++1z -flto -fno-fat-lto-objects -Wall -Wextra -D_REENTRANT -fPIC -DQT_DEPRECATED_WARNINGS -DIO_UNDER_QT -DSMTP_BUILD -DQT_NO_DEBUG -DQT_CHARTS_LIB -DQT_WIDGETS_LIB -DQT_LOCATION_LIB -DQT_POSITIONINGQUICK_LIB -DQT_QUICKCONTROLS2_LIB -DQT_QUICK_LIB -DQT_MULTIMEDIA_LIB -DQT_GUI_LIB -DQT_BLUETOOTH_LIB -DQT_XML_LIB -DQT_POSITIONING_LIB -DQT_QMLMODELS_LIB -DQT_QML_LIB -DQT_NETWORKAUTH_LIB -DQT_WEBSOCKETS_LIB -DQT_NETWORK_LIB -DQT_TEXTTOSPEECH_LIB -DQT_CORE_LIB -I. -Iqmdnsengine/src/include -Ifit-sdk -Ipurchasing/qmltypes -Ipurchasing/inapp -I/usr/include/arm-linux-gnueabihf/qt5 -I/usr/include/arm-linux-gnueabihf/qt5/QtCharts -I/usr/include/arm-linux-gnueabihf/qt5/QtWidgets -I/usr/include/arm-linux-gnueabihf/qt5/QtLocation -I/usr/include/arm-linux-gnueabihf/qt5/QtPositioningQuick -I/usr/include/arm-linux-gnueabihf/qt5/QtQuickControls2 -I/usr/include/arm-linux-gnueabihf/qt5/QtQuick -I/usr/include/arm-linux-gnueabihf/qt5/QtMultimedia -I/usr/include/arm-linux-gnueabihf/qt5/QtGui -I/usr/include/arm-linux-gnueabihf/qt5/QtBluetooth -I/usr/include/arm-linux-gnueabihf/qt5/QtXml -I/usr/include/arm-linux-gnueabihf/qt5/QtPositioning -I/usr/include/arm-linux-gnueabihf/qt5/QtQmlModels -I/usr/include/arm-linux-gnueabihf/qt5/QtQml -I/usr/include/arm-linux-gnueabihf/qt5/QtNetworkAuth -I/usr/include/arm-linux-gnueabihf/qt5/QtWebSockets -I/usr/include/arm-linux-gnueabihf/qt5/QtNetwork -I/usr/include/arm-linux-gnueabihf/qt5/QtTextToSpeech -I/usr/include/arm-linux-gnueabihf/qt5/QtCore -I. -I. -I/usr/lib/arm-linux-gnueabihf/qt5/mkspecs/linux-g++ -o qdomyos-zwift_qmltyperegistrations.o qdomyos-zwift_qmltyperegistrations.cpp g++ -Wl,-O1 -s -pipe -fno-sized-deallocation -O3 -std=gnu++1z -flto -fno-fat-lto-objects -fuse-linker-plugin -Wl,-rpath-link,/usr/lib/arm-linux-gnueabihf -fPIC -o qdomyos-zwift PathController.o characteristicnotifier2a53.o characteristicnotifier2a5b.o characteristicnotifier2acc.o characteristicnotifier2acd.o characteristicnotifier2ad9.o ConsoleReader.o fakeelliptical.o faketreadmill.o kmlworkout.o nautilusbike.o nordictrackelliptical.o nordictrackifitadbbike.o nordictrackifitadbtreadmill.o octanetreadmill.o proformellipticaltrainer.o proformrower.o proformwifibike.o proformwifitreadmill.o abstractserver.o bitmap.o browser.o cache.o dns.o hostname.o mdns.o message.o prober.o provider.o query.o record.o resolver.o server.o service.o activiotreadmill.o bhfitnesselliptical.o bike.o bluetooth.o bluetoothdevice.o characteristicnotifier2a37.o characteristicnotifier2a63.o characteristicnotifier2ad2.o characteristicwriteprocessor2ad9.o bowflext216treadmill.o bowflextreadmill.o chronobike.o concept2skierg.o cscbike.o dirconmanager.o dirconpacket.o dirconprocessor.o domyoselliptical.o domyosrower.o domyostreadmill.o echelonconnectsport.o echelonrower.o echelonstride.o eliterizer.o elitesterzosmart.o elliptical.o eslinkertreadmill.o fakebike.o filedownloader.o fitmetria_fanfit.o fitplusbike.o fitshowtreadmill.o fit.o fit_accumulated_field.o fit_accumulator.o fit_buffer_encode.o fit_buffered_mesg_broadcaster.o fit_buffered_record_mesg_broadcaster.o fit_crc.o fit_date_time.o fit_decode.o fit_developer_field.o fit_developer_field_definition.o fit_developer_field_description.o fit_encode.o fit_factory.o fit_field.o fit_field_base.o fit_field_definition.o fit_mesg.o fit_mesg_broadcaster.o fit_mesg_definition.o fit_mesg_with_event_broadcaster.o fit_profile.o fit_protocol_validator.o fit_unicode.o flywheelbike.o ftmsbike.o ftmsrower.o gpiotreadmill.o gpx.o heartratebelt.o homefitnessbuddy.o homeform.o horizongr7bike.o horizontreadmill.o iconceptbike.o inspirebike.o keepawakehelper.o keepbike.o kingsmithr1protreadmill.o kingsmithr2treadmill.o main.o mcfbike.o metric.o nautiluselliptical.o nautilustreadmill.o npecablebike.o pafersbike.o paferstreadmill.o peloton.o powerzonepack.o proformbike.o proformelliptical.o proformtreadmill.o qfit.o renphobike.o rower.o schwinnic4bike.o screencapture.o sessionline.o shuaa5treadmill.o signalhandler.o simplecrypt.o skandikawiribike.o smartrowrower.o smartspin2k.o emailaddress.o mimeattachment.o mimecontentformatter.o mimefile.o mimehtml.o mimeinlinefile.o mimemessage.o mimemultipart.o mimepart.o mimetext.o quotedprintable.o smtpclient.o snodebike.o solebike.o soleelliptical.o solef80treadmill.o spirittreadmill.o sportsplusbike.o sportstechbike.o strydrunpowersensor.o tacxneo2.o tcpclientinfosender.o technogymmyruntreadmill.o technogymmyruntreadmillrfcomm.o templateinfosender.o templateinfosenderbuilder.o stagesbike.o toorxtreadmill.o treadmill.o truetreadmill.o trxappgateusbbike.o ultrasportbike.o virtualrower.o wahookickrsnapbike.o yesoulbike.o trainprogram.o trxappgateusbtreadmill.o virtualbike.o virtualtreadmill.o m3ibike.o domyosbike.o scanrecordresult.o zwiftworkout.o mainwindow.o charts.o inappproductqmltype.o inappstoreqmltype.o inappproduct.o inapppurchasebackend.o inappstore.o inapptransaction.o qdomyos-zwift_qmltyperegistrations.o qrc_icons.o qrc_qml.o moc_ConsoleReader.o moc_fakeelliptical.o moc_faketreadmill.o moc_nautilusbike.o moc_nordictrackelliptical.o moc_nordictrackifitadbbike.o moc_nordictrackifitadbtreadmill.o moc_octanetreadmill.o moc_proformellipticaltrainer.o moc_proformrower.o moc_proformwifibike.o moc_proformwifitreadmill.o moc_abstractserver.o moc_browser.o moc_cache.o moc_hostname.o moc_prober.o moc_provider.o moc_resolver.o moc_server.o moc_browser_p.o moc_cache_p.o moc_hostname_p.o moc_prober_p.o moc_provider_p.o moc_resolver_p.o moc_server_p.o moc_activiotreadmill.o moc_bhfitnesselliptical.o moc_bike.o moc_bluetooth.o moc_bluetoothdevice.o moc_characteristicnotifier.o moc_characteristicwriteprocessor.o moc_characteristicwriteprocessor2ad9.o moc_bowflext216treadmill.o moc_bowflextreadmill.o moc_chronobike.o moc_concept2skierg.o moc_cscbike.o moc_dirconmanager.o moc_dirconprocessor.o moc_domyoselliptical.o moc_domyosrower.o moc_domyostreadmill.o moc_echelonconnectsport.o moc_echelonrower.o moc_echelonstride.o moc_eliterizer.o moc_elitesterzosmart.o moc_elliptical.o moc_eslinkertreadmill.o moc_fakebike.o moc_filedownloader.o moc_fitmetria_fanfit.o moc_fitplusbike.o moc_ftmsrower.o moc_gpiotreadmill.o moc_homefitnessbuddy.o moc_horizongr7bike.o moc_iconceptbike.o moc_keepbike.o moc_kingsmithr1protreadmill.o moc_kingsmithr2treadmill.o moc_m3ibike.o moc_fitshowtreadmill.o moc_flywheelbike.o moc_ftmsbike.o moc_heartratebelt.o moc_homeform.o moc_horizontreadmill.o moc_inspirebike.o moc_material.o moc_mcfbike.o moc_nautiluselliptical.o moc_nautilustreadmill.o moc_npecablebike.o moc_pafersbike.o moc_paferstreadmill.o moc_peloton.o moc_powerzonepack.o moc_proformbike.o moc_proformelliptical.o moc_proformtreadmill.o moc_qfit.o moc_renphobike.o moc_rower.o moc_schwinnic4bike.o moc_screencapture.o moc_shuaa5treadmill.o moc_skandikawiribike.o moc_smartrowrower.o moc_smartspin2k.o moc_emailaddress.o moc_mimeattachment.o moc_mimecontentformatter.o moc_mimefile.o moc_mimehtml.o moc_mimemultipart.o moc_mimepart.o moc_quotedprintable.o moc_smtpclient.o moc_snodebike.o moc_solebike.o moc_soleelliptical.o moc_solef80treadmill.o moc_spirittreadmill.o moc_sportsplusbike.o moc_sportstechbike.o moc_strydrunpowersensor.o moc_tacxneo2.o moc_tcpclientinfosender.o moc_technogymmyruntreadmill.o moc_technogymmyruntreadmillrfcomm.o moc_templateinfosender.o moc_templateinfosenderbuilder.o moc_stagesbike.o moc_toorxtreadmill.o moc_gpx.o moc_treadmill.o moc_mainwindow.o moc_trainprogram.o moc_truetreadmill.o moc_trxappgateusbbike.o moc_trxappgateusbtreadmill.o moc_ultrasportbike.o moc_virtualbike.o moc_virtualrower.o moc_virtualtreadmill.o moc_domyosbike.o moc_wahookickrsnapbike.o moc_wobjectdefs.o moc_yesoulbike.o moc_charts.o moc_inappproductqmltype.o moc_inappstoreqmltype.o moc_inappproduct.o moc_inapppurchasebackend.o moc_inappstore.o moc_inapptransaction.o -lwiringPi /usr/lib/arm-linux-gnueabihf/libQt5Charts.so /usr/lib/arm-linux-gnueabihf/libQt5Widgets.so /usr/lib/arm-linux-gnueabihf/libQt5Location.so /usr/lib/arm-linux-gnueabihf/libQt5PositioningQuick.so /usr/lib/arm-linux-gnueabihf/libQt5QuickControls2.so /usr/lib/arm-linux-gnueabihf/libQt5Quick.so /usr/lib/arm-linux-gnueabihf/libQt5Multimedia.so /usr/lib/arm-linux-gnueabihf/libQt5Gui.so /usr/lib/arm-linux-gnueabihf/libQt5Bluetooth.so /usr/lib/arm-linux-gnueabihf/libQt5Xml.so /usr/lib/arm-linux-gnueabihf/libQt5Positioning.so /usr/lib/arm-linux-gnueabihf/libQt5QmlModels.so /usr/lib/arm-linux-gnueabihf/libQt5Qml.so /usr/lib/arm-linux-gnueabihf/libQt5NetworkAuth.so /usr/lib/arm-linux-gnueabihf/libQt5WebSockets.so /usr/lib/arm-linux-gnueabihf/libQt5Network.so /usr/lib/arm-linux-gnueabihf/libQt5TextToSpeech.so /usr/lib/arm-linux-gnueabihf/libQt5Core.so -lGLESv2 -lpthread -latomic /usr/bin/ld: /tmp/qdomyos-zwift.P56bD9.ltrans39.ltrans.o: in functionmain':

:(.text.startup+0x5268): undefined reference to `ConsoleReader::ConsoleReader(bluetooth*)' collect2: error: ld returned 1 exit status make: *** [Makefile:1417: qdomyos-zwift] Error 1`
cagnulein commented 2 years ago

Argh @skoregon ok I will setup a raspberry myself Sorry for the troubles

cagnulein commented 2 years ago

@skoregon Same issue here, I'm fixing it

cagnulein commented 2 years ago

@skoregon Ok pull it again and build. This time it's fixed

skoregon commented 2 years ago

@cagnulein I did get a new error this time. It appears to have compiled successfully.

pi@raspberrypi:~/qdomyos-zwift/src $ sudo ./qdomyos-zwift -no-gui -heart-service OK, you are root. Segmentation fault

shoulih commented 2 years ago

@shoulih yes the warning is ok. is it building now?

built successfully on Pi 3B+ with the DietPi 8.8 now, but the binary runs very sluggish or not usable on Pi zero w. Any suggestion?

cagnulein commented 2 years ago

@shoulih yes the warning is ok. is it building now?

built successfully on Pi 3B+ with the DietPi 8.8 now, but the binary runs very sluggish or not usable on Pi zero w. Any suggestion?

probably the new keyboard thread is eating a lot of resources. let me double check it. i did the test on a raspberry 4

skoregon commented 2 years ago

Just to check, I tried setting up a different pi zero with a different microsd card with a suitable power supply and then make the gpio version. make finishing successfully (or without error) in both cases, but still has "Segmentation fault" as soon as is executed (-no-gui). I know it has previously run on a pi zero earlier in development but is it possible more recent changes in qt or other pieces are no longer compatible with pi zero?

cagnulein commented 2 years ago

no @skoregon i guess it's just a simple bug that i have to fix. unfortunately today i didn't have time. i will check it tomorrow

cagnulein commented 2 years ago

@skoregon pull it again and build it, i fixed the segmentation fault and now it should works ok with the -no-gui selector Let me know

skoregon commented 2 years ago

@cagnulein I have successfully compiled the software and it runs with sudo ./qdomyos-zwift -no-gui -gpiotreadmill and responds in the console to the key presses. It works very well! Thank you for sticking with it.

Is there a way with the keyboard input to still have it load at boot automatically? The procedure in the md file has it running as a background service so it appears not to be able to intercept keyboard commands. https://github.com/cagnulein/qdomyos-zwift/blob/master/docs/10_Installation.md

Also, is there a way to change the expected keys for each function (increase speed) without recompiling? I would like to assign it to numbers or arrow keys so I can using a 10 key pad or even just an arrow pad attached to USB.

cagnulein commented 2 years ago

I have successfully compiled the software and it runs with sudo ./qdomyos-zwift -no-gui -gpiotreadmill and responds in the console to the key presses. It works very well! Thank you for sticking with it.

Great!

Is there a way with the keyboard input to still have it load at boot automatically? The procedure in the md file has it running as a background service so it appears not to be able to intercept keyboard commands. https://github.com/cagnulein/qdomyos-zwift/blob/master/docs/10_Installation.md

The background service can't work because in order to "feel" the keyboard, the process MUST running on the current shell. One workaround could be: 1) autologin on a bash shell on startup https://raspberrypi.stackexchange.com/questions/40415/how-to-enable-auto-login 2) autostart qz on login https://unix.stackexchange.com/questions/56083/how-to-write-a-shell-script-that-gets-executed-on-login

Also, is there a way to change the expected keys for each function (increase speed) without recompiling? I would like to assign it to numbers or arrow keys so I can using a 10 key pad or even just an arrow pad attached to USB.

not yet, which would be your perfect setup? I mean do you need also the key for a target speed (for example 3 for 3km/h and so on?)? and what about the inclination?

shoulih commented 2 years ago

@skoregon pull it again and build it, i fixed the segmentation fault and now it should works ok with the -no-gui selector Let me know

For some reason, I am still getting "Segmentation fault" with -no-gui selector after the latest pull and built from your latest commits or check-ins. Do I miss anything else?

cagnulein commented 2 years ago

@shoulih are you sure you're on the last commit? show me a git log

shoulih commented 2 years ago

@cagnulein here is the git log: git_log.txt

cagnulein commented 2 years ago

@shoulih Got the issue, you're not in the gpio-treadmill branch ;)

shoulih commented 2 years ago

@shoulih Got the issue, you're not in the gpio-treadmill branch ;)

Got it; are you merging this branch fix to master?

Thanks Robert for your quick reply!

cagnulein commented 2 years ago

Yes @shoulih I will do tomorrow

shoulih commented 2 years ago

Yes @shoulih I will do tomorrow

Thanks again and good night!

cagnulein commented 2 years ago

done @shoulih

shoulih commented 2 years ago

done @shoulih

Thanks Robert and it works now! it seems that the no gui mode will be good for running on Pi zero; is there an easy way to configure the QZ settings while running on no gui mode?

cagnulein commented 2 years ago

@shoulih Which settings do you need? We should need a switch on command line for each setting. So let's start with the one that you need :)

cagnulein commented 2 years ago

@shoulih Also I guess you can edit the setting file by an editor

shoulih commented 2 years ago

that is what I need and can you please share the location of the setting file?

BTW, I don't need x11 for running QZ on no gui mode, right?

cagnulein commented 2 years ago

@shoulih Mine is under

/root/.config/Roberto\ Viola/

cagnulein commented 2 years ago

@shoulih No you don't need x11 :)

shoulih commented 2 years ago

found it

@shoulih Mine is under

/root/.config/Roberto\ Viola/

found it!

shoulih commented 2 years ago

@shoulih No you don't need x11 :)

Great and that will make Pi zero a super hero! :-)

skoregon commented 2 years ago

I have successfully compiled the software and it runs with sudo ./qdomyos-zwift -no-gui -gpiotreadmill and responds in the console to the key presses. It works very well! Thank you for sticking with it.

Great!

Is there a way with the keyboard input to still have it load at boot automatically? The procedure in the md file has it running as a background service so it appears not to be able to intercept keyboard commands. https://github.com/cagnulein/qdomyos-zwift/blob/master/docs/10_Installation.md

** > The background service can't work because in order to "feel" the keyboard, the process MUST running on the current shell. One workaround could be:

  1. autologin on a bash shell on startup https://raspberrypi.stackexchange.com/questions/40415/how-to-enable-auto-login
  2. autostart qz on login https://unix.stackexchange.com/questions/56083/how-to-write-a-shell-script-that-gets-executed-on-login**

Thank you, I will try these steps.

Also, is there a way to change the expected keys for each function (increase speed) without recompiling? I would like to assign it to numbers or arrow keys so I can using a 10 key pad or even just an arrow pad attached to USB.

> not yet, which would be your perfect setup? I mean do you need also the key for a target speed (for example 3 for 3km/h and so on?)? and what about the inclination?

I have a 6 key keyboard.
https://a.co/d/aaPm8zI

By default it is organized 123 456

I think ideally I would be able to assign it as follows: 1 set to 5 km per hour speed (3.1 mi/hour) (walk) 2 Incline up one increment 3 set to 10 km per hour speed (6.22 mi per hour) (run) 4 speed down increment 5 incline down increment 6 speed up increment

I run in -miles so I suppose that makes that setting a bit difficult if it just counts clicks.

cagnulein commented 2 years ago

done @skoregon ;)

stale[bot] commented 2 years ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.