5. Programmation, concepts généraux
Dans l'API Yoctopuce, la priorité a été mise sur la facilité d'accès aux fonctionnalités des modules en
offrant la possibilité de faire abstraction des modules qui les implémentent. Ainsi, il est parfaitement
possible de travailler avec un ensemble de fonctionnalités sans jamais savoir exactement quel
module les héberge au niveau matériel. Cela permet de considérablement simplifier la
programmation de projets comprenant un nombre important de modules.
Du point de vue programmation, votre Yocto-Demo se présente sous la forme d'un module
hébergeant un certain nombre de fonctionnalités. Dans l'API , ces fonctionnalités se présentent sous
la forme d'objets qui peuvent être retrouvés de manière indépendante, et ce de plusieurs manières.
Accès aux fonctionnalités d'un module
Accès par nom logique
Chacune des fonctionnalités peut se voir assigner un nom logique arbitraire et persistant: il restera
stocké dans la mémoire flash du module, même si ce dernier est débranché. Un objet correspondant
à une fonctionnalité Xxx munie d'un nom logique pourra ensuite être retrouvée directement à l'aide
de ce nom logique et de la méthode YXxx.FindXxx. Notez cependant qu'un nom logique doit être
unique parmi tous les modules connectés.
Accès par énumération
Vous pouvez énumérer toutes les fonctionnalités d'un même type sur l'ensemble des modules
connectés à l'aide des fonctions classiques d'énumération FirstXxx et nextXxxx disponibles dans
chacune des classes YXxx.
Accès par nom hardware
Chaque fonctionnalité d'un module dispose d'un nom hardware, assigné en usine qui ne peut être
modifié. Les fonctionnalités d'un module peuvent aussi être retrouvées directement à l'aide de ce
nom hardware et de la fonction YXxx.FindXxx de la classe correspondante.
Différence entre Find et First
Les méthodes YXxx.FindXxxx et YXxx.FirstXxxx ne fonctionnent pas exactement de la même
manière. Si aucun module n'est disponible YXxx.FirstXxxx renvoie une valeur nulle. En revanche,
même si aucun module ne correspond, YXxx.FindXxxx renverra objet valide, qui ne sera pas "online"
mais qui pourra le devenir, si le module correspondant est connecté plus tard.
Manipulation des fonctionnalités
Une fois l'objet correspondant à une fonctionnalité retrouvé, ses méthodes sont disponibles de
manière tout à fait classique. Notez que la plupart de ces sous-fonctions nécessitent que le module
hébergeant la fonctionnalité soit branché pour pouvoir être manipulées. Ce qui n'est en général
jamais garanti, puisqu'un module USB peut être débranché après le démarrage du programme de
contrôle. La méthode isOnline(), disponible dans chaque classe, vous sera alors d'un grand secours.
Accès aux modules
Bien qu'il soit parfaitement possible de construire un projet en faisant abstraction de la répartition des
fonctionnalités sur les différents modules, ces derniers peuvent être facilement retrouvés à l'aide de
l'API. En fait, ils se manipulent d'une manière assez semblable aux fonctionnalités. Ils disposent d'un
numéro de série affecté en usine qui permet de retrouver l'objet correspondant à l'aide de
YModule.Find(). Les modules peuvent aussi se voir affecter un nom logique arbitraire qui permettra
de les retrouver ensuite plus facilement. Et enfin la classe YModule comprend les méthodes
d'énumération YModule.FirstModule() et nextModule() qui permettent de dresser la liste des modules
connectés.
Interaction Function / Module
Du point de vue de l'API, les modules et leurs fonctionnalités sont donc fortement décorrélés à
dessein. Mais l'API offre néanmoins la possibilité de passer de l'un à l'autre. Ainsi la méthode
get_module(), disponible dans chaque classe de fonctionnalité, permet de retrouver l'objet
correspondant au module hébergeant cette fonctionnalité. Inversement, la classe YModule dispose
14
www.yoctopuce.com