Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Thema werden die Schnittstellen behandelt, die zwischen der Sensorklassenerweiterung und dem Sensortreiber erforderlich sind, um sensordatenbatching in Windows 10 zu implementieren.
Einleitung
Ein Sensortreiber, der Datenbatching implementiert, ermöglicht es dem Anwendungsprozessor, Energie zu sparen, da der Prozessor Sensordaten weniger häufig empfängt und verarbeitet. Der Sensortreiber puffert in diesem Fall die Sensordatensamples in der Sensorhardware und überträgt sie dann in einem Stapel an die Sensorklassenerweiterung. Zur Unterstützung der Batchverarbeitung müssen Sie einen universellen UMDF 2.0-Sensortreiber bereitstellen, der die erforderlichen Schnittstellen implementiert.
Batchlatenz
Die Batchlatenz wird als maximale Zeitspanne definiert, für die ein Sensor nach der Erfassung einen Datensatz zwischenspeichern kann, bevor er an die Erweiterung der Sensorklasse geliefert wird. Der Zeitplan für die Bündelung der Sensordaten wird aktiviert, wenn die Sensorereignisse vom Treiber bereitgestellt werden, basierend auf dem Batchlatenzwert, wie in den folgenden Diagrammen dargestellt.
Im Falle eines Treibers, der keine Datenbatchierung implementiert, sammelt und sendet der Treiber einfach die Sensordaten, sobald er verfügbar ist. Um z. B. N-Datenbeispiele zu senden, würde der Treiber die Sammlung und das Senden der Datenbeispiele initiieren, N-Mal.
Bei einem Treiber, der die Datenbatchierung implementiert, wird die Datensammlungs- und Übermittlungssequenz in Batches durchgeführt, wie im unmittelbar vorherigen Diagramm dargestellt. Der Wert der Batchlatenz wird durch die Sensorklassenerweiterung angegeben. Wenn also die Sensorhardware N-Datenbeispiele sammeln und übertragen muss, könnte der Sensortreiber den Prozess in zwei Batches aufteilen. Die erste Hälfte der N-Datenbeispiele würde nach einem Zeitintervall gesendet werden, das dem Batchlatenzzeitraum entspricht. Nach einem weiteren Zeitintervall für die Batch-Latenz würde dann die zweite Hälfte der Datenproben gesendet, sodass insgesamt zwei Übertragungen durchgeführt werden, im Vergleich zu den N Übertragungen, die von der herkömmlichen Übermittlungsmethode benötigt werden.
Sensoreigenschaften
Zusätzlich zu den erforderlichen allgemeinen Sensoreigenschaften und Enumerationseigenschaften muss ein Treiber, der datenbatching unterstützt, auch die folgenden Eigenschaften melden:
- PKEY_Sensor_FifoReservedSize_Samples
- PKEY_Sensor_FifoMaxSize_Samples (Maximale Größe des FIFO-Speichers in Samples)
- PKEY_Sensor_WakeCapable
Weitere Informationen finden Sie unter Allgemeine Sensoreigenschaften und Enumerationseigenschaften.
Wenn das Sensorhardware-Subsystem aufweckfähig ist, sollte sichergestellt werden, dass es frühzeitig aktiviert wird, um Pufferüberläufe zu vermeiden.
Optionale DDSI-Funktionen für die Datenbatchierung
Die Funktionen der Gerätetreibersoftwareschnittstelle (Device Driver Software Interface, DDSI) sind die Schnittstelle zwischen dem Treiber und der Klassenerweiterung. Zur Unterstützung der Datenbatchierung muss ein Treiber die folgende DDSI-Funktion implementieren, damit die Sensorklassenerweiterung die Batchlatenz festlegen kann.
-
Dies ist eine Rückruffunktion, die die Batchlatenz für einen angegebenen Sensor festlegt. Der Treiber sollte die Batchlatenz je nach Pufferverfügbarkeit auf einen Wert festlegen, der kleiner oder gleich dem Parameter BatchLatencyMs ist.
Der Treiber muss auch alle erforderlichen DDSI-Funktionen implementieren. Weitere Informationen finden Sie unter der _SENSOR_CONTROLLER_CONFIG-Struktur.
Sie ist optional für die Sensorklassenerweiterung zum Angeben der Batchlatenz. Die Standardmäßige Batchlatenz für alle Sensoren ist Null (0), die verwendet wird, um anzugeben, dass Stichproben nicht batchiert werden. Sensorbeispiele werden nur in Batches übermittelt, wenn die Klassenerweiterung EvtSensorSetBatchLatency aufruft, um einen Batchlatenzwert festzulegen. Andernfalls werden die Proben normal mit der regelmäßigen Datenintervallrate geliefert.
Die Sensorklassenerweiterung kann EvtSensorSetBatchLatency aufrufen, um den Batchlatenzwert jederzeit zu ändern. Insbesondere kann diese Funktion aufgerufen werden, während der angegebene Sensor bereits aktiv ist und ausgeführt wird, und dies sollte nicht zum Verlust von Ereignissen führen. Es wird erwartet, dass der Sensortreiber sofort Proben der neuesten Charge nach bestem Ermessen sammelt und liefert. Der Treiber sollte die durch die Klassenerweiterung angegebene Batchlatenz nicht überschreiten.
Es ist wichtig zu beachten, dass aufgrund der Datenbatchierung keine Änderung an Sensordatenübermittlungsmethoden und -ereignissen impliziert wird. Wenn die Batchlatenz abläuft, ruft der Treiber SensorsCxSensorDataReady wiederholt auf, um alle gepufferten Datenbeispiele einzeln bereitzustellen. Die Datenbeispiele werden mit ihren Zeitstempeln (in den zugehörigen PKEY_SensorData_Timestamp Datenfeldern) begleitet, die angeben, wann jede Stichprobe aufgenommen wurde. Weitere Informationen zu PKEY_SensorData_Timestamp finden Sie unter "Allgemeine Datenfelder".
Batchlatenz- und Datenratebeziehung
Batchlatenz und Datenrate hängen wie folgt zusammen:
Dabei ist SensorBatching_MaxSize_Bytes die maximale Größe des Puffers für die Batchsensordaten. Wenn Ihr Sensor ein Beschleunigungsmesser ist, empfehlen wir einen Hardwarepuffer, der groß genug ist, um 250 oder mehr Beispiele zu halten. Die Datenrate wird in Millisekunden ausgedrückt, und es ist die Zeitdauer, die zum Übertragen einer Datenprobe benötigt wird. Die Anzahl der Proben, die die Sensorhardware in einem Batch speichern muss, ist umgekehrt proportional zur Datenrate. Je kleiner die Datenrate ist, desto größer ist der Beispielpuffer, der zum Speichern der Batchbeispiele für einen bestimmten Batchlatenzwert erforderlich ist. In der vorherigen Formel wird die Batchlatenz durch BatchLatencyMs dargestellt, und die Datenrate wird durch DataRateMs dargestellt. Und wenn die Kombination aus BatchLatencyMs und DataRateMs zu einer Puffergröße führt, die größer als SensorBatching_MaxSize_Bytes ist, legen EvtSensorSetBatchLatency und EvtSensorSetDataInterval die Batchlatenz auf den Wert der vorherigen Formel fest.
Wenn der Aufrufer einen BatchLatencyMs-Wert angibt, der kleiner als DataRateMs ist, werden die Daten ohne Pufferung übermittelt.
Batchverarbeitung mit Datenschwellenwerten
Ein Sensortreiber, der datenbatching implementiert, kann evtSensorSetDataThresholds verwenden, um einen Schwellenwert für nicht null Daten festzulegen. In diesem Fall überschreitet die Differenz der Datenwerte zwischen den aktuellen Werten und den letzten Lesewerten den mit EvtSensorSetDataThresholds festgelegten Datenschwellenwert, dann wird der Datensammlungs-, Batch- und Übermittlungsprozess aufgerufen. Die Verwendung von Datenbatching zusammen mit Datenschwellenwerten ermöglicht es dem Sensortreiber also, noch mehr Energie zu sparen.
Wenn ungenullte Datenschwellenwerte durch die Sensorklassenerweiterung festgelegt werden, zusammen mit der Datenbündelung, wird erwartet, dass der Treiber Datenbatches mit genauen Zeitstempeln liefert und die Datenschwellenwerte einhält. Wenn die Sensorhardware selbst nicht in der Lage ist, genaue Zeitstempel beizubehalten und dabei Datenschwellenwerte zu erzwingen, kann sie Stichproben sammeln, ohne Datenschwellenwerte zu erzwingen. In einem solchen Fall sollte der Treiber jedoch Beispiele herausfiltern, die nicht den aktuellen Datenschwellenwerten entsprechen, bevor er sie an die Sensorklassenerweiterung weitergibt.
Sequenzdiagrammbeispiele
Hier sind Sequenzdiagramme, die die Verwendung der optionalen DDSI-Funktionen für die Datenbatchverarbeitung zeigen, die in optionalen DDSI-Funktionen für die Datenbatchierung erwähnt wurden. Wir können nach Bedarf weitere Sequenzdiagramme hinzufügen, um Szenarien basierend auf Partnerfeedback zu klären.
Szenario 1
In diesem Szenario legt die Sensorklassenerweiterung die Batchlatenz und das Datenintervall fest, bevor der Sensor gestartet wird. Sobald der Sensor gestartet wird, liefert er in regelmäßigen Abständen Batches, während die festgelegten Eigenschaften beachtet werden.
Szenario 2
In diesem Szenario legt die Sensorklassenerweiterung die Batchlatenz, das Datenintervall und die Datenschwellenwerte fest, bevor der Sensor gestartet wird. Sobald der Sensor gestartet wird, liefert er in regelmäßigen Abständen Batches, während die festgelegten Eigenschaften beachtet werden. Beachten Sie, dass der Treiber keinen Batch liefern sollte, es sei denn, es gibt ein Beispiel, das Datenschwellenwerte erfüllt, die innerhalb der angegebenen Batchlatenz gesendet werden müssen.
Szenario 3
In diesem Szenario legt die Sensorklassenerweiterung die Batchlatenz und das Datenintervall vor dem Starten des Sensors fest. Sobald der Sensor gestartet wird, liefert er in regelmäßigen Abständen Batches, während die festgelegten Eigenschaften berücksichtigt werden. Die Sensorklassenerweiterung ändert die Batchlatenz und das Datenintervall während der Ausführung des Sensors, und der Treiber beginnt sofort mit der Bereitstellung von Beispielen in Übereinstimmung mit den neuen Werten, ohne während der Ausführung Datenbeispiele zu verlieren.
Hardwarekonfigurationen für Datenbatchierung
Sensordaten müssen in der Sensorhardware gebatchiert werden, ohne dass der Anwendungsprozessor beteiligt ist. Dadurch kann der Prozessor in den Sleep-Modus wechseln, während die Daten zusammengefasst werden, um Energie zu sparen. Das folgende Diagramm zeigt die möglichen Konfigurationen für die hardwarebasierte Sensordatenbatchierung.
Konfiguration 1: Der FIFO-Puffer wird in der Sensorkomponente implementiert, die direkt mit dem Anwendungsprozessor verbunden ist.
Konfiguration 2: Der FIFO-Puffer wird im Hardwarekern mit niedriger Leistung implementiert, mit dem die Sensorkomponente verbunden ist. In diesem Fall kann der FIFO-Puffer je nach Sensorkerndesign für mehrere Sensoren oder sogar für Nicht-Sensorkomponenten freigegeben werden. Der Low-Power-Sensorkern ist wiederum mit dem Anwendungsprozessor verbunden und kann in das SoC integriert werden. Oder es kann sich um eine externe Komponente handelt.
Konfiguration 3: Der FIFO-Puffer wird in der Sensorkomponente implementiert. Die Sensorkomponente ist mit einem Sensorkern mit geringer Leistung verbunden, der mit dem Anwendungsprozessor verbunden ist. Die Sensorkomponente kann in den SoC integriert werden, oder es kann sich um eine externe Komponente handelt.
Konfiguration 4: Der FIFO-Puffer wird auf der Sensorkomponente und dem Kern des Niederstromsensors implementiert. Die Sensorkomponente ist mit einem Sensorkern mit geringer Leistung verbunden, der wiederum mit dem Anwendungsprozessor verbunden ist. Die Sensorkomponente kann in das SoC integriert werden, oder es kann sich um eine externe Komponente handelt. Es lohnt sich zu beachten, dass der Sensorkern verwendet werden kann, um ein FIFO zu erweitern, das zu flach ist.
Das Wichtigste ist, dass das FIFO auf der Sensorkernhardware oder Sensorhardware oder auf beidem implementiert werden kann. Der Treiber abstrahiert dies für das Betriebssystem und stellt eine einheitliche Schnittstelle über den DDSI dar.
Das folgende Diagramm veranschaulicht die verschiedenen Konfigurationen, die in der vorherigen Liste beschrieben sind.
Verhalten bei vollem Puffer in der Hardware
Unter normalen Umständen sollte der Treiber den Hardwarepuffer mindestens einmal innerhalb eines Zeitintervalls lesen, das BatchLatencyMs entspricht, um sicherzustellen, dass keine Daten verworfen oder verloren gehen. Wenn der FIFO-Hardwarepuffer aufgefüllt wird, sollte er sich wie ein Zirkelpuffer umschließen und verhalten, wobei ältere Ereignisse überschrieben werden.