Closed GoogleCodeExporter closed 9 years ago
Hi,
This driver is a root enumerated (ie virtual or software) multitouch device
driver.
When installed it is possible to send input events programatically to the
driver which are then presented to the operating system as input events from
the multitouch device allowing anyone to play with multitouch input to windows
7 (say using a webcam to derive multitouch input).
If there is sufficient interest I can produce an installable build.
Cheers
Original comment by djpnew...@gmail.com
on 2 Oct 2010 at 7:26
Hi,
I was able to compile the sys, but i can't install in in Windows 7 32 bit.
When using both OSRLoader and "net start", it successfuly registers the driver,
but doesn't start giving an error 1058.
Can you please explain how to install.
Thanks alot.
Original comment by a...@uplayinteractive.com
on 4 Nov 2010 at 5:41
Here is a simple overview of building and installing vmulti:
https://code.google.com/p/vmulti/wiki/BuildingAndInstallingVMulti
Let me know if anything needs clarification
Original comment by djpnew...@gmail.com
on 4 Nov 2010 at 9:32
Hi,
this is great project and I'm very thankful for this. I installed the driver,
testvmulti.exe is running well, but I would like to know, how can I include it
to my cpp. I tried to change testvmulti.c, make main function extern "C"
(renamed of course), but there are still some errors. Looks like it can't be
compiled in Visual Studio. Can you help me with this? What else do I need to
include (I have vmulticommon.h), where is hidsdi.h or dontuse.h (is it even
usefull?) ? It would be great to have an easy way to use this driver in any
project.
Thanks! :-)
Original comment by matgr...@gmail.com
on 18 Nov 2010 at 3:49
dontuse.h is in the WDK (it is not really needed).
hidsdi.h is also found in the WDK (you can also get a version from MinGW and
maybe win Windows SDK) it is needed to call the functions in hid.dll.
Once you get hidsdi.h you should be able to compile from Visual Studio you
should be able to compile testvmulti easy enough.
Original comment by djpnew...@gmail.com
on 19 Nov 2010 at 4:15
Original comment by djpnew...@gmail.com
on 19 Nov 2010 at 4:16
matgrula,
I have split the test client into two parts
1) A static library for connecting and sending requests to vmulti
2) A small test app that uses the library (testvmulti)
I have also added a visual studio solution (you will still need the latest WDK
installed).
Cheers
Original comment by djpnew...@gmail.com
on 22 Nov 2010 at 4:57
Hi,
Thank you very much, that's great! :-)
But I was still unable to make it work :( I compiled vmulticlient, linked lib
in my project (and hid.lib, setupapi.lib - you have them in your test project),
included vmulticlient.h and vmulticommon.h, but I get errors about unresolved
external symbols. Do you have any idea what could be wrong?
Also, I would like to ask about status parameter in vmulti_update_multitouch -
is it for dwFlags in Touchinput structure? If so, how can we send, for example
TOUCHEVENTF_MOVE or TOUCHEVENTF_[UP|DOWN]?
Thank you again! You are doing very good work :-)
Original comment by matgr...@gmail.com
on 24 Nov 2010 at 2:06
1) are you able to compile the testvmulti execuable?
2) what are the symbol names that the linker is complaining about?
To perform a TOUCHEVENTF_DOWN you would send two requests with the same x/y
coords:
- status = MULTI_CONFIDENCE_BIT | MULTI_IN_RANGE_BIT
- status = MULTI_CONFIDENCE_BIT | MULTI_IN_RANGE_BIT | MULTI_TIPSWITCH_BIT
Then to move your change the coordinates while keeping the status byte at
"MULTI_CONFIDENCE_BIT | MULTI_IN_RANGE_BIT | MULTI_TIPSWITCH_BIT"
Then to perform TOUCHEVENTF_UP send two requests changing the status to:
- MULTI_CONFIDENCE_BIT | MULTI_IN_RANGE_BIT
- 0
Original comment by djpnew...@gmail.com
on 24 Nov 2010 at 8:08
1) Yes.
2)
1>main.obj : error LNK2019: unresolved external symbol "void __cdecl
vmulti_disconnect(struct _vmulti_client_t *)"
(?vmulti_disconnect@@YAXPAU_vmulti_client_t@@@Z) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "int __cdecl
vmulti_update_multitouch(struct _vmulti_client_t *,unsigned char,unsigned
char,unsigned short,unsigned short,unsigned char,unsigned char,unsigned
short,unsigned short,unsigned char)"
(?vmulti_update_multitouch@@YAHPAU_vmulti_client_t@@EEGGEEGGE@Z) referenced in
function _main
1>main.obj : error LNK2019: unresolved external symbol "void __cdecl
vmulti_free(struct _vmulti_client_t *)"
(?vmulti_free@@YAXPAU_vmulti_client_t@@@Z) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "int __cdecl
vmulti_connect(struct _vmulti_client_t *)"
(?vmulti_connect@@YAHPAU_vmulti_client_t@@@Z) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "struct _vmulti_client_t
* __cdecl vmulti_alloc(void)" (?vmulti_alloc@@YAPAU_vmulti_client_t@@XZ)
referenced in function _main
Thanks!
Original comment by matgr...@gmail.com
on 25 Nov 2010 at 9:15
Are you linking vmulticlient into your own new project?
It looks like you are linking to a vmulticlient.lib to a C++ project. If so you
want to import the C header like so to stop the name mangling:
extern "C"
{
#include "vmulticlient.h"
}
See http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html for more details
Original comment by djpnew...@gmail.com
on 29 Nov 2010 at 12:56
Thanks, but now I get different errors:
1>MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: _malloc already defined in
LIBCMTD.lib(dbgmalloc.obj)
1>MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: _free already defined in
LIBCMTD.lib(dbgfree.obj)
1>MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: _printf already defined in
LIBCMTD.lib(printf.obj)
1>MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: __thiscall
type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z)
already defined in LIBCMTD.lib(typinfo.obj)
1>MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: class type_info &
__thiscall type_info::operator=(class type_info const &)"
(??4type_info@@AAEAAV0@ABV0@@Z) already defined in LIBCMTD.lib(typinfo.obj)
It's OK with only this in code: pvmulti_client vmulti;
But when I add - vmulti = vmulti_alloc(); - errors show up. I did UTFG and it
seems like problem of different versions of runtime libraries
(http://www.gamedev.net/community/forums/topic.asp?topic_id=485446), but the
solution was not really helpful (if I did it well).
Sorry for bothering you, but you seem very experienced and helpful and I really
appreciate your help!
Original comment by matgr...@gmail.com
on 29 Nov 2010 at 10:28
Ok, I solved it. Changed Runtime library in vmulticlient to /MTd, compiled and
it's working :-)
Well, not exactly. There are no errors, but when I touch the screen, no message
is generated (I think).
Ok, so if I go back to this: "To perform a TOUCHEVENTF_DOWN you would send two
requests with the same x/y coords: ..." a have to ask if this is the reason why
vmulti_update_multitouch takes 2 points as input parameter and if I should in
this case set actualCount to 2 or 1 and IDs to the same value or different.
Thanks!
Original comment by matgr...@gmail.com
on 29 Nov 2010 at 11:10
I know I'm little bit annoying, but I just found this in the output:
failed HidD_SetOutputReport 23
(from source code it seems that 23 is number of error but I couldn't find
anything about it).
Original comment by matgr...@gmail.com
on 29 Nov 2010 at 12:00
>Ok, so if I go back to this: "To perform a TOUCHEVENTF_DOWN you would send two
requests with the same x/y coords: ..." a have to ask if this is the reason why
vmulti_update_multitouch takes 2 points as input parameter and if I should in
this case set actualCount to 2 or 1 and IDs to the same value or different.
See the testvmulti.c code it does and touch down and then touch up at the same
coordinate:
vmulti_update_multitouch(vmulti, 1, MULTI_CONFIDENCE_BIT | MULTI_IN_RANGE_BIT, 1000, 10000, 1, 0, 0, 0, 0);
vmulti_update_multitouch(vmulti, 1, MULTI_CONFIDENCE_BIT | MULTI_IN_RANGE_BIT | MULTI_TIPSWITCH_BIT, 1000, 10000, 1, 0, 0, 0, 0);
vmulti_update_multitouch(vmulti, 1, MULTI_CONFIDENCE_BIT | MULTI_IN_RANGE_BIT, 1000, 10000, 1, 0, 0, 0, 0);
vmulti_update_multitouch(vmulti, 1, 0, 1000, 10000, 1, 0, 0, 0, 0);
vmulti_update_multitouch takes two touch points as the vmulti driver multitouch
endpoint supports two touch point so whenever you want to update the state of
the touch points you need to address both touch points.
Original comment by djpnew...@gmail.com
on 30 Nov 2010 at 9:04
>failed HidD_SetOutputReport 23
That is a strange error code. Are you able to run the testvmulti app and see
what happens?
Also you could try changing line 201 in client.c to:
return HidOutput(FALSE, vmulti->hVMulti, (PCHAR)vmulti->vendorReport, VENDOR_REPORT_SIZE);
Original comment by djpnew...@gmail.com
on 30 Nov 2010 at 9:08
>vmulti_update_multitouch takes two touch points as the vmulti driver
multitouch endpoint supports two touch point so whenever you want to update the
state of the touch points you need to address both touch points.
Sorry, I don't understand what you mean. There are 2 touch points for one
point, or what? Why can't I use this:
vmulti_update_multitouch(vmulti, 2, MULTI_CONFIDENCE_BIT | MULTI_IN_RANGE_BIT,
1000, 10000, 1, MULTI_CONFIDENCE_BIT | MULTI_IN_RANGE_BIT |
MULTI_TIPSWITCH_BIT, 1000, 10000, 1);
And just to be sure - x/y coords need to be multiplied by 100, right?
Last question - I set touch point ID to 0, could this be a problem?
Original comment by matgr...@gmail.com
on 30 Nov 2010 at 9:31
>Also you could try changing line 201 in client.c to:
> return HidOutput(FALSE, vmulti->hVMulti, (PCHAR)vmulti->vendorReport,
VENDOR_REPORT_SIZE);
failed WriteFile 87
>Are you able to run the testvmulti app and see what happens?
The same thing. It's working only in older version (not splited). I tried to
uninstall the driver (because it's from older version - did you change anything
in the driver?) but "build -wgc" give me some errors (attached)
So now I got no driver... :-(
Original comment by matgr...@gmail.com
on 30 Nov 2010 at 2:46
Attachments:
>Sorry, I don't understand what you mean. There are 2 touch points for one
point, or what? Why can't I use this:
vmulti_update_multitouch(vmulti, 2, MULTI_CONFIDENCE_BIT | MULTI_IN_RANGE_BIT,
1000, 10000, 1, MULTI_CONFIDENCE_BIT | MULTI_IN_RANGE_BIT |
MULTI_TIPSWITCH_BIT, 1000, 10000, 1);
Ok so the different parameters in vmulti_update_multitouch are for two separate
touch points (see
http://www.microsoft.com/whdc/device/input/DigitizerDrvs_touch.mspx for more
details).
So it turns out I was wrong if you want to do a single touch down
(TOUCHEVENTF_DOWN) just do:
vmulti_update_multitouch(vmulti, 1, MULTI_CONFIDENCE_BIT | MULTI_IN_RANGE_BIT | MULTI_TIPSWITCH_BIT, 1000, 10000, 0, 0, 0, 0, 0);
Then for TOUCHEVENTF_UP:
vmulti_update_multitouch(vmulti, 1, 0, 1000, 10000, 0, 0, 0, 0, 0);
Original comment by djpnew...@gmail.com
on 1 Dec 2010 at 9:46
>failed WriteFile 87
ERROR_INVALID_PARAMETER (you might have a mismatch between the currently
installed driver and the vmulti client library you are using)
>The same thing. It's working only in older version (not splited). I tried to
uninstall the driver (because it's from older version - did you change anything
in the driver?) but "build -wgc" give me some errors (attached)
yes I have been changing the driver
build.exe (the WDK build tool) does not work with directory paths that have
spaces in them
Original comment by djpnew...@gmail.com
on 1 Dec 2010 at 9:49
Great! Thanks! It's working now. :-)
But is there something special about x/y parameters? Because in my testing full
screen image, touch points are marked good (I mean drawed circles), but
generated touch points with the same coords (multiplied by 100) are elsewhere.
I tried not multipy them by 100, switch x and y, divide by 2 (I have 2 screens,
set to cloning) but nothing helped.
Also, can I change vmulti_update_multitouch to take an array of touch points as
an input parameter, instead of 2 points?
Original comment by matgr...@gmail.com
on 1 Dec 2010 at 11:22
The X and Y parameters map 0-32767 to the screen width and height (so it is
completely independant to screen resolution).
There are some definitions in the vmulticommon header:
#define MULTI_MIN_COORDINATE 0x0000
#define MULTI_MAX_COORDINATE 0x7FFF
Regarding the number of touch points, the hid descriptor specifies just two
touch points at the moment. If you want more touch points open a new issue and
we can discuss that there.
Cheers,
dan
Original comment by djpnew...@gmail.com
on 1 Dec 2010 at 8:35
By screen width and height you mean REAL ones? In cm or inches? How can the
system know them? Is there any system variable for this width and height?
Every pixel has one value from 0-32767, or 0-32767 is mapped to screen width
and another 0-32767 to screen height?
Thanks! :-)
Original comment by matgr...@gmail.com
on 2 Dec 2010 at 1:16
>or 0-32767 is mapped to screen width and another 0-32767 to screen height?
Yes this,
It doesn't matter what the screen dimensions or resolution is.
Original comment by djpnew...@gmail.com
on 3 Dec 2010 at 8:25
>It doesn't matter what the screen dimensions or resolution is.
That's OK. I may sound stupid but I still don't understand what do you mean by
screen width and height. If they are not screen dimensions, neither resolution,
what they are? 0-32767 is mapped to some value - what is the value and how can
I find it?
Original comment by matgr...@gmail.com
on 3 Dec 2010 at 9:41
0,0 is the top left of your screen
32767,32767 is mapped to the bottom right
If your current screen resolution is 1024x768 then the multitouch XValue and
YValue map to the screen like so:
pixelX = (XValue / 32767) * 1024;
pixelY = (YValue / 32767) * 768;
Original comment by djpnew...@gmail.com
on 3 Dec 2010 at 10:02
Thanks man! :)
Original comment by matgr...@gmail.com
on 3 Dec 2010 at 10:18
hi...
For virtual multi touch driver(vmulti) When installed it is possible to send
input events programatically to the driver which are then presented to the
operating system as input events from the multitouch device allowing anyone to
play with multitouch input to windows 7 (say using a usb mouse to derive
multitouch input).
Can u get me installable build for this.
Original comment by guru....@gmail.com
on 8 Mar 2011 at 6:19
I dont have any time to make an installer sorry
Original comment by djpnew...@gmail.com
on 14 Mar 2011 at 2:15
Hi,
According to BuildingAndInstallingVMulti document went through,When I was in
window xp,why appear Error: CreateFile failed: 5 or Error: CreateFile failed:
32 as attached file. how should I solve this problem, thank you.
Original comment by avants.s...@gmail.com
on 16 Feb 2012 at 5:46
Attachments:
hi avants.savant,
Those error messages are ok. Some HID devices are opened exclusively by the OS
(like mouse and keyboard HIDs), that does not matter so much for us because the
vmulti client library communicates with a vendor defined HID.
Does the command work (ie does your mouse move)?
Original comment by djpnew...@gmail.com
on 16 Feb 2012 at 6:16
thks.yes,it is working
Original comment by avants.s...@gmail.com
on 21 Feb 2012 at 3:10
hi im also trying to implement your hid driver into my cpp programm and im
running into some problems. hopefully you can help me out.
when im trying to compile my programme which includes your "vmulticlient.h" i
got the following error: "1>LINK : fatal error C1047: Die Objekt- oder
Bibliotheksdatei
"E:\Repos\vmulti\obj\repos\vmulti\sys\objchk_win7_amd64\amd64\vmulti.obj" wurde
mit einem älteren Compiler als andere Objekte erstellt. Erstellen Sie die
alten Objekte und Bibliotheken neu.
1>LINK : fatal error LNK1257: Fehler bei Codegenerierung." which is german for
"vmulti.obj has been compiled with an old compiler and has to be recompiled"
so i tried to recompile vmulti.obj and opened your visual studio project
..\vmulti\client\vmulticlient.vcproj, i added the folder containing hidsdi.h
and the platform sdk folder to the included directories but i still get the
following error:
1>client.c(1): fatal error C1083: Datei (Include) kann nicht geöffnet werden:
"windows.h": No such file or directory.
ive tried to reinstall windows psdk but it didnt help.
thanks for your help. i highly appreciate your work! :)
Original comment by mrmaf...@googlemail.com
on 24 Feb 2012 at 4:59
ive just tried to compile everything with visual studios debug config and im
getting another error Oo:
1>vmulticlient.lib(client.obj) : error LNK2001: Nicht aufgelöstes externes
Symbol "HidP_GetCaps".
1>vmulticlient.lib(client.obj) : error LNK2001: Nicht aufgelöstes externes
Symbol "HidD_FreePreparsedData".
1>vmulticlient.lib(client.obj) : error LNK2001: Nicht aufgelöstes externes
Symbol "__imp_SetupDiGetClassDevsA".
1>vmulticlient.lib(client.obj) : error LNK2001: Nicht aufgelöstes externes
Symbol "HidD_SetOutputReport".
1>vmulticlient.lib(client.obj) : error LNK2001: Nicht aufgelöstes externes
Symbol "__imp_SetupDiDestroyDeviceInfoList".
1>vmulticlient.lib(client.obj) : error LNK2001: Nicht aufgelöstes externes
Symbol "HidD_GetAttributes".
1>vmulticlient.lib(client.obj) : error LNK2001: Nicht aufgelöstes externes
Symbol "HidD_SetNumInputBuffers".
1>vmulticlient.lib(client.obj) : error LNK2001: Nicht aufgelöstes externes
Symbol "HidD_GetHidGuid".
1>vmulticlient.lib(client.obj) : error LNK2001: Nicht aufgelöstes externes
Symbol "__imp_SetupDiGetDeviceInterfaceDetailA".
1>vmulticlient.lib(client.obj) : error LNK2001: Nicht aufgelöstes externes
Symbol "__imp_SetupDiEnumDeviceInterfaces".
1>vmulticlient.lib(client.obj) : error LNK2001: Nicht aufgelöstes externes
Symbol "HidD_GetPreparsedData".
1>C:\Users\mrmaffen\Documents\Visual Studio
2010\Projects\cammouseGUI\x64\Debug\cammouseGUI.exe : fatal error LNK1120: 11
nicht aufgelöste externe Verweise.
do you have any idea how to solve this one ? :S thanks again. im still learning
as you can see ^^
Original comment by mrmaf...@googlemail.com
on 24 Feb 2012 at 6:25
ive added hid.lib and setupapi.lib from the winddk folder and it compiled
correctly. in addition also my programme is running correctly. i dont mean to
spam, but i think my solution could help others in the future so i will not
delete my comments.
however i still dont know why it doesnt compile when im setting the config to
"release".
thanks for your awesome work! you actually enable me to get an awesome grade
with my project (im studying computer science) :) thanks!
Original comment by mrmaf...@googlemail.com
on 24 Feb 2012 at 7:05
Good to hear you got it working. As to the release config not working, there
must be some difference in the settings between debug and release, check the
command line that VS passes to the compiler for each and see if you can find a
difference
Original comment by djpnew...@gmail.com
on 26 Feb 2012 at 10:55
right now im trying to build a 32bit version of my project including your
vmulti files and im failing quite badly :D.
linking errors are the following:
1>vmultiinput.obj : error LNK2019: Verweis auf nicht aufgelöstes externes
Symbol "_vmulti_free" in Funktion ""int __cdecl connect_mouse(void)"
(?connect_mouse@@YAHXZ)".
1>vmultiinput.obj : error LNK2019: Verweis auf nicht aufgelöstes externes
Symbol "_vmulti_connect" in Funktion ""int __cdecl connect_mouse(void)"
(?connect_mouse@@YAHXZ)".
1>vmultiinput.obj : error LNK2019: Verweis auf nicht aufgelöstes externes
Symbol "_vmulti_alloc" in Funktion ""int __cdecl connect_mouse(void)"
(?connect_mouse@@YAHXZ)".
1>vmultiinput.obj : error LNK2019: Verweis auf nicht aufgelöstes externes
Symbol "_vmulti_disconnect" in Funktion ""int __cdecl disconnect_mouse(void)"
(?disconnect_mouse@@YAHXZ)".
1>vmultiinput.obj : error LNK2019: Verweis auf nicht aufgelöstes externes
Symbol "_vmulti_update_mouse" in Funktion ""int __cdecl
update_mouse(char,unsigned short,unsigned short,char)"
(?update_mouse@@YAHDGGD@Z)".
ive already tried setting the runtimelibrary to MTd.
of course i rebuilt your vmulticlient files using a wdk x86 build environment.
but still the linker doesnt seem to accept the vmulticlient.lib file.
do you have any idea on how i could solve this?
thanks again
Original comment by mrmaf...@googlemail.com
on 29 Feb 2012 at 4:48
after several hours of searching i came up with a solution:
http://stackoverflow.com/questions/1356653/multiple-compiling-errors-with-basic-
c-application-on-vs2010-beta-1
to successfully recompile vmulticlient.lib with visual studio 2010 ulti and
winsdk7.1 you simply need to delete sal.h in the same dir youre including
windows.h in
hope this helps others
Original comment by mrmaf...@googlemail.com
on 2 Mar 2012 at 5:15
Can i use this vmulti to create a Virtual USB HID Dongle? if possible, please
let me know how to enter the vendor code and product code for this vmulti?
Original comment by sps.kan...@gmail.com
on 26 Apr 2012 at 3:18
[deleted comment]
Hi, I have build the library and driver without problems. But when I use the
library (vmulticlient.lib) i get this result on both x86 and x64.
....looking for our HID device (with UP=0xff00 and Usage=0x1)
Error: CreateFile failed: 5
Error: CreateFile failed: 5
Error: CreateFile failed: 5
Error: CreateFile failed: 32
Error: CreateFile failed: 32
Error: CreateFile failed: 5
Error: CreateFile failed: 5
Success: Found my device..
....looking for our HID device (with UP=0xff00 and Usage=0x2)
Error: CreateFile failed: 5
Error: CreateFile failed: 5
Error: CreateFile failed: 5
Error: CreateFile failed: 32
Error: CreateFile failed: 32
Error: CreateFile failed: 5
Error: CreateFile failed: 5
Error: CreateFile failed: 32
Failure: Could not find our HID device
The weird thing is that I built the lib for x86 once before (2 years ago) and
if I link to that lib-file everything works if i build for x86 but not for x64
(I have 64bit driver installed). Back then I built the library using the same
method as I did today (just running 'build -wcg' in a x86 free build prompt
from the winddk) but they turn out different. I need to use the library from a
64bit exe so I need to be able to build it, please advice.
Or maybe someone can provide me with a working lib-file for x64?
Original comment by lars.englund
on 19 Feb 2013 at 10:59
Original issue reported on code.google.com by
lutin...@gmail.com
on 23 Jul 2010 at 3:17