Compare commits

..

445 Commits

Author SHA1 Message Date
Roberto Viola
40b5a9148c workflow runs every 12 hours 2021-07-09 10:59:01 +02:00
Roberto Viola
1322f8618b export QT_DEBUG_PLUGINS=1; removed from the workflow 2021-07-09 10:51:49 +02:00
Roberto Viola
6b44a88f50 exit in case of peloton api success fixed 2021-07-09 10:34:58 +02:00
Roberto Viola
a4e3601e32 creating xvfb 2021-07-09 10:22:59 +02:00
Roberto Viola
e127394988 blaming on xcb 2021-07-09 10:12:22 +02:00
Roberto Viola
30926058f2 managing xcb issues 2021-07-09 10:05:02 +02:00
Roberto Viola
36bcfb2b40 fixed check on QNetworkReply::errorOccurred 2021-07-09 09:55:38 +02:00
Roberto Viola
b5c37a0454 fixing QNetworkReply::errorOccurred error on Qt 5.12 2021-07-09 09:50:47 +02:00
Roberto Viola
dda503e4c2 added libqt5websockets5* to workflow 2021-07-09 09:45:26 +02:00
Roberto Viola
dad2ebad86 qt packets added 2021-07-09 09:43:08 +02:00
Roberto Viola
840ba2d45f using qt5-default directly 2021-07-09 09:41:13 +02:00
Roberto Viola
5d1f895793 updated workflow build rules 2021-07-09 09:31:46 +02:00
Roberto Viola
8bd70eb227 installing libxcb 2021-07-09 09:30:43 +02:00
Roberto Viola
3bfa5fde00 root check after the parameters parsing 2021-07-09 09:16:58 +02:00
Roberto Viola
d22ce79f73 disable root check in case of test peloton api 2021-07-09 09:07:36 +02:00
Roberto Viola
fc568b1c8d still playing with github workflow 2021-07-09 09:01:22 +02:00
Roberto Viola
ae8d5f960a playing again with peloton api test case 2021-07-09 08:51:30 +02:00
Roberto Viola
46e693148f fixing speed on echelonstride 2021-07-09 08:23:11 +02:00
Roberto Viola
117d160ed5 zwift virtualbike on ios fixes 2021-07-08 21:54:18 +02:00
Roberto Viola
87d08452c0 Merge branch 'master' of https://github.com/cagnulein/qdomyos-zwift 2021-07-08 16:46:34 +02:00
Roberto Viola
12bbdb3caa fixing a bug that if the peloton cadence sensor setting was off and
nothing was connected to the virtualbike, the resistance was forced to
5.
2021-07-08 16:38:39 +02:00
Roberto Viola
5a4600732c added a test for the peloton api 2021-07-08 16:19:28 +02:00
Roberto Viola
e5ab7fb8b8 pausing the testing peloton api thing 2021-07-08 16:16:01 +02:00
Roberto Viola
cf0e76eb5d fixing test peloton api 2021-07-08 16:02:26 +02:00
Roberto Viola
aa1025dc78 fixing test peloton api 2021-07-08 15:52:26 +02:00
Roberto Viola
b97b805d9c trying to create a test case for peloton api 2021-07-08 15:35:23 +02:00
Roberto Viola
cbf642e9c7 Merge pull request #341 from lifof/codeRefactoring
First batch of code Refactoring related to Code Improvements #339
2021-07-07 15:01:24 +02:00
lifof
02c093a020 Fix:
- conflicts after effects
2021-07-07 13:55:17 +01:00
lifof
0b87993c9c Merge branch 'refs/heads/master' into codeRefactoring
Conflicts:
	src/bike.h
	src/bluetoothdevice.cpp
	src/bluetoothdevice.h
	src/domyoselliptical.cpp
	src/domyostreadmill.cpp
	src/domyostreadmill.h
	src/elliptical.cpp
	src/homeform.cpp
	src/mainwindow.cpp
	src/soleelliptical.cpp
	src/virtualbike.cpp
	src/virtualbike.h
2021-07-07 13:45:59 +01:00
Roberto Viola
82502c1f57 Merge pull request #394 from cagnulein/treadmill_as_a_bike
Treadmill as a bike
2021-07-07 13:47:07 +02:00
Roberto Viola
836b5a9c6a Merge branch 'master' into treadmill_as_a_bike 2021-07-07 13:42:36 +02:00
lifof
5d09ec0056 Update :
- rapid code refactoring
2021-07-07 11:19:27 +01:00
lifof
242ca69574 Merge branch 'refs/heads/master' into codeRefactoring
Conflicts:
	src/schwinnic4bike.cpp
2021-07-07 11:02:57 +01:00
Roberto Viola
af70bccafa Schwinn IC4 Support Mapping Bike Resistance to Peloton Resistance #392
added missing resistance conversion
2021-07-07 08:16:50 +02:00
Roberto Viola
f6ad122e12 peloton Resistance to renphobike 2021-07-07 08:14:18 +02:00
lifof
e296960798 Merge branch 'refs/heads/master' into codeRefactoring
Conflicts:
	src/bluetooth.cpp
	src/homeform.cpp
	src/homeform.h
	src/schwinnic4bike.cpp
2021-07-06 12:11:13 +01:00
lifof
0bf6f79340 Update:
- tacxneo2* refactor
2021-07-06 11:50:16 +01:00
Roberto Viola
929219771d Merge branch 'master' of https://github.com/cagnulein/qdomyos-zwift 2021-07-06 12:25:44 +02:00
Roberto Viola
539edc2c38 Schwinn IC4 Support Mapping Bike Resistance to Peloton Resistance #392 2021-07-06 12:25:16 +02:00
Youssef BEDDAD
4206cefdad Merge branch 'refs/heads/master' into codeRefactoring 2021-07-06 11:19:47 +01:00
Roberto Viola
542e7f1517 added Hammer Sole B94 #393 2021-07-06 12:05:35 +02:00
Roberto Viola
6e4b7f0e43 added the possibility to change gears with the volume keys #379 2021-07-06 12:03:41 +02:00
Roberto Viola
dea68cef94 adding a sleep during the SS2K init phase 2021-07-06 08:44:51 +02:00
Roberto Viola
8f7c243f69 added AppScreens 2021-07-05 12:20:38 +02:00
Roberto Viola
4856c9444e iOS version 2.6.60 2021-07-05 11:07:23 +02:00
lifof
b09c4b66fc Merge branch 'refs/heads/master' into codeRefactoring
Conflicts:
	src/main.cpp
2021-07-05 01:49:06 +01:00
Roberto Viola
14046ba3e3 Merge branch 'master' of https://github.com/cagnulein/qdomyos-zwift 2021-07-04 17:44:09 +02:00
Roberto Viola
947f3f39d8 trying to fixing tiles quantity on iOS. Need to be tested on Android 2021-07-04 17:43:57 +02:00
Roberto Viola
0f3b899a92 domyostreadmill: limit writing inclination only to 0.5 steps 2021-07-03 18:32:10 +02:00
lifof
2d84f7e186 Merge branch 'refs/heads/master' into codeRefactoring
Conflicts:
	src/smartspin2k.cpp
2021-07-03 13:40:30 +01:00
Roberto Viola
d42f295e83 fixed init for SS2K 2021-07-03 12:26:29 +02:00
Roberto Viola
a67996cd8a changeInclination of domyostreadmill filter for negative values 2021-07-03 12:08:27 +02:00
lifof
7c19613b24 Merge branch 'refs/heads/master' into codeRefactoring
Conflicts:
	src/bluetooth.cpp
	src/bluetooth.h
2021-07-02 23:43:16 +01:00
Roberto Viola
d02eb70412 virtual_device_force_bike setting added 2021-07-02 15:20:24 +02:00
Roberto Viola
27a22eceb3 first commit of treadmill as a bike 2021-07-02 15:04:53 +02:00
Roberto Viola
cff64b71bc Merge branch 'master' of https://github.com/cagnulein/qdomyos-zwift 2021-07-01 14:11:16 +02:00
Roberto Viola
fb93a6610c tacxneo2 added #388 2021-07-01 12:27:35 +02:00
Roberto Viola
412d8e2da7 android version 2.6.59 2021-06-30 09:57:47 +02:00
Roberto Viola
3c40972a20 ios version 2.6.59 2021-06-30 08:02:48 +02:00
Roberto Viola
bf4c21a098 peloton airdate added to the title 2021-06-29 15:45:53 +02:00
Roberto Viola
e8fd1e18fe renphobike module added 2021-06-29 15:21:04 +02:00
lifof
a98e96d036 Fixed:
- some conflict's after effects
2021-06-28 22:23:15 +01:00
lifof
5dfffae8a0 Merge branch 'refs/heads/master' into codeRefactoring
Conflicts:
	src/bike.cpp
	src/bluetooth.cpp
	src/bluetooth.h
	src/domyostreadmill.cpp
	src/homeform.cpp
	src/powerzonepack.cpp
	src/powerzonepack.h
	src/qfit.cpp
	src/smartspin2k.cpp
	src/smartspin2k.h
2021-06-28 15:21:12 +01:00
Roberto Viola
6578cd9365 trying to improve precision on distance on domyostreadmill 2021-06-28 08:49:22 +02:00
Roberto Viola
9097c2a1c4 Manage in the fit file the elapsed time and the total time differently
#386
2021-06-28 08:28:33 +02:00
Roberto Viola
6e60fb6002 WAHOO KICKR added 2021-06-28 08:10:14 +02:00
Roberto Viola
d3585052c5 fixed rounded on metrics_override_heartrate 2021-06-28 08:08:16 +02:00
Roberto Viola
c2ffd3e426 F63 treadmill connection issue fixed 2021-06-27 22:10:42 +02:00
Roberto Viola
afcaa5e894 limit ftp zone and target ftp zones to 7 as peloton 2021-06-27 15:55:09 +02:00
Roberto Viola
0800bb4345 changed the label of the SS2k settings 2021-06-25 22:22:16 +02:00
Roberto Viola
369abeac1b ss2k init phase fix 2021-06-25 21:59:46 +02:00
Roberto Viola
9c8ea4e422 Merge pull request #384 from cagnulein/smartspin2k
Smartspin2k
2021-06-25 21:52:55 +02:00
Roberto Viola
a540114d13 fix init phase on SS2K 2021-06-25 18:10:55 +02:00
Roberto Viola
e7b27a46e7 BLE_syncMode handled for smartspin2k 2021-06-25 08:07:21 +02:00
Roberto Viola
fad04cde91 fixed crash on powerzonepack 2021-06-24 15:20:14 +02:00
Roberto Viola
9e24ac97a6 resistance for smartspin2k is signed 2021-06-24 15:02:03 +02:00
Roberto Viola
7347383c21 disabling BLE_externalControl on smartspin2k 2021-06-24 14:12:03 +02:00
Roberto Viola
5e084a0367 Renpho Bike compatibility added #382 2021-06-24 08:30:28 +02:00
Roberto Viola
eeda71e51a iOS version 2.6.54 2021-06-24 08:05:45 +02:00
Roberto Viola
c3be99e606 added websocket to iOS 2021-06-23 18:03:04 +02:00
Roberto Viola
32e25f0f55 fix build issues 2021-06-23 16:10:06 +02:00
Roberto Viola
d78d6c70b9 fixed indication for smartspin2k and added the BLE_externalControl
command
2021-06-23 16:02:03 +02:00
Roberto Viola
6b43f948d5 first experimental support for echelonstride #380 2021-06-23 15:52:37 +02:00
Roberto Viola
ecd7c659ed pzp to websockets 2021-06-23 14:32:59 +02:00
Roberto Viola
5563bb9d97 first implementation of smartspin2k with custom services 2021-06-21 17:31:40 +02:00
lifof
450e52f492 Fixups for minor conflits resolving side effects 2021-06-19 22:08:33 +01:00
lifof
06863c7c62 Merge branch 'refs/heads/master' into codeRefactoring
Conflicts:
	src/bike.cpp
	src/homeform.cpp
	src/homeform.h
	src/horizontreadmill.cpp
	src/peloton.cpp
	src/peloton.h
	src/powerzonepack.cpp
2021-06-19 21:57:42 +01:00
Roberto Viola
b2969f1e85 fixed erroneous flags reading on stagesbike 2021-06-19 17:32:18 +02:00
Roberto Viola
ff2ef58424 handled horizontreadmill different services 2021-06-19 17:14:31 +02:00
Roberto Viola
87cddeca88 gears change now immediately; peloton provider added to the message box 2021-06-19 15:46:08 +02:00
Roberto Viola
0c523dcbc9 fixed issue when no pzp credentials are provided 2021-06-19 09:02:32 +02:00
lifof
7ac3a6684d Curly braces {} 2021-06-17 13:39:32 +01:00
lifof
cd9518d41c Merge branch 'refs/heads/master' into codeRefactoring
Conflicts:
	src/trxappgateusbbike.cpp
2021-06-17 13:35:58 +01:00
Roberto Viola
da140a5e6a forceResistance packet for DKN MOTION bike fixed #366 2021-06-17 13:24:37 +02:00
lifof
3f863165bf Last minute Refactoring of homeform.cpp :
- curly braces for ifs
 - QStringLiterals to some strings
2021-06-17 11:14:26 +01:00
lifof
2c2f70398f Merge branch 'refs/heads/master' into codeRefactoring
Conflicts:
	src/homeform.cpp
2021-06-17 10:40:58 +01:00
Roberto Viola
e85135261f fixed ftp range #374 2021-06-17 07:44:59 +02:00
lifof
6aac31b4d9 Code reformating and some fast refactoring 2021-06-16 15:47:02 +01:00
Youssef BEDDAD
247db96d58 fixup! Merge branch 'refs/heads/master' into codeRefactoring 2021-06-16 15:38:53 +01:00
lifof
c79ee60464 Merge branch 'refs/heads/master' into codeRefactoring 2021-06-16 15:35:28 +01:00
Roberto Viola
b6ecc93c5d fixed "double" seconds in the PZP plugin 2021-06-16 15:23:00 +02:00
Roberto Viola
355969b10f added the ability to change the value of the speed read from the
machinery (useful for treadmill uncalibrated) #373
2021-06-16 14:18:52 +02:00
Roberto Viola
00974411ab improvments on rower (fit files and more) 2021-06-16 13:59:25 +02:00
Roberto Viola
35422aeab1 added gears tile 2021-06-16 13:27:54 +02:00
lifof
f7763b289f Merge branch 'refs/heads/master' into codeRefactoring 2021-06-16 10:37:05 +01:00
Roberto Viola
6c73b2ffe0 weight loss and watt/kg fixed for m3ibike 2021-06-15 16:45:35 +02:00
lifof
117f049944 Fixups for some conflicts side effects 2021-06-15 11:37:55 +01:00
lifof
02fdd72f28 Merge branch 'refs/heads/master' into codeRefactoring 2021-06-15 11:11:11 +01:00
Roberto Viola
c21fab6c64 trying to handle different firmware for DKN MOTION #366 2021-06-15 11:04:05 +02:00
Roberto Viola
807f3a385d fixed double approximation in the FTP zones 2021-06-15 08:10:09 +02:00
lifof
7f297b7700 Merge branch 'refs/heads/master' into codeRefactoring 2021-06-14 23:08:10 +01:00
lifof
1f62e9529e Merge branch 'refs/heads/master' into codeRefactoring
- fixing some mistakes that were done during the last coflict solving ( some errornous if statments )
- @cagnulein would you mind taking a look homeform.cpp line 2062 there's a note above is it ok to replace it by that cause the analyzer is complaining about it.
2021-06-14 23:02:10 +01:00
Roberto Viola
5d9f6b1245 fixing strava export for domyostreadmill #363 2021-06-14 16:34:45 +02:00
Youssef BEDDAD
8ed26c96d4 Revert "Update qfit.cpp"
This reverts commit d21395da8a.
2021-06-14 13:36:52 +01:00
lifof
d21395da8a Update qfit.cpp
Is it correct to change these two sub sport values for the Treadmill & Elliptical
2021-06-14 13:36:12 +01:00
Roberto Viola
ab0e5f9cd2 watt/kg tile added 2021-06-14 10:08:00 +02:00
Roberto Viola
58896be47a target resistance and target cadence second lines disabled if there
aren't any data
2021-06-14 09:46:04 +02:00
lifof
3f874a61e2 Merge branch 'refs/heads/master' into codeRefactoring
- resolving conflicts & refactoring
2021-06-13 21:24:04 +01:00
Roberto Viola
a3fcc47bfd target zone added. lower and upper values added for peloton resistance
and cadence. #356 #315
2021-06-13 11:40:20 +02:00
Roberto Viola
5f0ca8682a fixed distance for smartrowrower 2021-06-13 10:59:03 +02:00
Roberto Viola
a7ac55ec80 added indoor rowing in the fit file 2021-06-13 10:55:58 +02:00
lifof
537531db09 Refactoring related to #358 2021-06-10 11:52:28 +01:00
Roberto Viola
5c71609523 Merge branch 'master' into codeRefactoring 2021-06-10 09:15:53 +02:00
Roberto Viola
8e3670be65 Added decimal point to the zone tile #359 2021-06-10 09:04:57 +02:00
lifof
f4d9475d21 Merge branch 'cagnulein:master' into codeRefactoring 2021-06-09 15:09:01 +01:00
Roberto Viola
f794f98859 Merge branch 'master' of https://github.com/cagnulein/qdomyos-zwift 2021-06-09 14:58:10 +02:00
Roberto Viola
28a3c7c94c version 2.6.45 for ios and android 2021-06-09 14:57:42 +02:00
Roberto Viola
3b86cd966d fixed domyoselliptical timing 2021-06-09 12:14:55 +02:00
Roberto Viola
7fc3ef2359 trying to fixing #342 2021-06-09 08:31:10 +02:00
Roberto Viola
e3ecec04c7 fixed proformbike resistance during a resistance change 2021-06-09 08:26:24 +02:00
lifof
b0a929bfe3 Merge branch 'refs/heads/master' into codeRefactoring 2021-06-08 17:10:40 +01:00
lifof
1e7b093941 Merge branch 'refs/heads/master' into codeRefactoring 2021-06-08 17:01:26 +01:00
Roberto Viola
98ea1f19e1 Merge branch 'master' of https://github.com/cagnulein/qdomyos-zwift 2021-06-08 16:25:48 +02:00
Roberto Viola
3e2bdec819 fixed current airtime on peloton 2021-06-08 16:19:15 +02:00
Roberto Viola
dd4273bb76 first implementation of homefitnessbuddy (NOT TESTED) 2021-06-08 14:33:08 +02:00
Roberto Viola
d1fdbb88a6 added strokes count and length and pace for rower 2021-06-08 08:57:08 +02:00
lifof
bcdd25f18e New code tranformations
- using qt5's new style connect is considered good behavior
 - using nullptr instead of 0 and NULL when dealing with pointers
 - using curly braces everytime in if and for statements is good behavior too
2021-06-07 10:51:13 +01:00
Roberto Viola
06d2f4517f Merge branch 'master' into codeRefactoring 2021-06-07 09:13:25 +02:00
Roberto Viola
21d1d3f204 smartrow rower stupid typos fixed 2021-06-07 09:12:19 +02:00
Roberto Viola
79e9b2660a Merge branch 'master' into codeRefactoring 2021-06-07 09:08:47 +02:00
Roberto Viola
32b39a8578 Merge branch 'master' of https://github.com/cagnulein/qdomyos-zwift 2021-06-07 09:02:07 +02:00
Roberto Viola
f44ac930e9 first raw implementation of smartrow rower 2021-06-07 08:58:27 +02:00
lifof
851def48bb Ninth wave of code changes
- finally figured out a way to change the qt5 connects that deal with QLowEnergyController::Error and QLowEnergyService::ServiceError from the old to new style
2021-06-06 21:30:35 +01:00
lifof
f9449f57a8 fix for android-armeabi-v7a
- complains about optimization & lto during link time - found that it had a fixed "CONFIG += optimize_size" that translates to -Oz
2021-06-06 18:31:04 +01:00
lifof
dcbc4497c2 trying to solve github's artifact crash:
- seems to crash on my distro with this message :
   ./qdomyos-zwift: symbol lookup error: ./qdomyos-zwift: undefined symbol: _ZdlPvm, version Qt_5
2021-06-06 17:43:40 +01:00
lifof
6672725dfa Adding -s to strip all debug symbols from release version 2021-06-06 17:24:21 +01:00
lifof
5a95c4c1da Eighth wave of code changes
- second pass on the cpp source files
 - added src/build/* to .gitignore cause I'm getting two annoying files every time I want to commit something
 - main.cpp - fixed a potential memory leak - clang-analyzer-cplusplus.NewDeleteLeaks
 - all header files refactored
 - with this all warnings related to the project ( no 3rd-party included ) are eliminated along with potential memory leaks and soem code tweaks related to performance
2021-06-06 17:11:22 +01:00
Roberto Viola
e4463d3dad Merge branch 'master' of https://github.com/cagnulein/qdomyos-zwift 2021-06-06 14:37:17 +02:00
lifof
a542662da2 Seventh wave of code changes
- finished 1st pass
2021-06-06 02:56:01 +01:00
lifof
33479ad88a Sixth wave of code changes 2021-06-05 22:39:13 +01:00
Roberto Viola
d702d2d9b8 Merge branch 'master' into codeRefactoring 2021-06-05 20:20:34 +02:00
Roberto Viola
d3ea8d651a fixed PZP session over 1h 2021-06-05 20:16:28 +02:00
lifof
9b15d0d98a Fifth wave of changes
+ debug messages medicine ( needs testing ) related to #345
2021-06-05 17:54:41 +01:00
lifof
4db3c92bd4 Fourth wave of changes 2021-06-05 16:19:53 +01:00
lifof
89f082c55d Movinig on -> Third wave 2021-06-05 02:55:26 +01:00
lifof
1c8cece6cf Update Qt version in main.yml 2021-06-04 22:32:35 +01:00
lifof
747049761c Second batch of modifications 2021-06-04 22:10:44 +01:00
lifof
1eb9f11434 Update domyoselliptical.cpp 2021-06-04 11:31:37 +01:00
Roberto Viola
71f0e56728 fixed wrong incliantion value on domyos elliptical
@lifof could you try this?
2021-06-04 12:20:26 +02:00
Roberto Viola
6ec9be0a8f Merge branch 'master' into codeRefactoring 2021-06-04 10:23:44 +02:00
Roberto Viola
aa2bb93d52 Merge branch 'master' of https://github.com/cagnulein/qdomyos-zwift 2021-06-04 09:34:32 +02:00
Roberto Viola
901b126f49 hammer bike fixed 2021-06-04 08:01:12 +02:00
lifof
6fefb6485a Refactoring code related to Code Improvements #339
- switching to c++17

 - activating link-time optimizations with qt's ltcg flag in CONFIG

 - android-clang config for optimize_full is errornous instead of passing an -O3 it passes a -Oz

 - using clazy's refactoring:
   - isempty-vs-count
   - old-style-connect
   - qstring-unneeded-heap-allocations
   - function-args-by-ref

 - clang-format *.cpp and *.h using .clang-format config

 - QStringLiteral everything

 - replacing initializing ptrs with 0 by nullptr

 - using Qt's isEmpty instead of count and length

 - using chrono's time expressions in QTimer

 - curly braces for all ifs and fors ( atleast the ones that I detected so far )
2021-06-03 22:59:37 +01:00
Roberto Viola
e1f3d1d0bd Merge branch 'master' of https://github.com/cagnulein/qdomyos-zwift 2021-06-03 11:53:26 +02:00
Roberto Viola
e88be3c23a version 2.6.41 on android 2021-06-03 11:53:14 +02:00
Roberto Viola
63d1299b07 Hammer racer S spinning bike #337 2021-06-03 11:49:17 +02:00
Roberto Viola
f793521ce3 Merge pull request #336 from lifof/master
Android Screen dimming Fix
2021-06-03 10:56:51 +02:00
lifof
908313c594 Android Srceen dimming Fix:
Added a keepScreenOn function for Android to deactivate screen dimming
2021-06-03 02:04:50 +01:00
Roberto Viola
fa86c3ca04 ios version 2.6.41 with concept row support #335 2021-06-02 14:20:25 +02:00
Roberto Viola
3d2d9dac0b ZWO (zwift workout file) compatibility added #331 2021-06-01 17:17:16 +02:00
Roberto Viola
90ab5e1c5b fixed build error on GitHub 2021-06-01 11:10:36 +02:00
Roberto Viola
f93b053de5 added the ability to ovveride the HR value sent to peloton #334 2021-06-01 11:04:08 +02:00
Roberto Viola
403beca71f powerzonepack fixed issue after 1 minute 2021-05-29 20:52:14 +02:00
Roberto Viola
80c2a741b2 weight loss fixed in the mail 2021-05-29 16:50:32 +02:00
Roberto Viola
4465ad7488 fixed distance on apple watch (only miles instead of kms) 2021-05-29 16:20:14 +02:00
Roberto Viola
4d34780319 ftmsrower cadence fixed #330 2021-05-29 14:00:17 +02:00
Roberto Viola
21a153fc5a fixed peloton workout when an user does multiple workout in a single QZ
session
2021-05-28 09:18:12 +02:00
Roberto Viola
305a01b7e0 first implementation of City Rower #327 2021-05-28 09:12:17 +02:00
Roberto Viola
af7380940a powerzonepack loginstate fixed 2021-05-27 22:35:15 +02:00
Roberto Viola
cce631c366 update powerzonepack to pzpack.com #264 2021-05-27 22:15:22 +02:00
Roberto Viola
b0efda1f02 ios version 2.6.36 2021-05-26 14:32:58 +02:00
Roberto Viola
63d033d48f Merge branch 'master' of https://github.com/cagnulein/qdomyos-zwift 2021-05-26 13:28:12 +02:00
Roberto Viola
094ec5cfdd first alpha implementation of powerzonepack #264 2021-05-26 13:24:07 +02:00
Roberto Viola
f35a1a9ec9 Merge branch 'master' of https://github.com/cagnulein/qdomyos-zwift 2021-05-24 16:39:39 +02:00
Roberto Viola
7d1986f962 2.6.35 for android 2021-05-24 16:38:43 +02:00
Roberto Viola
04b394303e updating stats on flywheelbike on apple watch even if datas are not
"clean"
2021-05-24 16:28:55 +02:00
Roberto Viola
7d3bf6863e adding weight to the power-speed formula 2021-05-23 18:53:25 +02:00
Roberto Viola
f0ed3044ab Merge branch 'master' of https://github.com/cagnulein/qdomyos-zwift 2021-05-21 18:09:46 +02:00
Roberto Viola
136f957833 fix issue on virtual device when a cadence sensor has been used as a
accessory for another bike
2021-05-21 18:08:37 +02:00
Roberto Viola
a4a79069c7 fixed a strange bug into the flywheelbike about refresh->interval()
with value at 0
2021-05-21 15:03:30 +02:00
Roberto Viola
d247cb4830 weight loss tile added 2021-05-20 11:35:16 +02:00
Roberto Viola
35a2798541 ios version 2.6.32 2021-05-20 10:07:26 +02:00
Roberto Viola
c62ba5850e Speed from power #269 2021-05-20 10:01:52 +02:00
Roberto Viola
91483c8867 moved random training program setting into a parent setting in order to
avoid accidentally enabling
2021-05-20 09:25:37 +02:00
Roberto Viola
a2c331c4fa fixed formula on the target resistance second line tile 2021-05-20 08:09:40 +02:00
Roberto Viola
9021b2ffa3 Life Fitness Bike support #325 2021-05-20 08:01:34 +02:00
Roberto Viola
ba1b74f872 Merge branch 'master' of https://github.com/cagnulein/qdomyos-zwift 2021-05-19 09:02:58 +02:00
Roberto Viola
a7f8699a30 added rower class 2021-05-19 09:00:18 +02:00
Roberto Viola
5cf915fed1 changed strava tag to #QZ 2021-05-18 17:24:31 +02:00
Roberto Viola
47beb070cd added the ability to load and save settings #240 2021-05-18 15:51:51 +02:00
Roberto Viola
c257601916 trying to get inclination from horizontreadmill 2021-05-18 09:59:47 +02:00
Roberto Viola
0ca3ba87f9 small fix on echelonrower 2021-05-17 09:53:15 +02:00
Roberto Viola
e586dea477 Merge branch 'master' of https://github.com/cagnulein/qdomyos-zwift 2021-05-17 09:07:49 +02:00
Roberto Viola
1d2a8bc7e1 ios version 2.6.30 2021-05-17 09:07:26 +02:00
Roberto Viola
b493124644 first implementation of echelonrower #318 2021-05-17 08:57:31 +02:00
Roberto Viola
7d6f16ad61 Merge branch 'master' of https://github.com/cagnulein/qdomyos-zwift 2021-05-17 07:58:10 +02:00
Roberto Viola
b2c7da5111 added simple hrzones_1h_treadmill program 2021-05-17 07:57:59 +02:00
Roberto Viola
7cf1d6a3bf fixed watt calculation on schwinnic4bike 2021-05-15 09:41:39 +02:00
Roberto Viola
a2c0009a8c using resistance function to SmartSpin2K 2021-05-14 18:50:39 +02:00
Roberto Viola
25983aa7e2 version 2.6.29 2021-05-14 11:11:56 +02:00
Roberto Viola
7790a1bc66 added startup offset to smartspin2k #299 2021-05-13 15:09:47 +02:00
Roberto Viola
88fe1e6c81 fix build error 2021-05-13 09:15:15 +02:00
Roberto Viola
f4951befd4 Merge branch 'master' of https://github.com/cagnulein/qdomyos-zwift 2021-05-13 08:53:58 +02:00
Roberto Viola
ee12336b90 external cadence sensor on bike to override bike computer's cadence
sensor #317
2021-05-13 08:53:41 +02:00
Roberto Viola
c1259cf0ab ios version 2.6.28 2021-05-12 15:44:40 +02:00
Roberto Viola
ce1308b5ee kcal and distance to apple watch 2021-05-12 14:36:21 +02:00
Roberto Viola
83c3387eb2 fixed timeout on ftmsaccessory #299 2021-05-11 17:06:11 +02:00
Roberto Viola
22152ddf10 ftmsbike limited to 15 resistance levels. changed to 100 #299 2021-05-11 17:00:52 +02:00
Roberto Viola
0cb759f771 fixed stupid error on ftms accessory #299 2021-05-11 16:34:09 +02:00
Roberto Viola
4facb2c26a fixed init phase of DKN MOTION bike #294 2021-05-11 14:03:55 +02:00
Roberto Viola
dae2d78d6e fixed connection issue on FTMS accessory #299 2021-05-11 07:59:31 +02:00
Roberto Viola
85c9baeb50 first untested implementation of SpinBike2K #299 2021-05-10 15:28:05 +02:00
Roberto Viola
18dd8dc911 fix import GPX file with resolution different than 1 second #304 2021-05-10 10:41:58 +02:00
Roberto Viola
8ed312cd0a Merge pull request #303 from p3g4asus/WSGetPost2
Get Post request via web socket
2021-05-10 08:10:08 +02:00
Roberto Viola
5ecebc506f default client strava id to QZ's one 2021-05-10 08:03:19 +02:00
Roberto Viola
1f68727c79 Merge branch 'master' into WSGetPost2 2021-05-10 08:01:44 +02:00
Matteo Federico Zazzetta
997b919ee6 Minor optimizations 2021-05-08 21:28:11 +02:00
Matteo Federico Zazzetta
33be574d54 Fixes strava speed display on m3i bike 2021-05-08 20:52:30 +02:00
Matteo Federico Zazzetta
8b3ae1a700 Merge with master 2021-05-08 13:21:20 +02:00
Matteo Federico Zazzetta
b3fbf34e89 Fixes strava id stringify and adds train program saver template 2021-05-07 12:07:28 +02:00
Roberto Viola
cc842e55c7 added mouse cursor ability to amazon manifest 2021-05-07 10:11:21 +02:00
Roberto Viola
2710cac480 small fixes on init for DKN AM-3i #285 2021-05-04 15:48:35 +02:00
Roberto Viola
6594ed1ae2 fix on fitplusbike 2021-05-04 15:29:41 +02:00
Roberto Viola
884bc2ca0a added template tcp client QZ 2021-05-04 12:17:43 +02:00
Roberto Viola
d58475a61d Merge branch 'master' of https://github.com/cagnulein/qdomyos-zwift 2021-05-04 08:39:42 +02:00
Roberto Viola
843138f82a ios version 2.6.24 2021-05-04 08:39:23 +02:00
Roberto Viola
390c5fa915 train program with positive and negative offset 2021-05-04 08:33:57 +02:00
Roberto Viola
5ecf34c524 added the ability to disable HRM from machinery (treadmill and bikes) 2021-05-03 14:20:20 +02:00
Roberto Viola
7964c6247d added watt calculation based on heart on fitplusbike 2021-05-03 14:17:02 +02:00
Roberto Viola
be29c27c80 added a new yesoul peloton conversion formula #245 2021-05-03 12:02:49 +02:00
Roberto Viola
ad7dea821d first commit for fitplusbike #296 2021-05-03 10:21:49 +02:00
Roberto Viola
dfe4d8df0a added a new tile for peloton offset time 2021-05-03 08:41:12 +02:00
Roberto Viola
f02cfddb10 fixes on trainprograms 2021-05-03 08:05:57 +02:00
Matteo Federico Zazzetta
52378cfed3 Merge with upstram master branch and some fixes 2021-05-02 13:14:04 +02:00
Matteo Federico Zazzetta
788bf68705 Fixed some typos 2021-05-01 19:20:22 +02:00
p3g4asus
2c6dd1a02d Tons of Fixes 2021-05-01 18:14:24 +02:00
Roberto Viola
c281f9dfb4 elapsed buttons works only to train program counter (peloton buffer
issue)
2021-05-01 17:09:06 +02:00
Matteo Federico Zazzetta
64b3ee35f4 Adding support for loading / saving training programs via templates 2021-05-01 12:49:56 +02:00
Matteo Federico Zazzetta
8f7d417cd6 Added to .gtignore some paterns in template-examples folder 2021-04-30 14:01:33 +02:00
Matteo Federico Zazzetta
eae8c0ab72 Fixes to youtube-viewer template issues 2021-04-30 13:38:00 +02:00
Roberto Viola
ad4ec969a1 fixed crash on trainprogram 2021-04-30 06:58:15 +02:00
Matteo Federico Zazzetta
98b078f9c7 Fix Youtube template bug 2021-04-29 20:23:41 +02:00
Matteo Federico Zazzetta
dc75e8e469 Adding youtube-viewer template 2021-04-29 19:45:55 +02:00
Roberto Viola
f0dea27ab3 fixed wrong stop frame on domyosbike 2021-04-29 15:39:09 +02:00
Roberto Viola
3d3cbe8632 dkn motion init fixies #294 2021-04-28 17:03:37 +02:00
Roberto Viola
ebdbcfa946 OS, bluetooth device and bluetooth heart rate added to the email 2021-04-28 14:17:46 +02:00
Roberto Viola
48255659ad fixed writeresistance for soleelliptical #278 2021-04-28 08:57:10 +02:00
Matteo Federico Zazzetta
0770a3d7f4 Small changes in getsettings message 2021-04-28 07:10:19 +02:00
Roberto Viola
2403e463f4 hr pid in the XML #226 2021-04-27 20:38:20 +02:00
Roberto Viola
af6f169bd9 added averagePace and maxPace for treadmills and coloured tiles! 2021-04-27 14:04:38 +02:00
Roberto Viola
2d144fefd4 HR pid on treadmill now with a 10s loop 2021-04-27 11:21:16 +02:00
Roberto Viola
ba3b262f34 integration on spirittreadmill 2021-04-27 11:13:31 +02:00
Roberto Viola
8a26cb4a97 fixed resistance on soleelliptical #278 2021-04-26 11:45:05 +02:00
Roberto Viola
4f23227de4 peloton conversion for domyosbike 2021-04-26 10:55:20 +02:00
Roberto Viola
f532de8c62 resistance up and down for soleelliptical #278 2021-04-26 07:27:51 +02:00
Roberto Viola
87b1a84043 trying to increase resistance on soleelliptical #278 2021-04-25 17:17:04 +02:00
Roberto Viola
8128b8b15b age ande weight for soleelliptical #278 2021-04-25 17:11:15 +02:00
Roberto Viola
b3e95de924 duration of the workout for soleelliptical changed from 10 minutes to
255 minutes #278
2021-04-25 17:04:36 +02:00
Matteo Federico Zazzetta
1081c63b72 Added the possibility to make request get/post requests
Added moving_time metric for templates
Added the possibility to add new settings by using templates
2021-04-25 12:09:58 +02:00
Roberto Viola
cdc66ae76a Merge branch 'master' of https://github.com/cagnulein/qdomyos-zwift 2021-04-24 22:26:17 +02:00
Roberto Viola
10ce2d9c1f ios build fixed 2021-04-24 22:26:01 +02:00
Roberto Viola
7da452c4ea added peloton reverse conversion for proformbike 2021-04-24 22:16:02 +02:00
Roberto Viola
57bba4152c Merge pull request #289 from p3g4asus/MovingTime
Introducing moving time for m3i and fitshowtreadmill.
2021-04-24 18:46:40 +02:00
Matteo Federico Zazzetta
aadb3dd743 Introducing moving time for m3i and fitshowtreadmill. 2021-04-24 16:57:10 +02:00
Roberto Viola
e6cc2341b7 fixed signed slope on virtual bike on swift 2021-04-24 12:08:46 +02:00
Roberto Viola
2b3f135443 moving time added 2021-04-24 12:08:19 +02:00
Roberto Viola
f61f1ed91f fixing, again, virtual echelon bike 2021-04-23 15:02:26 +02:00
Roberto Viola
318eade1b7 very fast implementation of XT485 spirit treadmill (NOT TESTED AND NOT
FINISHED, i'm waiting the user with more informations)
2021-04-23 11:39:22 +02:00
Roberto Viola
48d9af6e96 added FIT file to the email 2021-04-23 08:32:58 +02:00
Roberto Viola
d1923ee4e7 fixed soleelliptical 2021-04-22 20:16:05 +02:00
Roberto Viola
af2ecf5fbd Merge branch 'master' of https://github.com/cagnulein/qdomyos-zwift 2021-04-22 20:01:02 +02:00
Roberto Viola
383ff90871 heart rate fixed on swift on zwift 2021-04-22 20:00:27 +02:00
Roberto Viola
e19dccd908 DKN MOTION bike added #285 2021-04-22 16:22:05 +02:00
Roberto Viola
ebe4e8e31c watt calculation based on HR executed only if HR attached #286 2021-04-22 15:14:05 +02:00
Roberto Viola
f865f5ddf2 swift swift interface is working 2021-04-22 14:23:44 +02:00
Roberto Viola
ed4722cb20 first implementation of virtual bike zwift on swift (not tested) 2021-04-22 09:40:40 +02:00
Roberto Viola
e3058bb621 npecablebike fixed again :( 2021-04-22 07:18:27 +02:00
Roberto Viola
1d197c15f5 fixed build issue on qt < 5.15 2021-04-21 20:56:25 +02:00
Roberto Viola
8c8de54553 ios build 2.6.13 2021-04-21 15:54:01 +02:00
Roberto Viola
90763b7135 trying to fix virtual echelon 2021-04-21 15:39:21 +02:00
Roberto Viola
2e79664b82 first raw implementation of PID based on Heart Rate for Treadmills #226 2021-04-21 15:12:58 +02:00
Roberto Viola
c2e4060d56 template webserver settings moved into the experimental settings section 2021-04-21 13:59:32 +02:00
Roberto Viola
e38c9d790c Merge pull request #252 from p3g4asus/TemplatingAndWS2
"Templated" connections and Web server
2021-04-21 13:53:57 +02:00
Matteo Federico Zazzetta
6c9b5fb660 Added installation files (binary lib, include and mkspecs) for qHttWebServer for ios and android.
Modified example template to support websocket reconnection
2021-04-21 12:55:44 +02:00
Roberto Viola
3205869ab0 first implementation of soleelliptical #278 2021-04-21 11:48:38 +02:00
Roberto Viola
417ae3c9d8 qml setting avaiable also for linux and windows #277 2021-04-21 08:34:50 +02:00
Roberto Viola
12956df6b5 added url to workout email #279 2021-04-21 08:27:52 +02:00
Roberto Viola
373e7aa505 npecablebike cadence fixed 2021-04-21 07:22:29 +02:00
Roberto Viola
eef3239a37 Merge branch 'master' into TemplatingAndWS2 2021-04-20 16:48:45 +02:00
Roberto Viola
21c26e095e added the QZ version on the bottom of the email 2021-04-20 16:39:31 +02:00
Roberto Viola
e337242d0a peloton class name showed even if it's not a peloton ride class 2021-04-20 16:28:11 +02:00
Roberto Viola
56cf4b4b9b virtual echelon bike fixed 2021-04-20 09:16:10 +02:00
Roberto Viola
69b270aef6 zwift resistance gain and offset for proformbike #277 2021-04-20 08:02:38 +02:00
Roberto Viola
40c9bfb3ac fixed crash pressing start 2021-04-19 15:59:53 +02:00
Roberto Viola
0924595b69 writing settings only if needed 2021-04-19 15:12:13 +02:00
Roberto Viola
93debf2557 reverting yesoulbike on linux 2021-04-19 13:35:06 +02:00
Roberto Viola
51c43c2a24 trying fixing #274 (yesoulbike on linux) 2021-04-19 12:16:55 +02:00
Roberto Viola
b33ee84d99 removed write external storage permission on android 2021-04-19 09:25:16 +02:00
Roberto Viola
9fbd14130c trainprogram cleared when stopped 2021-04-19 07:28:50 +02:00
Roberto Viola
0d8e5fb414 jouls in the mail now are kjouls 2021-04-19 07:08:10 +02:00
Roberto Viola
6e7f42c26d fixed build issue 2021-04-18 14:53:19 +02:00
Roberto Viola
6e4c835b51 fixed android permission on writing file and minor fixes on mail 2021-04-18 14:38:18 +02:00
Roberto Viola
acf4b3678b added a new case on virtual echelon 2021-04-17 19:03:33 +02:00
Roberto Viola
7f11cced2c avoid crashes on npecablebike 2021-04-17 09:14:55 +02:00
Roberto Viola
756d78546c ibiking+ bike supported 2021-04-17 08:18:30 +02:00
Roberto Viola
dd304f684a Merge branch 'master' of https://github.com/cagnulein/qdomyos-zwift 2021-04-16 11:45:51 +02:00
Roberto Viola
4c0af00c97 fixed zwift offset and gain on domyosbike #272 2021-04-16 11:45:16 +02:00
Roberto Viola
799795323c add peloton resistance for the bike without resistance 2021-04-15 20:47:21 +02:00
Roberto Viola
446a23519e version 2.6.5 2021-04-15 13:52:07 +02:00
Roberto Viola
5be4bb8206 heart rate fixed on JLL_IC400 2021-04-15 07:45:24 +02:00
Roberto Viola
8f318ef4f7 fixed chronobike resistance and mail error 2021-04-14 20:23:19 +02:00
Roberto Viola
f3b6bfee4c heart rate fixed for JLL_IC400 bike 2021-04-14 19:47:19 +02:00
Roberto Viola
b79d6ee1ec JLL_IC400 wattage from HR and kcal added 2021-04-14 15:44:48 +02:00
Roberto Viola
7d0589723f watts not setted to 0 when speed goes to 0 leaving a ghost value on
zwift
2021-04-14 08:01:55 +02:00
Roberto Viola
0bfc857b7f cadence peak filtered for domyosbike #268 2021-04-13 16:08:28 +02:00
Roberto Viola
78b2219f48 domyosbike init phase for changyow fixed (i hope) 2021-04-13 15:30:29 +02:00
Roberto Viola
4e8cc48c66 heart rate value for JLL_IC400 bike 2021-04-13 12:03:06 +02:00
Roberto Viola
bac6043ff1 chronobike added 2021-04-13 09:50:02 +02:00
Roberto Viola
3032e3069e stagesbike added 2021-04-13 08:59:56 +02:00
Roberto Viola
3c803d87d1 avoid to retry to login to peloton if the credentials are wrong 2021-04-13 08:26:03 +02:00
Roberto Viola
aa631ff2a6 fixed random program for bikes 2021-04-13 08:05:28 +02:00
Roberto Viola
124ec4ca4c peloton workout doesn't start if there isn't the top bar enabled 2021-04-13 07:23:54 +02:00
Roberto Viola
7f419c85ce JLL IC400 fixed 2021-04-12 17:45:11 +02:00
Roberto Viola
ecaf0a044d smtp server changed 2021-04-12 17:30:47 +02:00
Roberto Viola
0b3f05d5c3 added timeout to cscbike and npecablebike 2021-04-12 11:57:17 +02:00
Roberto Viola
8dedb81e7a other fix on JLL_IC400_bike 2021-04-12 10:56:28 +02:00
Roberto Viola
33669f3722 sending mail only if a stopped session and events synchronized 2021-04-12 09:19:48 +02:00
Roberto Viola
5952b953cf fixed cadence on JLL IC400 bike #243 2021-04-12 07:37:41 +02:00
Roberto Viola
44616bfbac distance on fit file must starts with 0 #257 2021-04-12 07:32:41 +02:00
Roberto Viola
8267c62e1b fixinig build issue with smtpclient 2021-04-12 07:07:32 +02:00
Roberto Viola
f4bf40e8a7 first email experiments 2021-04-11 19:09:04 +02:00
Roberto Viola
0f030e3b2e chart images added 2021-04-11 17:58:05 +02:00
Roberto Viola
e96aa4036f weight lbs conversion added in the settings 2021-04-11 17:03:26 +02:00
Roberto Viola
8d66f13600 ios version 2.6.0 2021-04-11 16:46:41 +02:00
Roberto Viola
8f07094067 npecablebike managed #258 2021-04-11 14:46:52 +02:00
Roberto Viola
57645bbf05 add heart rate for virtualbike echelon 2021-04-11 14:14:13 +02:00
Roberto Viola
60e096d14c Merge branch 'cadence_sensor' 2021-04-11 11:41:14 +02:00
Roberto Viola
54f9e59e61 timeout for speed for cscbike 2021-04-11 11:40:48 +02:00
Roberto Viola
43daabd397 added wheel ratio for cscbike 2021-04-11 11:39:12 +02:00
Roberto Viola
40092e9727 added some debug to ERG mode for echelonconnectsport 2021-04-10 15:03:38 +02:00
Roberto Viola
48b67cdb96 watt gain and offset weren't applied to virtualbike 2021-04-10 15:03:14 +02:00
Matteo Federico Zazzetta
028ce80766 Some JSON commands added:
- setresistance (bikes and treadmills (inclination))
- setpower (bikes only)
- setcadence (bikes only)
- setdifficult (bikes and treadmills)
- setfanspeed (bikes and treadmills)
- setspeed (treadmills)
2021-04-10 12:21:19 +02:00
Roberto Viola
4be34fd1f6 added a up and down filter for Zwift ERG Mode 2021-04-09 11:57:53 +02:00
Roberto Viola
16229bcb46 elliptical speed settings can now add decimal separator on the keyboard 2021-04-09 11:43:28 +02:00
Roberto Viola
51106cb293 heart rate always read on cscbike 2021-04-08 17:09:56 +02:00
Roberto Viola
ed0b1be6c4 csc fixes 2021-04-08 16:34:09 +02:00
Roberto Viola
8a7f3193aa first commit of cscbike 2021-04-08 16:07:07 +02:00
Roberto Viola
054fe59ddb added icon for peloton credentials if they are ok or not 2021-04-07 15:24:36 +02:00
Roberto Viola
e94bdde451 connection timeout on inspirebike 2021-04-07 14:17:01 +02:00
Roberto Viola
78dfb415bb clearing the heartRate lastname if it set to disabled 2021-04-07 12:12:28 +02:00
Roberto Viola
1c81291d5d added the ability to save settings to the debug file #240 2021-04-07 11:22:13 +02:00
Roberto Viola
c56b9ea3d3 fixed screen rotation issue #105 2021-04-07 11:08:24 +02:00
Roberto Viola
617ee0a32c fixed crash when user changes the settings while connected to the bike 2021-04-07 09:50:49 +02:00
Roberto Viola
9b1f5dfd6d fixed inclination on random training program 2021-04-07 07:42:50 +02:00
Roberto Viola
97b446ec7f distance on echelon on virtualbike 2021-04-06 08:20:24 +02:00
Roberto Viola
4b230e856c Update issue templates 2021-04-06 08:09:27 +02:00
Matteo Federico Zazzetta
42b798eb05 Prepare for PR - part 2 2021-04-05 21:27:07 +02:00
Matteo Federico Zazzetta
2e8ca637a9 Prepare for PR 2021-04-05 21:24:47 +02:00
Matteo Federico Zazzetta
c16bfffb36 Useless line removed 2021-04-05 18:07:47 +02:00
Matteo Federico Zazzetta
667b847f24 Merge with qz master 2021-04-05 17:56:43 +02:00
Matteo Federico Zazzetta
6aa479de65 Adding vlc extension needed for showing vlc subtitles 2021-04-05 17:29:07 +02:00
p3g4asus
79afb5c22e Fixes for input commands 2021-04-05 17:26:05 +02:00
p3g4asus
b634efd179 Fixes compilation warnings on iOS 2021-04-05 14:38:42 +02:00
Matteo Federico Zazzetta
da3ad44097 Adding debug webserver template 2021-04-05 14:17:03 +02:00
Matteo Federico Zazzetta
b02074e7d7 Adding debug template 2021-04-05 14:15:07 +02:00
p3g4asus
e30266863a Many Fixes!!! It seems to work fine now 2021-04-05 13:44:07 +02:00
Roberto Viola
97e6f8449d fixed a bug that occurs when you have a peloton class running and you
start QZ after
2021-04-05 11:52:04 +02:00
Roberto Viola
5b4ff32501 fixed missing training program line on peloton #233 2021-04-05 11:28:31 +02:00
Roberto Viola
7441c50dfa added setting for peloton difficulty #242 2021-04-05 10:48:03 +02:00
Matteo Federico Zazzetta
3983af0ead Fixed Settings Gui problems 2021-04-05 10:32:52 +02:00
Roberto Viola
03a0690e39 requested peloton resistance in the trainprogram #233 2021-04-05 10:31:26 +02:00
Roberto Viola
4fd51423c0 add primary service for virtual echelon on virtualbike #198 2021-04-05 10:12:45 +02:00
Matteo Federico Zazzetta
a8bb3a7cb5 First tests 2021-04-04 21:12:29 +02:00
Roberto Viola
277febac16 iOS build fixed 2021-04-04 19:59:51 +02:00
Roberto Viola
f0956f47b4 added an erg filter for zwift #230 2021-04-04 19:35:03 +02:00
Roberto Viola
5df686c1a5 fixed advertisment packet on echelon sport virtualbike 2021-04-04 19:18:17 +02:00
Roberto Viola
7f13505f54 apple watch on domyosbike #249 2021-04-04 19:07:05 +02:00
Roberto Viola
a897514fbb small fix on chart with peloton instructor 2021-04-03 15:46:37 +02:00
Roberto Viola
4b36a51861 version 2.5.20 2021-04-03 15:21:21 +02:00
Roberto Viola
07a7966879 reduced charts width to 1 2021-04-03 15:18:36 +02:00
Roberto Viola
14190a771e added target peloton resistance to echelonconnectsport #233 2021-04-03 15:13:27 +02:00
Roberto Viola
d9d92ff955 JLL IC400 bike managed #243 2021-04-03 14:57:50 +02:00
Roberto Viola
eb3d5983be pause handled on trainprogram #235 2021-04-03 14:21:40 +02:00
Roberto Viola
87a4c9511c peloton instructorName #237 2021-04-03 14:15:52 +02:00
Roberto Viola
a393e8767a limit peloton workout to 1 #236 2021-04-03 13:32:41 +02:00
Roberto Viola
2417b85f64 fixing domyosbike splitted packages #234 2021-04-03 13:30:02 +02:00
Roberto Viola
a18e2b771b fix fonts on chart on ios 2021-04-02 15:50:52 +02:00
Roberto Viola
ba268cf97c ios build fixed 2021-04-02 15:29:39 +02:00
Roberto Viola
e0a695be01 settings fixed and moved the tiles groups on the root of the settings 2021-04-02 14:51:39 +02:00
Roberto Viola
b1ceae9136 erg mode fixed 2021-04-02 14:22:24 +02:00
Roberto Viola
ff8a3dc340 JLL_IC400_bike managed 2021-04-02 14:06:44 +02:00
Roberto Viola
686c3eb6f0 autoresistance button added 2021-04-02 13:57:05 +02:00
Roberto Viola
d3cebaa79e S77 treadmill compatibility added 2021-04-02 13:22:12 +02:00
Roberto Viola
a6585e8b58 zwift erg mode for domyosbike 2021-04-02 09:46:18 +02:00
Roberto Viola
ff5143894c fix on watt function on echelonconnectsport 2021-04-02 09:08:02 +02:00
Roberto Viola
b717818616 zwift erg mode managed for echelonconnectsport 2021-04-02 09:01:47 +02:00
Roberto Viola
3a099f89f4 added target power tile and target cadence tile; managed cadence from
peloton
2021-04-02 08:35:38 +02:00
Roberto Viola
aafec8f292 screenshot has been called by QML now in order to be synced with the
chart UI
2021-04-02 08:04:56 +02:00
Roberto Viola
ba611c908e min heart rate on chart set to 60 2021-04-02 07:54:49 +02:00
Roberto Viola
05b34fd935 dateaxis on charts 2021-04-02 07:52:38 +02:00
Roberto Viola
961c070011 toolbar must be always available when entering in the chart form 2021-04-02 07:29:54 +02:00
Roberto Viola
0d4f038a26 iOS fixing Charts build issues 2021-04-02 07:18:42 +02:00
Roberto Viola
4a732edbd5 a lot of improvement on the charts! 2021-04-01 16:20:30 +02:00
Roberto Viola
1c20a2c77d power, heart and cadence chart working! 2021-04-01 12:21:53 +02:00
Roberto Viola
a6b7f4ff94 iOS version 2.5.16 2021-04-01 08:00:47 +02:00
Roberto Viola
a42d218eda Merge branch 'master' of https://github.com/cagnulein/qdomyos-zwift 2021-03-31 16:16:41 +02:00
Roberto Viola
48d985cf67 added peloton activity name to strava 2021-03-31 16:15:04 +02:00
Roberto Viola
43bb830c23 workout name on peloton and password hidden on peloton setting 2021-03-31 15:40:41 +02:00
Roberto Viola
82888440cf first version working on MacOS 2021-03-31 13:54:15 +02:00
Roberto Viola
f45de06bcf first commit with peloton following workout feature (NOT TESTED) 2021-03-31 11:33:40 +02:00
Roberto Viola
6f081cc6b4 all the API implemented! 2021-03-30 22:54:30 +02:00
Roberto Viola
11c137e0e3 Merge branch 'master' of https://github.com/cagnulein/qdomyos-zwift 2021-03-30 18:39:43 +02:00
Roberto Viola
dea69cc74a QT iOS patches in order to restore the correct functionality on the Echelon bikes 2021-03-30 18:38:29 +02:00
Roberto Viola
e7eb0822e7 Merge pull request #228 from ben75020/docs/usage
Documentation about usage
2021-03-30 17:38:55 +02:00
ben75020
1943a08632 Merge branch 'master' into docs/usage 2021-03-30 17:37:36 +02:00
Benjamin.Riou
167dc93a55 Documentation about usage 2021-03-30 17:33:49 +02:00
Roberto Viola
9159af36f7 Merge branch 'master' of https://github.com/cagnulein/qdomyos-zwift 2021-03-30 13:37:17 +02:00
Roberto Viola
2763ce6e8a added binary patched from iOS 2021-03-30 13:37:05 +02:00
Roberto Viola
f4c6dfaeb6 m3ibike kcal method setting 2021-03-30 11:58:52 +02:00
Roberto Viola
bda4f5cf6b Merge pull request #222 from ben75020/docs/update1
Docs Update on CLI usage and installation
2021-03-28 18:34:43 +02:00
Benjamin.Riou
5b33d479e0 Docs Update on CLI usage and installation 2021-03-28 18:28:11 +02:00
Roberto Viola
907d494803 esanglinker compatibility added 2021-03-28 14:38:35 +02:00
Roberto Viola
1c4a3e6185 Merge pull request #220 from ben75020/docs/supported
Docs/supported devices
2021-03-28 12:21:36 +02:00
ben75020
b11a0cca1c Update 20_supported_devices_and_applications.md 2021-03-28 10:03:40 +02:00
ben75020
dde586ecdd Update 20_supported_devices_and_applications.md 2021-03-28 10:02:45 +02:00
ben75020
390cf9bfef Update 21_applications_detail.md 2021-03-28 10:01:17 +02:00
Benjamin.Riou
758349b80f Add documentation on devices and software 2021-03-28 09:59:01 +02:00
Benjamin.Riou
896c641851 Documentation 2021-03-28 08:24:53 +02:00
Benjamin.Riou
5cb44c17e8 Documentation 2021-03-28 08:24:53 +02:00
Roberto Viola
2c124f4365 Merge pull request #219 from p3g4asus/QMLTests
Qml tests
2021-03-27 20:25:07 +01:00
Roberto Viola
6d4c030754 heartratebelt on iOS using UUID as for schwinnbike 2021-03-27 18:57:49 +01:00
Matteo Federico Zazzetta
0fad920c39 New design for peloton options 2021-03-27 18:42:53 +01:00
Matteo Federico Zazzetta
6bd2327165 Fix heart rate settings 2021-03-27 18:14:50 +01:00
Matteo Federico Zazzetta
497865f2e6 Some minor changes 2021-03-27 18:02:20 +01:00
Matteo Federico Zazzetta
b279344dbc Setting redesign 2021-03-27 16:59:45 +01:00
428 changed files with 38091 additions and 12993 deletions

View File

@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: "[REQ]"
labels: enhancement
assignees: cagnulein
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

View File

@@ -2,13 +2,18 @@
name: CI
env:
DISPLAY: ':99'
# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
push:
branches: [ master ]
branches: [ master, github-workflow-playground ]
pull_request:
branches: [ master ]
schedule:
- cron: "0 */12 * * *"
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
@@ -33,28 +38,37 @@ jobs:
# path: '${{ github.workspace }}/output/android/'
# key: ${{ runner.os }}-QtCache-Android
- name: Xvfb install and run
run: |
sudo apt-get install -y xvfb
Xvfb -ac ${{ env.DISPLAY }} -screen 0 1280x780x24 &
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2
# Runs a set of commands using the runners shell
- name: Install Qt Linux Desktop
uses: jurplel/install-qt-action@v2
- name: Checkout submodule repo
uses: actions/checkout@v2
with:
version: '5.12.9'
host: 'linux'
target: 'desktop'
modules: 'qtcharts debug_info qtnetworkauth'
dir: '${{ github.workspace }}/output/linux-desktop/'
# cached: ${{ steps.cache-qt-linux-desktop.outputs.cache-hit }}
repository: bluetiger9/SmtpClient-for-Qt
path: "src/smtpclient/"
- name: Install packages required to run QZ inside workflow
run: sudo apt-get install -y qt5-default libqt5bluetooth5 libqt5widgets5 libqt5positioning5 libqt5xml5 qtconnectivity5-dev qtpositioning5-dev libqt5charts5-dev libqt5charts5 qt5-default libqt5networkauth5-dev libqt5websockets5* libxcb-randr0-dev libxcb-xtest0-dev libxcb-xinerama0-dev libxcb-shape0-dev libxcb-xkb-dev
- name: Compile Linux Desktop
run: cd src; qmake; make -j4
run: cd src; qmake; make -j8
- name: Archive linux-desktop binary
uses: actions/upload-artifact@v2
with:
name: linux-desktop-binary
path: src/qdomyos-zwift
path: src/qdomyos-zwift
- name: List folder
run: ls -ltr /home/runner/work/qdomyos-zwift/qdomyos-zwift/src/; ls /usr/lib/x86_64-linux-gnu/libxcb-util*;
- name: Test Peloton API
run: cd /home/runner/work/qdomyos-zwift/qdomyos-zwift/src/; ./qdomyos-zwift -test-peloton -peloton-username ${{ secrets.peloton_username }} -peloton-password ${{ secrets.peloton_password }}
timeout-minutes: 2
# - uses: actions/checkout@v2
# with:

19
.gitignore vendored
View File

@@ -13,4 +13,23 @@ src/qdomyos-zwift
src/ui_charts.h
src/ui_mainwindow.h
src/build/*
src/build/*
src/debug-*
*.swo
*.swp
template-examples/youtube-viewer/node_modules/*
template-examples/youtube-viewer/*.json
template-examples/youtube-viewer/.eslintrc.js
template-examples/youtube-viewer/.jshintrc
template-examples/youtube-viewer/debug.js
template-examples/train-program-saver/node_modules/*
template-examples/train-program-saver/*.json
template-examples/train-program-saver/.eslintrc.js
template-examples/train-program-saver/.jshintrc
template-examples/train-program-saver/debug.js

3
.gitmodules vendored
View File

@@ -1,3 +1,6 @@
[submodule "android_openssl"]
path = android_openssl
url = https://github.com/KDAB/android_openssl.git
[submodule "src/smtpclient"]
path = src/smtpclient
url = https://github.com/bluetiger9/SmtpClient-for-Qt.git

View File

@@ -39,35 +39,9 @@ Read the [installation procedure](docs/10_Installation.md)
### Tested on
- Raspberry PI 0W and Domyos Intense Run
You can run the app on [Macintosh or Linux devices](docs/10_Installation.md). IOS and Android are also supported.
- MacBook Air 2011 and Domyos Intense Run
- Raspberry 3b+ and Domyos T900C
- Raspberry 3b+ and Toorx TRX Route Key
- Android Pixel 2 and Echelon Connect Sport
- Raspberry Pi 0W and SportsTech ESX500
### Your machine is not compatible?
Open an issue and follow these steps!
1. first of all you need an android device (phone or tablet)
2. you need to become developer on your phone https://wccftech.com/how-to/how-to-enable-developer-options-on-android-10-tutorial/
3. Go to Settings
4. Go into developer options
5. Enable the option Enable Bluetooth HCI snoop log
6. restart your phone
7. open your machine app and play with it collecting inclination and speed
8. Disable the option Enable Bluetooth HCI snoop log
9. in Developer Options: Bug report->Full report
10. wait a random amount of time (10-20 seconds)
11. A notification will appear at the top of the device. Click on it, share, email it to yourself
12. You'll get a zip file with the entire report. In the FS/Data/Log/bt directory of the zipfile is the file you want.
13. attach the log file in a new issue with a short description of the steps you did in the app when you used it
QDomyos-Zwift works on every [FTMS-compatible application](docs/20_supported_devices_and_applications.md), and virtually any [bluetooth enabled device](docs/20_supported_devices_and_applications.md).
### No gui version
@@ -81,6 +55,8 @@ https://github.com/ProH4Ck/treadmill-bridge
https://www.livestrong.com/article/422012-what-is-10-degrees-in-incline-on-a-treadmill/
Icons used in this documentation comes from [flaticon.com](https://www.flaticon.com)
### Blog
https://robertoviola.cloud

View File

@@ -0,0 +1,84 @@
<?xml version="1.0"?>
<manifest package="org.cagnulen.qdomyoszwift" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="2.6.18" android:versionCode="128" android:installLocation="auto">
<uses-feature android:name="android.hardware.bluetooth" android:required="true" />
<uses-feature android:name="android.hardware.location" android:required="false" />
<uses-feature android:name="android.hardware.location.gps" android:required="false" />
<uses-feature android:name="android.hardware.location" android:required="false" />
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
<supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>
<application android:hardwareAccelerated="true" android:debuggable="false" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="qdomyos-zwift" android:extractNativeLibs="true" android:icon="@drawable/icon">
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="qdomyos-zwift" android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<!-- Application arguments -->
<!-- meta-data android:name="android.app.arguments" android:value="arg1 arg2 arg3"/ -->
<!-- Application arguments -->
<meta-data android:name="android.app.lib_name" android:value="qdomyos-zwift"/>
<meta-data android:name="android.app.qt_sources_resource_id" android:resource="@array/qt_sources"/>
<meta-data android:name="android.app.repository" android:value="default"/>
<meta-data android:name="android.app.qt_libs_resource_id" android:resource="@array/qt_libs"/>
<meta-data android:name="android.app.bundled_libs_resource_id" android:resource="@array/bundled_libs"/>
<!-- Deploy Qt libs as part of package -->
<meta-data android:name="android.app.bundle_local_qt_libs" android:value="-- %%BUNDLE_LOCAL_QT_LIBS%% --"/>
<!-- Run with local libs -->
<meta-data android:name="android.app.use_local_qt_libs" android:value="-- %%USE_LOCAL_QT_LIBS%% --"/>
<meta-data android:name="android.app.libs_prefix" android:value="/data/local/tmp/qt/"/>
<meta-data android:name="android.app.load_local_libs_resource_id" android:resource="@array/load_local_libs"/>
<meta-data android:name="android.app.load_local_jars" android:value="-- %%INSERT_LOCAL_JARS%% --"/>
<meta-data android:name="android.app.static_init_classes" android:value="-- %%INSERT_INIT_CLASSES%% --"/>
<!-- Used to specify custom system library path to run with local system libs -->
<!-- <meta-data android:name="android.app.system_libs_prefix" android:value="/system/lib/"/> -->
<!-- Messages maps -->
<meta-data android:value="@string/ministro_not_found_msg" android:name="android.app.ministro_not_found_msg"/>
<meta-data android:value="@string/ministro_needed_msg" android:name="android.app.ministro_needed_msg"/>
<meta-data android:value="@string/fatal_error_msg" android:name="android.app.fatal_error_msg"/>
<meta-data android:value="@string/unsupported_android_version" android:name="android.app.unsupported_android_version"/>
<!-- Messages maps -->
<!-- Splash screen -->
<!-- Orientation-specific (portrait/landscape) data is checked first. If not available for current orientation,
then android.app.splash_screen_drawable. For best results, use together with splash_screen_sticky and
use hideSplashScreen() with a fade-out animation from Qt Android Extras to hide the splash screen when you
are done populating your window with content. -->
<!-- meta-data android:name="android.app.splash_screen_drawable_portrait" android:resource="@drawable/logo_portrait" / -->
<!-- meta-data android:name="android.app.splash_screen_drawable_landscape" android:resource="@drawable/logo_landscape" / -->
<!-- meta-data android:name="android.app.splash_screen_drawable" android:resource="@drawable/logo"/ -->
<!-- meta-data android:name="android.app.splash_screen_sticky" android:value="true"/ -->
<!-- Splash screen -->
<!-- Background running -->
<!-- Warning: changing this value to true may cause unexpected crashes if the
application still try to draw after
"applicationStateChanged(Qt::ApplicationSuspended)"
signal is sent! -->
<meta-data android:name="android.app.background_running" android:value="true"/>
<!-- Background running -->
<!-- auto screen scale factor -->
<meta-data android:name="android.app.auto_screen_scale_factor" android:value="full"/>
<!-- auto screen scale factor -->
<!-- extract android style -->
<!-- available android:values :
* default - In most cases this will be the same as "full", but it can also be something else if needed, e.g., for compatibility reasons
* full - useful QWidget & Quick Controls 1 apps
* minimal - useful for Quick Controls 2 apps, it is much faster than "full"
* none - useful for apps that don't use any of the above Qt modules
-->
<meta-data android:name="android.app.extract_android_style" android:value="default"/>
<!-- extract android style -->
<meta-data android:name="com.amazon.input.cursor" android:value="pointer"/>
</activity>
<service android:name=".ChannelService"></service>
<activity android:name="org.cagnulen.qdomyoszwift.MyActivity" />
<!-- For adding service(s) please check: https://wiki.qt.io/AndroidServices -->
</application>
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="29" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.ACCESS_CHECKIN_PROPERTIES"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
</manifest>

View File

@@ -56,6 +56,7 @@
2B42755BF45173E11E2110CB /* FitFieldDefinition.mm in Compile Sources */ = {isa = PBXBuildFile; fileRef = F3B0A31277FCD46877B1C226 /* FitFieldDefinition.mm */; settings = {ATTRIBUTES = (); }; };
2B800DC34C91D8B080DEFBE8 /* fit_mesg_with_event_broadcaster.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 24568621B9F9DEB322DAA4C4 /* fit_mesg_with_event_broadcaster.cpp */; settings = {ATTRIBUTES = (); }; };
2D4684BE88B9B0456A50B3F0 /* qdomyoszwift_plugin_import.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 8DD3B05BF7374DC62BC3BA4A /* qdomyoszwift_plugin_import.cpp */; settings = {ATTRIBUTES = (); }; };
2F0E70F826316F3600E11F3A /* virtualbike_zwift.swift in Compile Sources */ = {isa = PBXBuildFile; fileRef = 2F0E70F726316F3600E11F3A /* virtualbike_zwift.swift */; };
3015F9B9FF4CA6D653D46CCA /* fit_developer_field_description.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = CA35DDC56ACD982A52226071 /* fit_developer_field_description.cpp */; settings = {ATTRIBUTES = (); }; };
333C629F93DB3941862924F7 /* fit_field_base.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = BDE58BCA9ABD5DF101B0E0FF /* fit_field_base.cpp */; settings = {ATTRIBUTES = (); }; };
3407CACF00E4A0046255A968 /* qtpcre2 in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 344F66310C19536DB4886D8F /* qtpcre2 */; };
@@ -119,12 +120,36 @@
87062646259480B200D06586 /* ViewController.swift in Compile Sources */ = {isa = PBXBuildFile; fileRef = 876E4E4F259479EE00BD5714 /* ViewController.swift */; };
87062647259480B400D06586 /* WatchKitConnection.swift in Compile Sources */ = {isa = PBXBuildFile; fileRef = 876E4E53259479EE00BD5714 /* WatchKitConnection.swift */; };
87062648259480B700D06586 /* WorkoutTracking.swift in Compile Sources */ = {isa = PBXBuildFile; fileRef = 876E4E50259479EE00BD5714 /* WorkoutTracking.swift */; };
87083D9626678EFA0072410D /* zwiftworkout.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87083D9526678EFA0072410D /* zwiftworkout.cpp */; };
8718CBA2263063BD004BF4EE /* soleelliptical.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 8718CB9A263063BC004BF4EE /* soleelliptical.cpp */; };
8718CBA3263063BD004BF4EE /* templateinfosender.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 8718CB9B263063BC004BF4EE /* templateinfosender.cpp */; };
8718CBA4263063BD004BF4EE /* templateinfosenderbuilder.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 8718CB9D263063BC004BF4EE /* templateinfosenderbuilder.cpp */; };
8718CBA5263063BD004BF4EE /* tcpclientinfosender.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 8718CB9F263063BD004BF4EE /* tcpclientinfosender.cpp */; };
8718CBAB263063CE004BF4EE /* moc_templateinfosenderbuilder.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 8718CBA7263063CD004BF4EE /* moc_templateinfosenderbuilder.cpp */; };
8718CBAC263063CE004BF4EE /* moc_tcpclientinfosender.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 8718CBA8263063CD004BF4EE /* moc_tcpclientinfosender.cpp */; };
8718CBAD263063CE004BF4EE /* moc_templateinfosender.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 8718CBA9263063CE004BF4EE /* moc_templateinfosender.cpp */; };
8718CBAE263063CE004BF4EE /* moc_soleelliptical.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 8718CBAA263063CE004BF4EE /* moc_soleelliptical.cpp */; };
871B9FD2265E6A8800DB41F4 /* powerzonepack.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 871B9FD1265E6A8800DB41F4 /* powerzonepack.cpp */; };
871B9FD4265E6A9A00DB41F4 /* moc_powerzonepack.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 871B9FD3265E6A9A00DB41F4 /* moc_powerzonepack.cpp */; };
871E4CD125A6FB5A00E18D6D /* BLEPeripheralManager.swift in Compile Sources */ = {isa = PBXBuildFile; fileRef = 871E4CD025A6FB5A00E18D6D /* BLEPeripheralManager.swift */; };
872BAB4E261750EE006A59AB /* libQt5Charts.a in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 872BAB4D261750EE006A59AB /* libQt5Charts.a */; };
872BAB50261751FB006A59AB /* libqtchartsqml2.a in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 872BAB4F261751FB006A59AB /* libqtchartsqml2.a */; };
873063BE259DF20000DA0F44 /* heartratebelt.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 873063BC259DF20000DA0F44 /* heartratebelt.cpp */; };
873063C0259DF2C500DA0F44 /* moc_heartratebelt.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 873063BF259DF2C500DA0F44 /* moc_heartratebelt.cpp */; };
87310B1E266FBB59008BA0D6 /* smartrowrower.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87310B1B266FBB54008BA0D6 /* smartrowrower.cpp */; };
87310B1F266FBB59008BA0D6 /* homefitnessbuddy.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87310B1C266FBB57008BA0D6 /* homefitnessbuddy.cpp */; };
87310B22266FBB78008BA0D6 /* moc_homefitnessbuddy.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87310B20266FBB6E008BA0D6 /* moc_homefitnessbuddy.cpp */; };
87310B23266FBB78008BA0D6 /* moc_smartrowrower.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87310B21266FBB77008BA0D6 /* moc_smartrowrower.cpp */; };
87318AAD2683799100770F13 /* echelonstride.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87318AAB2683799100770F13 /* echelonstride.cpp */; };
87318AAF2683799C00770F13 /* moc_echelonstride.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87318AAE2683799C00770F13 /* moc_echelonstride.cpp */; };
87318AB126837C7600770F13 /* libQt5WebSockets.a in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 87318AB026837AA500770F13 /* libQt5WebSockets.a */; };
87368825259C602800C71C7E /* watchAppStart.swift in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87368824259C602800C71C7E /* watchAppStart.swift */; };
87440FBD2640291700E4DC0B /* fitplusbike.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87440FBC2640291700E4DC0B /* fitplusbike.cpp */; };
87440FBF2640292900E4DC0B /* moc_fitplusbike.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87440FBE2640292900E4DC0B /* moc_fitplusbike.cpp */; };
87586A4125B8340E00A243C4 /* proformbike.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87586A4025B8340E00A243C4 /* proformbike.cpp */; };
87586A4325B8341B00A243C4 /* moc_proformbike.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87586A4225B8341B00A243C4 /* moc_proformbike.cpp */; };
875F69B926342E8D0009FD78 /* spirittreadmill.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 875F69B826342E8D0009FD78 /* spirittreadmill.cpp */; };
875F69BB26342E9A0009FD78 /* moc_spirittreadmill.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 875F69BA26342E9A0009FD78 /* moc_spirittreadmill.cpp */; };
8762D50F2601F7EA00F6F049 /* M3iNS.mm in Compile Sources */ = {isa = PBXBuildFile; fileRef = 8762D50B2601F7EA00F6F049 /* M3iNS.mm */; };
8762D5102601F7EA00F6F049 /* M3iNSQT.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 8762D50C2601F7EA00F6F049 /* M3iNSQT.cpp */; };
8762D5132601F89500F6F049 /* scanrecordresult.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 8762D5112601F89500F6F049 /* scanrecordresult.cpp */; };
@@ -149,12 +174,29 @@
876EE3CDDF69DA139329ADD8 /* qquicklayoutsplugin in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 307B2F8E9A717B514EA118E0 /* qquicklayoutsplugin */; };
8772A0E625E43ADB0080718C /* trxappgateusbbike.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 8772A0E525E43ADA0080718C /* trxappgateusbbike.cpp */; };
8772A0E825E43AE70080718C /* moc_trxappgateusbbike.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 8772A0E725E43AE70080718C /* moc_trxappgateusbbike.cpp */; };
8780D947264FB8AC00192D41 /* smartspin2k.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 8780D946264FB8AB00192D41 /* smartspin2k.cpp */; };
8780D949264FB8B800192D41 /* moc_smartspin2k.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 8780D948264FB8B800192D41 /* moc_smartspin2k.cpp */; };
8781907E2615089D0085E656 /* peloton.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 8781907C2615089D0085E656 /* peloton.cpp */; };
87819080261508B10085E656 /* moc_peloton.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 8781907F261508B10085E656 /* moc_peloton.cpp */; };
8781908526150C8E0085E656 /* libqtlabsplatformplugin.a in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 8781908126150B490085E656 /* libqtlabsplatformplugin.a */; };
8783153B25E8D81E0007817C /* moc_sportstechbike.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 8783153A25E8D81E0007817C /* moc_sportstechbike.cpp */; };
8783153C25E8DAFD0007817C /* sportstechbike.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87A3EBBA25D2CFED0040EB4C /* sportstechbike.cpp */; };
878A331A25AB4FF800BD13E1 /* yesoulbike.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 878A331725AB4FF800BD13E1 /* yesoulbike.cpp */; };
878A331D25AB50C300BD13E1 /* moc_yesoulbike.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 878A331B25AB50C200BD13E1 /* moc_yesoulbike.cpp */; };
87900DC6268B672E000CB351 /* renphobike.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87900DC5268B672E000CB351 /* renphobike.cpp */; };
87900DC8268B673C000CB351 /* moc_renphobike.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87900DC7268B673C000CB351 /* moc_renphobike.cpp */; };
8791A8AA25C8603F003B50B2 /* moc_inspirebike.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 8791A8A925C8603F003B50B2 /* moc_inspirebike.cpp */; };
8791A8AB25C861BD003B50B2 /* inspirebike.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 8791A8A825C8602A003B50B2 /* inspirebike.cpp */; };
87A0C4BB262329A600121A76 /* npecablebike.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87A0C4B7262329A600121A76 /* npecablebike.cpp */; };
87A0C4BC262329A600121A76 /* cscbike.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87A0C4B9262329A600121A76 /* cscbike.cpp */; };
87A0C4BF262329B500121A76 /* moc_cscbike.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87A0C4BD262329B500121A76 /* moc_cscbike.cpp */; };
87A0C4C0262329B500121A76 /* moc_npecablebike.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87A0C4BE262329B500121A76 /* moc_npecablebike.cpp */; };
87A18F072660D5C1002D7C96 /* ftmsrower.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87A18F052660D5C0002D7C96 /* ftmsrower.cpp */; };
87A18F092660D5D9002D7C96 /* moc_ftmsrower.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87A18F082660D5D9002D7C96 /* moc_ftmsrower.cpp */; };
87A3BC222656429600D302E3 /* rower.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87A3BC1F2656429400D302E3 /* rower.cpp */; };
87A3BC232656429600D302E3 /* echelonrower.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87A3BC202656429400D302E3 /* echelonrower.cpp */; };
87A3BC26265642A300D302E3 /* moc_rower.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87A3BC24265642A200D302E3 /* moc_rower.cpp */; };
87A3BC27265642A300D302E3 /* moc_echelonrower.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87A3BC25265642A200D302E3 /* moc_echelonrower.cpp */; };
87A4B76125AF27CB0027EF3C /* metric.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87A4B75F25AF27CB0027EF3C /* metric.cpp */; };
87B617EC25F25FED0094A1CB /* screencapture.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87B617E725F25FEC0094A1CB /* screencapture.cpp */; };
87B617ED25F25FED0094A1CB /* fitshowtreadmill.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87B617EA25F25FED0094A1CB /* fitshowtreadmill.cpp */; };
@@ -162,6 +204,32 @@
87B617F225F260150094A1CB /* moc_fitshowtreadmill.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87B617EF25F260140094A1CB /* moc_fitshowtreadmill.cpp */; };
87B617F325F260150094A1CB /* moc_snodebike.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87B617F025F260140094A1CB /* moc_snodebike.cpp */; };
87B617F425F260150094A1CB /* moc_screencapture.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87B617F125F260150094A1CB /* moc_screencapture.cpp */; };
87C5F0B526285E5F0067A1B5 /* mimemessage.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87C5F09726285E5A0067A1B5 /* mimemessage.cpp */; };
87C5F0B626285E5F0067A1B5 /* quotedprintable.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87C5F09A26285E5B0067A1B5 /* quotedprintable.cpp */; };
87C5F0B726285E5F0067A1B5 /* mimecontentformatter.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87C5F09B26285E5B0067A1B5 /* mimecontentformatter.cpp */; };
87C5F0B826285E5F0067A1B5 /* stagesbike.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87C5F09C26285E5B0067A1B5 /* stagesbike.cpp */; };
87C5F0B926285E5F0067A1B5 /* mimehtml.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87C5F0A026285E5C0067A1B5 /* mimehtml.cpp */; };
87C5F0BA26285E5F0067A1B5 /* mimefile.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87C5F0A126285E5C0067A1B5 /* mimefile.cpp */; };
87C5F0BB26285E5F0067A1B5 /* mimetext.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87C5F0A426285E5C0067A1B5 /* mimetext.cpp */; };
87C5F0BC26285E5F0067A1B5 /* SmtpMime in Copy Bundle Resources */ = {isa = PBXBuildFile; fileRef = 87C5F0A526285E5C0067A1B5 /* SmtpMime */; };
87C5F0BD26285E5F0067A1B5 /* chronobike.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87C5F0A726285E5D0067A1B5 /* chronobike.cpp */; };
87C5F0BE26285E5F0067A1B5 /* mimemultipart.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87C5F0A926285E5D0067A1B5 /* mimemultipart.cpp */; };
87C5F0BF26285E5F0067A1B5 /* smtpclient.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87C5F0AC26285E5D0067A1B5 /* smtpclient.cpp */; };
87C5F0C026285E5F0067A1B5 /* mimepart.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87C5F0AD26285E5D0067A1B5 /* mimepart.cpp */; };
87C5F0C126285E5F0067A1B5 /* mimeattachment.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87C5F0AE26285E5D0067A1B5 /* mimeattachment.cpp */; };
87C5F0C226285E5F0067A1B5 /* emailaddress.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87C5F0AF26285E5E0067A1B5 /* emailaddress.cpp */; };
87C5F0C326285E5F0067A1B5 /* mimeinlinefile.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87C5F0B326285E5E0067A1B5 /* mimeinlinefile.cpp */; };
87C5F0CF26285E7E0067A1B5 /* moc_mimepart.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87C5F0C426285E7D0067A1B5 /* moc_mimepart.cpp */; };
87C5F0D026285E7E0067A1B5 /* moc_smtpclient.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87C5F0C526285E7D0067A1B5 /* moc_smtpclient.cpp */; };
87C5F0D126285E7E0067A1B5 /* moc_stagesbike.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87C5F0C626285E7D0067A1B5 /* moc_stagesbike.cpp */; };
87C5F0D226285E7E0067A1B5 /* moc_mimemultipart.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87C5F0C726285E7D0067A1B5 /* moc_mimemultipart.cpp */; };
87C5F0D326285E7E0067A1B5 /* moc_mimecontentformatter.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87C5F0C826285E7D0067A1B5 /* moc_mimecontentformatter.cpp */; };
87C5F0D426285E7E0067A1B5 /* moc_chronobike.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87C5F0C926285E7D0067A1B5 /* moc_chronobike.cpp */; };
87C5F0D526285E7E0067A1B5 /* moc_mimehtml.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87C5F0CA26285E7E0067A1B5 /* moc_mimehtml.cpp */; };
87C5F0D626285E7E0067A1B5 /* moc_emailaddress.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87C5F0CB26285E7E0067A1B5 /* moc_emailaddress.cpp */; };
87C5F0D726285E7E0067A1B5 /* moc_mimefile.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87C5F0CC26285E7E0067A1B5 /* moc_mimefile.cpp */; };
87C5F0D826285E7E0067A1B5 /* moc_quotedprintable.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87C5F0CD26285E7E0067A1B5 /* moc_quotedprintable.cpp */; };
87C5F0D926285E7E0067A1B5 /* moc_mimeattachment.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87C5F0CE26285E7E0067A1B5 /* moc_mimeattachment.cpp */; };
87CC3B9D25A08812001EC5A8 /* moc_domyoselliptical.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87CC3B9B25A08812001EC5A8 /* moc_domyoselliptical.cpp */; };
87CC3B9E25A08812001EC5A8 /* moc_elliptical.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87CC3B9C25A08812001EC5A8 /* moc_elliptical.cpp */; };
87CC3BA325A0885F001EC5A8 /* domyoselliptical.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87CC3B9F25A0885D001EC5A8 /* domyoselliptical.cpp */; };
@@ -179,6 +247,8 @@
87E6A85B25B5C8B900371D28 /* flywheelbike.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87E6A85925B5C8B900371D28 /* flywheelbike.cpp */; };
87EFB56E25BD703D0039DD5A /* proformtreadmill.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87EFB56C25BD703C0039DD5A /* proformtreadmill.cpp */; };
87EFB57025BD704A0039DD5A /* moc_proformtreadmill.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87EFB56F25BD704A0039DD5A /* moc_proformtreadmill.cpp */; };
87FE5BAF2692F3130056EFC8 /* tacxneo2.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87FE5BAD2692F3130056EFC8 /* tacxneo2.cpp */; };
87FE5BB12692F31E0056EFC8 /* moc_tacxneo2.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 87FE5BB02692F31E0056EFC8 /* moc_tacxneo2.cpp */; };
8C3422A825EF7ECD78951307 /* moc_bluetoothdevice.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 1B96B43BE93B05F81BBF0CCF /* moc_bluetoothdevice.cpp */; settings = {ATTRIBUTES = (); }; };
8FF7ED75180A8827C6B6AF63 /* qmldbg_inspector in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 67E53FD43BE69489B0434897 /* qmldbg_inspector */; };
906D4B242F504925A3CF2DBB /* GSS.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = C714C1AF3FA78E2DABBC17E8 /* GSS.framework */; };
@@ -370,6 +440,7 @@
2E6B7E1FF5E6A5461E7B7C44 /* fit_dive_summary_mesg.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fit_dive_summary_mesg.hpp; path = "/Users/cagnulein/qdomyos-zwift/src/fit-sdk/fit_dive_summary_mesg.hpp"; sourceTree = "<absolute>"; };
2E99CE78422C13B5E8F1EB53 /* qfit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = qfit.h; path = "/Users/cagnulein/qdomyos-zwift/src/qfit.h"; sourceTree = "<absolute>"; };
2E9A703E620AD39818182E87 /* FitField.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = FitField.h; path = "/Users/cagnulein/qdomyos-zwift/src/fit-sdk/FitField.h"; sourceTree = "<absolute>"; };
2F0E70F726316F3600E11F3A /* virtualbike_zwift.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = virtualbike_zwift.swift; path = ../src/ios/virtualbike_zwift.swift; sourceTree = "<group>"; };
2F875FD21B3CE91076B48D2D /* domyostreadmill.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = domyostreadmill.h; path = "/Users/cagnulein/qdomyos-zwift/src/domyostreadmill.h"; sourceTree = "<absolute>"; };
302316BD81D103EDFB1BBFF4 /* fit_event_mesg.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fit_event_mesg.hpp; path = "/Users/cagnulein/qdomyos-zwift/src/fit-sdk/fit_event_mesg.hpp"; sourceTree = "<absolute>"; };
306373050762B159D8FBFD7A /* fit_timestamp_correlation_mesg_listener.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fit_timestamp_correlation_mesg_listener.hpp; path = "/Users/cagnulein/qdomyos-zwift/src/fit-sdk/fit_timestamp_correlation_mesg_listener.hpp"; sourceTree = "<absolute>"; };
@@ -506,14 +577,50 @@
867187CB3CB3703D1925C88A /* fit_weather_conditions_mesg_listener.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fit_weather_conditions_mesg_listener.hpp; path = "/Users/cagnulein/qdomyos-zwift/src/fit-sdk/fit_weather_conditions_mesg_listener.hpp"; sourceTree = "<absolute>"; };
86DD72842A64993F31E31719 /* fit_ant_rx_mesg_listener.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fit_ant_rx_mesg_listener.hpp; path = "/Users/cagnulein/qdomyos-zwift/src/fit-sdk/fit_ant_rx_mesg_listener.hpp"; sourceTree = "<absolute>"; };
86F10E1AE2D47520E65C0543 /* fit_dive_summary_mesg_listener.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fit_dive_summary_mesg_listener.hpp; path = "/Users/cagnulein/qdomyos-zwift/src/fit-sdk/fit_dive_summary_mesg_listener.hpp"; sourceTree = "<absolute>"; };
87083D9426678EFA0072410D /* zwiftworkout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = zwiftworkout.h; path = ../src/zwiftworkout.h; sourceTree = "<group>"; };
87083D9526678EFA0072410D /* zwiftworkout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = zwiftworkout.cpp; path = ../src/zwiftworkout.cpp; sourceTree = "<group>"; };
8718CB98263063BB004BF4EE /* tcpclientinfosender.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcpclientinfosender.h; path = ../src/tcpclientinfosender.h; sourceTree = "<group>"; };
8718CB99263063BB004BF4EE /* templateinfosender.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = templateinfosender.h; path = ../src/templateinfosender.h; sourceTree = "<group>"; };
8718CB9A263063BC004BF4EE /* soleelliptical.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = soleelliptical.cpp; path = ../src/soleelliptical.cpp; sourceTree = "<group>"; };
8718CB9B263063BC004BF4EE /* templateinfosender.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = templateinfosender.cpp; path = ../src/templateinfosender.cpp; sourceTree = "<group>"; };
8718CB9C263063BC004BF4EE /* soleelliptical.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = soleelliptical.h; path = ../src/soleelliptical.h; sourceTree = "<group>"; };
8718CB9D263063BC004BF4EE /* templateinfosenderbuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = templateinfosenderbuilder.cpp; path = ../src/templateinfosenderbuilder.cpp; sourceTree = "<group>"; };
8718CB9E263063BC004BF4EE /* templateinfosenderbuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = templateinfosenderbuilder.h; path = ../src/templateinfosenderbuilder.h; sourceTree = "<group>"; };
8718CB9F263063BD004BF4EE /* tcpclientinfosender.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tcpclientinfosender.cpp; path = ../src/tcpclientinfosender.cpp; sourceTree = "<group>"; };
8718CBA1263063BD004BF4EE /* webserverinfosender.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = webserverinfosender.h; path = ../src/webserverinfosender.h; sourceTree = "<group>"; };
8718CBA7263063CD004BF4EE /* moc_templateinfosenderbuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_templateinfosenderbuilder.cpp; sourceTree = "<group>"; };
8718CBA8263063CD004BF4EE /* moc_tcpclientinfosender.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_tcpclientinfosender.cpp; sourceTree = "<group>"; };
8718CBA9263063CE004BF4EE /* moc_templateinfosender.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_templateinfosender.cpp; sourceTree = "<group>"; };
8718CBAA263063CE004BF4EE /* moc_soleelliptical.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_soleelliptical.cpp; sourceTree = "<group>"; };
871B9FD0265E6A8800DB41F4 /* powerzonepack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = powerzonepack.h; path = ../src/powerzonepack.h; sourceTree = "<group>"; };
871B9FD1265E6A8800DB41F4 /* powerzonepack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = powerzonepack.cpp; path = ../src/powerzonepack.cpp; sourceTree = "<group>"; };
871B9FD3265E6A9A00DB41F4 /* moc_powerzonepack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_powerzonepack.cpp; sourceTree = "<group>"; };
871E4CD025A6FB5A00E18D6D /* BLEPeripheralManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BLEPeripheralManager.swift; path = ../src/ios/BLEPeripheralManager.swift; sourceTree = "<group>"; };
872BAB4D261750EE006A59AB /* libQt5Charts.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQt5Charts.a; path = ../../Qt/5.15.2/ios/lib/libQt5Charts.a; sourceTree = "<group>"; };
872BAB4F261751FB006A59AB /* libqtchartsqml2.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libqtchartsqml2.a; path = ../../Qt/5.15.2/ios/qml/QtCharts/libqtchartsqml2.a; sourceTree = "<group>"; };
873063BC259DF20000DA0F44 /* heartratebelt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = heartratebelt.cpp; path = ../src/heartratebelt.cpp; sourceTree = "<group>"; };
873063BD259DF20000DA0F44 /* heartratebelt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = heartratebelt.h; path = ../src/heartratebelt.h; sourceTree = "<group>"; };
873063BF259DF2C500DA0F44 /* moc_heartratebelt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_heartratebelt.cpp; sourceTree = "<group>"; };
87310B1A266FBB54008BA0D6 /* homefitnessbuddy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = homefitnessbuddy.h; path = ../src/homefitnessbuddy.h; sourceTree = "<group>"; };
87310B1B266FBB54008BA0D6 /* smartrowrower.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = smartrowrower.cpp; path = ../src/smartrowrower.cpp; sourceTree = "<group>"; };
87310B1C266FBB57008BA0D6 /* homefitnessbuddy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = homefitnessbuddy.cpp; path = ../src/homefitnessbuddy.cpp; sourceTree = "<group>"; };
87310B1D266FBB58008BA0D6 /* smartrowrower.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = smartrowrower.h; path = ../src/smartrowrower.h; sourceTree = "<group>"; };
87310B20266FBB6E008BA0D6 /* moc_homefitnessbuddy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_homefitnessbuddy.cpp; sourceTree = "<group>"; };
87310B21266FBB77008BA0D6 /* moc_smartrowrower.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_smartrowrower.cpp; sourceTree = "<group>"; };
87318AAB2683799100770F13 /* echelonstride.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = echelonstride.cpp; path = ../src/echelonstride.cpp; sourceTree = "<group>"; };
87318AAC2683799100770F13 /* echelonstride.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = echelonstride.h; path = ../src/echelonstride.h; sourceTree = "<group>"; };
87318AAE2683799C00770F13 /* moc_echelonstride.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_echelonstride.cpp; sourceTree = "<group>"; };
87318AB026837AA500770F13 /* libQt5WebSockets.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQt5WebSockets.a; path = ../../Qt/5.15.2/ios/lib/libQt5WebSockets.a; sourceTree = "<group>"; };
87368824259C602800C71C7E /* watchAppStart.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = watchAppStart.swift; path = ../src/ios/watchAppStart.swift; sourceTree = "<group>"; };
87440FBB2640291700E4DC0B /* fitplusbike.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fitplusbike.h; path = ../src/fitplusbike.h; sourceTree = "<group>"; };
87440FBC2640291700E4DC0B /* fitplusbike.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fitplusbike.cpp; path = ../src/fitplusbike.cpp; sourceTree = "<group>"; };
87440FBE2640292900E4DC0B /* moc_fitplusbike.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_fitplusbike.cpp; sourceTree = "<group>"; };
87586A3F25B8340D00A243C4 /* proformbike.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = proformbike.h; path = ../src/proformbike.h; sourceTree = "<group>"; };
87586A4025B8340E00A243C4 /* proformbike.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = proformbike.cpp; path = ../src/proformbike.cpp; sourceTree = "<group>"; };
87586A4225B8341B00A243C4 /* moc_proformbike.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_proformbike.cpp; sourceTree = "<group>"; };
875F69B726342E8D0009FD78 /* spirittreadmill.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = spirittreadmill.h; path = ../src/spirittreadmill.h; sourceTree = "<group>"; };
875F69B826342E8D0009FD78 /* spirittreadmill.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = spirittreadmill.cpp; path = ../src/spirittreadmill.cpp; sourceTree = "<group>"; };
875F69BA26342E9A0009FD78 /* moc_spirittreadmill.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_spirittreadmill.cpp; sourceTree = "<group>"; };
8762D50B2601F7EA00F6F049 /* M3iNS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = M3iNS.mm; path = ../src/ios/M3iNS.mm; sourceTree = "<group>"; };
8762D50C2601F7EA00F6F049 /* M3iNSQT.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = M3iNSQT.cpp; path = ../src/ios/M3iNSQT.cpp; sourceTree = "<group>"; };
8762D50D2601F7EA00F6F049 /* M3iNS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = M3iNS.h; path = ../src/ios/M3iNS.h; sourceTree = "<group>"; };
@@ -556,6 +663,14 @@
8772A0E425E43AD90080718C /* trxappgateusbbike.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = trxappgateusbbike.h; path = ../src/trxappgateusbbike.h; sourceTree = "<group>"; };
8772A0E525E43ADA0080718C /* trxappgateusbbike.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = trxappgateusbbike.cpp; path = ../src/trxappgateusbbike.cpp; sourceTree = "<group>"; };
8772A0E725E43AE70080718C /* moc_trxappgateusbbike.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_trxappgateusbbike.cpp; sourceTree = "<group>"; };
8780D945264FB8AB00192D41 /* smartspin2k.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = smartspin2k.h; path = ../src/smartspin2k.h; sourceTree = "<group>"; };
8780D946264FB8AB00192D41 /* smartspin2k.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = smartspin2k.cpp; path = ../src/smartspin2k.cpp; sourceTree = "<group>"; };
8780D948264FB8B800192D41 /* moc_smartspin2k.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_smartspin2k.cpp; sourceTree = "<group>"; };
8781907C2615089D0085E656 /* peloton.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = peloton.cpp; path = ../src/peloton.cpp; sourceTree = "<group>"; };
8781907D2615089D0085E656 /* peloton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = peloton.h; path = ../src/peloton.h; sourceTree = "<group>"; };
8781907F261508B10085E656 /* moc_peloton.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_peloton.cpp; sourceTree = "<group>"; };
8781908126150B490085E656 /* libqtlabsplatformplugin.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libqtlabsplatformplugin.a; path = ../../Qt/5.15.2/ios/qml/Qt/labs/platform/libqtlabsplatformplugin.a; sourceTree = "<group>"; };
8781908326150C5B0085E656 /* libqtlabsplatformplugin_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libqtlabsplatformplugin_debug.a; path = ../../Qt/5.15.2/ios/qml/Qt/labs/platform/libqtlabsplatformplugin_debug.a; sourceTree = "<group>"; };
878225C234983ACB863D2D29 /* fit_nmea_sentence_mesg.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fit_nmea_sentence_mesg.hpp; path = "/Users/cagnulein/qdomyos-zwift/src/fit-sdk/fit_nmea_sentence_mesg.hpp"; sourceTree = "<absolute>"; };
8783153A25E8D81E0007817C /* moc_sportstechbike.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_sportstechbike.cpp; sourceTree = "<group>"; };
87842E7E25AF88FB00321E69 /* secret.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = secret.h; path = ../src/secret.h; sourceTree = "<group>"; };
@@ -563,9 +678,27 @@
878A331725AB4FF800BD13E1 /* yesoulbike.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = yesoulbike.cpp; path = ../src/yesoulbike.cpp; sourceTree = "<group>"; };
878A331825AB4FF800BD13E1 /* yesoulbike.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = yesoulbike.h; path = ../src/yesoulbike.h; sourceTree = "<group>"; };
878A331B25AB50C200BD13E1 /* moc_yesoulbike.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_yesoulbike.cpp; sourceTree = "<group>"; };
87900DC4268B672E000CB351 /* renphobike.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = renphobike.h; path = ../src/renphobike.h; sourceTree = "<group>"; };
87900DC5268B672E000CB351 /* renphobike.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = renphobike.cpp; path = ../src/renphobike.cpp; sourceTree = "<group>"; };
87900DC7268B673C000CB351 /* moc_renphobike.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_renphobike.cpp; sourceTree = "<group>"; };
8791A8A725C8602A003B50B2 /* inspirebike.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = inspirebike.h; path = ../src/inspirebike.h; sourceTree = "<group>"; };
8791A8A825C8602A003B50B2 /* inspirebike.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = inspirebike.cpp; path = ../src/inspirebike.cpp; sourceTree = "<group>"; };
8791A8A925C8603F003B50B2 /* moc_inspirebike.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_inspirebike.cpp; sourceTree = "<group>"; };
87A0C4B7262329A600121A76 /* npecablebike.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = npecablebike.cpp; path = ../src/npecablebike.cpp; sourceTree = "<group>"; };
87A0C4B8262329A600121A76 /* cscbike.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = cscbike.h; path = ../src/cscbike.h; sourceTree = "<group>"; };
87A0C4B9262329A600121A76 /* cscbike.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cscbike.cpp; path = ../src/cscbike.cpp; sourceTree = "<group>"; };
87A0C4BA262329A600121A76 /* npecablebike.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = npecablebike.h; path = ../src/npecablebike.h; sourceTree = "<group>"; };
87A0C4BD262329B500121A76 /* moc_cscbike.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_cscbike.cpp; sourceTree = "<group>"; };
87A0C4BE262329B500121A76 /* moc_npecablebike.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_npecablebike.cpp; sourceTree = "<group>"; };
87A18F052660D5C0002D7C96 /* ftmsrower.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ftmsrower.cpp; path = ../src/ftmsrower.cpp; sourceTree = "<group>"; };
87A18F062660D5C1002D7C96 /* ftmsrower.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ftmsrower.h; path = ../src/ftmsrower.h; sourceTree = "<group>"; };
87A18F082660D5D9002D7C96 /* moc_ftmsrower.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_ftmsrower.cpp; sourceTree = "<group>"; };
87A3BC1E2656429300D302E3 /* echelonrower.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = echelonrower.h; path = ../src/echelonrower.h; sourceTree = "<group>"; };
87A3BC1F2656429400D302E3 /* rower.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rower.cpp; path = ../src/rower.cpp; sourceTree = "<group>"; };
87A3BC202656429400D302E3 /* echelonrower.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = echelonrower.cpp; path = ../src/echelonrower.cpp; sourceTree = "<group>"; };
87A3BC212656429400D302E3 /* rower.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rower.h; path = ../src/rower.h; sourceTree = "<group>"; };
87A3BC24265642A200D302E3 /* moc_rower.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_rower.cpp; sourceTree = "<group>"; };
87A3BC25265642A200D302E3 /* moc_echelonrower.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_echelonrower.cpp; sourceTree = "<group>"; };
87A3EBB925D2CFED0040EB4C /* sportstechbike.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sportstechbike.h; path = ../src/sportstechbike.h; sourceTree = "<group>"; };
87A3EBBA25D2CFED0040EB4C /* sportstechbike.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = sportstechbike.cpp; path = ../src/sportstechbike.cpp; sourceTree = "<group>"; };
87A4B75F25AF27CB0027EF3C /* metric.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = metric.cpp; path = ../src/metric.cpp; sourceTree = "<group>"; };
@@ -580,6 +713,47 @@
87B617EF25F260140094A1CB /* moc_fitshowtreadmill.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_fitshowtreadmill.cpp; sourceTree = "<group>"; };
87B617F025F260140094A1CB /* moc_snodebike.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_snodebike.cpp; sourceTree = "<group>"; };
87B617F125F260150094A1CB /* moc_screencapture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_screencapture.cpp; sourceTree = "<group>"; };
87C5F09726285E5A0067A1B5 /* mimemessage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mimemessage.cpp; path = ../src/smtpclient/src/mimemessage.cpp; sourceTree = "<group>"; };
87C5F09826285E5A0067A1B5 /* mimecontentformatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mimecontentformatter.h; path = ../src/smtpclient/src/mimecontentformatter.h; sourceTree = "<group>"; };
87C5F09926285E5B0067A1B5 /* smtpclient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = smtpclient.h; path = ../src/smtpclient/src/smtpclient.h; sourceTree = "<group>"; };
87C5F09A26285E5B0067A1B5 /* quotedprintable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = quotedprintable.cpp; path = ../src/smtpclient/src/quotedprintable.cpp; sourceTree = "<group>"; };
87C5F09B26285E5B0067A1B5 /* mimecontentformatter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mimecontentformatter.cpp; path = ../src/smtpclient/src/mimecontentformatter.cpp; sourceTree = "<group>"; };
87C5F09C26285E5B0067A1B5 /* stagesbike.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stagesbike.cpp; path = ../src/stagesbike.cpp; sourceTree = "<group>"; };
87C5F09D26285E5B0067A1B5 /* stagesbike.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stagesbike.h; path = ../src/stagesbike.h; sourceTree = "<group>"; };
87C5F09E26285E5B0067A1B5 /* mimefile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mimefile.h; path = ../src/smtpclient/src/mimefile.h; sourceTree = "<group>"; };
87C5F09F26285E5B0067A1B5 /* mimeattachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mimeattachment.h; path = ../src/smtpclient/src/mimeattachment.h; sourceTree = "<group>"; };
87C5F0A026285E5C0067A1B5 /* mimehtml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mimehtml.cpp; path = ../src/smtpclient/src/mimehtml.cpp; sourceTree = "<group>"; };
87C5F0A126285E5C0067A1B5 /* mimefile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mimefile.cpp; path = ../src/smtpclient/src/mimefile.cpp; sourceTree = "<group>"; };
87C5F0A226285E5C0067A1B5 /* mimehtml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mimehtml.h; path = ../src/smtpclient/src/mimehtml.h; sourceTree = "<group>"; };
87C5F0A326285E5C0067A1B5 /* smtpexports.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = smtpexports.h; path = ../src/smtpclient/src/smtpexports.h; sourceTree = "<group>"; };
87C5F0A426285E5C0067A1B5 /* mimetext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mimetext.cpp; path = ../src/smtpclient/src/mimetext.cpp; sourceTree = "<group>"; };
87C5F0A526285E5C0067A1B5 /* SmtpMime */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = SmtpMime; path = ../src/smtpclient/src/SmtpMime; sourceTree = "<group>"; };
87C5F0A626285E5D0067A1B5 /* mimemessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mimemessage.h; path = ../src/smtpclient/src/mimemessage.h; sourceTree = "<group>"; };
87C5F0A726285E5D0067A1B5 /* chronobike.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = chronobike.cpp; path = ../src/chronobike.cpp; sourceTree = "<group>"; };
87C5F0A826285E5D0067A1B5 /* quotedprintable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = quotedprintable.h; path = ../src/smtpclient/src/quotedprintable.h; sourceTree = "<group>"; };
87C5F0A926285E5D0067A1B5 /* mimemultipart.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mimemultipart.cpp; path = ../src/smtpclient/src/mimemultipart.cpp; sourceTree = "<group>"; };
87C5F0AA26285E5D0067A1B5 /* chronobike.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = chronobike.h; path = ../src/chronobike.h; sourceTree = "<group>"; };
87C5F0AB26285E5D0067A1B5 /* emailaddress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = emailaddress.h; path = ../src/smtpclient/src/emailaddress.h; sourceTree = "<group>"; };
87C5F0AC26285E5D0067A1B5 /* smtpclient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = smtpclient.cpp; path = ../src/smtpclient/src/smtpclient.cpp; sourceTree = "<group>"; };
87C5F0AD26285E5D0067A1B5 /* mimepart.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mimepart.cpp; path = ../src/smtpclient/src/mimepart.cpp; sourceTree = "<group>"; };
87C5F0AE26285E5D0067A1B5 /* mimeattachment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mimeattachment.cpp; path = ../src/smtpclient/src/mimeattachment.cpp; sourceTree = "<group>"; };
87C5F0AF26285E5E0067A1B5 /* emailaddress.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = emailaddress.cpp; path = ../src/smtpclient/src/emailaddress.cpp; sourceTree = "<group>"; };
87C5F0B026285E5E0067A1B5 /* mimeinlinefile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mimeinlinefile.h; path = ../src/smtpclient/src/mimeinlinefile.h; sourceTree = "<group>"; };
87C5F0B126285E5E0067A1B5 /* mimepart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mimepart.h; path = ../src/smtpclient/src/mimepart.h; sourceTree = "<group>"; };
87C5F0B226285E5E0067A1B5 /* mimemultipart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mimemultipart.h; path = ../src/smtpclient/src/mimemultipart.h; sourceTree = "<group>"; };
87C5F0B326285E5E0067A1B5 /* mimeinlinefile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mimeinlinefile.cpp; path = ../src/smtpclient/src/mimeinlinefile.cpp; sourceTree = "<group>"; };
87C5F0B426285E5E0067A1B5 /* mimetext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mimetext.h; path = ../src/smtpclient/src/mimetext.h; sourceTree = "<group>"; };
87C5F0C426285E7D0067A1B5 /* moc_mimepart.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_mimepart.cpp; sourceTree = "<group>"; };
87C5F0C526285E7D0067A1B5 /* moc_smtpclient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_smtpclient.cpp; sourceTree = "<group>"; };
87C5F0C626285E7D0067A1B5 /* moc_stagesbike.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_stagesbike.cpp; sourceTree = "<group>"; };
87C5F0C726285E7D0067A1B5 /* moc_mimemultipart.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_mimemultipart.cpp; sourceTree = "<group>"; };
87C5F0C826285E7D0067A1B5 /* moc_mimecontentformatter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_mimecontentformatter.cpp; sourceTree = "<group>"; };
87C5F0C926285E7D0067A1B5 /* moc_chronobike.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_chronobike.cpp; sourceTree = "<group>"; };
87C5F0CA26285E7E0067A1B5 /* moc_mimehtml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_mimehtml.cpp; sourceTree = "<group>"; };
87C5F0CB26285E7E0067A1B5 /* moc_emailaddress.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_emailaddress.cpp; sourceTree = "<group>"; };
87C5F0CC26285E7E0067A1B5 /* moc_mimefile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_mimefile.cpp; sourceTree = "<group>"; };
87C5F0CD26285E7E0067A1B5 /* moc_quotedprintable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_quotedprintable.cpp; sourceTree = "<group>"; };
87C5F0CE26285E7E0067A1B5 /* moc_mimeattachment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_mimeattachment.cpp; sourceTree = "<group>"; };
87CC3B9B25A08812001EC5A8 /* moc_domyoselliptical.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_domyoselliptical.cpp; sourceTree = "<group>"; };
87CC3B9C25A08812001EC5A8 /* moc_elliptical.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_elliptical.cpp; sourceTree = "<group>"; };
87CC3B9F25A0885D001EC5A8 /* domyoselliptical.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = domyoselliptical.cpp; path = ../src/domyoselliptical.cpp; sourceTree = "<group>"; };
@@ -606,6 +780,9 @@
87EFB56D25BD703C0039DD5A /* proformtreadmill.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = proformtreadmill.h; path = ../src/proformtreadmill.h; sourceTree = "<group>"; };
87EFB56F25BD704A0039DD5A /* moc_proformtreadmill.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_proformtreadmill.cpp; sourceTree = "<group>"; };
87FD05DDC378E9BAD82A818F /* fit_ohr_settings_mesg_listener.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fit_ohr_settings_mesg_listener.hpp; path = "/Users/cagnulein/qdomyos-zwift/src/fit-sdk/fit_ohr_settings_mesg_listener.hpp"; sourceTree = "<absolute>"; };
87FE5BAD2692F3130056EFC8 /* tacxneo2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tacxneo2.cpp; path = ../src/tacxneo2.cpp; sourceTree = "<group>"; };
87FE5BAE2692F3130056EFC8 /* tacxneo2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tacxneo2.h; path = ../src/tacxneo2.h; sourceTree = "<group>"; };
87FE5BB02692F31E0056EFC8 /* moc_tacxneo2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = moc_tacxneo2.cpp; sourceTree = "<group>"; };
8865E12618F8B1C6C0E68392 /* fit_magnetometer_data_mesg_listener.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fit_magnetometer_data_mesg_listener.hpp; path = "/Users/cagnulein/qdomyos-zwift/src/fit-sdk/fit_magnetometer_data_mesg_listener.hpp"; sourceTree = "<absolute>"; };
888A6DE1E4CF07F80E80394B /* fit_climb_pro_mesg.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fit_climb_pro_mesg.hpp; path = "/Users/cagnulein/qdomyos-zwift/src/fit-sdk/fit_climb_pro_mesg.hpp"; sourceTree = "<absolute>"; };
89342BA50B7537C46D310A9D /* moc_gpx.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_gpx.cpp; path = "/Users/cagnulein/qdomyos-zwift/build-qdomyos-zwift-Qt_5_15_2_for_iOS-Debug/moc_gpx.cpp"; sourceTree = "<absolute>"; };
@@ -816,6 +993,10 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
87318AB126837C7600770F13 /* libQt5WebSockets.a in Link Binary With Libraries */,
872BAB50261751FB006A59AB /* libqtchartsqml2.a in Link Binary With Libraries */,
872BAB4E261750EE006A59AB /* libQt5Charts.a in Link Binary With Libraries */,
8781908526150C8E0085E656 /* libqtlabsplatformplugin.a in Link Binary With Libraries */,
38B66B7A90741F136A02EDEB /* qios in Link Binary With Libraries */,
B460F624007324313696BE86 /* QuartzCore.framework in Link Binary With Libraries */,
4EB68D0C8182BCE33529C421 /* AudioToolbox.framework in Link Binary With Libraries */,
@@ -909,6 +1090,7 @@
0FF051564C679F373AD93E32 /* ios */ = {
isa = PBXGroup;
children = (
2F0E70F726316F3600E11F3A /* virtualbike_zwift.swift */,
871E4CD025A6FB5A00E18D6D /* BLEPeripheralManager.swift */,
876E4E4E259479EE00BD5714 /* APIFetcher.swift */,
876E4E52259479EE00BD5714 /* AppDelegate.swift */,
@@ -928,6 +1110,36 @@
25B08E2869634E9BCBA333A2 /* Generated Sources */ = {
isa = PBXGroup;
children = (
87FE5BB02692F31E0056EFC8 /* moc_tacxneo2.cpp */,
87900DC7268B673C000CB351 /* moc_renphobike.cpp */,
87318AAE2683799C00770F13 /* moc_echelonstride.cpp */,
87310B20266FBB6E008BA0D6 /* moc_homefitnessbuddy.cpp */,
87310B21266FBB77008BA0D6 /* moc_smartrowrower.cpp */,
87A18F082660D5D9002D7C96 /* moc_ftmsrower.cpp */,
871B9FD3265E6A9A00DB41F4 /* moc_powerzonepack.cpp */,
87A3BC25265642A200D302E3 /* moc_echelonrower.cpp */,
87A3BC24265642A200D302E3 /* moc_rower.cpp */,
8780D948264FB8B800192D41 /* moc_smartspin2k.cpp */,
87440FBE2640292900E4DC0B /* moc_fitplusbike.cpp */,
875F69BA26342E9A0009FD78 /* moc_spirittreadmill.cpp */,
8718CBAA263063CE004BF4EE /* moc_soleelliptical.cpp */,
8718CBA8263063CD004BF4EE /* moc_tcpclientinfosender.cpp */,
8718CBA9263063CE004BF4EE /* moc_templateinfosender.cpp */,
8718CBA7263063CD004BF4EE /* moc_templateinfosenderbuilder.cpp */,
87C5F0C926285E7D0067A1B5 /* moc_chronobike.cpp */,
87C5F0CB26285E7E0067A1B5 /* moc_emailaddress.cpp */,
87C5F0CE26285E7E0067A1B5 /* moc_mimeattachment.cpp */,
87C5F0C826285E7D0067A1B5 /* moc_mimecontentformatter.cpp */,
87C5F0CC26285E7E0067A1B5 /* moc_mimefile.cpp */,
87C5F0CA26285E7E0067A1B5 /* moc_mimehtml.cpp */,
87C5F0C726285E7D0067A1B5 /* moc_mimemultipart.cpp */,
87C5F0C426285E7D0067A1B5 /* moc_mimepart.cpp */,
87C5F0CD26285E7E0067A1B5 /* moc_quotedprintable.cpp */,
87C5F0C526285E7D0067A1B5 /* moc_smtpclient.cpp */,
87C5F0C626285E7D0067A1B5 /* moc_stagesbike.cpp */,
87A0C4BD262329B500121A76 /* moc_cscbike.cpp */,
87A0C4BE262329B500121A76 /* moc_npecablebike.cpp */,
8781907F261508B10085E656 /* moc_peloton.cpp */,
87D269A225F535300076AA48 /* moc_m3ibike.cpp */,
87D269A125F535300076AA48 /* moc_skandikawiribike.cpp */,
87B617EF25F260140094A1CB /* moc_fitshowtreadmill.cpp */,
@@ -975,6 +1187,77 @@
2EB56BE3C2D93CDAB0C52E67 /* Sources */ = {
isa = PBXGroup;
children = (
87FE5BAD2692F3130056EFC8 /* tacxneo2.cpp */,
87FE5BAE2692F3130056EFC8 /* tacxneo2.h */,
87900DC5268B672E000CB351 /* renphobike.cpp */,
87900DC4268B672E000CB351 /* renphobike.h */,
87318AAB2683799100770F13 /* echelonstride.cpp */,
87318AAC2683799100770F13 /* echelonstride.h */,
87310B1C266FBB57008BA0D6 /* homefitnessbuddy.cpp */,
87310B1A266FBB54008BA0D6 /* homefitnessbuddy.h */,
87310B1B266FBB54008BA0D6 /* smartrowrower.cpp */,
87310B1D266FBB58008BA0D6 /* smartrowrower.h */,
87083D9526678EFA0072410D /* zwiftworkout.cpp */,
87083D9426678EFA0072410D /* zwiftworkout.h */,
87A18F052660D5C0002D7C96 /* ftmsrower.cpp */,
87A18F062660D5C1002D7C96 /* ftmsrower.h */,
871B9FD1265E6A8800DB41F4 /* powerzonepack.cpp */,
871B9FD0265E6A8800DB41F4 /* powerzonepack.h */,
87A3BC202656429400D302E3 /* echelonrower.cpp */,
87A3BC1E2656429300D302E3 /* echelonrower.h */,
87A3BC1F2656429400D302E3 /* rower.cpp */,
87A3BC212656429400D302E3 /* rower.h */,
8780D946264FB8AB00192D41 /* smartspin2k.cpp */,
8780D945264FB8AB00192D41 /* smartspin2k.h */,
87440FBC2640291700E4DC0B /* fitplusbike.cpp */,
87440FBB2640291700E4DC0B /* fitplusbike.h */,
875F69B826342E8D0009FD78 /* spirittreadmill.cpp */,
875F69B726342E8D0009FD78 /* spirittreadmill.h */,
8718CB9A263063BC004BF4EE /* soleelliptical.cpp */,
8718CB9C263063BC004BF4EE /* soleelliptical.h */,
8718CB9F263063BD004BF4EE /* tcpclientinfosender.cpp */,
8718CB98263063BB004BF4EE /* tcpclientinfosender.h */,
8718CB9B263063BC004BF4EE /* templateinfosender.cpp */,
8718CB99263063BB004BF4EE /* templateinfosender.h */,
8718CB9D263063BC004BF4EE /* templateinfosenderbuilder.cpp */,
8718CB9E263063BC004BF4EE /* templateinfosenderbuilder.h */,
8718CBA1263063BD004BF4EE /* webserverinfosender.h */,
87C5F0A726285E5D0067A1B5 /* chronobike.cpp */,
87C5F0AA26285E5D0067A1B5 /* chronobike.h */,
87C5F0AF26285E5E0067A1B5 /* emailaddress.cpp */,
87C5F0AB26285E5D0067A1B5 /* emailaddress.h */,
87C5F0AE26285E5D0067A1B5 /* mimeattachment.cpp */,
87C5F09F26285E5B0067A1B5 /* mimeattachment.h */,
87C5F09B26285E5B0067A1B5 /* mimecontentformatter.cpp */,
87C5F09826285E5A0067A1B5 /* mimecontentformatter.h */,
87C5F0A126285E5C0067A1B5 /* mimefile.cpp */,
87C5F09E26285E5B0067A1B5 /* mimefile.h */,
87C5F0A026285E5C0067A1B5 /* mimehtml.cpp */,
87C5F0A226285E5C0067A1B5 /* mimehtml.h */,
87C5F0B326285E5E0067A1B5 /* mimeinlinefile.cpp */,
87C5F0B026285E5E0067A1B5 /* mimeinlinefile.h */,
87C5F09726285E5A0067A1B5 /* mimemessage.cpp */,
87C5F0A626285E5D0067A1B5 /* mimemessage.h */,
87C5F0A926285E5D0067A1B5 /* mimemultipart.cpp */,
87C5F0B226285E5E0067A1B5 /* mimemultipart.h */,
87C5F0AD26285E5D0067A1B5 /* mimepart.cpp */,
87C5F0B126285E5E0067A1B5 /* mimepart.h */,
87C5F0A426285E5C0067A1B5 /* mimetext.cpp */,
87C5F0B426285E5E0067A1B5 /* mimetext.h */,
87C5F09A26285E5B0067A1B5 /* quotedprintable.cpp */,
87C5F0A826285E5D0067A1B5 /* quotedprintable.h */,
87C5F0AC26285E5D0067A1B5 /* smtpclient.cpp */,
87C5F09926285E5B0067A1B5 /* smtpclient.h */,
87C5F0A326285E5C0067A1B5 /* smtpexports.h */,
87C5F0A526285E5C0067A1B5 /* SmtpMime */,
87C5F09C26285E5B0067A1B5 /* stagesbike.cpp */,
87C5F09D26285E5B0067A1B5 /* stagesbike.h */,
87A0C4B9262329A600121A76 /* cscbike.cpp */,
87A0C4B8262329A600121A76 /* cscbike.h */,
87A0C4B7262329A600121A76 /* npecablebike.cpp */,
87A0C4BA262329A600121A76 /* npecablebike.h */,
8781907C2615089D0085E656 /* peloton.cpp */,
8781907D2615089D0085E656 /* peloton.h */,
8762D5112601F89500F6F049 /* scanrecordresult.cpp */,
8762D5122601F89500F6F049 /* scanrecordresult.h */,
8762D50E2601F7EA00F6F049 /* M3iIOS-Interface.h */,
@@ -1145,6 +1428,11 @@
AF39DD055C3EF8226FBE929D /* Frameworks */ = {
isa = PBXGroup;
children = (
87318AB026837AA500770F13 /* libQt5WebSockets.a */,
872BAB4F261751FB006A59AB /* libqtchartsqml2.a */,
872BAB4D261750EE006A59AB /* libQt5Charts.a */,
8781908326150C5B0085E656 /* libqtlabsplatformplugin_debug.a */,
8781908126150B490085E656 /* libqtlabsplatformplugin.a */,
2D4A13931169E5681CE465F0 /* Qt5NetworkAuth */,
BC3A8C3E433A8FA00BB15F07 /* qios */,
7EC00404ACD5AB0E97726B0E /* QuartzCore.framework */,
@@ -1625,6 +1913,7 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
87C5F0BC26285E5F0067A1B5 /* SmtpMime in Copy Bundle Resources */,
2188AA0A52E9CD610922F82E /* Default-568h@2x.png in Copy Bundle Resources */,
23FA86F306CFF9E704521C39 /* LaunchScreen.storyboard in Copy Bundle Resources */,
AE8CD574A5B60EF037ACA8F8 /* Images.xcassets in Copy Bundle Resources */,
@@ -1697,79 +1986,127 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
87C5F0BB26285E5F0067A1B5 /* mimetext.cpp in Compile Sources */,
2F0E70F826316F3600E11F3A /* virtualbike_zwift.swift in Compile Sources */,
8772A0E825E43AE70080718C /* moc_trxappgateusbbike.cpp in Compile Sources */,
87062646259480B200D06586 /* ViewController.swift in Compile Sources */,
87D269A425F535340076AA48 /* moc_m3ibike.cpp in Compile Sources */,
EA780CE97E201242E33E6EEE /* bike.cpp in Compile Sources */,
87C5F0D926285E7E0067A1B5 /* moc_mimeattachment.cpp in Compile Sources */,
87B617F225F260150094A1CB /* moc_fitshowtreadmill.cpp in Compile Sources */,
8556B13A3D02D52A21FC5E3E /* bluetooth.cpp in Compile Sources */,
87586A4125B8340E00A243C4 /* proformbike.cpp in Compile Sources */,
87C5F0C126285E5F0067A1B5 /* mimeattachment.cpp in Compile Sources */,
87440FBD2640291700E4DC0B /* fitplusbike.cpp in Compile Sources */,
878A331A25AB4FF800BD13E1 /* yesoulbike.cpp in Compile Sources */,
871E4CD125A6FB5A00E18D6D /* BLEPeripheralManager.swift in Compile Sources */,
20A50533946A39CBD2C89104 /* bluetoothdevice.cpp in Compile Sources */,
87C5F0D126285E7E0067A1B5 /* moc_stagesbike.cpp in Compile Sources */,
87E5D2C625E69F3100BDBE6C /* horizontreadmill.cpp in Compile Sources */,
87E5D2C825E69F4700BDBE6C /* moc_horizontreadmill.cpp in Compile Sources */,
F1F4043967BC815770C8BEEA /* domyostreadmill.cpp in Compile Sources */,
87C5F0BF26285E5F0067A1B5 /* smtpclient.cpp in Compile Sources */,
87C5F0D826285E7E0067A1B5 /* moc_quotedprintable.cpp in Compile Sources */,
62D26402BFE7552BD542F6DF /* echelonconnectsport.cpp in Compile Sources */,
8718CBA5263063BD004BF4EE /* tcpclientinfosender.cpp in Compile Sources */,
87318AAF2683799C00770F13 /* moc_echelonstride.cpp in Compile Sources */,
E858A5D7A16BAF2837B51B61 /* fit.cpp in Compile Sources */,
87DF68BD25E2675100FCDA46 /* moc_eslinkertreadmill.cpp in Compile Sources */,
8718CBAD263063CE004BF4EE /* moc_templateinfosender.cpp in Compile Sources */,
87C5F0D326285E7E0067A1B5 /* moc_mimecontentformatter.cpp in Compile Sources */,
8718CBAB263063CE004BF4EE /* moc_templateinfosenderbuilder.cpp in Compile Sources */,
C6B3CD471768392E18F85819 /* fit_accumulated_field.cpp in Compile Sources */,
3D7395B0A17915A06361C7F3 /* fit_accumulator.cpp in Compile Sources */,
2A61806454201575EDB3F94F /* fit_buffer_encode.cpp in Compile Sources */,
BE93C6EF2C2A6BFEEC9EA565 /* fit_buffered_mesg_broadcaster.cpp in Compile Sources */,
87B617EE25F25FED0094A1CB /* snodebike.cpp in Compile Sources */,
87C5F0B526285E5F0067A1B5 /* mimemessage.cpp in Compile Sources */,
873063C0259DF2C500DA0F44 /* moc_heartratebelt.cpp in Compile Sources */,
DD5ED224478CB82859C61B9F /* fit_buffered_record_mesg_broadcaster.cpp in Compile Sources */,
87368825259C602800C71C7E /* watchAppStart.swift in Compile Sources */,
876ED21925C3E9000065F3DC /* moc_ftmsbike.cpp in Compile Sources */,
87C5F0BD26285E5F0067A1B5 /* chronobike.cpp in Compile Sources */,
87900DC8268B673C000CB351 /* moc_renphobike.cpp in Compile Sources */,
87CC3B9E25A08812001EC5A8 /* moc_elliptical.cpp in Compile Sources */,
E7F190E59DC975BA4CA65F0C /* fit_crc.cpp in Compile Sources */,
87A18F092660D5D9002D7C96 /* moc_ftmsrower.cpp in Compile Sources */,
DA1DC0B761BD7A3004BCF43D /* fit_date_time.cpp in Compile Sources */,
87A3BC232656429600D302E3 /* echelonrower.cpp in Compile Sources */,
87CC3B9D25A08812001EC5A8 /* moc_domyoselliptical.cpp in Compile Sources */,
87900DC6268B672E000CB351 /* renphobike.cpp in Compile Sources */,
DF1FD9718B75FA591A7E3D80 /* fit_decode.cpp in Compile Sources */,
878A331D25AB50C300BD13E1 /* moc_yesoulbike.cpp in Compile Sources */,
952DBD14DF6369E885020EF4 /* fit_developer_field.cpp in Compile Sources */,
8718CBA2263063BD004BF4EE /* soleelliptical.cpp in Compile Sources */,
871B9FD2265E6A8800DB41F4 /* powerzonepack.cpp in Compile Sources */,
876ED21525C3E8DE0065F3DC /* ftmsbike.cpp in Compile Sources */,
87318AAD2683799100770F13 /* echelonstride.cpp in Compile Sources */,
87C5F0C326285E5F0067A1B5 /* mimeinlinefile.cpp in Compile Sources */,
87C5F0D226285E7E0067A1B5 /* moc_mimemultipart.cpp in Compile Sources */,
A4BD6DF51CFFF867B7B5AED4 /* fit_developer_field_definition.cpp in Compile Sources */,
8762D5132601F89500F6F049 /* scanrecordresult.cpp in Compile Sources */,
3015F9B9FF4CA6D653D46CCA /* fit_developer_field_description.cpp in Compile Sources */,
87310B22266FBB78008BA0D6 /* moc_homefitnessbuddy.cpp in Compile Sources */,
87CC3BA425A0885F001EC5A8 /* elliptical.cpp in Compile Sources */,
4AD2C93A2B8FD5855E521630 /* fit_encode.cpp in Compile Sources */,
8772A0E625E43ADB0080718C /* trxappgateusbbike.cpp in Compile Sources */,
87C5F0BE26285E5F0067A1B5 /* mimemultipart.cpp in Compile Sources */,
87C5F0D426285E7E0067A1B5 /* moc_chronobike.cpp in Compile Sources */,
BBBE7689F5792CB3FD1997EC /* fit_factory.cpp in Compile Sources */,
876ED21625C3E8DE0065F3DC /* schwinnic4bike.cpp in Compile Sources */,
87D269A325F535340076AA48 /* moc_skandikawiribike.cpp in Compile Sources */,
87C5F0C226285E5F0067A1B5 /* emailaddress.cpp in Compile Sources */,
25F2400F80DAFBD41FE5CC75 /* fit_field.cpp in Compile Sources */,
87A3BC27265642A300D302E3 /* moc_echelonrower.cpp in Compile Sources */,
87EFB56E25BD703D0039DD5A /* proformtreadmill.cpp in Compile Sources */,
87FE5BAF2692F3130056EFC8 /* tacxneo2.cpp in Compile Sources */,
8718CBAC263063CE004BF4EE /* moc_tcpclientinfosender.cpp in Compile Sources */,
333C629F93DB3941862924F7 /* fit_field_base.cpp in Compile Sources */,
EEC10275DF646075E08DDC9B /* fit_field_definition.cpp in Compile Sources */,
87062645259480AB00D06586 /* LocalNotificationHelper.swift in Compile Sources */,
8718CBA4263063BD004BF4EE /* templateinfosenderbuilder.cpp in Compile Sources */,
87E6A85B25B5C8B900371D28 /* flywheelbike.cpp in Compile Sources */,
48BA9CE9D6F256A15E8FB25D /* fit_mesg.cpp in Compile Sources */,
DD2E0091F3318F053D2995AA /* fit_mesg_broadcaster.cpp in Compile Sources */,
FE77C778768741F1A161682E /* fit_mesg_definition.cpp in Compile Sources */,
875F69B926342E8D0009FD78 /* spirittreadmill.cpp in Compile Sources */,
87DF68B825E2673B00FCDA46 /* eslinkertreadmill.cpp in Compile Sources */,
8781907E2615089D0085E656 /* peloton.cpp in Compile Sources */,
2B800DC34C91D8B080DEFBE8 /* fit_mesg_with_event_broadcaster.cpp in Compile Sources */,
6DC5D7C695B8763F9E2E029F /* fit_profile.cpp in Compile Sources */,
87C5F0B726285E5F0067A1B5 /* mimecontentformatter.cpp in Compile Sources */,
23191C28CB29474279752FD3 /* fit_protocol_validator.cpp in Compile Sources */,
275D55B5D956B2E5F1B7E46E /* fit_unicode.cpp in Compile Sources */,
ACB47DC464A2BC9D39C544AD /* gpx.cpp in Compile Sources */,
6361329E515248BB41640C07 /* homeform.cpp in Compile Sources */,
87A18F072660D5C1002D7C96 /* ftmsrower.cpp in Compile Sources */,
87C5F0D026285E7E0067A1B5 /* moc_smtpclient.cpp in Compile Sources */,
7CF08714869DA569C2EA551C /* keepawakehelper.cpp in Compile Sources */,
87310B1E266FBB59008BA0D6 /* smartrowrower.cpp in Compile Sources */,
87A3BC222656429600D302E3 /* rower.cpp in Compile Sources */,
C719682D8D421AF6B2DAAEA9 /* main.cpp in Compile Sources */,
25FCD41CCCAF49293B9369E8 /* qfit.cpp in Compile Sources */,
87C5F0B926285E5F0067A1B5 /* mimehtml.cpp in Compile Sources */,
27E452D452B62D0948DF0755 /* sessionline.cpp in Compile Sources */,
E40895A73216AC52D35083D9 /* signalhandler.cpp in Compile Sources */,
87DF68BF25E2675100FCDA46 /* moc_schwinnic4bike.cpp in Compile Sources */,
BE1D17BBF32F04829E1B3767 /* toorxtreadmill.cpp in Compile Sources */,
4697729B15991E98D6A2533D /* treadmill.cpp in Compile Sources */,
20AA270C9F447F42F5DC2FF2 /* trainprogram.cpp in Compile Sources */,
87C5F0C026285E5F0067A1B5 /* mimepart.cpp in Compile Sources */,
47E45EE0BB22C1E4332F1D1D /* trxappgateusbtreadmill.cpp in Compile Sources */,
8780D949264FB8B800192D41 /* moc_smartspin2k.cpp in Compile Sources */,
6943DA124B60175E1F9EBD1B /* virtualbike.cpp in Compile Sources */,
8780D947264FB8AC00192D41 /* smartspin2k.cpp in Compile Sources */,
87C5F0CF26285E7E0067A1B5 /* moc_mimepart.cpp in Compile Sources */,
0317752B0C295CAB82D37E45 /* virtualtreadmill.cpp in Compile Sources */,
87819080261508B10085E656 /* moc_peloton.cpp in Compile Sources */,
7EC1321DD83EAAFAA2B7109C /* domyosbike.cpp in Compile Sources */,
614192CB787D12C3E98ADE55 /* lockscreen.mm in Compile Sources */,
87A0C4BB262329A600121A76 /* npecablebike.cpp in Compile Sources */,
87A3BC26265642A300D302E3 /* moc_rower.cpp in Compile Sources */,
0F974CB18B3E792B42270F19 /* FitDecode.mm in Compile Sources */,
87440FBF2640292900E4DC0B /* moc_fitplusbike.cpp in Compile Sources */,
87B617EC25F25FED0094A1CB /* screencapture.cpp in Compile Sources */,
FB2566376FE0FB17ED3DE94D /* FitDeveloperField.mm in Compile Sources */,
43FA2D5EA73D9C89F1A333B6 /* FitEncode.mm in Compile Sources */,
@@ -1778,12 +2115,14 @@
87062643259480A200D06586 /* AppDelegate.swift in Compile Sources */,
2B42755BF45173E11E2110CB /* FitFieldDefinition.mm in Compile Sources */,
DF373364C5474D877506CB26 /* FitMesg.mm in Compile Sources */,
87FE5BB12692F31E0056EFC8 /* moc_tacxneo2.cpp in Compile Sources */,
8791A8AA25C8603F003B50B2 /* moc_inspirebike.cpp in Compile Sources */,
03F49BBCF19B73B18385B13D /* FitMesgDefinition.mm in Compile Sources */,
2D4684BE88B9B0456A50B3F0 /* qdomyoszwift_plugin_import.cpp in Compile Sources */,
8783153C25E8DAFD0007817C /* sportstechbike.cpp in Compile Sources */,
210F6A0A7E2FA7CDD3CA0084 /* qdomyoszwift_qml_plugin_import.cpp in Compile Sources */,
87062644259480A600D06586 /* APIFetcher.swift in Compile Sources */,
87C5F0D626285E7E0067A1B5 /* moc_emailaddress.cpp in Compile Sources */,
39FAA19B9285AB16AE3A39BA /* qrc_icons.cpp in Compile Sources */,
87D2699F25F535200076AA48 /* m3ibike.cpp in Compile Sources */,
7352E0F0EE5366AC809B9D64 /* qrc_qml.cpp in Compile Sources */,
@@ -1798,27 +2137,42 @@
9D9484EED654597C394345DE /* moc_echelonconnectsport.cpp in Compile Sources */,
7DEEAF0C3D671FBFD84ACFCE /* moc_homeform.cpp in Compile Sources */,
934A3E33459C9220F257B271 /* moc_qfit.cpp in Compile Sources */,
8718CBAE263063CE004BF4EE /* moc_soleelliptical.cpp in Compile Sources */,
E62DA5FF2436135448C94671 /* moc_toorxtreadmill.cpp in Compile Sources */,
87586A4325B8341B00A243C4 /* moc_proformbike.cpp in Compile Sources */,
87CC3BA325A0885F001EC5A8 /* domyoselliptical.cpp in Compile Sources */,
87B617F325F260150094A1CB /* moc_snodebike.cpp in Compile Sources */,
87C5F0D726285E7E0067A1B5 /* moc_mimefile.cpp in Compile Sources */,
8762D5102601F7EA00F6F049 /* M3iNSQT.cpp in Compile Sources */,
8718CBA3263063BD004BF4EE /* templateinfosender.cpp in Compile Sources */,
E8B499F921FB0AB55C7A8A8B /* moc_gpx.cpp in Compile Sources */,
87E6A85825B5C88E00371D28 /* moc_flywheelbike.cpp in Compile Sources */,
87310B1F266FBB59008BA0D6 /* homefitnessbuddy.cpp in Compile Sources */,
140BAAA8823E05940EF35A38 /* moc_treadmill.cpp in Compile Sources */,
87C5F0BA26285E5F0067A1B5 /* mimefile.cpp in Compile Sources */,
87B617F425F260150094A1CB /* moc_screencapture.cpp in Compile Sources */,
87B617ED25F25FED0094A1CB /* fitshowtreadmill.cpp in Compile Sources */,
87A0C4BC262329A600121A76 /* cscbike.cpp in Compile Sources */,
692540CF811B06A8710A0A52 /* moc_mainwindow.cpp in Compile Sources */,
87D269A025F535200076AA48 /* skandikawiribike.cpp in Compile Sources */,
8791A8AB25C861BD003B50B2 /* inspirebike.cpp in Compile Sources */,
87062647259480B400D06586 /* WatchKitConnection.swift in Compile Sources */,
AFEC086E92015064EB841234 /* moc_trainprogram.cpp in Compile Sources */,
87A0C4C0262329B500121A76 /* moc_npecablebike.cpp in Compile Sources */,
8762D50F2601F7EA00F6F049 /* M3iNS.mm in Compile Sources */,
87C5F0B626285E5F0067A1B5 /* quotedprintable.cpp in Compile Sources */,
87310B23266FBB78008BA0D6 /* moc_smartrowrower.cpp in Compile Sources */,
EE29228550794460E7654533 /* moc_trxappgateusbtreadmill.cpp in Compile Sources */,
3DB7B5F0CE1E2390CEFFC1E8 /* moc_virtualbike.cpp in Compile Sources */,
5FE99682776C1DE51F508F6B /* moc_virtualtreadmill.cpp in Compile Sources */,
74C43649C9C4E2E5F9378019 /* moc_domyosbike.cpp in Compile Sources */,
87083D9626678EFA0072410D /* zwiftworkout.cpp in Compile Sources */,
87C5F0B826285E5F0067A1B5 /* stagesbike.cpp in Compile Sources */,
87C5F0D526285E7E0067A1B5 /* moc_mimehtml.cpp in Compile Sources */,
871B9FD4265E6A9A00DB41F4 /* moc_powerzonepack.cpp in Compile Sources */,
87A0C4BF262329B500121A76 /* moc_cscbike.cpp in Compile Sources */,
8783153B25E8D81E0007817C /* moc_sportstechbike.cpp in Compile Sources */,
875F69BB26342E9A0009FD78 /* moc_spirittreadmill.cpp in Compile Sources */,
);
name = "Compile Sources";
runOnlyForDeploymentPostprocessing = 0;
@@ -2164,7 +2518,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = "../src/ios/qdomyos-zwift.entitlements";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 2.5.11;
CURRENT_PROJECT_VERSION = 2.6.60;
DEVELOPMENT_TEAM = 6335M7T29D;
ENABLE_BITCODE = YES;
HEADER_SEARCH_PATHS = (
@@ -2181,13 +2535,46 @@
../../Qt/5.15.2/ios/include/QtPositioning,
../../Qt/5.15.2/ios/include/QtQmlModels,
../../Qt/5.15.2/ios/include/QtQml,
../../Qt/5.15.2/ios/include/QtCharts,
../../Qt/5.15.2/ios/include/QtNetwork,
../../Qt/5.15.2/ios/include/QtCore,
.,
"../../Qt/5.15.2/ios/mkspecs/macx-ios-clang",
../../Qt/5.15.2/ios/include/QtNetworkAuth,
);
MARKETING_VERSION = 2.5;
LIBRARY_SEARCH_PATHS = (
/Users/cagnulein/Qt/5.15.2/ios/plugins/platforms,
/System/Library/Frameworks/,
/Users/cagnulein/Qt/5.15.2/ios/lib,
/Users/cagnulein/Qt/5.15.2/ios/plugins/imageformats,
/Users/cagnulein/Qt/5.15.2/ios/plugins/position,
/Users/cagnulein/Qt/5.15.2/ios/lib,
/Users/cagnulein/Qt/5.15.2/ios/plugins/qmltooling,
/Users/cagnulein/Qt/5.15.2/ios/plugins/bearer,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtGraphicalEffects/private,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQml/Models.2,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQml/WorkerScript.2,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQuick/Dialogs,
/Users/cagnulein/Qt/5.15.2/ios/qml/Qt/labs/folderlistmodel,
/Users/cagnulein/Qt/5.15.2/ios/qml/Qt/labs/platform,
/Users/cagnulein/Qt/5.15.2/ios/qml/Qt/labs/settings,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQuick/Dialogs/Private,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQuick/Controls,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQuick/PrivateWidgets,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQml,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQuick/Layouts,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQuick/Window.2,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQuick.2,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQuick/Templates.2,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQuick/Controls.2,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQuick/Controls.2/Material,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQuick/Controls.2/Fusion,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQuick/Controls.2/Universal,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtGraphicalEffects,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQuick/Controls.2/Imagine,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtCharts,
);
MARKETING_VERSION = 2.6;
PRODUCT_BUNDLE_IDENTIFIER = "org.cagnulein.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_NAME = qdomyoszwift;
QMAKE_FULL_VERSION = 1.7.0;
@@ -2216,7 +2603,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = "../src/ios/qdomyos-zwift.entitlements";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 2.5.11;
CURRENT_PROJECT_VERSION = 2.6.60;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = 6335M7T29D;
ENABLE_BITCODE = YES;
@@ -2235,13 +2622,46 @@
../../Qt/5.15.2/ios/include/QtPositioning,
../../Qt/5.15.2/ios/include/QtQmlModels,
../../Qt/5.15.2/ios/include/QtQml,
../../Qt/5.15.2/ios/include/QtCharts,
../../Qt/5.15.2/ios/include/QtNetwork,
../../Qt/5.15.2/ios/include/QtCore,
.,
"../../Qt/5.15.2/ios/mkspecs/macx-ios-clang",
../../Qt/5.15.2/ios/include/QtNetworkAuth,
);
MARKETING_VERSION = 2.5;
LIBRARY_SEARCH_PATHS = (
/Users/cagnulein/Qt/5.15.2/ios/plugins/platforms,
/System/Library/Frameworks/,
/Users/cagnulein/Qt/5.15.2/ios/lib,
/Users/cagnulein/Qt/5.15.2/ios/plugins/imageformats,
/Users/cagnulein/Qt/5.15.2/ios/plugins/position,
/Users/cagnulein/Qt/5.15.2/ios/lib,
/Users/cagnulein/Qt/5.15.2/ios/plugins/qmltooling,
/Users/cagnulein/Qt/5.15.2/ios/plugins/bearer,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtGraphicalEffects/private,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQml/Models.2,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQml/WorkerScript.2,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQuick/Dialogs,
/Users/cagnulein/Qt/5.15.2/ios/qml/Qt/labs/folderlistmodel,
/Users/cagnulein/Qt/5.15.2/ios/qml/Qt/labs/platform,
/Users/cagnulein/Qt/5.15.2/ios/qml/Qt/labs/settings,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQuick/Dialogs/Private,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQuick/Controls,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQuick/PrivateWidgets,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQml,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQuick/Layouts,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQuick/Window.2,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQuick.2,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQuick/Templates.2,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQuick/Controls.2,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQuick/Controls.2/Material,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQuick/Controls.2/Fusion,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQuick/Controls.2/Universal,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtGraphicalEffects,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtQuick/Controls.2/Imagine,
/Users/cagnulein/Qt/5.15.2/ios/qml/QtCharts,
);
MARKETING_VERSION = 2.6;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "org.cagnulein.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_NAME = qdomyoszwift;
@@ -2304,7 +2724,7 @@
CODE_SIGN_ENTITLEMENTS = "watchkit Extension/WatchKit Extension.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 2.5.11;
CURRENT_PROJECT_VERSION = 2.6.60;
DEVELOPMENT_TEAM = 6335M7T29D;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
@@ -2324,7 +2744,7 @@
IBSC_MODULE = watchkit_Extension;
INFOPLIST_FILE = watchkit/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
MARKETING_VERSION = 2.5;
MARKETING_VERSION = 2.6;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
OTHER_LDFLAGS = (
@@ -2394,7 +2814,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_ENTITLEMENTS = "watchkit Extension/WatchKit Extension.entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 2.5.11;
CURRENT_PROJECT_VERSION = 2.6.60;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = 6335M7T29D;
ENABLE_NS_ASSERTIONS = NO;
@@ -2410,7 +2830,7 @@
IBSC_MODULE = watchkit_Extension;
INFOPLIST_FILE = watchkit/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
MARKETING_VERSION = 2.5;
MARKETING_VERSION = 2.6;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
OTHER_LDFLAGS = (
@@ -2478,7 +2898,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_ENTITLEMENTS = "watchkit Extension/WatchKit Extension.entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 2.5.11;
CURRENT_PROJECT_VERSION = 2.6.60;
DEVELOPMENT_ASSET_PATHS = "\"watchkit Extension/Preview Content\"";
ENABLE_PREVIEWS = YES;
ENABLE_STRICT_OBJC_MSGSEND = YES;
@@ -2498,7 +2918,7 @@
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = "watchkit Extension/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MARKETING_VERSION = 2.5;
MARKETING_VERSION = 2.6;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
OTHER_LDFLAGS = (
@@ -2565,7 +2985,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_ENTITLEMENTS = "watchkit Extension/WatchKit Extension.entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 2.5.11;
CURRENT_PROJECT_VERSION = 2.6.60;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_ASSET_PATHS = "\"watchkit Extension/Preview Content\"";
ENABLE_NS_ASSERTIONS = NO;
@@ -2581,7 +3001,7 @@
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = "watchkit Extension/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MARKETING_VERSION = 2.5;
MARKETING_VERSION = 2.6;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
OTHER_LDFLAGS = (

View File

@@ -59,10 +59,19 @@ extension MainController {
}
extension MainController: WorkoutTrackingDelegate {
func didReceiveHealthKitDistanceCycling(_ distanceCycling: Double) {
}
func didReceiveHealthKitActiveEnergyBurned(_ activeEnergyBurned: Double) {
}
func didReceiveHealthKitHeartRate(_ heartRate: Double) {
heartRateLabel.setText("\(heartRate) BPM")
WatchKitConnection.shared.sendMessage(message: ["heartRate":
"\(heartRate)" as AnyObject])
WorkoutTracking.distance = WatchKitConnection.distance
WorkoutTracking.kcal = WatchKitConnection.kcal
}
func didReceiveHealthKitStepCounts(_ stepCounts: Double) {

View File

@@ -21,6 +21,8 @@ protocol WatchKitConnectionProtocol {
class WatchKitConnection: NSObject {
static let shared = WatchKitConnection()
public static var distance = 0.0
public static var kcal = 0.0
weak var delegate: WatchKitConnectionDelegate?
private override init() {
@@ -59,6 +61,10 @@ extension WatchKitConnection: WatchKitConnectionProtocol {
{
validReachableSession?.sendMessage(message, replyHandler: { (result) in
print(result)
let dDistance = Double(result["distance"] as! Double)
WatchKitConnection.distance = dDistance
let dKcal = Double(result["kcal"] as! Double)
WatchKitConnection.kcal = dKcal
}, errorHandler: { (error) in
print(error)
})

View File

@@ -1,199 +1,255 @@
//
// WatchWorkoutTracking.swift
// ElecDemo WatchKit Extension
//
// Created by NhatHM on 8/12/19.
// Copyright © 2019 GST.PID. All rights reserved.
//
import Foundation
import HealthKit
protocol WorkoutTrackingDelegate: class {
func didReceiveHealthKitHeartRate(_ heartRate: Double)
func didReceiveHealthKitStepCounts(_ stepCounts: Double)
}
protocol WorkoutTrackingProtocol {
static func authorizeHealthKit()
func startWorkOut()
func stopWorkOut()
func fetchStepCounts()
}
class WorkoutTracking: NSObject {
static let shared = WorkoutTracking()
let healthStore = HKHealthStore()
let configuration = HKWorkoutConfiguration()
var workoutSession: HKWorkoutSession!
var workoutBuilder: HKLiveWorkoutBuilder!
weak var delegate: WorkoutTrackingDelegate?
override init() {
super.init()
}
}
extension WorkoutTracking {
private func handleSendStatisticsData(_ statistics: HKStatistics) {
switch statistics.quantityType {
case HKQuantityType.quantityType(forIdentifier: .heartRate):
let heartRateUnit = HKUnit.count().unitDivided(by: HKUnit.minute())
let value = statistics.mostRecentQuantity()?.doubleValue(for: heartRateUnit)
let roundedValue = Double( round( 1 * value! ) / 1 )
delegate?.didReceiveHealthKitHeartRate(roundedValue)
case HKQuantityType.quantityType(forIdentifier: .stepCount):
guard let stepCounts = HKQuantityType.quantityType(forIdentifier: .stepCount) else {
return
}
let startOfDay = Calendar.current.startOfDay(for: Date())
let predicate = HKQuery.predicateForSamples(withStart: startOfDay, end: Date(), options: .strictStartDate)
let query = HKStatisticsQuery(quantityType: stepCounts, quantitySamplePredicate: predicate, options: .cumulativeSum) { [weak self] (_, result, error) in
guard let weakSelf = self else {
return
}
var resultCount = 0.0
guard let result = result else {
print("Failed to fetch steps rate")
return
}
if let sum = result.sumQuantity() {
resultCount = sum.doubleValue(for: HKUnit.count())
weakSelf.delegate?.didReceiveHealthKitStepCounts(resultCount)
} else {
print("Failed to fetch steps rate 2")
}
}
healthStore.execute(query)
return
default:
return
}
}
private func configWorkout() {
configuration.activityType = .cycling
configuration.locationType = .indoor
do {
workoutSession = try HKWorkoutSession(healthStore: healthStore, configuration: configuration)
workoutBuilder = workoutSession?.associatedWorkoutBuilder()
} catch {
return
}
workoutSession.delegate = self
workoutBuilder.delegate = self
workoutBuilder.dataSource = HKLiveWorkoutDataSource(healthStore: healthStore, workoutConfiguration: configuration)
}
}
extension WorkoutTracking: WorkoutTrackingProtocol {
static func authorizeHealthKit() {
if HKHealthStore.isHealthDataAvailable() {
let infoToRead = Set([
HKSampleType.quantityType(forIdentifier: .stepCount)!,
HKSampleType.quantityType(forIdentifier: .heartRate)!,
HKSampleType.workoutType()
])
let infoToShare = Set([
HKSampleType.quantityType(forIdentifier: .stepCount)!,
HKSampleType.quantityType(forIdentifier: .heartRate)!,
HKSampleType.workoutType()
])
HKHealthStore().requestAuthorization(toShare: infoToShare, read: infoToRead) { (success, error) in
if success {
print("Authorization healthkit success")
} else if let error = error {
print(error)
}
}
} else {
print("HealthKit not avaiable")
}
}
func startWorkOut() {
print("Start workout")
configWorkout()
workoutSession.startActivity(with: Date())
workoutBuilder.beginCollection(withStart: Date()) { (success, error) in
print(success)
if let error = error {
print(error)
}
}
}
func stopWorkOut() {
print("Stop workout")
workoutSession.stopActivity(with: Date())
workoutSession.end()
workoutBuilder.endCollection(withEnd: Date()) { (success, error) in
}
}
func fetchStepCounts() {
guard let stepCounts = HKQuantityType.quantityType(forIdentifier: .stepCount) else {
return
}
let startOfDay = Calendar.current.startOfDay(for: Date())
let predicate = HKQuery.predicateForSamples(withStart: startOfDay, end: Date(), options: .strictStartDate)
let query = HKStatisticsQuery(quantityType: stepCounts, quantitySamplePredicate: predicate, options: .cumulativeSum) { [weak self] (_, result, error) in
guard let weakSelf = self else {
return
}
var resultCount = 0.0
guard let result = result else {
print("Failed to fetch steps rate")
return
}
if let sum = result.sumQuantity() {
resultCount = sum.doubleValue(for: HKUnit.count())
weakSelf.delegate?.didReceiveHealthKitStepCounts(resultCount)
} else {
print("Failed to fetch steps rate 2")
}
}
healthStore.execute(query)
}
}
extension WorkoutTracking: HKLiveWorkoutBuilderDelegate {
func workoutBuilder(_ workoutBuilder: HKLiveWorkoutBuilder, didCollectDataOf collectedTypes: Set<HKSampleType>) {
print("GET DATA: \(Date())")
for type in collectedTypes {
guard let quantityType = type as? HKQuantityType else {
return
}
if let statistics = workoutBuilder.statistics(for: quantityType) {
handleSendStatisticsData(statistics)
}
}
}
func workoutBuilderDidCollectEvent(_ workoutBuilder: HKLiveWorkoutBuilder) {
}
}
extension WorkoutTracking: HKWorkoutSessionDelegate {
func workoutSession(_ workoutSession: HKWorkoutSession, didChangeTo toState: HKWorkoutSessionState, from fromState: HKWorkoutSessionState, date: Date) {
}
func workoutSession(_ workoutSession: HKWorkoutSession, didFailWithError error: Error) {
}
}
//
// WatchWorkoutTracking.swift
// ElecDemo WatchKit Extension
//
// Created by NhatHM on 8/12/19.
// Copyright © 2019 GST.PID. All rights reserved.
//
import Foundation
import HealthKit
protocol WorkoutTrackingDelegate: class {
func didReceiveHealthKitHeartRate(_ heartRate: Double)
func didReceiveHealthKitStepCounts(_ stepCounts: Double)
func didReceiveHealthKitDistanceCycling(_ distanceCycling: Double)
func didReceiveHealthKitActiveEnergyBurned(_ activeEnergyBurned: Double)
}
protocol WorkoutTrackingProtocol {
static func authorizeHealthKit()
func startWorkOut()
func stopWorkOut()
func fetchStepCounts()
}
class WorkoutTracking: NSObject {
static let shared = WorkoutTracking()
public static var distance = Double()
public static var kcal = Double()
let healthStore = HKHealthStore()
let configuration = HKWorkoutConfiguration()
var workoutSession: HKWorkoutSession!
var workoutBuilder: HKLiveWorkoutBuilder!
weak var delegate: WorkoutTrackingDelegate?
override init() {
super.init()
}
}
extension WorkoutTracking {
private func handleSendStatisticsData(_ statistics: HKStatistics) {
switch statistics.quantityType {
case HKQuantityType.quantityType(forIdentifier: .distanceCycling):
let distanceUnit = HKUnit.mile()
let value = statistics.mostRecentQuantity()?.doubleValue(for: distanceUnit)
let roundedValue = Double( round( 1 * value! ) / 1 )
delegate?.didReceiveHealthKitDistanceCycling(roundedValue)
case HKQuantityType.quantityType(forIdentifier: .activeEnergyBurned):
let energyUnit = HKUnit.kilocalorie()
let value = statistics.mostRecentQuantity()?.doubleValue(for: energyUnit)
let roundedValue = Double( round( 1 * value! ) / 1 )
delegate?.didReceiveHealthKitActiveEnergyBurned(roundedValue)
case HKQuantityType.quantityType(forIdentifier: .heartRate):
let heartRateUnit = HKUnit.count().unitDivided(by: HKUnit.minute())
let value = statistics.mostRecentQuantity()?.doubleValue(for: heartRateUnit)
let roundedValue = Double( round( 1 * value! ) / 1 )
delegate?.didReceiveHealthKitHeartRate(roundedValue)
case HKQuantityType.quantityType(forIdentifier: .stepCount):
guard let stepCounts = HKQuantityType.quantityType(forIdentifier: .stepCount) else {
return
}
let startOfDay = Calendar.current.startOfDay(for: Date())
let predicate = HKQuery.predicateForSamples(withStart: startOfDay, end: Date(), options: .strictStartDate)
let query = HKStatisticsQuery(quantityType: stepCounts, quantitySamplePredicate: predicate, options: .cumulativeSum) { [weak self] (_, result, error) in
guard let weakSelf = self else {
return
}
var resultCount = 0.0
guard let result = result else {
print("Failed to fetch steps rate")
return
}
if let sum = result.sumQuantity() {
resultCount = sum.doubleValue(for: HKUnit.count())
weakSelf.delegate?.didReceiveHealthKitStepCounts(resultCount)
} else {
print("Failed to fetch steps rate 2")
}
}
healthStore.execute(query)
return
default:
return
}
}
private func configWorkout() {
configuration.activityType = .cycling
configuration.locationType = .indoor
do {
workoutSession = try HKWorkoutSession(healthStore: healthStore, configuration: configuration)
workoutBuilder = workoutSession?.associatedWorkoutBuilder()
} catch {
return
}
workoutSession.delegate = self
workoutBuilder.delegate = self
workoutBuilder.dataSource = HKLiveWorkoutDataSource(healthStore: healthStore, workoutConfiguration: configuration)
}
}
extension WorkoutTracking: WorkoutTrackingProtocol {
static func authorizeHealthKit() {
if HKHealthStore.isHealthDataAvailable() {
let infoToRead = Set([
HKSampleType.quantityType(forIdentifier: .stepCount)!,
HKSampleType.quantityType(forIdentifier: .heartRate)!,
/*HKSampleType.quantityType(forIdentifier: .distanceCycling)!,
HKSampleType.quantityType(forIdentifier: .activeEnergyBurned)!,*/
HKSampleType.workoutType()
])
let infoToShare = Set([
HKSampleType.quantityType(forIdentifier: .stepCount)!,
HKSampleType.quantityType(forIdentifier: .heartRate)!,
HKSampleType.quantityType(forIdentifier: .distanceCycling)!,
HKSampleType.quantityType(forIdentifier: .activeEnergyBurned)!,
HKSampleType.workoutType()
])
HKHealthStore().requestAuthorization(toShare: infoToShare, read: infoToRead) { (success, error) in
if success {
print("Authorization healthkit success")
} else if let error = error {
print(error)
}
}
} else {
print("HealthKit not avaiable")
}
}
func startWorkOut() {
print("Start workout")
configWorkout()
workoutSession.startActivity(with: Date())
workoutBuilder.beginCollection(withStart: Date()) { (success, error) in
print(success)
if let error = error {
print(error)
}
}
}
func stopWorkOut() {
print("Stop workout")
workoutSession.stopActivity(with: Date())
workoutSession.end()
guard let quantityType = HKQuantityType.quantityType(
forIdentifier: .activeEnergyBurned) else {
return
}
let unit = HKUnit.kilocalorie()
let totalEnergyBurned = WorkoutTracking.kcal
let quantity = HKQuantity(unit: unit,
doubleValue: totalEnergyBurned)
let sample = HKCumulativeQuantitySeriesSample(type: quantityType,
quantity: quantity,
start: workoutSession.startDate!,
end: Date())
workoutBuilder.add([sample]) {(success, error) in}
guard let quantityTypeDistance = HKQuantityType.quantityType(
forIdentifier: .distanceCycling) else {
return
}
let unitDistance = HKUnit.mile()
let miles = WorkoutTracking.distance
let quantityMiles = HKQuantity(unit: unitDistance,
doubleValue: miles)
let sampleDistance = HKCumulativeQuantitySeriesSample(type: quantityTypeDistance,
quantity: quantityMiles,
start: workoutSession.startDate!,
end: Date())
workoutBuilder.add([sample]) {(success, error) in}
workoutBuilder.add([sampleDistance]) {(success, error) in}
workoutBuilder.endCollection(withEnd: Date()) { (success, error) in
}
}
func fetchStepCounts() {
guard let stepCounts = HKQuantityType.quantityType(forIdentifier: .stepCount) else {
return
}
let startOfDay = Calendar.current.startOfDay(for: Date())
let predicate = HKQuery.predicateForSamples(withStart: startOfDay, end: Date(), options: .strictStartDate)
let query = HKStatisticsQuery(quantityType: stepCounts, quantitySamplePredicate: predicate, options: .cumulativeSum) { [weak self] (_, result, error) in
guard let weakSelf = self else {
return
}
var resultCount = 0.0
guard let result = result else {
print("Failed to fetch steps rate")
return
}
if let sum = result.sumQuantity() {
resultCount = sum.doubleValue(for: HKUnit.count())
weakSelf.delegate?.didReceiveHealthKitStepCounts(resultCount)
} else {
print("Failed to fetch steps rate 2")
}
}
healthStore.execute(query)
}
}
extension WorkoutTracking: HKLiveWorkoutBuilderDelegate {
func workoutBuilder(_ workoutBuilder: HKLiveWorkoutBuilder, didCollectDataOf collectedTypes: Set<HKSampleType>) {
print("GET DATA: \(Date())")
for type in collectedTypes {
guard let quantityType = type as? HKQuantityType else {
return
}
if let statistics = workoutBuilder.statistics(for: quantityType) {
handleSendStatisticsData(statistics)
}
}
}
func workoutBuilderDidCollectEvent(_ workoutBuilder: HKLiveWorkoutBuilder) {
}
}
extension WorkoutTracking: HKWorkoutSessionDelegate {
func workoutSession(_ workoutSession: HKWorkoutSession, didChangeTo toState: HKWorkoutSessionState, from fromState: HKWorkoutSessionState, date: Date) {
}
func workoutSession(_ workoutSession: HKWorkoutSession, didFailWithError error: Error) {
}
}

View File

@@ -1,17 +1,23 @@
# Installation
QDomyos-Zwift can be installed from source on MacOs, Linux, Android and IOS.
Once you've installed QDomyos-Zwift, you can access the [operation guide](30_usage.md) for more information.
## On a Linux System (from source)
```buildoutcfg
$ sudo apt update && sudo apt upgrade # this is very important on raspberry pi: you need the bluetooth firmware updated!
$ sudo apt install git libqt5bluetooth5 libqt5widgets5 libqt5positioning5 libqt5xml5 qtconnectivity5-dev qtpositioning5-dev libqt5charts5-dev libqt5charts5 qt5-default libqt5networkauth5-dev
$ git clone https://github.com/cagnulein/qdomyos-zwift.git
$ cd qdomyos-zwift
$ cd src
$ qmake
$ make -j4
$ sudo ./qdomyos-zwift
```
## MacOs installation
You will need to (at a minimum) to install the xcode Command Line Tools (CLI) thanks to @richardwait
@@ -97,6 +103,8 @@ This operation takes a moment to complete.
`sudo apt install git libqt5bluetooth5 libqt5widgets5 libqt5positioning5 libqt5xml5 qtconnectivity5-dev qtpositioning5-dev libqt5charts5-dev libqt5charts5 qt5-default libqt5networkauth5-dev`
`git clone https://github.com/cagnulein/qdomyos-zwift.git`
`cd qdomyos-zwift`
`git submodule update --init src/smtpclient/`
`cd src`
`qmake`
`make`

View File

@@ -0,0 +1,63 @@
# Supported applications
QDomyos-Zwift should support every application able to read a [FTMS](specs/FTMS_v1.0.pdf) bluetooth signal.
This list is not exhaustive. Please report any application known to be working with QDomyos-Zwift !
|Application|Sport|Platform|Speed|RPM|Power|HRM |Resistance Control|
|-----------|-----|--------|------------|---|-----|-----|----------------|
|[Zwift](21_applications_detail.md#zwift)|![bike](img/20_bike.png) ![run](img/20_treadmill.png)|![IOS](img/20_apple.png) ![Android](img/20_android.png) ![PC](img/20_windows.png)| Yes|Yes|Yes| Yes, no FTMS support | Yes |
|[BKool](21_applications_detail.md#bkool) |![bike](img/20_bike.png)|![IOS](img/20_apple.png) ![Android](img/20_android.png) ![PC](img/20_windows.png)|Yes|Yes|Yes|Yes| Yes |
|[Fulgaz](21_applications_detail.md#fulgaz)|![bike](img/20_bike.png)|![IOS](img/20_apple.png) ![Android](img/20_android.png) ![PC](img/20_windows.png)|Yes|Yes|Yes|Yes, no FTMS support (see note)|Yes (see note) |
# Supported devices
This list is not exhaustive.
Try the qdomyos app with your fitness appliance and report how it is going.
If it's not working, you can [ask for your device to be supported](#ask-for-device-support)
## Supported bikes
|Manufacturer|Model|Speed|RPM|Power|HRM|Resistence Control|
|------------|-----|------------|---|-----|---|------------------|
|[Echelon](22_devices_detail.md#echelon)|Connect Sport|Yes|Yes|Yes|Yes|N/A|
|[Sportstech](22_devices_detail.md#sportstech)|ESX500|Yes|Yes|Yes|Yes|Yes|
## Supported treadmills
|Manufacturer|Model|Speed|HRM|Inclinaison Control| Speed control|
|------------|-----|------------|---|-------------------|--------------|
|Domyos|Intense Run|Yes|Yes|Yes|Yes|
|Domyos|T900c|Yes|Yes|Yes|Yes|
|Toorx|TRX Route Key|Yes|Yes|Yes|Yes|
# Ask for device support
You can ask for supporting a device by opening an issue and following these steps.
We need to "spy" the bluetooth activity from your fitness device and it's application, in order to guess how they communicate.
An android device is required for this operation.
## Android device
1. first of all you need an android device (phone or tablet)
2. you need to become developer on your phone https://wccftech.com/how-to/how-to-enable-developer-options-on-android-10-tutorial/
3. Go to Settings
4. Go into developer options
5. Enable the option Enable Bluetooth HCI snoop log
6. restart your phone
7. open your machine app and play with it collecting inclination and speed
8. Disable the option Enable Bluetooth HCI snoop log
9. in Developer Options: Bug report->Full report
10. wait a random amount of time (10-20 seconds)
11. A notification will appear at the top of the device. Click on it, share, email it to yourself
12. You'll get a zip file with the entire report. In the FS/Data/Log/bt directory of the zipfile is the file you want.
13. attach the log file in a new issue with a short description of the steps you did in the app when you used it
## Android Device (oppo based OS : oppo, ColorOS, RealMe, ...)
1. Dial *#800# on the phone app. A special menu should appear.
2. Go to Bluetooth and press "Start capture" (green button)
3. open your machine app and play with it collecting inclination and speed
4. Go back to the special menu by dialing *#800# on the phone app. Stop the bluetooth capture.
5. A new debug directory is stored onto `/oppo_log/` with a time stamp.
6. Fetch the CFA file stored in the `btsnoop_hci` folder.

View File

@@ -0,0 +1,30 @@
# Applications supported
This list is not exhaustive !
Open a discussion to tell us if a missing application is supported.
## BKool
Everything is working out of the box (read FTMS data).
## Fulgaz
### HRM Support
The application do not read the FTMS value. It is required to start the application with `-heart-service` or `bike_heartrate_service: true` in settings.
The HRM captor will not be shown by default, you need to go in the `Application Settings > Advanced > Disable Bluetooth Filter`.
### Resistance management
Fulgaz is known to be very severe by default in resistance adjustment. It is advised to adjust [application settings](https://tempocyclist.com/2020/04/29/fulgaz-resistance-too-hard/).
The resistance is automatically adjusted with the slope. However, you can override it using
### Additional notes
You can have ae true 4k video stream while you ride ("extreme quality" setting) however it requires about 10 gb per hour.
## Zwift
### HRM support
The application do not read the FTMS value. It is required to start the application with `-heart-service` or `bike_heartrate_service: true` in settings.
### Resistance management
You can adjust resistence using arrows [up and down](img/21_zwift-resistance-buttons.jpg) rom the riding screen.

13
docs/22_devices_detail.md Normal file
View File

@@ -0,0 +1,13 @@
# Devices detail
## Echelon
## Sportstech
### ESX 500
#### HRM
The [cardio belt provided](https://www.sports-tech.uk.com/chest-strap-sportstech-uncoded) with the bike is also supported, the bike reads the value and forwards it in its bluetooth signal.
The cardio captors are reported to not be accurate.
#### Resistance
The resistance is adjusted after a few seconds delay (time for the engine to adapt magnetic resistance).

52
docs/30_usage.md Normal file
View File

@@ -0,0 +1,52 @@
# QDomyos-Zwift operation guide
# Usage
The QDomyos-Zwift can be started in two modes : QML or NativeQT.
The main difference is the configuration management : you can change settings within the application with QML, where you need to specify settings at startup in NativeQT.
**Note:** Android and IOS are always running in QML mode.
On MacOS and Linux, you start QDomyos-Zwift in NativeQT mode (where settings are defined in commandline switches).
You can start the application in QML mode with the command-line switch -qml.
## Configuration in QML mode
Please refer to this article for more information under [QML Operations](https://robertoviola.cloud/qdomyos-zwift-guide/) with several useful information.
## Configuration in NativeQT mode
This is the list of settings available in the application. These settings needs to be appended to the binary command line.
*Example :* `sudo ./qdomyos-zwift -no-gui` for disabling any graphical interface.
| **Option** | **Type** | **Default** | **Function** |
|:------------------------|:---------|:------------|:-----------------------------------------------------------------------------|
| -no-gui | Boolean | False | Disable GUI |
| -qml | Boolean | False | Enables the QML interface |
| -miles | Boolean | False | Swithes to Imperial Units System |
| -no-console | Boolean | False | Not in use |
| -test-resistance | Boolean | False | |
| -no-log | Boolean | False | Disable Logging |
| -no-write-resistance | Boolean | False | Disable resistance instructions from QZ to your fitness equipment |
| -no-heart-service | Boolean | False | Do not simulate external HR monitor, use only FTMS |
| -heart-service | Boolean | True | Simulate HR service (required for applications not reading FTMS) |
| -only-virtualbike | Boolean | False | |
| -only-virtualtreadmill | Boolean | False | |
| -no-reconnection | Boolean | False | QZ will not try to reconnect your fitness equipement if enabled |
| -bluetooth-relaxed | Boolean | False | In case of deconnections from QZ to your fitness equipement |
| -bike-cadence-sensor | Boolean | False | |
| -bike-power-sensor | Boolean | False | |
| -battery-service | Boolean | False | |
| -service-changed | Boolean | False | |
| -bike-wheel-revs | Boolean | False | |
| -run-cadence-sensor | Boolean | False | |
| -train | String | | Force training program |
| -name | String | | Force bluetooth device name (if QZ struggles finding your fitness equipment) |
| -poll-device-time | Int | 200 (ms) | Frequency to refresh informations from QZ to Fitness equipment |
| -bike-resistance-gain | Int | | Adjust resistance from the fitness application |
| -bike-resistance-offset | Int | | Set another resistance point than default |

BIN
docs/img/20_android.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 491 B

BIN
docs/img/20_apple.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

BIN
docs/img/20_bike.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 349 B

BIN
docs/img/20_macintosh.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 374 B

BIN
docs/img/20_pc.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 B

BIN
docs/img/20_treadmill.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 377 B

BIN
docs/img/20_windows.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 369 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

View File

@@ -0,0 +1,220 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Copyright 2017 Bluetooth SIG, Inc. All rights reserved.-->
<Characteristic xsi:noNamespaceSchemaLocation="http://schemas.bluetooth.org/Documents/characteristic.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
name="Rower Data" type="org.bluetooth.characteristic.rower_data"
uuid="2AD1" last-modified="2017-02-14" approved="No">
<InformativeText>
<Summary>The Rower Data characteristic is used to send
training-related data to the Client from a rower
(Server).</Summary>
</InformativeText>
<Value>
<Field name="Flags">
<Requirement>Mandatory</Requirement>
<Format>16bit</Format>
<BitField>
<Bit index="0" size="1" name="More Data">
<Enumerations>
<Enumeration key="0" value="False" requires="C1" />
<Enumeration key="1" value="True" />
</Enumerations>
</Bit>
<Bit index="1" size="1" name="Average Stroke present">
<Enumerations>
<Enumeration key="0" value="False" />
<Enumeration key="1" value="True" requires="C2" />
</Enumerations>
</Bit>
<Bit index="2" size="1" name="Total Distance Present">
<Enumerations>
<Enumeration key="0" value="False" />
<Enumeration key="1" value="True" requires="C3" />
</Enumerations>
</Bit>
<Bit index="3" size="1" name="Instantaneous Pace present">
<Enumerations>
<Enumeration key="0" value="False" />
<Enumeration key="1" value="True" requires="C4" />
</Enumerations>
</Bit>
<Bit index="4" size="1" name="Average Pace Present">
<Enumerations>
<Enumeration key="0" value="False" />
<Enumeration key="1" value="True" requires="C5" />
</Enumerations>
</Bit>
<Bit index="5" size="1" name="Instantaneous Power present">
<Enumerations>
<Enumeration key="0" value="False" />
<Enumeration key="1" value="True" requires="C6" />
</Enumerations>
</Bit>
<Bit index="6" size="1" name="Average Power present">
<Enumerations>
<Enumeration key="0" value="False" />
<Enumeration key="1" value="True" requires="C7" />
</Enumerations>
</Bit>
<Bit index="7" size="1" name="Resistance Level present">
<Enumerations>
<Enumeration key="0" value="False" />
<Enumeration key="1" value="True" requires="C8" />
</Enumerations>
</Bit>
<Bit index="8" size="1" name="Expended Energy present">
<Enumerations>
<Enumeration key="0" value="False" />
<Enumeration key="1" value="True" requires="C9" />
</Enumerations>
</Bit>
<Bit index="9" size="1" name="Heart Rate present">
<Enumerations>
<Enumeration key="0" value="False" />
<Enumeration key="1" value="True" requires="C10" />
</Enumerations>
</Bit>
<Bit index="10" size="1"
name="Metabolic Equivalent present">
<Enumerations>
<Enumeration key="0" value="False" />
<Enumeration key="1" value="True" requires="C11" />
</Enumerations>
</Bit>
<Bit index="11" size="1" name="Elapsed Time present">
<Enumerations>
<Enumeration key="0" value="False" />
<Enumeration key="1" value="True" requires="C12" />
</Enumerations>
</Bit>
<Bit index="12" size="1" name="Remaining Time present">
<Enumerations>
<Enumeration key="0" value="False" />
<Enumeration key="1" value="True" requires="C13" />
</Enumerations>
</Bit>
<ReservedForFutureUse index="13" size="3" />
</BitField>
</Field>
<Field name="Stroke Rate">
<InformativeText>stroke/minute with a resolution of
0.5</InformativeText>
<Requirement>C1</Requirement>
<Format>uint8</Format>
<BinaryExponent>-1</BinaryExponent>
<Unit>org.bluetooth.unit.stroke_per_minute</Unit>
</Field>
<Field name="Stroke Count">
<InformativeText>Unitless with a resolution of
1</InformativeText>
<Requirement>C1</Requirement>
<Format>uint16</Format>
<Unit>org.bluetooth.unit.unitless</Unit>
</Field>
<Field name="Average Stroke Rate">
<InformativeText>1/minute with a resolution of
0.5</InformativeText>
<Requirement>C2</Requirement>
<Format>uint8</Format>
<BinaryExponent>-1</BinaryExponent>
<Unit>org.bluetooth.unit.stroke_per_minute</Unit>
</Field>
<Field name="Total Distance">
<InformativeText>Meters with a resolution of
1</InformativeText>
<Requirement>C3</Requirement>
<Format>uint24</Format>
<Unit>org.bluetooth.unit.length.metre</Unit>
</Field>
<Field name="Instantaneous Pace">
<InformativeText>Second with a resolution of
1</InformativeText>
<Requirement>C4</Requirement>
<Format>uint16</Format>
<Unit>org.bluetooth.unit.time.second</Unit>
</Field>
<Field name="Average Pace">
<InformativeText>Second with a resolution of
1</InformativeText>
<Requirement>C5</Requirement>
<Format>uint16</Format>
<Unit>org.bluetooth.unit.time.second</Unit>
</Field>
<Field name="Instantaneous Power">
<InformativeText>Watts with a resolution of
1</InformativeText>
<Requirement>C6</Requirement>
<Format>sint16</Format>
<Unit>org.bluetooth.unit.power.watt</Unit>
</Field>
<Field name="Average Power">
<InformativeText>Watts with a resolution of
1</InformativeText>
<Requirement>C7</Requirement>
<Format>sint16</Format>
<Unit>org.bluetooth.unit.power.watt</Unit>
</Field>
<Field name="Resistance Level">
<InformativeText>Unitless with a resolution of
1</InformativeText>
<Requirement>C8</Requirement>
<Format>sint16</Format>
<Unit>org.bluetooth.unit.unitless</Unit>
</Field>
<Field name="Total Energy">
<InformativeText>Kilo Calorie with a resolution of
1</InformativeText>
<Requirement>C9</Requirement>
<Format>uint16</Format>
<Unit>org.bluetooth.unit.energy.kilogram_calorie</Unit>
</Field>
<Field name="Energy Per Hour">
<InformativeText>Kilo Calorie with a resolution of
1</InformativeText>
<Requirement>C9</Requirement>
<Format>uint16</Format>
<Unit>org.bluetooth.unit.energy.kilogram_calorie</Unit>
</Field>
<Field name="Energy Per Minute">
<InformativeText>Kilo Calorie with a resolution of
1</InformativeText>
<Requirement>C9</Requirement>
<Format>uint8</Format>
<Unit>org.bluetooth.unit.energy.kilogram_calorie</Unit>
</Field>
<Field name="Heart Rate">
<InformativeText>Beats per minute with a resolution of
1</InformativeText>
<Requirement>C10</Requirement>
<Format>uint8</Format>
<Unit>org.bluetooth.unit.period.beats_per_minute</Unit>
</Field>
<Field name="Metabolic Equivalent">
<InformativeText>Metabolic Equivalent with a resolution of
0.1</InformativeText>
<Requirement>C11</Requirement>
<Format>uint8</Format>
<DecimalExponent>-1</DecimalExponent>
<Unit>org.bluetooth.unit.metabolic_equivalent</Unit>
</Field>
<Field name="Elapsed Time">
<InformativeText>Second with a resolution of
1</InformativeText>
<Requirement>C12</Requirement>
<Format>uint16</Format>
<Unit>org.bluetooth.unit.time.second</Unit>
</Field>
<Field name="Remaining Time">
<InformativeText>Second with a resolution of
1</InformativeText>
<Requirement>C13</Requirement>
<Format>uint16</Format>
<Unit>org.bluetooth.unit.time.second</Unit>
</Field>
</Value>
<Note>The fields in the above table, reading from top to bottom,
are shown in the order of LSO to MSO, where LSO = Least
Significant Octet and MSO = Most Significant Octet. The Least
Significant Octet represents the eight bits numbered 0 to
7.</Note>
</Characteristic>

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 287 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 327 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 417 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 KiB

View File

@@ -0,0 +1 @@
#include "../../../../../../qthttpserver/src/httpserver/qabstracthttpserver_p.h"

View File

@@ -0,0 +1 @@
#include "../../../../../../qthttpserver/src/httpserver/qhttpserver_p.h"

View File

@@ -0,0 +1 @@
#include "../../../../../../qthttpserver/src/httpserver/qhttpserverliterals_p.h"

View File

@@ -0,0 +1 @@
#include "../../../../../../qthttpserver/src/httpserver/qhttpserverrequest_p.h"

View File

@@ -0,0 +1 @@
#include "../../../../../../qthttpserver/src/httpserver/qhttpserverresponder_p.h"

View File

@@ -0,0 +1 @@
#include "../../../../../../qthttpserver/src/httpserver/qhttpserverresponse_p.h"

View File

@@ -0,0 +1 @@
#include "../../../../../../qthttpserver/src/httpserver/qhttpserverrouter_p.h"

View File

@@ -0,0 +1 @@
#include "../../../../../../qthttpserver/src/httpserver/qhttpserverrouterrule_p.h"

View File

@@ -0,0 +1 @@
#include "qabstracthttpserver.h"

View File

@@ -0,0 +1 @@
#include "qhttpserverfutureresponse.h"

View File

@@ -0,0 +1 @@
#include "qhttpserver.h"

View File

@@ -0,0 +1 @@
#include "qhttpserverviewtraits.h"

View File

@@ -0,0 +1 @@
#include "qhttpserverfutureresponse.h"

View File

@@ -0,0 +1 @@
#include "qhttpserverrequest.h"

View File

@@ -0,0 +1 @@
#include "qhttpserverresponder.h"

View File

@@ -0,0 +1 @@
#include "qhttpserverresponse.h"

View File

@@ -0,0 +1 @@
#include "qhttpserverrouter.h"

View File

@@ -0,0 +1 @@
#include "qhttpserverrouterrule.h"

View File

@@ -0,0 +1 @@
#include "qhttpserverrouterviewtraits.h"

View File

@@ -0,0 +1,16 @@
#ifndef QT_QTHTTPSERVER_MODULE_H
#define QT_QTHTTPSERVER_MODULE_H
#include <QtHttpServer/QtHttpServerDepends>
#include "qthttpserverglobal.h"
#include "qabstracthttpserver.h"
#include "qhttpserver.h"
#include "qhttpserverfutureresponse.h"
#include "qhttpserverrequest.h"
#include "qhttpserverresponder.h"
#include "qhttpserverresponse.h"
#include "qhttpserverrouter.h"
#include "qhttpserverrouterrule.h"
#include "qhttpserverrouterviewtraits.h"
#include "qhttpserverviewtraits.h"
#include "qthttpserverversion.h"
#endif

View File

@@ -0,0 +1,8 @@
/* This file was generated by qmake with the info from <root>/src/httpserver/httpserver.pro. */
#ifdef __cplusplus /* create empty PCH in C mode */
#include <QtNetwork/QtNetwork>
#include <QtCore/QtCore>
#include <QtWebSockets/QtWebSockets>
#include <QtSslServer/QtSslServer>
#include <QtConcurrent/QtConcurrent>
#endif

View File

@@ -0,0 +1 @@
#include "qthttpserverversion.h"

View File

@@ -0,0 +1,6 @@
SYNCQT.HEADER_FILES = qabstracthttpserver.h qhttpserver.h qhttpserverfutureresponse.h qhttpserverrequest.h qhttpserverresponder.h qhttpserverresponse.h qhttpserverrouter.h qhttpserverrouterrule.h qhttpserverrouterviewtraits.h qhttpserverviewtraits.h qhttpserverviewtraits_impl.h qthttpserverglobal.h
SYNCQT.GENERATED_HEADER_FILES = QAbstractHttpServer QHttpServer QFutureInterface QHttpServerFutureResponse QHttpServerRequest QHttpServerResponder QHttpServerResponse QHttpServerRouter QHttpServerRouterRule QHttpServerRouterViewTraits QHttpServerAfterRequestViewTraits qthttpserverversion.h QtHttpServerVersion QtHttpServer
SYNCQT.PRIVATE_HEADER_FILES = qabstracthttpserver_p.h qhttpserver_p.h qhttpserverliterals_p.h qhttpserverrequest_p.h qhttpserverresponder_p.h qhttpserverresponse_p.h qhttpserverrouter_p.h qhttpserverrouterrule_p.h
SYNCQT.QPA_HEADER_FILES =
SYNCQT.CLEAN_HEADER_FILES = qabstracthttpserver.h qhttpserver.h qhttpserverfutureresponse.h qhttpserverrequest.h qhttpserverresponder.h qhttpserverresponse.h qhttpserverrouter.h qhttpserverrouterrule.h qhttpserverrouterviewtraits.h qhttpserverviewtraits.h qhttpserverviewtraits_impl.h qthttpserverglobal.h
SYNCQT.INJECTIONS =

View File

@@ -0,0 +1 @@
#include "../../../qthttpserver/src/httpserver/qabstracthttpserver.h"

View File

@@ -0,0 +1 @@
#include "../../../qthttpserver/src/httpserver/qhttpserver.h"

View File

@@ -0,0 +1 @@
#include "../../../qthttpserver/src/httpserver/qhttpserverfutureresponse.h"

View File

@@ -0,0 +1 @@
#include "../../../qthttpserver/src/httpserver/qhttpserverrequest.h"

View File

@@ -0,0 +1 @@
#include "../../../qthttpserver/src/httpserver/qhttpserverresponder.h"

View File

@@ -0,0 +1 @@
#include "../../../qthttpserver/src/httpserver/qhttpserverresponse.h"

View File

@@ -0,0 +1 @@
#include "../../../qthttpserver/src/httpserver/qhttpserverrouter.h"

View File

@@ -0,0 +1 @@
#include "../../../qthttpserver/src/httpserver/qhttpserverrouterrule.h"

View File

@@ -0,0 +1 @@
#include "../../../qthttpserver/src/httpserver/qhttpserverrouterviewtraits.h"

View File

@@ -0,0 +1 @@
#include "../../../qthttpserver/src/httpserver/qhttpserverviewtraits.h"

View File

@@ -0,0 +1 @@
#include "../../../qthttpserver/src/httpserver/qhttpserverviewtraits_impl.h"

View File

@@ -0,0 +1 @@
#include "../../../qthttpserver/src/httpserver/qthttpserverglobal.h"

View File

@@ -0,0 +1,9 @@
/* This file was generated by syncqt. */
#ifndef QT_QTHTTPSERVER_VERSION_H
#define QT_QTHTTPSERVER_VERSION_H
#define QTHTTPSERVER_VERSION_STR "5.12.0"
#define QTHTTPSERVER_VERSION 0x050C00
#endif // QT_QTHTTPSERVER_VERSION_H

View File

@@ -0,0 +1 @@
#include "../../../../../../qthttpserver/src/sslserver/qsslserver_p.h"

View File

@@ -0,0 +1 @@
#include "qsslserver.h"

View File

@@ -0,0 +1,7 @@
#ifndef QT_QTSSLSERVER_MODULE_H
#define QT_QTSSLSERVER_MODULE_H
#include <QtSslServer/QtSslServerDepends>
#include "qtsslserverglobal.h"
#include "qsslserver.h"
#include "qtsslserverversion.h"
#endif

View File

@@ -0,0 +1,5 @@
/* This file was generated by qmake with the info from <root>/src/sslserver/sslserver.pro. */
#ifdef __cplusplus /* create empty PCH in C mode */
#include <QtNetwork/QtNetwork>
#include <QtCore/QtCore>
#endif

View File

@@ -0,0 +1 @@
#include "qtsslserverversion.h"

View File

@@ -0,0 +1,6 @@
SYNCQT.HEADER_FILES = qsslserver.h qtsslserverglobal.h
SYNCQT.GENERATED_HEADER_FILES = QSslServer qtsslserverversion.h QtSslServerVersion QtSslServer
SYNCQT.PRIVATE_HEADER_FILES = qsslserver_p.h
SYNCQT.QPA_HEADER_FILES =
SYNCQT.CLEAN_HEADER_FILES = qsslserver.h qtsslserverglobal.h
SYNCQT.INJECTIONS =

View File

@@ -0,0 +1 @@
#include "../../../qthttpserver/src/sslserver/qsslserver.h"

View File

@@ -0,0 +1 @@
#include "../../../qthttpserver/src/sslserver/qtsslserverglobal.h"

View File

@@ -0,0 +1,9 @@
/* This file was generated by syncqt. */
#ifndef QT_QTSSLSERVER_VERSION_H
#define QT_QTSSLSERVER_VERSION_H
#define QTSSLSERVER_VERSION_STR "5.12.0"
#define QTSSLSERVER_VERSION 0x050C00
#endif // QT_QTSSLSERVER_VERSION_H

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,5 @@
QMAKE_PRL_BUILD_DIR = D:/Dati/GoogleDrive/cpp/build-qthttpserver-Desktop_Qt_5_15_2_MSVC2015_64bit-Debug/src/httpserver
QMAKE_PRO_INPUT = httpserver.pro
QMAKE_PRL_TARGET = Qt5HttpServer.lib
QMAKE_PRL_CONFIG = lex yacc depend_includepath testcase_targets import_plugins import_qpa_plugin windows prepare_docs qt_docs_targets qt_build_extra file_copies qmake_use qt warn_on release link_prl flat debug_and_release precompile_header autogen_precompile_source embed_manifest_dll embed_manifest_exe shared shared release no_plugin_manifest win32 msvc copy_dir_files sse2 aesni sse3 ssse3 sse4_1 sse4_2 avx avx2 compile_examples f16c force_debug_info largefile precompile_header rdrnd rdseed shani x86SimdAlways prefix_build force_independent utf8_source create_prl link_prl no_private_qt_headers_warning QTDIR_build qt_example_installs exceptions_off testcase_exceptions release ReleaseBuild Release build_pass c++11 win32-msvc2015 qml_debug release ReleaseBuild Release build_pass relative_qt_rpath git_build target_qt c++11 strict_c++ qt_install_headers need_fwd_pri qt_install_module debug_and_release build_all create_cmake skip_target_version_ext release ReleaseBuild Release build_pass have_target dll exclusive_builds debug_info no_autoqmake thread moc resources
QMAKE_PRL_VERSION = 5.12.0

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,5 @@
QMAKE_PRL_BUILD_DIR = D:/Dati/GoogleDrive/cpp/build-qthttpserver-Desktop_Qt_5_15_2_MSVC2015_64bit-Debug/src/httpserver
QMAKE_PRO_INPUT = httpserver.pro
QMAKE_PRL_TARGET = Qt5HttpServerd.lib
QMAKE_PRL_CONFIG = lex yacc debug depend_includepath testcase_targets import_plugins import_qpa_plugin windows prepare_docs qt_docs_targets qt_build_extra file_copies qmake_use qt warn_on link_prl flat debug_and_release precompile_header autogen_precompile_source embed_manifest_dll embed_manifest_exe shared shared no_plugin_manifest win32 msvc copy_dir_files sse2 aesni sse3 ssse3 sse4_1 sse4_2 avx avx2 compile_examples f16c force_debug_info largefile precompile_header rdrnd rdseed shani x86SimdAlways prefix_build force_independent utf8_source create_prl link_prl no_private_qt_headers_warning QTDIR_build qt_example_installs exceptions_off testcase_exceptions debug DebugBuild Debug build_pass c++11 win32-msvc2015 debug qml_debug debug DebugBuild Debug build_pass relative_qt_rpath git_build target_qt c++11 strict_c++ qt_install_headers need_fwd_pri qt_install_module debug_and_release build_all create_cmake skip_target_version_ext debug DebugBuild Debug build_pass have_target dll no_plist exclusive_builds debug_info no_autoqmake thread moc resources
QMAKE_PRL_VERSION = 5.12.0

Some files were not shown because too many files have changed in this diff Show More