v4 - HEAD packet: Handling of finger id 0 only
Process finger id 0 keeping code separated handling preparing for
multifinger support.
Add extra checks with hardware limits.
Keep separated event and cookie position handling.
Improve tracing.
v4 - Improved pressure handling
Do not provide pressure when there are not fingers touching and
set a default pressure valud pressuming it will be taken into
account for tapping on the user space on packets where pressure
information is not provided by hardware.
v4 - Hardcode fingerWitdh to defaut value
Always provide default finger width value which is not a Synaptics
w flag to enable tapping getting rid of previous 0 value which is
the Synaptics flag for 2-fingers on that variable.
This gives the chance to decide from the user space when to issue
tapping or scrolling instead of being hardcoded on the kernel driver.
At the same time it makes MOTION packets that contain information of
2 fingers on the same packet to be taken into account for cursor
movement if applicable for instance when two-finger scroll is disabled.
v4 - Fix tracing text and comment
The value provided is not the number of fingers or fingers map
but a finger id number.
Move comment to the next line as that applies to next if condition
and not to the trace instruction.
v4 - MOTION packet: Fix getting finger 0 info
Sometimes the information on MOTION packet which contains
2 finger positions could come on descending order by id.
For insteance finger 1 on the first location of the packet
and finger 0 coming on the second one.
Get finger 0 values from first or second finger information
location in the packet if available instead of checking for
the first position only. Report to ignore packet otherwise.
Provide extra checks and improve tracing.
The set of changes of this commit fixes suttle cursor jumps
caused by missing finger 0 information when that is provided
on the second location of the MOTION packet instead of coming
from the first location. On that scenario, if a following HEAD
packet containing absulute positioning for finger 0 is comming
the issue was reproduced.
v4 - MOTION limit positions to boundaries
This fixes cursor jumps and cursor disapearing among other
misbehaviours when relative positions for the movement added
up to the expected previous absolute position of the finger
id on touchpad coordinates result on underflow or overflow.
v4 - Manipulate finger bitmap computation based on previous packets with TODO
There is no consensus on BSDs and Linux drivers, nor even clear
documented behaviour for this so this is implemented based on
experimentation.
FreeBSD considers STATUS packet comes first prividing the list of
fingers detected following a sequence of HEAD packets prividing
absolute positioning for fingers that hadn't prevously been tracked
and MOTION packets for relative positions for subsequent movement
packing 2 finger information per packet until interation with the
touch area stops so a final STATUS packet with no fingers detected
and filled out with zeroes for other fields signals the end of
movement. Motion packets with fingers ids not mapped form the HEAD
are discarted as invalid data.
On Linux there is not such restriction so HEAD or STATUS packets
are taking into account regardless fingers on STATUS information
matches with next packet.
So that, the implementation here uses the STATUS information as
informative for the following events. For instance if a status
packet signals that two-fingers are pressed and the next packet
is a HEAD packet, the latter only can provide information for
one finger only, then the number of fingers reported is 2 on the
head packet if the id of the finger overlaps with the ones from
the HEAD packet or 3 fingers in case the id is a new one.
Same logic applies to MOTION packets.
This makes the asumption that a started event can only retain or
increment the number of fingers until a movement action is finished
providing continuity for dragging actions and scrolling actions.
A TODO is added to investigate which should be the right behaviour
for this and check if differnt v4 hardware and firmware match.
v4 - Implement hardware palm detection as compile option disabled by default
Fixed hardware palm detection to be taken into account on a separate field instead of
being a hack messing with the number of fingers reported on STATUS packet and complete
the conditions propagating the palm detected value on HEAD and MOTION packets fixing
some previous non-accurated conditions.
This fixes incorrect reports for taps among others on both cases whether the compile
option is enabled or not.
Apart from that a TODO is added from completeness to encourage looking for software
palm detection instead that will benefit other devices as well.
Palm detection will be more accurate to do by software so is is disabled by default.
Some posible options are:
- Improvements on padblocker input filter.
- Improvements in user mode input_server device.
- General input_server modifications.
- Other inprovements on this driver.
v4 - Initialise event structure so that new or unasigend fields will be zeroed
This prevents potential misbehavious by dealing with incorrect data in case
the event structure is modified in the future with new fields after recompiling
this driver with unchanged code.
At least those field will be zeroed with usually mean that they are at least
initialised.
Change-Id: Iccfdd356ff2834e5dea64481259fd890dd95406b
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10013
Reviewed-by: Adrien Destugues <[email protected]>
v4 - Implement buttons
v4 - STATUS. Hardcode position to special (0,0) coordinates
This fixes mouse disapearing on first iteration and fixes scrolling a bit.
Provide tracing for coordinates provided on the cookie as STATUS packet
does not contain them.
Commented is assinged cookie position to (0,0) as this is used to restrict
MOTION positions in a visible way as workaround for its correct
implementation. This will be cleaned up later.
v4 - Add presure handling for HEAD and MOTION packets
Initial change to enable tapping on v4 devices.
v4 - Use fingers bitmap from STATUS on all packets
Provide fingers event with finger bitmap value from last STATUS packet
as neither HEAD nor MOTION packet provide that detailed information.
This change is essential to implement clickfinger behaviour, better
tapping conditions, two-finger scrolling, etc.
Change-Id: I7908bac305431d436f4bf6273a700036f4e483e3
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10012
Reviewed-by: Adrien Destugues <[email protected]>
This fixes many unstabilities and unexpected behaviours, as returning B_ERROR
triggers a device restart and returning B_OK with incomplete or not initialised
data makes movement makers and mouse input server device add-on code to process
that as if it were completely correct.
That would trigger many phantom clicks, cursor jumping, coursor desapearing and other
collection of misbehaviours.
Change-Id: I05c40cb4f17e28a6b93f6e17984d6a1171fdd00a
Reviewed-on: https://review.haiku-os.org/c/haiku/+/9937
Reviewed-by: Adrien Destugues <[email protected]>
This includes common legend for all packet versions and packet
descriptions for STATUS, HEAD and MOTION v4 packet types
Change-Id: Ibbb2296f8df7b63ac7beee000b208d7b2744084d
Reviewed-on: https://review.haiku-os.org/c/haiku/+/9933
Reviewed-by: waddlesplash <[email protected]>
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
- Add references for driver implementation.
References from FreeBSD 14.3, OpenBSD 7.8, Linux 6.17 sources
and Linux 4.16 documentation.
- Add pragma marks for easy navigation
- Add missing define to fetch firware info from hardware
- Reduce size of version field
- Update probe function to be able to enable supported devices
- Update open function to add missing v4 devices
- Fix enable_absolute_mode and use same snooze time as BSDs and Linux drivers
- Fix get_resolution_v4 and set sane defaults instead of failing with error
- Update license for ps2_elantech.{h,cpp}
Change-Id: I76fba3be04d7b940079fc78c3b7fe7d8bf8dfa06
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10011
Reviewed-by: Adrien Destugues <[email protected]>
input touchpad settings header:
- click finger behaviour (enabled by default)
- Emulation of different button clicks depending on the
number of fingers that are pressed at the same time on
any location of the touchable surface of the device.
- Clicking with 1 finger triggers a primary button click,
usually left button click.
- Clicking with 2 fingers triggers a secondary button click,
usually right button click.
- Clicking with 3 fingers triggers a terciary button click,
usually middle button click.
This feature is useful for clickpads that are input devices
lacking a separated set of buttons from the touch area.
input preflet:
- Implement clickfinger
input mouse:
- Handle and provide new settings for clickfinger behaviour
input mouse mm:
- Implement clickfinger in the user space
- Enables button emulation based on the number of fingers pressing
at the same time the touch surface.
Userful feature for clickpads.
Change-Id: Ibaa06df3887793158093cc08f6281fc080e85c3b
Reviewed-on: https://review.haiku-os.org/c/haiku/+/9923
Reviewed-by: Adrien Destugues <[email protected]>
input touchpad settings header:
- software button areas (enabled by default)
- Emulation of buttons clicks based on which small area
assinged by each button is pressed. For instance, a
software button area on the bottom of the touchpad
could be divided on 3 subareas one for each button.
This new feature is useful for clickpads that are input devices
lacking a separated set of buttons from the touch area. However,
we may prefer to make the GUI better suppot "single button" devices.
Disabled by default as we don't currently have a way to adjust the
default settings according to the presence of physical buttons,
and having this disabled yields an OK experience on all machines.
Having the soft buttons in addition to physical buttons would just
be too strange.
input preflet:
- Implement software button areas
input mouse:
- Handle and provide new settings for software button areas
input mouse mm:
- Implement software button areas in the user space
- At the moment only a bottom located software button area
simulating 3 different buttons is enabled.
There is a working implementation 2 buttons only but not
enabled in the code base.
TODO for other type of software button areas is there.
Change-Id: I255cb1a7eac0d18064c63a2a0d4b158be7370a17
Reviewed-on: https://review.haiku-os.org/c/haiku/+/9922
Reviewed-by: Adrien Destugues <[email protected]>
input headers:
- Add edge motion constants
input touchpad settings header:
- Edge motion (enabled by default as on tap drag)
- Help moving the cursor and the primary finger transitions
from one place of the touchpad to its edge and then stays
on the edge for some time.
The default matches the current hardcoded behaviour.
input preflet:
- Implement edge motion options
input mouse:
- Handle and provide new setting for edge motion
input mouse mm:
- Enable edge motion on tap drag based on settings instead of being hardcoded
- Some users who didn't have a chance to read the users' documentation could
wrognly believe that this feature is a bug by not understanting why
unexpected cursor movement happen at constant speed on some scenarios
sometimes not even realising that it happens when the finger is approaching
to the edges of the touch area by mistake.
At least, even if this is the current default setting at the moment, this
enables the chance to change it instead of being a obscure hardcoded feature.
input mouse mm:
- Enhance edge motion with extra behaviours
- Support for other edge motion aids apart from "on tap drag only".
Change-Id: Ice50139f9f8001494f7e2a46bb1521a1e525cade
Reviewed-on: https://review.haiku-os.org/c/haiku/+/9921
Reviewed-by: Adrien Destugues <[email protected]>
input touchpad settings header:
- Implement two-fingers natural scrolling (enabled by default)
- Sets scrolling with 2 fingers on the touchpad making
the content to move in the same direction as the finger.
input preflet:
- Implement 2 fingers natural scrolling
input mouse:
- Handle and provide new settings for 2 finger natural scrolling
input mouse mm:
- Implement two-finger natural scrolling feature
- Implement natural scrolling for two-finger scrolling completely
separated from reverse scrolling for egde scrolling only.
Change-Id: Idf673ec34a424b20183ed90761f297340d521526
Reviewed-on: https://review.haiku-os.org/c/haiku/+/9919
Reviewed-by: Adrien Destugues <[email protected]>
Tested-by: Commit checker robot <[email protected]>
* For a received neighbor solicitation, the target address would be
our local address, so we need to use the IPv6 source address instead.
Change-Id: I93af830c04354e069c3c43f05e28a3cf3cd5dd9d
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10178
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
* Previously, the filtering logic didn't work at all.
* netstat can now also display IPv6 addresses (mainly by using
getnameinfo instead of using IPv4 specific functions).
* Removed dead code.
Change-Id: Iaafe3d57253a64ef12ed79d7968e8fd1dfcb3960
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10180
Reviewed-by: Adrien Destugues <[email protected]>
Tested-by: Commit checker robot <[email protected]>
TFilePanel inherits from Tracker's ContainerWindow, which calls Run() in
its constructor.
This results in the constructor of the subclasses being run while the
window message loop is already running and processing messages.
Specifically, views are getting resized and moved both by the
constructor (in RestoreState) and by the resizing code (_ResizeBy
recursively relayouting all children).
This results in the cancel button being left at the wrong place at the
end of the constructor (or shortly thereafter). While that on its own
has no consequences because the layout is fixed when the window is
finally shown, the position of the cancel button just after the
constructor is relied on by applications which add custom widgets to the
window (Wonderbrush, Icon-O-Matic, Pe for example).
Make sure to keep the window locked while setting it up, so the message
loop does not interfere.
Fixes#19499.
Change-Id: I83f8fcfc56434e979b20043d8d652074f2f3cf5d
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10176
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
- Check superblock magic. Overwriting the first sectors of partitions
using other filesystems than BFS is likely to cause trouble.
- Check presence of bootcode in the same version, as well as the correct
partition offset.
- Tell the user when the partition was already bootable and nothing was
done, hopefully this will finally stop people from thinking that
makebootable is of any use (it isn't, Installer already does the
work).
Change-Id: I792fb29166773e224266d35a4976ac90662e5cb6
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10174
Reviewed-by: waddlesplash <[email protected]>
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
Same thing is done in Installer to avoid confusion in case workspace
switching shortcuts are used accidentally.
Fixes#19278
Change-Id: I20af1a235f47f012a120c6a94511bfe94a2cdfbd
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10145
Reviewed-by: Adrien Destugues <[email protected]>
Tested-by: Commit checker robot <[email protected]>
Remove SetStylable() call making it false.
Update low and high colors in _UpdateTextViewColors().
Update colors when B_COLORS_UPDATED message is received.
Change-Id: Iad3e3d9f46b922c7cf68e20cd7788d0d0efcb0b5
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10010
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: John Scipione <[email protected]>
Always MakeSelectable(), MakeEditable() in SetEnabled().
Get rid of fEditable and fWindowActive. Get rid of IsEditable(),
SetEditable(), IsSelectable and SetSelectable().
Change-Id: Iab07097b2692ef6d9d7ed41b0fab45a2df99e261
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10009
Reviewed-by: John Scipione <[email protected]>
Tested-by: Commit checker robot <[email protected]>
Timestamps in BFS are stored with a 16 bit subsecond precision. However,
a lot of files have this field set to 0 as they are created with APIs
that do not set a subsecond precsion value.
The previous format (introduced in hrev31057) did not track wether the
stored data was a 12 bit sequential number or a 12 bit subsecond
timestamp + 4 bit sequential number.
As a result, setting a timestamp with nsec=0 would read back a different
value (exposing the sequential counter to userspace).
Older versions of Haiku, and BeOS according to the Practical Filesystem
Design book, did not store a timestamp there. Haiku used to store the
volume UID (I don't understand why), and BeOS stored a sequence number
because the POSIX APIs at the time didn't allow to get and set the time
with nanosecond precision.
The Practical Filesystem Design already mentions that storing a
subsecond precision value here would have been better than their
workaround.
The new format relies on the fact that nanoseconds can only be in the
range from 0 to 999999999. After the conversion to a 16 bit value using
simple shifts, this result in a maximum possible value of 0xEE60. The
new format exploits that, and uses the range 0xF000 to 0xFFFF to
represent 0 timestamps with a 12 bit sequence number.
This allows the sequence number to be hidden from userspace entirely.
Fixes#19213.
Change-Id: Id80289a4331ecfbf2f1a35520b58a99227d1f1d6
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10146
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
The manpages indicate get2 will return NULL for anything larger
than MJUMPAGESIZE.
(The soon-to-be-merged realtekwifi from FreeBSD 15 uses m_get3 directly.)
This function always declared that it returned status_t, but
then in practice it didn't. In d225106a20
that was fixed, so these workarounds can be removed now.
Fixes#19862.
Gets rid of the annoying:
"cc1: warning: command-line option '-Wno-ctor-dtor-privacy'
is valid for C++/ObjC++ but not for C".
Change-Id: Ic72506277af56365cfe52513e1118584bf338ac9
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10163
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
- Check superblock magic. Overwriting the first sector of partitions
using other filesystems is likely to cause trouble
- Tell the user when the partition was already bootable and nothing was
done, hopefully this will finally stop people from thinking that
makebootable is of any use (it isn't, Installer already does the
work).
Change-Id: I9352f1a3853626d093c04f8283771189395d023b
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10171
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
* Assign correct MIME type for XHTML
* Fix XML encoding of '&' as '&'
* Use 'https' instead of 'http' where possible
Change-Id: I9d0628bd560b253bf9df10ed7e28eb77cf9161e2
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10168
Reviewed-by: waddlesplash <[email protected]>
Tested-by: Commit checker robot <[email protected]>
The rule to add an executable or shared library to the Haiku image
automatically also includes the corresponding locale catalogs and MIME
database entries.
The locale catalogs for .a files linked in the executable are also
included, since .a files are not themselves added to the same package.
This makes sure the executable has all the catalogs it needs.
The jam rule was written assuming that NEEDLIBS would only contain .a
files, but that is not the case when compiling Haiku. Libroot for
example is also in NEEDLIBS (this makes sure it is linked by absolute
file path, whereas LINKLIBS would instead use -lroot and may link the
host system one).
Filter out .so files from the NEEDLIBS list when determining which
catalogs to include.
Fixes#19721.
Change-Id: I04604bd37c656f987dd17be8db6edffe88cee651
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10144
Reviewed-by: Adrien Destugues <[email protected]>
Tested-by: Commit checker robot <[email protected]>
* Unlock the volume once the directories are locked in dosfs_rename.
At that point locking the volume has served its purpose.
* If the volume lock is retained throughout dosfs_rename, a double
lock can occur in dosfs_read_vnode, in the event that one of the
involved file nodes has not already been constructed prior to the
rename.
* Fixes#19614.
Change-Id: Ib679a6f3ba3dc8f87fb0c6263eb82d2d06cb6064
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10166
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
* This makes the BFS tools implementation independent from the actual
values of these macros to ease porting.
Change-Id: Id7aa8d38c2574875999362a147701f00ec8fab26
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10147
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
Import fix from NetBSD PR lib/58888
This could have leaked data to the resolver or resulted in the resolver
returning incorrect results.
Change-Id: Idedb9d12c8ad7a88f0e5e05e735efdd8c914cbde
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10149
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
* Use LITTLE_ENDIAN instead of __LITTLE_ENDIAN (LITTLE_ENDIAN is what
POSIX now specifies and everyone seems to define - NetBSD also
defines _LITTLE_ENDIAN, but not __LITTLE_ENDIAN)
* file descriptors greater than 2 must be explicitly passed to a child
on NetBSD. POSIX leaves that unspecified, see
https://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#exec
* system library functions get declared with visibility "default" on
NetBSD, so a "hidden" visibility attribute is ignored on a
redeclaration. Work around by putting the functions in a namespace -
as they are extern "C", they still end up in the object file without
the namespace qualifier.
* remove the cast on the NULL pointer on the funopen call - it's not
needed and the types are different between FreeBSD (fpos_t) and
NetBSD/OpenBSD (off_t); also trying to change that upstream
https://github.com/openSUSE/libsolv/pull/603
Change-Id: I6ab7f3c74d18960d7589b403a1c219cdac85a453
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10133
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>