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
Name | Typ | Beschreibung |
---|---|---|
USER_DATA_MAX | static constexpr uint8_t | Die maximale Anzahl von Bytes, die in der Datei enthalten sein kann ... |
Methoden
Name | Typ | Beschreibung |
---|---|---|
Handgriff | (...) | Konstruiert ein Handle-Objekt aus dem ... |
SendDeviceWakeup | void() | Wecken Sie den Griff auf, um weitere Befehle zu ermöglichen. |
AnfrageStatus | void() | Abfrage des aktuellen Status vom Handle. |
SendHandleState | void(const uint16_t, const uint8_t, ...) | Aktualisieren Sie den handle-spezifischen Benutzerstatus mit den angegebenen ... |
SendHandleErrorRequest | void(const uint16_t) | Abfrage der neuesten Fehlerinformationen aus dem Handle. |
Empfangen Sie | int() | Empfangen und Verarbeiten einer Antwort von dem Handle. |
GetVersegripStatus | VersegripStatusResponse(...) | 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:
- SendDeviceWakeup -> OnReceiveHandleInfo
- RequestStatus -> OnReceiveHandleStatusMessage
- SendHandleState -> OnReceiveHandleStatusMessage
- SendHandleErrorRequest -> OnReceiveHandleErrorResponse
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.