全域導覽衛星系統 (GNSS) 驅動程序設計
討論開發全域導覽衛星系統 (GNSS) Windows 10 驅動程式時要考慮的設計原則,包括數據結構、錯誤報告和驅動程式版本控制。
資料結構
為了回溯相容性和未來的擴充性,所有數據結構都會以版本號碼和大小開始,以容納未來的延伸模組和回溯相容性問題。 為了提供額外的保護,每個結構也有填補緩衝區,即使加入新的字段,靜態結構大小也一樣。 這是為了防止任何舊版 GNSS 驅動程式錯誤地使用結構的靜態編譯時間大小, (使用 sizeof) ,而不是結構的動態大小。
除非另有指定,否則所有參數都會遵循國際單位系統 (SI) :
參數 | 單位 |
---|---|
距離、閾值或層級 | 公尺 |
逾時或間隔 | second |
速度 | 計量/秒 |
錯誤報告
全域導覽衛星系統 (GNSS) DDI 預期 NTSTATUS 為驅動程式的傳回值。 高階操作系統 (HLOS) 只會根據這些錯誤訊息對成功和失敗案例採取動作,而且不會查看特定的錯誤訊息。 仍然建議驅動程式傳回與對應 NTSTATUS 錯誤訊息緊密對應的錯誤。 GNSS 驅動程式可以傳送自己的自定義 NTSTATUS 錯誤訊息,以用於診斷目的。
驅動程式版本控制
針對全域導覽衛星系統指定的每個結構 (GNSS) DDI 都包含驅動程式版本欄位,而且許多結構都包含填補欄位。 這兩個元件都用來使用下列原則來減輕新版本的 GNSS DDI:
架構和驅動程式會使用功能交換程式來傳達其各自的版本。 這些 IOCTL 會被視為特殊,因為它們會使用 [版本] 字段來傳達其版本。 因此,裝置和平臺功能檢查周圍的實作應該先明確檢查傳回的版本,並儲存以供稍後使用。 GNSS_DEVICE_CAPABILITY 結構的版本成員會傳達驅動程式的版本號碼。 GNSS_PLATFORM_CAPABILITY 結構的版本成員會傳達 GNSS 配接器的版本號碼。
每當新增欄位時,如果結構有填補欄位,則空間應該從填補中取出,而不是新增至 結構,這樣會維持二進位相容性
每當新增欄位時,GNSS DDI 的版本就會被視為遞增。 這會反映在 GNSS DDI 標頭本身的批註中,但不會公開為常數。 GNSS 配接器和 GNSS 驅動程式都會使用私用常數值來指出其目前版本。 這可讓 GNSS 適配卡和驅動程式針對特定版本進行編碼。
GNSS 配接器必須與舊版 GNSS 驅動程式回溯相容。 如果在新版的 DDI 中引進通訊協定變更,則符合新 GNSS DDI 的 GNSS 適配卡必須只針對新版本的驅動程式實作新的通訊協定,並使用舊版驅動程式的舊通訊協定。
GNSS 驅動程式必須與較新版本的 GNSS 配接器相容,而且應該以與編碼的目前版本相同的方式來處理較新版本的 GNSS 適配卡。
舊版的 GNSS 配接器不預期能以較新版本的 GNSS 驅動程式正常運作。 為了協助針對新版本的 DDI 共同開發 GNSS 適配卡和 GNSS 驅動程式,GNSS 配接器中不會有任何嚴格的版本檢查,以封鎖較新的 GNSS 驅動程式。 不過,針對較新版本 DDI 實作的 GNSS 驅動程式將不會寄送至零售裝置,其中包含針對舊版 GNSS DDI 實作的 GNSS 適配卡。
GNSS 配接器不支援任何 Windows 8.1 或較舊的 GNSS 感測器驅動程式。 這些驅動程式會繼續在透過舊版堆疊 Windows 10 運作。 如果有另一個 Windows 10 GNSS 驅動程式,則未定義舊版 GNSS 感測器驅動程式的使用方式。