TLDR; I've got it working in Windows 8, going through some higher detail design issues at this point.
So there's a few parts to this. The issue I was having before is that being in Test Mode isn't enough anymore. Somewhere along the way a patch that was sent through on Windows 8 makes it so that all .INF files must be signed, even in Test Mode. Windows 8.1 has a way to turn that off, but it gets reset everytime you restart. This goes along with the stuff that the author of vJoy had to do in order to get his driver to install without all those pesky notices.
I went through the learning process of how to sign a driver and got that straightened out. Of course it'll still say this is an untrusted source, but in test mode it allows you to install it and the SBC is working.
Second bug, took me a few days to track this one down. I relied on DirectX.DirectInput in the original program. I didn't remember any real issues with it, and I was playing a lot more games then, so I probably had a version installed. Well, you need to have it installed to work.
Windows 8 now includes DirectInput as part of Windows. They've deprecated some things and changed other things, and it just doesn't work. Luckily all I was using DirectInput for was their enumeration of Keys, as I'm emulating key strokes at a lower level so that it would work with older games like MW4. I ended up copying that enumeration, including it in a different file and got it working without any reference to DirectInput, which I see as a good thing. The less moving parts to getting the controller working the better.
Only problem is that it is going to require some changes to previous .cs files
Microsoft.Directx.DirectInput.Key.Space
becomes
SBC.Key.Space
or just
Key.Space
Not a big change.
The higher level issue I'm pondering right now is that the author of vJoy split up the way his program works and made some changes. The biggest thing is the support of 128 buttons, which is half the reason I'm doing this update. Problem being he has always supported 2 ways of updating the vJoy joystick, and efficient way, and a robust way.
The efficient way, you update all the changes you want to make, buttons, axis, etc, then send one update to the vJoy library.
The robust way, you make a change and immediately send an update to the vJoy library.
I wrote my own wrapper back in the day and did it the efficient first way, because I wanted the program to have minimal overhead. Problem with that is that you have to know the data structure to set it up. Well, due to the addition of buttons, the data structure has changed to accommodate the extra buttons. I'm trying to decide how I want to handle this.
Last problem,
The official C# wrapper that now exists uses this format:
joystick.SetAxis(controller.AimingX,1,HID_USAGE.HID_USAGE_X);
mine used this:
joystick.setAxis(1,controller.AimingX,HID_USAGE.HID_USAGE_X);
Identifying which vJoy id you want to update just made more sense to me to be the first parameter. But it makes more sense now to support the official wrapper. So these are higher level design issues, but I have to figure out how to make it easy to use the old .cs files without issue.
~HackNFly
Edited by HackNFly, 27 April 2015 - 10:46 AM.