Usando sensores lógicos
Para criar uma instância de um nó de dispositivo para um sensor lógico ou reconectar-se a um nó de dispositivo de sensor lógico existente, um aplicativo ou serviço deve chamar ILogicalSensorManager::Connect. O parâmetro pPropertyStore para esse método requer um ponteiro para uma interface IPropertyStore que contém as IDs para os drivers de sensor se conectarem. Isso significa que você deve criar um repositório de propriedades e adicionar esses dados ao repositório antes de chamar esse método.
Conectando-se ao Sensor Lógico
Para se conectar a um sensor lógico, você deve fornecer, no mínimo, uma ID de hardware, conforme definido no arquivo .inf do driver do sensor e um GUID lógico que identifique o sensor. A plataforma usa esse GUID para identificar o sensor quando você opta por desconectar ou desinstalar o nó do dispositivo do sensor.
O código de exemplo a seguir cria um método auxiliar que se conecta a um sensor lógico especificado. Os parâmetros de método recebem a ID de hardware do sensor e um GUID exclusivo para identificar o 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;
}
Desconectando-se de um sensor lógico
Para se desconectar de um sensor lógico, você deve fornecer a mesma ID lógica usada quando chamou Connect.
O código de exemplo a seguir cria uma função auxiliar que se desconecta de um 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;
}
Desinstalando um sensor lógico
Para desinstalar um sensor lógico, você deve fornecer a mesma ID lógica usada quando chamou Connect.
O código de exemplo a seguir cria uma função auxiliar que desinstala um 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;
}
Tópicos relacionados