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
Nom | Type | Description |
---|---|---|
USER_DATA_MAX | static constexpr uint8_t | La quantité maximale d'octets pouvant être contenue dans le ... |
Méthodes
Nom | Type | Description |
---|---|---|
Poignée | (std::iostream *) | Construit un objet Handle à partir de l'objet ... |
Envoyer le réveil de l'appareil | void() | Réveille la poignée pour permettre l'exécution de commandes supplémentaires. |
Statut de la demande | void() | Demande le dernier état de la poignée. |
SendHandleState | void(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. |
Recevoir | int() | Recevoir et traiter une réponse de la poignée. |
GetVersegripStatus | VersegripStatusResponse(...) |
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(std::iostream * stream)
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.
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 :
- SendDeviceWakeup -> OnReceiveHandleInfo
- RequestStatus -> OnReceiveHandleStatusMessage
- SendHandleState -> OnReceiveHandleStatusMessage
- SendHandleErrorRequest -> OnReceiveHandleErrorResponse
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()