- This key code is inherited from BeOS, where it was used for the power
key on Apple ADB keyboards
- Since then, we have introduced a new system for "multimedia" keys,
that uses HID key codes directly instead of defining our own mappings
- The PS2 driver was using the HID keycode, but the USB driver was still
using the BeOS defined one
- Japanese keyboards, which have a few more keys than US and European
ones, reused the same keycode for something else
Since the power key does not need to be mapped by the keymap, move it
out of the way by using the HID keycode (key codes larger than 0x7f
cannot be mapped to UTF8 symbols). Remove all mentions of the use of
0x6b as a keycode for the power key, but add a note in the documentation
that BeOS did this.
To avoid further confusions, complete the documentation of extra
keycodes, and remove some definitions from keyboard_mouse_driver.h that
should have been in InterfaceDefs.h.
While researching this, I also found that some keys specific to Korean
keyboards were declared in the wrong place, as mapped codes instead of
unmapped ones (checked that by looking at the HID driver, which emits
these raw keycodes, and confirming that the mapped ones are not used in
any keymaps. Also added a note about the mapping of the extra modifier
keys in Japanese keyboards, which I think may be a problem since these
map to invalid UTF-8 byte sequences, but this is what the existing
keymap does, so leaving it as is for now until we can determine if this
can be changed or if we have to keep it that way.
Change-Id: I6a198a0840cba7739bdc78e0c65e5d8fd23956c9
Reviewed-on: https://review.haiku-os.org/c/haiku/+/8047
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Adrien Destugues <pulkomandy@pulkomandy.tk>
Remove compatibility with legacy settings format.
The preferences app doesn't need to read and save the settings file:
devices are enumerated and their properties retrieved from the
input_server. When something changes, the input_server updates the data.
Change-Id: Id1ea6f2532a1c8a173e9ba9818dd911fd6f4aa10
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7877
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
"Newer" synaptics touchpad support a new mode where they can report more
information to the host. In this mode, there is a different packet
format for tracking extra data from the touchpad, including a wheel
encoder (mousewheel) if available, and multitouch finger tracking.
This mode is documented in the Synaptics touchpad interfacing guide
(Synaptics document 511-000275-01 Rev. B), but was not yet implemented
in our driver.
It should help with detecting multiple fingers, or finger position on
clickpads to determine right or left click.
This change implements the following items from the Synaptics
interfacing guide:
- Cleanup and clarify the code for features detection to properly report
clickpads
- Enable "extended W" mode if supported
- Process extended W values 0 (mouse wheels, reported in the
touchpad_event structure and could be used by input_server for
scrolling), 1 (secondary finger), and 2 (finger count)
- Fix handling of wValue, which is not always a finger width
- Add handling of vValuen which indicates the finger width when wValue
doesn't
Overall, this should provide the movement_maker with a better picture of
what's happening.
Also improve tracing to show received packets and the corresponding
WValue since that's an important value in identifying which type of
packet it is.
Unfortunately I currently don't have a laptop with synaptics touchpad to
test this with.
Change-Id: If334392f4eb2a146955f6c8c897f0ab64d79b8d9
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4425
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Adrien Destugues <pulkomandy@pulkomandy.tk>
Reviewed-by: nephele <nep@packageloss.eu>
This considerably overhauls touchpad event generation, simplifying and
cleaning it up considerably:
* Return the touchpad specifications through the MS_IS_TOUCHPAD ioctl.
* There is now a dedicated MS_READ_TOUCHPAD ioctl, as touchpads
can either return touchpad_movement structures or mouse_movement
ones depending on what mode they are operating in.
* Event repeating on timeouts is now handled in MovementMaker and
the input_server control thread, so MS_READ_TOUCHPAD takes
a timeout value. This means we can drop all the EventProducers.
* Use the real floating-point math functions in MovementMaker now
that we are running in userland.
* Drop unused structures, constants, headers, and other things
related to touchpad support.
Change-Id: I28cdb28e4100393a9338a8ebb865573cec13fc1e
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5455
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
Utilize user_memcpy and IS_USER_ADDRESS when necessary to prevent SMAP violations.
Also add a "wacom_device_header" struct to more easily share data between the wacom
kernel driver and input_server addon.
Should fix #14589
Change-Id: Ie2784020b21523f82fd450a2db2de60ccf9d6620
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2783
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
- Implement watch_input_devices in input_server, as it was TODO. For
now, only one watcher is allowed at a time.
- Use it in Input preferences to get notified about added and removed
devices and update the device list accordingly.
Change-Id: I52018af53738e68271d6d63b5bea31fd7cab1b3b
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2041
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
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
in the PS/2 driver for now. The basic idea is to allow everyone to open the
device, but only allow one key reader (as usual). However, once someone
registers itself as a debugger, the original reader is blocked, and the
debugger can read the key presses instead.
* Renamed ps2_keyboard.c to .cpp.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36256 a95241bf-73f2-0310-859d-f6bbb57e9c96
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
* Implemented Synaptics touchpad support in the PS2 bus_manager by
refactoring/splitting the structure some and adding touchpad device
handling.
* Implemented Touchpad input_server device add-on
* Created Touchpad preflet for configuring advances Synaptics touchpad
options like scroll region (both horizontal and vertical) as well
as other neat stuff
Thanks a lot, Clemens!
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28416 a95241bf-73f2-0310-859d-f6bbb57e9c96
Input server now saves keyboard typematic settings whenever they are modified,
instead of wating until it is shutdown (which never happens, either the
system will crash, or the input_server will stay active after a normal shut down)
Same problems might apply to mouse and keymap settings.
Input server shutdown handling should be reviewed.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16380 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Rewrote event handling: instead of writing every single device message to
the event port, they are just queued in a list, and the event loop is only
notified if necessary (ie. if a notification has been sent already, new
events are just queued up until the input_server found the time to process
them).
* This also fixed a big memory leak: every message processed by EnqueueDeviceMessage()
(IOW every key or mouse event) was leaked!
* no longer abuses gInputMethodListLocker to lock the method event queue
(it now uses the standard event queue lock).
* removed the completely superfluous, weird and decelerating event caching mechanism
* tried to find a better distribution of work between _SanitizeEvents(),
_MethodizeEvents(), and _DispatchEvents().
* HandleSetMousePosition() now only does what it's supposed to do (this currently
causes the mouse to jump at the start, though).
* now uses the "Message4" for message sending if available.
* fixed "kb_mouse_settings.h" to include all headers it needs.
* some more cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14966 a95241bf-73f2-0310-859d-f6bbb57e9c96
temporary handling code in the app_server.
* RootLayer no longer creates the input_server messaging port - this is now
the responsibility of the input_server.
* Moved AS_CREATE_[OFFSCREEN_]WINDOW from ServerApp::_MessageLooper() to
_DispatchMessage().
* The RootLayer thread is now started as soon as the input_server is there.
* removed or disabled any input_server stuff in the AppServer class.
* removed old message commmands to the app_server.
* Removed the R5_CURSOR_COMM and HAIKU_APPSERVER_COMM definitions: the
input_server is now automatically built correctly depending on the target.
* InputServer::EventLoop() plays now safe and checks for error conditions.
* InputServer::EnqueueDeviceMessage() seems to leak memory, added TODO about
this.
* InputServer event loop messaging uses ports for inner-app communication - why?
* The InputServer event loop thread is no longer killed on exit, it just quits
when its port is gone.
* Minor cleanup in input_server.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14949 a95241bf-73f2-0310-859d-f6bbb57e9c96