summaryrefslogtreecommitdiff
path: root/sensors/SimpleDeviceOrientationSensor
diff options
context:
space:
mode:
authorkarlf <[email protected]>2016-08-11 13:28:13 -0700
committerkarlf <[email protected]>2016-08-11 13:28:13 -0700
commit96eb96dfb613e4c745db6bd1f53a92fe7e2290fc (patch)
treead5f3ede5cbcd6b598677ce41bcf8318471bdd92 /sensors/SimpleDeviceOrientationSensor
parent687b274aa38fd05c8c26e3068932121876d7f745 (diff)
Updated for "Windows 10 Anniversary Update" (Version 1607)
Diffstat (limited to 'sensors/SimpleDeviceOrientationSensor')
-rw-r--r--sensors/SimpleDeviceOrientationSensor/Device.h3
-rw-r--r--sensors/SimpleDeviceOrientationSensor/README.md7
-rw-r--r--sensors/SimpleDeviceOrientationSensor/SensorsTrace.h10
-rw-r--r--sensors/SimpleDeviceOrientationSensor/SimpleDeviceOrientationSensor.inxbin3124 -> 6446 bytes
-rw-r--r--sensors/SimpleDeviceOrientationSensor/SimpleDeviceOrientationSensor.sln18
-rw-r--r--sensors/SimpleDeviceOrientationSensor/SimpleDeviceOrientationSensor.vcxproj4
-rw-r--r--sensors/SimpleDeviceOrientationSensor/SimpleDeviceOrientationSensor.vcxproj.Filters8
-rw-r--r--sensors/SimpleDeviceOrientationSensor/client.cpp34
-rw-r--r--sensors/SimpleDeviceOrientationSensor/device.cpp5
9 files changed, 59 insertions, 30 deletions
diff --git a/sensors/SimpleDeviceOrientationSensor/Device.h b/sensors/SimpleDeviceOrientationSensor/Device.h
index 67be3deb..b75b5ceb 100644
--- a/sensors/SimpleDeviceOrientationSensor/Device.h
+++ b/sensors/SimpleDeviceOrientationSensor/Device.h
@@ -49,6 +49,7 @@ typedef enum
SENSOR_MANUFACTURER,
SENSOR_MODEL,
SENSOR_PERSISTENT_UNIQUEID,
+ SENSOR_ISPRIMARY,
SENSOR_ENUMERATION_PROPERTIES_COUNT
} SENSOR_ENUMERATION_PROPERTIES_INDEX;
@@ -96,6 +97,8 @@ private:
ULONG m_Interval;
BOOLEAN m_FirstSample;
ULONG m_StartTime;
+ ULONGLONG m_SampleCount;
+
PSENSOR_COLLECTION_LIST m_pData; // Sdo data that is going to push to clx
ABI::Windows::Devices::Sensors::SimpleOrientation m_LastSample;
diff --git a/sensors/SimpleDeviceOrientationSensor/README.md b/sensors/SimpleDeviceOrientationSensor/README.md
deleted file mode 100644
index 21f6e16f..00000000
--- a/sensors/SimpleDeviceOrientationSensor/README.md
+++ /dev/null
@@ -1,7 +0,0 @@
-SimpleDeviceOrientationSensor
-=============================
-
-The SimpleDeviceOrientationSensor sample shows how to write a UMDF v2 sensor driver to output Simple Device Orientation values.
-
-## Universal Windows Driver Compliant
-This sample builds a Universal Windows Driver. It uses only APIs and DDIs that are included in OneCoreUAP.
diff --git a/sensors/SimpleDeviceOrientationSensor/SensorsTrace.h b/sensors/SimpleDeviceOrientationSensor/SensorsTrace.h
index c17b7040..6098864d 100644
--- a/sensors/SimpleDeviceOrientationSensor/SensorsTrace.h
+++ b/sensors/SimpleDeviceOrientationSensor/SensorsTrace.h
@@ -83,6 +83,16 @@ extern "C" {
#define WPP_LEVEL_FLAGS_SENSOREXIT_POST(LEVEL, FLAGS, status) /*TraceMessage()*/; \
}
+
+
+// WPP Recorder -------------------------------------------------------------------------------------------
+//
+// The following two macros are required to enable WPP Recorder functionality for clients of the Sensor Class Extension
+//
+#define WPP_RECORDER_LEVEL_FLAGS_SENSOREXIT_FILTER(LEVEL, FLAGS, status) WPP_RECORDER_LEVEL_FLAGS_FILTER(LEVEL, FLAGS)
+#define WPP_RECORDER_LEVEL_FLAGS_SENSOREXIT_ARGS(LEVEL, FLAGS, status) WPP_RECORDER_LEVEL_FLAGS_ARGS(LEVEL, FLAGS)
+
+
#ifdef __cplusplus
}
#endif
diff --git a/sensors/SimpleDeviceOrientationSensor/SimpleDeviceOrientationSensor.inx b/sensors/SimpleDeviceOrientationSensor/SimpleDeviceOrientationSensor.inx
index 9323c4c8..7de2e6f0 100644
--- a/sensors/SimpleDeviceOrientationSensor/SimpleDeviceOrientationSensor.inx
+++ b/sensors/SimpleDeviceOrientationSensor/SimpleDeviceOrientationSensor.inx
Binary files differ
diff --git a/sensors/SimpleDeviceOrientationSensor/SimpleDeviceOrientationSensor.sln b/sensors/SimpleDeviceOrientationSensor/SimpleDeviceOrientationSensor.sln
index fc229bef..3dc42976 100644
--- a/sensors/SimpleDeviceOrientationSensor/SimpleDeviceOrientationSensor.sln
+++ b/sensors/SimpleDeviceOrientationSensor/SimpleDeviceOrientationSensor.sln
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0
MinimumVisualStudioVersion = 12.0
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SimpleDeviceOrientationSensor", "SimpleDeviceOrientationSensor.vcxproj", "{EC36A603-B217-4538-80D9-C78BA42A3CA7}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SimpleDeviceOrientationSensor", "SimpleDeviceOrientationSensor.vcxproj", "{EEA3DEEA-AF9A-45E3-B6AE-070677AC1032}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -13,14 +13,14 @@ Global
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {EC36A603-B217-4538-80D9-C78BA42A3CA7}.Debug|Win32.ActiveCfg = Debug|Win32
- {EC36A603-B217-4538-80D9-C78BA42A3CA7}.Debug|Win32.Build.0 = Debug|Win32
- {EC36A603-B217-4538-80D9-C78BA42A3CA7}.Release|Win32.ActiveCfg = Release|Win32
- {EC36A603-B217-4538-80D9-C78BA42A3CA7}.Release|Win32.Build.0 = Release|Win32
- {EC36A603-B217-4538-80D9-C78BA42A3CA7}.Debug|x64.ActiveCfg = Debug|x64
- {EC36A603-B217-4538-80D9-C78BA42A3CA7}.Debug|x64.Build.0 = Debug|x64
- {EC36A603-B217-4538-80D9-C78BA42A3CA7}.Release|x64.ActiveCfg = Release|x64
- {EC36A603-B217-4538-80D9-C78BA42A3CA7}.Release|x64.Build.0 = Release|x64
+ {EEA3DEEA-AF9A-45E3-B6AE-070677AC1032}.Debug|Win32.ActiveCfg = Debug|Win32
+ {EEA3DEEA-AF9A-45E3-B6AE-070677AC1032}.Debug|Win32.Build.0 = Debug|Win32
+ {EEA3DEEA-AF9A-45E3-B6AE-070677AC1032}.Release|Win32.ActiveCfg = Release|Win32
+ {EEA3DEEA-AF9A-45E3-B6AE-070677AC1032}.Release|Win32.Build.0 = Release|Win32
+ {EEA3DEEA-AF9A-45E3-B6AE-070677AC1032}.Debug|x64.ActiveCfg = Debug|x64
+ {EEA3DEEA-AF9A-45E3-B6AE-070677AC1032}.Debug|x64.Build.0 = Debug|x64
+ {EEA3DEEA-AF9A-45E3-B6AE-070677AC1032}.Release|x64.ActiveCfg = Release|x64
+ {EEA3DEEA-AF9A-45E3-B6AE-070677AC1032}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/sensors/SimpleDeviceOrientationSensor/SimpleDeviceOrientationSensor.vcxproj b/sensors/SimpleDeviceOrientationSensor/SimpleDeviceOrientationSensor.vcxproj
index 1d4e8029..ee3d87a3 100644
--- a/sensors/SimpleDeviceOrientationSensor/SimpleDeviceOrientationSensor.vcxproj
+++ b/sensors/SimpleDeviceOrientationSensor/SimpleDeviceOrientationSensor.vcxproj
@@ -19,12 +19,12 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{EC36A603-B217-4538-80D9-C78BA42A3CA7}</ProjectGuid>
+ <ProjectGuid>{EEA3DEEA-AF9A-45E3-B6AE-070677AC1032}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<UMDF_VERSION_MAJOR>2</UMDF_VERSION_MAJOR>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{7DC023F6-D608-4C6D-A3F0-523D5E12FE9A}</SampleGuid>
+ <SampleGuid>{1854CF02-14B5-40BD-A09F-4C744EFB31A8}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/sensors/SimpleDeviceOrientationSensor/SimpleDeviceOrientationSensor.vcxproj.Filters b/sensors/SimpleDeviceOrientationSensor/SimpleDeviceOrientationSensor.vcxproj.Filters
index f865d363..45db253b 100644
--- a/sensors/SimpleDeviceOrientationSensor/SimpleDeviceOrientationSensor.vcxproj.Filters
+++ b/sensors/SimpleDeviceOrientationSensor/SimpleDeviceOrientationSensor.vcxproj.Filters
@@ -3,19 +3,19 @@
<ItemGroup>
<Filter Include="Source Files">
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{FD6ED732-A690-4E99-AA26-09F10BFFED69}</UniqueIdentifier>
+ <UniqueIdentifier>{00557774-6CAE-4A42-9465-A85A4F048686}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{BB77592E-3BBA-49CC-8A42-844511BBEFC2}</UniqueIdentifier>
+ <UniqueIdentifier>{68764800-116B-4343-8B60-49693688236E}</UniqueIdentifier>
</Filter>
<Filter Include="Resource Files">
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml</Extensions>
- <UniqueIdentifier>{318968FF-3ECA-45D1-AC01-8FDEDBD8C1C0}</UniqueIdentifier>
+ <UniqueIdentifier>{25662F7E-DB14-43DD-84A3-E8B7327B6ECE}</UniqueIdentifier>
</Filter>
<Filter Include="Driver Files">
<Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{63340E09-99C6-45A8-B190-3D61226BF8C2}</UniqueIdentifier>
+ <UniqueIdentifier>{372D6D06-B60D-4D04-901A-FC8530D3AC42}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/sensors/SimpleDeviceOrientationSensor/client.cpp b/sensors/SimpleDeviceOrientationSensor/client.cpp
index d0668544..c167b6c2 100644
--- a/sensors/SimpleDeviceOrientationSensor/client.cpp
+++ b/sensors/SimpleDeviceOrientationSensor/client.cpp
@@ -34,6 +34,8 @@ NTSTATUS SdoDevice::GetData()
m_StartTime = 0;
TraceError("SDOS %!FUNC! GetPerformanceTime %!STATUS!", Status);
}
+
+ m_SampleCount = 0;
}
pSimulator = GetHardwareSimulatorContextFromInstance(m_SimulatorInstance);
@@ -127,8 +129,17 @@ VOID SdoDevice::OnTimerExpire(
}
else
{
- WaitTime = pDevice->m_Interval -
- ((CurrentTimeMs - pDevice->m_StartTime) % pDevice->m_Interval);
+ pDevice->m_SampleCount++;
+ if (CurrentTimeMs > (pDevice->m_StartTime + (pDevice->m_Interval * (pDevice->m_SampleCount + 1))))
+ {
+ // If we skipped two or more beats, reschedule the timer with a zero due time to catch up on missing samples
+ WaitTime = 0;
+ }
+ else
+ {
+ WaitTime = (pDevice->m_StartTime +
+ (pDevice->m_Interval * (pDevice->m_SampleCount + 1))) - CurrentTimeMs;
+ }
WaitTime = WDF_REL_TIMEOUT_IN_MS(WaitTime);
}
}
@@ -154,7 +165,7 @@ NTSTATUS SdoDevice::OnStart(
if (nullptr == pDevice)
{
Status = STATUS_INVALID_PARAMETER;
- TraceError("SDOS %!FUNC! Sensor(%08X) parameter is invalid. Failed %!STATUS!", (INT)SensorInstance, Status);
+ TraceError("SDOS %!FUNC! Sensor(0x%p) parameter is invalid. Failed %!STATUS!", SensorInstance, Status);
}
else if (0 == pDevice->m_Interval)
{
@@ -212,7 +223,7 @@ NTSTATUS SdoDevice::OnStop(
if (nullptr == pDevice)
{
Status = STATUS_INVALID_PARAMETER;
- TraceError("SDOS %!FUNC! Sensor(%08X) parameter is invalid. Failed %!STATUS!", (INT)SensorInstance, Status);
+ TraceError("SDOS %!FUNC! Sensor(0x%p) parameter is invalid. Failed %!STATUS!", SensorInstance, Status);
}
if (NT_SUCCESS(Status))
@@ -428,14 +439,14 @@ NTSTATUS SdoDevice::OnGetDataInterval(
if (nullptr == pDevice)
{
Status = STATUS_INVALID_PARAMETER;
- TraceError("SDOS %!FUNC! Sensor(%08X) parameter is invalid. Failed %!STATUS!", (INT)SensorInstance, Status);
+ TraceError("SDOS %!FUNC! Sensor(0x%p) parameter is invalid. Failed %!STATUS!", SensorInstance, Status);
goto Exit;
}
if (nullptr == DataRateMs)
{
Status = STATUS_INVALID_PARAMETER;
- TraceError("SDOS %!FUNC! DataRateMs(%08X) parameter is invalid. Failed %!STATUS!", (INT)DataRateMs, Status);
+ TraceError("SDOS %!FUNC! DataRateMs(0x%p) parameter is invalid. Failed %!STATUS!", DataRateMs, Status);
goto Exit;
}
@@ -458,10 +469,17 @@ NTSTATUS SdoDevice::OnSetDataInterval(
SENSOR_FunctionEnter();
- if (nullptr == pDevice || Sdo_Mininum_DataInterval > DataRateMs)
+ if (nullptr == pDevice)
+ {
+ Status = STATUS_INVALID_PARAMETER;
+ TraceError("SDOS %!FUNC! Sensor(0x%p) parameter is invalid. Failed %!STATUS!", SensorInstance, Status);
+ goto Exit;
+ }
+
+ if (Sdo_Mininum_DataInterval > DataRateMs)
{
Status = STATUS_INVALID_PARAMETER;
- TraceError("SDOS %!FUNC! Sensor(%08X) parameter is invalid. Failed %!STATUS!", (INT)SensorInstance, Status);
+ TraceError("SDOS %!FUNC! DataRateMs(%d) parameter is smaller than the minimum data interval. Failed %!STATUS!", DataRateMs, Status);
goto Exit;
}
diff --git a/sensors/SimpleDeviceOrientationSensor/device.cpp b/sensors/SimpleDeviceOrientationSensor/device.cpp
index 369d367c..e9624301 100644
--- a/sensors/SimpleDeviceOrientationSensor/device.cpp
+++ b/sensors/SimpleDeviceOrientationSensor/device.cpp
@@ -115,6 +115,11 @@ NTSTATUS SdoDevice::Initialize(
m_pEnumerationProperties->List[SENSOR_PERSISTENT_UNIQUEID].Key = DEVPKEY_Sensor_PersistentUniqueId;
InitPropVariantFromCLSID(GUID_SdoDevice_UniqueID,
&(m_pEnumerationProperties->List[SENSOR_PERSISTENT_UNIQUEID].Value));
+
+ m_pEnumerationProperties->List[SENSOR_ISPRIMARY].Key = DEVPKEY_Sensor_IsPrimary;
+ InitPropVariantFromBoolean(FALSE,
+ &(m_pEnumerationProperties->List[SENSOR_ISPRIMARY].Value)); // This value should be set to TRUE if multiple simple device orientation sensors
+ // exist on the system and this sensor is the primary sensor
}
//