This App is No Longer Maintained. Visit the Replacement at StrokesPlus.net

StrokesPlus Forum
                       
StrokesPlus Forum
Home | Profile | Active Topics
Members | Search | FAQ
Username:
Password:
Save Password
Forgot your Password?

 All Forums
 Feature Updates
 Completed Requests
 [COMPLETE] Synaptics TouchPad Support
 Forum Locked
 Printer Friendly
Author Previous Topic Topic Next Topic  

mitwhu

6 Posts

Posted - 02/16/2013 :  16:38:37  Show Profile
I have a HP laptop. The touchpad for it is from Synaptics. With Synaptics driver, it could realize simple gesture functions, like scrolling...
I tried S+, it is amazing and powerful, better and more stable then strokeit. However, each time when I use it, I have to use external mouse for right button stroking.
Is there any way for touchpad to realize mouse gestures using S+? Like two fingers clicking = mouse right button clicking
thanks

Rob

USA
2615 Posts

Posted - 02/16/2013 :  16:43:57  Show Profile  Visit Rob's Homepage
Unfortunately not at this time. You can use a key like Control or Alt as your stroke button as I'm sure you know, but S+ doesn't support any type of multi-touch functionality.

It's something I've started looking into, but it would be a while before anything like that is added; likely when S+ is rewritten since multi-touch would change everything about how S+ works. I'd like to create a separate touch version to start with as touch interfaces certainly are only going to become more prevalent, but I haven't really had the time to start digging into it yet.
Go to Top of Page

mitwhu

6 Posts

Posted - 02/16/2013 :  16:55:03  Show Profile
Looking forward to the touchpad version release.I believe it would be a Great application.
Thanks.
Go to Top of Page

Rob

USA
2615 Posts

Posted - 02/24/2013 :  16:29:53  Show Profile  Visit Rob's Homepage
I stand corrected. Synaptics does have an SDK for accessing the TouchPad via COM. Their SDK samples don't include examples for multiple fingers, but in looking around on the net, I have found a couple of examples which demonstrate capturing multiple finger touches through the Synaptics driver.

I'm not making any promises, but I'm certainly going to see if it's something I can manage to get working
Go to Top of Page

Rob

USA
2615 Posts

Posted - 02/24/2013 :  18:35:38  Show Profile  Visit Rob's Homepage
Indulge me. If S+ were to interface with a Synaptics TouchPad, how would you see using it? 2, 3 or 4 fingers (optional) would tell S+ to start capturing a gesture?

On my system, the default setup of the Synaptics software has 2 and 3 finger gestures already assigned (2 = scroll up/down, 3 = prev/next); if S+ were to use a 2 finger gesture to capture a S+ gesture, the 2-finger Synaptics gesture would either also happen or (if calls to the Synaptic acquire function work as I think they do) would only work in S+, leaving the 2-finger Synaptic gesture not able to work. Although, I could see leveraging the Cancel Delay in S+, so if you held 2 fingers down, S+ would capture, but if you let the Cancel Delay pass, control would be returned to the OS/Synaptic software and the scroll gesture should work fine.

I'm asking these questions because this would be entirely new functionality to S+ and mouse gesture programs (that I'm aware of) in general, so before I embark on trying anything like this, I want to get people's opinions and objections as to how this would function, especially in regards to keeping pretty much everything about the current functionality of S+ unchanged. I don't want to start coding anything, only to find out down the road that I should have considered something and now the whole thing is causing problems, etc.

In regards to how I would see this happening in S+ is that you would be able to select a stroke button (as it is now), and if a Synaptics TouchPad is present, be able to select 2, 3, or 4 fingers as the S+ TouchPad capture sequence ("stroke button").

So you could have a mouse plugged in and use the right button, and without changing any settings in S+, also be able to use a TouchPad 2,3, or 4 finger gesture to draw an S+ gesture. Everything about how S+ works would remain identical, the TouchPad event monitor would be a separate function in the code and would simply turn on the same flags that the mouse (or keyboard) hook does when the stroke button is pressed.

When either the stroke button is released, or the fingers are lifted from the TouchPad, the action would fire if a gesture is matched. Modifiers would behave the same, although mouse button modifiers would be a little cumbersome if you already have 3 fingers on the touch pad. I may be able to use extra fingers as modifiers, but I'm trying to keep it simple; however, I welcome all ideas as the last thing I want to do is design the code in a way which limits future enhancements.

For example, some people would like to have more than 1 gesture in S+ fire the same action. I'd never done nor thought of this when I was building S+, so now it's pretty much impossible to simply add that functionality (even though it would seem so easy) because it would require changing virtually everything.

So, if I'm going to look into TouchPad functionality, I want to make sure I hear what everyone thinks and would like to see. Granted, I may not incorporate everyone's requests, but I can at least be aware of all considerations so I don't code myself into a corner regarding TouchPad functionality in general. Note that I see in the code that the Synaptic driver can recognize a stylus as well; I don't have that hardware, so I wouldn't be able to add that at the time; if all went well with the TouchPad addition to S+, I would look into acquiring the hardware necessary to also work with a stylus.

I already see how this can be added to S+, and without too much complication (other than getting all the Synaptic code/references/etc. actually functioning in the S+ code). I've found sample code that provides the necessary proof of concept and understand how to detect the number of fingers present. Note that the TouchPad only reports extra finger count/state, not their X/Y/Z, so the first finger that touches is what drives the recognition; so there wouldn't be any kind of multiple-finger-gestures-per-finger type of functionality; the current S+ code wouldn't be able to support that anyway.

I'd like to hear what anyone has to say about this. Since I just got a laptop, this is of particular interest to me now
Go to Top of Page

Rob

USA
2615 Posts

Posted - 02/25/2013 :  00:59:42  Show Profile  Visit Rob's Homepage
Good news! I've successfully integrated the Synaptics code into S+!

Of course, there is still much to do as it's very raw/crude/lacking of error handling...but I am able to successfully draw gestures be using 2 fingers down on the TouchPad. Although, since it goes through COM (the only way to interface the Synaptics driver), it's not as responsive as the mouse.

I should clarify, there's a slight lag when you first start a drawing. Honestly, I would imagine this is due to the Synaptics driver having a built in delay to prevent accidental multi-finger touches. The delay isn't very long (on my machine, anyway), but it is noticable. Once the initial delay is over, drawing is very smooth, just like with the mouse. But if you try to draw a complex gesture very quickly, you can lose the first part of the gesture. Basically, until the initial delay has passed, S+ isn't made aware of the TouchPad movements, so you have to touch fingers down and pause for a split second, then continue drawing. For simple gestures (straight lines) it doesn't really matter much at all since losing the first X pixels doesn't affect the recognition, but complex gestures will be affected.

Edit: Actually, you don't have to pause, just draw slowly to start, then the speed picks up as normal.

Another thing I've noticed is that while S+ can "acquire" the TouchPad (meaning, lock it so only S+ receives the input), S+ cannot do this until the fingers have been pressed and the call can be made (otherwise S+ would have to handle ALL TouchPad input and forward the events, etc.). However, due to the nature of the Synaptics driver, another program can still receive the initial finger-down event since the TouchPad event packets are broadcast simultaneously. So, on my machine, the Synaptics software uses 2-finger up/down as a scroll, but I've set S+ to capture 2-finger gestures. So 50% of the time, S+ gets the message first and captures future TouchPad events (so while drawing a gesture, the window below won't be scrolled by the Synaptics software), but the other 50%, S+ is drawing the gesture and Synaptics is scrolling the window at the same time. It's difficult to say if there will be a way around that.

Of course, I'm still in the initial phases of this and may find ways to improve or workaround these nuances.

Go to Top of Page

mitwhu

6 Posts

Posted - 02/25/2013 :  12:53:51  Show Profile
Exciting.
Actually on my laptop, I disabled Synaptics 2-finger up/down scroll and only enabled the 'one finger linear scrolling from the right edge'. It wont conflict with 2-finger as stroke button in S+. If S+ could take over all the Synaptics work, I believe people would consider disabling conflictive functions in Synaptics or even without it.
Anyway, I would like to try the beta version=)
Go to Top of Page

Rob

USA
2615 Posts

Posted - 02/25/2013 :  13:10:36  Show Profile  Visit Rob's Homepage
You're in luck! I was just putting together some downloads to test out. I'm certain there will be bugs, but mostly relating to differing Synaptics hardware/software versions, etc.

I've tried to make it pretty resilient, but I know there will be compatibility issues, especially with older TouchPads which don't support multiple fingers, etc. I've only included 2 or 3 finger gestures as options since it seems that many TouchPads from several years back seem will support that while only newer support more fingers.

Again, use this at your own risk, but it's working fine for me so far (with my limited testing).

(Edit: removed links since there's a Beta download below)
Go to Top of Page

Rob

USA
2615 Posts

Posted - 02/25/2013 :  13:18:31  Show Profile  Visit Rob's Homepage
Note that the canceling (letting it time out) of a TouchPad gesture doesn't behave like canceling a mouse button gesture. Since a TouchPad multiple finger gesture isn't considered anything by default by Windows (like a right mouse button equivalent), it doesn't make sense that letting the gesture time out should do anything other than stop capturing.
Go to Top of Page

Rob

USA
2615 Posts

Posted - 02/25/2013 :  13:59:52  Show Profile  Visit Rob's Homepage
I've added the option to disable the Synaptics monitoring for people who have a TouchPad, but don't want S+ hooking into the events (to save resources, or to prevent interferece with other Synaptics-aware apps)

Also added a Movement Sensitivity field (percentage) in Preferences. This controls how slow or fast the mouse cursor moves while S+ is capturing a TouchPad gesture.

Those aren't in the downloads above, just mentioning for those watching the thread.
Go to Top of Page

Rob

USA
2615 Posts

Posted - 02/25/2013 :  14:09:58  Show Profile  Visit Rob's Homepage
I've noticed that if you start moving with 1 finger down, then touch the second finger, it doesn't have the drawing lag. I'm guessing this is because the driver sees there's motion, so it doesn't pause to see if you're going to do a 2-finger tap. Just a guess, but still it's much quicker starting with a single finger and touching the second after you've started moving a little.

Note that for ignored windows, the mouse won't move if you try to draw a gesture (as it does with the mouse). This is because a 2-finger gesture by default isn't recognized as a mouse movement. When S+ captures the TouchPad, it forces mouse movements; but if the window is ignored, S+ will not capture and thus the cursor will not move (unless there's some other software which is allowing that to happen)
Go to Top of Page

Rob

USA
2615 Posts

Posted - 03/01/2013 :  16:01:00  Show Profile  Visit Rob's Homepage
Has anyone used this functionality at all?

Anything to report, good or bad?
Go to Top of Page

Rob

USA
2615 Posts

Posted - 03/01/2013 :  21:17:29  Show Profile  Visit Rob's Homepage
By the way, I have fixed the issue with S+ not being ready for capture on TouchPad gesture timeout, had to right-click once to reset S+. Not updated in downloads, but I have it fixed in my local code.
Go to Top of Page

mitwhu

6 Posts

Posted - 03/01/2013 :  23:53:29  Show Profile
Sorry for my late report, I just tried v3.
Generally, just as you mentioned, it has drawing lag, not as fluently as right button, sometimes even cannot draw gestures (I tried 1 finger down first, then touch the second finger way, but problem is still there). Maybe it is due to the old Synaptics driver.
my laptop OS: windows xp sp3
Synaptics driver: 15.0.9.18 (what is your version?)

Anyway, thank you so much.

Go to Top of Page

Rob

USA
2615 Posts

Posted - 03/02/2013 :  10:13:26  Show Profile  Visit Rob's Homepage
I'm running v16.2.15 13Sep12.

I have found and fixed a couple other little issues which may have affected TouchPad stuff. I'll upload them later today.

If you notice it's not drawing at all, try disabling and re-enabling S+ and see if that corrects it. One of the issues I fixed was when a TouchPad gesture timed out, S+ wasn't left in a proper state, until you right-clicked the mouse (or disabled/re-enabled) which reset certain internal variables.

I've also fixed an issue with holding the ignore key and using the TouchPad, wasn't working as it should.

Both of those changes will be updated later.
Go to Top of Page

Loamaro

Russia
14 Posts

Posted - 03/03/2013 :  00:18:22  Show Profile
Unfortunately, on my laptop (HP dv6-6051er) does not work ... either with two fingers or with three. I tried to disable scrolling in the driver and restarted StrokesPlus - same thing. More precisely, in general it is impossible to draw a gesture. I'm running Synaptics 16.2.21 25Oct12
Go to Top of Page

Rob

USA
2615 Posts

Posted - 03/03/2013 :  00:55:16  Show Profile  Visit Rob's Homepage
Hmm, I have a HP dv7. I'll have to make a debug version for you to run, to see if we can figure out what's going for you. Are you running 64-bit or 32-bit? Signed or unsigned?
Go to Top of Page

Loamaro

Russia
14 Posts

Posted - 03/03/2013 :  02:02:40  Show Profile
I'm running S+ signed 64-bit
Go to Top of Page

Loamaro

Russia
14 Posts

Posted - 03/03/2013 :  02:28:34  Show Profile
By the way, sometimes the gesture works, but casually and subtly ... Probably requires a specific version of the drivers? .. In my version two-finger tap triggers the context menu, that is working as right mouse clicks
Go to Top of Page

Rob

USA
2615 Posts

Posted - 03/03/2013 :  02:47:07  Show Profile  Visit Rob's Homepage
The drivers shouldn't make a difference. S+ is interfacing the Synaptics software via COM, so the interfaces and functionality shouldn't be affected. I have a 3-year old laptop with a TouchPad and very old drivers that S+ can interface (though, that TouchPad doesn't support multi-fingers, so S+ can't work there).

For the sake of testing, try disabling all Synaptics gestures and see how S+ behaves. I've linked to a debug version of S+ which will output a lot of stuff to the debugger. You can use DebugView to see the messages. There will likely be a lot of messages, but you can save and email to me: rob{}strokesplus.com. Just clear the log, attempt to do one simple gesture on the TouchPad (fingers down, draw a line, fingers up), then save the file and send to me.

DebugView: http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx

Beta 4 Debug (signed, 64-bit): http://www.strokesplus.com/files/StrokesPlus_2.6.4_x64_Signed_Beta4_Debug.zip

Go to Top of Page

Rob

USA
2615 Posts

Posted - 03/03/2013 :  02:59:34  Show Profile  Visit Rob's Homepage
Also, is there a difference when you draw slowly?

Note: the debug version should not be used for normal use as it will be much slower.
Go to Top of Page

Loamaro

Russia
14 Posts

Posted - 03/03/2013 :  03:28:55  Show Profile
Yes. When I drawing slowly, some gesture appears, but not more than
Go to Top of Page

Loamaro

Russia
14 Posts

Posted - 03/03/2013 :  03:48:28  Show Profile
I sent you debug log
Go to Top of Page

Rob

USA
2615 Posts

Posted - 03/03/2013 :  15:00:37  Show Profile  Visit Rob's Homepage
Thanks! Still looking through the logs, but I have found one bug for sure. If you touch the pad with the right number of fingers (2 or 3) but then add or remove a finger, S+ was still treating some of the TouchPad events as though you were trying to draw a gesture. Not sure sure if it was harming anything, but it shouldn't behave that way.

Also, I see in the beginning of your logs that you started drawing a gesture, but the Cancel Timer fired; this also happens towards the end of your log. What is your Cancel Delay (in Preferences) set to? You may want to try increasing that value to 2000 for testing purposes and see if it has any effect; as it seems both of your valid gesture attempts timed out.

I have several changes to the core TouchPad logic, will post an updated Beta 5 soon.
Go to Top of Page

Loamaro

Russia
14 Posts

Posted - 03/03/2013 :  22:59:55  Show Profile
Unfortunately, not much change. Cancel Delay (in Preferences) is set to 350 ms. If I do the 2000-3500 ms, the situation is a little better, but it is impossible to enjoy. One more thing, when I draw gesture, the line length is not more than 1 cm, further fails to draw the no more complex gestures. In addition, it is necessary to draw a gesture very slow, otherwise it will not appear.
Go to Top of Page

mitwhu

6 Posts

Posted - 03/03/2013 :  23:09:23  Show Profile
The same situation as Loamaro.
Go to Top of Page

Rob

USA
2615 Posts

Posted - 03/03/2013 :  23:37:00  Show Profile  Visit Rob's Homepage
Very odd. I will keep trying things!
Go to Top of Page

Rob

USA
2615 Posts

Posted - 03/03/2013 :  23:51:32  Show Profile  Visit Rob's Homepage
I'll work on putting together a debug version that writes directly to a log file so I can see what's happening for you two.

It's very frustrating that it works fine for me. The other issue is that the SDK from Synaptics, including the help and sample code is from 2004; that's the latest they published.

It seems like it's not very streamlined, more like legacy support. For example, my TouchPad supports multiple-finger gestures, but the COM interface from 2004 doesn't report on more than one finger's movement. Meaning, the primary (first) finger's position is reported, but I can only tell if other fingers are present, but not their coordinates. Not that it's important for S+, but that fact means there's a difference in their driver and what is exposed to COM. Ideally, I'd like to interface the driver directly, not through COM, which is very inefficient and possibly the cause of the problem. My laptop is brand new, Intel i7 8 core, 16GB DDR3 RAM, etc., perhaps the speed of my system overcomes the inefficiency of interfacing COM.

Just random guesses, although I did notice something odd when I was testing earlier regarding FingerState reported from Synaptics; it may be what's causing your issues. I intended to look into it, but it would mean rewriting the Synaptics function so I wanted to try making other adjustments first. But if you are both experiencing a similar problem, I'll just recode the function from scratch, taking a completely different approach.
Go to Top of Page

Rob

USA
2615 Posts

Posted - 03/04/2013 :  00:58:55  Show Profile  Visit Rob's Homepage
Wow, I just realized the threshold logic was working in reverse! Meaning, it was requiring that your fingers had moved LESS than the threshold before firing a movement, when it was supposed to fire a movement if the threshold was reached or greater than. I'm pretty sure this is what has caused the problem. I'm sure different TouchPad hardware have different resolutions, which may be why mine was working but not you guys. I dropped the threshold to 5 (I originally defaulted to 20 in the code) and my system was acting the same. Then I looked at the logic and realized the mistake; I've set the threshold to 1, meaning pretty much any TouchPad movement will be counted and it seems to not only work consistently, but is smoother and doesn't have the starting lag (for me, that is).

I've added a setting in StrokesPlus.xml (you'll have to click OK in Settings or exit S+ for it to show up in StrokesPlus.xml) to control the threshold, just search for "TouchPadThresholdDelta":
<TouchPadThresholdDelta>1</TouchPadThresholdDelta>
I added the threshold check to hopefully reduce processing during TouchPad movements, but I don't know if it's worth it, so setting to 1 should be fine. You can increase it if you'd like to see how it behaves, but at this point I recommend leaving it set to 1 and seeing how it runs now.

Beta 6:
http://www.strokesplus.com/forum/topic/637/beta-v6-264-32-bit-and-64-bit
Go to Top of Page

Rob

USA
2615 Posts

Posted - 03/04/2013 :  01:03:42  Show Profile  Visit Rob's Homepage
You may need to reduce the Movement Sensitivity % since mouse movement is being fired on each TouchPad movement.

Let me know what Movement Sensitivity feels right for you two, so I can compare with mine and maybe adjust the code to make the sensitivity less...sensitive given the more frequent movement processing.
Go to Top of Page

Rob

USA
2615 Posts

Posted - 03/04/2013 :  01:21:28  Show Profile  Visit Rob's Homepage
I made a quick update to the Beta 6 downloads at the time of this post (Eastern U.S. Time) to fix the threshold checks again, it should now work well in all directions.
Go to Top of Page

Loamaro

Russia
14 Posts

Posted - 03/04/2013 :  01:43:21  Show Profile
Hurrah, it works!

Um ... maybe too hard and fast, but probably need to adjust the settings touchpad.

P.S. In connection with this, a new question, it might be premature and not for this thread: why not add in S + ability to work with individual settings profiles? .. For example, I would set up a profile for Touchpad: all gestures while pressing the "alt" (ctrl, shift) - and easily switch between profiles "normal" and "touchpad".
Go to Top of Page

Rob

USA
2615 Posts

Posted - 03/04/2013 :  01:50:25  Show Profile  Visit Rob's Homepage
Great!

Try a low sensitivity number and let me know what feels right. Regarding profiles, I just posted something earlier about that :-)

http://www.strokesplus.com/forum/topic/634/switch-s-config-files
Go to Top of Page

Loamaro

Russia
14 Posts

Posted - 03/04/2013 :  02:58:49  Show Profile
Yes! If you reduce the sensitivity, that works better (sharper). However, you can get used to high speed: I think it is a matter of habit :)
Go to Top of Page

Korbi

3 Posts

Posted - 12/22/2017 :  13:25:52  Show Profile
Hi!
I would love to make Strokes Plus work on my synapsis touchpad, but I somehow cant figure out how to do this. In the control panel my touchpad is listed as a precision touchpad, which means it is able to perform gestures with 3 fingers. I disabled all default gestures and set strokesplus up to use 3 fingers. I played around with the sensitvity and all, but nothing worked. I guess the problem is my mouse pointer is not even moving when i am using 3 fingers...
Could you point me in the right direction on how to make this work?

Cheers, Korbi

My system configuration: Windows 10, Strokesplus v2.8.6.4, Synapsis Clickpad Driver v19.3.8.22
Go to Top of Page

Rob

USA
2615 Posts

Posted - 12/22/2017 :  13:59:02  Show Profile  Visit Rob's Homepage
To be honest, I've given up on supporting touchpads. There are many different manufacturers and they don't give out nice API/SDKs for developers to work with. The only one that even exists for Synaptics is from 2001 or something. It's quite possible they've stopped even installing that COM component with their drivers anymore.
Go to Top of Page

Korbi

3 Posts

Posted - 12/23/2017 :  01:47:56  Show Profile
Oh this is a pitty. Strokesplus on a touchpad would be a game changer. I always have to connect a mouse because I miss gestures in about 2 seconds :) Seriously hope you change your mind on this :D
Go to Top of Page

Rob

USA
2615 Posts

Posted - 12/23/2017 :  03:34:45  Show Profile  Visit Rob's Homepage
It's not a matter of giving up, but literally without an SDK or published APIs, I simply cannot interface the hardware. It's really unfortunate, but I think they just don't want to have people using their stuff without getting paid or something.
Go to Top of Page

Korbi

3 Posts

Posted - 12/23/2017 :  11:39:16  Show Profile
Ok, yeah I get it. I did a little bit of research and it seems like they even took down the old SDK now. The last answer in this thread https://stackoverflow.com/questions/16442480/synaptics-touchpad-signature points out that they changed some of the values in windows 10, which might be the problem I am facing ...
Anyhow I completly get why you dont continue this and really apreciate the work you put into this great tool!
Go to Top of Page

Rob

USA
2615 Posts

Posted - 12/23/2017 :  15:32:31  Show Profile  Visit Rob's Homepage
Yeah, I have that original SDK still, but it's very basic. In the end, you're only able to receive data that Synaptics chooses to send, unlike mouse and keyboard input. So if they decide to no longer send the hardware level raw input data with which to work, the only alternative would be for me to build my own device driver to access the touch pad directly and uninstall their driver, which I certainly don't have the experience nor interest in doing!
Go to Top of Page

Rob

USA
2615 Posts

Posted - 12/23/2017 :  15:37:20  Show Profile  Visit Rob's Homepage
But the other part is that there are multiple touch pad manufacturers as well. I've received requests from people to support their touch pad, but they don't publish any information on how to access anything. So in the end, it's one of those things that "Here's the Synaptics thing, if it works, great, if not, oh well". Or just leave it out altogether as it ends up making my software look bad when it's out of my control. Dunno, still on the fence about keeping it in the new version of S+, but we'll see.

I did actually build it into the new version when I started it like a year ago or so, and it was working okay. However, I have an Asus laptop now which has a non-Synaptics touch pad, so I can't really do anything anyway. But that furthers my point about the fragmentation across touch pads and is it worth introducing something which only works for a subset of people...and even those are subject to stop working at any time if Synaptics decides to change their code, since they don't provide an official API for which they guarantee compatibility.

I'd probably be better off exposing an API from S+ and if someone wants to build/maintain a touch pad plug-in that can send the commands to S+, then great. But I'm not sure exactly how challenging that would be; I'll keep it in mind, though.
Go to Top of Page
  Previous Topic Topic Next Topic  
 Forum Locked
 Printer Friendly
Jump To:
StrokesPlus Forum © 2011-2018 Rob Yapchanyk Go To Top Of Page
Snitz Forums 2000