Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/devices/domyostreadmill/domyostreadmill.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -692,7 +692,7 @@ void domyostreadmill::characteristicChanged(const QLowEnergyCharacteristic &char
and speed status return;*/

double speed = GetSpeedFromPacket(value);
double incline = treadmillInclinationOverride(GetInclinationFromPacket(value));
double incline = treadmillInclinationOverrideForRawFeedback(GetInclinationFromPacket(value));
if (domyos_run100e) {
// RUN100E: keep the current inclination value and update it only when a new
// requestInclination is present, ignoring stale device-reported inclination.
Expand Down
3 changes: 1 addition & 2 deletions src/devices/fitshowtreadmill/fitshowtreadmill.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -539,8 +539,7 @@ void fitshowtreadmill::characteristicChanged(const QLowEnergyCharacteristic &cha
if (noblepro_connected)
incline /= 2;

rawInclination = incline;
Inclination = treadmillInclinationOverride(incline);
Inclination = treadmillInclinationOverrideForRawFeedback(incline);
if (Inclination.value() != incline) {
emit inclinationChanged(0, incline);
}
Expand Down
8 changes: 4 additions & 4 deletions src/devices/horizontreadmill/horizontreadmill.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1600,7 +1600,7 @@ void horizontreadmill::characteristicChanged(const QLowEnergyCharacteristic &cha
1.60934); // miles/h
emit debug(QStringLiteral("Current Speed: ") + QString::number(Speed.value()));

parseInclination(treadmillInclinationOverride((double)((uint8_t)lastPacketComplete.at(30)) / 10.0));
parseInclinationOverride((double)((uint8_t)lastPacketComplete.at(30)) / 10.0);
emit debug(QStringLiteral("Current Inclination: ") + QString::number(Inclination.value()));

if (firstDistanceCalculated && watts(weight))
Expand All @@ -1626,7 +1626,7 @@ void horizontreadmill::characteristicChanged(const QLowEnergyCharacteristic &cha
1.60934); // miles/h
emit debug(QStringLiteral("Current Speed: ") + QString::number(Speed.value()));

parseInclination(treadmillInclinationOverride((double)((uint8_t)newValue.at(63)) / 10.0));
parseInclinationOverride((double)((uint8_t)newValue.at(63)) / 10.0);
emit debug(QStringLiteral("Current Inclination: ") + QString::number(Inclination.value()));

if (firstDistanceCalculated && watts(weight))
Expand Down Expand Up @@ -1943,13 +1943,13 @@ void horizontreadmill::characteristicChanged(const QLowEnergyCharacteristic &cha
// Domyos TS100 has a fixed 15° inclination
Inclination = 15;
} else if(!tunturi_t60_treadmill && !ICONCEPT_FTMS_treadmill && !T01)
parseInclination(treadmillInclinationOverride((double)(
parseInclinationOverride((double)(
(int16_t)(
((int16_t)(int8_t)newValue.at(index + 1) << 8) |
(uint8_t)newValue.at(index)
)
) /
10.0));
10.0);
else if(ICONCEPT_FTMS_treadmill || T01) {
uint8_t val1 = (uint8_t)newValue.at(index);
uint8_t val2 = (uint8_t)newValue.at(index + 1);
Expand Down
2 changes: 1 addition & 1 deletion src/devices/strydrunpowersensor/strydrunpowersensor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,7 @@ void strydrunpowersensor::characteristicChanged(const QLowEnergyCharacteristic &
// steps of 0.5 only to send to the Inclination override function
if(!areInclinationSettingsDefault()) {
inc = qRound(inc * 2.0) / 2.0;
Inclination = treadmillInclinationOverride(inc);
Inclination = treadmillInclinationOverrideForRawFeedback(inc);
} else {
Inclination = inc;
}
Expand Down
247 changes: 236 additions & 11 deletions src/devices/treadmill.cpp

Large diffs are not rendered by default.

16 changes: 15 additions & 1 deletion src/devices/treadmill.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,9 @@ class treadmill : public bluetoothdevice {
virtual bool autoPauseWhenSpeedIsZero();
virtual bool autoStartWhenSpeedIsGreaterThenZero();
static double treadmillInclinationOverride(double Inclination);
static double treadmillInclinationOverrideReverse(double Inclination);
static double treadmillInclinationDeviceCommand(double rawIndex);
static double treadmillInclinationLogicalForDeviceCommand(double deviceCommand);
double treadmillInclinationOverrideReverse(double Inclination);
bool cadenceFromAppleWatch();
double calculateCadenceFromSpeed(double speed);
virtual bool canHandleSpeedChange() { return true; }
Expand Down Expand Up @@ -98,8 +100,20 @@ class treadmill : public bluetoothdevice {
double m_followPowerLastSpeedWhenTargetSet = -1;
QDateTime m_followPowerSuppressedUntil;

// A customized outbound command can have lossy raw feedback. Keep the logical value selected
// by QZ until feedback demonstrates that the treadmill moved independently.
bool m_mappedInclinationValid = false;
bool m_mappedInclinationAwaitingFeedback = false;
double m_mappedInclinationDeviceCommand = 0.0;
double m_mappedInclinationLogicalValue = 0.0;
double m_mappedInclinationRawBeforeCommand = 0.0;
double m_mappedInclinationFeedback = 0.0;
uint8_t m_mappedInclinationUnchangedSamples = 0;

void parseSpeed(double speed);
void parseInclination(double speed);
void parseInclinationOverride(double rawInclinationValue);
double treadmillInclinationOverrideForRawFeedback(double rawInclinationValue);
void parseCadence(double cadence);
bool areInclinationSettingsDefault();
void evaluateStepCount();
Expand Down
64 changes: 63 additions & 1 deletion src/qzsettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -711,6 +711,37 @@ const QString QZSettings::treadmill_inclination_override_135 = QStringLiteral("t
const QString QZSettings::treadmill_inclination_override_140 = QStringLiteral("treadmill_inclination_override_140");
const QString QZSettings::treadmill_inclination_override_145 = QStringLiteral("treadmill_inclination_override_145");
const QString QZSettings::treadmill_inclination_override_150 = QStringLiteral("treadmill_inclination_override_150");
const QString QZSettings::treadmill_inclination_override_device_command_0 = QStringLiteral("treadmill_inclination_override_device_command_0");
const QString QZSettings::treadmill_inclination_override_device_command_05 = QStringLiteral("treadmill_inclination_override_device_command_05");
const QString QZSettings::treadmill_inclination_override_device_command_10 = QStringLiteral("treadmill_inclination_override_device_command_10");
const QString QZSettings::treadmill_inclination_override_device_command_15 = QStringLiteral("treadmill_inclination_override_device_command_15");
const QString QZSettings::treadmill_inclination_override_device_command_20 = QStringLiteral("treadmill_inclination_override_device_command_20");
const QString QZSettings::treadmill_inclination_override_device_command_25 = QStringLiteral("treadmill_inclination_override_device_command_25");
const QString QZSettings::treadmill_inclination_override_device_command_30 = QStringLiteral("treadmill_inclination_override_device_command_30");
const QString QZSettings::treadmill_inclination_override_device_command_35 = QStringLiteral("treadmill_inclination_override_device_command_35");
const QString QZSettings::treadmill_inclination_override_device_command_40 = QStringLiteral("treadmill_inclination_override_device_command_40");
const QString QZSettings::treadmill_inclination_override_device_command_45 = QStringLiteral("treadmill_inclination_override_device_command_45");
const QString QZSettings::treadmill_inclination_override_device_command_50 = QStringLiteral("treadmill_inclination_override_device_command_50");
const QString QZSettings::treadmill_inclination_override_device_command_55 = QStringLiteral("treadmill_inclination_override_device_command_55");
const QString QZSettings::treadmill_inclination_override_device_command_60 = QStringLiteral("treadmill_inclination_override_device_command_60");
const QString QZSettings::treadmill_inclination_override_device_command_65 = QStringLiteral("treadmill_inclination_override_device_command_65");
const QString QZSettings::treadmill_inclination_override_device_command_70 = QStringLiteral("treadmill_inclination_override_device_command_70");
const QString QZSettings::treadmill_inclination_override_device_command_75 = QStringLiteral("treadmill_inclination_override_device_command_75");
const QString QZSettings::treadmill_inclination_override_device_command_80 = QStringLiteral("treadmill_inclination_override_device_command_80");
const QString QZSettings::treadmill_inclination_override_device_command_85 = QStringLiteral("treadmill_inclination_override_device_command_85");
const QString QZSettings::treadmill_inclination_override_device_command_90 = QStringLiteral("treadmill_inclination_override_device_command_90");
const QString QZSettings::treadmill_inclination_override_device_command_95 = QStringLiteral("treadmill_inclination_override_device_command_95");
const QString QZSettings::treadmill_inclination_override_device_command_100 = QStringLiteral("treadmill_inclination_override_device_command_100");
const QString QZSettings::treadmill_inclination_override_device_command_105 = QStringLiteral("treadmill_inclination_override_device_command_105");
const QString QZSettings::treadmill_inclination_override_device_command_110 = QStringLiteral("treadmill_inclination_override_device_command_110");
const QString QZSettings::treadmill_inclination_override_device_command_115 = QStringLiteral("treadmill_inclination_override_device_command_115");
const QString QZSettings::treadmill_inclination_override_device_command_120 = QStringLiteral("treadmill_inclination_override_device_command_120");
const QString QZSettings::treadmill_inclination_override_device_command_125 = QStringLiteral("treadmill_inclination_override_device_command_125");
const QString QZSettings::treadmill_inclination_override_device_command_130 = QStringLiteral("treadmill_inclination_override_device_command_130");
const QString QZSettings::treadmill_inclination_override_device_command_135 = QStringLiteral("treadmill_inclination_override_device_command_135");
const QString QZSettings::treadmill_inclination_override_device_command_140 = QStringLiteral("treadmill_inclination_override_device_command_140");
const QString QZSettings::treadmill_inclination_override_device_command_145 = QStringLiteral("treadmill_inclination_override_device_command_145");
const QString QZSettings::treadmill_inclination_override_device_command_150 = QStringLiteral("treadmill_inclination_override_device_command_150");
const QString QZSettings::sole_elliptical_e55 = QStringLiteral("sole_elliptical_e55");
const QString QZSettings::horizon_treadmill_force_ftms = QStringLiteral("horizon_treadmill_force_ftms");
const QString QZSettings::horizon_treadmill_7_0_at_24 = QStringLiteral("horizon_treadmill_7_0_at_24");
Expand Down Expand Up @@ -1283,7 +1314,7 @@ const QString QZSettings::default_shortcut_start_stop = QStringLiteral("");
const QString QZSettings::shortcut_stop = QStringLiteral("shortcut_stop");
const QString QZSettings::default_shortcut_stop = QStringLiteral("");

const uint32_t allSettingsCount = 1004;
const uint32_t allSettingsCount = 1035;

QVariant allSettings[allSettingsCount][2] = {
{QZSettings::cryptoKeySettingsProfiles, QZSettings::default_cryptoKeySettingsProfiles},
Expand Down Expand Up @@ -1869,6 +1900,37 @@ QVariant allSettings[allSettingsCount][2] = {
{QZSettings::treadmill_inclination_override_140, QZSettings::default_treadmill_inclination_override_140},
{QZSettings::treadmill_inclination_override_145, QZSettings::default_treadmill_inclination_override_145},
{QZSettings::treadmill_inclination_override_150, QZSettings::default_treadmill_inclination_override_150},
{QZSettings::treadmill_inclination_override_device_command_0, QZSettings::default_treadmill_inclination_override_device_command_0},
{QZSettings::treadmill_inclination_override_device_command_05, QZSettings::default_treadmill_inclination_override_device_command_05},
{QZSettings::treadmill_inclination_override_device_command_10, QZSettings::default_treadmill_inclination_override_device_command_10},
{QZSettings::treadmill_inclination_override_device_command_15, QZSettings::default_treadmill_inclination_override_device_command_15},
{QZSettings::treadmill_inclination_override_device_command_20, QZSettings::default_treadmill_inclination_override_device_command_20},
{QZSettings::treadmill_inclination_override_device_command_25, QZSettings::default_treadmill_inclination_override_device_command_25},
{QZSettings::treadmill_inclination_override_device_command_30, QZSettings::default_treadmill_inclination_override_device_command_30},
{QZSettings::treadmill_inclination_override_device_command_35, QZSettings::default_treadmill_inclination_override_device_command_35},
{QZSettings::treadmill_inclination_override_device_command_40, QZSettings::default_treadmill_inclination_override_device_command_40},
{QZSettings::treadmill_inclination_override_device_command_45, QZSettings::default_treadmill_inclination_override_device_command_45},
{QZSettings::treadmill_inclination_override_device_command_50, QZSettings::default_treadmill_inclination_override_device_command_50},
{QZSettings::treadmill_inclination_override_device_command_55, QZSettings::default_treadmill_inclination_override_device_command_55},
{QZSettings::treadmill_inclination_override_device_command_60, QZSettings::default_treadmill_inclination_override_device_command_60},
{QZSettings::treadmill_inclination_override_device_command_65, QZSettings::default_treadmill_inclination_override_device_command_65},
{QZSettings::treadmill_inclination_override_device_command_70, QZSettings::default_treadmill_inclination_override_device_command_70},
{QZSettings::treadmill_inclination_override_device_command_75, QZSettings::default_treadmill_inclination_override_device_command_75},
{QZSettings::treadmill_inclination_override_device_command_80, QZSettings::default_treadmill_inclination_override_device_command_80},
{QZSettings::treadmill_inclination_override_device_command_85, QZSettings::default_treadmill_inclination_override_device_command_85},
{QZSettings::treadmill_inclination_override_device_command_90, QZSettings::default_treadmill_inclination_override_device_command_90},
{QZSettings::treadmill_inclination_override_device_command_95, QZSettings::default_treadmill_inclination_override_device_command_95},
{QZSettings::treadmill_inclination_override_device_command_100, QZSettings::default_treadmill_inclination_override_device_command_100},
{QZSettings::treadmill_inclination_override_device_command_105, QZSettings::default_treadmill_inclination_override_device_command_105},
{QZSettings::treadmill_inclination_override_device_command_110, QZSettings::default_treadmill_inclination_override_device_command_110},
{QZSettings::treadmill_inclination_override_device_command_115, QZSettings::default_treadmill_inclination_override_device_command_115},
{QZSettings::treadmill_inclination_override_device_command_120, QZSettings::default_treadmill_inclination_override_device_command_120},
{QZSettings::treadmill_inclination_override_device_command_125, QZSettings::default_treadmill_inclination_override_device_command_125},
{QZSettings::treadmill_inclination_override_device_command_130, QZSettings::default_treadmill_inclination_override_device_command_130},
{QZSettings::treadmill_inclination_override_device_command_135, QZSettings::default_treadmill_inclination_override_device_command_135},
{QZSettings::treadmill_inclination_override_device_command_140, QZSettings::default_treadmill_inclination_override_device_command_140},
{QZSettings::treadmill_inclination_override_device_command_145, QZSettings::default_treadmill_inclination_override_device_command_145},
{QZSettings::treadmill_inclination_override_device_command_150, QZSettings::default_treadmill_inclination_override_device_command_150},
{QZSettings::sole_elliptical_e55, QZSettings::default_sole_elliptical_e55},
{QZSettings::horizon_treadmill_force_ftms, QZSettings::default_horizon_treadmill_force_ftms},
{QZSettings::horizon_treadmill_7_0_at_24, QZSettings::default_horizon_treadmill_7_0_at_24},
Expand Down
Loading
Loading