Skip to content

Latest commit

 

History

History
150 lines (103 loc) · 4.08 KB

using-logical-sensors.md

File metadata and controls

150 lines (103 loc) · 4.08 KB
description ms.assetid title ms.topic ms.date
Using Logical Sensors
97f4c44e-27dd-4f2a-b987-060bb2d9bc00
Using Logical Sensors
concept-article
05/31/2018

Using Logical Sensors

To instantiate a device node for a logical sensor, or to reconnect to an existing logical sensor device node, an application or service must call ILogicalSensorManager::Connect. The pPropertyStore parameter for this method requires a pointer to an IPropertyStore interface that contains the IDs for the sensor drivers to connect to. This means that you must create a property store and add this data to the store before calling this method.

Connecting to the Logical Sensor

To connect to a logical sensor, you must provide, at a minimum, a hardware ID, as defined in the sensor driver's .inf file, and a logical GUID that identifies the sensor. The platform uses this GUID to identify the sensor when you choose to disconnect from, or uninstall, the sensor device node.

The following example code creates a helper method that connects to a specified logical sensor. The method parameters receive the sensor hardware ID and a unique GUID to identify the sensor.

HRESULT ConnectToLogicalSensor(PCWSTR* wszHardwareID, GUID guidLogicalID)
{
    HRESULT hr = S_OK;
    
    ILogicalSensorManager* pLSM = NULL;
    IPropertyStore* pStore = NULL;
    PROPVARIANT pv = {};

    // Create the property store.
    hr = PSCreateMemoryPropertyStore(IID_PPV_ARGS(&pStore));

    if(SUCCEEDED(hr))
    {
        // Create the logical sensor manager.
        hr = CoCreateInstance(CLSID_LogicalSensorManager, 
                                NULL, 
                                CLSCTX_INPROC_SERVER, 
                                IID_PPV_ARGS(&pLSM));
    }

    // Fill in the values.
    if(SUCCEEDED(hr))
    {
        hr = InitPropVariantFromStringVector(wszHardwareID, 1, &pv);
    }

    if(SUCCEEDED(hr))
    {
        hr = pStore->SetValue(PKEY_Device_HardwareIds, pv);
    }

    if(SUCCEEDED(hr))
    {
        hr = pStore->SetValue(PKEY_Device_CompatibleIds, pv);
    }

    if(SUCCEEDED(hr))
    {
        // Connect to the logical sensor.
        hr = pLSM->Connect(guidLogicalID, pStore);
    }

    SafeRelease(&pStore);
    SafeRelease(&pLSM);

    return hr;
}

Disconnecting from a Logical Sensor

To disconnect from a logical sensor, you must provide the same logical ID that you used when you called Connect.

The following example code creates a helper function that disconnects from a logical sensor.

HRESULT DisconnectFromLogicalSensor(GUID guidLogicalID)
{
    HRESULT hr = S_OK;

    ILogicalSensorManager* pLSM = NULL;
 
    if(SUCCEEDED(hr))
    {
        // Create the logical sensor manager.
        hr = CoCreateInstance(CLSID_LogicalSensorManager, 
                                NULL, 
                                CLSCTX_INPROC_SERVER, 
                                IID_PPV_ARGS(&pLSM));
    }

    if(SUCCEEDED(hr))
    {
        hr = pLSM->Disconnect(guidLogicalID);
    }

    SafeRelease(&pLSM);

    return hr;
}

Uninstalling a Logical Sensor

To uninstall a logical sensor, you must provide the same logical ID that you used when you called Connect.

The following example code creates a helper function that uninstalls a logical sensor.

HRESULT UninstallLogicalSensor(REFGUID guidLogicalID)
{
    HRESULT hr = S_OK;

    ILogicalSensorManager* pLSM;
 
    // Create the logical sensor manager.
    hr = CoCreateInstance(CLSID_LogicalSensorManager, 
                            NULL, 
                            CLSCTX_INPROC_SERVER, 
                            IID_PPV_ARGS(&pLSM));
 
    if(SUCCEEDED(hr))
    {
        hr = pLSM->Uninstall(guidLogicalID);
    }

    SafeRelease(&pLSM);

    return hr;
}

Related topics

About Logical Sensors