How to detect gamepad triggers both pushed with USB HID API? - usb

I use RawInput + Windows USB HID API to receive WM_INPUT message when a gamepad button is pressed and retrieve gamepad state.
There's a problem: two triggers work on same axis which means you can't figure out if two triggers are pressed at the same time. I observe the same behaviour when launch OS Windows gamepad test application. But I need to distinguish these two buttons pushed.
Note that XInput works as desired, it gives you two axises for two triggers, but I don't want use XInput because it's only for XBox controllers and there are dozens of non-xbox controllers in the world.
I suppose there must be a way to read two axises through USB HID API, but until now I couldn't find it. Have you resolved the issue?
Gamepad: XBox 360 used (but any other should be supported).
OS: Windows 7.
IDE: Visual Studio 2010.
Language: C++

If you really need to read XInput data via HID API and get trigger axis independently...
There is xusb22.sys driver option for that:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\xusb22\Parameters]
"GamepadTriggerUsage"=dword:00003532
"GamepadStickUsage"=dword:31303433
Make it report LT/RT on Rx/Ry (0x33/0x34 usage) and RStick on Z/Rz (0x32/0x35 usage) HID Axis - just like DualShock4:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\xusb22\Parameters]
"GamepadTriggerUsage"=dword:00003334
"GamepadStickUsage"=dword:31303532
But still - there is no any way to send vibration to XInput controller via its HID interface.
PS: There are others options exists. See C:\Windows\INF\xusb22.inf file.

Related

Arduino as HID device on Windows - Bind external button presses to a keymap in the OS?

Here's the problem: I want to press an external button attached to an Arduino, and I want that button press to translate into Windows as a keystroke.
My question is, is there a programmable device (I already own an Arduino) that can receive signals, and send them over USB to my computer which will understand it as a keypressExample: Button press acts like hitting the S key on my keyboard?
There are three (four) possibilities:
First Get an Arduino Leonardo (32U4 architecture) - there are HID drivers (so windows recognizes the hardware - short explanation: The Arduino LEONARDO is an integrated USB HID Arduino board. Ideal for projects requiring the board to behave (act) as a USB human interface devices = HID).
Two Use any other Arduino and install Processing with the relevant modules. Write code on both and use Processing to translate to windows.
Three I've seen some more or less working implementations.Example 1Example 2Example 3 Scroll down and you will see a picture of your button solution including code.
(Four) This requires also windows programming skills. Write an usb "driver" a translating engine for I/O between Arduino on usb and acting like a virtual (e.g. touch screen) keyboard. Thats the hardest way to go.

Programmatically synchronize(camera-link) multiple intersection windows

Ocean2013.1 provides a sample(WheelerViewer) for using cameras(OpenInventor features) for 3D Windows, but is it possible to synchronize(equivalent of clicking the camera link toolbar option) multiple intersection windows in Ocean/Petrel programmatically?
Camera linking is available as a Petrel feature but not as a Ocean API for developer to access programmatically
You need to be mode specific on what you are trying to synchronize and why.
The Window3D exposes enough camera API that one can write his own camera view synchronization.
If all you want is to be able to click the "Synchronize camera" button via API, it's a different issue. Why do you need this? Often users ask to be able to link all windows with one mouse button click. This, I believe, might be coming in 2015 as a user feature.

Windows 8 incompaitbility with sysinternals Desktops utility

After Googling for about the past hour and a half, I have been unable to find out any definitive information on how the start menu and how windows 8 style applications work behind the scenes. I was under the impression that Windows 8 Style applications were processes which created fullscreen windows and that the Windows 8 start menu was created by explorer.exe in much the same way. But there are incompatibilities between Windows 8 the 1.x version Sysinternal's Desktops utility, I have to imagine that something more complex is going on.
However, in Spy++, each Windows 8 style application appears as standard Window with the WS_EX_TOPMOST style set, which would make sense, assuming they are nothing special. With respect to the Start Menu, it appears as a window of class ImmersiveLauncher created by explorer.exe. Perhaps explorer has developed an aversion to having multiple instances...
Using the old version of SysInternal's Desktops, the explorer instances in the additional desktops work fine, but do not load pinned items nor load the desktop background and icons.
Is there any documentation on why Windows 8 behaves differently from past versions when multiple copies of explorer.exe are running in different desktops?
(This is purely for curiosity's sake)
(Yes, I know there is a Desktops 2.0 version available which supports Windows 8, but it uses interesting workarounds, like switching to the original desktop when the windows key is pressed. It also seems to trigger some initialization within explorer.exe when the desktop is loaded for the first time beyond simply starting the process.)

Windows 8 store app development without touch screen

I've started doing Windows 8 Store app development for some projects at work, but I do not have a touch screen device of my own at home. If I write a personal app for submission to the store, I must use my own hardware since I can't use the work computers for personal projects. My concern is getting into a situation where I submit an app to the store, then have touch-screen users describing issues that I can't replicate on a non-touch-screen device.
Are there any functions or capabilities or interactions that behave differently in a Windows 8 store app when using touch vs. using only a mouse? Are there any scenarios I could encounter where I would be at a loss to reproduce or troubleshoot a user's problems if I do not have a touch screen?
As Konstantin suggested, a tablet is strongly recommended.
The next best thing is to use the device simulator in Visual Studio. It will let you change screen sizes, and allows you to simulate basic touch gestures with the mouse. This MSDN link has more info: Testing Windows 8 apps using Visual Studio 2012
Microsoft have introduced events that are pointer agnostic meaning that they should function the same way regardless of whether you are using a touchscreen, a mouse or a pen. Those are the MSPointer events. Here's some documentation. Using event handlers for these events mean that you should not be getting complaints from users about the touch friendliness of your application. However I still strongly suggest that you acquire a surface and test your application on it. Not just for the touch friendliness but also because of performance differences.

Controlling USB keyboard and mouse

We have a hardware device, with an LCD display. It supports an USB interface to connect keyboard and mose. Using these keyboard and mouse, we can navigate to varios menu items and edit entries.
We have couple of test cases written to verify that mouse click and keyboard input events are working when pressed respective key.
My task is to automate these test cases.
I donot have any control to the hardware device, as I can not access the o/s kernel or any application running there. There is one way to verify what is currently displayed on the UI. So I have to use that and verify whether the mouse/keyboard has performed the appropriate events.
As I have gone through couple of previous posts, it seems like that one of the way to achieve this is through virual HID device driver rather than actual keyboard and mosue. But I am not sure how to achieve it.
Please do help me for it. I am fine with any programming language.
I am more interested to simulate the mouse and keyboard events.
You probably don't need to write your own driver. AutoHotKey does pretty much anything you can think of, and the scripting language is quite easy to learn.
You can get it here:
http://www.autohotkey.com/
Since you're using linux, here's a similar project that will run on linux:
http://sikuli.org/