다음을 통해 공유


센서 드라이버 이벤트 정보

애플리케이션은 센서 드라이버에서 발생하는 이벤트를 구독하여 동기적으로, 특정 속성 또는 데이터 필드를 요청하거나 비동기적으로 센서로부터 정보를 수신할 수 있습니다.

센서 드라이버는 상태 변경 이벤트를 발생시키고, 이는 디바이스에서 새 작동 조건으로의 전환 및 기타 종류의 이벤트 알림에 대해 애플리케이션에 알릴 수 있습니다. 드라이버는 디바이스에서 제공하는 각 센서에 대해 별도의 이벤트를 발생시켜야 합니다.

참고IWDFDevice::P ostEvent 를 사용하여 센서 이벤트를 발생시키지 마세요. 센서 플랫폼은 연결된 클라이언트 프로그램에 이러한 이벤트를 전달하지 않습니다.

상태 변경 이벤트

센서 드라이버는 센서 클래스 확장의 ISensorClassExtension::P ostStateChange 메서드를 호출하여 상태 변경 이벤트를 발생합니다. 예를 들어 센서 초기화를 완료한 드라이버는 이 메서드를 호출하여 SENSOR_STATE_READY라는 새 SensorState 값을 신호로 보냅니다.

이벤트 상수

센서 플랫폼은 드라이버 이벤트에 대해 다음 상수를 정의합니다.

센서 이벤트 유형

센서 플랫폼은 다음 센서 이벤트 유형 식별자를 정의합니다.

속성 Description
SENSOR_EVENT_DATA_UPDATED 새 데이터를 사용할 수 있음을 나타냅니다.
SENSOR_EVENT_PROPERTY_CHANGED 속성 값이 변경되었음을 나타냅니다.
SENSOR_EVENT_STATE_CHANGED 예를 들어 SENSOR_STATE_INITIALIZING SENSOR_STATE_READY 작동 상태가 변경되었음을 나타냅니다.

Sensor Event PROPERTYKEYs

센서 플랫폼은 센서 이벤트에 대한 매개 변수를 식별하기 위해 다음 PROPERTYKEY를 정의합니다.

속성 Description
SENSOR_EVENT_PARAMETER_EVENT_ID IPortableDeviceValues의 GUID 값이 이벤트 유형 ID(예: SENSOR_EVENT_DATA_UPDATED)임을 나타냅니다.
SENSOR_EVENT_PARAMETER_STATE IPortableDeviceValues의 부호 없는 정수 값이 센서 상태(예: SENSOR_STATE_READY)임을 나타냅니다.
참고 상태 변경 이벤트를 발생하려면 ISensorClass Extension::P ostStateChange를 호출합니다. 이벤트를 발생하도록 SENSOR_EVENT_PARAMETER_STATE 명시적으로 지정할 필요는 없습니다.

기타 이벤트

센서 드라이버는 센서 클래스 확장의 ISensorClassExtension::P ostEvent 메서드를 호출하여 다른 모든 유형의 이벤트를 발생합니다. 이 메서드는 작동 상태와 관련이 없는 센서 이벤트를 발생시키는 일반 확장 가능한 방법을 제공합니다. PostEvent에 대한 각 호출에는 IPortableDeviceValuesCollection에 대한 포인터가 포함됩니다. 이 컬렉션의 각 IPortableDeviceValues 개체에는 이벤트 형식을 식별하는 SENSOR_EVENT_PARAMETER_EVENT_ID 속성의 GUID 값과 이벤트 데이터를 포함하는 선택적 데이터 필드 값이 포함됩니다. 예를 들어 새 도시 데이터가 있는 GPS 드라이버는 SENSOR_EVENT_DATA_UPDATED 이벤트 ID를 사용하고 SENSOR_DATA_TYPE_CITY 속성 키에 대한 문자열 값을 제공합니다.

드라이버가 이벤트를 게시한 후 센서 클래스 확장은 이벤트 및 연결된 데이터를 센서 API로 전달합니다.

Sensors.h라는 파일에서 플랫폼 정의 상수의 정의를 찾을 수 있습니다. 플랫폼 정의 센서 상수에 대한 자세한 내용은 상수를 참조하세요.

센서 드라이버 이벤트 관리

드라이버가 이벤트 요청을 수락하기 전에 이벤트를 생성하고 게시하는 별도의 스레드를 만들어야 합니다. 스레드를 사용하면 데이터 요청 콜백과 같은 동기 프로시저를 차단하는 빈번한 이벤트 프로시저를 방지할 수 있습니다. 데이터 업데이트 이벤트를 발생시키는 스레드 클래스의 예는 Data-Updated 이벤트 발생을 참조하세요.

하나 이상의 클라이언트 애플리케이션이 이벤트 알림을 요청한 경우에만 센서가 이벤트를 발생시켜야 합니다. 애플리케이션이 상태 변경 이벤트를 포함하여 이벤트 알림을 요청하는 경우 센서 클래스 확장은 ISensorDriver::OnClientSubscribeToEvents를 통해 드라이버에 알릴 수 있습니다. 이 메서드는 애플리케이션을 식별하는 IWDFFile 포인터와 애플리케이션이 이벤트 알림을 요청하는 센서를 식별하는 문자열을 제공합니다. IWDFFile 포인터를 고유 식별자로 사용하여 이벤트를 구독한 애플리케이션을 추적할 수 있습니다. 센서가 특정 클라이언트를 대상으로 하는 이벤트를 발생시킬 수는 없지만 SENSOR_PROPERTY_CURRENT_REPORT_INTERVAL 또는 SENSOR_PROPERTY_CHANGE_SENSITIVITY 같은 특정 속성에 대한 값을 설정하는 애플리케이션을 추적해야 할 수 있습니다.

예를 들어 여러 클라이언트 애플리케이션이 SENSOR_PROPERTY_CURRENT_REPORT_INTERVAL 대해 다른 값을 설정하는 경우 이벤트 빈도를 요청된 가장 짧은 간격으로 설정하는 규칙을 적용할 수 있습니다. 그러나 센서는 새 클라이언트가 이벤트를 구독하거나 기존 클라이언트가 구독을 취소할 때마다 간격을 조정해야 할 수 있습니다. 예제 코드를 포함하여 보고서 간격에 대한 자세한 내용은 데이터 필터링을 참조하세요.

센서 이벤트 및 데이터 개인 정보

다른 데이터 요청과 마찬가지로 이벤트 알림 요청은 센서 클래스 확장을 사용하여 안전하게 만들어집니다. 클래스 확장은 이 데이터를 요청하는 사용자에 대해서만 위치 데이터를 허용합니다.

주의

센서 클래스 확장을 사용하여 센서에 대한 모든 I/O 요청을 처리해야 합니다. 이렇게 하면 사용자의 개인 정보를 공개할 가능성이 줄어듭니다.

데이터 개인 정보에 대한 자세한 내용은 센서 및 위치 플랫폼의 개인 정보 및 보안을 참조하세요.

센서 속성