En développant une application interne qui utilisait de nombreux YoctoHubs, on a réalisé qu'il manquait à notre API un moyen d'obtenir facilement la liste des Hubs qui avait déjà été enregistrés. Afin de pallier ce manque, nous venons d'ajouter une nouvelle classe YHub.
Note: Cet article part du principe que vous êtes déjà familiers avec les librairies de programmation Yoctopuce ainsi qu'avec le fonctionnement de nos produits. Si ce n'est pas le cas, vous pouvez commencer par notre série de tutoriels.
Comme nous l'avons dit en intro, il manquait dans notre API un moyen de décrire l'état des YoctoHubs ou VirtualHub avec lesquels l'API communique. Pour ce faire, nous avons ajouté une nouvelle classe YHub, qui représente l'état de la connexion entre la librairie et un YoctoHub.
Cette classe est implémentée dans le fichier yocto_api et est donc forcément déjà incluse dans tous vos projets car c'est dans le même fichier qu'est implémentée la classe YAPI.
Comme les classes YModule, YFunction, etc., vous n'avez pas besoin d'allouer ou de désallouer les objets de cette classe. La librairie Yoctopuce instancie automatiquement un objet pour chaque hub et garde une référence sur ces objets tout le long de l'exécution. Ces objets sont libérés uniquement lors de l'appel à YAPI.FreeAPI() à la fin de l’exécution.
La classe YHub
La classe YHub permet d'obtenir et configurer l'état de la connexion entre le Hub et la librairie. Voici la liste des méthodes qui sont actuellement implémentées:
- La méthode get_registeredUrl() retourne l'URL sous laquelle ce hub a été initialement enregistré à l'aide de la méthode YAPI::RegisterHub ou YAPI::PreregisterHub. Ex: 192.168.1.12
- La méthode get_connectionUrl() retourne L'URL actuellement utilisée pour communiquer avec ce hub. Contrairement get_registeredUrl() qui retourne la valeur qui a été passée à l'API, get_connectionUrl() retourne une URL normalisée avec le prototype, le port, mais pas les informations d'authentification. Ex: ws://192.168.1.12:4444/
- La méthode get_serialNumber() retourne le numéro de série du YoctoHub ou de VirtualHub.
- La méthode isOnline() indique si la communication avec ce hub est actuellement active et utilisable. Par exemple, si le YoctoHub est éteint ou offline cette méthode retournera false.
- La méthode isReadOnly() indique si l'accès à ce hub est protégé contre l'écriture. Cette fonction permet de tester si les paramètres d'authentifications permettent de modifier les attributs des modules connectés au YoctoHub.
- La méthode isInUse() indique si ce hub est actuellement enregistré dans l'API. Cette fonction permet de tester si un hub a été désenregistré avec YAPI::UnregisterHub().
- Les méthodes set_networkTimeout() et get_networkTimeout() permettent de configurer le délai de connexion réseau pour le Hub. La valeur par défaut est la valeur configurée par la fonction YAPI::GetNetworkTimeout au moment où le hub a été enregistré, mais le délai peut être modifié ultérieurement pour chaque hub.
- Les méthodes set_userData() et get_userData() permettent d'enregistrer un contexte libre afin de le retrouver plus tard. Ces méthodes ne déclenchent aucune communication.
- Les méthodes get_errorType() et get_errorMessage() retournent le détail correspondant à la dernière erreur survenue lors de l'utilisation du hub. Cette méthode est principalement utile lorsque la librairie Yoctopuce est utilisée en désactivant la gestion des exceptions.
Énumérer les Hubs
L'énumération des objets YHub est très similaire à celle des autres objets des librairies de programmation Yoctopuce. La méthode de classe FirstHubInUse() retourne le premier objet ou NULL si aucun hub n’est enregistré. Pour obtenir les hubs suivants, il faut utiliser ensuite la méthode nextHubInUse() sur l'objet qui a été retourné.
Par exemple, le code Java suivant énumère toutes les URL qui ont été enregistrées.
while (hub !=null) {
System.out.println("URL: "+hub.get_registeredUrl());
hub = hub.nextHubInUse();
}
Les cas particuliers
La classe YHub représente la connexion avec un YoctoHub ou VirtualHub après un appel à RegisterHub. Il y a cependant deux cas particuliers: RegisterHub("usb") et RegisterHub("callback"). Dans ces deux cas, on ne passe pas l'URL du YoctoHub à utiliser, mais un mot-clef.
Dans les deux cas, un objet YHub est créé et les méthodes get_connectionUrl() et get_registeredUrl() retourneront soit "usb" soit "callback".
Autre particularité du mode USB, la méthode get_serialNumber() retourne une chaîne de caractère vide ("").
Disponibilité
Cette nouvelle classe est pour l'instant disponible uniquement dans les langages TypeScript et Java, mais cette nouveauté va arriver sur toutes nos autres libraires dans les prochaines semaines.