Energieverwaltung für die Kamera
Energieverwaltungsmodi
Die Off-SoC-Komponenten des Kamera-Subsystems müssen zwei Energieverwaltungsmodi unterstützen. Die Kamerakomponenten müssen einen aktiven Modus unterstützen, in dem das Kameragerät aktiv Inhalte an eine Anwendung streamt. Darüber hinaus müssen die Kamerakomponenten einen Modus ohne Stromzufuhr unterstützen, in dem das Kameragerät deaktiviert ist, die Stromzufuhr abgeschaltet wird und das Kameragerät null Watt verbraucht. In der folgenden Tabelle wird der aktive Modus und der Modus ohne Stromzufuhr des Kamerageräts beschrieben.
Mode | BESCHREIBUNG | Energiezustand Gerät (Dx) | Durchschnittlicher Stromverbrauch | Beenden der Latenz für aktiv | Übergangsmechanismus |
---|---|---|---|---|---|
Aktiv (Streaming) |
Das Kameragerät streamt aktiv Inhalte an eine Anwendung. Der Inhalt kann ein Video, eine Vorschau oder eine Fotoaufnahme sein. |
Yes |
Sensor-, AF- und Blitzspezifisch. |
– |
Software-initiierter D0-Übergang. (Eine Anwendung hat das Streaming initiiert, indem sie den Status eines Capture-Pins auf „KSSTATE_ACQUIRE“ festgelegt hat.) |
Stromzufuhr – entfernt |
Das Kameragerät streamt keine Inhalte an Anwendungen. Auf dem Kamerasensor, dem Blitzgerät oder dem Autofokusmodul bleibt kein Kontext erhalten. |
Yes |
0 Watt |
< 200 Millisekunden bis zum ersten Frame (Siehe folgende Tabelle.) |
Software-initiierter D3-Übergang. (Der Status aller Streaming-Pins wurde auf einen anderen Wert als „KSSTATE_RUN“ festgelegt.) |
Hinweis Windows erwartet, dass die Übergangszeit vom aktiven Modus zum Modus ohne Stromzufuhr (die „Off-Latenz“) weniger als 100 Millisekunden beträgt. Der größte Energieverwaltungsaufwand entfällt auf die Verringerung der Übergangszeit vom Modus ohne Stromzufuhr in den aktiven Modus (die „On-Latenz“).
Die gleichen beiden Energieverwaltungsmodi, sowohl der aktive Modus als auch der Modus ohne Stromzufuhr, müssen von den On-SoC-Bildverarbeitungseinheiten unterstützt werden. Der SoC-Anbieter definiert die einzelnen Komponenten der Bildverarbeitungseinheiten sowie deren Energieverwaltungsstatus. Ein einzelner Treiber sollte die On-SoC-Bildverarbeitungseinheiten steuern. Alle Bildverarbeitungseinheiten für die Kameraaufnahme sollten dem Power Engine Plug-In (PEP) als einzelne energieverwaltete Komponenten präsentiert werden.
Software-Energieverwaltungs-Mechanismen
Sowohl die On-SoC-Bildverarbeitungseinheiten als auch die Off-SoC-Kamerakomponenten sollten keine Leistung (null Watt) verbrauchen, wenn sich das System im verbundenen Standbymodus befindet und die Anzeige deaktiviert ist. Der primäre Softwaremechanismus für die Energieverwaltung ist die Zählung des Kameraaufnahme-Pins. Diese Referenzanzahl wird vom Kameracontrollertreiber verwaltet, welcher ein AVStream-Minitreiber ist. Dieser grundlegende Energieverwaltungsmechanismus kann jederzeit verwendet werden, wenn das System aktiviert ist, auch wenn die Systemanzeige aktiviert ist.
Der Kameracontrollertreiber sollte den Status der Energieverwaltung an die Treiber weiterleiten, die Off-SoC-Komponenten wie den Kamerasensor, den automatischen Fokus und den Blitz steuern. Daraufhin sollten die Treiber, die diese Geräte steuern, bestimmte Maßnahmen ergreifen, um Betriebszustände zu ändern und die Energiezufuhr aus- oder einzuschalten.
Empfohlene Treiberarchitektur
Das Kamera-Subsystem sollte über einen einzelnen AVStream-Minitreiber als Kameracontrollertreiber für Windows verfügbar gemacht werden. Es wird empfohlen, dass der Kameracontrollertreiber nicht direkt auf Hardware zugreifen und nicht direkt die Stromversorgung von Hardwarekomponenten verwalten kann. Stattdessen sollte der Kameracontrollertreiber Energieverwaltungs- und Hardwareanforderungen an andere Treiber des Kamera-Subsystems weiterleiten.
Die Stromversorgung der On-SoC-Bildverarbeitungshardware sollte vom Power Engine Plug-In (PEP) des SoC energieverwaltet werden. Die Bildverarbeitungshardware sollte von einem Windows Treiberframeworks-Treiber (WDF-Treiber) verwaltet werden. Dieser Treiber sollte die Kooperation mit dem PEP aktivieren, indem das Element IdleTimeout in der Struktur WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS auf SystemManagedIdleTimeout festgelegt wird. Diese Einstellung ermöglicht es dem PEP, jede spezifische Taktrate und Topologie für die gemeinsame Nutzung der Stromschiene der SoC-Hardware zu steuern. Der Treiber, der die Bildverarbeitungseinheit auf dem SoC steuert, sollte die gesamte Bildverarbeitungseinheit als einzelne energieverwaltete Komponente darstellen, damit die Standard-WDF-Funktionen für die Energieverwaltung verwendet werden können.
Die Komponenten des Off-SoC-Kamera-Subsystems sollten von mindestens einem Kernelmodus-Treiberframework (KMDF) verwaltet werden. Die Treiber für die Off-SoC-Komponenten müssen in den Zustand ohne Stromzufuhr (D3) versetzt werden, wenn ihre Komponenten für die Kameraaufnahme nicht mehr erforderlich sind. Darüber hinaus müssen die Treiber für die Off-SoC-Komponenten D3cold aktivieren, wodurch das zugrunde liegende ACPI-Subsystem den Zustand der GPIO-Leitungen ändern kann, um die Stromzufuhr ein- oder auszuschalten. Weitere Informationen finden Sie unter Unterstützen von D3cold in einem Treiber.
Das folgende Blockdiagramm zeigt die empfohlene Treiberarchitektur.
Alle Treiber des Kamera-Subsystems – einschließlich des Kameracontrollertreibers, des Treibers der Bildverarbeitungseinheit und der Treiber für die Komponenten der Off-SoC-Kamerakomponenten – müssen in derselben Treiberinstallationsdatei (.inf) aufgezählt werden. Alle Treiber des Kamera-Subsystems müssen der Bildverarbeitungs-PnP-Geräteeinrichtungsklasse angehören. Die ClassGuid für Bildverarbeitungsgeräte lautet {6bdd1fc6-810f-11d0-bec7-08002be2092f}.
Jeder Treiber, der eine einzelne Kamerakomponente darstellt, sollte im ACPI-Namespace als einzelnes Gerät aufgezählt werden.
Aktiver Zustand und Zustand ohne Stromzufuhr
Der Kameracontrollertreiber muss die Kamerageräte in den Zustand ohne Stromzufuhr versetzen, wenn keine Anwendungen Inhalte aus dem Kameragerät streamen. Eine Anwendung kann das Streamen beenden, wenn sie vom Benutzer geschlossen wurde oder in den Hintergrund gewechselt und angehalten wurde.
Wenn eine Anwendung das Streaming von einer Kamera initiiert, deren Geräte sich im Zustand ohne Stromzufuhr befinden, muss der Kameracontrollertreiber die Kamerageräte innerhalb von 100 Millisekunden wieder in den aktiven Zustand bringen.
Um die Energiezustände der verschiedenen Kamera-Subsystemkomponenten zu ändern, verwenden Kameracontrollertreiber eigene Schnittstellen, um mit den anderen Treibern des Kamera-Subsystems zu kommunizieren. Um die entsprechende Schnittstelle abzufragen, sollte ein Kamera-Subsystemtreiber die Standardmethode verwenden und eine IRP_MN_QUERY_INTERFACE-E/A-Anforderung senden, die eine Reihe von Funktionszeigern abruft.
Der Kameracontrollertreiber muss das Kameragerät in den Zustand ohne Stromzufuhr versetzen, wenn alle Streaming-Pins in den Zustand KSSTATE_STOP versetzt wurden. Windows hält Vordergrundanwendungen automatisch an, wenn der Benutzer den Netzschalter drückt und das System in den verbundenen Standbymodus wechselt. Wenn eine Aufnahmeanwendung angehalten wird, werden die von der Windows-Laufzeit bereitgestellten Kameraaufnahme-APIs benachrichtigt und ändern den Zustand der Kameraaufnahme-Pins, wodurch sie in den Zustand KSSTATE_STOP versetzt werden.
Wenn der erste Streaming-Pin in den Zustand KSSTATE_ACQUIRE versetzt wird, muss der Kameracontroller-Treiber das Kameragerät – einschließlich der On-SoC-Bildverarbeitungseinheit – in den aktiven Zustand wechseln.
Verwandte Kamerafunktionen
Kamerasensoren und Blitzgeräte verfügen möglicherweise über zusätzliche Funktionen auf Plattformebene, die vom Treiber verwaltet werden müssen. Dabei kann es sich z. B. um die folgenden Funktionen handeln:
- Aktivieren, Deaktivieren und Konfigurieren des Kamerasensors über den I2C-Bus.
- Konfigurieren der Blitzwiederholungsrate und der Helligkeitsstufe über den I2C-Bus.
- Erkennen des Temperaturzustands des Blitzmoduls über GPIO-Leitungen vom Blitzmodul zum SoC.
Um diese Funktionen zu implementieren, sollten Kameragerätetreiberentwickler die Methoden und Anleitungen in der folgenden Tabelle verwenden.
Funktion | Beschreibung | Hardware-/Firmwareverbindung | Softwaremechanismus |
---|---|---|---|
Sensorkonfiguration | Aufzählen der Funktionen der Kamerasensorhardware auf oder konfigurieren des aktuellen Betriebsmodus. | Kommunikation über I2C-Bus. I2C-Ressourcen werden in der Methode „_CRS“ im Eintrag des Kamerageräts im ACPI-Namespace beschrieben. | Der Die Anforderungsschnittstelle des Simple Peripheral Bus (SPB) für Eingabe/Ausgabe (E/A) wird verwendet, um mit dem I2C-Hostcontroller und dem Kamerasensorgerät zu kommunizieren. |
Sensorereigniserkennung | Auslösen von Ereignissen oder Kommunizieren des Status mithilfe von GPIO-Leitungen vom Kamerasensor zum SoC. | GPIO-Ressourcen, die dem Kameragerät bereitgestellt werden. Diese Ressourcen werden in der Methode „_CRS“ im Eintrag des Kamerageräts im ACPI-Namespace beschrieben. GPIO-Pins, denen zufolge Signalereignisse als GPIO-Unterbrechungsressourcen beschreiben müssen. | Die Unterbrechung wird vom Treiber als Reaktion auf das GPIO-Ereignis verarbeitet. Die SPB-E/A-Anforderungsschnittstelle wird verwendet, um mit dem Sensorgerät zu kommunizieren und die Ursache der Unterbrechung zu ermitteln. |
Blitz-Konfiguration | Konfiguration des Blitzgerät für Wiederholungsrate, Anzahl der verbundenen LEDs oder andere Eigenschaften. | Kommunikation über I2C-Bus. I2C-Ressourcen werden in der Methode „_CRS“ im Eintrag des Kamerageräts im ACPI-Namespace beschrieben. | Die SPB-I/O-Anforderungsschnittstelle wird verwendet, um mit dem I2C-Hostcontroller und dem Kamerasensorgerät zu kommunizieren. |
Koordination mit dem Treiber der Bildverarbeitungseinheit | Initiieren und koordinieren der Aufnahme mithilfe der Bildverarbeitungsschaltung auf dem SoC. | – | Die private Schnittstelle wird vom Treiber verfügbar gemacht, der die Bildverarbeitungseinheiten verwaltet. |
Kamerageräteaufzählung
Um Kamerageräte auf der Plattform zu identifizieren, fragen Anwendungen in der Regel Instanzen von Kamerageräten beim Plug & Play-Manager (PnP-Manager) ab. Jede PnP-Instanz entspricht einem einzelnen Kameragerät. Um eine solche Instanz zu identifizieren, definiert der Systemintegrator ein Kameragerät im ACPI-Namespace. Ein Kameragerät kann Inhalte jeweils nur auf eine Anwendung streamen. Eine Anwendung kann jedoch gleichzeitig von mehreren Kamerageräten streamen.
Jedes Kameragerät, das vom Kameracontrollertreiber (AVStream-Minitreiber) repräsentiert wird, muss im ACPI-Namespace als separates Gerät aufgezählt werden, das ein untergeordnetes Element des Grafiktreibers ist.
Sonderfall: Falls die SoC-Plattform bei keiner Kombination von Auflösungen oder Modi in der Lage ist, Inhalte von allen Kamerageräten auf der Plattform gleichzeitig zu streamen, kann stattdessen ein einzelnes Kameragerät aufgezählt werden. Diese Implementierung sollte jedoch gut überlegt sein und nur in direkter Zusammenarbeit mit Microsoft durchgeführt werden.
Die Geräte des restlichen Kamera-Subsystems – einschließlich der On-SoC-Bildverarbeitungseinheit und des Off-SoC-Kamerasensors, der automatischen Fokussteuerung und des Blitzes – sollten als ein oder mehrere Geräte im ACPI-Namespace aufgezählt werden. Die On-SoC-Bildverarbeitungseinheit sollte als eigenständiges Gerät aufgezählt werden, abseits von den Geräten der Off-SoC-Komponenten der Kamera.
Checkliste für die Energieverwaltung für die Kamera
Systemintegratoren, Kamerasensoranbieter und SoC-Anbieter sollten anhand der Checkliste in diesem Artikel sicherstellen, dass ihr System-Energieverwaltungsdesign mit Windows 10 und höher kompatibel ist.
- Systemintegratoren müssen bei der Auswahl und Integration von Kamerasensorkomponenten mit dem SoC-Anbieter kommunizieren und zusammenarbeiten.
- Der Kameracontrollertreiber muss folgendes gewährleisten:
- Deaktivieren der Stromversorgung der Kamerahardware, wenn Anwendungen keine Inhalte mehr über das Kameragerät streamen. (Dies tritt auf, wenn sich alle Aufnahme-Pins im Zustand „KSSTATE_STOP“ befinden.)
- Aktivieren der Stromversorgung der Kamerahardware, wenn eine Anwendung das Streaming von einem der Aufnahme-Pins auf dem Kameragerät startet.
- Entwickeln eines KMDF-Treiber, der die On-SoC-Bildverarbeitungseinheit verwaltet. Der Kameracontrollertreiber sollte den Treiber der Bildverarbeitungseinheit über angepasste Treiberschnittstellen anweisen, die Kameraaufnahme zu starten oder zu beenden.
- Sicherstellen, dass der Treiber für die Bildverarbeitungseinheit im Windows-Framework für die Energieverwaltung (PoFx) registriert ist, damit der vom SOC-Anbieter bereitgestellte PEP die Energieverwaltung der Hardware der Bildverarbeitungseinheit steuern kann.
- Entwickeln je eines Windows-Treiberframework-Treibers (WDF-Treiber) für die Verwaltung aller Hardwarekomponenten, von denen die Off-SoC-Kamerahardware verwaltet wird, einschließlich des Kamerasensors, des automatischen Fokus und des optionalen Blitzes. Der Kameracontrollertreiber sollte dem Treiber der Off-SoC-Kamerahardware über angepasste Treiberschnittstellen mitteilen, die Kameraaufnahme zu starten oder zu beenden.
- Sicherstellen, dass die Treiber, die die Off-SoC-Kamerahardware verwalten, einen D3-Übergang initiieren, wenn die Kamerakomponenten heruntergefahren werden sollen, damit ACPI über den D3-Übergang informiert wird und die Energieversorgung der Komponenten ausschalten kann. • Sicherstellen, dass die Treiber, die die Off-SoC-Kamerahardware verwalten, einen D0-Übergang initiieren, wenn die Kamerakomponenten hochgefahren werden sollen, damit ACPI über den D0-Übergang informiert wird und die Energieversorgung der Komponenten einschalten kann.
- Allen Treibercode zum Verwalten der Konfiguration der Kamerasensorhardware oder des Blitzgeräts entwickeln.
- Den Systemintegrator über die erwartete Bestellung aller GPIO- und I2C-Ressourcen informieren, die zum Verwalten der Kamerasensorhardware oder des Blitzgeräts erforderlich sind.
- Sicherstellen, dass alle Treiber des Kamera-Subsystems in derselben Treiberinstallationsdatei (.inf) aufgezählt werden.
- Sicherstellen, dass alle Treiber des Kamera-Subsystems der Bildverarbeitungs-PnP-Geräteeinrichtungsklasse angehören. Die ClassGuid für Bildverarbeitungsgeräte lautet {6bdd1fc6-810f-11d0-bec7-08002be2092f}.
- Der Systemintegrator muss die ACPI-Firmware der Plattform so gestalten, dass sie folgendes gewährleistet:
- Aufzählen jedes Kameragerät als separates Gerät im ACPI-Namespace.
- Einfügen eines _PLD-Objekts zu jedem Kameragerät im ACPI-Namespace, um anzugeben, ob sich die Kamera auf der Vorder- oder Rückseite des Computers befindet.
- Einfügen einer Energieressource im Stammverzeichnis des ACPI-Namespaces für jedes Kameragerät. Alle Off-SoC-Hardwarekomponenten eines bestimmte Kamerageräts (Sensor, AF, Blitz usw.) sollten in einer Energieressource enthalten sein.
- Implementieren der Steuerungsmethoden „_ON“ und „_OFF“ für jede Energieressource zur Änderung des Zustands des GPIO-Pins über das SoC, das die Stromschienenschalthardware steuert.
- Bereitstellen der Methoden „_PR0“ und „_PR3“ für jedes Kameragerät im Namespace zur Referenzierung der Energieressource jedes Kamerageräts und der zugehörigen Hardware.
- Bereitstellen eines _CRS-Objekts für jedes Kameragerät im ACPI-Namespace zur Aufzählung der GPIO- und I2C-Ressourcen für den Kamerasensor und die Blitzhardware. Die GPIO- und I2C-Ressourcen müssen sich in der Reihenfolge befinden, die vom Kamerasensortreiberentwickler angegeben wurde.
- Der Systemintegrator sollte die Plattformhardware und das Netzrouting so gestalten, dass:
- Jedes Kameragerät über eine eigene Stromschiene verfügt, die unabhängig von den Stromschienen der anderen Kamerageräte gesteuert werden kann und die mit einem GPIO-Pin über das SoC ein- und ausgeschaltet werden kann.
- Der Systemintegrator muss testen und überprüfen, dass:
- Die Kameragerätehardware keine Energie (null Watt) verbraucht, wenn das Kameragerät nicht von einer Anwendung verwendet wird. Der Systemintegrator sollte instrumentierte Hardware verwenden, um diesen Stromverbrauch zu messen.