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