Sensors and Location -

Sensors and Location -

Windows 7 Training Windows Sensor and Location Platform Microsoft Corporation Agenda Introduction to the Windows Sensor and Location Platform Sensor architecture Working with the Sensor API Location architecture Working with the Location API Sensor Platform Overview

Windows 7 features a new API for working with sensors COM-based API Works with drivers using the sensor class extension Benefits No need to target vendor-specific APIs or to know hardware specifics Consistent interface for all sensor types Privacy and security Sensor Platform Architecture Application Application

Sensor API User System Sensor class extension Location and Other Sensors Control Panel UMDF sensor driver Sensor device This is a partial diagram of the

Sensor and Location Platform, showing only sensor-related parts Sensor API Architecture COM-based API (includes Sensorsapi.h and Sensors.h) Consists of these main interfaces: ISensorManager Sensor enumeration, attachment event, request permissions ISensor Get and set properties, get report, events (new report, detachment, state change, custom) and more

ISensorDataReport Get sensor data report data fields Privacy and Access Control Location data is considered personally identifiable information (PII) User consent is required to share data All sensors are disabled by default Administrator rights required to enable a sensor Sensors can be configured on a per-user basis Enable Sensors dialog box invoked by applications Sensor API Architecture

What Is a Sensor? Enumerated via category and type GUIDs Category represents what is being sensed (for example, environment, location, motion, electrical systems) Type represents how it is being sensed (for example, by thermometer, GPS, accelerometer, voltage) Properties Read-only (such as model) or read-write (such as report interval). Sensors may have custom properties

Data Get (sensor-specific) data report object synchronously (not recommended) or asynchronously (events) Events State change, leave (detach), data updated, custom State Is sensor working properly? Do you have access? Enumerating Sensors #include #include

HRESULT hr; CComPtr pSensorManager; pSensorManager.CoCreateInstance(CLSID_SensorManager); CComPtr pALSCollection; CComPtr pALSSensor; // Get all the ALS sensors on the system pSensorManager->GetSensorsByType(SENSOR_TYPE_AMBIENT_LIGHT, &pALSCollection); hr = pSensorManager->RequestPermissions( 0, // Owner window pALSCollection, // Collection of sensors requiring permissions TRUE); // Modal flag if(SUCCEEDED(hr)) { pALSCollection->GetAt(0, &pALSSensor);

} Getting Current Light Level STDMETHODIMP CALSEventSink::OnDataUpdated( ISensor* pSensor, ISensorDataReport* pNewData) { PROPVARIANT lightLevel; PropVariantInit(&lightLevel); // Get the sensor reading from the ISensorDataReport object pNewData->GetSensorValue(SENSOR_DATA_TYPE_LIGHT_LEVEL_LUX, &lightLevel); // Extract the float luxValue float value from the PROPVARIANT object = V_FLOAT(lightLevel); // Normalize the light sensor data

double lightNormalized = ::pow(luxValue, 0.4) / 100.0; // // // // } Handle UI changes based on the normalized LUX data which ranges from 0.0 - 1.0 for a lux range of 0 lux to 100,000 lux, this method represents such a handler that would be implemented in your application UpdateUI(lightNormalized); PropVariantClear(&lightLevel); return S_OK;

Windows7 API CodePack for .NET Managed class library to ease .NET Framework access to Windows 7 features Taskbar, Libraries, Sensor, Location, MultiTouch, UAC, power management, restart and recovery, network awareness, Aero Glass and more. It is a library notafull product Open source with forum support from Microsoft Some of it will eventually move into the .NET framework Sensor Wrapper Architecture

ISensorEvents The three classes retain the same roles as they had in the COM API, only wrapping properties and events Sensor Wrapper Architecture Sensor is an abstract base class with a derived type for each sensor type Derived types can add properties and events Sensor Wrapper Architecture SensorDataReport also has a derived type for each sensor type Provides a strongly-typed way to access

data Enumerating Sensors Accelerometer3D[] sensors = SensorManager.GetSensorsByType(); Accelerometer3D a3dSensor = null; if (sensors.Length > 0) { a3dSensor = sensors[0]; SensorManager.RequestPermission(IntPtr.Zero, true, a3dSensor); } Receiving Data Reports from Sensor a3dSensor.DataUpdated += OnDataUpdated; void OnDataUpdated(Sensor sensor, SensorDataReport

dataReport) { Accelerometer3DReport a3dReport= (Accelerometer3DReport)dataReport; Console.WriteLine("X: {0} Y: {1} Z: {2}", a3dReport.AxisX_G, a3dReport.AxisY_G, a3dReport.AxisZ_G); } Location Platform Overview The Windows 7 Location API is built on top of the Sensor API COM-based API (includes Locationapi.h) It is a high-level abstraction Leverages sensors which provide location information

Some sensors (location providers) may be logical Wi-Fi hotspot triangulation Sensor and Location Platform Architecture The Big Picture Gadget or script Application Location IDispatch Interface Location API Application

Sensor API User System Sensor class extension UMDF sensor driver Sensor device Sensor class extension UMDF sensor driver

Location and Other Sensors Control Panel Logical location sensor (Triangulation) Location Platform Benefits Single API call to answer Where am I? Provider (such as: GPS, IP resolver, Wi-Fi) independent Synchronous and asynchronous models Script or automation compatible Automatic transition between providers

Most accurate providers have priority Concurrent access for multiple applications Default location Provided by user as fallback when no other sources are available Default Location in Control Panel Location API Architecture Consists of four main interfaces ILocation Get location report (synchronous), query status, register for notification

(asynchronous), request permissions ILocationReport Base interface; Two derived types exist: ILatLongReport and ICivicAddressReport Location API Architecture ILocation methods Method Description GetReport([in] REFIID reportType, [out] ILocationReport *ppLocReport) Synchronously retrieves location report by

report type. ILocationReport is a base type GetReportStatus([in] REFIID reportType, [out] LOCATION_REPORT_STATUS *pStatus) Retrieves status for specified report type RequestPermissions([in] HWND hParent, [in] IID *pReportTypes, [in] ULONG count, BOOL fModal) Opens a dialog to request user permission for sensors providing the given report types RegisterForReport([in] ILocationEvents *pEvents, [in] REFIID reportType, [in] DWORD dwMinReportInterval)

Subscribes a user object implementing ILocationEvents to asynchronously receive reports of the specified type UnregisterForReport([in]REFIID reportType) Stops event notifications for the specified report type GetReportInterval([in] REFIID reportType, [out] DWORD *pMilliseconds) Gets current minimal time (max. frequency) between events SetReportInterval([in] REFIID reportType, [in]

DWORD milliseconds) Sets minimal time (max. frequency) between events Location API Architecture ILocation methods Method Description GetDesiredAccuracy([in] REFIID reportType, [out] LOCATION_DESIRED_ACCURACY *pDesiredAccuracy) Gets current requested accuracy

setting SetDesiredAccuracy( [in] REFIID reportType, [in] LOCATION_DESIRED_ACCURACY desiredAccuracy ); Sets desired sensor accuracy. Default: Optimize power, cost and other considerations. High allows the sensor to potentially use services which charge money, consume high amounts of battery power and connection bandwidth Location API Architecture ILocationEvents methods

Method Description OnLocationChanged([in] REFIID reportType, [in] ILocationReport *pLocationReport ) Called when a new location report is available.ILocationReport is a base type of the actual type OnStatusChanged([in] REFIID reportType, [in] LOCATION_REPORT_STATUS newStatus );

Called when a report status changes Location API Architecture ILocationReport (Base Class) methods Method Description GetSensorID([out] SENSOR_ID *pSensorID) Retrieves the instance ID of the sensor that generated the location report GetTimestamp([out] SYSTEMTIME *pCreationTime ) Retrieves the date and time when the

report was generated GetValue([in] REFPROPERTYKEY pKey, [out] PROPVARIANT *pValue) Retrieves a property value from the location report Location API Architecture Report Statuses (Enumeration) Value Description REPORT_NOT_SUPPORTED The requested report type is not supported

by the API REPORT_ERROR There was an error when creating the report REPORT_ACCESS_DENIED No permissions have been granted to access this report type. Call ILocation::RequestPermissions REPORT_INITIALIZING The report is being initialized

REPORT_RUNNING LOCATION_REPORT_STATUS enumeration: The report is running Location API Architecture IDefaultLocation Method Description GetReport([in] REFIID reportType, [out] ILocationReport **ppLocationReport) Retrieves the specified report type from the default location provider

SetReport([in] REFIID reportType, [in] ILocationReport *pLocationReport) Specifies the default location Used to set default location (just like the Control Panel applet does) or specifically get the default location Types of Location Data Geographic data (ILatLongReport) Latitude, longitude, altitude, associated error required Most common format Best format for precise location Can reverse geo-code later

Civic address (ICivicAddressReport) Zip code, country required Most human readable Best for rough location estimates, street directions Getting a Location Report HRESULT hr; IID civicReportIID = IID_ICivicAddressReport; CComPtr pLocation; CComPtr pReport; hr = pLocation.CoCreateInstance(CLSID_Location); hr = pLocation->RequestPermissions(0, &civicReportIID, 1, TRUE); hr = pLocation->GetReport(civicReportIID, &pReport); CComPtr pCivicAddressReport; pReport.QueryInterface(&pCivicAddressReport); BSTR str;

hr = pCivicAddressReport->GetCountryRegion(&str); _tprintf(_T("Country/region: %s\n"), str); SysFreeString(str); Location Wrapper Architecture Consists of two main classes: LocationProvider and LocationReport Instantiate a LocationProviderderived type (for example, LatLongLocationProvider) Ctor expects minimum report interval Query status via ReportStatus. If necessary, call RequestPermissions static method

GetReport() synchronously, or Subscribe to LocationChanged event Location Wrapper Architecture LocationReport is the actual object containing data Cast the LocationReport type you got from GetReport() or in LocationChanged delegate to the appropriate derived type Query properties to retrieve the desired

information. Using Location Wrapper Synchronous varprovider = new CivicAddressLocationProvider(10000); LocationProvider.RequestPermissions(IntPtr.Zero, true, provider); varreport = (CivicAddressLocationReport) provider.GetReport(); Console.WriteLine("Country/region: , report.CountryOrRegion); Using Location Wrapper Asynchronous varprovider = new CivicAddressLocationProvider(10000); LocationProvider.RequestPermissions(IntPtr.Zero, true, provider);

provider.LocationChanged += (LocationProviderprov, LocationReportnewLoc) => { varcivicLocReport = (CivicAddressLocationReport) newLoc; Console.WriteLine("Country/region: ", civicLocReport.CountryOrRegion); }; Summary Platform overview Native Sensor API Managed Sensor API wrapper Custom sensors Native Location API Types of location data, default location Managed Location API wrapper

2009 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/ or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.

Recently Viewed Presentations

  • Invertebrate Animals Honors Biology Objectives  Describe characteristics common

    Invertebrate Animals Honors Biology Objectives Describe characteristics common

    Backbone: supportative bone structure Chordate: has nerve chord We will cover: 6 phyla 5 invertebrate phyla 8 classes within the chordate phyla Classification Domain Kingdom Phylum Eukarya Animalia Sponges Cnidarians Flatworms Roundworms Segmented worms Molluscs Arthropods Echinoderms Chordates Classification: Invertebrate...
  • Introduction to Robotics Analysis, systems, Applications What is

    Introduction to Robotics Analysis, systems, Applications What is

    Identified as Actuators there are three common types DC Motor Stepper Motor Servo motor Stepper motor Joint Drive Systems Electric Uses electric motors to actuate individual joints Preferred drive system in today's robots Hydraulic Uses hydraulic pistons and rotary vane...
  • How Great Is Our God The splendor of

    How Great Is Our God The splendor of

    How Great Is Our God How great is our God Sing with me How great is our God All will see How great, how great is our God Words and Music by Chris Tomlin, Jesse Reeves, Ed Cash c.2004


    (Raum, Zeit, Materie, chapter II). But as he states, this result pertains to space and time as our "Anschaungsformen", so that it remains unclear what the metric and the homogeneity mean for the behavior of matter.
  • A p* primer: logit models for social networks

    A p* primer: logit models for social networks

    Frank and Strauss (1986) introduced Markov dependence, in which a possible tie from . i to j is assumed to be contingent on any other possible tie involving i or j, even if the status of all other ties in...
  • Insert Title (2nd line if necessary)

    Insert Title (2nd line if necessary)

    The Issue. 2/21/2017. Integrity - Service - Innovation. Army is citing Contractor DODAACs as bill-to party for Government Furnished Material (GFM) and citing fund codes which are associated with Army lines of accounting.
  • Introduction to PL/SQL - Drexel CCI

    Introduction to PL/SQL - Drexel CCI

    Agenda Summary of last class Loops Simple Loops WHILE Loops FOR Loops Records Cursors * * forupdat.sql (cont.) BEGIN FOR v_StudentInfo IN c_RegisteredStudents LOOP SELECT num_credits INTO v_NumCredits FROM classes WHERE department = 'HIS' AND course = 101; UPDATE students...
  • ucrania -

    ucrania -

    A pesar de ser considerado uno de los equipos más promisorios del torneo, en su primer encuentro fueron completamente sobrepasados por los españoles, que obtuvieron la victoria por 4:0. Sin embargo, dicha derrota sería olvidada rápidamente cuando ganaran con igual...