summaryrefslogtreecommitdiff
path: root/sensors/Pedometer
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/Pedometer
parent687b274aa38fd05c8c26e3068932121876d7f745 (diff)
Updated for "Windows 10 Anniversary Update" (Version 1607)
Diffstat (limited to 'sensors/Pedometer')
-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
9 files changed, 64 insertions, 37 deletions
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));