Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef OVR_LatencyTestImpl_h
00017 #define OVR_LatencyTestImpl_h
00018
00019 #include "OVR_HIDDeviceImpl.h"
00020
00021 namespace OVR {
00022
00023 struct LatencyTestSamplesMessage;
00024 struct LatencyTestButtonMessage;
00025 struct LatencyTestStartedMessage;
00026 struct LatencyTestColorDetectedMessage;
00027
00028
00029
00030 class LatencyTestDeviceFactory : public DeviceFactory
00031 {
00032 public:
00033 static LatencyTestDeviceFactory Instance;
00034
00035
00036 virtual void EnumerateDevices(EnumerateVisitor& visitor);
00037
00038 virtual bool MatchVendorProduct(UInt16 vendorId, UInt16 productId) const;
00039 virtual bool DetectHIDDevice(DeviceManager* pdevMgr, const HIDDeviceDesc& desc);
00040
00041 protected:
00042 DeviceManager* getManager() const { return (DeviceManager*) pManager; }
00043 };
00044
00045
00046
00047 class LatencyTestDeviceCreateDesc : public HIDDeviceCreateDesc
00048 {
00049 public:
00050 LatencyTestDeviceCreateDesc(DeviceFactory* factory, const HIDDeviceDesc& hidDesc)
00051 : HIDDeviceCreateDesc(factory, Device_LatencyTester, hidDesc) { }
00052
00053 virtual DeviceCreateDesc* Clone() const
00054 {
00055 return new LatencyTestDeviceCreateDesc(*this);
00056 }
00057
00058 virtual DeviceBase* NewDeviceInstance();
00059
00060 virtual MatchResult MatchDevice(const DeviceCreateDesc& other,
00061 DeviceCreateDesc**) const
00062 {
00063 if ((other.Type == Device_LatencyTester) && (pFactory == other.pFactory))
00064 {
00065 const LatencyTestDeviceCreateDesc& s2 = (const LatencyTestDeviceCreateDesc&) other;
00066 if (MatchHIDDevice(s2.HIDDesc))
00067 return Match_Found;
00068 }
00069 return Match_None;
00070 }
00071
00072 virtual bool MatchHIDDevice(const HIDDeviceDesc& hidDesc) const
00073 {
00074
00075 return ((HIDDesc.Path.CompareNoCase(hidDesc.Path) == 0) &&
00076 (HIDDesc.SerialNumber == hidDesc.SerialNumber));
00077 }
00078 virtual bool GetDeviceInfo(DeviceInfo* info) const;
00079 };
00080
00081
00082
00083
00084
00085
00086
00087 class LatencyTestDeviceImpl : public HIDDeviceImpl<OVR::LatencyTestDevice>
00088 {
00089 public:
00090 LatencyTestDeviceImpl(LatencyTestDeviceCreateDesc* createDesc);
00091 ~LatencyTestDeviceImpl();
00092
00093
00094 virtual bool Initialize(DeviceBase* parent);
00095 virtual void Shutdown();
00096
00097
00098 virtual void OnInputReport(UByte* pData, UInt32 length);
00099
00100
00101 virtual bool SetConfiguration(const OVR::LatencyTestConfiguration& configuration, bool waitFlag = false);
00102 virtual bool GetConfiguration(OVR::LatencyTestConfiguration* configuration);
00103
00104 virtual bool SetCalibrate(const Color& calibrationColor, bool waitFlag = false);
00105
00106 virtual bool SetStartTest(const Color& targetColor, bool waitFlag = false);
00107 virtual bool SetDisplay(const LatencyTestDisplay& display, bool waitFlag = false);
00108
00109 protected:
00110 bool openDevice(const char** errorFormatString);
00111 void closeDevice();
00112 void closeDeviceOnIOError();
00113
00114 bool initializeRead();
00115 bool processReadResult();
00116
00117 bool setConfiguration(const OVR::LatencyTestConfiguration& configuration);
00118 bool getConfiguration(OVR::LatencyTestConfiguration* configuration);
00119 bool setCalibrate(const Color& calibrationColor);
00120 bool setStartTest(const Color& targetColor);
00121 bool setDisplay(const OVR::LatencyTestDisplay& display);
00122
00123
00124 void onLatencyTestSamplesMessage(LatencyTestSamplesMessage* message);
00125 void onLatencyTestButtonMessage(LatencyTestButtonMessage* message);
00126 void onLatencyTestStartedMessage(LatencyTestStartedMessage* message);
00127 void onLatencyTestColorDetectedMessage(LatencyTestColorDetectedMessage* message);
00128
00129 };
00130
00131 }
00132
00133 #endif // OVR_LatencyTestImpl_h