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