GNSS-Treiberdesign (Global Navigation Satellite System)

Erläutert Entwurfsprinzipien, die bei der Entwicklung eines GNSS-Treibers (Global Navigation Satellite System) für Windows 10 zu berücksichtigen sind, einschließlich Datenstrukturen, Fehlerberichterstattung und Treiberversionsverwaltung.

Datenstrukturen

Aus Gründen der Abwärtskompatibilität und zukünftigen Erweiterbarkeit beginnen alle Datenstrukturen mit einer Versionsnummer und -größe, um zukünftige Erweiterungen und Abwärtskompatibilitätsprobleme zu berücksichtigen. Als zusätzlichen Schutz verfügt jede Struktur auch über einen Auffüllpuffer, um die statische Strukturgröße auch dann gleich zu halten, wenn neue Felder hinzugefügt werden. Dies ist der Schutz vor älteren GNSS-Treibern, die versehentlich die statische Kompilierzeitgröße der Struktur (mithilfe von sizeof) anstelle der dynamischen Größe der Struktur verwenden.

Sofern nicht anders angegeben, folgen alle Parameter dem Internationalen Einheitensystem (SI):

Parameter Einheiten
Entfernung, Schwellenwert oder Ebene Meter
Timeout oder Intervall second
Geschwindigkeit Meter/Sekunde

Fehlerberichterstattung

Der DDI des Global Navigation Satellite System (GNSS) erwartet einen NTSTATUS als Rückgabewert vom Treiber. Das allgemeine Betriebssystem (High Level Operating System, HLOS) reagiert nur auf Erfolgs- und Fehlerfälle basierend auf diesen Fehlermeldungen und betrachtet keine bestimmte Fehlermeldung. Dennoch wird es bevorzugt, dass der Treiber Fehler zurückgibt, die der entsprechenden NTSTATUS-Fehlermeldung eng zugeordnet sind. Der GNSS-Treiber kann eigene benutzerdefinierte NTSTATUS-Fehlermeldungen senden, die für Diagnosezwecke hilfreich sein können.

Treiberversionsverwaltung

Jede für das Global Navigation Satellite System (GNSS) angegebene Struktur enthält ein Treiberversionsfeld, und viele Strukturen enthalten ein Auffüllfeld. Beide Komponenten werden verwendet, um neue Versionen des GNSS-DDI mithilfe der folgenden Richtlinien zu entschärfen:

  • Das Framework und der Treiber kommunizieren ihre jeweiligen Versionen über den Prozess zum Austausch von Funktionen. Diese IOCTLs gelten als besonders, da sie ihre Versionen über das Versionsfeld kommunizieren. Daher sollten Implementierungen, die die Überprüfung von Geräte- und Plattformfunktionen umgibt, die zuerst zurückgegebenen Versionen explizit überprüfen und für die spätere Verwendung speichern. Das Versionsmember der GNSS_DEVICE_CAPABILITY-Struktur kommuniziert die Versionsnummer des Treibers. Das Versionsmitglied der GNSS_PLATFORM_CAPABILITY-Struktur kommuniziert die Versionsnummer des GNSS-Adapters.

  • Wenn ein neues Feld hinzugefügt wird, wenn die Struktur über ein Auffüllfeld verfügt, muss leer aus der Füllung genommen werden, anstatt der Struktur hinzuzufügen, wodurch die Binärkompatibilität beibehalten wird.

  • Wenn ein neues Feld hinzugefügt wird, gilt die Version des GNSS-DDI als inkrementiert. Dies wird in einem Kommentar im GNSS-DDI-Header selbst widerspiegelt, aber NICHT als Konstante verfügbar gemacht. Sowohl der GNSS-Adapter als auch der GNSS-Treiber verwenden private Konstantenwerte, um die aktuelle Version anzugeben. Dadurch können sowohl der GNSS-Adapter als auch der Treiber für eine bestimmte Version codiert werden.

  • Der GNSS-Adapter muss abwärtskompatibel mit älteren Versionen des GNSS-Treibers sein. Wenn eine Protokolländerung in einer neuen Version des DDI eingeführt wird, muss ein GNSS-Adapter, der mit dem neuen GNSS-DDI kompatibel ist, das neue Protokoll nur für die neue Version des Treibers implementieren und das alte Protokoll für die ältere Version des Treibers verwenden.

  • Der GNSS-Treiber muss mit neueren Versionen des GNSS-Adapters kompatibel sein und sollte neuere Versionen des GNSS-Adapters auf die gleiche Weise behandeln wie die aktuelle Version, für die er codiert ist.

  • Von einer älteren Version des GNSS-Adapters wird nicht erwartet, dass sie mit einer neueren Version des GNSS-Treibers ordnungsgemäß funktioniert. Um die Gemeinsame Entwicklung des GNSS-Adapters und des GNSS-Treibers für eine neue Version des DDI zu erleichtern, gibt es keine strenge Versionsprüfung im GNSS-Adapter, um neuere GNSS-Treiber zu blockieren. Ein für eine neuere Version des DDI implementierter GNSS-Treiber wird jedoch nicht an Einzelhandelsgeräte ausgeliefert, die einen GNSS-Adapter enthalten, der für eine ältere Version des GNSS-DDI implementiert wurde.

  • Alle Windows 8.1 oder älteren GNSS-Sensortreiber werden vom GNSS-Adapter nicht unterstützt. Diese Treiber funktionieren weiterhin in Windows 10 über den Legacystapel. In Anwesenheit eines anderen Windows 10 GNSS-Treibers ist die Verwendung des Legacy-GNSS-Sensortreibers nicht definiert.