| 10465 | } |
| 10466 | |
| 10467 | void QKeyMapper_Worker::processForzaFormatData(const QByteArray &forzadata) |
| 10468 | { |
| 10469 | qsizetype data_length = forzadata.size(); |
| 10470 | bool extra_data = false; |
| 10471 | qsizetype buffer_offset = 0; |
| 10472 | |
| 10473 | if (data_length != FORZA_MOTOR_7_SLED_DATA_LENGTH |
| 10474 | && data_length != FORZA_MOTOR_7_DASH_DATA_LENGTH |
| 10475 | && data_length != FORZA_MOTOR_8_DASH_DATA_LENGTH |
| 10476 | && data_length != FORZA_HORIZON_DATA_LENGTH) { |
| 10477 | return; |
| 10478 | } |
| 10479 | else { |
| 10480 | if (data_length == FORZA_MOTOR_7_SLED_DATA_LENGTH) { |
| 10481 | extra_data = false; |
| 10482 | } |
| 10483 | else { |
| 10484 | extra_data = true; |
| 10485 | if (data_length == FORZA_HORIZON_DATA_LENGTH) { |
| 10486 | buffer_offset = FORZA_HORIZON_BUFFER_OFFSET; |
| 10487 | } |
| 10488 | } |
| 10489 | } |
| 10490 | |
| 10491 | #ifdef GRIP_VERBOSE_LOG |
| 10492 | QString dataformat_str; |
| 10493 | if (data_length == FORZA_MOTOR_7_SLED_DATA_LENGTH) { |
| 10494 | dataformat_str = "Forza Motorsport 7 Sled"; |
| 10495 | } |
| 10496 | else if (data_length == FORZA_MOTOR_7_DASH_DATA_LENGTH) { |
| 10497 | dataformat_str = "Forza Motorsport 7 Dash"; |
| 10498 | } |
| 10499 | else if (data_length == FORZA_MOTOR_8_DASH_DATA_LENGTH) { |
| 10500 | dataformat_str = "Forza Motorsport 8 Dash"; |
| 10501 | } |
| 10502 | else { |
| 10503 | dataformat_str = "Forza Horizon"; |
| 10504 | } |
| 10505 | |
| 10506 | qDebug().nospace() << "[processForzaFormatData]" << dataformat_str << " data length = " << data_length; |
| 10507 | #endif |
| 10508 | |
| 10509 | QByteArray firstPartData = forzadata.left(FIRAT_PART_DATA_LENGTH); |
| 10510 | QByteArray secondPartData; |
| 10511 | if (extra_data) { |
| 10512 | secondPartData = forzadata.mid(FIRAT_PART_DATA_LENGTH + buffer_offset, SECOND_PART_DATA_LENGTH); |
| 10513 | } |
| 10514 | |
| 10515 | QDataStream firstPartStream(firstPartData); |
| 10516 | firstPartStream.setByteOrder(QDataStream::LittleEndian); |
| 10517 | firstPartStream.setFloatingPointPrecision(QDataStream::SinglePrecision); |
| 10518 | |
| 10519 | QDataStream secondPartStream(secondPartData); |
| 10520 | secondPartStream.setByteOrder(QDataStream::LittleEndian); |
| 10521 | secondPartStream.setFloatingPointPrecision(QDataStream::SinglePrecision); |
| 10522 | |
| 10523 | /* First Part Data */ |
| 10524 | qint32 is_race_on; |
nothing calls this directly
no test coverage detected