Compartir a través de


Uso de sensores lógicos

Para crear instancias de un nodo de dispositivo para un sensor lógico, o para volver a conectarse a un nodo de dispositivo de sensor lógico existente, una aplicación o un servicio debe llamar a ILogicalSensorManager::Connect. El parámetro pPropertyStore para este método requiere un puntero a una interfaz IPropertyStore que contiene los identificadores a los que se van a conectar los controladores del sensor. Esto significa que debe crear un almacén de propiedades y agregar estos datos al almacén antes de llamar a este método.

Conexión al sensor lógico

Para conectarse a un sensor lógico, debe proporcionar, como mínimo, un identificador de hardware, tal como se define en el archivo .inf del controlador del sensor y un GUID lógico que identifique el sensor. La plataforma usa este GUID para identificar el sensor cuando se decide desconectar o desinstalar, el nodo del dispositivo del sensor.

El código de ejemplo siguiente crea un método auxiliar que se conecta a un sensor lógico especificado. Los parámetros del método reciben el identificador de hardware del sensor y un GUID único para identificar el 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;
}

Desconexión de un sensor lógico

Para desconectarse de un sensor lógico, debe proporcionar el mismo identificador lógico que usó al llamar a Connect.

En el código de ejemplo siguiente se crea una función auxiliar que se desconecta de un sensor lógico.

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;
}

Desinstalación de un sensor lógico

Para desinstalar un sensor lógico, debe proporcionar el mismo identificador lógico que usó al llamar a Connect.

En el código de ejemplo siguiente se crea una función auxiliar que desinstala un sensor lógico.

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;
}

Acerca de los sensores lógicos