Freigeben über


Energieverwaltung für den GNSS-Receiver für moderne Standbyplattformen

In diesem Thema wird die Energieverwaltung des Global Navigation Satellite Systems (GNSS) für moderne Standby-fähige Plattformen erläutert.

Ein Windows-PC, der das moderne Standby-Energiemodell implementiert, kann auch ein Global Navigation Satellite System (GNSS)-Gerät enthalten. Ein GNSS-Gerät ermöglicht es dem Benutzer, hochpräzise Positionierungsinformationen aus einem Satellitennavigationssystem zu erhalten, wie z. B. dem Global Positioning System (GPS) oder dem Global Orbiting Navigation Satellite System (GLONASS). Nachdem die Hardwareplattform in den modernen Standby wechselt, muss das GNSS-Gerät einen Betriebsmodus mit niedriger Leistung starten, in dem es nicht mehr als 1 mW Leistung aufnimmt. Das GNSS-Gerät muss dann in diesem Modus bleiben, bis die Plattform den modernen Standby beendet.

GNSS-Geräte, die GPS und das Global Orbiting Navigation Satellite System (GLONASS) unterstützen, sind zwar seit einiger Zeit verfügbar, aber neuere GNSS-Geräte unterstützen zusätzlich Satellitennavigationssysteme wie BeiDou Navigation Satellite System (BDS) und Galileo.

Eine Plattform mit modernem Standby wird in der Regel um einen System on a Chip (SoC) integrierten Schaltkreis aufgebaut. Windows unterstützt die folgenden Optionen zum Hinzufügen eines GNSS-Geräts zu solch einer Plattform:

  • Bauen Sie ein mobiles Breitbandmodul (MBB) ein, das ein integriertes GNSS-Gerät enthält. Diese Methode ist bei Mobiltelefonen üblich.
  • Wählen Sie einen SoC aus, der ein integriertes GNSS-Gerät enthält.
  • Verwenden Sie einen Bus mit niedriger Leistung wie I2C, SPI oder UART, um ein eigenständiges GNSS-Gerät mit dem SoC zu verbinden.

Wenn möglich, sollte der Systemintegrator ein GNSS-Gerät auswählen, das einen Energiesparmodus implementiert, in welchem das Gerät nicht mehr als 1 mW Strom verbraucht. Der Hersteller des GNSS-Geräts muss einen Standortsensortreiber bereitstellen, der Standortdaten vom GNSS-Gerät in das Format übersetzt, welches von Clientanwendungen benötigt wird. Diese Anwendungen stellen über die Windows Positionssuche-API eine Verbindung mit dem GNSS-Gerät her. Der Standortsensortreiber für das GNSS-Gerät verfolgt die folgenden Informationen:

  • Die Anzahl der Clients, die derzeit über die Positionssuche-API mit dem GNSS-Gerät verbunden sind.
  • Der Zustand des Schalters zur Aktivierung/Deaktivierung des Funks für das GNSS-Gerät. Der Benutzer steuert diesen Schalter über die Windows-Einstellungen-Anwendung. Weitere Informationen finden Sie unter „Integrieren der Funkverwaltung“.

Der Standortsensortreiber verwendet diese Informationen, um zu bestimmen, wann das GNSS-Gerät im Leerlauf ist, damit es in einen Energiesparmodus versetzt werden kann. Ein GNSS-Gerät wird nur dann aktiv verwendet, wenn ein oder mehrere Clients mit dem Gerät verbunden sind. Andernfalls ist das Gerät im Leerlauf.

Um die Akkulaufzeit des Systems zu verlängern, ist der Zugriff auf das GNSS-Gerät während des modernen Standbymodus eingeschränkt. Während des modernen Standbymodus können Sperrbildschirmanwendungen auf Geofencing- und Positionsinformationen zugreifen. Dahingegen können Nicht-Sperrbildschirmanwendungen nur die Standort-API verwenden, um Standortdaten vom GNSS-Gerät abzurufen, während die Anzeige aktiviert ist und die Plattform mit dem Benutzer interagiert. Kurz nachdem die Anzeige deaktiviert wird und die Plattform in den modernen Standbymodus wechselt, werden alle Nicht-Sperrbildschirmanwendungen, die Verbindungen zum GNSS-Gerät haben, automatisch durch Windows getrennt, und die Anwendungen werden angehalten.

Energieverwaltungsmodi

Der GNSS-Empfänger hat erwartungsgemäß 4 Energieverwaltungsmodi, wie im Folgenden beschrieben.

GNSS-Empfänger Energieverwaltungsmodi

Geräte-Energiemodus Beschreibung Geräte-Energiezustand (Dx) Funkstatus (wie dem Benutzer angezeigt) Anzahl verbundener Clients Durchschnittliche Leistungsaufnahme (mW) Wechselmechanismus

Aktiv (Erwerb)

Der GNSS-Empfänger erwirbt einen Satellitenfixpunkt.

D0

Andererseits

>= 1

~200 mW

Aktiv (1 Hz Tracking)

Der GNSS-Empfänger hat einen Satellitenfixpunkt erworben und stellt einer oder mehreren Anwendungen regelmäßig Daten bereit.

D0

Andererseits

>= 1

~100 mW (Gerätespezifisch)

Standby

Es sind keine Clients mit dem GNSS-Empfänger verbunden. Die GNSS-Empfängerhardware nimmt weiterhin Leistung auf, um den Kontext auf dem Gerät beizubehalten und die Wartezeit für den aktiven Modus zu reduzieren.

D3(D3hot)

Aus oder ein

0

<1 mW (Gerätespezifisch)

Software-initiiert. Dies ist der selektive Standbymodus für GNSS-Funkgeräte, die direkt an den USB-Bus (Universal Serial Bus) oder ein USB-Verbundgerät angeschlossen sind.

Stromzufuhr entfernt

Es sind keine Clients mit dem GNSS-Empfänger verbunden, der Funk ist heruntergefahren, und die komplette Leistung wurde durch eine externe Entität vom GNSS-Empfänger entfernt.

D3(D3cold)

Aus oder ein

0

0 mW

Software-initiiert und erfordert Hardwarekoordination, um Strom abzuschalten.

Der Softwaretreiber für den GNSS-Empfänger muss zusätzlich die Funkverwaltung verarbeiten, wie unten beschrieben.

Implementierungsanforderungen an die Plattform

Eine Plattform mit modernem Standby verfügt über mehrere Optionen für die physische Integration eines GNSS-Empfängers. Der GNSS-Empfänger kann Teil eines eigenständigen Geräts sein, das mit dem SoC durch einen Kommunikationsbus mit niedriger Leistung verbunden ist. Der GNSS-Empfänger kann auch in ein mobiles Breitband-Funkgerät (MBB) integriert sein, da GNSS-Empfänger in Mobiltelefonen üblich sind. Zuletzt kann der GNSS-Empfänger in den SoC selbst integriert sein.

Diese vielfältigen Optionen stellen eine Herausforderung für den Systemintegrator dar, wenn bestimmt wird, welche Implementierung für eine Plattform ausgewählt werden soll, die GNSS-Funktionalität erfordert. Für Windows-Plattformen mit modernem Standby wird Systemintegratoren empfohlen, GNSS in folgender priorisierter Reihenfolge zu integrieren:

  1. Wenn das System mit einem MBB-Funkgerät ausgestattet ist, verwenden Sie den GNSS-Empfänger, der in das MBB-Modul integriert ist.
  2. Wenn das System mit einem SoC ausgestattet ist, das über einen integrierten GNSS-Empfänger verfügt, verwenden Sie den in das SoC integrierten GNSS-Empfänger.
  3. Integrieren Sie einen eigenständigen GNSS-Empfänger, der an das SoC angeschlossen ist, über einen Bus mit geringer Leistung (z. B. UART, SPI oder I2C).

Der Systemintegrator sollte Windows keine fremden GNSS-Empfänger verfügbar machen. In Anwesenheit mehrerer GNSS-Empfänger, die dem Betriebssystem verfügbar gemacht sind, wird Windows die Standortinformationen von allen GNSS-Geräten NICHT zusammenfassen.

Software-Energieverwaltungs-Mechanismus

GNSS-Geräte auf Windows-Plattformen werden erwartungsgemäß von einem Benutzemodus-Treiberframework (UMDF)-Treiber verwaltet, der das Windows-Sensorklassenerweiterungs-Modell verwendet und die ISensorDriver-Schnittstelle implementiert. Dieser GNSS-Treiber wird als Standortsensortreiber bezeichnet und soll die Energie des zugrunde liegenden GNSS-Empfängers verwalten und Daten für Anwendungsanfragen nach Standortinformationen bereitstellen.

Übersicht und Anwendungsmodell

Standortsensortreiber verwenden die Anzahl der verbundenen Anwendungsclients als primären Mechanismus, um zu bestimmen, wann das GNSS-Gerät in den Ruhezustand oder in den Modus ohne Stromzufuhr wechseln kann. Der Standortsensortreiber ist auch für die Kommunikation mit einer vom GNSS-Hersteller bereitgestellten Funkmanagerbibliothek verantwortlich, mit welcher der Benutzer steuern kann, ob das GNSS-Funkgerät aktiviert oder deaktiviert ist. Der Standortsensortreiber kann sowohl die Anzahl der verbundenen Clients als auch die Einstellung des Benutzers für den Funkzustand verwenden, um sicherzustellen, dass sich das GNSS-Gerät immer in einem Energiesparmodus niedriger Leistung oder in einem Modus ohne Stromzufuhr befindet, wann immer es möglich ist.

Microsoft Store-Apps verwalten die Lebensdauer von Vordergrund- und Hintergrundanwendungen und haben daher erheblichen Einfluss auf die Anzahl der Anwendungsclients, die mit dem Standortsensortreiber verbunden sind. Eine Vordergrundanwendung fordert Standortinformationen über die Windows-Positions-API an. Wenn die Vordergrundanwendung durch den Benutzer in den Hintergrund wechselt, stellt das Microsoft Store-App-Modell sicher, dass die Clientanwendung vom GNSS-Empfänger getrennt wird.

Mit diesem Anwendungsmodellmechanismus kann der Standortsensortreiber die Anzahl verbundener Anwendungsclients problemlos nachverfolgen. Wann immer keine verbundenen Anwendungsclients vorhanden sind, kann der Standortsensortreiber das GNSS-Gerät in einen Ruhezustand oder Modus ohne Stromzufuhr versetzen.

Wenn das System in den modernen Standbymodus wechselt, wird Windows automatisch alle Vordergrundanwendungen anhalten, was dazu führt, dass der Standortsensortreiber als Anzahl verbundener Clients Null beobachtet.

Integrieren der Funkverwaltung

Der Standortsensortreiber muss außerdem eine Schnittstelle implementieren, um mit der vom Hersteller bereitgestellten Funkmanager-Bibliothek zu kommunizieren. Die Funkmanager-Bibliothek ermöglicht es Windows, ein Steuerelement zur Aktivierung/Deaktivierung des Funks für das GNSS-Gerät in der Windows-Einstellungsanwendung verfügbar zu machen.

Implementierungsanforderungen für Standortsensortreiber

Der Standortsensortreiber muss das GNSS-Gerät in einen „D3“-Zustand mit niedriger Leistung versetzen, wenn das GNSS-Gerät nicht verwendet wird. Das GNSS-Gerät wird nicht verwendet, wenn keine aktuell verbundenen Clients vorhanden sind oder das GNSS über den Funkmanager deaktiviert wurde.

Der Standortsensortreiber muss das GNSS-Gerät jederzeit im „D3“-Zustand beibehalten, wenn das GNSS-Gerät über den Funkmanager deaktiviert wurde. Diese Anforderung verhindert, dass der Treiber eine energieverwaltete Warteschlange verwendet und Anforderungen von verbundenen Clients einfach weiterleitet. Der Standortsensortreiber muss eine nicht enegieverwaltete Warteschlange für E/A verwenden und den Leerlauf direkt mithilfe der Methoden StopIdle und ResumeIdle verwalten. Der Standortsensor muss weiterhin der Energierichtlinienbesitzer für den Treiberstapel des GNSS-Geräts sein. Der Treiber muss den Wert von bPowerManaged auf „FALSE“ festlegen, wenn IWDFDevice::CreateIoQueue aufgerufen wird, um die E/A-Warteschlange zu erstellen.

Wie oben erwähnt, verwendet der Treiber die Anzahl der verbundenen Clients und den Zustand des Funks aus dem Funkmanager, um zu bestimmen, ob sich das GNSS-Gerät im Leerlauf befindet. Wenn sich das GNSS-Gerät im Leerzustand befindet, ruft der Treiber die „ResumeIdle“-Methode auf, wodurch das Treiberframework einen „D3“-Wechsel initiieren kann. Das Treiberframework führt die Implementierung der OnD0Exit-Methode des Treibers aus.

Wenn das GNSS-Gerät aufgrund eines neu verbundenen Clients oder des Einschalten des Funks reaktiviert werden sollte, ruft der Treiber die StopIdle-Methode auf. Das Treiberframework wird die Implementierung der OnD0Entry-Methode des Treibers ausführen. Beachten Sie, dass der Treiber die StopIdle-Methode mit dem auf „FALSE“ festgelegten WaitForD0-Parameter ausführen muss.

Das nachstehend angegebene Zustandsdiagramm veranschaulicht diese Beziehung und dient als Leitfaden für den Treiberentwickler, wann die Methoden StopIdle und ResumeIdle aufgerufen werden sollen.

Da der Treiber dafür verantwortlich ist, nachzuverfolgen, ob sich das Gerät im Ruhezustand befindet, muss er die E/A-Warteschlange und resultierende Hardwaregerätezugriffe direkt verwalten.

Der Standortsensortreiber muss sowohl die IPnpCallbackSelfManagedIo::OnSelfManagedIoSuspend- als auch IPnpCallbackSelfManagedIo::OnSelfManagedIoRestart-Methode implementieren. Beachten Sie, dass das Treiberframework „IPnpCallbackSelfManagedIo:OnSelfManagedIoInit“ aufruft, wenn das Gerät gestartet wird, einschließlich bei Systemstart. Anschließende Aufrufe erfolgen an den IPnpCallbackSelfManagedIo::OnSelfManagedIoRestart-Rückruf. Diese Schnittstellen müssen registriert werden, wenn das Treiberframework die „CreateDevice“-Methode aufruft.

Der IPnpCallbackSelfManagedIo::OnSelfManagedIoRestart signalisiert den Standortsensortreiber, dass Anforderungen an den Treiber direkt mit der GNSS-Gerätehardware interagieren können, einschließlich Anforderungen von ISensorDriver::-Rückrufen. Beachten Sie, dass das Treiberframework garantiert, dass auf die Gerätehardware sowohl in den OnD0Exit- als auch onD0Entry-Methoden zugegriffen werden kann.

Ähnlich, wie wenn die IPnpCallbackSelfManagedIo::OnSelfManagedIoSuspend-Methode vom Framework aufgerufen wird, muss der Treiber alle „ISensorDriver“-Anforderungen unmittelbar abschließen, bevor er von OnSelfManagedIoSuspend zurückkehrt. Der Treiber kann nicht auf die Gerätehardware zugreifen, wenn dies möglicherweise verhindern würde, dass eine dieser Anforderungen innerhalb einer Sekunde abgeschlossen wird. Wenn der Standortsensortreiber über eine ausstehende Anforderung an die GNSS-Gerätehardware verfügt, muss die Anforderung abgebrochen werden, wenn sie nicht auf irgendeine andere Weise abgeschlossen werden kann, als diese Zeitbeschränkung zu verletzen.

Wenn der Treiber nicht direkt mit einem Hardwaregerät interagiert oder es garantiert ist, dass alle ausstehenden Hardwareanforderungen innerhalb einer Sekunde abgeschlossen werden, sollte der Treiber die OnSelfManagedIoSuspend-Methode mithilfe der folgenden Prozedur implementieren:

  1. Legen Sie ein globales Flag fest, das angibt, dass das Gerät inaktiv ist.
  2. Rufen Sie die StopSynchronously-Methode in der WDF-Warteschlange (Windows Treiber Frameworks) auf.
  3. Beenden Sie alle anderen asynchronen Arbeiten, welche auf die GNSS-Gerätehardware zugreifen.
  4. Rufen Sie die Start-Methode in der WDF-Warteschlange auf.
  5. Löschen Sie das globale Flag, das Sie in Schritt 1 festgelegt haben.

Ein Codebeispiel, das diese Vorgänge ausführt, finden Sie in der „OnSelfManagedIoSuspend“-Implementierung im „Sensors Geolocation Sample Driver (UMDF Version 1)“.

Wenn der Treiber direkt mit einem Hardwaregerät interagiert, müssen alle ausstehenden Anforderungen an die Hardware abgebrochen werden, bevor die E/A-Warteschlange geleert wird. Der Treiber sollte die OnSelfManagedIoSuspend-Methode mithilfe der folgenden Prozedur implementieren:

  1. Legen Sie ein globales Flag fest, das angibt, dass das Gerät inaktiv ist.
  2. Rufen Sie die Stop-Methode in der WDF-Warteschlange auf.
  3. Brechen Sie alle ausstehenden Hardwareanforderungen ab, damit alle ISensorDriver-Rückrufthreads abgeschlossen werden können.
  4. Rufen Sie die StopSynchronously-Methode in der WDF-Warteschlange auf.
  5. Beenden Sie alle anderen asynchronen Arbeiten, welche auf die GNSS-Gerätehardware zugreifen.
  6. Rufen Sie die Start-Methode in der WDF-Warteschlange auf.
  7. Löschen Sie das globale Flag, das Sie in Schritt 1 festgelegt haben.

Alle Standortsensortreiber müssen synchron die E/A-Warteschlange in ihrer Implementierung der OnSelfManagedIoFlush-Methode löschen.

Ruhezustand und Modus ohne Stromzufuhr

GNSS-Geräte können sowohl einen Ruhezustand als auch einen Modus ohne Stromzufuhr unterstützen, wenn das Gerät den lokalen Kontext beibehält und weiterhin auf Anforderungen über den Kommunikationsbus ohne externes Signal reagieren kann. (Normalerweise kann ein Gerät im Modus ohne Stromzufuhr nicht auf Busanforderungen reagieren.) Der Standortsensortreiber muss so geschrieben werden, dass er versteht, ob das zugrunde liegende Gerät den Modus ohne Stromzufuhr unterstützt. Der Standortsensortreiber sollte „D3cold“ nur aktivieren, wenn das zugrunde liegende Gerät in der Lage ist, den Modus ohne Stromzufuhr zu aktivieren und der Treiber dazu in der Lage ist, den Kontext zu speichern/wiederherzustellen und das Gerät erneut zu initialisieren. Andernfalls sollte der Standortsensor weiterhin „D3“ als Leerlaufzustand verwenden, aber nicht „D3cold“ aktivieren. Dies ermöglicht es den zugrunde liegenden Bus- und Filtertreibern, das Gerät in dem Energiesparmodus mit niedriger Leistung und nicht in den Modus ohne Stromzufuhr zu versetzen.

Wenn der Standortsensortreiber angibt, dass er „D3cold“ unterstützt und einen „D3“-Wechsel beginnt, sind die zugrunde liegenden Bus- und Filtertreiber für das Entfernen der Stromzufuhr zum Gerät verantwortlich. Der Mechanismus kann im Fall von UART-verbundenen GNSS-Geräten von ACPI implementiert werden. Der Mechanismus kann alternativ durch eine Kombination des USB-Hub-Treibers und des ACPI-Treibers aktiviert werden, im Fall von USB-aufgezählten GNSS-Geräten.

Wenn sich das GNSS-Gerät auf dem SoC befindet, sind der proprietäre Treiber und die proprietäre Firmware des SoC-Herstellers, welche in den zugrunde liegenden Treibern implementiert wurden, verantwortlich für das Entfernen der Stromzufuhr zum GNSS-Gerät. Wenn das GNSS-Gerät mehr als 1 mW im Energiesparmodus verbraucht, müssen der GNSS-Treiber, die Plattform-Firmware und -Hardware so entwickelt werden, dass sie das Gerät in den Modus ohne Stromzufuhr versetzen, wenn alle Clients getrennt sind.

Leerlauferkennung

Der Standortsensortreiber für ein GNSS-Gerät muss das Gerät in den Ruhezustand versetzen, wann immer es möglich ist. Wenn eine App ein langes Berichtsintervall anfordert, sollte der Standortsensortreiber das GNSS-Gerät bis zum nächsten Fixpunkt in den Ruhezustand überstellen. Der Standortsensortreiber muss das GNSS-Gerät mit ausreichend Zeit in den aktiven Energiemodus versetzen, um einen Fixpunkt zu Triangulieren und die App mit Standortdaten zu versorgen.

Angenommen, das kürzeste angeforderte Berichtsintervall beträgt 30 Minuten und das Gerät benötigt eine Minute, um sich bereit zu machen und einen Standortfixpunkt zu erwerben. In diesem Szenario muss der Standortsensortreiber Folgendes ausführen:

  • Unmittelbar nach der Bereitstellung von Standortinformationen „ResumeIdle“ aufrufen, was das GNSS-Gerät in den Energiesparmodus (D3) versetzt.
  • Einen Zeitgeber einstellen, der 28 Minuten in der Zukunft abläuft. (TimerExpiration = ReportInterval – WarmUpTime).
  • Wenn der Zeitgeber abläuft, „StopIdle“ aufrufen, was das GNSS-Gerät in „D0“ versetzt.
  • Wenn das Gerät einen Fixpunkt erworben hat, Standortinformationen für die Anwendung bereitstellen. Hinweis Der Standortsensortreiber muss „D3cold“ sorgfältig konfigurieren.

Wenn das Gerät kontinuierliche Leistung erfordert, um die Fortsetzungswartezeit für die „WarmUpTime“ zu erreichen, darf „D3cold“ nicht aktiviert werden. „D3cold“ kann dynamisch in der Laufzeit aktiviert werden, indem der Wert von „ExcludeD3Cold“ in der „WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS“-Struktur geändert wird.

Wenn ein per USB angeschlossenes GNSS-Gerät in den Energiesparmodus (D3) wechselt und „D3cold“ deaktiviert ist, wechselt das Gerät in den USB-Standbymodus, was eine erhebliche Einsparung an Chipsatz- und Prozessorleistung bedeutet. Wenn der Standortsensortreiber „D3cold“ und Wechsel in den Energiesparmodus (D3) aktiviert, kann die zugrunde liegende Plattform Leistung vom Gerät entfernen, selbst wenn sie über den USB-Bus angeschlossen ist.

Unterstützte Hardwarekonfigurationen

Windows unterstützt vier physische Hardwarekonfigurationen für das GNSS-Gerät. Der Konnektivitätsbus unterscheidet zwischen jeder Hardwarekonfiguration.

GNSS mit dem SoC über UART verbunden

In dieser Konfiguration ist das GNSS-Funkgerät ein eigenständiges Gerät, das mit einem UART auf dem SoC verbunden ist. Das GNSS-Funkgerät kann über eine oder mehrere GPIOs zwischen dem Funkgerät und dem SoC verfügen, um zwischen dem aktivem Energiemodus und den Energiesparmodi zu wechseln oder um mit Neustart- und Einschalten-Sequenzierungsbedingungen umzugehen.

Wenn das GNSS-Funkgerät weniger als 1 mW im Energiesparmodus verbraucht, kann das GNSS-Funkgerät mit jeder Systemstromschiene verbunden sein, welche die Spezifikationen des Geräts erfüllt.

Das GNSS-Gerät muss im ACPI-Namespace angegeben sein und die GPIOs für die Energieverwaltung sollten durch die „_PS3“- und „_PS0“-Kontrollmethoden unter dem Gerät im ACPI-Namespace gesteuert werden. Die „_PS3“- und „_PS0“-Methoden werden vom ACPI-Treiber als Reaktion auf die durch den Standortsensortreiber ausgelösten „D3“- und „D0“-Wechsel ausgeführt. Der Systemintegrator muss die GPIOs als Teil einer GPIO-Vorgangsregion im ACPI-Namespace deklarieren.

Wenn der GNSS-Empfänger mehr als 1 mW im Energiesparmodus verbraucht, muss der GNSS-Empfänger mit einer Stromschiene verbunden sein, welche über eine GPIO ein- und ausgeschaltet werden kann, die von der ACPI-Firmware auf dem SoC gesteuert wird. In dieser Konfiguration muss der Standortsensortreiber „D3cold“ aktivieren. Die GPIO zum Steuern der umschaltbaren Stromschiene muss in einer ACPI-GPIO-Vorgangsregion verfügbar gemacht werden. Der Systemintegrator muss eine Energieressource für die umschaltbare Stromschiene beschreiben, einschließlich der Methoden „_OFF“ und „_ON“ sowie der Verweise auf die Energieressource unter dem GNSS-Gerät im Namespace.

Der Windows ACPI-Treiber wird die „_OFF“-Methode auswerten, wenn der Standortsensortreiber zu „D3“ wechselt. Wenn der Standortsensortreiber zu „D0“ wechselt, wird der Windows ACPI-Treiber die „_ON“-Methode unter der Energieressource auswerten. Die Implementierung der Methoden „_OFF“ und „_ON“ sollte die GPIO umstellen, welche die umschaltbare Stromschiene steuert, und alle erforderlichen Energiesequenzierungsverzögerungen implementieren.

GNSS integriert in das SoC

Wenn das GNSS-Gerät physisch in das SoC integriert ist, dann ist die Implementierung von Kommunikation und Energieverwaltung spezifisch für das SoC selbst.

Das GNSS-Gerät muss weiterhin über ACPI aufgezählt werden, obwohl die Kommunikation mit dem zugrunde liegenden GNSS-Empfänger über einen Transporttreiber erfolgen kann, der vom SoC-Hersteller bereitgestellt wird. In dieser Konfiguration muss der Standortsensortreiber weiterhin einen „D3“-Wechsel implementieren, um in den Energiesparmodus oder in den Modus ohne Stromzufuhr zu wechseln, wenn alle Clients getrennt wurden. Der „D3“-Wechsel stellt sicher, dass Windows Betriebssystem-Energieverwaltungstools und -Diagnosen den Energiezustand des GNSS-Geräts einfach beobachten können.

Systemintegratoren, die ein GNSS-Funkgerät nutzen möchten, das in das SoC des Systems integriert ist, sollten sich eng mit dem SoC-Hersteller in Hinsicht auf Unterstützung zu Firmware, Treibern und Energieverwaltung beraten.

GNSS in ein per USB-angeschlossenes MBB-Funkgerät als USB-Verbundgerät integriert

Der Systemdesigner kann sich dazu entscheiden, ein per USB ageschlossenes MBB-Modul zu integrieren, das einen eingebetteten GNSS-Empfänger enthält. In dieser Hardwarekonfiguration kommuniziert der Standortsensortreiber direkt mit dem eingebetteten GNSS-Empfänger über den USB-Bus als eine Funktion in einem USB-Verbundgerät.

Hinweis Systeme mit GNSS-Geräten im MBB-Modul erfordern eine sorgfältige Integration. Wenden Sie sich an Ihren Microsoft-Vertreter, um das Hardware-, Software- und Firmwaredesign für diese Lösungen zu überprüfen.

In dieser Konfiguration ist das GNSS-Gerät ein integrierter Teil des MBB-Moduls. Das GNSS-Funkgerät kann Verarbeitungs-, Energieversorgungs- und RF-Antennenkomponenten mit dem MBB-Funkgerät teilen. Das GNSS-Funkgerät wird Software als Schnittstelle auf einem USB-Verbundgerät direkt verfügbar gemacht. Der Standortsensortreiber kommuniziert mit dem GNSS-Funkgerät direkt über den USB-Bus, indem er die USB-Treiberschnittstellen verwendet, welche innerhalb des Standortsensortreibers implementiert sind.

Die Energieverwaltung der GNSS-Hardware wird durch die In-Band-Kommunikation an das GNSS-Modul gesteuert. Das GNSS-Modul und der Standortsensortreiber müssen einen In-Band-Mechanismus unterstützen, um das GNSS-Funkgerät zu aktivieren und zu deaktivieren. Dieser Mechanismus darf sich nicht auf die Verwendung von GPIOs aus dem SoC an das MBB+GNSS-Modul verlassen.

Ebenso müssen das GNSS-Modul und der Standortsensortreiber den Wechsel des Geräts in den „D3“-Zustand unterstützen, sodass das USB-Verbundgerät in den USB-Energiesparmodus (selektives Energiesparen) wechseln kann. Alle Funktionen auf einem USB-Verbundgerät müssen angehalten werden, damit das Verbundgerät angehalten werden kann. Das GNSS-Gerät muss sich im Energiesparmodus (D3) befinden, damit sich die GNSS-Funktion und das gesamte USB-Verbundgerät im Standbymodus befinden können.

Hinweis Das GNSS-Gerät und der Treiber müssen den selektive Energiesparmodus unterstützen, andernfalls kann der USB-Hostcontroller auf dem SoC nicht in einen Energiesparmodus mit niedriger Leistung wechseln und verhindert Energieeinsparungen während des modernen Standbymodus.

In dieser Konfiguration wird das GNSS-Gerät über USB und den USB-Verbundtreiber aufgezählt, wird aber im ACPI-Namespace beschrieben ist. In dieser Konfiguration gibt es keine Unterstützung für die GPIO-Kommunikation zwischen dem GNSS-Gerät im MBB-Modul und dem SoC. Das GNSS-Gerät muss während der gesamten Zeit, in welcher die Plattform im „S0“-Systemenergiezustand bleibt, auf Windows über ACPI aufgezählt werden, auch wenn das Funkgerät vom Benutzer deaktiviert ist. Das GNSS-Gerät darf während der gesamten Betriebszeit des Systems nicht aus dem USB-Bus verschwinden.

GNSS in ein an USB angeschlossenes MBB-Funkgerät mit Gerätediensten integriert

Der Systemdesigner kann sich dazu entscheiden, ein per USB ageschlossenes MBB-Modul zu integrieren, das einen eingebetteten GNSS-Empfänger enthält. In dieser Hardwarekonfiguration kommuniziert der Standortsensortreiber mit dem eingebetteten GNSS-Empfänger über die Schnittstelle für mobile Breitbandgerätedienste, im Gegensatz zum als eigenständige USB-Funktion verfügbar gemachten GNSS-Gerät, das Teil des Verbundgeräts ist, welches das gesamte MBB-Modul darstellt.

Hinweis Diese Konfiguration wird nicht empfohlen. Systemintegratoren, die diese Methode der GNSS-Geräteintegration auswählen, sollten sich an ihren Microsoft-Vertreter wenden, um die richtige Implementierung zu bestätigen. Es wird bevorzugt, das GNSS-Geräts als Teil eines USB-Verbundgeräts, welches das MBB-Modul darstellt, verfügbar zu machen.

In dieser Konfiguration ist das GNSS-Gerät ein integrierter Teil des MBB-Moduls. Das GNSS-Funkgerät kann Verarbeitungs-, Energieversorgungs- und RF-Antennenkomponenten mit dem MBB-Funkgerät teilen. Das GNSS-Funkgerät wird indirekt über die Gerätediensteschnittstelle verfügbar gemacht, auf welche über die COM-Schnittstelle „WindowsIMbnDeviceServices“ zugegriffen werden kann. Der Standortsensortreiber kommuniziert über die „IMbnDeviceServices“-Schnittstelle mit dem GNSS-Funkgerät.

Die Energieverwaltung der GNSS-Hardware wird durch die In-Band-Kommunikation über die Gerätediensteschnittstelle an das MBB-Modul gesteuert. Die GNSS-Hardware muss einen In-Band-Mechanismus über die Gerätediensteschnittstelle unterstützen, um das Funkgerät zu deaktivieren und das GNSS-Gerät in einen Energiesparmodus niedriger Leistung zu versetzen. Diese Mechanismen müssen dem Standortsensortreiber über die Gerätediensteschnittstelle zugänglich sein.

In dieser Konfiguration muss das GNSS-Gerät von ACPI aufgezählt und im ACPI-Namespace als untergeordnetes Element des mobilen Breitbandmoduls beschrieben werden. Das GNSS-Gerät verfügt über keine Hardwareressourcen, die unter dem Gerät im ACPI-Namespace beschrieben werden.DFS-Namespace.

Der Standortsensortreiber muss weiterhin den gleichen Satz von Richtlinien für die Energieverwaltungsimplementierung ausführen, wie im vorherigen Abschnitt zu Treiberimplementierungsanforderungen beschrieben.

In dieser Konfiguration gibt es keine Unterstützung für die GPIO-Kommunikation zwischen dem GNSS-Gerät im MBB-Modul und dem SoC. Alle Energieverwaltungs- und Funkkommunikationen werden physisch über den USB-Bus ausgeführt und dem Standortsensortreiber über die Gerätediensteschnittstelle zur Verfügung gestellt. Das GNSS-Gerät muss über ACPI für Windows während der gesamten Betriebszeit aufgezählt werden, selbst wenn das Funkgerät vom Benutzer deaktiviert worden ist.

Bei der Implementierung dieser Hardwarekonfiguration wird dem Systemintegrator empfohlen, eng mit dem MBB-Modulhersteller zusammenzuarbeiten, um sicherzustellen, dass das GNSS-Gerät im ACPI-Namespace korrekt verfügbar gemacht wird.

Aktivierungsinteressen

Es gibt keine Aktivierungsinteressen für GNSS-Geräte. Es wird nicht erwartet, dass GNSS-Geräte das Aktivieren des SoC aus einem Zustand mit niedriger Leistung unterstützen.

Testen und Validieren

Hersteller von GNSS-Geräten, Hersteller von MBB-Modulen und Systemintegratoren sollten diese Empfehlungen befolgen, um die Energiemanagementimplementierung des GNSS-Geräts und der zugehörigen Softwarekomponenten zu testen und sicherzustellen. Weitere Informationen finden Sie in den Testanleitungen für das Global Navigation Satellite System (GNSS).

Energieverwaltung des Standortsensors

Der Systemintegrator sollte sicherstellen, dass der Standortsensortreiber für das GNSS-Gerät Wechsel ausführt und den „D3“-Zustand annimmt, wenn alle Clients getrennt wurden oder das Funkgerät deaktiviert wurde.

Die grundlegenden Testfälle sind:

  • Beobachten Sie, ob der Standortsensortreiber innerhalb von 10 Sekunden, nachdem der Bildschirm ausgeschaltet wurde, in den „D3“-Zustand wechselt, um den modernen Standbymodus zu ermöglichen.
  • Beobachten Sie, ob der Standortsensortreiber innerhalb von 10 Sekunden, nachdem das Funkgerät in der Windows Einstellungen-Anwendung ausgeschaltet wurde, in den „D3“-Zustand wechselt.
  • Beobachten Sie, ob der Standortsensortreiber sofort zu „D0“ wechselt, nachdem der moderne Standbymodus verlassen wurde und eine Anwendung gestartet wurde, welche die Location API verwendet.

Die einfachste Möglichkeit, „Dx“-Zustandswechsel des Standortsensortreibers zu beobachten, besteht darin, das Windows Performance Toolkit zu verwenden, um mit anderen Windows-Sensorgeräten zu vergleichen. Diese Methode verwendet Windows-Instrumentierung, um sicherzustellen, dass die „D3“-IRP durch dem Gerätetreiberstapel wechselt, der das GNSS-Gerät umfasst. Die Windows Energieverwaltung enthält eine integrierte Ereignisablaufverfolgung für Windows (ETW)-Instrumentierung, einschließlich der Instrumentierung für Geräteleistung (Dx) IRPs. Um diese Informationen im manuellen Modus anzuzeigen, laden und installieren Sie das Windows Performance Toolkit (WPT) auf dem zu testenden System.

Beginnen Sie mit den folgenden Befehlen eine „XPerf“-Ablaufverfolgung im Benutzermodus:

  1. Öffnen Sie eine Eingabeaufforderung als Administrator.

  2. Navigieren Sie zum Ordner \%ProgramFiles%\Windows Kits\8.0\Windows Performance Toolkit\.

  3. Starten Sie Xperf: xperf.exe -start power_session -on Microsoft-Windows-Kernel-Power

  4. Versetzen Sie das System in den modernen Standbymodus, indem Sie den Netzschalter drücken.

  5. Warten Sie 120 Sekunden.

  6. Wecken Sie das System aus dem modernen Standby-Modus, indem Sie den Netzschalter drücken.

  7. Warten Sie 60 Sekunden.

  8. Führen Sie den folgenden Befehl aus, um die Ereignisprotokollierung zu beenden: xperf.exe -stop power_session

  9. Konvertieren Sie die binäre Ablaufverfolgungsdatei in .csv- und lesbares Format: xperf.exe –i \user.etl > power.txt

  10. Öffnen Sie die Power.txt Datei in einem Text-Editor, und suchen Sie nach der Hardware-ID des GNSS-Geräts. Die Hardware-ID des GNSS-Geräts auf der Registerkarte Details der Geräteeigenschaften in Geräte-Manager unter Geräteinstanzpfad ermittelt werden. Im folgenden Beispiel ist der Geräteinstanzpfad des GNSS-Geräts ACPI\MST0731\2&daba3ff&0.

  11. Das „D3“-IRP für das GNSS-Gerät wird durch ein Ereignis vom Typ „Microsoft-Windows-Kernel-Power/IRP/Stop“ mit dem Geräteinstanzpfad des GNSS-Geräts und dem letzten Ereigniswert von 3 für den „D3“-Zustand angezeigt. Die folgende Ereignisausgabe aus der power.txt-Datei zeigt den Anfang des „D3“-IRP.

    Microsoft-Windows-Kernel-Power/Irp/Start , 7605393, "Unknown" ( 4), 256, 0, , , , , 0x868e2728, 1, 2, 0x85fb56e0, 25, "ACPI\MSFT0731\2&daba3ff&0", 3

  12. Dieses Ereignis sollte nahe am Anfang der Ausgabedatei power.txt protokolliert werden. Der Parameter 0x868e2728 im vorangegangenen Beispiel ist ein Zeiger auf die „D3“-IRP-Struktur. Durch das Auffinden der nachfolgenden Ereignissen mit diesem IRP-Zeiger kann eine Ansicht davon entdeckt werden, wie das „D3“-IRP durch den Treiberstapel, der das GNSS-Gerät umfasst, fließt. Beachten Sie, dass der IRP-Zeiger System- und Start-Lebensdauer-spezifisch sein wird.

  13. Microsoft-Windows-Kernel-Power/Irp/Start , 7605393, "Unknown" ( 4), 256, 0, , , , , 0x868e2728, 1, 2, 0x85fb56e0, 25, "ACPI\ATML1000\2&daba3ff&0", 3

  14. Microsoft-Windows-Kernel-Power/Driver/Start , 7605416, "Unknown" ( 4), 20, 0, , , , , 0x868e2728, 0x85fb56e0, "\Driver\gpsdrv"

  15. Microsoft-Windows-Kernel-Power/Driver/Stop , 7605515, "Unknown" ( 4), 20, 0, , , , , 0x868e2728, 0x85fb56e0

  16. Microsoft-Windows-Kernel-Power/Driver/Start , 7608351, "Unknown" ( 4), 20, 0, , , , , 0x868e2728, 0x857ffb90, "\Driver\ACPI"

  17. Microsoft-Windows-Kernel-Power/Driver/Stop , 7608416, "Unknown" ( 4), 20, 0, , , , , 0x868e2728, 0x857ffb90

  18. Microsoft-Windows-Kernel-Power/Driver/Start , 7608424, "Unknown" ( 4), 20, 0, , , , , 0x868e2728, 0x85fb56e0, "\Driver\sensdrv"

Bestätigen, dass das GNSS-Gerät zu „D0“ zurückwechselt, wenn der Bildschirm nach einem ähnlichen Prozess aktiviert wird. Ein Microsoft-Windows-Kernel-Power/IRP/Start-Ereignis für das GNSS-Gerät wird mit einem 0 („D0“)-Zielzustand protokolliert. Das „D0“-IRP wird durch die Treiber fließen, welche den GNSS-Gerätestapel auf ähnliche Weise umfassen wie das „D3“-IRP.

Checkliste für die GNSS-Energieverwaltung

Systemintegratoren, GNNS Funkgerätehersteller und Sensorgerätehersteller sollten die folgende Checkliste verwenden, um sicherzustellen, dass ihr System-Energieverwaltungsdesign mit Windows 8 und höher kompatibel ist.

  • Integrieren Sie ein GNSS-Gerät in diejenige Plattform, welche den modernen Standbymodus unterstützt, in der folgenden Konfigurationseinstellungsreihenfolge:

    1. Integriert zusammen mit einem MBB-Modul (für Systeme, die mit MBB ausgestattet sind), verbunden über USB.
    2. Integriert in den SoC (für Systeme, die GNSS auf dem SoC haben).
    3. Eigenständiges Gerät außerhalb des SoC, das mit UART, I2C oder einem anderen Bus mit niedriger Leistung verbunden ist.
  • Wählen Sie ein GNSS-Gerät aus, das über einen durchschnittlichen Stromverbrauch von weniger als 1 mW im Energiesparmodus (Funk deaktiviert) verfügt, einschließlich aller Busverbindungsschnittstellen.

  • Wenn das GNSS-Gerät über einen durchschnittlichen Stromverbrauch von mehr als 1 mW im Energiesparmodus (Funk deaktiviert) verfügt, muss der Systemintegrator und der GNSS-Gerätehersteller das vollständige Abschalten des Stroms vom GNSS-Gerät unterstützen, wenn keine verbundenen Anwendungsclients vorhanden sind oder der Funk vom Benutzer deaktiviert wurde.

  • Stellen Sie sicher, dass der Hersteller des GNSS-Geräts einen Standortsensortreiber bereitstellt, der die Laufzeitenergieverwaltung basierend auf der Anzahl der verbundenen Clients und dem Zustand des GNSS-Funks implementiert.

  • Stellen Sie sicher, dass der Hersteller des GNSS-Geräts eine Funkverwaltungsbibliothek bereitstellt, die das GNSS-Funkgerät in der Windows-Einstellungsanwendung verfügbar macht.

    Der Standortsensortreiber muss eine private Schnittstelle implementieren, um den Funkzustand (EIn/Aus) zwischen der vom Hersteller bereitgestellten Funkverwaltungsbibliothek und dem vom Hersteller bereitgestellten Standortsensortreiber zu kommunizieren.

  • Wenn es sich bei dem GNSS um ein eigenständiges Gerät außerhalb des SoC handelt, das über UART, I2C oder einen anderen Bus mit niedriger Leistung angeschlossen ist, müssen der Systemintegrator und der Hersteller des GNSS-Geräts:

    1. Alle GPIOs zwischen dem GNSS-Gerät und dem SoC selbst dokumentieren.
    2. Alle GPIOs für die Energieverwaltung im Rahmen einer GPIO-Vorgangsregion im ACPI-Namespace verfügbar machen.
  • Wenn es sich bei dem GNSS um ein eigenständiges Gerät außerhalb des SoC handelt, das über UART, I2C oder einen anderen Bus mit niedriger Leistung angeschlossen ist und der durchschnittliche Stromverbrauch des GNSS-Geräts im Energiesparmodus größer als 1 mW ist, müssen der Systemintegrator und der Hersteller des GNSS-Geräts:

    1. Eine ACPI-Energieressource und „_ON“/“_OFF“ Steuerungsmethoden bereitstellen, um die GNSS-Energiedomäne zu beschreiben.
    2. Die Methoden „_PR0“ und „_PR3“ unter dem GNSS-Gerät im ACPI-Namespace bereitstellen, die auf die beschriebene ACPI-Energieressource verweisen.
    3. Sicherstellen, dass der Standortsensortreiber einen „D3“-Wechsel ausführt und „D3cold“ im Treiber aktiviert.
  • Wenn der GNSS Teil eines MBB-Moduls ist, müssen der Systemintegrator und der Hersteller des GNSS-Geräts:

    1. Das GNSS-Gerät als Teil eines USB-Verbundgeräts zur Verfügung stellen.
    2. Einen Standortsensortreiber bereitstellen, der direkt über den USB-Bus mit dem GNSS-Gerät kommuniziert.
    3. Sicherstellen, dass Funk ein/aus und die komplette Energieverwaltung des GNSS-Geräts über den USB-Bus In-Band ausgeführt werden können. Es können keine GPIOs verwendet werden, um den GNSS-Funk- oder Leistungszustand in dieser Hardwarekonfiguration zu ändern.
    4. Stellen Sie sicher, dass das USB-Gerät, welches das MBB-Modul beschreibt, oder das USB-Verbundgerät, welches sowohl das MBB- als auch das GNSS-Funkgerät beschreibt, während des modernen Standbymodus in den USB-Standbymodus wechselt.
    5. Der Standortsensortreiber MUSS in den „D3“-Modus (Ruhezustand) wechseln, wenn alle Clients getrennt sind oder das Funkgerät deaktiviert wurde, auch wenn er mit dem Gerät über die Gerätediensteschnittstelle kommuniziert.
    6. Wenn das GNSS-Gerät über die Schnittstelle für mobile Breitbandgerätedienste gesteuert wird (was nicht empfohlen wird), muss das GNSS-Gerät im System-ACPI-Namespace ohne Hardwareressourcen beschrieben werden. Das GNSS-Gerät muss als untergeordnetes Element des mobilen Breitbandmoduls im ACPI-Namespace beschrieben werden.
  • Testen und bestätigen Sie, dass das GNSS-Gerät und der Standortsensortreiber die Energieverwaltung ordnungsgemäß ausführen. Bitte bestätigen Sie mindestens die folgenden Testfälle:

    • Beobachten Sie, ob der Standortsensortreiber innerhalb von 10 Sekunden, nachdem der Bildschirm ausgeschaltet wurde, in den „D3“-Zustand wechselt, um den modernen Standbymodus zu ermöglichen.
    • Beobachten Sie, ob der Standortsensortreiber innerhalb von 10 Sekunden, nachdem das Funkgerät in der Windows Einstellungen-Anwendung ausgeschaltet wurde, in den „D3“-Zustand wechselt.
    • Beobachten Sie, ob der Standortsensortreiber sofort zu „D0“ wechselt, nachdem der moderne Standbymodus verlassen wurde und eine Anwendung gestartet wurde, welche die Location API verwendet.
  • Bestätigen Sie den Stromverbrauch des GNSS-Geräts im Energiesparmodus (D3), und stellen Sie sicher, dass er im Durchschnitt kleiner als 1 mW ist.