탐을 칠 때 대기 시간을 줄이기 위해 ION IED05 드럼 컨트롤러의 USB 폴링 속도를 높이려고 합니다. 이 드럼 컨트롤러는 실제로 MIDI 악기가 아닌 USB 게임패드처럼 작동합니다. 그래서 저는 미디 프록시를 작성하고 있습니다.
먼저 몇 가지 정보를 알려드리겠습니다.
/dev/input/js0
톰을 때리면 이벤트를 받습니다.
라이브 커널과 함께 최신 Arch Linux 설치를 실행하고 있습니다.Linux instrument 5.4.19-rt11-1-rt #1 SMP PREEMPT_RT Fri, 21 Feb 2020 08:55:59 +0000 x86_64 GNU/Linux
컨트롤러를 연결하면 다음과 같은 dmesg 출력이 표시됩니다.
[ 3502.121825] usb 2-4.1: new low-speed USB device number 13 using xhci_hcd
[ 3502.238814] usb 2-4.1: New USB device found, idVendor=15e4, idProduct=0100, bcdDevice= 1.00
[ 3502.238817] usb 2-4.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 3502.238819] usb 2-4.1: Product: DRUM VDX-150
[ 3502.238820] usb 2-4.1: Manufacturer: DRUM VDX-150
[ 3502.257116] input: DRUM VDX-150 DRUM VDX-150 as /devices/pci0000:00/0000:00:14.0/usb2/2-4/2-4.1/2-4.1:1.0/0003:15E4:0100.000D/input/input44
[ 3502.257407] hid-generic 0003:15E4:0100.000D: input,hidraw1: USB HID v1.00 Joystick [DRUM VDX-150 DRUM VDX-150] on usb-0000:00:14.0-4.1/input0
커널은 장치에 대해 다음과 같이 말합니다.
instrument# cat /sys/kernel/debug/usb/devices | grep DRUM -B3 -A3
T: Bus=02 Lev=02 Prnt=03 Port=00 Cnt=01 Dev#= 11 Spd=1.5 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=15e4 ProdID=0100 Rev= 1.00
S: Manufacturer=DRUM VDX-150
S: Product=DRUM VDX-150
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid
E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=10ms
USB 장치 정보:
instrument# lsusb -vd 15e4:0100
Bus 002 Device 011: ID 15e4:0100 Numark
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x15e4 Numark
idProduct 0x0100
bcdDevice 1.00
iManufacturer 1 DRUM VDX-150
iProduct 2 DRUM VDX-150
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x0022
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.00
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 86
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 10
현재 드럼 세트는 아래와 같이 8ms마다 폴링됩니다(커널이 10을 8로 해석한다고 생각합니까?).Ivl=10ms
~ 위에연구폴링 속도를 강제로 적용할 수 있는 것으로 밝혀지면 usbhid.jspoll 매개변수를 다음과 같이 설정했습니다.
instrument# cat /etc/modprobe.d/usbhid.conf
options usbhid jspoll=1
이것은 채택된 것 같습니다:
instrument# cat /sys/module/usbhid/parameters/jspoll
1
하지만 이 매개변수는 폴링률에 대해 아무 것도 변경하지 않는 것 같습니다.
이것저것 테스트 중이에요자일스, 내가 만들 때MIDI 프록시이 드럼 키트의 경우 이벤트 간 가장 짧은 기간은 8밀리초입니다.
생각할 수 있는 모든 것을 시도했지만 다음에 무엇을 시도해야 할지 모르겠습니다.
이 장치의 폴링 속도를 높이려면 어떻게 해야 합니까?
답변1
이는 bInterval이 USB 장치에 고유하고 사양이며 장치 자체를 프로그래밍하지 않으면 변경할 수 없기 때문입니다. OS 폴링 속도를 줄여서 잘 하고 있는데, 이는 귀하의 경우에 약간 도움이 될 것입니다.
입력 지연에 대해 자세히 알아볼 수 있습니다.https://inputlag.science/controller