Compare commits

...

2 Commits

Author SHA1 Message Date
Roberto Viola
5396959e9a Update project.pbxproj 2024-08-28 11:59:26 +02:00
Roberto Viola
91635e2a9d reverting module to f8a09dc301
f8a09dc301/src/trxappgateusbtreadmill.cpp
2024-08-28 11:58:39 +02:00
2 changed files with 26 additions and 130 deletions

View File

@@ -4046,7 +4046,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = "../src/ios/qdomyos-zwift.entitlements";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 852;
CURRENT_PROJECT_VERSION = 853;
DEVELOPMENT_TEAM = 6335M7T29D;
ENABLE_BITCODE = NO;
GCC_PREPROCESSOR_DEFINITIONS = "ADB_HOST=1";
@@ -4237,7 +4237,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = "../src/ios/qdomyos-zwift.entitlements";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 852;
CURRENT_PROJECT_VERSION = 853;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = 6335M7T29D;
ENABLE_BITCODE = NO;
@@ -4464,7 +4464,7 @@
CODE_SIGN_ENTITLEMENTS = "watchkit Extension/WatchKit Extension.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 852;
CURRENT_PROJECT_VERSION = 853;
DEVELOPMENT_TEAM = 6335M7T29D;
ENABLE_BITCODE = YES;
ENABLE_STRICT_OBJC_MSGSEND = YES;
@@ -4560,7 +4560,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_ENTITLEMENTS = "watchkit Extension/WatchKit Extension.entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 852;
CURRENT_PROJECT_VERSION = 853;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = 6335M7T29D;
ENABLE_BITCODE = YES;
@@ -4652,7 +4652,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_ENTITLEMENTS = "watchkit Extension/WatchKit Extension.entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 852;
CURRENT_PROJECT_VERSION = 853;
DEVELOPMENT_ASSET_PATHS = "\"watchkit Extension/Preview Content\"";
ENABLE_BITCODE = YES;
ENABLE_PREVIEWS = YES;
@@ -4766,7 +4766,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_ENTITLEMENTS = "watchkit Extension/WatchKit Extension.entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 852;
CURRENT_PROJECT_VERSION = 853;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_ASSET_PATHS = "\"watchkit Extension/Preview Content\"";
ENABLE_BITCODE = YES;

View File

@@ -41,12 +41,7 @@ void trxappgateusbtreadmill::writeCharacteristic(uint8_t *data, uint8_t data_len
}
writeBuffer = new QByteArray((const char *)data, data_len);
if (gattWriteCharacteristic.properties() & QLowEnergyCharacteristic::WriteNoResponse) {
gattCommunicationChannelService->writeCharacteristic(gattWriteCharacteristic, *writeBuffer,
QLowEnergyService::WriteWithoutResponse);
} else {
gattCommunicationChannelService->writeCharacteristic(gattWriteCharacteristic, *writeBuffer);
}
gattCommunicationChannelService->writeCharacteristic(gattWriteCharacteristic, *writeBuffer);
if (!disable_log) {
emit debug(QStringLiteral(" >> ") + writeBuffer->toHex(' ') + QStringLiteral(" // ") + info);
@@ -72,13 +67,7 @@ void trxappgateusbtreadmill::forceIncline(double requestIncline) {
if (requestIncline < 0)
requestIncline = 0;
if (treadmill_type == TYPE::ADIDAS) {
uint8_t write[] = {0xf0, 0xac, 0x5b, 0xd3, 0x08, 0x64, 0x64, 0x9a};
write[4] = (requestIncline + 1);
write[7] = write[4] + 0x92;
writeCharacteristic(write, sizeof(write), QStringLiteral("forceIncline"), false, true);
} else if (!reebok_fr30_treadmill) {
if (!reebok_fr30_treadmill) {
uint8_t write[] = {0xf0, 0xac, 0x01, 0xd3, 0x03, 0x64, 0x64, 0x3b};
write[4] = (requestIncline + 1);
write[7] = write[4] + 0x38;
@@ -128,16 +117,13 @@ void trxappgateusbtreadmill::update() {
}
bool toorx30 = settings.value(QZSettings::toorx_3_0, QZSettings::default_toorx_3_0).toBool();
if (treadmill_type == TYPE::REEBOK || treadmill_type == TYPE::REEBOK_2) {
if (treadmill_type == TYPE::REEBOK) {
const uint8_t noOpData[] = {0xf0, 0xa2, 0x32, 0xd3, 0x97};
writeCharacteristic((uint8_t *)noOpData, sizeof(noOpData), QStringLiteral("noOp"), false, true);
} else if (treadmill_type == TYPE::DKN_2) {
const uint8_t noOpData[] = {0xf0, 0xa2, 0x04, 0x01, 0x97};
writeCharacteristic((uint8_t *)noOpData, sizeof(noOpData), QStringLiteral("noOp"), false, true);
} else if (treadmill_type == TYPE::ADIDAS) {
const uint8_t noOpData[] = {0xf0, 0xa2, 0x5b, 0xd3, 0xc0};
writeCharacteristic((uint8_t *)noOpData, sizeof(noOpData), QStringLiteral("noOp"), false, true);
} else if (treadmill_type == TYPE::DKN || treadmill_type == TYPE::DKN_2 || treadmill_type == TYPE::DKN_3 || toorx30 == false ||
} else if (treadmill_type == TYPE::DKN || treadmill_type == TYPE::DKN_2 || toorx30 == false ||
jtx_fitness_sprint_treadmill) {
const uint8_t noOpData[] = {0xf0, 0xa2, 0x01, 0xd3, 0x66};
writeCharacteristic((uint8_t *)noOpData, sizeof(noOpData), QStringLiteral("noOp"), false, true);
@@ -167,16 +153,12 @@ void trxappgateusbtreadmill::update() {
if (requestStart != -1) {
emit debug(QStringLiteral("starting..."));
// btinit(true);
if (treadmill_type == TYPE::REEBOK || treadmill_type == TYPE::REEBOK_2) {
if (treadmill_type == TYPE::REEBOK) {
const uint8_t startTape[] = {0xf0, 0xa5, 0x32, 0xd3, 0x02, 0x9c};
writeCharacteristic((uint8_t *)startTape, sizeof(startTape), QStringLiteral("startTape"), false, true);
} else if (treadmill_type == TYPE::DKN || treadmill_type == TYPE::DKN_2 || toorx30 == false) {
const uint8_t startTape[] = {0xf0, 0xa5, 0x01, 0xd3, 0x02, 0x6b};
writeCharacteristic((uint8_t *)startTape, sizeof(startTape), QStringLiteral("startTape"), false, true);
} else if (treadmill_type == TYPE::ADIDAS) {
const uint8_t startTape[] = {0xf0, 0xa5, 0x5b, 0xd3, 0x02, 0xc5};
writeCharacteristic((uint8_t *)startTape, sizeof(startTape), QStringLiteral("startTape"), false, true);
writeCharacteristic((uint8_t *)startTape, sizeof(startTape), QStringLiteral("startTape"), false, true);
} else {
const uint8_t startTape[] = {0xf0, 0xa5, 0x23, 0xd3, 0x02, 0x8d};
writeCharacteristic((uint8_t *)startTape, sizeof(startTape), QStringLiteral("startTape"), false, true);
@@ -188,12 +170,6 @@ void trxappgateusbtreadmill::update() {
if (requestStop != -1) {
emit debug(QStringLiteral("stopping..."));
// writeCharacteristic(initDataF0C800B8, sizeof(initDataF0C800B8), "stop tape");
if (treadmill_type == TYPE::ADIDAS) {
const uint8_t stopTape[] = {0xf0, 0xa5, 0x5b, 0xd3, 0x04, 0xc7};
writeCharacteristic((uint8_t *)stopTape, sizeof(stopTape), QStringLiteral("stopTape"), false, true);
}
requestStop = -1;
}
if (requestIncreaseFan != -1) {
@@ -223,43 +199,28 @@ void trxappgateusbtreadmill::characteristicChanged(const QLowEnergyCharacteristi
emit debug(QStringLiteral(" << ") + newValue.toHex(' '));
lastPacket.append(newValue);
qDebug() << "actual lastPacket" << lastPacket.toHex(' ');
// Focus Fitness Senator 54 iplus #1790
if((newValue.length() < 18 && lastPacket.length() > 2 && (((uint8_t)lastPacket.at(0)) != 0xf0 || ((uint8_t)lastPacket.at(1)) != 0xb2)) || lastPacket.length() > 19) {
if(lastPacket.length() == 3 && ((uint8_t)lastPacket.at(1)) == 0xf0 && ((uint8_t)lastPacket.at(2)) == 0xb2) {
lastPacket.clear();
lastPacket.append(0xf0);
lastPacket.append(0xb2);
return;
}
lastPacket.clear();
return;
}
if ((lastPacket.length() != 19 && treadmill_type != TYPE::DKN_2) ||
(lastPacket.length() != 18 && treadmill_type == TYPE::DKN_2)) {
lastPacket = newValue;
if ((newValue.length() != 19 && treadmill_type != TYPE::DKN_2) ||
(newValue.length() != 18 && treadmill_type == TYPE::DKN_2)) {
return;
}
if (treadmill_type == TYPE::IRUNNING || treadmill_type == TYPE::IRUNNING_2) {
if (lastPacket.at(15) == 0x03 && lastPacket.at(16) == 0x02 && readyToStart == false) {
if (newValue.at(15) == 0x03 && newValue.at(16) == 0x02 && readyToStart == false) {
readyToStart = true;
requestStart = 1;
}
} else if (treadmill_type != TYPE::REEBOK && treadmill_type != TYPE::REEBOK_2 && treadmill_type != TYPE::DKN && treadmill_type != TYPE::DKN_2) {
if (lastPacket.at(16) == 0x04 && lastPacket.at(17) == 0x03 && readyToStart == false) {
} else if (treadmill_type != TYPE::REEBOK && treadmill_type != TYPE::DKN && treadmill_type != TYPE::DKN_2) {
if (newValue.at(16) == 0x04 && newValue.at(17) == 0x03 && readyToStart == false) {
readyToStart = true;
requestStart = 1;
}
}
double speed = GetSpeedFromPacket(lastPacket);
double incline = GetInclinationFromPacket(lastPacket);
double kcal = GetKcalFromPacket(lastPacket);
double distance = GetDistanceFromPacket(lastPacket);
double speed = GetSpeedFromPacket(newValue);
double incline = GetInclinationFromPacket(newValue);
double kcal = GetKcalFromPacket(newValue);
double distance = GetDistanceFromPacket(newValue);
#ifdef Q_OS_ANDROID
if (settings.value(QZSettings::ant_heart, QZSettings::default_ant_heart).toBool())
@@ -287,7 +248,7 @@ void trxappgateusbtreadmill::characteristicChanged(const QLowEnergyCharacteristi
emit debug(QStringLiteral("Current KCal: ") + QString::number(kcal));
emit debug(QStringLiteral("Current Distance: ") + QString::number(distance));
emit debug(QStringLiteral("Current Elapsed from the treadmill (not used): ") +
QString::number(GetElapsedFromPacket(lastPacket)));
QString::number(GetElapsedFromPacket(newValue)));
emit debug(QStringLiteral("Current Distance Calculated: ") + QString::number(DistanceCalculated));
if (m_control->error() != QLowEnergyController::NoError) {
@@ -300,8 +261,6 @@ void trxappgateusbtreadmill::characteristicChanged(const QLowEnergyCharacteristi
Distance = distance;
firstCharChanged = false;
lastPacket.clear();
}
uint16_t trxappgateusbtreadmill::GetElapsedFromPacket(const QByteArray &packet) {
@@ -311,7 +270,7 @@ uint16_t trxappgateusbtreadmill::GetElapsedFromPacket(const QByteArray &packet)
}
double trxappgateusbtreadmill::GetSpeedFromPacket(const QByteArray &packet) {
uint16_t convertedData = (uint16_t)((packet.at(13) - 1)) + (((uint16_t)((uint8_t)packet.at(12) - 1)) * 100);
uint16_t convertedData = (packet.at(13) - 1) + ((packet.at(12) - 1) * 100);
double data = (double)(convertedData) / 10.0f;
return data;
}
@@ -352,7 +311,7 @@ void trxappgateusbtreadmill::btinit(bool startTape) {
settings.value(QZSettings::jtx_fitness_sprint_treadmill, QZSettings::default_jtx_fitness_sprint_treadmill)
.toBool();
if (treadmill_type == TYPE::DKN || treadmill_type == TYPE::DKN_3) {
if (treadmill_type == TYPE::DKN) {
const uint8_t initData1[] = {0xf0, 0xa0, 0x02, 0x02, 0x94};
const uint8_t initData2[] = {0xf0, 0xa0, 0x01, 0xd3, 0x64};
const uint8_t initData3[] = {0xf0, 0xa5, 0x01, 0xd3, 0x04, 0x6d};
@@ -390,45 +349,7 @@ void trxappgateusbtreadmill::btinit(bool startTape) {
writeCharacteristic((uint8_t *)initData3, sizeof(initData3), QStringLiteral("init"), false, false);
QThread::msleep(400);
} else if (treadmill_type == TYPE::ADIDAS) {
const uint8_t initData1[] = {0xf0, 0xa0, 0x02, 0x02, 0x94};
const uint8_t initData2[] = {0xf0, 0xa0, 0x5b, 0xd3, 0xbe};
const uint8_t initData3[] = {0xf0, 0xa5, 0x5b, 0xd3, 0x04, 0xc7};
const uint8_t initData4[] = {0xf0, 0xa1, 0x5b, 0xd3, 0xbf};
const uint8_t initData5[] = {0xf0, 0xa3, 0x5b, 0xd3, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x47, 0x11};
const uint8_t initData6[] = {0xf0, 0xac, 0x5b, 0xd3, 0x01, 0x64, 0x64, 0x93};
const uint8_t initData7[] = {0xf0, 0xa4, 0x5b, 0xd3, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x0b, 0x01, 0x01, 0xd7};
const uint8_t initData8[] = {0xf0, 0xaf, 0x5b, 0xd3, 0x02, 0xcf};
writeCharacteristic((uint8_t *)initData1, sizeof(initData1), QStringLiteral("init"), false, true);
QThread::msleep(400);
writeCharacteristic((uint8_t *)initData2, sizeof(initData2), QStringLiteral("init"), false, true);
QThread::msleep(400);
writeCharacteristic((uint8_t *)initData3, sizeof(initData3), QStringLiteral("init"), false, true);
QThread::msleep(400);
writeCharacteristic((uint8_t *)initData3, sizeof(initData3), QStringLiteral("init"), false, true);
QThread::msleep(400);
writeCharacteristic((uint8_t *)initData3, sizeof(initData3), QStringLiteral("init"), false, true);
QThread::msleep(400);
writeCharacteristic((uint8_t *)initData4, sizeof(initData4), QStringLiteral("init"), false, true);
QThread::msleep(400);
writeCharacteristic((uint8_t *)initData5, sizeof(initData5), QStringLiteral("init"), false, true);
QThread::msleep(400);
writeCharacteristic((uint8_t *)initData6, sizeof(initData6), QStringLiteral("init"), false, true);
QThread::msleep(400);
writeCharacteristic((uint8_t *)initData6, sizeof(initData6), QStringLiteral("init"), false, true);
QThread::msleep(400);
writeCharacteristic((uint8_t *)initData6, sizeof(initData6), QStringLiteral("init"), false, true);
QThread::msleep(400);
writeCharacteristic((uint8_t *)initData7, sizeof(initData7), QStringLiteral("init"), false, true);
QThread::msleep(400);
writeCharacteristic((uint8_t *)initData8, sizeof(initData8), QStringLiteral("init"), false, true);
QThread::msleep(400);
writeCharacteristic((uint8_t *)initData3, sizeof(initData3), QStringLiteral("init"), false, false);
QThread::msleep(400);
} else if (treadmill_type == TYPE::REEBOK || treadmill_type == TYPE::REEBOK_2) {
} else if (treadmill_type == TYPE::REEBOK) {
const uint8_t initData1[] = {0xf0, 0xa0, 0x01, 0x01, 0x92};
const uint8_t initData2[] = {0xf0, 0xa0, 0x32, 0xd3, 0x95};
const uint8_t initData3[] = {0xf0, 0xa1, 0x32, 0xd3, 0x96};
@@ -584,7 +505,7 @@ void trxappgateusbtreadmill::stateChanged(QLowEnergyService::ServiceState state)
QString uuidNotify = QStringLiteral("0000fff1-0000-1000-8000-00805f9b34fb");
QString uuidNotify2 = QStringLiteral("49535343-ACA3-481C-91EC-D85E28A60318");
if (treadmill_type == TYPE::IRUNNING || treadmill_type == TYPE::REEBOK || treadmill_type == TYPE::DKN_2 || treadmill_type == TYPE::DKN_3) {
if (treadmill_type == TYPE::IRUNNING || treadmill_type == TYPE::REEBOK || treadmill_type == TYPE::DKN_2) {
uuidWrite = QStringLiteral("49535343-8841-43f4-a8d4-ecbe34729bb3");
uuidNotify = QStringLiteral("49535343-1E4D-4BD9-BA61-23C647249616");
}
@@ -676,28 +597,6 @@ void trxappgateusbtreadmill::serviceScanDone(void) {
treadmill_type = TYPE::IRUNNING_2;
qDebug() << QStringLiteral("treadmill_type IRUNNING_2");
}
} else if (treadmill_type == TYPE::REEBOK) {
uuid = QStringLiteral("0000fff0-0000-1000-8000-00805f9b34fb");
QBluetoothUuid _gattCommunicationChannelServiceId2((QString)uuid);
gattCommunicationChannelService = m_control->createServiceObject(_gattCommunicationChannelServiceId2);
if (gattCommunicationChannelService == nullptr) {
qDebug() << QStringLiteral("invalid service") << uuid;
return;
} else {
treadmill_type = TYPE::REEBOK_2;
qDebug() << QStringLiteral("treadmill_type REEBOK_2");
}
} else if (treadmill_type == TYPE::DKN) {
uuid = QStringLiteral("49535343-fe7d-4ae5-8fa9-9fafd205e455");
QBluetoothUuid _gattCommunicationChannelServiceId2((QString)uuid);
gattCommunicationChannelService = m_control->createServiceObject(_gattCommunicationChannelServiceId2);
if (gattCommunicationChannelService == nullptr) {
qDebug() << QStringLiteral("invalid service") << uuid;
return;
} else {
treadmill_type = TYPE::DKN_3;
qDebug() << QStringLiteral("treadmill_type DKN_3");
}
} else {
qDebug() << QStringLiteral("invalid service") << uuid;
return;
@@ -739,7 +638,6 @@ void trxappgateusbtreadmill::deviceDiscovered(const QBluetoothDeviceInfo &device
device.name().toUpper().startsWith(QStringLiteral("DKN RUN")) ||
device.name().toUpper().startsWith(QStringLiteral("K80_")) ||
device.name().toUpper().startsWith(QStringLiteral("XT900")) ||
device.name().toUpper().startsWith(QStringLiteral("ADIDAS ")) ||
device.name().toUpper().startsWith(QStringLiteral("XT485"))) {
if (dkn_endurun_treadmill) {
treadmill_type = TYPE::DKN;
@@ -755,8 +653,6 @@ void trxappgateusbtreadmill::deviceDiscovered(const QBluetoothDeviceInfo &device
treadmill_type = TYPE::IRUNNING;
} else if (device.name().toUpper().startsWith(QStringLiteral("REEBOK"))) {
treadmill_type = TYPE::REEBOK;
} else if (device.name().toUpper().startsWith(QStringLiteral("ADIDAS "))) {
treadmill_type = TYPE::ADIDAS;
} else {
treadmill_type = TYPE::TRXAPPGATE;
}