@@ -174,6 +174,9 @@ octanetreadmill::octanetreadmill(uint32_t pollDeviceTime, bool noConsole, bool n
174
174
actualPaceSign.append (0x23 );
175
175
actualPace2Sign.append (0x01 );
176
176
actualPace2Sign.append (0x23 );
177
+ cadenceSign.append (0x2c );
178
+ cadenceSign.append (0x01 );
179
+ cadenceSign.append (0x3A );
177
180
178
181
m_watt.setType (metric::METRIC_WATT);
179
182
Speed.setType (metric::METRIC_SPEED);
@@ -337,14 +340,28 @@ void octanetreadmill::characteristicChanged(const QLowEnergyCharacteristic &char
337
340
338
341
emit packetReceived ();
339
342
340
- if (lastTimeCharacteristicChanged.secsTo (QDateTime::currentDateTime ()) > 5 ) {
343
+ if (ZR8 == false && lastTimeCharacteristicChanged.secsTo (QDateTime::currentDateTime ()) > 5 ) {
341
344
emit debug (QStringLiteral (" resetting speed" ));
342
345
Speed = 0 ;
346
+ Cadence = 0 ;
347
+ } else if (ZR8 == true && Speed.lastChanged ().secsTo (QDateTime::currentDateTime ()) > 15 && Cadence.lastChanged ().secsTo (QDateTime::currentDateTime ()) > 15 ) {
348
+ emit debug (QStringLiteral (" resetting speed" ));
349
+ Speed = 0 ;
350
+ Cadence = 0 ;
343
351
}
344
352
345
353
if ((newValue.length () != 20 ))
346
354
return ;
347
355
356
+ if (ZR8 && newValue.contains (cadenceSign)) {
357
+ int16_t i = newValue.indexOf (cadenceSign) + 3 ;
358
+
359
+ if (i >= newValue.length ())
360
+ return ;
361
+
362
+ Cadence = ((uint8_t )packet.at (i));
363
+ }
364
+
348
365
if ((uint8_t )newValue[0 ] == 0xa5 && newValue[1 ] == 0x17 )
349
366
return ;
350
367
@@ -368,8 +385,16 @@ void octanetreadmill::characteristicChanged(const QLowEnergyCharacteristic &char
368
385
else
369
386
#endif
370
387
{
371
- /* if(heartRateBeltName.startsWith("Disabled"))
372
- Heart = value.at(18);*/
388
+ #ifdef Q_OS_IOS
389
+ #ifndef IO_UNDER_QT
390
+ lockscreen h;
391
+ long appleWatchHeartRate = h.heartRate ();
392
+ h.setKcal (KCal.value ());
393
+ h.setDistance (Distance.value ());
394
+ Heart = appleWatchHeartRate;
395
+ debug (" Current Heart from Apple Watch: " + QString::number (appleWatchHeartRate));
396
+ #endif
397
+ #endif
373
398
}
374
399
emit debug (QStringLiteral (" Current speed: " ) + QString::number (speed));
375
400
@@ -404,7 +429,9 @@ void octanetreadmill::characteristicChanged(const QLowEnergyCharacteristic &char
404
429
(1000.0 / (lastTimeCharacteristicChanged.msecsTo (QDateTime::currentDateTime ()))));
405
430
}
406
431
407
- cadenceFromAppleWatch ();
432
+ // ZR8 has builtin cadence sensor
433
+ if (!ZR8)
434
+ cadenceFromAppleWatch ();
408
435
409
436
emit debug (QStringLiteral (" Current Distance Calculated: " ) + QString::number (Distance.value ()));
410
437
emit debug (QStringLiteral (" Current KCal: " ) + QString::number (KCal.value ()));
@@ -504,6 +531,12 @@ void octanetreadmill::deviceDiscovered(const QBluetoothDeviceInfo &device) {
504
531
device.address ().toString () + ' )' );
505
532
{
506
533
bluetoothDevice = device;
534
+
535
+ if (device.name ().toUpper ().startsWith (QLatin1String (" ZR8" ))) {
536
+ ZR8 = true ;
537
+ qDebug () << " ZR8 workaround activated" ;
538
+ }
539
+
507
540
m_control = QLowEnergyController::createCentral (bluetoothDevice, this );
508
541
connect (m_control, &QLowEnergyController::serviceDiscovered, this , &octanetreadmill::serviceDiscovered);
509
542
connect (m_control, &QLowEnergyController::discoveryFinished, this , &octanetreadmill::serviceScanDone);
0 commit comments