Skip to content

Commit

Permalink
Update GuiApplicationNativeEventAwareWin32.cpp
Browse files Browse the repository at this point in the history
Added "3dconnexion space mouse wireless" support for windows. Added 3dconnexion vendor ID, product ID, and extended the strcut tag_VirtualKeys.
  • Loading branch information
getitzack authored and wwmayer committed Mar 14, 2015
1 parent 95ed267 commit 878b670
Showing 1 changed file with 37 additions and 5 deletions.
42 changes: 37 additions & 5 deletions src/Gui/3Dconnexion/GuiApplicationNativeEventAwareWin32.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ See also:
#include <cmath>

#define LOGITECH_VENDOR_ID 0x46d
#define CONNEXION_VENDOR_ID 0x256f
#define _CONSTANT_INPUT_PERIOD 0

#ifndef RIDEV_DEVNOTIFY
Expand All @@ -56,7 +57,9 @@ enum e3dconnexion_pid {
eSpaceNavigator = 0xc626,
eSpaceExplorer = 0xc627,
eSpaceNavigatorForNotebooks = 0xc628,
eSpacePilotPRO = 0xc629
eSpacePilotPRO = 0xc629,
eSpaceMouseWireless = 0xc62e,
eSpaceMouseWirelessReceiver = 0xc62f
};

enum e3dmouse_virtual_key
Expand All @@ -79,6 +82,28 @@ struct tag_VirtualKeys
e3dmouse_virtual_key *vkeys;
};

static const e3dmouse_virtual_key SpaceMouseWirelessKeys [] =
{
V3DK_INVALID // there is no button 0
, V3DK_1, V3DK_2
, V3DK_TOP, V3DK_LEFT, V3DK_RIGHT, V3DK_FRONT
, V3DK_ESC, V3DK_ALT, V3DK_SHIFT, V3DK_CTRL
, V3DK_FIT, V3DK_MENU
, V3DK_PLUS, V3DK_MINUS
, V3DK_ROTATE
};

static const e3dmouse_virtual_key SpaceMouseWirelessReceiverKeys [] =
{
V3DK_INVALID // there is no button 0
, V3DK_1, V3DK_2
, V3DK_TOP, V3DK_LEFT, V3DK_RIGHT, V3DK_FRONT
, V3DK_ESC, V3DK_ALT, V3DK_SHIFT, V3DK_CTRL
, V3DK_FIT, V3DK_MENU
, V3DK_PLUS, V3DK_MINUS
, V3DK_ROTATE
};

static const e3dmouse_virtual_key SpaceExplorerKeys [] =
{
V3DK_INVALID // there is no button 0
Expand All @@ -101,14 +126,21 @@ static const e3dmouse_virtual_key SpacePilotKeys [] =
, V3DK_DOMINANT, V3DK_ROTATE
};


static const struct tag_VirtualKeys _3dmouseVirtualKeys[]=
{
eSpacePilot
, sizeof(SpacePilotKeys)/sizeof(SpacePilotKeys[0])
, const_cast<e3dmouse_virtual_key *>(SpacePilotKeys),
eSpaceExplorer
, sizeof(SpaceExplorerKeys)/sizeof(SpaceExplorerKeys[0])
, const_cast<e3dmouse_virtual_key *>(SpaceExplorerKeys)
, const_cast<e3dmouse_virtual_key *>(SpaceExplorerKeys),
eSpaceMouseWireless
, sizeof(SpaceMouseWirelessKeys)/sizeof(SpaceMouseWirelessKeys[0])
, const_cast<e3dmouse_virtual_key *>(SpaceMouseWirelessKeys),
eSpaceMouseWirelessReceiver
, sizeof(SpaceMouseWirelessReceiverKeys)/sizeof(SpaceMouseWirelessReceiverKeys[0])
, const_cast<e3dmouse_virtual_key *>(SpaceMouseWirelessReceiverKeys)
};


Expand Down Expand Up @@ -295,8 +327,8 @@ bool Gui::GUIApplicationNativeEventAware::Is3dmouseAttached()

if (GetRawInputDeviceInfo(rawInputDeviceList[i].hDevice, RIDI_DEVICEINFO, &rdi, &cbSize) > 0) {
//skip non HID and non logitec (3DConnexion) devices
if (rdi.dwType != RIM_TYPEHID || rdi.hid.dwVendorId != LOGITECH_VENDOR_ID) {
continue;
if (!(rdi.dwType == RIM_TYPEHID && (rdi.hid.dwVendorId == LOGITECH_VENDOR_ID || rdi.hid.dwVendorId == CONNEXION_VENDOR_ID))) {
continue;
}

//check if devices matches Multi-axis Controller
Expand Down Expand Up @@ -626,7 +658,7 @@ bool Gui::GUIApplicationNativeEventAware::TranslateRawInputData(UINT nInputCode,
}
#endif

if (sRidDeviceInfo.hid.dwVendorId == LOGITECH_VENDOR_ID) {
if (sRidDeviceInfo.hid.dwVendorId == LOGITECH_VENDOR_ID || sRidDeviceInfo.hid.dwVendorId == CONNEXION_VENDOR_ID) {
if (pRawInput->data.hid.bRawData[0] == 0x01) { // Translation vector

TInputData& deviceData = fDevice2Data[pRawInput->header.hDevice];
Expand Down

0 comments on commit 878b670

Please sign in to comment.