Condividi tramite


Uso di sensori logici

Per creare un'istanza di un nodo dispositivo per un sensore logico o per riconnettersi a un nodo del dispositivo sensore logico esistente, un'applicazione o un servizio deve chiamare ILogicSensorManager::Connect. Il parametro pPropertyStore per questo metodo richiede un puntatore a un'interfaccia IPropertyStore che contiene gli ID per i driver del sensore a cui connettersi. Ciò significa che è necessario creare un archivio proprietà e aggiungere questi dati all'archivio prima di chiamare questo metodo.

Connessione al sensore logico

Per connettersi a un sensore logico, è necessario specificare, almeno, un ID hardware, come definito nel file inf del driver del sensore e un GUID logico che identifica il sensore. La piattaforma usa questo GUID per identificare il sensore quando si sceglie di disconnettersi o disinstallare il nodo del dispositivo sensore.

Il codice di esempio seguente crea un metodo helper che si connette a un sensore logico specificato. I parametri del metodo ricevono l'ID hardware del sensore e un GUID univoco per identificare il sensore.

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

Disconnessione da un sensore logico

Per disconnettersi da un sensore logico, è necessario specificare lo stesso ID logico usato quando si chiama Connetti.

Il codice di esempio seguente crea una funzione helper che disconnette da un sensore logico.

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

Disinstallazione di un sensore logico

Per disinstallare un sensore logico, è necessario specificare lo stesso ID logico usato quando si chiama Connetti.

Il codice di esempio seguente crea una funzione helper che disinstalla un sensore logico.

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

Informazioni sui sensori logici