Zum Hauptinhalt springen
Version: neueste

Handgriff

Haply::HardwareAPI::Geräte::Handle

Kapselt die Logik, die für die Interaktion mit einem Haply -Handle erforderlich ist.

WARNING Handles befinden sich noch in der Entwicklung, und die API ist nicht stabil oder garantiert abwärtskompatibel.

Diese Klasse muss spezialisiert werden, um eine der geschützten virtuellen Methoden zu überschreiben, die aufgerufen werden, wenn ein bestimmtes Ereignis vom Gerät empfangen wird:

  • OnReceiveHandleInfo: Wird nach dem Aufwecken des Geräts aufgerufen.
  • OnReceiveHandleStatusMessage Wird aufgerufen, wenn eine neue Statusaktualisierung vom Gerät empfangen wird.
  • OnReceiveHandleErrorResponse Wird aufgerufen, wenn das Gerät einen Fehler meldet.

Eine Instanz der Klasse SerialStream, die den seriellen Anschluss des Handles darstellt, ist als Parameter für den Konstruktor erforderlich. Nach der Konstruktion weckt der Befehl SendDeviceWakeup den Handle auf und ermöglicht das Senden von RequestStatus-Befehlen, um den aktuellen Gerätestatus abzufragen. Die Receive-Methode sollte jeder Befehlsmethode folgen, um die Antwort des Geräts zu verarbeiten und eine der überladenen virtuellen Methoden auszulösen.

Handle-Implementierungen sind über ein Feld im Gerätestatus anpassbar, dessen Länge durch das Feld bestimmt wird. Die Benutzerfelder des Haply Quill sind wie folgt definiert:

  • : Der Zustand der Taste auf der flachen Oberfläche des Griffs, wobei 1 anzeigt, dass sie gedrückt ist.
  • : Der Batteriestand, wobei der Wert 100 bedeutet, dass die Batterie voll ist.

Alle Methoden innerhalb dieser Klasse blockieren, bis ihre jeweiligen IO-Operationen abgeschlossen sind oder ein Fehler auftritt. Handles arbeiten mit einer Frequenz von etwa 50 Hz. Wenn mehrere Geräte von demselben Thread verwaltet werden, wird die Gesamtverarbeitungsfrequenz durch die niedrigste Frequenz aller Geräte begrenzt. Das Mischen von Handles und Inverse3 innerhalb desselben Threads wird daher nicht empfohlen.

Index

Klassen

Mitglieder

NameTypBeschreibung
USER_DATA_MAXstatic constexpr uint8_tDie maximale Anzahl von Bytes, die in der Datei enthalten sein kann ...

Methoden

NameTypBeschreibung
Handgriff(...)Konstruiert ein Handle-Objekt aus dem ...
SendDeviceWakeupvoid()Wecken Sie den Griff auf, um weitere Befehle zu ermöglichen.
AnfrageStatusvoid()Abfrage des aktuellen Status vom Handle.
SendHandleStatevoid(const uint16_t, const uint8_t, ...)Aktualisieren Sie den handle-spezifischen Benutzerstatus mit den angegebenen ...
SendHandleErrorRequestvoid(const uint16_t)Abfrage der neuesten Fehlerinformationen aus dem Handle.
Empfangen Sieint()Empfangen und Verarbeiten einer Antwort von dem Handle.
GetVersegripStatusVersegripStatusResponse(...)Abrufen des Versegrip-Statusobjekts als Antwort.

Mitglieder

USER_DATA_MAX

static constexpr uint8_t USER_DATA_MAX = 255

Die maximale Anzahl von Bytes, die im Benutzerfeld aller spezialisierten Implementierungen des Haply -Handles enthalten sein kann.

Methoden

Handgriff

Handle( Haply::HardwareAPI::IO::SerialStream * stream, float timeout)

Konstruiert ein Handle-Objekt aus dem angegebenen Stream.

Parameter

  • stream Das Stream-Objekt, das die mit dem Gerät verbundene serielle Schnittstelle darstellt. Die Lebensdauer des Streams muss der Lebensdauer des Handle-Objekts entsprechen oder diese überschreiten. Es wird empfohlen, diesen Stream mit der Klasse SerialStream zu konstruieren.

  • timeout Die maximale Zeitspanne, die auf eine Antwort des Geräts gewartet wird. Wenn das Gerät innerhalb dieser Zeit nicht antwortet, schlägt der Vorgang fehl und es wird ein Fehler in stderr ausgegeben.

Die Standardzeitüberschreitung beträgt 5 Sekunden, ein negativer Wert deaktiviert die Zeitüberschreitung.

SendDeviceWakeup

void SendDeviceWakeup()

Wecken Sie den Griff auf, um weitere Befehle zu ermöglichen.

Dieser Befehl muss an das Gerät gesendet werden, bevor andere Befehle gesendet werden können.

Es muss ein Aufruf von Receive folgen, um die Antwort des Handles zu verarbeiten, was wiederum die überladene Methode OnReceiveHandleInfo aufruft.

AnfrageStatus

void RequestStatus()

Abfrage des aktuellen Status vom Handle.

Es muss ein Aufruf an Receive folgen, um die Antwort des Handles zu verarbeiten, der wiederum die überladene Methode OnReceiveHandleStatusMessage aufruft.

SendHandleState

void SendHandleState( const uint16_t device_id, const uint8_t user_data_length, const uint8_t * user_data)

Aktualisieren Sie den handle-spezifischen Benutzerstatus mit den angegebenen Argumenten.

Es muss ein Aufruf an Receive folgen, um die Antwort des Handles zu verarbeiten, der wiederum die überladene Methode OnReceiveHandleStatusMessage aufruft.

Parameter

  • device_id Die ID des Geräts. Dieses Feld wird derzeit vom Handle ignoriert und kann sicher auf 0 gesetzt werden.

  • user_data_length Die Anzahl der aus user_data zu lesenden Bytes. Muss kleiner sein als USER_DATA_MAX.

  • user_data Die Bytes, die gelesen und zur Aktualisierung des handle-spezifischen Status verwendet werden. Lesen Sie in der Dokumentation Ihres Handles nach, wie diese Bytes zu formatieren sind.

SendHandleErrorRequest

void SendHandleErrorRequest(const uint16_t device_id)

Abfrage der neuesten Fehlerinformationen aus dem Handle.

Es muss ein Aufruf an Receive folgen, um die Antwort des Handles zu verarbeiten, der wiederum die überladene Methode OnReceiveHandleErrorResponse aufruft.

Parameter

  • device_id Die ID des Geräts. Dieses Feld wird derzeit vom Handle ignoriert und kann sicher auf 0 gesetzt werden.

Empfangen Sie

int Empfangen()

Empfangen und Verarbeiten einer Antwort von dem Handle.

Muss jedem Aufruf einer der folgenden Methoden folgen und ruft die zugehörige überladene Methode auf:

Wird blockiert, bis eine Nachricht vom Gerät empfangen wird oder ein Fehler auftritt.

Rückgabe

0, wenn der Vorgang erfolgreich abgeschlossen wurde. Wenn ein Fehler auftritt, gibt die Methode einen negativen Wert zurück, ein Fehler wird in stderr ausgegeben und kann false zurückgeben.

GetVersegripStatus

VersegripStatusResponse GetVersegripStatus()

Abrufen des Versegrip-Statusobjekts als Antwort.

Der neue VerseGrip wurde entwickelt, um mit einem Dongle zu arbeiten, der an einen USB-Port angeschlossen wird und die Benutzerfreundlichkeit des kabelgebundenen Griffs mit der Freiheit des kabellosen Griffs verbindet. Da wir bei der drahtlosen Kommunikation mehr als 1kHz erreicht haben, ist es nun möglich, den Griff auf sehr einfache Weise im drahtlosen Modus zu verwenden. GetVersegripStatus' kann einfach in der Standardschleife der Anwendung aufgerufen werden, um den Status des Griffs zu ermitteln.

Rückgabe

VersegripStatusResponse