Page 1 of 1

making a touchstream out of two igestures

PostPosted: 16 Oct 2005, 18:27
by advisor
I was wondering if anybody had managed to create a "touchstream" out of two igestures as suggested in the posts made in 2005. I see that IvanW can make numpads out of the igestures, and I'm trying to make that work right now, but I don't see anything about getting the two igestures to work. Anybody have any insights into this? Also, if somebody could document the procedure of reprogramming the igesture to become a numpad, that would be great. I am trying to figure out this XML stuff, but I'm pretty high on the clueless scale.

PostPosted: 16 Oct 2005, 22:30
by Rqyteqto
Hey Advisor, welcome to the clubs, both fingerfans and the clueless club. I think most of us are in the same boat. I also have two iGestures in a hope such an arrangement or some other strategy could be worked out.

At this point in time, ivanw and torben seem to be the most knowlegeble. The best resource on this is at the XMl wiki (bin/view/Main/XmlManual)

as best I can tell, it should be completely possible to do what you suggest, it seems this boards are endlessly programmable, though I doubt its possible you could get the two boards to work as one, with interactivity between them. More likely you could either have two separate boards, say one for numbers and punctuation and the other for letters or stack the left side of the normal keyboard on one and the right side on the other but there wouldn't be any interactivity between them, ie - the shift key on one wouldn't affect the other and you couldn't do two handed gestures. Then again, I wouldn't be entirely surprised if that did indeed turn out to be possible. I don't think there's much that would surprise me about what these boards can be made to do.

The basic process for setting up an iGesture is to establsh each key you want: what it is or does and where it is on the board. That's a matter of writing XML code which appears to be fairly straightforward, at least as far as most languages go.

Another good source of information, at least for the time being, are the forums on the fingerworks website. They are no longer active (you can't post to them) but you can read them and there's lots and lots of information there. Hopefully somebody is saving that against the day the website is no longer up and running.

Whatever you work out, please post it so the rest of us can learn.

taps do not register on an igesture

PostPosted: 16 Oct 2005, 23:04
by advisor
Okay... so what I've figured out so far is that in theory, this is pretty straightforward. The FingerWorks MultiTouch applications comes with a .jar file that has the proper "taparea" XML tags for the NumPad. So to turn an igesture into a numpad, what I've tried to do is merge a configuration file saved by the MultiTouch utility with the TapArea tags defined by the numpad file.

Here is the configuration file I get:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE MTS_config>
<MTS_config MTS_config_version="1.60" min_firmware_version="1.46">
<RequireLib name="FW_main" />
<TapArea xcenter="0.1" ycenter="9.5" isRectangular="true" width="1.9" height="1.1"
macro_name=" PrintScreen ">
<KeyEvent keyCode="PrintScreen" />
</TapArea>
<TapArea xcenter="2.0" ycenter="9.5" isRectangular="true" width="1.9" height="1.1"
macro_name=" ScrollLock ">
<KeyEvent keyCode="ScrollLock" />
</TapArea>
<TapArea xcenter="3.9" ycenter="9.5" isRectangular="true" width="1.9" height="1.1"
macro_name=" Pause ">
<KeyEvent keyCode="Pause" />
</TapArea>
<TapArea xcenter="2.0" ycenter="7.7" isRectangular="true" xmin="1.05" ymin="6.75" xmax="2.95" ymax="8.85"
macro_name=" Home ">
<KeyEvent keyCode="Home" />
</TapArea>
<TapArea xcenter="2.0" ycenter="5.8" isRectangular="true" xmin="1.05" ymin="4.1" xmax="2.95" ymax="6.75"
macro_name=" End ">
<KeyEvent keyCode="End" />
</TapArea>
<TapArea xcenter="0.1" ycenter="5.8" isRectangular="true" width="1.9" height="1.9"
macro_name=" Delete ">
<KeyEvent keyCode="Delete" />
</TapArea>
<TapArea xcenter="0.1" ycenter="7.7" isRectangular="true" width="1.9" height="1.9"
macro_name=" Insert ">
<KeyEvent keyCode="Insert" />
</TapArea>
<TapArea xcenter="3.9" ycenter="7.7" isRectangular="true" xmin="2.95" ymin="6.75" xmax="5.0" ymax="8.85"
macro_name=" PageUp ">
<KeyEvent keyCode="PageUp" />
</TapArea>
<TapArea xcenter="3.9" ycenter="5.8" isRectangular="true" xmin="2.95" ymin="4.1" xmax="5.0" ymax="6.75"
macro_name=" PageDown ">
<KeyEvent keyCode="PageDown" />
</TapArea>
<TapArea xcenter="0.0" ycenter="0.1" isRectangular="true" xmin="-1.1" ymin="-1.1" xmax="1.0" ymax="1.7"
macro_name=" Left ">
<KeyEvent keyCode="Left" />
</TapArea>
<TapArea xcenter="2.0" ycenter="2.0" isRectangular="true" xmin="1.0" ymin="1.0" xmax="3.0" ymax="3.75"
macro_name=" Up ">
<KeyEvent keyCode="Up" />
</TapArea>
<TapArea xcenter="2.0" ycenter="0.1" isRectangular="true" xmin="1.0" ymin="-1.3" xmax="3.0" ymax="1.0"
macro_name=" Down ">
<KeyEvent keyCode="Down" />
</TapArea>
<TapArea xcenter="4.0" ycenter="0.1" isRectangular="true" xmin="3.0" ymin="-1.1" xmax="5.00" ymax="1.7"
macro_name=" Right " >
<KeyEvent keyCode="Right" />
</TapArea>
<TapArea xcenter="-1.0" ycenter="2.5" isRectangular="true" xmin="-2.0" ymin="1.75" xmax="1.0" ymax="4.8"
macro_name=" InvisibleBackSpace " layoutContext="NumLock ScrollLock">
<KeyEvent keyCode="BackSpace" />
</TapArea>
<TapArea xcenter="4.0" ycenter="3.0" isRectangular="true" xmin="3.0" ymin="1.8" xmax="5.0" ymax="4.3"
macro_name=" InvisibleKey0 ">
</TapArea>
<TapArea xcenter="8.0" ycenter="9.5" isRectangular="true" width="1.9" height="1.1"
macro_name=" InvisibleKey1 ">
</TapArea>
<TapArea xcenter="9.9" ycenter="9.5" isRectangular="true" width="1.9" height="1.1"
macro_name=" InvisibleKey2 ">
</TapArea>
<TapArea xcenter="11.8" ycenter="9.5" isRectangular="true" width="1.9" height="1.1"
macro_name=" InvisibleKey3 ">
</TapArea>
<TapArea xcenter="13.7" ycenter="9.5" isRectangular="true" width="1.9" height="1.1"
macro_name=" InvisibleKey4 ">
</TapArea>
<TapArea xcenter="13.7" ycenter="7.7" isRectangular="true" width="1.9" height="1.9"
macro_name=" InvisibleKey5 ">
</TapArea>
<TapArea xcenter="13.7" ycenter="5.8" isRectangular="true" width="1.9" height="1.9"
macro_name=" InvisibleKey6 ">
</TapArea>
<TapArea xcenter="13.7" ycenter="3.9" isRectangular="true" width="1.9" height="1.9"
macro_name=" InvisibleKey7 ">
</TapArea>
<TapArea xcenter="13.7" ycenter="2.0" isRectangular="true" width="1.9" height="1.9"
macro_name=" InvisibleKey8 ">
</TapArea>
<TapArea xcenter="13.7" ycenter="0.1" isRectangular="true" width="1.9" height="1.9"
macro_name=" InvisibleKey9 ">
</TapArea>

<TapArea xcenter="6.1" ycenter="9.5" isRectangular="true" width="1.9" height="1.1"
macro_name=" NumLock ">
<KeyEvent keyCode="NumLock" />
</TapArea>
<TapArea xcenter="6.1" ycenter="7.7" isRectangular="true" width="1.9" height="1.9"
macro_name=" , " layoutContext="NumLock ScrollLock">
<KeyEvent keyCode="," />
</TapArea>
<TapArea xcenter="8.0" ycenter="7.7" isRectangular="true" width="1.9" height="1.9"
macro_name=" / " layoutContext="NumLock ScrollLock">
<KeyEvent keyCode="Numpad/" />
</TapArea>
<TapArea xcenter="9.9" ycenter="7.7" isRectangular="true" width="1.9" height="1.9"
macro_name=" * " layoutContext="NumLock ScrollLock">
<KeyEvent keyCode="Numpad*" />
</TapArea>

<TapArea xcenter="11.8" ycenter="7.7" isRectangular="true" width="1.9" height="1.9"
macro_name=" - " layoutContext="NumLock ScrollLock">
<KeyEvent keyCode="Numpad-" />
</TapArea>

<TapArea xcenter="11.8" ycenter="4.85" isRectangular="true" width="1.9" height="3.8"
macro_name=" + " layoutContext="NumLock ScrollLock">
<KeyEvent keyCode="Numpad+" />
</TapArea>
<TapArea xcenter="6.1" ycenter="2.0" isRectangular="true" width="1.9" height="1.9"
macro_name=" 1 " layoutContext="NumLock ScrollLock">
<KeyEvent keyCode="Numpad1" />
</TapArea>
<TapArea xcenter="8.0" ycenter="2.0" isRectangular="true" width="1.9" height="1.9"
macro_name=" 2 " layoutContext="NumLock ScrollLock">
<KeyEvent keyCode="Numpad2" />
</TapArea>
<TapArea xcenter="9.9" ycenter="2.0" isRectangular="true" width="1.9" height="1.9"
macro_name=" 3 " layoutContext="NumLock ScrollLock">
<KeyEvent keyCode="Numpad3" />
</TapArea>
<TapArea xcenter="6.1" ycenter="3.9" isRectangular="true" width="1.9" height="1.9"
macro_name=" 4 " layoutContext="NumLock ScrollLock">
<KeyEvent keyCode="Numpad4" />
</TapArea>
<TapArea xcenter="8.0" ycenter="3.9" isRectangular="true" width="1.9" height="1.9"
macro_name=" 5 " layoutContext="NumLock ScrollLock">
<KeyEvent keyCode="Numpad5" />
</TapArea>
<TapArea xcenter="9.9" ycenter="3.9" isRectangular="true" width="1.9" height="1.9"
macro_name=" 6" layoutContext="NumLock ScrollLock">
<KeyEvent keyCode="Numpad6" />
</TapArea>
<TapArea xcenter="6.1" ycenter="5.8" isRectangular="true" width="1.9" height="1.9"
macro_name=" 7 " layoutContext="NumLock ScrollLock">
<KeyEvent keyCode="Numpad7" />
</TapArea>
<TapArea xcenter="8.0" ycenter="5.8" isRectangular="true" width="1.9" height="1.9"
macro_name=" 8 " layoutContext="NumLock ScrollLock">
<KeyEvent keyCode="Numpad8" />
</TapArea>
<TapArea xcenter="9.9" ycenter="5.8" isRectangular="true" width="1.9" height="1.9"
macro_name=" 9 " layoutContext="NumLock ScrollLock">
<KeyEvent keyCode="Numpad9" />
</TapArea>
<TapArea xcenter="7.05" ycenter="0.1" isRectangular="true" width="3.8" height="1.9"
macro_name=" 0 " layoutContext="NumLock ScrollLock">
<KeyEvent keyCode="Numpad0" />
</TapArea>
<TapArea xcenter="11.8" ycenter="0.95" isRectangular="true" width="1.9" height="3.8"
macro_name=" Enter "
layoutContext="NumLock ScrollLock">
<KeyEvent keyCode="NumpadEnter" />
</TapArea>
<TapArea xcenter="9.9" ycenter="0.1" isRectangular="true" width="1.9" height="1.9"
macro_name=" . " layoutContext="NumLock ScrollLock">
<KeyEvent keyCode="Numpad." />
</TapArea>
<MacroLibrary>
<SpeedParamTemplate sensitivity="76.00" accelThresh="10.00" accelPower="0.10" macro_name="Mouse Pointing Speed" lib="user" user_selectable="false" />
<SpeedParamTemplate sensitivity="76.00" accelThresh="10.00" accelPower="0.10" macro_name="Mouse Dragging Speed" lib="user" user_selectable="false" />
<SpeedParamTemplate sensitivity="25.00" accelThresh="25.00" accelPower="0.00" macro_name="Scroll Speed" lib="user" user_selectable="false" />
</MacroLibrary>
<UserOptions driverContext=" mac qwerty" layoutContext=" numlock" toggle_numlock_internally="true" new_touch_threshold="0.18" tap_timeout_ms="512" typematic_hold_m
s="640">
<EnabledRighthandGestures list=" scroll_mouse fivefinger_mouse clipboard_op file_op window_op text_nav pengrip_op tap_range_chord weird_chords search_edit" />
<EnabledLefthandGestures list="" />
<EnabledBimanualGestures list="" />
</UserOptions>
</MTS_config>

So I load this file into the Multitouch, and then all of sudden, I see a new section that wasn't there before called Surface Keys. So this looks good... and when I click on Surface Keys, I get a key layout that looks a lot like the number pad. So I press transfer to device and then ... nothing. Something is apparently preventing individual key presses (taps I guess is what they are called) from being registered. Does anybody have any clue as to how to work around this?

PostPosted: 16 Oct 2005, 23:44
by ivanw
I agree with all Rqyteqto said. I don't have an iGesture or a NumberPad, meaning that I can't experiment on how far one can cheat with customization.
The hardware signature sensed by the editor when it starts makes that you can't use it with these boards as you would with a TouchStream. This means that you have to tune some XML file.
This said, you can use any mean to generate a base working file. You can go this way: Open MyGesture Editor and change the initial detected device with the menu entry:
Device -> Offline -> Editing -> SOMEDEVICE (Demo). Then you have to understand how the editor exports and imports libraries and how customization files are structured. If you are a programmer, that's not a big deal, if you are not, it's a question of becoming one... that's not peace of cake - but some did just that :wink:
At this point, it's up to you, your knowledge, many experiments, much time, a lot of patience, good guesses ...and รก bunch of this forum members, willing to get more from what these devices can provide.
The only thing I can think of in the cannot-be-done side is tactile-feedback we all miss so bad :evil:

making the taps "register"

PostPosted: 16 Oct 2005, 23:59
by advisor
Ivan,

I've seen some other posts where you say that you can turn an iGesture into a NumPad... I think that's the only piece of the puzzle that I'm missing... basically how to make the single taps "register." Can you give me any insight into how to accomplish this?

Re: taps do not register on an igesture

PostPosted: 17 Oct 2005, 00:08
by ivanw
advisor wrote:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE MTS_config>
<MTS_config MTS_config_version="1.60" min_firmware_version="1.46">
<RequireLib name="FW_main" />
<TapArea xcenter="0.1" ycenter="9.5" isRectangular="true" width="1.9" height="1.1"
macro_name=" PrintScreen ">
...
So I press transfer to device and then ... nothing. Something is apparently preventing individual key presses (taps I guess is what they are called) from being registered.

The <RequireLib name="FW_main" /> element sucks everything relevant to the true identity of your device from the C:\program files\FingerWorks\lib\FW_defaults.jar file.
I think that you should delete this entry and look what comes out...

Help...

PostPosted: 17 Oct 2005, 00:29
by advisor
I know... I'm dense... but I still don't get it. I removed the include line... and now I'm testing with a relatively trivial XML file... a single big button... but I still can't seem to "register" and taps...

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE MTS_config><MTS_config MTS_config_version="1.60" min_firmware_version="1.46"> <MacroLibrary> <SpeedParamTemplate sensitivity="76.00" accelThresh="10.00" accelPower="0.10" macro_name="Mouse Pointing Speed" lib="user" user_selectable="false" /> <SpeedParamTemplate sensitivity="76.00" accelThresh="10.00" accelPower="0.10" macro_name="Mouse Dragging Speed" lib="user" user_selectable="false" /> <SpeedParamTemplate sensitivity="25.00" accelThresh="25.00" accelPower="0.00" macro_name="Scroll Speed" lib="user" user_selectable="false" /> </MacroLibrary> <TapArea xcenter="8" ycenter="5.5" isRectangular="true" width="15" height="10" macro_name=" Up ">
<KeyEvent keyCode="Up" /> </TapArea>
<UserOptions driverContext=" mac qwerty" layoutContext=" numlock" toggle_numlock_internally="true" new_touch_threshold="0.18" tap_timeout_ms="512" typematic_hold_ms="640">
<EnabledRighthandGestures list=" scroll_mouse fivefinger_mouse clipboard_op file_op window_op text_nav pengrip_op tap_range_chord weird_chords search_edit" />
<EnabledLefthandGestures list="" />
<EnabledBimanualGestures list="" />
</UserOptions>
</MTS_config>

Thanks for your patience.

that was unreadable...

PostPosted: 17 Oct 2005, 00:32
by advisor
forgot to unclick the disable HTML... apologies... let me try this again...

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE MTS_config>
<MTS_config MTS_config_version="1.60" min_firmware_version="1.46">
<MacroLibrary>
<SpeedParamTemplate sensitivity="76.00" accelThresh="10.00" accelPower="0.10" macro_name="Mouse Pointing Speed" lib="user" user_selectable="false" />
<SpeedParamTemplate sensitivity="76.00" accelThresh="10.00" accelPower="0.10" macro_name="Mouse Dragging Speed" lib="user" user_selectable="false" />
<SpeedParamTemplate sensitivity="25.00" accelThresh="25.00" accelPower="0.00" macro_name="Scroll Speed" lib="user" user_selectable="false" />
</MacroLibrary>
<TapArea xcenter="8" ycenter="5.5" isRectangular="true" width="15" height="10" macro_name=" Up ">
<KeyEvent keyCode="Up" /> </TapArea>
<UserOptions driverContext=" mac qwerty" layoutContext=" numlock" toggle_numlock_internally="true" new_touch_threshold="0.18" tap_timeout_ms="512" typematic_hold_ms="640">
<EnabledRighthandGestures list=" scroll_mouse fivefinger_mouse clipboard_op file_op window_op text_nav pengrip_op tap_range_chord weird_chords search_edit" />
<EnabledLefthandGestures list="" />
<EnabledBimanualGestures list="" />
</UserOptions>
</MTS_config>

That's a relatively trivial configuration... I'm trying to detect ANY key click / tap at all... and of course, it does not work. I must be missing something very simple. Thanks again.

PostPosted: 17 Oct 2005, 00:40
by Rqyteqto
Hey ivanw -

I have two iGestures, I'd be willing to send you one to work with. The only conditions would be:
1 - that you treat it with some respect (ie - don't leave it in the cat's litter tray or laying about outdoors or perform bizarre experiments on it such as what sort of physical abuse it can withstand),
2 - if and when you are done with it you return it to me,
3 - you publish on this website whatever you learn or develop, or if this website dissappears, you make that information available to me so I can freely distribute it, with appropriate credit to yourself.

I understand that your work may indeed result in its demise, shit happens. But as long as you are sensible and reasonable, I don't think you'd bugger it up unnecessarily. So I simply trust you to do your best. If for some reason you felt the need to disect it, I'd like to be informed beforehand and be assured you have good belief it can be reassembled in working order or what you hope to learn is of great enough value to sacrifice it.

If that sounds OK with you, PM me and we can exchange addresses and such.

PostPosted: 17 Oct 2005, 00:46
by Rqyteqto
I am also guessing that line is crucial, it shouldn't be eliminated but the libary may have to be modified.

OR

we discussed this before, the firmware was changed at some point (its in the literature somewhere, I forget where) and the iGestures lost their single contact tapping.

I have the old version, from before the change, as well as the new. But I haven't a clue what any of it means.

Re: that was unreadable...

PostPosted: 17 Oct 2005, 00:50
by ivanw
advisor wrote:That's a relatively trivial configuration... I'm trying to detect ANY key click / tap at all... and of course, it does not work. I must be missing something very simple. Thanks again.

I don't think so. Anyway I am missing it too because I really don't know whether what you are trying can be done or not.
With the level of understanding we have, this calls for more experimentation on the identification process and device dependant segmentation.

can somebody try my XML customization on an "old"

PostPosted: 17 Oct 2005, 00:57
by advisor
I've put up a very simple customization above... one that turns the entire igesture into a single "Up" button (as in up arrow). Can somebody who has an "older" igesture (one that doesn't support single finger mousing) try it out? I am curious as to what the result is.

--SL