Skip to main content
Version : la plus récente

Poignée

Haply::HardwareAPI::Devices::Handle

Encapsule la logique nécessaire pour interagir avec une poignée Haply.

Les WARNING Handles font encore l'objet d'un développement actif et l'API n'est pas stable ni garantie d'être rétrocompatible.

Cette classe doit être spécialisée pour remplacer l'une des méthodes virtuelles protégées qui sera invoquée lorsqu'un événement particulier est reçu de l'appareil :

  • OnReceiveHandleInfo : invoqué après le réveil de l'appareil.
  • OnReceiveHandleStatusMessage Invoqué lorsqu'une nouvelle mise à jour de l'état est reçue de l'appareil.
  • OnReceiveHandleErrorResponse Invoqué lorsque l'appareil signale une erreur.

Une instance de la classe SerialStream représentant le port série de la poignée est requise en tant que paramètre du constructeur. Une fois construit, la commande SendDeviceWakeup réveillera la poignée et permettra d'envoyer des commandes RequestStatus pour récupérer le dernier état de l'appareil. La méthode Receive doit suivre toute méthode de commande pour traiter la réponse de l'appareil et déclencher l'une des méthodes virtuelles surchargées.

Les implémentations des poignées sont personnalisables à l'aide d'un champ dans l'état de l'appareil dont la longueur est déterminée par le champ. Les champs utilisateur de la plume Haply sont définis comme suit :

  • : L'état du bouton sur la surface plate de la poignée où 1 indique qu'il est maintenu enfoncé.
  • : Niveau de la batterie, la valeur 100 signifiant que la batterie est pleine.

Toutes les méthodes de cette classe se bloquent jusqu'à ce que leurs opérations d'entrée-sortie respectives soient terminées ou qu'une erreur se produise. Les Handles fonctionnent à une fréquence d'environ 50 Hz. Si plusieurs périphériques sont gérés par le même thread, la fréquence de traitement globale sera plafonnée à la fréquence la plus basse de tous les périphériques. Il n'est donc pas recommandé de mélanger les handles et Inverse3 au sein d'un même thread.

Index

Classes

Membres

NomTypeDescription
USER_DATA_MAXstatic constexpr uint8_tLa quantité maximale d'octets pouvant être contenue dans le ...

Méthodes

NomTypeDescription
Poignée(...)Construit un objet Handle à partir de l'objet ...
Envoyer le réveil de l'appareilvoid()Réveille la poignée pour permettre l'exécution de commandes supplémentaires.
Statut de la demandevoid()Demande le dernier état de la poignée.
SendHandleStatevoid(const uint16_t, const uint8_t, ...)Mettre à jour l'état de l'utilisateur spécifique à la poignée avec les ...
SendHandleErrorRequest (demande d'envoi de la poignée d'erreur)void(const uint16_t)Demande les dernières informations d'erreur à la poignée.
Recevoirint()Recevoir et traiter une réponse de la poignée.
GetVersegripStatusVersegripStatusResponse(...)Obtenir l'objet Versegrip Status en tant que réponse.

Membres

USER_DATA_MAX

static constexpr uint8_t USER_DATA_MAX = 255

Le nombre maximum d'octets que peut contenir le champ utilisateur de toute implémentation spécialisée de la poignée Haply.

Méthodes

Poignée

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

Construit un objet Handle à partir du flux fourni.

Paramètres

  • stream L'objet stream représentant le port série associé à l'appareil. La durée de vie du flux doit être égale ou supérieure à celle de l'objet Handle. Il est recommandé de construire ce flux à l'aide de la classe SerialStream.

  • timeout Durée maximale d'attente d'une réponse de l'appareil. Si l'appareil ne répond pas dans ce délai, l'opération échoue et une erreur est imprimée sur stderr.

Le délai d'attente par défaut est de 5 secondes. Une valeur négative désactive le délai d'attente.

Envoyer le réveil de l'appareil

void SendDeviceWakeup()

Réveille la poignée pour permettre l'exécution de commandes supplémentaires.

Cette commande doit être envoyée à l'appareil avant que d'autres commandes puissent être envoyées.

Doit être suivi d'un appel à Receive pour traiter la réponse du handle, qui appellera à son tour la méthode surchargée OnReceiveHandleInfo.

Statut de la demande

void RequestStatus()

Demande le dernier état de la poignée.

Doit être suivi d'un appel à Receive pour traiter la réponse du handle, qui appellera à son tour la méthode surchargée OnReceiveHandleStatusMessage.

SendHandleState

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

Met à jour l'état de l'utilisateur spécifique à la poignée avec les arguments fournis.

Doit être suivi d'un appel à Receive pour traiter la réponse du handle, qui appellera à son tour la méthode surchargée OnReceiveHandleStatusMessage.

Paramètres

  • device_id L'identifiant de l'appareil. Ce champ est actuellement ignoré par la poignée et peut être mis à 0 en toute sécurité.

  • user_data_length Nombre d'octets à lire dans user_data. Doit être inférieur à USER_DATA_MAX.

  • user_data Les octets qui seront lus et utilisés pour mettre à jour l'état spécifique du handle. Consultez la documentation de votre handle pour savoir comment formater ces octets.

SendHandleErrorRequest (demande d'envoi de la poignée d'erreur)

void SendHandleErrorRequest(const uint16_t device_id)

Demande les dernières informations d'erreur à la poignée.

Doit être suivi d'un appel à Receive pour traiter la réponse du handle, qui appellera à son tour la méthode surchargée OnReceiveHandleErrorResponse.

Paramètres

  • device_id L'identifiant de l'appareil. Ce champ est actuellement ignoré par la poignée et peut être mis à 0 en toute sécurité.

Recevoir

int Receive()

Recevoir et traiter une réponse de la poignée.

Doit suivre tout appel à l'une des méthodes suivantes et invoquera la méthode surchargée associée :

Bloque jusqu'à ce qu'un message soit reçu de l'appareil ou qu'une erreur soit rencontrée.

Retours

0 si l'opération s'est terminée avec succès. En cas d'erreur, la méthode renvoie une valeur négative, une erreur est imprimée sur stderr et peut renvoyer false.

GetVersegripStatus

VersegripStatusResponse GetVersegripStatus()

Obtenir l'objet Versegrip Status en tant que réponse.

La nouvelle poignée VerseGrip est conçue pour fonctionner avec un dongle connecté sur un port USB et combine la facilité d'utilisation de la poignée filaire à la liberté de la poignée sans fil. Comme nous avons atteint une communication sans fil de plus de 1kHz, il est maintenant possible d'utiliser la poignée en mode sans fil d'une manière très simple. La fonction 'GetVersegripStatus' peut simplement être appelée dans la boucle standard de l'application pour obtenir l'état de la poignée.

Retours

VersegripStatusResponse