summaryrefslogtreecommitdiff
path: root/sensors
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
parent687b274aa38fd05c8c26e3068932121876d7f745 (diff)
Updated for "Windows 10 Anniversary Update" (Version 1607)
Diffstat (limited to 'sensors')
-rw-r--r--sensors/ADXL345Acc/ADXL345Acc.inxbin2593 -> 5384 bytes
-rw-r--r--sensors/ADXL345Acc/ADXL345Acc.sln18
-rw-r--r--sensors/ADXL345Acc/ADXL345Acc.vcxproj4
-rw-r--r--sensors/ADXL345Acc/ADXL345Acc.vcxproj.Filters8
-rw-r--r--sensors/ADXL345Acc/Device.h17
-rw-r--r--sensors/ADXL345Acc/README.md7
-rw-r--r--sensors/ADXL345Acc/SensorsTrace.h10
-rw-r--r--sensors/ADXL345Acc/client.cpp29
-rw-r--r--sensors/Activity/Activity.inxbin2491 -> 5180 bytes
-rw-r--r--sensors/Activity/Activity.sln18
-rw-r--r--sensors/Activity/Activity.vcxproj4
-rw-r--r--sensors/Activity/Activity.vcxproj.Filters8
-rw-r--r--sensors/Activity/Device.h1
-rw-r--r--sensors/Activity/README.md8
-rw-r--r--sensors/Activity/SensorsTrace.h11
-rw-r--r--sensors/Activity/client.cpp4
-rw-r--r--sensors/Activity/device.cpp4
-rw-r--r--sensors/CustomSensors/CustomSensors.inxbin2633 -> 5464 bytes
-rw-r--r--sensors/CustomSensors/CustomSensors.sln18
-rw-r--r--sensors/CustomSensors/CustomSensors.vcxproj4
-rw-r--r--sensors/CustomSensors/CustomSensors.vcxproj.Filters8
-rw-r--r--sensors/CustomSensors/Device.h2
-rw-r--r--sensors/CustomSensors/README.md7
-rw-r--r--sensors/CustomSensors/SensorsTrace.h11
-rw-r--r--sensors/CustomSensors/client.cpp32
-rw-r--r--sensors/CustomSensors/device.cpp6
-rw-r--r--sensors/Pedometer/Device.h2
-rw-r--r--sensors/Pedometer/Pedometer.inxbin2518 -> 5234 bytes
-rw-r--r--sensors/Pedometer/Pedometer.sln18
-rw-r--r--sensors/Pedometer/Pedometer.vcxproj4
-rw-r--r--sensors/Pedometer/Pedometer.vcxproj.Filters8
-rw-r--r--sensors/Pedometer/README.md7
-rw-r--r--sensors/Pedometer/SensorsTrace.h9
-rw-r--r--sensors/Pedometer/client.cpp48
-rw-r--r--sensors/Pedometer/device.cpp5
-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
44 files changed, 262 insertions, 167 deletions
diff --git a/sensors/ADXL345Acc/ADXL345Acc.inx b/sensors/ADXL345Acc/ADXL345Acc.inx
index 1366a2dd..8d7649da 100644
--- a/sensors/ADXL345Acc/ADXL345Acc.inx
+++ b/sensors/ADXL345Acc/ADXL345Acc.inx
Binary files differ
diff --git a/sensors/ADXL345Acc/ADXL345Acc.sln b/sensors/ADXL345Acc/ADXL345Acc.sln
index 5c27390f..f3bbe543 100644
--- a/sensors/ADXL345Acc/ADXL345Acc.sln
+++ b/sensors/ADXL345Acc/ADXL345Acc.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}") = "ADXL345Acc", "ADXL345Acc.vcxproj", "{C684376E-6250-4AB8-A48E-DC4FB6EE3A16}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ADXL345Acc", "ADXL345Acc.vcxproj", "{3A526221-1444-46C8-974F-E143021E03DE}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -13,14 +13,14 @@ Global
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {C684376E-6250-4AB8-A48E-DC4FB6EE3A16}.Debug|Win32.ActiveCfg = Debug|Win32
- {C684376E-6250-4AB8-A48E-DC4FB6EE3A16}.Debug|Win32.Build.0 = Debug|Win32
- {C684376E-6250-4AB8-A48E-DC4FB6EE3A16}.Release|Win32.ActiveCfg = Release|Win32
- {C684376E-6250-4AB8-A48E-DC4FB6EE3A16}.Release|Win32.Build.0 = Release|Win32
- {C684376E-6250-4AB8-A48E-DC4FB6EE3A16}.Debug|x64.ActiveCfg = Debug|x64
- {C684376E-6250-4AB8-A48E-DC4FB6EE3A16}.Debug|x64.Build.0 = Debug|x64
- {C684376E-6250-4AB8-A48E-DC4FB6EE3A16}.Release|x64.ActiveCfg = Release|x64
- {C684376E-6250-4AB8-A48E-DC4FB6EE3A16}.Release|x64.Build.0 = Release|x64
+ {3A526221-1444-46C8-974F-E143021E03DE}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3A526221-1444-46C8-974F-E143021E03DE}.Debug|Win32.Build.0 = Debug|Win32
+ {3A526221-1444-46C8-974F-E143021E03DE}.Release|Win32.ActiveCfg = Release|Win32
+ {3A526221-1444-46C8-974F-E143021E03DE}.Release|Win32.Build.0 = Release|Win32
+ {3A526221-1444-46C8-974F-E143021E03DE}.Debug|x64.ActiveCfg = Debug|x64
+ {3A526221-1444-46C8-974F-E143021E03DE}.Debug|x64.Build.0 = Debug|x64
+ {3A526221-1444-46C8-974F-E143021E03DE}.Release|x64.ActiveCfg = Release|x64
+ {3A526221-1444-46C8-974F-E143021E03DE}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/sensors/ADXL345Acc/ADXL345Acc.vcxproj b/sensors/ADXL345Acc/ADXL345Acc.vcxproj
index 513049ee..3e04c33b 100644
--- a/sensors/ADXL345Acc/ADXL345Acc.vcxproj
+++ b/sensors/ADXL345Acc/ADXL345Acc.vcxproj
@@ -19,12 +19,12 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{C684376E-6250-4AB8-A48E-DC4FB6EE3A16}</ProjectGuid>
+ <ProjectGuid>{3A526221-1444-46C8-974F-E143021E03DE}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<UMDF_VERSION_MAJOR>2</UMDF_VERSION_MAJOR>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{F9A020EE-6465-415B-8D4F-8553D7597B98}</SampleGuid>
+ <SampleGuid>{DE16C6D3-2353-458A-96C0-0E2E2FFD8776}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/sensors/ADXL345Acc/ADXL345Acc.vcxproj.Filters b/sensors/ADXL345Acc/ADXL345Acc.vcxproj.Filters
index e4d44236..9868db4c 100644
--- a/sensors/ADXL345Acc/ADXL345Acc.vcxproj.Filters
+++ b/sensors/ADXL345Acc/ADXL345Acc.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>{583B57D3-E580-4334-B9B9-8C25E4D50003}</UniqueIdentifier>
+ <UniqueIdentifier>{8B8F5375-2938-477A-A326-BCE6C04EE921}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{68AAB8F0-C0F1-4F7D-BBD7-CB42F7AF2091}</UniqueIdentifier>
+ <UniqueIdentifier>{A8C574E7-E5DB-4D77-9103-890C1262723A}</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>{3C7195C2-BEDB-4C2D-9CE5-C27C3F75E540}</UniqueIdentifier>
+ <UniqueIdentifier>{2FDE4AFE-6848-41B7-ACF4-3F754E9570F5}</UniqueIdentifier>
</Filter>
<Filter Include="Driver Files">
<Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{71282B7A-48AC-4B37-8C18-C4F4D1336658}</UniqueIdentifier>
+ <UniqueIdentifier>{3C84808A-857E-4997-B228-0E9EB21A7A98}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/sensors/ADXL345Acc/Device.h b/sensors/ADXL345Acc/Device.h
index 7212d7b8..e1648227 100644
--- a/sensors/ADXL345Acc/Device.h
+++ b/sensors/ADXL345Acc/Device.h
@@ -48,6 +48,7 @@ typedef enum
SENSOR_ENUMERATION_PROPERTY_CONNECTION_TYPE,
SENSOR_ENUMERATION_PROPERTY_PERSISTENT_UNIQUE_ID,
SENSOR_ENUMERATION_PROPERTY_CATEGORY,
+ SENSOR_ENUMERATION_PROPERTY_ISPRIMARY,
SENSOR_ENUMERATION_PROPERTIES_COUNT
} SENSOR_ENUMERATION_PROPERTIES_INDEX;
@@ -75,8 +76,22 @@ typedef struct _REGISTER_SETTING
BYTE Value;
} REGISTER_SETTING, *PREGISTER_SETTING;
+// Return the rate that is just less than the desired report interval
+inline DATA_RATE _GetDataRateFromReportInterval(_In_ ULONG ReportInterval)
+{
+ DATA_RATE dataRate = ACCELEROMETER_SUPPORTED_DATA_RATES[0];
+
+ for (ULONG i = 0; i < ACCELEROMETER_SUPPORTED_DATA_RATES_COUNT; i++)
+ {
+ dataRate = ACCELEROMETER_SUPPORTED_DATA_RATES[i];
+ if (dataRate.DataRateInterval <= ReportInterval)
+ {
+ break;
+ }
+ }
-inline DATA_RATE _GetDataRateFromReportInterval(_In_ ULONG ReportInterval);
+ return dataRate;
+}
// Array of settings that describe the initial device configuration.
const REGISTER_SETTING g_ConfigurationSettings[] =
diff --git a/sensors/ADXL345Acc/README.md b/sensors/ADXL345Acc/README.md
deleted file mode 100644
index bc3f9de3..00000000
--- a/sensors/ADXL345Acc/README.md
+++ /dev/null
@@ -1,7 +0,0 @@
-ADXL345Accelerometer
-====================
-
-The ADXL345Accelerometer sample shows how to write a UMDF v2 driver to control an ADXL345 accelerometer chip.
-
-## 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/ADXL345Acc/SensorsTrace.h b/sensors/ADXL345Acc/SensorsTrace.h
index 75ea1480..9e35c9e4 100644
--- a/sensors/ADXL345Acc/SensorsTrace.h
+++ b/sensors/ADXL345Acc/SensorsTrace.h
@@ -10,7 +10,6 @@
#pragma once
-
#ifdef __cplusplus
extern "C" {
#endif
@@ -95,6 +94,15 @@ extern "C" {
}
+
+// 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/ADXL345Acc/client.cpp b/sensors/ADXL345Acc/client.cpp
index cd46fe66..747fd654 100644
--- a/sensors/ADXL345Acc/client.cpp
+++ b/sensors/ADXL345Acc/client.cpp
@@ -132,6 +132,12 @@ NTSTATUS ADXL345AccDevice::Initialize(
m_pEnumerationProperties->List[SENSOR_ENUMERATION_PROPERTY_CATEGORY].Key = DEVPKEY_Sensor_Category;
InitPropVariantFromCLSID(GUID_SensorCategory_Motion,
&(m_pEnumerationProperties->List[SENSOR_ENUMERATION_PROPERTY_CATEGORY].Value));
+
+ m_pEnumerationProperties->List[SENSOR_ENUMERATION_PROPERTY_ISPRIMARY].Key = DEVPKEY_Sensor_IsPrimary;
+ InitPropVariantFromBoolean(TRUE,
+ &(m_pEnumerationProperties->List[SENSOR_ENUMERATION_PROPERTY_ISPRIMARY].Value)); // This value should be set to TRUE in order for simple device orientation
+ // to pick up ACC sample readings from this sensor. If this value is set to FALSE
+ // simple device orientation may ignore this sensor.
}
}
@@ -455,7 +461,7 @@ NTSTATUS ADXL345AccDevice::OnStart(
if (nullptr == pAccDevice)
{
Status = STATUS_INVALID_PARAMETER;
- TraceError("ACC %!FUNC! Sensor(%08X) parameter is invalid %!STATUS!", (INT) SensorInstance, Status);
+ TraceError("ACC %!FUNC! Sensor(0x%p) parameter is invalid %!STATUS!", SensorInstance, Status);
}
else if (!pAccDevice->m_PoweredOn)
{
@@ -513,7 +519,7 @@ NTSTATUS ADXL345AccDevice::OnStop(
if (nullptr == pAccDevice)
{
Status = STATUS_INVALID_PARAMETER;
- TraceError("ACC %!FUNC! Sensor(%08X) parameter is invalid %!STATUS!", (INT)SensorInstance, Status);
+ TraceError("ACC %!FUNC! Sensor(0x%p) parameter is invalid %!STATUS!", SensorInstance, Status);
}
else
{
@@ -777,23 +783,6 @@ NTSTATUS ADXL345AccDevice::OnGetDataInterval(
return Status;
}
-// Return the rate that is just less than the desired report interval
-inline DATA_RATE _GetDataRateFromReportInterval(_In_ ULONG ReportInterval)
-{
- DATA_RATE dataRate = ACCELEROMETER_SUPPORTED_DATA_RATES[0];
-
- for (ULONG i = 0; i < ACCELEROMETER_SUPPORTED_DATA_RATES_COUNT; i++)
- {
- dataRate = ACCELEROMETER_SUPPORTED_DATA_RATES[i];
- if (dataRate.DataRateInterval <= ReportInterval)
- {
- break;
- }
- }
-
- return dataRate;
-}
-
// Called by Sensor CLX to set sampling rate of the sensor.
NTSTATUS ADXL345AccDevice::OnSetDataInterval(
_In_ SENSOROBJECT SensorInstance, // Sensor device object
@@ -935,7 +924,7 @@ NTSTATUS ADXL345AccDevice::OnSetDataThresholds(
if (nullptr == pAccDevice)
{
Status = STATUS_INVALID_PARAMETER;
- TraceError("ACC %!FUNC! Sensor(%08X) parameter is invalid %!STATUS!", (INT) SensorInstance, Status);
+ TraceError("ACC %!FUNC! Sensor(0x%p) parameter is invalid %!STATUS!", SensorInstance, Status);
}
else // if (NT_SUCCESS(Status))
diff --git a/sensors/Activity/Activity.inx b/sensors/Activity/Activity.inx
index e3c036c3..7f2558c1 100644
--- a/sensors/Activity/Activity.inx
+++ b/sensors/Activity/Activity.inx
Binary files differ
diff --git a/sensors/Activity/Activity.sln b/sensors/Activity/Activity.sln
index ed653c1d..918419d9 100644
--- a/sensors/Activity/Activity.sln
+++ b/sensors/Activity/Activity.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}") = "Activity", "Activity.vcxproj", "{8D62CC9B-7F6B-4B7C-A650-32595DA9B28D}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Activity", "Activity.vcxproj", "{9C41A0A9-BEE7-4410-A604-2B97BDDE6A87}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -13,14 +13,14 @@ Global
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {8D62CC9B-7F6B-4B7C-A650-32595DA9B28D}.Debug|Win32.ActiveCfg = Debug|Win32
- {8D62CC9B-7F6B-4B7C-A650-32595DA9B28D}.Debug|Win32.Build.0 = Debug|Win32
- {8D62CC9B-7F6B-4B7C-A650-32595DA9B28D}.Release|Win32.ActiveCfg = Release|Win32
- {8D62CC9B-7F6B-4B7C-A650-32595DA9B28D}.Release|Win32.Build.0 = Release|Win32
- {8D62CC9B-7F6B-4B7C-A650-32595DA9B28D}.Debug|x64.ActiveCfg = Debug|x64
- {8D62CC9B-7F6B-4B7C-A650-32595DA9B28D}.Debug|x64.Build.0 = Debug|x64
- {8D62CC9B-7F6B-4B7C-A650-32595DA9B28D}.Release|x64.ActiveCfg = Release|x64
- {8D62CC9B-7F6B-4B7C-A650-32595DA9B28D}.Release|x64.Build.0 = Release|x64
+ {9C41A0A9-BEE7-4410-A604-2B97BDDE6A87}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9C41A0A9-BEE7-4410-A604-2B97BDDE6A87}.Debug|Win32.Build.0 = Debug|Win32
+ {9C41A0A9-BEE7-4410-A604-2B97BDDE6A87}.Release|Win32.ActiveCfg = Release|Win32
+ {9C41A0A9-BEE7-4410-A604-2B97BDDE6A87}.Release|Win32.Build.0 = Release|Win32
+ {9C41A0A9-BEE7-4410-A604-2B97BDDE6A87}.Debug|x64.ActiveCfg = Debug|x64
+ {9C41A0A9-BEE7-4410-A604-2B97BDDE6A87}.Debug|x64.Build.0 = Debug|x64
+ {9C41A0A9-BEE7-4410-A604-2B97BDDE6A87}.Release|x64.ActiveCfg = Release|x64
+ {9C41A0A9-BEE7-4410-A604-2B97BDDE6A87}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/sensors/Activity/Activity.vcxproj b/sensors/Activity/Activity.vcxproj
index 4e67e58b..724803cd 100644
--- a/sensors/Activity/Activity.vcxproj
+++ b/sensors/Activity/Activity.vcxproj
@@ -19,12 +19,12 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{8D62CC9B-7F6B-4B7C-A650-32595DA9B28D}</ProjectGuid>
+ <ProjectGuid>{9C41A0A9-BEE7-4410-A604-2B97BDDE6A87}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<UMDF_VERSION_MAJOR>2</UMDF_VERSION_MAJOR>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{2AA63371-1F17-4DD3-A61C-A4B309500609}</SampleGuid>
+ <SampleGuid>{C9C93A11-59AB-4977-BE1F-E0AB103302E2}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/sensors/Activity/Activity.vcxproj.Filters b/sensors/Activity/Activity.vcxproj.Filters
index b030df77..f32344d8 100644
--- a/sensors/Activity/Activity.vcxproj.Filters
+++ b/sensors/Activity/Activity.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>{41DFCDBE-6A67-4D84-AB7B-45C8FE834475}</UniqueIdentifier>
+ <UniqueIdentifier>{E51044F1-2844-4B85-9CB3-50C5574B73E6}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{DD7B7ED0-4EF4-4753-AD23-72366C6CB41E}</UniqueIdentifier>
+ <UniqueIdentifier>{18DACA49-0487-4FC6-94D7-DE977A2AD8D5}</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>{C8299C55-D177-4014-A1C4-2502A34B3F09}</UniqueIdentifier>
+ <UniqueIdentifier>{60868430-E51C-40B0-86F8-D5C119418603}</UniqueIdentifier>
</Filter>
<Filter Include="Driver Files">
<Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{4C33DA67-A0C3-4947-93E0-01E52A3E1B62}</UniqueIdentifier>
+ <UniqueIdentifier>{B845F613-F2F8-4EDB-8CAE-574E38ABD746}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/sensors/Activity/Device.h b/sensors/Activity/Device.h
index 34e14fd0..64b2a5e4 100644
--- a/sensors/Activity/Device.h
+++ b/sensors/Activity/Device.h
@@ -52,6 +52,7 @@ typedef enum
SENSOR_MODEL,
SENSOR_PERSISTENT_UNIQUEID,
SENSOR_CATEGORY,
+ SENSOR_ISPRIMARY,
// These enumeration properties overlap with a subset of the common properties,
// and facilitate discovery without opening a sensor
diff --git a/sensors/Activity/README.md b/sensors/Activity/README.md
deleted file mode 100644
index aa8fcf09..00000000
--- a/sensors/Activity/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Activity
-========
-
-The activity sensor sample shows how to write a UMDF v2 driver to control a virtual activity sensor.
-
-## 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/Activity/SensorsTrace.h b/sensors/Activity/SensorsTrace.h
index 1ea2dbdb..f6239fd7 100644
--- a/sensors/Activity/SensorsTrace.h
+++ b/sensors/Activity/SensorsTrace.h
@@ -20,7 +20,7 @@ extern "C" {
#define WPP_CONTROL_GUIDS \
WPP_DEFINE_CONTROL_GUID( \
- ActivityTraceGuid, (B6E7F50C,8F25,445E,8B39,D05802A53EB9), \
+ ActivityTraceGuid, (B6E7F50C,8F25,445E,8B39,D05802A53EB9), \
WPP_DEFINE_BIT(EntryExit) \
WPP_DEFINE_BIT(DataFlow) \
WPP_DEFINE_BIT(Verbose) \
@@ -86,6 +86,15 @@ extern "C" {
}
+
+// 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/Activity/client.cpp b/sensors/Activity/client.cpp
index 51c53e32..ca4c5bc2 100644
--- a/sensors/Activity/client.cpp
+++ b/sensors/Activity/client.cpp
@@ -884,7 +884,7 @@ NTSTATUS ActivityDevice::OnSetDataInterval(_In_ SENSOROBJECT sensorInstance, _In
if (nullptr == pDevice || Act_Default_MinDataInterval_Ms > dataRateMs)
{
status = STATUS_INVALID_PARAMETER;
- TraceError("ACT %!FUNC! Sensor parameter is invalid. Failed %!STATUS!", status);
+ TraceError("ACT %!FUNC! Invalid parameters! %!STATUS!", status);
}
else
{
@@ -977,7 +977,7 @@ NTSTATUS ActivityDevice::OnSetDataThresholds(
if (nullptr == pDevice)
{
status = STATUS_INVALID_PARAMETER;
- TraceError("ACT %!FUNC! Sensor(%08X) parameter is invalid. Failed %!STATUS!", (INT) sensorInstance, status);
+ TraceError("ACT %!FUNC! Sensor(0x%p) parameter is invalid. Failed %!STATUS!", sensorInstance, status);
}
else
{
diff --git a/sensors/Activity/device.cpp b/sensors/Activity/device.cpp
index 1414b67b..1b0339db 100644
--- a/sensors/Activity/device.cpp
+++ b/sensors/Activity/device.cpp
@@ -64,6 +64,10 @@ NTSTATUS ActivityDevice::InitializeEnumerationProperties()
InitPropVariantFromCLSID(GUID_SensorCategory_Motion,
&(m_pEnumerationProperties->List[SENSOR_CATEGORY].Value));
+ m_pEnumerationProperties->List[SENSOR_ISPRIMARY].Key = DEVPKEY_Sensor_IsPrimary;
+ InitPropVariantFromBoolean(FALSE,
+ &(m_pEnumerationProperties->List[SENSOR_ISPRIMARY].Value));
+
m_pEnumerationProperties->List[SENSOR_MIN_INTERVAL].Key = PKEY_Sensor_MinimumDataInterval_Ms;
InitPropVariantFromUInt32(Act_Default_MinDataInterval_Ms,
&(m_pEnumerationProperties->List[SENSOR_MIN_INTERVAL].Value));
diff --git a/sensors/CustomSensors/CustomSensors.inx b/sensors/CustomSensors/CustomSensors.inx
index ac4b634b..b26b6848 100644
--- a/sensors/CustomSensors/CustomSensors.inx
+++ b/sensors/CustomSensors/CustomSensors.inx
Binary files differ
diff --git a/sensors/CustomSensors/CustomSensors.sln b/sensors/CustomSensors/CustomSensors.sln
index 50cc668f..7a56d3a7 100644
--- a/sensors/CustomSensors/CustomSensors.sln
+++ b/sensors/CustomSensors/CustomSensors.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}") = "CustomSensors", "CustomSensors.vcxproj", "{C503E2ED-A654-4A89-86C0-2C52BF1232FD}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CustomSensors", "CustomSensors.vcxproj", "{C7936A1F-21BA-40FD-AE64-CE2515F05934}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -13,14 +13,14 @@ Global
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {C503E2ED-A654-4A89-86C0-2C52BF1232FD}.Debug|Win32.ActiveCfg = Debug|Win32
- {C503E2ED-A654-4A89-86C0-2C52BF1232FD}.Debug|Win32.Build.0 = Debug|Win32
- {C503E2ED-A654-4A89-86C0-2C52BF1232FD}.Release|Win32.ActiveCfg = Release|Win32
- {C503E2ED-A654-4A89-86C0-2C52BF1232FD}.Release|Win32.Build.0 = Release|Win32
- {C503E2ED-A654-4A89-86C0-2C52BF1232FD}.Debug|x64.ActiveCfg = Debug|x64
- {C503E2ED-A654-4A89-86C0-2C52BF1232FD}.Debug|x64.Build.0 = Debug|x64
- {C503E2ED-A654-4A89-86C0-2C52BF1232FD}.Release|x64.ActiveCfg = Release|x64
- {C503E2ED-A654-4A89-86C0-2C52BF1232FD}.Release|x64.Build.0 = Release|x64
+ {C7936A1F-21BA-40FD-AE64-CE2515F05934}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C7936A1F-21BA-40FD-AE64-CE2515F05934}.Debug|Win32.Build.0 = Debug|Win32
+ {C7936A1F-21BA-40FD-AE64-CE2515F05934}.Release|Win32.ActiveCfg = Release|Win32
+ {C7936A1F-21BA-40FD-AE64-CE2515F05934}.Release|Win32.Build.0 = Release|Win32
+ {C7936A1F-21BA-40FD-AE64-CE2515F05934}.Debug|x64.ActiveCfg = Debug|x64
+ {C7936A1F-21BA-40FD-AE64-CE2515F05934}.Debug|x64.Build.0 = Debug|x64
+ {C7936A1F-21BA-40FD-AE64-CE2515F05934}.Release|x64.ActiveCfg = Release|x64
+ {C7936A1F-21BA-40FD-AE64-CE2515F05934}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/sensors/CustomSensors/CustomSensors.vcxproj b/sensors/CustomSensors/CustomSensors.vcxproj
index 6456012f..113ddd23 100644
--- a/sensors/CustomSensors/CustomSensors.vcxproj
+++ b/sensors/CustomSensors/CustomSensors.vcxproj
@@ -19,12 +19,12 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{C503E2ED-A654-4A89-86C0-2C52BF1232FD}</ProjectGuid>
+ <ProjectGuid>{C7936A1F-21BA-40FD-AE64-CE2515F05934}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<UMDF_VERSION_MAJOR>2</UMDF_VERSION_MAJOR>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{C67AC46D-32C4-42DD-AD6C-B266FB88E573}</SampleGuid>
+ <SampleGuid>{44B5CD90-E5CF-456E-9A6C-C45CDBE2798D}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/sensors/CustomSensors/CustomSensors.vcxproj.Filters b/sensors/CustomSensors/CustomSensors.vcxproj.Filters
index 2fea2ab3..64faeaa5 100644
--- a/sensors/CustomSensors/CustomSensors.vcxproj.Filters
+++ b/sensors/CustomSensors/CustomSensors.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>{1DE373A7-02B2-49BA-8B3B-8D3E3881B654}</UniqueIdentifier>
+ <UniqueIdentifier>{1291330B-BA98-4314-80CF-D3134BEDBBA6}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{D1781583-B556-4421-85B6-F46EDFB366EE}</UniqueIdentifier>
+ <UniqueIdentifier>{9C6A940E-519A-42F6-A82D-26F842A0D171}</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>{29D44582-FC0F-431D-A97A-971DAE2C6849}</UniqueIdentifier>
+ <UniqueIdentifier>{6E878311-5CC7-4E2F-A368-13D99DB045D2}</UniqueIdentifier>
</Filter>
<Filter Include="Driver Files">
<Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{4736CE2D-C8AC-421F-B9F5-A4007B8A66A0}</UniqueIdentifier>
+ <UniqueIdentifier>{A229BB48-B83A-416A-8CF5-B15D4793A8C0}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/sensors/CustomSensors/Device.h b/sensors/CustomSensors/Device.h
index 49a8df8f..0679b137 100644
--- a/sensors/CustomSensors/Device.h
+++ b/sensors/CustomSensors/Device.h
@@ -44,6 +44,7 @@ typedef enum
SENSOR_MODEL,
SENSOR_PERSISTENT_UNIQUEID,
SENSOR_CATEGORY,
+ SENSOR_ISPRIMARY,
SENSOR_VENDOR_DEFINED_TYPE,
SENSOR_ENUMERATION_PROPERTIES_COUNT
} SENSOR_ENUMERATION_PROPERTIES_INDEX;
@@ -89,6 +90,7 @@ private:
BOOLEAN m_FirstSample;
ULONG m_StartTime;
+ ULONGLONG m_SampleCount;
CustomSensorSample m_LastSample;
diff --git a/sensors/CustomSensors/README.md b/sensors/CustomSensors/README.md
deleted file mode 100644
index 3e4a3a65..00000000
--- a/sensors/CustomSensors/README.md
+++ /dev/null
@@ -1,7 +0,0 @@
-CustomSensors
-=============
-
-The CustomSensors sample shows how to write a UMDF v2 driver to control a virtual CO2 sensor.
-
-## 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/CustomSensors/SensorsTrace.h b/sensors/CustomSensors/SensorsTrace.h
index 8155ca4b..2e84827a 100644
--- a/sensors/CustomSensors/SensorsTrace.h
+++ b/sensors/CustomSensors/SensorsTrace.h
@@ -122,7 +122,6 @@ extern "C" {
//FUNC SENSRSVC_FunctionEnter{LEVEL=TRACE_LEVEL_VERBOSE,FLAGS=EntryExit}(...);
//end_wpp
-
//MACRO: SENSRSVC_FunctionExit
//
//begin_wpp config
@@ -137,6 +136,16 @@ extern "C" {
#define WPP_LEVEL_FLAGS_SENSRSVCEXIT_POST(LEVEL, FLAGS, hr) /*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/CustomSensors/client.cpp b/sensors/CustomSensors/client.cpp
index 66afd38d..d3915d3d 100644
--- a/sensors/CustomSensors/client.cpp
+++ b/sensors/CustomSensors/client.cpp
@@ -32,6 +32,8 @@ NTSTATUS CustomSensorDevice::GetData()
m_StartTime = 0;
TraceError("CSTM %!FUNC! GetPerformanceTime %!STATUS!", Status);
}
+
+ m_SampleCount = 0;
}
pSimulator = GetHardwareSimulatorContextFromInstance(m_SimulatorInstance);
@@ -114,8 +116,17 @@ CustomSensorDevice::OnTimerExpire(
}
else
{
- WaitTimeHundredNanoseconds = 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
+ WaitTimeHundredNanoseconds = 0;
+ }
+ else
+ {
+ WaitTimeHundredNanoseconds = (pDevice->m_StartTime +
+ (pDevice->m_Interval * (pDevice->m_SampleCount + 1))) - CurrentTimeMs;
+ }
WaitTimeHundredNanoseconds = WDF_REL_TIMEOUT_IN_MS(WaitTimeHundredNanoseconds);
}
}
@@ -143,7 +154,7 @@ CustomSensorDevice::OnStart(
if (nullptr == pDevice)
{
Status = STATUS_INVALID_PARAMETER;
- TraceError("PED %!FUNC! Sensor(%08X) parameter is invalid. Failed %!STATUS!", (INT)SensorInstance, Status);
+ TraceError("PED %!FUNC! Sensor(0x%p) parameter is invalid. Failed %!STATUS!", SensorInstance, Status);
}
if (NT_SUCCESS(Status))
@@ -207,7 +218,7 @@ CustomSensorDevice::OnStop(
if (nullptr == pDevice)
{
Status = STATUS_INVALID_PARAMETER;
- TraceError("CSTM %!FUNC! Sensor(%08X) parameter is invalid. Failed %!STATUS!", (INT) SensorInstance, Status);
+ TraceError("CSTM %!FUNC! Sensor(0x%p) parameter is invalid. Failed %!STATUS!", SensorInstance, Status);
}
if (NT_SUCCESS(Status))
@@ -461,14 +472,14 @@ CustomSensorDevice::OnGetDataInterval(
if (nullptr == pDevice)
{
Status = STATUS_INVALID_PARAMETER;
- TraceError("CSTM %!FUNC! Sensor(%08X) parameter is invalid. Failed %!STATUS!", (INT) SensorInstance, Status);
+ TraceError("CSTM %!FUNC! Sensor(0x%p) parameter is invalid. Failed %!STATUS!", SensorInstance, Status);
goto Exit;
}
if (nullptr == DataRateMs)
{
Status = STATUS_INVALID_PARAMETER;
- TraceError("CSTM %!FUNC! DataRateMs(%08X) parameter is invalid. Failed %!STATUS!", (INT)DataRateMs, Status);
+ TraceError("CSTM %!FUNC! DataRateMs(0x%p) parameter is invalid. Failed %!STATUS!", DataRateMs, Status);
goto Exit;
}
@@ -496,7 +507,14 @@ CustomSensorDevice::OnSetDataInterval(
if (nullptr == pDevice || Cstm_Default_MinDataInterval_Ms > DataRateMs)
{
Status = STATUS_INVALID_PARAMETER;
- TraceError("CSTM %!FUNC! Sensor(%08X) parameter is invalid. Failed %!STATUS!", (INT) SensorInstance, Status);
+ TraceError("CSTM %!FUNC! Sensor(0x%p) parameter is invalid. Failed %!STATUS!", SensorInstance, Status);
+ goto Exit;
+ }
+
+ if (Cstm_Default_MinDataInterval_Ms > DataRateMs)
+ {
+ Status = STATUS_INVALID_PARAMETER;
+ TraceError("CSTM %!FUNC! DataRateMs(%d) parameter is smaller than the minimum data interval. Failed %!STATUS!", DataRateMs, Status);
goto Exit;
}
diff --git a/sensors/CustomSensors/device.cpp b/sensors/CustomSensors/device.cpp
index e8f956e6..c08a0eb6 100644
--- a/sensors/CustomSensors/device.cpp
+++ b/sensors/CustomSensors/device.cpp
@@ -133,6 +133,12 @@ NTSTATUS CustomSensorDevice::Initialize(
InitPropVariantFromCLSID(GUID_SensorCategory_Other,
&(m_pEnumerationProperties->List[SENSOR_CATEGORY].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 custom sensors
+ // with the same vendor defined type exist on the system and
+ // this sensor is the primary sensor
+
m_pEnumerationProperties->List[SENSOR_VENDOR_DEFINED_TYPE].Key = DEVPKEY_Sensor_VendorDefinedSubType;
InitPropVariantFromCLSID(GUID_CustomSensorDevice_VendorDefinedSubTypeID,
&(m_pEnumerationProperties->List[SENSOR_VENDOR_DEFINED_TYPE].Value));
diff --git a/sensors/Pedometer/Device.h b/sensors/Pedometer/Device.h
index 26dcc7ad..008c3ef6 100644
--- a/sensors/Pedometer/Device.h
+++ b/sensors/Pedometer/Device.h
@@ -51,6 +51,7 @@ typedef enum
SENSOR_MODEL,
SENSOR_PERSISTENT_UNIQUEID,
SENSOR_CATEGORY,
+ SENSOR_ISPRIMARY,
// These enumeration properties overlap with
// a subset of the common properties, and
@@ -146,6 +147,7 @@ private:
BOOLEAN m_FirstSample;
ULONG m_StartTime;
+ ULONGLONG m_SampleCount;
ULONG m_CachedThreshold;
PedometerSample m_LastSample;
diff --git a/sensors/Pedometer/Pedometer.inx b/sensors/Pedometer/Pedometer.inx
index 1dcef53b..4aea1609 100644
--- a/sensors/Pedometer/Pedometer.inx
+++ b/sensors/Pedometer/Pedometer.inx
Binary files differ
diff --git a/sensors/Pedometer/Pedometer.sln b/sensors/Pedometer/Pedometer.sln
index 92ceadbd..f2d1b250 100644
--- a/sensors/Pedometer/Pedometer.sln
+++ b/sensors/Pedometer/Pedometer.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}") = "Pedometer", "Pedometer.vcxproj", "{7F064CE7-8D48-416A-9F3A-9E13074576F2}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Pedometer", "Pedometer.vcxproj", "{2D98FAA6-F523-420D-9F3A-480CD7C3F9CA}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -13,14 +13,14 @@ Global
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {7F064CE7-8D48-416A-9F3A-9E13074576F2}.Debug|Win32.ActiveCfg = Debug|Win32
- {7F064CE7-8D48-416A-9F3A-9E13074576F2}.Debug|Win32.Build.0 = Debug|Win32
- {7F064CE7-8D48-416A-9F3A-9E13074576F2}.Release|Win32.ActiveCfg = Release|Win32
- {7F064CE7-8D48-416A-9F3A-9E13074576F2}.Release|Win32.Build.0 = Release|Win32
- {7F064CE7-8D48-416A-9F3A-9E13074576F2}.Debug|x64.ActiveCfg = Debug|x64
- {7F064CE7-8D48-416A-9F3A-9E13074576F2}.Debug|x64.Build.0 = Debug|x64
- {7F064CE7-8D48-416A-9F3A-9E13074576F2}.Release|x64.ActiveCfg = Release|x64
- {7F064CE7-8D48-416A-9F3A-9E13074576F2}.Release|x64.Build.0 = Release|x64
+ {2D98FAA6-F523-420D-9F3A-480CD7C3F9CA}.Debug|Win32.ActiveCfg = Debug|Win32
+ {2D98FAA6-F523-420D-9F3A-480CD7C3F9CA}.Debug|Win32.Build.0 = Debug|Win32
+ {2D98FAA6-F523-420D-9F3A-480CD7C3F9CA}.Release|Win32.ActiveCfg = Release|Win32
+ {2D98FAA6-F523-420D-9F3A-480CD7C3F9CA}.Release|Win32.Build.0 = Release|Win32
+ {2D98FAA6-F523-420D-9F3A-480CD7C3F9CA}.Debug|x64.ActiveCfg = Debug|x64
+ {2D98FAA6-F523-420D-9F3A-480CD7C3F9CA}.Debug|x64.Build.0 = Debug|x64
+ {2D98FAA6-F523-420D-9F3A-480CD7C3F9CA}.Release|x64.ActiveCfg = Release|x64
+ {2D98FAA6-F523-420D-9F3A-480CD7C3F9CA}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/sensors/Pedometer/Pedometer.vcxproj b/sensors/Pedometer/Pedometer.vcxproj
index f237c900..ee5738d7 100644
--- a/sensors/Pedometer/Pedometer.vcxproj
+++ b/sensors/Pedometer/Pedometer.vcxproj
@@ -19,12 +19,12 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{7F064CE7-8D48-416A-9F3A-9E13074576F2}</ProjectGuid>
+ <ProjectGuid>{2D98FAA6-F523-420D-9F3A-480CD7C3F9CA}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<UMDF_VERSION_MAJOR>2</UMDF_VERSION_MAJOR>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{879AB2E4-FCDE-4858-B211-4313A724EC69}</SampleGuid>
+ <SampleGuid>{63E5D8E2-D2E3-4B7E-9F5A-78DA39FA9BED}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/sensors/Pedometer/Pedometer.vcxproj.Filters b/sensors/Pedometer/Pedometer.vcxproj.Filters
index 133d34f1..e36ebf64 100644
--- a/sensors/Pedometer/Pedometer.vcxproj.Filters
+++ b/sensors/Pedometer/Pedometer.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>{C8EAE043-CA7E-41A8-821D-EFCA0B010195}</UniqueIdentifier>
+ <UniqueIdentifier>{47BC76FB-31D6-4043-A1F0-24C8EE1EC77D}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{2FE25726-3DE9-439A-BE0F-0004BF801CE9}</UniqueIdentifier>
+ <UniqueIdentifier>{822384CB-A39F-4A21-8529-34A65C4CE181}</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>{1C6ED801-206E-4535-B7D3-56331A35A769}</UniqueIdentifier>
+ <UniqueIdentifier>{C6D84098-A64B-429D-8EE2-D8ED8C5BF2FE}</UniqueIdentifier>
</Filter>
<Filter Include="Driver Files">
<Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{385CA6C0-4DDF-4651-AF87-3A05BB9DD45D}</UniqueIdentifier>
+ <UniqueIdentifier>{A379ED39-5FF0-4DB2-A773-BDEA4FB77D87}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/sensors/Pedometer/README.md b/sensors/Pedometer/README.md
deleted file mode 100644
index 671589e4..00000000
--- a/sensors/Pedometer/README.md
+++ /dev/null
@@ -1,7 +0,0 @@
-Pedometer
-=========
-
-The Pedometer sample shows how to write a UMDF v2 driver to control a virtual Pedometer sensor.
-
-## 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/Pedometer/SensorsTrace.h b/sensors/Pedometer/SensorsTrace.h
index bc81e33f..9c6f30e5 100644
--- a/sensors/Pedometer/SensorsTrace.h
+++ b/sensors/Pedometer/SensorsTrace.h
@@ -86,6 +86,15 @@ extern "C" {
}
+
+// 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/Pedometer/client.cpp b/sensors/Pedometer/client.cpp
index 1fc79a9d..debce7d1 100644
--- a/sensors/Pedometer/client.cpp
+++ b/sensors/Pedometer/client.cpp
@@ -56,6 +56,8 @@ PedometerDevice::GetData(
TraceError("PED %!FUNC! GetPerformanceTime failed %!STATUS!", Status);
}
+ m_SampleCount = 0;
+
DataReady = TRUE;
}
else
@@ -186,8 +188,17 @@ PedometerDevice::OnTimerExpire(
}
else
{
- WaitTimeHundredNanoseconds = 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
+ WaitTimeHundredNanoseconds = 0;
+ }
+ else
+ {
+ WaitTimeHundredNanoseconds = (pDevice->m_StartTime +
+ (pDevice->m_Interval * (pDevice->m_SampleCount + 1))) - CurrentTimeMs;
+ }
WaitTimeHundredNanoseconds = WDF_REL_TIMEOUT_IN_MS(WaitTimeHundredNanoseconds);
}
}
@@ -216,7 +227,7 @@ PedometerDevice::OnStart(
if (nullptr == pDevice)
{
Status = STATUS_INVALID_PARAMETER;
- TraceError("PED %!FUNC! Sensor(%08X) parameter is invalid. Failed %!STATUS!", (INT) SensorInstance, Status);
+ TraceError("PED %!FUNC! Sensor(0x%p) parameter is invalid. Failed %!STATUS!", SensorInstance, Status);
goto Exit;
}
@@ -270,7 +281,7 @@ PedometerDevice::OnStop(
if (nullptr == pDevice)
{
Status = STATUS_INVALID_PARAMETER;
- TraceError("PED %!FUNC! Sensor(%08X) parameter is invalid. Failed %!STATUS!", (INT)SensorInstance, Status);
+ TraceError("PED %!FUNC! Sensor(0x%p) parameter is invalid. Failed %!STATUS!", SensorInstance, Status);
goto Exit;
}
@@ -315,7 +326,7 @@ PedometerDevice::OnStartHistory(
if (nullptr == pDevice)
{
Status = STATUS_INVALID_PARAMETER;
- TraceError("PED %!FUNC! Sensor(%08X) parameter is invalid. Failed %!STATUS!", (INT)SensorInstance, Status);
+ TraceError("PED %!FUNC! Sensor(0x%p) parameter is invalid. Failed %!STATUS!", SensorInstance, Status);
goto Exit;
}
@@ -371,7 +382,7 @@ PedometerDevice::OnStopHistory(
if (nullptr == pDevice)
{
Status = STATUS_INVALID_PARAMETER;
- TraceError("PED %!FUNC! Sensor(%08X) parameter is invalid. Failed %!STATUS!", (INT)SensorInstance, Status);
+ TraceError("PED %!FUNC! Sensor(0x%p) parameter is invalid. Failed %!STATUS!", SensorInstance, Status);
goto Exit;
}
@@ -442,7 +453,7 @@ PedometerDevice::OnClearHistory(
if (nullptr == pDevice)
{
Status = STATUS_INVALID_PARAMETER;
- TraceError("PED %!FUNC! Sensor(%08X) parameter is invalid. Failed %!STATUS!", (INT)SensorInstance, Status);
+ TraceError("PED %!FUNC! Sensor(0x%p) parameter is invalid. Failed %!STATUS!", SensorInstance, Status);
goto Exit;
}
@@ -500,7 +511,7 @@ PedometerDevice::OnStartHistoryRetrieval(
if (nullptr == pDevice)
{
Status = STATUS_INVALID_PARAMETER;
- TraceError("PED %!FUNC! Sensor(%08X) parameter is invalid. Failed %!STATUS!", (INT)SensorInstance, Status);
+ TraceError("PED %!FUNC! Sensor(0x%p) parameter is invalid. Failed %!STATUS!", SensorInstance, Status);
goto Exit;
}
@@ -612,7 +623,7 @@ PedometerDevice::OnCancelHistoryRetrieval(
if (nullptr == pDevice || nullptr == pBytesWritten)
{
Status = STATUS_INVALID_PARAMETER;
- TraceError("PED %!FUNC! Invalid Parameters: Sensor(%08X), pBytesWritten (%08X). Failed %!STATUS!", (INT)SensorInstance, (INT)pBytesWritten, Status);
+ TraceError("PED %!FUNC! Invalid Parameters: Sensor(0x%p), pDevice (0x%p), pBytesWritten (0x%p). Failed %!STATUS!", SensorInstance, pDevice, pBytesWritten, Status);
goto Exit;
}
@@ -689,7 +700,7 @@ PedometerDevice::HistoryRetrievalThread(
if (nullptr == pDevice)
{
Status = STATUS_INVALID_PARAMETER;
- TraceError("PED %!FUNC! Sensor(%08X) parameter is invalid. pDevice is null", (INT)SensorInstance);
+ TraceError("PED %!FUNC! Sensor(0x%p) parameter is invalid. pDevice is null", SensorInstance);
goto Exit;
}
@@ -1025,14 +1036,14 @@ PedometerDevice::OnGetDataInterval(
if (nullptr == pDevice)
{
Status = STATUS_INVALID_PARAMETER;
- TraceError("PED %!FUNC! Sensor(%08X) parameter is invalid. Failed %!STATUS!", (INT) SensorInstance, Status);
+ TraceError("PED %!FUNC! Sensor(0x%p) parameter is invalid. Failed %!STATUS!", SensorInstance, Status);
goto Exit;
}
if (nullptr == DataRateMs)
{
Status = STATUS_INVALID_PARAMETER;
- TraceError("PED %!FUNC! DataRateMs(%08X) parameter is invalid. Failed %!STATUS!", (INT)DataRateMs, Status);
+ TraceError("PED %!FUNC! DataRateMs(0x%p) parameter is invalid. Failed %!STATUS!", DataRateMs, Status);
goto Exit;
}
@@ -1057,10 +1068,17 @@ PedometerDevice::OnSetDataInterval(
SENSOR_FunctionEnter();
- if (nullptr == pDevice || Pedometer_Default_MinDataInterval_Ms > DataRateMs)
+ if (nullptr == pDevice)
+ {
+ Status = STATUS_INVALID_PARAMETER;
+ TraceError("PED %!FUNC! Sensor(0x%p) parameter is invalid. Failed %!STATUS!", SensorInstance, Status);
+ goto Exit;
+ }
+
+ if (Pedometer_Default_MinDataInterval_Ms > DataRateMs)
{
Status = STATUS_INVALID_PARAMETER;
- TraceError("PED %!FUNC! Sensor(%08X) parameter is invalid. Failed %!STATUS!", (INT) SensorInstance, Status);
+ TraceError("PED %!FUNC! DataRateMs(%d) parameter is smaller than the minimum data interval. Failed %!STATUS!", DataRateMs, Status);
goto Exit;
}
@@ -1163,7 +1181,7 @@ PedometerDevice::OnSetDataThresholds(
if (pDevice == nullptr)
{
Status = STATUS_INVALID_PARAMETER;
- TraceError("PED %!FUNC! Sensor(%08X) parameter is invalid. Failed %!STATUS!", (INT)SensorInstance, Status);
+ TraceError("PED %!FUNC! Sensor(0x%p) parameter is invalid. Failed %!STATUS!", SensorInstance, Status);
goto Exit;
}
diff --git a/sensors/Pedometer/device.cpp b/sensors/Pedometer/device.cpp
index 0a219836..b543dc2c 100644
--- a/sensors/Pedometer/device.cpp
+++ b/sensors/Pedometer/device.cpp
@@ -236,6 +236,11 @@ PedometerDevice::Initialize(
InitPropVariantFromCLSID(GUID_SensorCategory_Motion,
&(m_pEnumerationProperties->List[SENSOR_CATEGORY].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 pedometers
+ // exist on the system and this sensor is the primary sensor
+
m_pEnumerationProperties->List[SENSOR_POWER].Key = PKEY_Sensor_Power_Milliwatts;
InitPropVariantFromFloat(Pedometer_Default_Power_Milliwatts,
&(m_pEnumerationProperties->List[SENSOR_POWER].Value));
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
}
//