From a7f38297b7ad7ffc119c889a6e42fcf839816077 Mon Sep 17 00:00:00 2001 From: Mathieu Laurendeau Date: Fri, 6 Apr 2018 13:41:56 +0200 Subject: [PATCH] Force feedback not working with G29 on Windows #544 --- core/haptic/common/ff_lg.c | 2 +- core/haptic/sink/haptic_sink_lg.c | 2 +- core/haptic/source/haptic_source_lg.c | 4 +- core/include/haptic/common/ff_lg.h | 3 +- core/test/haptic/ff_lg_test.c | 132 +++++++++++++------------- launcher/gimx-launcher.cpp | 3 +- shared/gimxcontroller/src/g29_ps4.c | 2 +- shared/gimxinput | 2 +- 8 files changed, 76 insertions(+), 74 deletions(-) diff --git a/core/haptic/common/ff_lg.c b/core/haptic/common/ff_lg.c index 420a318e..ef786bde 100644 --- a/core/haptic/common/ff_lg.c +++ b/core/haptic/common/ff_lg.c @@ -188,7 +188,7 @@ uint8_t ff_lg_get_caps(uint16_t pid) { switch(pid) { case USB_PRODUCT_ID_LOGITECH_G27_WHEEL: - case USB_PRODUCT_ID_LOGITECH_G29_WHEEL: + case USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL: caps |= FF_LG_CAPS_LEDS; break; default: diff --git a/core/haptic/sink/haptic_sink_lg.c b/core/haptic/sink/haptic_sink_lg.c index 67d73e1a..204c39d6 100644 --- a/core/haptic/sink/haptic_sink_lg.c +++ b/core/haptic/sink/haptic_sink_lg.c @@ -371,7 +371,7 @@ static s_haptic_core_ids haptic_sink_lg_ids[] = { { .vid = USB_VENDOR_ID_LOGITECH, .pid = USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL }, { .vid = USB_VENDOR_ID_LOGITECH, .pid = USB_PRODUCT_ID_LOGITECH_G27_WHEEL }, { .vid = USB_VENDOR_ID_LOGITECH, .pid = USB_PRODUCT_ID_LOGITECH_MOMO_WHEEL2 }, - { .vid = USB_VENDOR_ID_LOGITECH, .pid = USB_PRODUCT_ID_LOGITECH_G29_WHEEL }, + { .vid = USB_VENDOR_ID_LOGITECH, .pid = USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL }, { .vid = 0x0000, .pid = 0x0000 }, // end of table }; diff --git a/core/haptic/source/haptic_source_lg.c b/core/haptic/source/haptic_source_lg.c index 5498e440..0eed6d99 100644 --- a/core/haptic/source/haptic_source_lg.c +++ b/core/haptic/source/haptic_source_lg.c @@ -71,7 +71,7 @@ struct haptic_source_state * haptic_source_lg_init(s_haptic_core_ids ids) { state->caps = ff_lg_get_caps(ids.pid); - if (ids.pid == USB_PRODUCT_ID_LOGITECH_G29_WHEEL) { + if (ids.pid == USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL) { state->cmd_offset = 1; } @@ -275,7 +275,7 @@ static s_haptic_core_ids haptic_source_lg_ids[] = { { .vid = USB_VENDOR_ID_LOGITECH, .pid = USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL }, { .vid = USB_VENDOR_ID_LOGITECH, .pid = USB_PRODUCT_ID_LOGITECH_G27_WHEEL }, { .vid = USB_VENDOR_ID_LOGITECH, .pid = USB_PRODUCT_ID_LOGITECH_MOMO_WHEEL2 }, - { .vid = USB_VENDOR_ID_LOGITECH, .pid = USB_PRODUCT_ID_LOGITECH_G29_WHEEL }, + { .vid = USB_VENDOR_ID_LOGITECH, .pid = USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL }, { .vid = 0x0000, .pid = 0x0000 }, // end of table }; diff --git a/core/include/haptic/common/ff_lg.h b/core/include/haptic/common/ff_lg.h index 4f11c496..2b2b4a0d 100644 --- a/core/include/haptic/common/ff_lg.h +++ b/core/include/haptic/common/ff_lg.h @@ -35,7 +35,8 @@ #define USB_PRODUCT_ID_LOGITECH_MOMO_WHEEL2 0xca03 #define USB_PRODUCT_ID_LOGITECH_VIBRATION_WHEEL 0xca04 // rumble only #define USB_PRODUCT_ID_LOGITECH_G920_WHEEL 0xc262 // hid++ protocol -#define USB_PRODUCT_ID_LOGITECH_G29_WHEEL 0xc24f +#define USB_PRODUCT_ID_LOGITECH_G29_PC_WHEEL 0xc24f // not sure about this one... +#define USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL 0xc260 // classic protocol with 1 byte offset #define FF_LG_OUTPUT_REPORT_SIZE 7 diff --git a/core/test/haptic/ff_lg_test.c b/core/test/haptic/ff_lg_test.c index ebceb8c6..eabc4e8a 100644 --- a/core/test/haptic/ff_lg_test.c +++ b/core/test/haptic/ff_lg_test.c @@ -186,43 +186,43 @@ static const struct { } out; } test_cases[] = { - CONSTANT_TEST("G29 constant force (left, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, CONSTANT(0xff), CONSTANT(0xff)), - CONSTANT_TEST("G29 constant force (right, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, CONSTANT(0), CONSTANT(0)), - CONSTANT_TEST("G29 constant force (null, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, CONSTANT(127), CONSTANT(127)), + CONSTANT_TEST("G29 constant force (left, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, CONSTANT(0xff), CONSTANT(0xff)), + CONSTANT_TEST("G29 constant force (right, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, CONSTANT(0), CONSTANT(0)), + CONSTANT_TEST("G29 constant force (null, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, CONSTANT(127), CONSTANT(127)), - CONSTANT_TEST("G29 constant force (left, 50%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, CONSTANT(0xff), CONSTANT(0xbf)), - CONSTANT_TEST("G29 constant force (right, 50%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, CONSTANT(0), CONSTANT(0x3f)), - CONSTANT_TEST("G29 constant force (null, 50%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, CONSTANT(127), CONSTANT(127)), + CONSTANT_TEST("G29 constant force (left, 50%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, CONSTANT(0xff), CONSTANT(0xbf)), + CONSTANT_TEST("G29 constant force (right, 50%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, CONSTANT(0), CONSTANT(0x3f)), + CONSTANT_TEST("G29 constant force (null, 50%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, CONSTANT(127), CONSTANT(127)), - CONSTANT_TEST("G29 constant force (left, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, CONSTANT(0xff), CONSTANT(0)), - CONSTANT_TEST("G29 constant force (right, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, CONSTANT(0), CONSTANT(0xff)), - CONSTANT_TEST("G29 constant force (null, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, CONSTANT(127), CONSTANT(127)), + CONSTANT_TEST("G29 constant force (left, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, CONSTANT(0xff), CONSTANT(0)), + CONSTANT_TEST("G29 constant force (right, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, CONSTANT(0), CONSTANT(0xff)), + CONSTANT_TEST("G29 constant force (null, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, CONSTANT(127), CONSTANT(127)), - DAMPER_TEST("G29 damper force (left, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, + DAMPER_TEST("G29 damper force (left, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, LR_DAMPER(0x07, 0x00, 0x00, 0x00), HR_DAMPER(0x0f, 0x00, 0x00, 0x00, 0xff)), - DAMPER_TEST("G29 damper force (right, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, + DAMPER_TEST("G29 damper force (right, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, LR_DAMPER(0x00, 0x00, 0x07, 0x00), HR_DAMPER(0x00, 0x00, 0x0f, 0x00, 0xff)), - DAMPER_TEST("G29 damper force (zeroes, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, + DAMPER_TEST("G29 damper force (zeroes, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, LR_DAMPER(0x00, 0x00, 0x00, 0x00), HR_DAMPER(0x00, 0x00, 0x00, 0x00, 0xff)), - DAMPER_TEST("G29 damper force (ones, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, + DAMPER_TEST("G29 damper force (ones, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, LR_DAMPER(0x07, 0x01, 0x07, 0x01), HR_DAMPER(0x0f, 0x01, 0x0f, 0x01, 0xff)), - DAMPER_TEST("G29 damper force (left, 50%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, + DAMPER_TEST("G29 damper force (left, 50%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, LR_DAMPER(0x07, 0x00, 0x00, 0x00), HR_DAMPER(0x07, 0x00, 0x00, 0x00, 0xff)), - DAMPER_TEST("G29 damper force (right, 50%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, + DAMPER_TEST("G29 damper force (right, 50%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, LR_DAMPER(0x00, 0x00, 0x07, 0x00), HR_DAMPER(0x00, 0x00, 0x07, 0x00, 0xff)), - DAMPER_TEST("G29 damper force (zeroes, 50%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, + DAMPER_TEST("G29 damper force (zeroes, 50%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, LR_DAMPER(0x00, 0x00, 0x00, 0x00), HR_DAMPER(0x00, 0x00, 0x00, 0x00, 0xff)), - DAMPER_TEST("G29 damper force (ones, 50%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, + DAMPER_TEST("G29 damper force (ones, 50%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, LR_DAMPER(0x07, 0x01, 0x07, 0x01), HR_DAMPER(0x07, 0x01, 0x07, 0x01, 0xff)), - DAMPER_TEST("G29 damper force (left, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, + DAMPER_TEST("G29 damper force (left, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, LR_DAMPER(0x07, 0x00, 0x00, 0x00), HR_DAMPER(0x00, 0x00, 0x0f, 0x00, 0xff)), - DAMPER_TEST("G29 damper force (right, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, + DAMPER_TEST("G29 damper force (right, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, LR_DAMPER(0x00, 0x00, 0x07, 0x00), HR_DAMPER(0x0f, 0x00, 0x00, 0x00, 0xff)), - DAMPER_TEST("G29 damper force (zeroes, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, + DAMPER_TEST("G29 damper force (zeroes, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, LR_DAMPER(0x00, 0x00, 0x00, 0x00), HR_DAMPER(0x00, 0x00, 0x00, 0x00, 0xff)), - DAMPER_TEST("G29 damper force (ones, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, + DAMPER_TEST("G29 damper force (ones, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, LR_DAMPER(0x07, 0x01, 0x07, 0x01), HR_DAMPER(0x0f, 0x01, 0x0f, 0x01, 0xff)), DAMPER_TEST("FFGP damper force (c=5)", USB_PRODUCT_ID_LOGITECH_FORMULA_FORCE_GP, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 200, @@ -235,31 +235,31 @@ static const struct { DAMPER_TEST("DFP damper force (c=6)", USB_PRODUCT_ID_LOGITECH_DFP_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, LR_DAMPER(0x06, 0x00, 0x06, 0x00), HR_DAMPER(0x0b, 0x00, 0x0b, 0x00, 0xff)), - SPRING_TEST("G29 spring force (left, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, + SPRING_TEST("G29 spring force (left, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, LR_SPRING(0x7f, 0x7f, 0x00, 0x07, 0x00, 0x00, 255), HR_SPRING(0x7f, 0x7f, 0x00, 0x0f, 0xe0, 0x00, 0x0e, 0x00, 255)), - SPRING_TEST("G29 spring force (right, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, + SPRING_TEST("G29 spring force (right, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, LR_SPRING(0x7f, 0x7f, 0x70, 0x00, 0x00, 0x00, 255), HR_SPRING(0x7f, 0x7f, 0xf0, 0x00, 0xe0, 0x00, 0x0e, 0x00, 255)), - SPRING_TEST("G29 spring force (zeroes, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, + SPRING_TEST("G29 spring force (zeroes, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, LR_SPRING(0, 0, 0x00, 0x00, 0x00, 0x00, 0), HR_SPRING(0, 0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0)), - SPRING_TEST("G29 spring force (ones, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, + SPRING_TEST("G29 spring force (ones, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, LR_SPRING(0xff, 0xff, 0x70, 0x07, 0x10, 0x01, 0xff), HR_SPRING(0xff, 0xff, 0xf0, 0x0f, 0xf0, 0x00, 0x0f, 0x00, 0xff)), - SPRING_TEST("G29 spring force (left, 50%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, + SPRING_TEST("G29 spring force (left, 50%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, LR_SPRING(0x7f, 0x7f, 0x00, 0x07, 0x00, 0x00, 255), HR_SPRING(0x7f, 0x7f, 0x00, 0x07, 0xe0, 0x00, 0x0e, 0x00, 0x7f)), - SPRING_TEST("G29 spring force (right, 50%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, + SPRING_TEST("G29 spring force (right, 50%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, LR_SPRING(0x7f, 0x7f, 0x70, 0x00, 0x00, 0x00, 255), HR_SPRING(0x7f, 0x7f, 0x70, 0x00, 0xe0, 0x00, 0x0e, 0x00, 0x7f)), - SPRING_TEST("G29 spring force (zeroes, 50%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, + SPRING_TEST("G29 spring force (zeroes, 50%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, LR_SPRING(0, 0, 0x00, 0x00, 0x00, 0x00, 0), HR_SPRING(0, 0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0)), - SPRING_TEST("G29 spring force (ones, 50%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, + SPRING_TEST("G29 spring force (ones, 50%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, LR_SPRING(0xff, 0xff, 0x70, 0x07, 0x10, 0x01, 0xff), HR_SPRING(0xff, 0xff, 0x70, 0x07, 0xe0, 0x10, 0x0e, 0x01, 0x7f)), - SPRING_TEST("G29 spring force (left, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, + SPRING_TEST("G29 spring force (left, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, LR_SPRING(0x7f, 0x7f, 0x00, 0x07, 0x00, 0x00, 255), HR_SPRING(0x7f, 0x7f, 0xf0, 0x00, 0xe0, 0x00, 0x0e, 0x00, 255)), - SPRING_TEST("G29 spring force (right, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, + SPRING_TEST("G29 spring force (right, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, LR_SPRING(0x7f, 0x7f, 0x70, 0x00, 0x00, 0x00, 255), HR_SPRING(0x7f, 0x7f, 0x00, 0x0f, 0xe0, 0x00, 0x0e, 0x00, 255)), - SPRING_TEST("G29 spring force (zeroes, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, + SPRING_TEST("G29 spring force (zeroes, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, LR_SPRING(0, 0, 0x00, 0x00, 0x00, 0x00, 0), HR_SPRING(0xff, 0xff, 0x00, 0x00, 0xe0, 0x00, 0x0e, 0x00, 0)), - SPRING_TEST("G29 spring force (ones, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, + SPRING_TEST("G29 spring force (ones, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, LR_SPRING(0xff, 0xff, 0x70, 0x07, 0x10, 0x01, 0xff), HR_SPRING(0x00, 0x00, 0xf0, 0x0f, 0x00, 0x10, 0x00, 0x01, 0xff)), SPRING_TEST("FFGP spring force (c=5)", USB_PRODUCT_ID_LOGITECH_FORMULA_FORCE_GP, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 200, @@ -272,70 +272,70 @@ static const struct { SPRING_TEST("DFP spring force (c=6)", USB_PRODUCT_ID_LOGITECH_DFP_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, LR_SPRING(0x7f, 0x7f, 0x60, 0x06, 0x00, 0x00, 0xff), HR_SPRING(0x7f, 0x7f, 0xb0, 0x0b, 0xe0, 0x00, 0x0e, 0x00, 0xff)), - VARIABLE_TEST("G29 variable force (left, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, VARIABLE(0xff), CONSTANT(0xff)), - VARIABLE_TEST("G29 variable force (right, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, VARIABLE(0), CONSTANT(0)), - VARIABLE_TEST("G29 variable force (null, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, VARIABLE(127), CONSTANT(127)), + VARIABLE_TEST("G29 variable force (left, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, VARIABLE(0xff), CONSTANT(0xff)), + VARIABLE_TEST("G29 variable force (right, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, VARIABLE(0), CONSTANT(0)), + VARIABLE_TEST("G29 variable force (null, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, VARIABLE(127), CONSTANT(127)), - VARIABLE_TEST("G29 variable force (left, 50%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, VARIABLE(0xff), CONSTANT(0xbf)), - VARIABLE_TEST("G29 variable force (right, 50%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, VARIABLE(0), CONSTANT(0x3f)), - VARIABLE_TEST("G29 variable force (null, 50%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, VARIABLE(127), CONSTANT(127)), + VARIABLE_TEST("G29 variable force (left, 50%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, VARIABLE(0xff), CONSTANT(0xbf)), + VARIABLE_TEST("G29 variable force (right, 50%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, VARIABLE(0), CONSTANT(0x3f)), + VARIABLE_TEST("G29 variable force (null, 50%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, VARIABLE(127), CONSTANT(127)), - VARIABLE_TEST("G29 variable force (left, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, VARIABLE(0xff), CONSTANT(0)), - VARIABLE_TEST("G29 variable force (right, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, VARIABLE(0), CONSTANT(0xff)), - VARIABLE_TEST("G29 variable force (null, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, VARIABLE(127), CONSTANT(127)), + VARIABLE_TEST("G29 variable force (left, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, VARIABLE(0xff), CONSTANT(0)), + VARIABLE_TEST("G29 variable force (right, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, VARIABLE(0), CONSTANT(0xff)), + VARIABLE_TEST("G29 variable force (null, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, VARIABLE(127), CONSTANT(127)), - HR_SPRING_TEST("G29 high resolution spring force (left, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, + HR_SPRING_TEST("G29 high resolution spring force (left, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, HR_SPRING(0x7f, 0x7f, 0x00, 0x0f, 0xe0, 0x00, 0x0e, 0x00, 0xff), HR_SPRING(0x7f, 0x7f, 0x00, 0x0f, 0xc0, 0x00, 0x0c, 0x00, 0xff)), - HR_SPRING_TEST("G29 high resolution spring force (right, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, + HR_SPRING_TEST("G29 high resolution spring force (right, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, HR_SPRING(0x7f, 0x7f, 0xf0, 0x00, 0xe0, 0x00, 0x0e, 0x00, 0xff), HR_SPRING(0x7f, 0x7f, 0xf0, 0x00, 0xc0, 0x00, 0x0c, 0x00, 0xff)), - HR_SPRING_TEST("G29 high resolution spring force (zeroes, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, + HR_SPRING_TEST("G29 high resolution spring force (zeroes, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, HR_SPRING(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0), HR_SPRING(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0)), - HR_SPRING_TEST("G29 high resolution spring force (ones, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, + HR_SPRING_TEST("G29 high resolution spring force (ones, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, HR_SPRING(0xff, 0xff, 0xf0, 0x0f, 0xe0, 0x10, 0x0e, 0x01, 0xff), HR_SPRING(0xff, 0xff, 0xf0, 0x0f, 0xe0, 0x10, 0x0e, 0x01, 0xff)), - HR_SPRING_TEST("G29 high resolution spring force (left, 50%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, + HR_SPRING_TEST("G29 high resolution spring force (left, 50%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, HR_SPRING(0x7f, 0x7f, 0x00, 0x0f, 0xe0, 0x00, 0x0e, 0x00, 0xff), HR_SPRING(0x7f, 0x7f, 0x00, 0x07, 0xc0, 0x00, 0x0c, 0x00, 0x7f)), - HR_SPRING_TEST("G29 high resolution spring force (right, 50%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, + HR_SPRING_TEST("G29 high resolution spring force (right, 50%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, HR_SPRING(0x7f, 0x7f, 0xf0, 0x00, 0xe0, 0x00, 0x0e, 0x00, 0xff), HR_SPRING(0x7f, 0x7f, 0x70, 0x00, 0xc0, 0x00, 0x0c, 0x00, 0x7f)), - HR_SPRING_TEST("G29 high resolution spring force (zeroes, 50%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, + HR_SPRING_TEST("G29 high resolution spring force (zeroes, 50%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, HR_SPRING(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0), HR_SPRING(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0)), - HR_SPRING_TEST("G29 high resolution spring force (ones, 50%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, + HR_SPRING_TEST("G29 high resolution spring force (ones, 50%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, HR_SPRING(0xff, 0xff, 0xf0, 0x0f, 0xe0, 0x10, 0x0e, 0x01, 0xff), HR_SPRING(0xff, 0xff, 0x70, 0x07, 0xe0, 0x10, 0x0e, 0x01, 0x7f)), - HR_SPRING_TEST("G29 high resolution spring force (left, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, + HR_SPRING_TEST("G29 high resolution spring force (left, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, HR_SPRING(0x7f, 0x7f, 0x00, 0x0f, 0xe0, 0x00, 0x0e, 0x00, 0xff), HR_SPRING(0x80, 0x80, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff)), - HR_SPRING_TEST("G29 high resolution spring force (right, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, + HR_SPRING_TEST("G29 high resolution spring force (right, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, HR_SPRING(0x7f, 0x7f, 0xf0, 0x00, 0xe0, 0x00, 0x0e, 0x00, 0xff), HR_SPRING(0x80, 0x80, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xff)), - HR_SPRING_TEST("G29 high resolution spring force (zeroes, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, + HR_SPRING_TEST("G29 high resolution spring force (zeroes, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, HR_SPRING(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0), HR_SPRING(0xff, 0xff, 0x00, 0x00, 0xe0, 0x00, 0x0e, 0x00, 0)), - HR_SPRING_TEST("G29 high resolution spring force (ones, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, + HR_SPRING_TEST("G29 high resolution spring force (ones, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, HR_SPRING(0xff, 0xff, 0xf0, 0x0f, 0xe0, 0x10, 0x0e, 0x01, 0xff), HR_SPRING(0x00, 0x00, 0xf0, 0x0f, 0x00, 0x10, 0x00, 0x01, 0xff)), - HR_DAMPER_TEST("G29 high resolution damper force (left, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, + HR_DAMPER_TEST("G29 high resolution damper force (left, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, HR_DAMPER(0x0f, 0x00, 0x00, 0x00, 0xff), HR_DAMPER(0x0f, 0x00, 0x00, 0x00, 0xff)), - HR_DAMPER_TEST("G29 high resolution damper force (right, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, + HR_DAMPER_TEST("G29 high resolution damper force (right, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, HR_DAMPER(0x00, 0x00, 0x0f, 0x00, 0xff), HR_DAMPER(0x00, 0x00, 0x0f, 0x00, 0xff)), - HR_DAMPER_TEST("G29 high resolution damper force (zeroes, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, + HR_DAMPER_TEST("G29 high resolution damper force (zeroes, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, HR_DAMPER(0x00, 0x00, 0x00, 0x00, 0), HR_DAMPER(0x00, 0x00, 0x00, 0x00, 0xff)), - HR_DAMPER_TEST("G29 high resolution damper force (ones, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, + HR_DAMPER_TEST("G29 high resolution damper force (ones, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 100, 0, HR_DAMPER(0x0f, 0x01, 0x0f, 0x01, 0xff), HR_DAMPER(0x0f, 0x01, 0x0f, 0x01, 0xff)), - HR_DAMPER_TEST("G29 high resolution damper force (left, 50%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, + HR_DAMPER_TEST("G29 high resolution damper force (left, 50%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, HR_DAMPER(0x0f, 0x00, 0x00, 0x00, 0xff), HR_DAMPER(0x07, 0x00, 0x00, 0x00, 0xff)), - HR_DAMPER_TEST("G29 high resolution damper force (right, 50%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, + HR_DAMPER_TEST("G29 high resolution damper force (right, 50%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, HR_DAMPER(0x00, 0x00, 0x0f, 0x00, 0xff), HR_DAMPER(0x00, 0x00, 0x07, 0x00, 0xff)), - HR_DAMPER_TEST("G29 high resolution damper force (zeroes, 50%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, + HR_DAMPER_TEST("G29 high resolution damper force (zeroes, 50%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, HR_DAMPER(0x00, 0x00, 0x00, 0x00, 0), HR_DAMPER(0x00, 0x00, 0x00, 0x00, 0xff)), - HR_DAMPER_TEST("G29 high resolution damper force (ones, 50%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, + HR_DAMPER_TEST("G29 high resolution damper force (ones, 50%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 0, 50, 0, HR_DAMPER(0x0f, 0x01, 0x0f, 0x01, 0xff), HR_DAMPER(0x07, 0x01, 0x07, 0x01, 0xff)), - HR_DAMPER_TEST("G29 high resolution damper force (left, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, + HR_DAMPER_TEST("G29 high resolution damper force (left, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, HR_DAMPER(0x0f, 0x00, 0x00, 0x00, 0xff), HR_DAMPER(0x00, 0x00, 0x0f, 0x00, 0xff)), - HR_DAMPER_TEST("G29 high resolution damper force (right, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, + HR_DAMPER_TEST("G29 high resolution damper force (right, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, HR_DAMPER(0x00, 0x00, 0x0f, 0x00, 0xff), HR_DAMPER(0x0f, 0x00, 0x00, 0x00, 0xff)), - HR_DAMPER_TEST("G29 high resolution damper force (zeroes, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, + HR_DAMPER_TEST("G29 high resolution damper force (zeroes, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, HR_DAMPER(0x00, 0x00, 0x00, 0x00, 0), HR_DAMPER(0x00, 0x00, 0x00, 0x00, 0xff)), - HR_DAMPER_TEST("G29 high resolution damper force (ones, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, + HR_DAMPER_TEST("G29 high resolution damper force (ones, inverted, 100%)", USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL, USB_PRODUCT_ID_LOGITECH_DFGT_WHEEL, 1, 100, 0, HR_DAMPER(0x0f, 0x01, 0x0f, 0x01, 0xff), HR_DAMPER(0x0f, 0x01, 0x0f, 0x01, 0xff)), }; diff --git a/launcher/gimx-launcher.cpp b/launcher/gimx-launcher.cpp index abb2ff04..0416f447 100644 --- a/launcher/gimx-launcher.cpp +++ b/launcher/gimx-launcher.cpp @@ -958,7 +958,8 @@ void launcherFrame::autoConfig() #define USB_PRODUCT_ID_LOGITECH_MOMO_WHEEL2 0xca03 #define USB_PRODUCT_ID_LOGITECH_VIBRATION_WHEEL 0xca04 // rumble only #define USB_PRODUCT_ID_LOGITECH_G920_WHEEL 0xc262 // does not support classic format -#define USB_PRODUCT_ID_LOGITECH_G29_WHEEL 0xc24f +#define USB_PRODUCT_ID_LOGITECH_G29_PC_WHEEL 0xc24f // not sure about this one... +#define USB_PRODUCT_ID_LOGITECH_G29_PS4_WHEEL 0xc260 // classic protocol with 1 byte offset #define MAKE_IDS(USB_PRODUCT_ID) \ { .vendor_id = USB_VENDOR_ID_LOGITECH, .product_id = USB_PRODUCT_ID } diff --git a/shared/gimxcontroller/src/g29_ps4.c b/shared/gimxcontroller/src/g29_ps4.c index 588a58a8..efa0d0c7 100644 --- a/shared/gimxcontroller/src/g29_ps4.c +++ b/shared/gimxcontroller/src/g29_ps4.c @@ -318,7 +318,7 @@ static s_controller controller = { .name = "G29 PS4", .vid = 0x046d, - .pid = 0xc24f, + .pid = 0xc260, .refresh_period = { .min_value = 1000, .default_value = 5000 }, .auth_required = 1, .axes = axes, diff --git a/shared/gimxinput b/shared/gimxinput index 382fe295..0e36f85c 160000 --- a/shared/gimxinput +++ b/shared/gimxinput @@ -1 +1 @@ -Subproject commit 382fe295cbe7d3b2d003c99a6b91f7ac25b669dd +Subproject commit 0e36f85cd05e34ad2ce8713c0205dcde3016a972