oculus1

annotate libovr/Src/OVR_HIDDevice.h @ 23:0c76f70fb7e9

merged
author John Tsiombikas <nuclear@member.fsf.org>
date Sat, 28 Sep 2013 04:13:33 +0300
parents
children
rev   line source
nuclear@1 1 /************************************************************************************
nuclear@1 2
nuclear@1 3 Filename : OVR_HIDDevice.h
nuclear@1 4 Content : Cross platform HID device interface.
nuclear@1 5 Created : February 22, 2013
nuclear@1 6 Authors : Lee Cooper
nuclear@1 7
nuclear@1 8 Copyright : Copyright 2013 Oculus VR, Inc. All Rights reserved.
nuclear@1 9
nuclear@1 10 Use of this software is subject to the terms of the Oculus license
nuclear@1 11 agreement provided at the time of installation or download, or which
nuclear@1 12 otherwise accompanies this software in either electronic or hard copy form.
nuclear@1 13
nuclear@1 14 *************************************************************************************/
nuclear@1 15
nuclear@1 16 #ifndef OVR_HIDDevice_h
nuclear@1 17 #define OVR_HIDDevice_h
nuclear@1 18
nuclear@1 19 #include "OVR_HIDDeviceBase.h"
nuclear@1 20
nuclear@1 21 #include "Kernel/OVR_RefCount.h"
nuclear@1 22 #include "Kernel/OVR_String.h"
nuclear@1 23 #include "Kernel/OVR_Timer.h"
nuclear@1 24
nuclear@1 25 namespace OVR {
nuclear@1 26
nuclear@1 27 class HIDDevice;
nuclear@1 28 class DeviceManager;
nuclear@1 29
nuclear@1 30 // HIDDeviceDesc contains interesting attributes of a HID device, including a Path
nuclear@1 31 // that can be used to create it.
nuclear@1 32 struct HIDDeviceDesc
nuclear@1 33 {
nuclear@1 34 UInt16 VendorId;
nuclear@1 35 UInt16 ProductId;
nuclear@1 36 UInt16 VersionNumber;
nuclear@1 37 UInt16 Usage;
nuclear@1 38 UInt16 UsagePage;
nuclear@1 39 String Path; // Platform specific.
nuclear@1 40 String Manufacturer;
nuclear@1 41 String Product;
nuclear@1 42 String SerialNumber;
nuclear@1 43 };
nuclear@1 44
nuclear@1 45 // HIDEnumerateVisitor exposes a Visit interface called for every detected device
nuclear@1 46 // by HIDDeviceManager::Enumerate.
nuclear@1 47 class HIDEnumerateVisitor
nuclear@1 48 {
nuclear@1 49 public:
nuclear@1 50
nuclear@1 51 // Should return true if we are interested in supporting
nuclear@1 52 // this HID VendorId and ProductId pair.
nuclear@1 53 virtual bool MatchVendorProduct(UInt16 vendorId, UInt16 productId)
nuclear@1 54 { OVR_UNUSED2(vendorId, productId); return true; }
nuclear@1 55
nuclear@1 56 // Override to get notified about available device. Will only be called for
nuclear@1 57 // devices that matched MatchVendorProduct.
nuclear@1 58 virtual void Visit(HIDDevice&, const HIDDeviceDesc&) { }
nuclear@1 59 };
nuclear@1 60
nuclear@1 61
nuclear@1 62 //-------------------------------------------------------------------------------------
nuclear@1 63 // ***** HIDDeviceManager
nuclear@1 64
nuclear@1 65 // Internal manager for enumerating and opening HID devices.
nuclear@1 66 // If an OVR::DeviceManager is created then an OVR::HIDDeviceManager will automatically be created and can be accessed from the
nuclear@1 67 // DeviceManager by calling 'GetHIDDeviceManager()'. When using HIDDeviceManager in standalone mode, the client must call
nuclear@1 68 // 'Create' below.
nuclear@1 69 class HIDDeviceManager : public RefCountBase<HIDDeviceManager>
nuclear@1 70 {
nuclear@1 71 public:
nuclear@1 72
nuclear@1 73 // Creates a new HIDDeviceManager. Only one instance of HIDDeviceManager should be created at a time.
nuclear@1 74 static HIDDeviceManager* Create();
nuclear@1 75
nuclear@1 76 // Enumerate HID devices using a HIDEnumerateVisitor derived visitor class.
nuclear@1 77 virtual bool Enumerate(HIDEnumerateVisitor* enumVisitor) = 0;
nuclear@1 78
nuclear@1 79 // Open a HID device with the specified path.
nuclear@1 80 virtual HIDDevice* Open(const String& path) = 0;
nuclear@1 81
nuclear@1 82 protected:
nuclear@1 83 HIDDeviceManager()
nuclear@1 84 { }
nuclear@1 85 };
nuclear@1 86
nuclear@1 87 //-------------------------------------------------------------------------------------
nuclear@1 88 // ***** HIDDevice
nuclear@1 89
nuclear@1 90 // HID device object. This is designed to be operated in synchronous
nuclear@1 91 // and asynchronous modes. With no handler set, input messages will be
nuclear@1 92 // stored and can be retrieved by calling 'Read' or 'ReadBlocking'.
nuclear@1 93 class HIDDevice : public RefCountBase<HIDDevice>, public HIDDeviceBase
nuclear@1 94 {
nuclear@1 95 public:
nuclear@1 96
nuclear@1 97 HIDDevice()
nuclear@1 98 : Handler(NULL)
nuclear@1 99 {
nuclear@1 100 }
nuclear@1 101
nuclear@1 102 virtual ~HIDDevice() {}
nuclear@1 103
nuclear@1 104 virtual bool SetFeatureReport(UByte* data, UInt32 length) = 0;
nuclear@1 105 virtual bool GetFeatureReport(UByte* data, UInt32 length) = 0;
nuclear@1 106
nuclear@1 107 // Not yet implemented.
nuclear@1 108 /*
nuclear@1 109 virtual bool Write(UByte* data, UInt32 length) = 0;
nuclear@1 110
nuclear@1 111 virtual bool Read(UByte* pData, UInt32 length, UInt32 timeoutMilliS) = 0;
nuclear@1 112 virtual bool ReadBlocking(UByte* pData, UInt32 length) = 0;
nuclear@1 113 */
nuclear@1 114
nuclear@1 115 class HIDHandler
nuclear@1 116 {
nuclear@1 117 public:
nuclear@1 118 virtual void OnInputReport(UByte* pData, UInt32 length)
nuclear@1 119 { OVR_UNUSED2(pData, length); }
nuclear@1 120
nuclear@1 121 virtual UInt64 OnTicks(UInt64 ticksMks)
nuclear@1 122 { OVR_UNUSED1(ticksMks); return Timer::MksPerSecond * 1000; ; }
nuclear@1 123
nuclear@1 124 enum HIDDeviceMessageType
nuclear@1 125 {
nuclear@1 126 HIDDeviceMessage_DeviceAdded = 0,
nuclear@1 127 HIDDeviceMessage_DeviceRemoved = 1
nuclear@1 128 };
nuclear@1 129
nuclear@1 130 virtual void OnDeviceMessage(HIDDeviceMessageType messageType)
nuclear@1 131 { OVR_UNUSED1(messageType); }
nuclear@1 132 };
nuclear@1 133
nuclear@1 134 void SetHandler(HIDHandler* handler)
nuclear@1 135 { Handler = handler; }
nuclear@1 136
nuclear@1 137 protected:
nuclear@1 138 HIDHandler* Handler;
nuclear@1 139 };
nuclear@1 140
nuclear@1 141 } // namespace OVR
nuclear@1 142
nuclear@1 143 #endif