JMRI: Function Mapping in Programmer Files

# JMRI: Guide Utilisateur DecoderPro

## Fonction Mapping dans les Fichiers Programmateur

L'élément "fnmapping" fournit un moyen pratique pour afficher les bits CV utilisés pour la fonction Map et les sorties dans un décodeur .

Vous pouvez faire une chose similaire avec beaucoup de lignes et de colonnes dans l'affichage, mais ça représente beaucoup plus de travail, et l'affichage ne serait pas bien réglé.

L'élément "fnmapping" travaille en regardant les variables avec des noms comme "F2 commande sortie 1". Spécifiquement, il cherche un nom composé de trois parties:

1. Un nom de fonction. Ce peut être "FL" ou "Fn" ou "Fnn", où n ou nn sont des nombres décimaux dans l'intervalle 0-28.
   Sont aussi acceptées quelques non-touches d'état spéciales utilisées par quelques décodeurs pour commander les sorties. Celle-ci incluent couramment "STOP", "DRIVE", "AV", "AR" et "Sn" ou "Snn" où n ou nn est un nombre décimal dans l'intervalle 0-28.
2. Un suffixe optionel "( f )" ou "( r )"pour le nom de fonction.
3. La chaine de caractères exacte " controls output ". Notez les espaces!
4. Un numéro décimal de sortie.
5. Un suffixe optionnel "(alt)" pour le numéro de sortie ( ou le nom ). Ceci permet depuis une autre définition d'une sortie, par exemple pour le groupe de fonctions Tsunami d'échanger les fonctions.

Après avoir trouvé toutes les variables correspondantes dans le fichier de configuration, l'élément "fnmapping" crée une grille rectangulaire pour les afficher.

Dans le contexte d'un élément fnmapping, les variables ont plusieurs attributs et éléments utiles:

- Défaut - Peut être utilisé pour mettre les valeurs par défaut. Ceci est particulièrement utile pour des variables constantes (en lecture seulement), car autrement elles n'ont aucune autre valeur utile.
- minOut - Fixe le nombre minimum de sorties que le décodeur a besoin d'avoir défini avant que cette variable soit effective. Ainsi les décodeurs de la même famille ont souvent un nombre de fils de sorties différent, ceci permet un fichier de configuration simple pour gérer de multiples décodeurs. (voir ci-dessous pour un exemple).
- minFn - similaire à minOut, mais travaillant sur le nombre de fonctions auxquelles le décodeur répond. Ce n'est généralement pas utile.
- constante - c'est un élément, pas un attribut, qui vous permet de définir une variable comme ayant une valeur constante que l'utilisateur ne peut pas changer. Un exemple d'utilisation de cette option pour afficher une carte fixe est affichée ci-dessous.

Plusieurs attributs et éléments sont ignorés par un élément fnmapping et ne peuvent pas être ajoutés à un fichier de définition.

Plusieurs attributs et éléments de l'élément "model" du fichier décoder affecte aussi l'affichage de la Fonction Map:

- numOuts - le nombre de sorties physiques ( fils ) sur le décodeur.
- numFns - ceci est un attribut hérité qui limite le nombre totales de lignes d'afffichage de la fonction mapping. Il n'est plus nécessaire maintenant que le code JMRI supprime automatiquement les lignes inutilisées.
- output - les attributs "nom" et "label" des éléments "output" peuvent être utilisés pour modifier ce qui est affiché dans les colonnes de la Fonction Map. Pour les détails voir cette page JavaDoc.
- extFnsESU - lorsqu'il est réglé sur "oui" invoque la page Fonction de la carte spécialisée requise pour les modèles de décodeurs ESU plus anciens. Les exigences et la signification de certains éléments de fnmapping sont également modifiés. Pour plus de détails voir cette page JavaDoc.

## Exemple de Mapping

Ces exemples sont pris dans le fichier de définition de décodeur Digitrax_01x3.xml.

Le bloc de définitions pour la fonction zéro dans la direction avant est comme suit:

    		<variable label="FL(f) controls output 1" CV="33" mask="XXXXXXXV" minOut="1" default="1"> <enumVal>
    			<enumChoice choice="No"/> <enumChoice choice="Yes"/> </enumVal> </variable>
    		<variable label="FL(f) controls output 2" CV="33" mask="XXXXXXVX" minOut="2"> <enumVal>
    			<enumChoice choice="No"/> <enumChoice choice="Yes"/> </enumVal> </variable>
    		<variable label="FL(f) controls output 3" CV="33" mask="XXXXXVXX" minOut="3"> <enumVal>
    			<enumChoice choice="No"/> <enumChoice choice="Yes"/> </enumVal> </variable>
    		<variable label="FL(f) controls output 4" CV="33" mask="XXXXVXXX" minOut="4"> <enumVal>
    			<enumChoice choice="No"/> <enumChoice choice="Yes"/> </enumVal> </variable>
    		<variable label="FL(f) controls output 5" CV="33" mask="XXXVXXXX" minOut="5"> <enumVal>
    			<enumChoice choice="No"/> <enumChoice choice="Yes"/> </enumVal> </variable>
    		<variable label="FL(f) controls output 6" CV="33" mask="XXVXXXXX" minOut="6"> <enumVal>
    			<enumChoice choice="No"/> <enumChoice choice="Yes"/> </enumVal> </variable>
    		<variable label="FL(f) controls output 7" CV="33" mask="XVXXXXXX" minOut="7"> <enumVal>
    			<enumChoice choice="No"/> <enumChoice choice="Yes"/> </enumVal> </variable>
    		<variable label="FL(f) controls output 8" CV="33" mask="VXXXXXXX" minOut="8"> <enumVal>
    			<enumChoice choice="No"/> <enumChoice choice="Yes"/> </enumVal> </variable>

Notez que l'attribut "minOut" assure que seule les fonctions actuellement définies comme présentes sont affichées.

    Le bloc similaire de définitions pour la fonction deux configure un CV différent, mais qui sont autrement très similaires:
    		<variable label="F2 controls output 1" CV="36" mask="XXXXXXXV" minOut="1" minFn="2"> <enumVal>
    			<enumChoice choice="No"/> <enumChoice choice="Yes"/> </enumVal> </variable>
    		<variable label="F2 controls output 2" CV="36" mask="XXXXXXVX" minOut="2" minFn="2"> <enumVal>
    			<enumChoice choice="No"/> <enumChoice choice="Yes"/> </enumVal> </variable>
    		<variable label="F2 controls output 3" CV="36" mask="XXXXXVXX" minOut="3" minFn="2"> <enumVal>
    			<enumChoice choice="No"/> <enumChoice choice="Yes"/> </enumVal> </variable>
    		<variable label="F2 controls output 4" CV="36" mask="XXXXVXXX" minOut="4" minFn="2" default="1">
    		<enumVal>
    			<enumChoice choice="No"/> <enumChoice choice="Yes"/> </enumVal> </variable>
    		<variable label="F2 controls output 5" CV="36" mask="XXXVXXXX" minOut="5" minFn="2"> <enumVal>
    			<enumChoice choice="No"/> <enumChoice choice="Yes"/> </enumVal> </variable>
    		<variable label="F2 controls output 6" CV="36" mask="XXVXXXXX" minOut="6" minFn="2"> <enumVal>
    			<enumChoice choice="No"/> <enumChoice choice="Yes"/> </enumVal> </variable>
    		<variable label="F2 controls output 7" CV="36" mask="XVXXXXXX" minOut="7" minFn="2"> <enumVal>
    			<enumChoice choice="No"/> <enumChoice choice="Yes"/> </enumVal> </variable>
    		<variable label="F2 controls output 8" CV="36" mask="VXXXXXXX" minOut="8" minFn="2"> <enumVal>
    			<enumChoice choice="No"/> <enumChoice choice="Yes"/> </enumVal> </variable>

La seule nouvelle chose est l'utilisation de l'attribut "minFn". Ceci est utile quand une famille de décodeur supporte différents nombres de fonctions (pas de sorties) dans des modèles de décodeurs différents.

Comme vous allez vers les numéros de fonctions plus élévés, le mapping NMRA entre les bits dans les CVs et le numéro de sortie change. Vous pouvez voir ceci en regardant un exemple de la façon dont la fonction dix est mappée pour les sorties 7 à 14:

    		<variable label="F10 controls output 7" CV="44" mask="XXXXXXXV" minOut="7" minFn="10"> <enumVal>
    			<enumChoice choice="No"/> <enumChoice choice="Yes"/> </enumVal> </variable>
    		<variable label="F10 controls output 8" CV="44" mask="XXXXXXVX" minOut="8" minFn="10"> <enumVal>
    			<enumChoice choice="No"/> <enumChoice choice="Yes"/> </enumVal> </variable>
    		<variable label="F10 controls output 9" CV="44" mask="XXXXXVXX" minOut="9" minFn="10"> <enumVal>
    			<enumChoice choice="No"/> <enumChoice choice="Yes"/> </enumVal> </variable>
    		<variable label="F10 controls output 10" CV="44" mask="XXXXVXXX" minOut="10" minFn="10"> <enumVal>
    			<enumChoice choice="No"/> <enumChoice choice="Yes"/> </enumVal> </variable>
    		<variable label="F10 controls output 11" CV="44" mask="XXXVXXXX" minOut="11" minFn="10"> <enumVal>
    			<enumChoice choice="No"/> <enumChoice choice="Yes"/> </enumVal> </variable>
    		<variable label="F10 controls output 12" CV="44" mask="XXVXXXXX" minOut="12" minFn="10" default="1"> <enumVal>
    			<enumChoice choice="No"/> <enumChoice choice="Yes"/> </enumVal> </variable>
    		<variable label="F10 controls output 13" CV="44" mask="XVXXXXXX" minOut="13" minFn="10"> <enumVal>
    			<enumChoice choice="No"/> <enumChoice choice="Yes"/> </enumVal> </variable>
    		<variable label="F10 controls output 14" CV="44" mask="VXXXXXXX" minOut="14" minFn="10"> <enumVal>
    			<enumChoice choice="No"/> <enumChoice choice="Yes"/> </enumVal> </variable>

## Exemple de Mapping Organisé

Vous pourriez encore vouloir inclure les valeurs de mapping dans un fichier de configuration, même si le décodeur n'a pas la possibilité de les changer . C'est un exemple de mapping constant:

    	<!-- Define the fixed Function-Output mapping -->
    	<constant label="FL(f) controls output 1" minOut="1" default="1" />
    	<constant label="FL(r) controls output 2" minOut="2" default="1" />
    	<constant label="F1 controls output 3" minOut="3" minFn="1" default="1" />
    	<constant label="F2 controls output 4" minOut="4" minFn="2" default="1" />
    	<constant label="F3 controls output 5" minOut="5" minFn="3" default="1" />
    	<constant label="F4 controls output 6" minOut="6" minFn="4" default="1" />
    	<constant label="F5 controls output 7" minOut="7" minFn="5" default="1" />
    	<constant label="F6 controls output 8" minOut="8" minFn="6" default="1" />
    	<constant label="F7 controls output 9" minOut="9" minFn="7" default="1" />
    	<constant label="F8 controls output 10" minOut="10" minFn="8" default="1" />

Ceci sera affiché de la même manière que les autres mappings, exceptées les cases individuelles qui seront inactives (grisées).