Skip to content

Commit 1896050

Browse files
committed
Add X100 VirtuFit Etappe bike detection
1 parent 3e6c278 commit 1896050

6 files changed

Lines changed: 22 additions & 6 deletions

File tree

src/devices/bluetooth.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2928,6 +2928,7 @@ void bluetooth::deviceDiscovered(const QBluetoothDeviceInfo &device) {
29282928
snodeBike->deviceDiscovered(b);
29292929
this->signalBluetoothDeviceConnected(snodeBike);
29302930
} else if (((b.name().startsWith(QStringLiteral("FS-")) && fitplus_bike) ||
2931+
b.name().startsWith(QStringLiteral("X100-")) ||
29312932
(b.name().toUpper().startsWith("H9110 OSAKA")) ||
29322933
b.name().startsWith(QStringLiteral("MRK-"))) &&
29332934
!fitPlusBike && !ftmsBike && !ftmsRower && !snodeBike && !horizonTreadmill && !trxappgateusbRower && filter) {

src/devices/fitplusbike/fitplusbike.cpp

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,8 @@ void fitplusbike::writeCharacteristic(uint8_t *data, uint8_t data_len, const QSt
8888

8989
void fitplusbike::forceResistance(resistance_t requestResistance) {
9090
QSettings settings;
91-
bool virtufit_etappe = settings.value(QZSettings::virtufit_etappe, QZSettings::default_virtufit_etappe).toBool();
91+
bool virtufit_etappe = virtufitEtappe ||
92+
settings.value(QZSettings::virtufit_etappe, QZSettings::default_virtufit_etappe).toBool();
9293
bool sportstech_sx600 = settings.value(QZSettings::sportstech_sx600, QZSettings::default_sportstech_sx600).toBool();
9394
requestResistanceCompleted = false;
9495
if (virtufit_etappe || merach_MRK || H9110_OSAKA) {
@@ -304,8 +305,8 @@ void fitplusbike::update() {
304305
gattNotify1Characteristic.isValid() && initDone) {
305306
QSettings settings;
306307
update_metrics(false, watts());
307-
bool virtufit_etappe =
308-
settings.value(QZSettings::virtufit_etappe, QZSettings::default_virtufit_etappe).toBool();
308+
bool virtufit_etappe = virtufitEtappe ||
309+
settings.value(QZSettings::virtufit_etappe, QZSettings::default_virtufit_etappe).toBool();
309310
bool sportstech_sx600 =
310311
settings.value(QZSettings::sportstech_sx600, QZSettings::default_sportstech_sx600).toBool();
311312

@@ -413,7 +414,8 @@ void fitplusbike::characteristicChanged(const QLowEnergyCharacteristic &characte
413414

414415
lastPacket = newValue;
415416

416-
bool virtufit_etappe = settings.value(QZSettings::virtufit_etappe, QZSettings::default_virtufit_etappe).toBool();
417+
bool virtufit_etappe = virtufitEtappe ||
418+
settings.value(QZSettings::virtufit_etappe, QZSettings::default_virtufit_etappe).toBool();
417419
bool sportstech_sx600 = settings.value(QZSettings::sportstech_sx600, QZSettings::default_sportstech_sx600).toBool();
418420

419421
if (sportstech_sx600 && characteristic.uuid() == QBluetoothUuid((quint16)0x2AD2)) {
@@ -752,7 +754,8 @@ double fitplusbike::bikeResistanceToPeloton(double resistance) {
752754
void fitplusbike::btinit() {
753755

754756
QSettings settings;
755-
bool virtufit_etappe = settings.value(QZSettings::virtufit_etappe, QZSettings::default_virtufit_etappe).toBool();
757+
bool virtufit_etappe = virtufitEtappe ||
758+
settings.value(QZSettings::virtufit_etappe, QZSettings::default_virtufit_etappe).toBool();
756759
bool sportstech_sx600 = settings.value(QZSettings::sportstech_sx600, QZSettings::default_sportstech_sx600).toBool();
757760

758761
if (merach_MRK) {
@@ -1014,6 +1017,9 @@ void fitplusbike::deviceDiscovered(const QBluetoothDeviceInfo &device) {
10141017
if (device.name().startsWith(QStringLiteral("MRK-"))) {
10151018
qDebug() << QStringLiteral("merach_MRK workaround enabled!");
10161019
merach_MRK = true;
1020+
} else if (device.name().startsWith(QStringLiteral("X100-"))) {
1021+
qDebug() << QStringLiteral("VirtuFit Etappe 2.0i workaround enabled!");
1022+
virtufitEtappe = true;
10171023
} else if (device.name().toUpper().startsWith("H9110 OSAKA")) {
10181024
qDebug() << QStringLiteral("H9110 OSAKA workaround enabled!");
10191025
max_resistance = 32;
@@ -1080,7 +1086,8 @@ void fitplusbike::controllerStateChanged(QLowEnergyController::ControllerState s
10801086

10811087
uint16_t fitplusbike::wattsFromResistance(double resistance) {
10821088
QSettings settings;
1083-
bool virtufit_etappe = settings.value(QZSettings::virtufit_etappe, QZSettings::default_virtufit_etappe).toBool();
1089+
bool virtufit_etappe = virtufitEtappe ||
1090+
settings.value(QZSettings::virtufit_etappe, QZSettings::default_virtufit_etappe).toBool();
10841091

10851092
// https://github.com/cagnulein/qdomyos-zwift/issues/62#issuecomment-736913564
10861093
/*if(currentCadence().value() < 90)

src/devices/fitplusbike/fitplusbike.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ class fitplusbike : public bike {
8080

8181
bool merach_MRK = false;
8282
bool H9110_OSAKA = false;
83+
bool virtufitEtappe = false;
8384

8485
#ifdef Q_OS_IOS
8586
lockscreen *h = 0;

tst/Devices/deviceindex.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ DEFINE_DEVICE(FakeRower, "Fake Rower");
7777
DEFINE_DEVICE(FakeTreadmill, "Fake Treadmill");
7878
DEFINE_DEVICE(FitPlusBike_MRK_NoSettings, "FitPlus Bike (MRK, no settings)");
7979
DEFINE_DEVICE(FitPlusF5, "FitPlus F5");
80+
DEFINE_DEVICE(FitPlusVirtufitEtappeX100, "FitPlus VirtuFit Etappe 2.0i (X100)");
8081
DEFINE_DEVICE(FitShowBF, "FitShow BF");
8182
DEFINE_DEVICE(FitShowFS, "FitShow FS");
8283
DEFINE_DEVICE(FitShowTR510T, "FitShow TR510-T");

tst/Devices/deviceindex.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ class DeviceIndex
8282
DEFINE_DEVICE(FakeTreadmill, "Fake Treadmill");
8383
DEFINE_DEVICE(FitPlusBike_MRK_NoSettings, "FitPlus Bike (MRK, no settings)");
8484
DEFINE_DEVICE(FitPlusF5, "FitPlus F5");
85+
DEFINE_DEVICE(FitPlusVirtufitEtappeX100, "FitPlus VirtuFit Etappe 2.0i (X100)");
8586
DEFINE_DEVICE(FitShowBF, "FitShow BF");
8687
DEFINE_DEVICE(FitShowFS, "FitShow FS");
8788
DEFINE_DEVICE(FitShowTR510T, "FitShow TR510-T");

tst/Devices/devicetestdataindex.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,11 @@ void DeviceTestDataIndex::Initialize() {
387387
->acceptDeviceName("FS-", DeviceNameComparison::StartsWith)
388388
->configureSettingsWith( QZSettings::fitplus_bike);
389389

390+
// VirtuFit Etappe 2.0i
391+
RegisterNewDeviceTestData(DeviceIndex::FitPlusVirtufitEtappeX100)
392+
->expectDevice<fitplusbike>()
393+
->acceptDeviceName("X100-", DeviceNameComparison::StartsWith);
394+
390395

391396
// FitPlus MRK
392397
RegisterNewDeviceTestData(DeviceIndex::FitPlusBike_MRK_NoSettings)

0 commit comments

Comments
 (0)