9 Commits

Author SHA1 Message Date
Oleg
2e5efb2243 Merge branch 'main' into cammus 2024-07-16 12:37:52 +03:00
Makarenko Oleg
5416f537bf Merge pull request #12 from JacKeTUs/quirks-init
Move quirks initialization to the hid_pidff_init function
2024-07-16 12:37:11 +03:00
Oleg
3db0eef19a Rename hid_pidff_init 2024-07-16 12:30:29 +03:00
Oleg
d132ca633f Move quirks initialization to the hid_pidff_init function 2024-07-15 18:17:17 +03:00
Oleg
02a07521ae Add Cammus C5 to README.md 2024-07-15 04:54:18 +03:00
Oleg
ab76f16c32 Merge branch 'main' into cammus 2024-07-15 04:52:26 +03:00
Makarenko Oleg
a0b20c7055 Merge pull request #10 from JacKeTUs/no_delay_quirk_fix
Fix NO_DELAY_EFFECT quirk implementation
2024-07-15 04:51:15 +03:00
Oleg
776dccf8f9 Added Cammus wheel to the list with NO_DELAY quirk 2024-07-15 04:48:39 +03:00
Oleg
96088a6c56 Added Cammus C5 wheelbase ID 2024-07-15 04:47:12 +03:00
5 changed files with 17 additions and 33 deletions

View File

@@ -16,7 +16,8 @@ And that's basically it
## What devices are supported? ## What devices are supported?
### Bases: ### Bases:
1. MOZA R3, R5, R9, R12, R16, R21 1. MOZA R3, R5, R9, R12, R16, R21
2. ... 2. Cammus C5
3. ...
## What works? ## What works?
1. FFB (all effects from device descriptor) 1. FFB (all effects from device descriptor)
@@ -59,6 +60,9 @@ To unload module:
**[Android App](https://play.google.com/store/apps/details?id=com.gudsen.mozapithouse)** **[Android App](https://play.google.com/store/apps/details?id=com.gudsen.mozapithouse)**
### Cammus
**[Android App](https://play.google.com/store/apps/details?id=com.cammus.simulator)**
## Known issues with the driver ## Known issues with the driver
- Buttons above 80 simply don't show up. This is a Linux limitation and we're trying to fix that in the upstream - Buttons above 80 simply don't show up. This is a Linux limitation and we're trying to fix that in the upstream

View File

@@ -9,4 +9,7 @@
#define USB_DEVICE_ID_MOZA_R12 0x0006 #define USB_DEVICE_ID_MOZA_R12 0x0006
#define USB_DEVICE_ID_MOZA_R16_R21 0x0000 #define USB_DEVICE_ID_MOZA_R16_R21 0x0000
#define USB_VENDOR_ID_CAMMUS 0x3416
#define USB_DEVICE_ID_CAMMUS_C5 0x0301
#endif #endif

View File

@@ -23,6 +23,8 @@ static const struct hid_device_id pidff_wheel_devices[] = {
.driver_data = PIDFF_QUIRK_FIX_WHEEL_DIRECTION | PIDFF_QUIRK_FIX_PERIODIC_ENVELOPE }, .driver_data = PIDFF_QUIRK_FIX_WHEEL_DIRECTION | PIDFF_QUIRK_FIX_PERIODIC_ENVELOPE },
{ HID_USB_DEVICE(USB_VENDOR_ID_MOZA, USB_DEVICE_ID_MOZA_R16_R21), { HID_USB_DEVICE(USB_VENDOR_ID_MOZA, USB_DEVICE_ID_MOZA_R16_R21),
.driver_data = PIDFF_QUIRK_FIX_WHEEL_DIRECTION | PIDFF_QUIRK_FIX_PERIODIC_ENVELOPE }, .driver_data = PIDFF_QUIRK_FIX_WHEEL_DIRECTION | PIDFF_QUIRK_FIX_PERIODIC_ENVELOPE },
{ HID_USB_DEVICE(USB_VENDOR_ID_CAMMUS, USB_DEVICE_ID_CAMMUS_C5),
.driver_data = PIDFF_QUIRK_NO_DELAY_EFFECT },
{ } { }
}; };
MODULE_DEVICE_TABLE(hid, pidff_wheel_devices); MODULE_DEVICE_TABLE(hid, pidff_wheel_devices);
@@ -69,9 +71,9 @@ static int universal_pidff_probe(struct hid_device *hdev,
goto err; goto err;
} }
ret = hid_pidff_init_with_quirks(hdev, id); ret = hid_pidff_init_quirks(hdev, id);
if (ret) { if (ret) {
hid_warn(hdev, "Force feedback not supported\n"); hid_warn(hdev, "Force feedback is not supported\n");
goto err; goto err;
} }

View File

@@ -1320,9 +1320,9 @@ static int pidff_check_autocenter(struct pidff_device *pidff,
} }
/* /*
* Check if the device is PID and initialize it * Check if the device is PID and initialize it, with quirks
*/ */
int hid_pidff_init(struct hid_device *hid) int hid_pidff_init_quirks(struct hid_device *hid, const struct hid_device_id *id)
{ {
struct pidff_device *pidff; struct pidff_device *pidff;
struct hid_input *hidinput = list_entry(hid->inputs.next, struct hid_input *hidinput = list_entry(hid->inputs.next,
@@ -1344,6 +1344,8 @@ int hid_pidff_init(struct hid_device *hid)
return -ENOMEM; return -ENOMEM;
pidff->hid = hid; pidff->hid = hid;
pidff->quirks |= id->driver_data;
hid_dbg(dev, "Device quirks: %d\n", pidff->quirks);
hid_device_io_start(hid); hid_device_io_start(hid);
@@ -1421,29 +1423,3 @@ int hid_pidff_init(struct hid_device *hid)
kfree(pidff); kfree(pidff);
return error; return error;
} }
/*
* Check if the device is PID and initialize it
* Add quirks after initialisation
*/
int hid_pidff_init_with_quirks(struct hid_device *hid, const struct hid_device_id *id)
{
int error = hid_pidff_init(hid);
if (error)
return error;
struct hid_input *hidinput = list_entry(hid->inputs.next,
struct hid_input, list);
struct input_dev *dev = hidinput->input;
struct pidff_device *pidff = dev->ff->private;
/* set quirks on the pidff device */
hid_device_io_start(hid);
pidff->quirks |= id->driver_data;
hid_device_io_stop(hid);
hid_dbg(dev, "Device quirks: %d\n", pidff->quirks);
return 0;
}

View File

@@ -20,7 +20,6 @@
#define PIDFF_QUIRK_NO_DELAY_EFFECT BIT(2) #define PIDFF_QUIRK_NO_DELAY_EFFECT BIT(2)
int hid_pidff_init(struct hid_device *hid); int hid_pidff_init_quirks(struct hid_device *hid, const struct hid_device_id *id);
int hid_pidff_init_with_quirks(struct hid_device *hid, const struct hid_device_id *id);
#endif #endif