Pokud jste ochotni zkompilovat své vlastní jádro, upravte drivers/hid/usbhid/hid-core.c
je možnost.
Měl jsem podobný problém, protože chci změnit rychlost dotazování své klávesnice a kreslícího tabletu, takže jsem svůj hid-core.c už nějakou dobu upravil.
Zdá se, že novější jádra (4.12 a vyšší) již mají parametr usbhid.jspoll, ale stále žádný parametr pro klávesnice.
Se staršími jádry než 4.12 jsem svůj hid-core.c upravil následovně, takže mousepoll ovlivní všechna zařízení, která zpracovává:
--- a/linux-4.11-original/drivers/hid/usbhid/hid-core.c
+++ b/linux-4.11/drivers/hid/usbhid/hid-core.c
@@ -1081,9 +1081,14 @@ static int usbhid_start(struct hid_device *hid)
hid->name, endpoint->bInterval, interval);
}
- /* Change the polling interval of mice. */
- if (hid->collection->usage == HID_GD_MOUSE && hid_mousepoll_interval > 0)
+ /* Change the polling interval of mice.
+ EDIT 2016-09-03: poll everything with mousepoll
+ */
+ if (/*hid->collection->usage == HID_GD_MOUSE &&*/ hid_mousepoll_interval > 0) {
+ printk(KERN_INFO "%s: Changed interval to mousepoll: %d -> %d\n",
+ hid->name, interval, hid_mousepoll_interval);
interval = hid_mousepoll_interval;
+ }
A pro verze 4.12 a vyšší jsem to upravil jinak, protože jsem nechtěl narušit fungující usbhid.jspoll:
--- a/linux-4.12.4-original/drivers/hid/usbhid/hid-core.c
+++ b/linux-4.12.4/drivers/hid/usbhid/hid-core.c
@@ -56,6 +56,10 @@ static unsigned int hid_jspoll_interval;
module_param_named(jspoll, hid_jspoll_interval, uint, 0644);
MODULE_PARM_DESC(jspoll, "Polling interval of joysticks");
+static unsigned int hid_elsepoll_interval;
+module_param_named(elsepoll, hid_elsepoll_interval, uint, 0644);
+MODULE_PARM_DESC(elsepoll, "Polling interval of non-mouse non-joysticks");
+
@@ -1083,15 +1087,31 @@ static int usbhid_start(struct hid_device *hid)
}
/* Change the polling interval of mice and joysticks. */
+ /* EDIT 2017-08-03:
+ added elsepoll
+ always print to KERN_INFO when one of mousepoll, jspoll, elsepoll takes effect.
+ */
switch (hid->collection->usage) {
case HID_GD_MOUSE:
- if (hid_mousepoll_interval > 0)
+ if (hid_mousepoll_interval > 0) {
+ printk(KERN_INFO "%s: Changed interval to mousepoll: %d -> %d\n",
+ hid->name, interval, hid_mousepoll_interval);
interval = hid_mousepoll_interval;
+ }
break;
case HID_GD_JOYSTICK:
- if (hid_jspoll_interval > 0)
+ if (hid_jspoll_interval > 0) {
+ printk(KERN_INFO "%s: Changed interval to jspoll: %d -> %d\n",
+ hid->name, interval, hid_jspoll_interval);
interval = hid_jspoll_interval;
+ }
break;
+ default:
+ if (hid_elsepoll_interval > 0) {
+ printk(KERN_INFO "%s: Changed interval to elsepoll: %d -> %d\n",
+ hid->name, interval, hid_elsepoll_interval);
+ interval = hid_elsepoll_interval;
+ }
Nyní chcete získat 1000 Hz (interval 1 ms) na gamepadech a klávesnicích:
-
pokud je integrováno nebo si nejste jisti:přidejte
usbhid.mousepoll=1
nebousbhid.jspoll=1 usbhid.elsepoll=1
na příkazový řádek jádra a restartujte počítač. -
if module:napište
options usbhid mousepoll=1
nebooptions usbhid jspoll=1 elsepoll=1
až/etc/modprobe.d/usbhid.conf
Pokud stačí rmmod usbhid;modprobe usbhid
po úpravě výše uvedeného souboru musíte USB zařízení odpojit a znovu připojit, aby se skutečně změnil jeho interval dotazování i když se zdá, že zprávy jádra naznačují opak .
Po restartování nebo opětovném načtení usbhid ověřte, že funguje, odpojte a znovu připojte zařízení USB a spusťte dmesg |grep poll
Na posledních pár řádcích očekávejte něco takového:
[476243.420106] daskeyboard: Changed interval to elsepoll: 10 -> 1
[476243.497161] daskeyboard: Changed interval to elsepoll: 10 -> 1
[476251.633110] USB Gamepad : Changed interval to jspoll: 17 -> 1
[476260.726864] Wacom Co.,Ltd. Intuos PS: Changed interval to elsepoll: 2 -> 1
[476260.730403] Wacom Co.,Ltd. Intuos PS: Changed interval to elsepoll: 2 -> 1
Zde jsou zařízení 04d9:2013
, 0810:0003
a 056a:030e
Nevím o žádném obecném mechanismu. Domnívám se, že je třeba vyladit zdrojové kódy jádra nebo příslušného ovladače.
Paprsek naděje dává tato odpověď na míru dotazování threadI-PAC / Keyboard Encoder:
V Linuxu je možné nastavit rychlost dotazování myši USB a téměř všechny myši mohou pracovat s dotazováním 500 Hz. Neexistuje žádná oficiální podpora pro zvýšení rychlosti dotazování jiných HID zařízení (a předpokládám, že I-PAC je standardní HID zařízení), ale s jednoduchou úpravou nadrivers/usb/input/hid-core.c i pro ně můžete zvýšit míru dotazování. Svou klávesnici USB jsem dotazoval na 250 Hz a funguje perfektně, ale jiné klávesnice jsem netestoval a je pravděpodobné, že nebude fungovat se všemi zařízeními.