====== Happy pedals XPL issue ====== * X-Plane od 10.10 nepoužívá linuxové rozhraní /dev/input/jsX. * protože js rozhraní omezuje: podléhá kalibraci, zavádí například null zóny atd... * Místo toho /dev/input/eventX * https://www.kernel.org/doc/Documentation/input/input.txt * https://www.kernel.org/doc/Documentation/input/event-codes.txt * vyžaduje oprávnění na eventX * stačí chmod o+r * machři to dělají přes udev rule * eventX lze identifikovat podle id nebo path, podle id takto: Pharaon:/dev/input/by-id# ls -la /dev/input/by-id/ celkem 0 drwxr-xr-x 2 root root 240 zář 3 21:04 . drw-rw-r-x 4 root root 320 zář 3 20:49 .. lrwxrwxrwx 1 root root 9 zář 3 20:49 usb-Arduino_LLC_Arduino_Leonardo-event-if02 -> ../event7 lrwxrwxrwx 1 root root 9 zář 3 19:47 usb-Logitech_Gaming_Mouse_G300-event-mouse -> ../event2 lrwxrwxrwx 1 root root 9 zář 3 19:47 usb-Logitech_Gaming_Mouse_G300-if01-event-kbd -> ../event3 lrwxrwxrwx 1 root root 9 zář 3 19:47 usb-Logitech_Gaming_Mouse_G300-mouse -> ../mouse0 lrwxrwxrwx 1 root root 9 zář 3 19:47 usb-Logitech_Logitech_Extreme_3D-event-joystick -> ../event6 lrwxrwxrwx 1 root root 6 zář 3 19:47 usb-Logitech_Logitech_Extreme_3D-joystick -> ../js0 lrwxrwxrwx 1 root root 9 zář 3 19:47 usb-Logitech_USB_Keyboard-event-if01 -> ../event5 lrwxrwxrwx 1 root root 9 zář 3 19:47 usb-Logitech_USB_Keyboard-event-kbd -> ../event4 ===== lsinput ===== /dev/input/event6 bustype : BUS_USB vendor : 0x46d product : 0xc215 version : 272 name : "Logitech Logitech Extreme 3D" phys : "usb-0000:00:14.0-4/input0" uniq : "" bits ev : EV_SYN EV_KEY EV_ABS EV_MSC /dev/input/event7 bustype : BUS_USB vendor : 0x2341 product : 0x8036 version : 257 name : "Arduino LLC Arduino Leonardo" phys : "usb-0000:00:1a.0-1.4/input2" uniq : "" bits ev : EV_SYN EV_KEY EV_ABS EV_M ===== evtest ===== * eventX lze číst přes evtest nástroj * příklad logitech: Pharaon:/dev/input/by-id# evtest /dev/input/event6 Input driver version is 1.0.1 Input device ID: bus 0x3 vendor 0x46d product 0xc215 version 0x110 Input device name: "Logitech Logitech Extreme 3D" Supported events: Event type 0 (EV_SYN) Event type 1 (EV_KEY) Event code 288 (BTN_TRIGGER) Event code 289 (BTN_THUMB) Event code 290 (BTN_THUMB2) Event code 291 (BTN_TOP) Event code 292 (BTN_TOP2) Event code 293 (BTN_PINKIE) Event code 294 (BTN_BASE) Event code 295 (BTN_BASE2) Event code 296 (BTN_BASE3) Event code 297 (BTN_BASE4) Event code 298 (BTN_BASE5) Event code 299 (BTN_BASE6) Event type 3 (EV_ABS) Event code 0 (ABS_X) Value 508 Min 0 Max 1023 Fuzz 3 Flat 63 Event code 1 (ABS_Y) Value 516 Min 0 Max 1023 Fuzz 3 Flat 63 Event code 5 (ABS_RZ) Value 128 Min 0 Max 255 Flat 15 Event code 6 (ABS_THROTTLE) Value 213 Min 0 Max 255 Flat 15 Event code 16 (ABS_HAT0X) Value 0 Min -1 Max 1 Event code 17 (ABS_HAT0Y) Value 0 Min -1 Max 1 Event type 4 (EV_MSC) Event code 4 (MSC_SCAN) Properties: Testing ... (interrupt to exit) * happy pedals Pharaon:/dev/input/by-id# evtest /dev/input/event7 Input driver version is 1.0.1 Input device ID: bus 0x3 vendor 0x2341 product 0x8036 version 0x101 Input device name: "Arduino LLC Arduino Leonardo" Supported events: Event type 0 (EV_SYN) Event type 1 (EV_KEY) Event code 288 (BTN_TRIGGER) Event code 289 (BTN_THUMB) Event type 3 (EV_ABS) Event code 2 (ABS_Z) Value 480 Min 0 Max 1023 Fuzz 3 Flat 63 Event code 3 (ABS_RX) Value 20 Min 0 Max 1023 Fuzz 3 Flat 63 Event code 4 (ABS_RY) Value 23 Min 0 Max 1023 Fuzz 3 Flat 63 Event type 4 (EV_MSC) Event code 4 (MSC_SCAN) Properties: Testing ... (interrupt to exit) ===== lsusb ===== Bus 001 Device 003: ID 046d:c215 Logitech, Inc. Extreme 3D Pro Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 1.10 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 8 idVendor 0x046d Logitech, Inc. idProduct 0xc215 Extreme 3D Pro bcdDevice 2.04 iManufacturer 1 iProduct 2 iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 34 bNumInterfaces 1 bConfigurationValue 1 iConfiguration 0 bmAttributes 0x80 (Bus Powered) MaxPower 30mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 3 Human Interface Device bInterfaceSubClass 0 No Subclass bInterfaceProtocol 0 None iInterface 0 HID Device Descriptor: bLength 9 bDescriptorType 33 bcdHID 1.10 bCountryCode 33 US bNumDescriptors 1 bDescriptorType 34 Report wDescriptorLength 122 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 0x0007 1x 7 bytes bInterval 10 Bus 005 Device 011: ID 2341:8036 Arduino SA Leonardo (CDC ACM, HID) Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 64 idVendor 0x2341 Arduino SA idProduct 0x8036 Leonardo (CDC ACM, HID) bcdDevice 1.00 iManufacturer 1 iProduct 2 iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 100 bNumInterfaces 3 bConfigurationValue 1 iConfiguration 0 bmAttributes 0x80 (Bus Powered) MaxPower 500mA Interface Association: bLength 8 bDescriptorType 11 bFirstInterface 0 bInterfaceCount 2 bFunctionClass 2 Communications bFunctionSubClass 2 Abstract (modem) bFunctionProtocol 1 AT-commands (v.25ter) iFunction 0 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 2 Communications bInterfaceSubClass 2 Abstract (modem) bInterfaceProtocol 0 None iInterface 0 CDC Header: bcdCDC 1.10 CDC Call Management: bmCapabilities 0x01 call management bDataInterface 1 CDC ACM: bmCapabilities 0x06 sends break line coding and serial state CDC Union: bMasterInterface 0 bSlaveInterface 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0010 1x 16 bytes bInterval 64 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 0 bNumEndpoints 2 bInterfaceClass 10 CDC Data bInterfaceSubClass 0 Unused bInterfaceProtocol 0 iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x02 EP 2 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x83 EP 3 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 2 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 3 Human Interface Device bInterfaceSubClass 0 No Subclass bInterfaceProtocol 0 None iInterface 0 HID Device Descriptor: bLength 9 bDescriptorType 33 bcdHID 1.01 bCountryCode 0 Not supported bNumDescriptors 1 bDescriptorType 34 Report wDescriptorLength 52 Report Descriptors: ** UNAVAILABLE ** Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x84 EP 4 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 1 ====== zkoumání xpl ====== * jak X-Plane zjístí seznam events? * on ví, že jich je max 32, tak to prostě zkusí strace /opt/X-Plane\ 10/X-Plane-x86_64 2>&1 | grep -i "/dev/input" open("/dev/input/event0", O_RDONLY) = 20 open("/dev/input/event1", O_RDONLY) = 20 open("/dev/input/event2", O_RDONLY) = 20 open("/dev/input/event3", O_RDONLY) = 20 open("/dev/input/event4", O_RDONLY) = 20 open("/dev/input/event5", O_RDONLY) = 20 open("/dev/input/event6", O_RDONLY) = 20 open("/dev/input/event7", O_RDONLY) = 28 open("/dev/input/event8", O_RDONLY) = -1 ENOENT (No such file or directory) open("/dev/input/event9", O_RDONLY) = -1 ENOENT (No such file or directory) open("/dev/input/event10", O_RDONLY) = -1 ENOENT (No such file or directory) open("/dev/input/event11", O_RDONLY) = -1 ENOENT (No such file or directory) open("/dev/input/event12", O_RDONLY) = -1 ENOENT (No such file or directory) open("/dev/input/event13", O_RDONLY) = -1 ENOENT (No such file or directory) open("/dev/input/event14", O_RDONLY) = -1 ENOENT (No such file or directory) open("/dev/input/event15", O_RDONLY) = -1 ENOENT (No such file or directory) open("/dev/input/event16", O_RDONLY) = -1 ENOENT (No such file or directory) open("/dev/input/event17", O_RDONLY) = -1 ENOENT (No such file or directory) open("/dev/input/event18", O_RDONLY) = -1 ENOENT (No such file or directory) open("/dev/input/event19", O_RDONLY) = -1 ENOENT (No such file or directory) open("/dev/input/event20", O_RDONLY) = -1 ENOENT (No such file or directory) open("/dev/input/event21", O_RDONLY) = -1 ENOENT (No such file or directory) open("/dev/input/event22", O_RDONLY) = -1 ENOENT (No such file or directory) open("/dev/input/event23", O_RDONLY) = -1 ENOENT (No such file or directory) open("/dev/input/event24", O_RDONLY) = -1 ENOENT (No such file or directory) open("/dev/input/event25", O_RDONLY) = -1 ENOENT (No such file or directory) open("/dev/input/event26", O_RDONLY) = -1 ENOENT (No such file or directory) open("/dev/input/event27", O_RDONLY) = -1 ENOENT (No such file or directory) open("/dev/input/event28", O_RDONLY) = -1 ENOENT (No such file or directory) open("/dev/input/event29", O_RDONLY) = -1 ENOENT (No such file or directory) open("/dev/input/event30", O_RDONLY) = -1 ENOENT (No such file or directory) open("/dev/input/event31", O_RDONLY) = -1 ENOENT (No such file or directory) * oprávnění určitě měl!! * dostal file deskriptor number * a testoval jsem to i přes grep -i permission * a navíc jsem to omylem spustil pod rootem :) * a takhle X-Plane pozná, zda je tam nový device inotify_add_watch(7, "/dev/input", IN_ATTRIB|IN_CREATE|IN_DELETE) = 2 * podle čeho se rozhodne, že se mu eventX líbí? open("/dev/input/event0", O_RDONLY) = -1 EACCES (Permission denied) open("/dev/input/event1", O_RDONLY) = -1 EACCES (Permission denied) open("/dev/input/event2", O_RDONLY) = -1 EACCES (Permission denied) open("/dev/input/event3", O_RDONLY) = -1 EACCES (Permission denied) open("/dev/input/event4", O_RDONLY) = -1 EACCES (Permission denied) open("/dev/input/event5", O_RDONLY) = -1 EACCES (Permission denied) open("/dev/input/event6", O_RDONLY) = 30 ioctl(30, EVIOCGBIT(EV_SYN, 8), [SYN_REPORT, SYN_CONFIG, SYN_DROPPED, 0x4 /* SYN_??? */]) = 8 ioctl(30, EVIOCGBIT(EV_KEY, 96), [ 0 ]) = 96 ioctl(30, EVIOCGBIT(EV_ABS, 8), [ABS_X, ABS_Y, ABS_RZ, ABS_THROTTLE]) = 8 fcntl(30, F_SETFL, O_RDONLY|O_NONBLOCK) = 0 ioctl(30, EVIOCGNAME(256), "Logitech Logitech Extreme 3D") = 29 ioctl(30, EVIOCGUNIQ(256), "") = 1 ioctl(30, EVIOCGID, {ID_BUS=3, ID_VENDOR=1133, ...}) = 0 ioctl(30, EVIOCGBIT(EV_KEY, 96), [ 0 ]) = 96 ioctl(30, EVIOCGBIT(EV_ABS, 8), [ABS_X, ABS_Y, ABS_RZ, ABS_THROTTLE]) = 8 ioctl(30, EVIOCGABS(ABS_X), {value=508, minimum=0, ...}) = 0 ioctl(30, EVIOCGABS(ABS_Y), {value=516, minimum=0, ...}) = 0 ioctl(30, EVIOCGABS(ABS_RZ), {value=128, minimum=0, ...}) = 0 ioctl(30, EVIOCGABS(ABS_THROTTLE), {value=213, minimum=0, ...}) = 0 open("/dev/input/event7", O_RDONLY) = 31 ioctl(31, EVIOCGBIT(EV_SYN, 8), [SYN_REPORT, SYN_CONFIG, SYN_DROPPED, 0x4 /* SYN_??? */]) = 8 ioctl(31, EVIOCGBIT(EV_KEY, 96), [ 0 ]) = 96 ioctl(31, EVIOCGBIT(EV_ABS, 8), [ABS_Z, ABS_RX, ABS_RY]) = 8 close(31) ====== connected threads ====== ====== založení vlákna ====== * SUBJECTS SUGGESTIONS * X-Plane doesn't support all axis like /dev/input/eventX devices? * BUG? X-Plane doesn't support my /dev/input/eventX device :/ * Why X-Plane doesn't like my input/eventX device? * TEXT: * My XPL is 10.36+ * My joystick based on arduino ... code * Releated information * http://developer.x-plane.com/2012/09/linux-joystick-permissions/ -- zakladni info o novem joy * http://developer.x-plane.com/2012/05/linux-and-hardwareos-abstractions * tohle je zajímavé!! bacha... linux port je na pokraji smrti. Važ negativní slova :) * autorem toho nového joy api je Chris Serio * http://forums.x-plane.org/index.php?showtopic=83024 - wejoy.. to by stálo asi za zkoušku :) * http://forums.x-plane.org/index.php?showtopic=84162 - obdobný topic, prý úspěšně vyřešený * PROVERIT!!! * pak pokračovat na str3 * Why it is not supported? * Do anybody know what is XPL looking for in event device? How should I change the device? * bump update * I have construct another device... simulating the old one and the result is....