Des requêtes pour pour explorer les environnements


Un langage de requête a été établi suit aux analyses fonctionnelles des logiciels utilisés dans le cadre de l'écriture du cahier des charges du séquenceur Virage.
La première requête qui se fait lorsque l'on interroge l'inspecteur minuit est :

La requête de namespace :


La requête root

?namespace /


Elle fait toujours référence à un path. Si l'on découvre l'environnement pour la première fois, un slash va être utilisé afin de connaitre l'ensemble des modules qui sont à la racine. On renvoit alors au séquenceur la réponse :

:namespace / nodes={ mapper.1 mapper.2 .../... plan.2 render.1 }


Cette réponse a été faite grâce à un prototype du démon de minuit qui analyse les bases de données de tapemovie et formate les réponses dans la syntaxe définie pour minuit. Les colls suivant de tapemovie sont intérrogés :

  • tm_config (contient la liste des modules présent, y compris les plugins - les plugins sont : tape, movie, cue-list)
  • m_config (si tm_config répond 1 à m_movie)
  • t_config (si tm_config répond 1 à t_movie)

Un des premiers problèmes que pose cette utilisation est le fait de n'avoir qu'une hiérarchie à plat. Comment définit-on des groupes tels que audio - video - lumière - mapping etc... Le fait d'avoir une soixantaine de modules à la racine va poser des problèmes d'ergonomie autant que d'efficacité. Il faut pouvoir créer dans le protocole la possibilité de créer des niveaux de groupes qui ne soient que purement symbolique et ne rentre pas forcément en compte dans les moteurs.

La requête de noeud (un module)

?namespace /mapper.1


Elle est associé à un module et en demande les paramètres. La réponse pour le cas du mapper un sera :
:namespace /mapper.1 leaves={ sw source speedlim rampup rampdown }


Cette réponse utilise le coll /mapper.1/params qui contient les informations des paramètres du module.

La requête de feuille (un paramètre)

?namespace /mapper.1/sw


Elle est associé à un paramètre et nous donne les attributs de celui-ci. Il a été défini les attributs suivants :
:namespace /mapper.1/sw attributs={ value 0 type t default_value 0 range 0 1 dynamic 0 }


Elle permet de donner le typage d'un paramètre, ses valeurs minimums et maximum ainsi que sa possibilité d'être rampé ou pas. La valeur actuelle est également donnée en premier afin de ne pas avoir à faire une requête !get juste après.

Les différents types sont :
  • t pour toggle
  • l pour list
  • f pour float
  • i pour integer
  • s pour un symbol.

La requête get


?get


Elle permet de connaitre les attributs actuels d'un paramètre, que ce soit sa valuer, son range ou tout autre attribut définit précédemment.

Ex :
?get /mapper.1/sw:range

aura comme réponse :
:get /mapper.1/sw:range 0 1


?get /mapper.1/sw:value

aura comme réponse :
:get /mapper.1/sw:range 0

si le module est éteint.

La requête set


!set


Elle permet de fixer une valeur pour un paramètre.
L'exemple suivant va par exemple allumer le switch du mapper un.
!set /mapper.1/sw:value 1

Si aucun mot-requête n'est associé, on réagit comme si le message !set était envoyé, c'est la requête par défault
ex :
/mapper.1/sw 1


Problèmes rencontrés à l'intégration


  • Des problèmes existent pour les nœuds qui sont également des feuilles. En effet le paramètre par exemple
  • Les instances peuvent être multiples, comme par exemple : /ch.1/chrono.1.1 pour parler de la première voix d'un module vidéo à plusieurs voix qui est la première instance de ce module dans le premier canal de traitement de Movie.
  • Il est très important de pouvoir créer des groupes de module. On peut vouloir le faire par classement (audio - video - light - etc...) ou par groupe pour créer des instruments. Comment peux-t-on classer ce groupe symbolique, le démon doit pouvoir gérer cette abstraction.

Évolution du protocole minuit en fin de projet Virage


Le protocole minuit a suivi une évolution au mois de janvier 2010. Désormais sont intégrés au requête
  • Le nom de l'expéditeur en tout premier lieu
  • Le typage a évolué
  • Les attributs
    • 'access' : dont la valeur peut être 'getter', 'setter' ou 'getsetter'
    • 'type' : dont la valeur peut être
    • 'priority' : dont la valeur est un nombre qui croit selon la priorité du nœud
    • 'value' : qui peut être omis (contraction du langage)
    • 'range' : qui pour l'instant contient implicitement 2 nombres (bornes basse et haute)
    • 'comment' : pour la description du nœud

L'évolution du protocole a été implémentée dans le plugin minuit de tapemovie.