There is a kernel module which supports the Logitech iFeel mouse. Its called
ifeel, you can download it here: http://sourceforge.net/projects/tactile.
ifeel does not work with all kernel versions. In
fact, it often causes a kernel panic with kernels older than 2.4.22.
To install the ifeel kernel module:
tar xzf ifeel-0.5.1.tar.gzcd iFeelmake to build everythingmake device to create the device file:
/dev/input/ifeel0
ifeel Linux kernel module
yet, but it should be easy to do.
ifeel Linux kernel module
yet, but it should be easy to do.
ifeel Linux kernel module
yet, but it should be easy to do.
I am using a Saitek Cyborg 3D Force joystick. To make it work, you need to make the minor change below. You need to use the libff patches to get this joystick to work.
There is a good discussion about this in the libff-kernel archives.
Not all of this joystick's force effects work with Linux
iforce, but some do. To make more of them work, you
need to make a minor change to the kernel sources. In
linux/drivers/char/joystick/iforce/iforce-main.c in the
kernel sources, at about line 185, comment this out:
if (test_bit(FF_CORE_UPDATE, iforce->core_effects[effect->id].flags)) {
return -EAGAIN;
}
Apparently, "the AVB pegasus works like a charm with iforce.o." But I haven't tried it.
This is supposed to be well supported, but I don't have one, so I don't know. A lot of people had problems getting it to work.
The I-Force joysticks only seem to work with kernels older than 2.4.23 and the iFeel mice only seem to work with kernels newer than 2.4.21. So obvioiusly, 2.4.22 is the only option. You'll need to compile the iforce-standalone modules or apply the iforce patch.
Instead of using input, evdev, and
iforce from the kernel sources, the modules from iforce-standalone must be used. Another key aspect
of getting everything working together is the order that the kernel
modules are ordered. This is the only order that worked for me:
inputevdeviforceifeelNone of the HID or Input Event kernel modules should be loaded before you load the above list. This includes:
hidjoydevkeybdevmousedevusbmouseusbkbdThis is my script for making sure everything is loaded in the proper order: ff.sh
# these are not used by I-Force and iFeel devices rmmod keybdev rmmod mousedev rmmod usbkbd rmmod usbmouse rmmod joydev rmmod hid # these will be re-added in the correct order rmmod ifeel rmmod iforce rmmod evdev rmmod input sleep 1 # required before ifeel/iforce insmod /usr/src/iforce-standalone/input.o insmod /usr/src/iforce-standalone/evdev.o modprobe keybdev # for both to work, iforce needs to be first sleep 1 insmod /usr/src/iforce-standalone/iforce.o sleep 1 insmod /usr/src/iFeel/ifeel.o
To support iFeel and I-Force devices, special kernel modules are needed. Here is a survey of the options:
includes iforce and hid patches
just the patches necessary for the iforce modules.
just the code necessary for the iforce modules, with
seemingly cripppled versions of input and evdev.
fftest gives me
these errors:
Force feedback test program. HOLD FIRMLY YOUR WHEEL OR JOYSTICK TO PREVENT DAMAGES Device /dev/input/event0 opened Axes query: Axis X Axis Y Effects: Constant Number of simultaneous effects: 8 Upload effects[0]: Invalid argument Upload effects[2]: Invalid argument Upload effects[3]: Invalid argument Upload effects[4]: Invalid argument Upload effects[5]: Invalid argument Enter effect number, -1 to exit
This can be fixed by commenting out the chunk in
iforce-main.c mentioned above.
evtest on the joystick device gives you a
constant stream of data even though the joystick isn't moving. (The
above error happens also).
This hid kernel module is installed and has claimed
the joystick device. Remove the hid kernel module
(rmmod hid) and it should work fine.
Force feedback test program. HOLD FIRMLY YOUR WHEEL OR JOYSTICK TO PREVENT DAMAGES Device /dev/input/event5 opened Axes query: Effects: Number of simultaneous effects: 0 Upload effects[0]: Function not implemented Upload effects[1]: Function not implemented Upload effects[2]: Function not implemented Upload effects[3]: Function not implemented Upload effects[4]: Function not implemented Upload effects[5]: Function not implemented Enter effect number, -1 to exit
usb.c: registered new driver ifeel ifeel.c: v0.51:Logitech iFeel USB mouse driver ehci_hcd 00:02.2: GetStatus port 1 status 001403 POWER sig=k CSC CONNECT hub.c: port 1, portstatus 501, change 1, 480 Mb/s hub.c: port 1 connection change hub.c: port 1, portstatus 501, change 1, 480 Mb/s hub.c: port 1, portstatus 501, change 0, 480 Mb/s hub.c: port 1, portstatus 501, change 0, 480 Mb/s hub.c: port 1, portstatus 501, change 0, 480 Mb/s hub.c: port 1, portstatus 501, change 0, 480 Mb/s ehci_hcd 00:02.2: port 1 low speed --> companion ehci_hcd 00:02.2: GetStatus port 1 status 003402 POWER OWNER sig=k CSC hub.c: port 1, portstatus 0, change 1, 12 Mb/s ehci_hcd 00:02.2: free_config devnum 0 hub.c: port 2, portstatus 100, change 0, 12 Mb/s hub.c: port 3, portstatus 100, change 0, 12 Mb/s hub.c: port 4, portstatus 100, change 0, 12 Mb/s hub.c: port 5, portstatus 100, change 0, 12 Mb/s hub.c: port 6, portstatus 100, change 0, 12 Mb/s hub.c: port 1, portstatus 301, change 1, 1.5 Mb/s hub.c: port 1 connection change hub.c: port 1, portstatus 301, change 1, 1.5 Mb/s hub.c: port 1, portstatus 301, change 0, 1.5 Mb/s hub.c: port 1, portstatus 301, change 0, 1.5 Mb/s hub.c: port 1, portstatus 301, change 0, 1.5 Mb/s hub.c: port 1, portstatus 301, change 0, 1.5 Mb/s hub.c: port 1, portstatus 303, change 10, 1.5 Mb/s hub.c: new USB device 00:02.0-1, assigned address 6 usb.c: kmalloc IF c887ea00, numif 1 usb.c: skipped 1 class/vendor specific interface descriptors usb.c: new device strings: Mfr=4, Product=32, SerialNumber=0 usb.c: USB device number 6 default language ID 0x409 Manufacturer: Logitech Inc. Product: iFeel Mouse input: Logitech Inc. iFeel Mouse on usb1:6.0 usb.c: ifeel driver claimed interface c887ea00 usb.c: kusbd: /sbin/hotplug add 6 hub.c: port 2, portstatus 100, change 0, 12 Mb/s hub.c: port 3, portstatus 100, change 0, 12 Mb/s
hid module kicks in after the ifeel module.
That's also good, it means that ifeel claimed the device
first. Unfortunately, sending data to the
iFeel mouse still causes an instant kernel panic.
usb.c: registered new driver ifeel ifeel.c: v0.51:Logitech iFeel USB mouse driver hub.c: port 1, portstatus 301, change 1, 1.5 Mb/s hub.c: port 1 connection change hub.c: port 1, portstatus 301, change 1, 1.5 Mb/s hub.c: port 1, portstatus 301, change 0, 1.5 Mb/s hub.c: port 1, portstatus 301, change 0, 1.5 Mb/s hub.c: port 1, portstatus 301, change 0, 1.5 Mb/s hub.c: port 1, portstatus 301, change 0, 1.5 Mb/s hub.c: port 1, portstatus 303, change 0, 1.5 Mb/s hub.c: new USB device 00:14.2-1, assigned address 3 usb.c: kmalloc IF c98bfbc0, numif 1 usb.c: skipped 1 class/vendor specific interface descriptors usb.c: new device strings: Mfr=4, Product=32, SerialNumber=0 usb.c: USB device number 3 default language ID 0x409 Manufacturer: Logitech Inc. Product: iFeel Mouse input.c: calling /sbin/hotplug input [HOME=/ PATH=/sbin:/bin:/usr/sbin:/usr/bin ACTION=add PRODUCT=3/46d/c030/101 NAME=Logitech Inc. iFeel Mouse ] input: Logitech Inc. iFeel Mouse on usb1:3.0 usb.c: ifeel driver claimed interface c98bfbc0 usb.c: kusbd: /sbin/hotplug add 3 hub.c: port 2, portstatus 100, change 0, 12 Mb/s hub.c: port 1, portstatus 303, change 0, 1.5 Mb/s hub.c: port 2, portstatus 100, change 0, 12 Mb/s usb.c: registered new driver hiddev usb.c: registered new driver hid hid-core.c: v1.31:USB HID core driver mice: PS/2 mouse device common for all mice
usb.c: registered new driver ifeel
ifeel.c: v0.51:Logitech iFeel USB mouse driver
ehci-hub.c: GetStatus port 1 status 001403 POWER sig=k CSC CONNECT
hub.c: port 1, portstatus 501, change 1, 480 Mb/s
hub.c: port 1 connection change
hub.c: port 1, portstatus 501, change 1, 480 Mb/s
hub.c: port 1, portstatus 501, change 0, 480 Mb/s
hub.c: port 1, portstatus 501, change 0, 480 Mb/s
hub.c: port 1, portstatus 501, change 0, 480 Mb/s
hub.c: port 1, portstatus 501, change 0, 480 Mb/s
ehci-hub.c: 00:02.2 port 1 low speed, give to companion
ehci-hub.c: GetStatus port 1 status 003402 POWER OWNER sig=k CSC
hub.c: port 1, portstatus 0, change 1, 12 Mb/s
ehci-hcd.c: 00:02.2: free_config devnum 0
hub.c: port 2, portstatus 100, change 0, 12 Mb/s
hub.c: port 3, portstatus 100, change 0, 12 Mb/s
hub.c: port 4, portstatus 100, change 0, 12 Mb/s
hub.c: port 5, portstatus 100, change 0, 12 Mb/s
hub.c: port 6, portstatus 100, change 0, 12 Mb/s
hub.c: port 1, portstatus 301, change 1, 1.5 Mb/s
hub.c: port 1 connection change
hub.c: port 1, portstatus 301, change 1, 1.5 Mb/s
hub.c: port 1, portstatus 301, change 0, 1.5 Mb/s
hub.c: port 1, portstatus 301, change 0, 1.5 Mb/s
hub.c: port 1, portstatus 301, change 0, 1.5 Mb/s
hub.c: port 1, portstatus 301, change 0, 1.5 Mb/s
hub.c: port 1, portstatus 303, change 10, 1.5 Mb/s
hub.c: new USB device 00:02.0-1, assigned address 2
usb.c: kmalloc IF cf5f8c00, numif 1
usb.c: skipped 1 class/vendor specific interface descriptors
usb.c: new device strings: Mfr=4, Product=32, SerialNumber=0
usb.c: USB device number 2 default language ID 0x409
Manufacturer: Logitech Inc.
Product: iFeel Mouse
Unable to handle kernel paging request at virtual address 4440834c
printing eip:
c0207dbf
*pde = 00000000
Oops: 0000
CPU: 0
EIP: 0010:[<c0207dbf>] Not tainted
EFLAGS: 00010202
eax: 44408280 ebx: ceb70dec ecx: 00000000 edx: ce776eb4
esi: 00000000 edi: ceb70e0c ebp: cfe9fe34 esp: cfe9fe28
ds: 0018 es: 0018 ss: 0018
Process khubd (pid: 8, stackpage=cfe9f000)
Stack: d28ce46d ce776eb4 d2857c4c ceb70dc0 d28543fc ce77688c d28579c0 ceb70dec
d2857fc0 ce77688c c2c1fec0 cfe9feec d2854c89 d2857fc0 ce77688c d2857e48
ce776800 44408280 d28ce785 ce77688c d28cecdd 00000000 00000800 00000282
Call Trace: [<d28ce46d>] [<d2857c4c>] [<d28543fc>] [<d28579c0>] [<d2857fc0>]
[<d2854c89>] [<d2857fc0>] [<d2857e48>] [<d28ce785>] [<d28cecdd>] [<c01a6346>]
[<c0145825>] [<d28cef80>] [<d28cef60>] [<c02078af>] [<c0207b9e>] [<c0209c2e>]
[<c020b591>] [<c020b77d>] [<c020b915>] [<c01055b8>]
Code: 8b 80 cc 00 00 00 85 c0 74 17 8b 40 1c 85 c0 74 10 52 8b 40
$Id: linux.html,v 1.3 2005/03/30 00:44:03 hans Exp $