Commit Graph
58 Commits
Author SHA1 Message Date
Adrien Destugues ffd6c2f4bd input_server: use a better name for trackpoint devices
Now that the names are visible in Input preferences, let's try to have
better ones

Change-Id: Ia67e57c449e0ad292ce573b50a1e533d84c90d68
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2209
Reviewed-by: waddlesplash <[email protected]>
2020-02-06 07:29:13 +00:00
Michael Lotz fdad31e6a5 Small cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41945 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-06-05 19:09:04 +00:00
Rene Gollent 308e87fc11 The ioctl for reading mouse parameters was missing the structure size. This would cause it to randomly fail and exit the loop, resulting in the mouse going unresponsive.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41894 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-06-03 22:12:06 +00:00
Fredrik Holmqvist 14a12acc76 Only close device if it's a valid fd. CID 3466.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39982 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-28 15:55:57 +00:00
Axel Dörfler 2c49465329 * Removed the at_kbd_io and AT keyboard stuff; this is now done within the PS/2
driver, and that driver is using the raw_key_info structure as well.
* Renamed kb_mouse_driver.h to keyboard_mouse_driver.h.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36267 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-14 19:19:14 +00:00
Axel Dörfler fc548b41f3 * Removed the pretty useless "Multifinger scrolling" option - it's now always
the same as the two finger scrolling option (could be disabled, too, opinions
  welcome).
* Added a new settings to disable horizontal two finger scrolling, since it's
  not that easy to only scroll in one direction with this. Maybe a higher
  starting boundary would also be an option for this instead, Clemens what do
  you think?
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33468 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-06 14:30:57 +00:00
Axel Dörfler 3bf4730590 * Cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33451 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-06 08:56:18 +00:00
Philippe Houdoin 155b826065 Mouse watching thread name computation wasn't following the same
Upperize/Capitalize on the bus name than in keyboard one. 
"USB Keyboard" but "Usb Mouse".
No functional change. Really.

alphabranch it as you want.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32943 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-05 14:37:06 +00:00
Stephan Aßmus 5994d47ab4 Since there are problems with VMWare, ioctl()ing at fixed intervals seems like
the better idea after all. The snoozing won't add an additional delay, if the
polling was already slow. Have not tested in VMWare myself, as I don't have a
working installation.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29436 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-03-08 01:01:06 +00:00
Stephan Aßmus 7d1d70339a Limit the number for ioctl()s per second to about 125 for mouse transfers. This
fixes the high CPU usage when using USB mice. I experimented with transfers
scheduled at fixed intervals, and with using a fixed pause between transfers.
The fixed pauses, though much less sophisticated, give the smoothest drawing
in WonderBrush. ;-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29413 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-03-06 11:11:58 +00:00
Stephan Aßmus 6e094221e8 * Fixed the mouse movement when speed or acceleration where below default
values. The implementation needs to sum up fractional movement, not
  truncate to zero. Before this change, the mouse would be pretty much unusable
  at lower speeds/acceleration. Now it is guaranteed to move.
* No need to memset() before ioctl(), the driver does that anyways.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28669 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-11-16 22:21:34 +00:00
Rene Gollent e02ed691ca Patch by Adrian Panasiuk: fix broken TRACE macro definitions (ticket #3133). Thanks!
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28656 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-11-15 02:42:56 +00:00
Stephan Aßmus 167f43a24c Merged touchpad input_server device into mouse. This gets rid of a lot of
code duplication and will make maintaining it much easier.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28647 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-11-14 10:41:22 +00:00
Stephan Aßmus 9195fe6efe * Don't return B_OK from Start() if opening the device failed. Then Stop()
won't be called, the control thread will remove the device anyways.
* Turned off the debug output I left on accidentally in KeyboardInputDevice.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28642 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-11-13 22:14:40 +00:00
Stephan Aßmus cc44241143 Prepend the mouse name with "Extended " if the device path contains "intelli". This makes
sure that you can have an old style mouse without scroll wheel and one with attached at the
same time. For example, when I hot-plug my PS/2 mouse with wheel, the IBM trackpoint will
otherwise already use up the "PS/2 Mouse 1" name.

Unfortunately, hot-plugging the PS/2 mouse on my T60 docking station still does not work
quite right. The PS/2 driver detects everything correctly, the node monitoring works and I end
up with the correct device threads in the input_server. (The notebook is automatically removing
the touchpad and trackpoint devices in this event, which cannot be turned off in the BIOS.)
However, the mouse does not move. In the syslog, I see one message
"ps2: strange mouse data, x/y overflow, trying resync" after the the output from the add-on
manager in the input_server that it has added the new device. When I restart the input_server,
it works fine, even though the same devices are detected and polling threads are running.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28591 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-11-10 12:33:16 +00:00
Stephan Aßmus 5125eae25d * Cleanup and refactoring, made several Mouse-/Keyboard-/TouchpadDevice
functions private and moved them accordingly in the file.
* I forgot to initialize the BObjectList to own the items in
  TouchpadInputDevice.
* Changed the methods that read and apply settings in all three addons to be
  executed from the control threads only, which fixes race conditions.
* The success of opening a device is no longer checked in the Start() method
  of the *Devices. Instead, the control thread checks the device before it
  enters the polling loop and cleans up if there was an error. This fixes
  non-running devices in the input_server because the PS/2 driver publishes
  devices which is has not checked yet for other reasons. It is important,
  however, to open() the devices in the Start() hook and not the control
  thread, otherwise there are unwanted race conditions in case node monitoring
  events are received more than once for the same device. That's the case
  for some reason on one of my computers for the AT 0 keyboard.

TODO:
* Combine the Touchpad and Mouse device addon into one, it's almost the
  same code except the Touchpad knows more settings and one more control
  message.
* Refactor a common base class for Keyboard and Mouse device addon.
* Fix the mouse speed/acceleration. If the speed is lowered from the default
  in the preflet, the mouse becomes almost unusable. To fix this, the same
  trick should be used as I used in the touchpad kernel driver, which is to
  sum up previous mouse moved fractional offsets.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28590 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-11-10 11:16:02 +00:00
Stephan Aßmus 239fd643df * Added Clemens Zeidler to list of authors of the Touchpad add-on.
* Added myself to Mouse and Keyboard add-ons for my recent work on them.
* Small cleanup in KeyboardInputDevice.h-


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28420 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-11-01 11:09:28 +00:00
Stephan Aßmus e01a043190 Sorry for the confusing patch...
* Made KeyboardInputDevice more similar to MouseInputDevice, the object to
  track individual keyboards has become the class KeyboardDevice. Moved
  much functionality that used to be in KeyboardInputDevice into
  KeyboardDevice.
  Functionally, it should still be the same, but there are two important
  changes:
  - Each KeyboardDevice now has it's own Keymap. At first, it is not
    visible by the user, since all KeyboardDevices still adopt the keymap
    if the user reconfigures it. But it will make it easier to assign
    individual keymaps to each attached keyboard (and perhaps associate them
    with a vendor/product or some other means). The more immediate side effect
    is that there is no longer a confusion about the keyboard locks. If
    you press NumLock on your external keyboard, it will no longer enable
    NumLock on your notebooks internal keyboard.
  - KeyboardDevice now has a Stop() method, which it will call in it's
    destructor. This will make sure that the control thread is cleanly
    exited and does not end up invoking methods on a deleted object.
* Rewrote the tracing implementation in MouseInputDevice.cpp. At least it
  helped track me down the following problem:
* Both KeyboardDevice and MouseDevice now set fActive to "false" *before*
  closing the device. Since the control threads run at high priority, chances
  are high that rescheduling happens as soon as the device unblocks in
  ioctl() and returns an error. In that case, the control threads would
  check fActive and it would still be "true" and the whole idea of bailing
  out because we're already in Stop() would not work, causing a double free
  in the end.

All of this is nice and more correct, but input_server is still crashing
when restarting it via "input_server -q"... :-(


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28352 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-27 22:40:03 +00:00
Stephan Aßmus 9dd2d40e39 Fixed a race condition and resulting deadlock I introduced, which
resulted in the keyboard not working (at least on my Lenovo/IBM T60).
The device control thread could become aware of a dead device
at the time another thread (for example the add-on manager thread)
is already waiting for it. Then it tried to remove the device and
got stuck on locks that the other thread already holds (InputDeviceItem
list lock). Now the control threads check the "active" flag before
trying to remove the devices themselves, which, when set, is a sure
sign that the devices are already being removed and they don't need
to take care of it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28342 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-27 11:28:25 +00:00
Stephan Aßmus c5555ad3c0 * Ignore B_ENTRY_REMOVED node monitor messages.
* When the device watcher/control thread encounteres an error when
  read()ing or ioctl()ing the device, don't just quit the thread and
  leave a stale device add-on hanging there, but instead trigger
  _RemoveDevice() to exit this cleanly. This also takes care of calling
  _RemoveDevice() only from one thread. However, it adds a race condition
  should a mouse or keyboard be unplugged and plugged at the same time.
  I need to think about how to fix that cleanly, although the situation
  may be theoretical only... This fix seems to fix another problem with
  hot-plugging USB mice, before this change, the first mouse entry in
  /dev/input/mouse/usb/ was never gone and I got two entries after unplugging
  and replugging.
* When using BObjectList configured to own the entries - don't delete the
  entries! Also don't call RemoveItem() before still using the item. Took
  me all day to find this one, because the code looked so... correct. :-}
* In _AddDevice() call _RemoveDevice() just for the sake of it. It is really
  important that no device with the same name is published twice. The PS/2
  driver behaves strange in that it publishes device more than once, if
  I understand correctly, until it decides that there is no device.
* Only StartMonitoringDevice() /after/ having performed the initial device
  scan! Or else we may get ourselves confused. I don't know if this was
  an actual problem, but the code was like that before and it seems saner
  to me. Seeing there is no locking in the device add-on itself, we may
  already enter the code from the node monitor thread.

This should fix #2894.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28321 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-24 21:46:36 +00:00
Axel Dörfler b6a7b20419 * Removed the log file stuff; debug output is now using debug_printf() instead.
* Removed an inconsistency: both mouse and keyboad input device add-ons would
  scan /dev/input/keyboard respectively /dev/input/mouse when loaded, but then
  only monitor certain subdirectories from it. Now they monitor all.
* Made KeyboardInputDevice::InitCheck() do what the name says, ie. nothing
  else.
* Now uses BObjectList instead of BList, which also simplifies the code a bit.
* Make use of the new BPathMonitor messages: as those contain a path, they
  greatly simplify their handling.
* Cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28242 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-19 15:59:23 +00:00
Jérôme Duval 1ccc2f2d7b fix debug build
on Stop(), close the device, then wait for our service thread to quit


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27309 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-03 19:14:37 +00:00
Stephan Aßmus 45f11ce801 * at least with the BeOS input_server it is important that the last
B_MOUSE_MOVED message does not already contain the same buttons as a
  following B_MOUSE_DOWN message... fixes mouse clicks being ignored
  when you are moving the mouse at the same time when clicking
  (using Haiku's mouse input_server device on BeOS or ZETA)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23421 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-11 22:25:08 +00:00
Stephan Aßmus 216310852f * I think I needed this change to compile this for ZETA
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23119 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-12-12 21:55:40 +00:00
Stefano Ceccherini d246d9be88 Some old changes I forgot to commit... BInputServerDevice::InitCheck()
now checks if the fOwner allocation went fine (and returns B_NO_MEMORY 
in case it didn't). Since it can fail, inherited classes should call it 
as well (I modified MouseInputDevice's and KeyboardInputDevice's 
versions for now)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23106 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-12-10 21:20:25 +00:00
Jérôme Duval 218b5bbcc3 clean
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20983 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-02 19:04:44 +00:00
Axel Dörfler fafab8272d This should actually fix the bug a bit nicer (as it no longer prevents the mouse
from moving at all when moved slowly).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18599 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-24 09:37:16 +00:00
Stefano Ceccherini b6ba23596d if the acceleration factor was more than 0, the mouse could only be moved every other pixel. Fixed (thanks to Jonathan Thompson for his help finding this). Axel, wouldn't it make more sense to move the acceleration computation to the input server, so it doesn't have to be implemented by every input device ?
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18594 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-24 08:10:23 +00:00
Jérôme Duval 5f3c583050 moved definition of B_FIRST_REAL_TIME_PRIORITY to HaikuBuildCompatibility.h
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18467 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-09 09:53:10 +00:00
Axel Dörfler 74ef162141 Slowed down mouse acceleration quite a bit, but also made sure the minimal
acceleration factor is 1 which wasn't the case before.
The defaults now feel pretty good over here.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17884 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-06-20 17:07:25 +00:00
Axel Dörfler b7670df392 * The powers of two, revisited :-)
* Removed debug output.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17855 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-06-16 07:15:38 +00:00
Axel Dörfler 42b505fba3 * Implemented mouse acceleration - it's not as smooth as on BeOS (your mileage
may differ), but I think it's definitely an improvement. This fixes bug #402.
* Since there now is acceleration, I reduced the mouse speed by half.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17850 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-06-15 20:32:12 +00:00
Axel Dörfler 61604e4875 I wanted to work on mouse acceleration, but this had to come first:
* No longer calls _RecursiveScan() in InitCheck() (but in the constructor instead).
* Fixed a bug when a new device was started: the new thread got a stack allocated
  structure pointer, but there were no handshake to make sure it was still valid.
* Now checks all BMessage allocation, as well as adding fields for success, and
  doesn't enqueue partial messages.
* Big refactoring and cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17845 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-06-15 16:53:09 +00:00
Jérôme Duval 23b47e0b5e now remap mouse buttons if the mouse driver doesn't remap itself
Remapping doesn't work on Haiku yet: it seems the mouse map isn't well updated for some unknown reason 
update license 


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17843 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-06-14 21:24:14 +00:00
Marcus Overhagen d323bbb26f Cleanup:
- made 'active' variable volatile
Bugfixes:
- fixed deletion of mouse_device from fDevices list when the object is deleted.
- removed deadlock from RemoveDevice
- call UnregisterDevice from inside RemoveDevice
- terminate devicer watcher thread on read error
- skip "serial" directory always
- close file handle when initializing device watcher thread fails


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16927 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-29 22:44:58 +00:00
Jérôme Duval f0bac93530 completes fix for bug #155
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16469 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-02-19 17:06:49 +00:00
Stefano Ceccherini 4c0af4a82e Cleanup. Removed the weird SingletonMouseDevice
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15575 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-17 21:46:37 +00:00
Marcus Overhagen 106d748c45 Prevent input_server from hogging the CPU when input devices fail.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14476 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-23 00:28:14 +00:00
Stefano Ceccherini e7b980ae96 now we send B_MOUSE_MOVED before any other message. This should fix the problem described in the TODO item. At least, it does over here.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12917 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-06-01 07:54:54 +00:00
Stefano Ceccherini 6af8fc0973 Added a TODO item with the possible solution to a bug (which I can't verify at the moment), improved error checking.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12856 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-27 06:34:20 +00:00
Axel Dörfler 497d01f0b9 Some minor visual improvements: the keyboard input device now reports
"AT Keyboard" and "USB Keyboard", instead of "at|usb Keyboard".
Also, the mouse input device now reports a "PS/2 Mouse" instead of
a "ps2 Mouse".
Generally, both now capitalize the device name when reporting the name.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12465 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-04-25 14:17:57 +00:00
Jérôme Duval 5a23ac2600 added debug and fixed style
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9493 a95241bf-73f2-0310-859d-f6bbb57e9c96
2004-10-24 22:56:07 +00:00
Jérôme Duval 7dcdcad2c0 Fixed mouse device naming, it now iterates from 1 :)
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9405 a95241bf-73f2-0310-859d-f6bbb57e9c96
2004-10-18 22:35:11 +00:00
Jérôme Duval 2895720c82 init the button state
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9249 a95241bf-73f2-0310-859d-f6bbb57e9c96
2004-10-07 15:16:02 +00:00
Jérôme Duval c2fbfb71f0 clean up, now avoid locking when shutdowning
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9208 a95241bf-73f2-0310-859d-f6bbb57e9c96
2004-10-05 15:59:40 +00:00
Jérôme Duval 6be0f7ef24 reversed sign change, bad idea ...
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9149 a95241bf-73f2-0310-859d-f6bbb57e9c96
2004-10-01 15:58:13 +00:00
Jérôme Duval 6ed407d8fa added log
added a sign change


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9146 a95241bf-73f2-0310-859d-f6bbb57e9c96
2004-10-01 15:23:04 +00:00
Jérôme Duval 7d5d344bf1 Some mice have two wheels
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9088 a95241bf-73f2-0310-859d-f6bbb57e9c96
2004-09-28 11:20:45 +00:00
Jérôme Duval fc2045ee7e added wheel support, changed to kb_mouse_driver.h mouse_movement to avoid crashing when the driver writes back the io
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9063 a95241bf-73f2-0310-859d-f6bbb57e9c96
2004-09-26 21:59:33 +00:00
Stefano Ceccherini 33efb91915 Almost rewrote the mouse input add-on to handle multiple devices, added usb devices monitoring (not tested as USB doesn't work on my machine).
Now it generates the device name from the folder name (i.e. /dev/input/mouse/serial/0 ---> "serial mouse 1").


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8860 a95241bf-73f2-0310-859d-f6bbb57e9c96
2004-09-06 06:42:58 +00:00