mercredi 23 juin 2010

Un Device? qu'est-ce que c'est?


Comme nous l'avons vu dans Qu'est-ce qu'une Application CopperLan, une Application utilise un CHAI pour accéder aux ressources du réseau. Mais ce n'est pas pour autant qu'elle est visible sur ce réseau. En effet, certaines applications peuvent se contenter d'observer ce qui s'y passe ou de contrôler à distance l'une ou l'autre chose sans pour autant devoir s'exposer.

En fait, une Application sera visible seulement si elle déclare un ou plusieurs Device. Généralement, une Application crée un Device racine qui la représente, et derrière lequel une arborescence de Sub-Devices peut être créée pour distinguer les différentes sous-fonctionnalités de l'application. Par exemple, dans un synthé, on peut imaginer la structure suivante:
  • Synthé (A)
    • Clavier & panneau de contrôle (B)
    • Générateur sonore (C)

Le Device A est le device principal, B et C représentent un découpage des deux fonctionnalités principales du synthé qui dès lors peuvent être accessibles distinctement à partir du réseau. Initialement, un lien fort existe entre B et C (on peut l'assimiler au Local ON bien connu), mais CopperLan permet très simplement d'y insérer l'un ou l'autre Device (un arpégiateur par exemple) quel que soit l'emplacement physique et logique où celui-ci se trouve. Mais n'allons pas trop vite, nous verrons ça plus tard.

Chaque Device possède une identité unique sur le réseau, le DeviceID. Il s'agit d'une information composite 64 bits construite à partir de 4 mots de 16bits: BrandID, ModelID, DuplicateNumber et ModuleID.
  • Le BrandID est un numéro attribué à chaque fabricant permettant d'identifier l'origine d'un Device.
  • Le ModelID est défini par le fabricant et permet d'identifier la nature d'un device (en association éventuelle avec le ModuleID)
  • Le DuplicateNumber est un numéro permettant de distinguer plusieurs instances d'un même Device. Ce numéro est généralement attribué automatiquement lorsqu'un conflit d'identité apparaît sur le réseau. Cela dit, il est possible de le fixer lorsqu'on fige la topologie d'un réseau.
  • Le ModuleID permet de distinguer les Sub-Devices. Ce numéro est attribué par l'Application lorsqu'elle crée une arborescence de Devices. Les sous-devices prennent alors la même identité que le device de tête sauf que leur ModuleID sera différent de 0 (réservée au device de tête). Une application qui expose un seul device attribuera toujours 0 au ModuleID de ce Device. Si une arborescence de Devices est créée, la racine de l'arbre aura toujours un ModuleID à 0 et les sous-devices auront toujours un ModuleID différent de 0. Dans ce dernier cas, c'est l'association (ModelID, ModuleID) qui permet d'identifier clairement la nature du Device.
Un Device est également marqué par ses Device Capabilities. Il s'agit d'un ensemble de flags qui permettent d'identifier d'un coup d'oeil le domaine d'application du device (instrument, mix, lumière, sono...) ainsi que ses capacités particulières (supporte le snapshot, convertisseur MIDI, éditable...). Ces Device Capabilities sont très utiles lorsqu'on effectue des recherches sur le réseau pour trouver les Devices qui correspondent à certains choix.

En résumé, on appelle Device une entité logique qui représente une fonctionnalité propre à une application. Chaque Device est identifié de manière unique grâce à son DeviceID, et possède des Device Capabilities permettant de filtrer aisément le contenu du réseau.

Nous verrons dans le prochain article comment communiquent ces Devices entre eux.