전원 및 성능에 대한 위치 드라이버 지침
다음 섹션에서는 위치 드라이버가 전원을 절약하고 데이터를 효율적으로 제공하는지 확인하기 위한 지침을 설명합니다.
연결된 클라이언트 수 및 라디오 상태 추적
위치 센서는 연결된 애플리케이션의 수를 추적해야 하며 구독된 각 애플리케이션에 대한 SENSOR_PROPERTY_LOCATION_DESIRED_ACCURACY 및 SENSOR_PROPERTY_CURRENT_REPORT_INTERVAL 속성의 값을 추적해야 합니다.
연결된 클라이언트 수가 0이면 위치 센서가 가능한 가장 낮은 전원 상태인 D3을 입력해야 합니다. 이벤트가 클라이언트가 연결되어 있음을 나타내는 경우 센서는 저전력 상태를 종료하고 데이터를 획득해야 합니다.
또한 위치 장치에 GPS 위치 센서와 같은 라디오가 포함된 경우 라디오 관리도 사용하여 라디오 상태를 추적해야 합니다. 드라이버 작성기는 라디오 상태를 설정하기 위해 드라이버와 통신하는 라디오 관리 구현을 만들어야 합니다. 무선 관리 구현의 예와 드라이버와 통신하는 방법은 센서 지리적 위치 드라이버 샘플에 있습니다.
연결된 클라이언트 및 라디오 상태를 추적할 때 위치 센서는 라디오가 켜진 동안 연결된 클라이언트가 없는 경우 가능한 가장 낮은 전원 상태(가급적 D3)를 입력해야 합니다. 아래 다이어그램은 연결된 클라이언트, 라디오 상태 및 제안된 해당 디바이스 상태에 대한 상태 머신을 보여 줍니다.

다음 표에서는 다양한 입력 조합과 결과 출력(전원 상태 포함)의 또 다른 보기를 제공합니다.
| 클라이언트가 있음(입력) | 라디오 상태(입력) | CRI(입력) | 보고된 위치(입력) | ASIC 상태(출력) | 센서 상태(출력) | 전원 상태(출력) |
|---|---|---|---|---|---|---|
| 예 | 모두 | 모두 | 모두 | 꺼짐 | 해당 없음 | D3 |
| 예 | 설정 | <=120초 | 예 | 설정 | 초기화 중 | D0 |
| 예 | 설정 | <=120초 | 예 | 설정 | 준비 | D0 |
| 예 | 꺼짐 | 모두 | 모두 | 꺼짐 | 사용할 수 없음 | D3 |
| 예 | 설정 | >120초 | 모두 | 꺼짐 | 준비 | D3 |
| 예 | 설정 | >120초 | 모두 | 설정 | 준비 | D0 |
WDK의 센서 지리적 위치 드라이버 샘플 은 연결된 클라이언트 수와 라디오 상태를 추적하는 드라이버의 예를 제공합니다.
보고서 간격 추적
이벤트를 구독하여 위치 데이터를 사용하는 애플리케이션은 SENSOR_PROPERTY_CURRENT_REPORT_INTERVAL 속성을 설정하여 데이터 업데이트 이벤트의 최대 빈도를 요청합니다. 전원을 절약하려면 드라이버가 요청된 가장 낮은 보고서 간격보다 더 자주 데이터 보고서를 보내지 않아야 합니다.
각 애플리케이션의 값을 추적하는 방법에 대한 자세한 내용은 데이터 필터링을 참조하세요. WDK의 센서 지리적 위치 드라이버 샘플 에서 보고서 간격을 추적하는 예제도 찾을 수 있습니다.
원하는 정확도 추적
클라이언트당 보고서 간격이 추적되는 것처럼 각 클라이언트에서 요청한 정확도 수준을 추적해야 합니다.
WDK의 센서 지리적 위치 드라이버 샘플 은 클라이언트가 요청한 원하는 정확도를 추적하는 드라이버의 예를 제공합니다.
위치 센서 드라이버는 SENSOR_PROPERTY_LOCATION_DESIRED_ACCURACY 설정 가능한 속성으로 지원해야 합니다. 드라이버는 연결된 클라이언트의 원하는 정확도 속성을 모니터링하고 요청된 가장 높은 정확도에 따라 SENSOR_PROPERTY_LOCATION_DESIRED_ACCURACY 설정해야 합니다.
앱에서 요청한 최고 정확도가 DESIRED_ACCURACY_DEFAULT 위치 센서는 전원 및 기타 비용 고려 사항을 최적화해야 합니다. 위치 데이터를 시스템의 다른 공급자에서 사용할 수 있고 데이터 정확도가 500m 이상인 경우 위치 API는 GPS 센서를 사용하지 않습니다.
앱 요청이 DESIRED_ACCURACY_HIGH 경우 센서는 가능한 가장 높은 정확도 보고서를 제공해야 합니다. 위치 API는 가능한 가장 정확한 위치를 얻기 위해 항상 모든 위치 센서(GPS 포함)에 연결됩니다.
유휴 상태 검색
드라이버는 유휴 상태를 감지하고 저전력 상태를 입력해야 합니다. 예를 들어 GPS 디바이스의 위치가 변경되지 않거나 보류 중인 I/O 요청이 없거나 데이터를 사용할 수 없는 경우 유휴 상태가 발생할 수 있습니다. GPS 또는 GNSS(전역 탐색 위성 시스템) 디바이스가 USB를 통해 구현되는 경우 선택적 일시 중단을 지원해야 합니다. 자세한 내용은 UMDF 기반 드라이버에서 유휴 Power-Down 지원을 참조하세요.
GPS 및 GNSS(전역 탐색 위성 시스템)에 대한 위치 주입
GPS 또는 GNSS(전역 탐색 위성 시스템) 센서는 시스템의 삼각측량 센서의 데이터를 사용하여 첫 번째 수정 시간을 단축할 수 있습니다. 이를 위치 주입이라고 합니다.
이러한 센서 간 통신 사용은 취득 단계에서만 지원됩니다. GNSS(전역 탐색 위성 시스템) 드라이버는 센서 API를 통해 Windows 위치 공급자를 포함한 모든 삼각측량 센서에 대한 연결을 열 수 있습니다. 그런 다음 위치 데이터를 사용할 수 있는 경우 드라이버는 거친 위치를 가져올 수 있습니다. 드라이버는 위치를 얻은 직후 연결을 닫아야 합니다.
GNSS(전역 탐색 위성 시스템) 드라이버가 15초 이내에 센서 API에서 위치를 얻지 못하면 시간이 초과되어 센서 API에 대한 연결을 닫아야 합니다. 이벤트를 계속 구독하지 마세요.
중요
Windows 위치 공급자(또는 센서 API를 통한 다른 센서)에 대한 영구 연결을 열어 두면 안 됩니다.
중요
다른 위치 센서에서 데이터를 가져오기 위해 ILocation 을 인스턴스화하지 마세요. 대신 센서 API(ISensorManager)를 사용합니다.
참고
센서는 동일한 유형의 위치 센서에서 데이터를 가져와서는 안 됩니다. 예를 들어 삼각측량 센서는 다른 삼각측량 센서의 데이터를 사용하면 안 됩니다.
삼각측량 센서에 액세스하려면 형식이 SENSOR_TYPE_LOCATION_TRIANGULATION ISensorManager::GetSensorByType 을 호출합니다. 그러면 Windows 8 기본 제공되는 Windows 위치 공급자를 포함하여 모든 삼각측량 센서가 반환됩니다. GPS 드라이버는 여러 센서로 반환되는 0개의 센서에서 어디서나 처리할 수 있어야 합니다. GetSensorsByType 사용에 대한 자세한 내용은 센서 개체 검색을 참조하세요.
참고
Windows 위치 공급자는 정확도 또는 가용성을 보장하지 않습니다.
센서 간 통신에 센서 API를 사용하여 위치 융합(예: 가속도계 또는 자이로 자력계 데이터 사용)을 사용하여 물리적 위치를 추정하는 것은 지원되지 않습니다.