diff --git a/src/devices/ftmsbike/ftmsbike.cpp b/src/devices/ftmsbike/ftmsbike.cpp index 591e7c7c7d..d5e33dd022 100644 --- a/src/devices/ftmsbike/ftmsbike.cpp +++ b/src/devices/ftmsbike/ftmsbike.cpp @@ -131,7 +131,7 @@ void ftmsbike::init() { if (initDone) return; - if(ICSE || HAMMER) { + if(ICSE || HAMMER || SPEEDMAGPRO) { uint8_t write[] = {FTMS_REQUEST_CONTROL}; bool ret = writeCharacteristic(write, sizeof(write), "requestControl", false, true); write[0] = {FTMS_RESET}; @@ -1779,6 +1779,11 @@ void ftmsbike::ftmsCharacteristicChanged(const QLowEnergyCharacteristic &charact qDebug() << "applying gears mod" << gears() << gearsZwiftRatio() << power; }*/ + if(SPEEDMAGPRO && b.at(0) != FTMS_SET_INDOOR_BIKE_SIMULATION_PARAMS && b.at(0) != FTMS_SET_TARGET_POWER) { + qDebug() << "SpeedMagPro bike workaround: only allowing simulation params and power commands, discarding the rest"; + return; + } + writeCharacteristic((uint8_t*)b.data(), b.length(), "injectWrite ", false, true); } } @@ -2026,9 +2031,12 @@ void ftmsbike::deviceDiscovered(const QBluetoothDeviceInfo &device) { ergModeSupported = false; max_resistance = 32; _ergTable.loadDefaultData(kSpeedRaceXDefaultErgData); + } else if(device.name().toUpper().startsWith("SPEEDMAGPRO")) { + qDebug() << QStringLiteral("SPEEDMAGPRO found"); + ergModeSupported = false; + SPEEDMAGPRO = true; } - if(settings.value(QZSettings::force_resistance_instead_inclination, QZSettings::default_force_resistance_instead_inclination).toBool()) { resistance_lvl_mode = true; } diff --git a/src/devices/ftmsbike/ftmsbike.h b/src/devices/ftmsbike/ftmsbike.h index 70806043e7..e980644f60 100644 --- a/src/devices/ftmsbike/ftmsbike.h +++ b/src/devices/ftmsbike/ftmsbike.h @@ -183,6 +183,7 @@ class ftmsbike : public bike { bool S18 = false; bool ZIPRO_RAVE = false; bool SPEEDRACEX = false; + bool SPEEDMAGPRO = false; uint8_t secondsToResetTimer = 5;