aboutsummaryrefslogtreecommitdiffstats
path: root/LibOVR/Src/OVR_Win32_HIDDevice.h
diff options
context:
space:
mode:
Diffstat (limited to 'LibOVR/Src/OVR_Win32_HIDDevice.h')
-rw-r--r--LibOVR/Src/OVR_Win32_HIDDevice.h388
1 files changed, 194 insertions, 194 deletions
diff --git a/LibOVR/Src/OVR_Win32_HIDDevice.h b/LibOVR/Src/OVR_Win32_HIDDevice.h
index efe308d..85a72e8 100644
--- a/LibOVR/Src/OVR_Win32_HIDDevice.h
+++ b/LibOVR/Src/OVR_Win32_HIDDevice.h
@@ -1,194 +1,194 @@
-/************************************************************************************
-
-Filename : OVR_Win32_HIDDevice.h
-Content : Win32 HID device implementation.
-Created : February 22, 2013
-Authors : Lee Cooper
-
-Copyright : Copyright 2013 Oculus VR, Inc. All Rights reserved.
-
-Use of this software is subject to the terms of the Oculus license
-agreement provided at the time of installation or download, or which
-otherwise accompanies this software in either electronic or hard copy form.
-
-*************************************************************************************/
-
-#ifndef OVR_Win32_HIDDevice_h
-#define OVR_Win32_HIDDevice_h
-
-#include "OVR_HIDDevice.h"
-#include "OVR_Win32_DeviceManager.h"
-
-#include <windows.h>
-#include <setupapi.h>
-
-//-------------------------------------------------------------------------------------
-// Define needed "hidsdi.h" functionality to avoid requiring DDK installation.
-// #include "hidsdi.h"
-
-#ifndef _HIDSDI_H
-#define _HIDSDI_H
-#include <pshpack4.h>
-
-#define HIDP_STATUS_SUCCESS (0x11 << 16)
-struct HIDP_PREPARSED_DATA;
-
-struct HIDD_ATTRIBUTES
-{
- ULONG Size; // = sizeof (struct _HIDD_ATTRIBUTES)
- USHORT VendorID;
- USHORT ProductID;
- USHORT VersionNumber;
-};
-
-struct HIDP_CAPS
-{
- USHORT Usage;
- USHORT UsagePage;
- USHORT InputReportByteLength;
- USHORT OutputReportByteLength;
- USHORT FeatureReportByteLength;
- USHORT Reserved[17];
-
- USHORT NumberLinkCollectionNodes;
- USHORT NumberInputButtonCaps;
- USHORT NumberInputValueCaps;
- USHORT NumberInputDataIndices;
- USHORT NumberOutputButtonCaps;
- USHORT NumberOutputValueCaps;
- USHORT NumberOutputDataIndices;
- USHORT NumberFeatureButtonCaps;
- USHORT NumberFeatureValueCaps;
- USHORT NumberFeatureDataIndices;
-};
-
-#include <poppack.h>
-#endif
-
-
-namespace OVR { namespace Win32 {
-
-class HIDDeviceManager;
-class DeviceManager;
-
-//-------------------------------------------------------------------------------------
-// ***** Win32 HIDDevice
-
-class HIDDevice : public OVR::HIDDevice, public DeviceManagerThread::Notifier
-{
-public:
-
- HIDDevice(HIDDeviceManager* manager);
-
- // This is a minimal constructor used during enumeration for us to pass
- // a HIDDevice to the visit function (so that it can query feature reports).
- HIDDevice(HIDDeviceManager* manager, HANDLE device);
-
- ~HIDDevice();
-
- bool HIDInitialize(const String& path);
- void HIDShutdown();
-
- // OVR::HIDDevice
- bool SetFeatureReport(UByte* data, UInt32 length);
- bool GetFeatureReport(UByte* data, UInt32 length);
-
-
- // DeviceManagerThread::Notifier
- void OnOverlappedEvent(HANDLE hevent);
- UInt64 OnTicks(UInt64 ticksMks);
- bool OnDeviceMessage(DeviceMessageType messageType, const String& devicePath, bool* error);
-
-private:
- bool openDevice();
- bool initInfo();
- bool initializeRead();
- bool processReadResult();
- void closeDevice();
- void closeDeviceOnIOError();
-
- bool inMinimalMode;
- HIDDeviceManager* HIDManager;
- HANDLE Device;
- HIDDeviceDesc DevDesc;
-
- OVERLAPPED ReadOverlapped;
- bool ReadRequested;
-
- enum { ReadBufferSize = 96 };
- UByte ReadBuffer[ReadBufferSize];
-
- UInt16 InputReportBufferLength;
- UInt16 OutputReportBufferLength;
- UInt16 FeatureReportBufferLength;
-};
-
-//-------------------------------------------------------------------------------------
-// ***** Win32 HIDDeviceManager
-
-class HIDDeviceManager : public OVR::HIDDeviceManager
-{
- friend class HIDDevice;
-public:
-
- HIDDeviceManager(DeviceManager* manager);
- virtual ~HIDDeviceManager();
-
- virtual bool Initialize();
- virtual void Shutdown();
-
- virtual bool Enumerate(HIDEnumerateVisitor* enumVisitor);
- virtual OVR::HIDDevice* Open(const String& path);
-
- // Fills HIDDeviceDesc by using the path.
- // Returns 'true' if successful, 'false' otherwise.
- bool GetHIDDeviceDesc(const String& path, HIDDeviceDesc* pdevDesc) const;
-
- GUID GetHIDGuid() { return HidGuid; }
-
- static HIDDeviceManager* CreateInternal(DeviceManager* manager);
-
-private:
-
- DeviceManager* Manager; // Back pointer can just be a raw pointer.
-
- HMODULE hHidLib;
- GUID HidGuid;
-
- // Macros to declare and resolve needed functions from library.
-#define OVR_DECLARE_HIDFUNC(func, rettype, args) \
-typedef rettype (__stdcall *PFn_##func) args; \
-PFn_##func func;
-#define OVR_RESOLVE_HIDFUNC(func) \
-func = (PFn_##func)::GetProcAddress(hHidLib, #func)
-
- OVR_DECLARE_HIDFUNC(HidD_GetHidGuid, void, (GUID *hidGuid));
- OVR_DECLARE_HIDFUNC(HidD_SetNumInputBuffers, BOOLEAN, (HANDLE hidDev, ULONG numberBuffers));
- OVR_DECLARE_HIDFUNC(HidD_GetFeature, BOOLEAN, (HANDLE hidDev, PVOID buffer, ULONG bufferLength));
- OVR_DECLARE_HIDFUNC(HidD_SetFeature, BOOLEAN, (HANDLE hidDev, PVOID buffer, ULONG bufferLength));
- OVR_DECLARE_HIDFUNC(HidD_GetAttributes, BOOLEAN, (HANDLE hidDev, HIDD_ATTRIBUTES *attributes));
- OVR_DECLARE_HIDFUNC(HidD_GetManufacturerString, BOOLEAN, (HANDLE hidDev, PVOID buffer, ULONG bufferLength));
- OVR_DECLARE_HIDFUNC(HidD_GetProductString, BOOLEAN, (HANDLE hidDev, PVOID buffer, ULONG bufferLength));
- OVR_DECLARE_HIDFUNC(HidD_GetSerialNumberString, BOOLEAN, (HANDLE hidDev, PVOID buffer, ULONG bufferLength));
- OVR_DECLARE_HIDFUNC(HidD_GetPreparsedData, BOOLEAN, (HANDLE hidDev, HIDP_PREPARSED_DATA **preparsedData));
- OVR_DECLARE_HIDFUNC(HidD_FreePreparsedData, BOOLEAN, (HIDP_PREPARSED_DATA *preparsedData));
- OVR_DECLARE_HIDFUNC(HidP_GetCaps, NTSTATUS,(HIDP_PREPARSED_DATA *preparsedData, HIDP_CAPS* caps));
-
- HANDLE CreateHIDFile(const char* path, bool exclusiveAccess = true) const
- {
- return ::CreateFileA(path, GENERIC_WRITE|GENERIC_READ,
- (!exclusiveAccess) ? (FILE_SHARE_READ|FILE_SHARE_WRITE) : 0x0,
- NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
- }
-
- // Helper functions to fill in HIDDeviceDesc from open device handle.
- bool initVendorProductVersion(HANDLE hidDev, HIDDeviceDesc* desc) const;
- bool initUsage(HANDLE hidDev, HIDDeviceDesc* desc) const;
- void initStrings(HANDLE hidDev, HIDDeviceDesc* desc) const;
-
- bool getFullDesc(HANDLE hidDev, HIDDeviceDesc* desc) const;
-};
-
-}} // namespace OVR::Win32
-
-#endif // OVR_Win32_HIDDevice_h
+/************************************************************************************
+
+Filename : OVR_Win32_HIDDevice.h
+Content : Win32 HID device implementation.
+Created : February 22, 2013
+Authors : Lee Cooper
+
+Copyright : Copyright 2013 Oculus VR, Inc. All Rights reserved.
+
+Use of this software is subject to the terms of the Oculus license
+agreement provided at the time of installation or download, or which
+otherwise accompanies this software in either electronic or hard copy form.
+
+*************************************************************************************/
+
+#ifndef OVR_Win32_HIDDevice_h
+#define OVR_Win32_HIDDevice_h
+
+#include "OVR_HIDDevice.h"
+#include "OVR_Win32_DeviceManager.h"
+
+#include <windows.h>
+#include <setupapi.h>
+
+//-------------------------------------------------------------------------------------
+// Define needed "hidsdi.h" functionality to avoid requiring DDK installation.
+// #include "hidsdi.h"
+
+#ifndef _HIDSDI_H
+#define _HIDSDI_H
+#include <pshpack4.h>
+
+#define HIDP_STATUS_SUCCESS (0x11 << 16)
+struct HIDP_PREPARSED_DATA;
+
+struct HIDD_ATTRIBUTES
+{
+ ULONG Size; // = sizeof (struct _HIDD_ATTRIBUTES)
+ USHORT VendorID;
+ USHORT ProductID;
+ USHORT VersionNumber;
+};
+
+struct HIDP_CAPS
+{
+ USHORT Usage;
+ USHORT UsagePage;
+ USHORT InputReportByteLength;
+ USHORT OutputReportByteLength;
+ USHORT FeatureReportByteLength;
+ USHORT Reserved[17];
+
+ USHORT NumberLinkCollectionNodes;
+ USHORT NumberInputButtonCaps;
+ USHORT NumberInputValueCaps;
+ USHORT NumberInputDataIndices;
+ USHORT NumberOutputButtonCaps;
+ USHORT NumberOutputValueCaps;
+ USHORT NumberOutputDataIndices;
+ USHORT NumberFeatureButtonCaps;
+ USHORT NumberFeatureValueCaps;
+ USHORT NumberFeatureDataIndices;
+};
+
+#include <poppack.h>
+#endif
+
+
+namespace OVR { namespace Win32 {
+
+class HIDDeviceManager;
+class DeviceManager;
+
+//-------------------------------------------------------------------------------------
+// ***** Win32 HIDDevice
+
+class HIDDevice : public OVR::HIDDevice, public DeviceManagerThread::Notifier
+{
+public:
+
+ HIDDevice(HIDDeviceManager* manager);
+
+ // This is a minimal constructor used during enumeration for us to pass
+ // a HIDDevice to the visit function (so that it can query feature reports).
+ HIDDevice(HIDDeviceManager* manager, HANDLE device);
+
+ ~HIDDevice();
+
+ bool HIDInitialize(const String& path);
+ void HIDShutdown();
+
+ // OVR::HIDDevice
+ bool SetFeatureReport(UByte* data, UInt32 length);
+ bool GetFeatureReport(UByte* data, UInt32 length);
+
+
+ // DeviceManagerThread::Notifier
+ void OnOverlappedEvent(HANDLE hevent);
+ UInt64 OnTicks(UInt64 ticksMks);
+ bool OnDeviceMessage(DeviceMessageType messageType, const String& devicePath, bool* error);
+
+private:
+ bool openDevice();
+ bool initInfo();
+ bool initializeRead();
+ bool processReadResult();
+ void closeDevice();
+ void closeDeviceOnIOError();
+
+ bool inMinimalMode;
+ HIDDeviceManager* HIDManager;
+ HANDLE Device;
+ HIDDeviceDesc DevDesc;
+
+ OVERLAPPED ReadOverlapped;
+ bool ReadRequested;
+
+ enum { ReadBufferSize = 96 };
+ UByte ReadBuffer[ReadBufferSize];
+
+ UInt16 InputReportBufferLength;
+ UInt16 OutputReportBufferLength;
+ UInt16 FeatureReportBufferLength;
+};
+
+//-------------------------------------------------------------------------------------
+// ***** Win32 HIDDeviceManager
+
+class HIDDeviceManager : public OVR::HIDDeviceManager
+{
+ friend class HIDDevice;
+public:
+
+ HIDDeviceManager(DeviceManager* manager);
+ virtual ~HIDDeviceManager();
+
+ virtual bool Initialize();
+ virtual void Shutdown();
+
+ virtual bool Enumerate(HIDEnumerateVisitor* enumVisitor);
+ virtual OVR::HIDDevice* Open(const String& path);
+
+ // Fills HIDDeviceDesc by using the path.
+ // Returns 'true' if successful, 'false' otherwise.
+ bool GetHIDDeviceDesc(const String& path, HIDDeviceDesc* pdevDesc) const;
+
+ GUID GetHIDGuid() { return HidGuid; }
+
+ static HIDDeviceManager* CreateInternal(DeviceManager* manager);
+
+private:
+
+ DeviceManager* Manager; // Back pointer can just be a raw pointer.
+
+ HMODULE hHidLib;
+ GUID HidGuid;
+
+ // Macros to declare and resolve needed functions from library.
+#define OVR_DECLARE_HIDFUNC(func, rettype, args) \
+typedef rettype (__stdcall *PFn_##func) args; \
+PFn_##func func;
+#define OVR_RESOLVE_HIDFUNC(func) \
+func = (PFn_##func)::GetProcAddress(hHidLib, #func)
+
+ OVR_DECLARE_HIDFUNC(HidD_GetHidGuid, void, (GUID *hidGuid));
+ OVR_DECLARE_HIDFUNC(HidD_SetNumInputBuffers, BOOLEAN, (HANDLE hidDev, ULONG numberBuffers));
+ OVR_DECLARE_HIDFUNC(HidD_GetFeature, BOOLEAN, (HANDLE hidDev, PVOID buffer, ULONG bufferLength));
+ OVR_DECLARE_HIDFUNC(HidD_SetFeature, BOOLEAN, (HANDLE hidDev, PVOID buffer, ULONG bufferLength));
+ OVR_DECLARE_HIDFUNC(HidD_GetAttributes, BOOLEAN, (HANDLE hidDev, HIDD_ATTRIBUTES *attributes));
+ OVR_DECLARE_HIDFUNC(HidD_GetManufacturerString, BOOLEAN, (HANDLE hidDev, PVOID buffer, ULONG bufferLength));
+ OVR_DECLARE_HIDFUNC(HidD_GetProductString, BOOLEAN, (HANDLE hidDev, PVOID buffer, ULONG bufferLength));
+ OVR_DECLARE_HIDFUNC(HidD_GetSerialNumberString, BOOLEAN, (HANDLE hidDev, PVOID buffer, ULONG bufferLength));
+ OVR_DECLARE_HIDFUNC(HidD_GetPreparsedData, BOOLEAN, (HANDLE hidDev, HIDP_PREPARSED_DATA **preparsedData));
+ OVR_DECLARE_HIDFUNC(HidD_FreePreparsedData, BOOLEAN, (HIDP_PREPARSED_DATA *preparsedData));
+ OVR_DECLARE_HIDFUNC(HidP_GetCaps, NTSTATUS,(HIDP_PREPARSED_DATA *preparsedData, HIDP_CAPS* caps));
+
+ HANDLE CreateHIDFile(const char* path, bool exclusiveAccess = true) const
+ {
+ return ::CreateFileA(path, GENERIC_WRITE|GENERIC_READ,
+ (!exclusiveAccess) ? (FILE_SHARE_READ|FILE_SHARE_WRITE) : 0x0,
+ NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
+ }
+
+ // Helper functions to fill in HIDDeviceDesc from open device handle.
+ bool initVendorProductVersion(HANDLE hidDev, HIDDeviceDesc* desc) const;
+ bool initUsage(HANDLE hidDev, HIDDeviceDesc* desc) const;
+ void initStrings(HANDLE hidDev, HIDDeviceDesc* desc) const;
+
+ bool getFullDesc(HANDLE hidDev, HIDDeviceDesc* desc) const;
+};
+
+}} // namespace OVR::Win32
+
+#endif // OVR_Win32_HIDDevice_h