JMRI: Ajouter un Nouveau Système
Cette page décrit les étapes pour ajouter un nouveau type de données,
par exemple, Appareils Powerline (Coupleur Courant Porteur CPL), à JMRI.
Elle utilise comme exemple l'ajout du type
du "courant porteur en ligne" en Janvier 2008.
Nous listons les fichiers qui sont modifiés et créés dans l'
ordre où ils ont été fait dans ce cas, les autres ordres peuvent aussi travailler,
et vous ne pourriez pas devoir à faire tout cela.
Dans ce cas particulier, nous avons commencé par la copie d'une
réalisation d'un système existant (SECSI). Ceci affecte la façon
dont nous avons ordonné cela, et fait bouger le processus de base assez
rapidement.
Dupliquer un système existant
- Créer une double arborescence de fichiers
-
En utilisant tous les outils qui vous aident,
dupliquer l'arborecence src/jmri/jmrix correspondant
au système existant que vous souhaitez copier.
- Modifiez les informations de nom du paquet
-
En utilisant votre éditeur favori, changez tous les noms des paquets
dans les nouveaux fichiers à leur nouveaux emplacements. Dans cet exemple
qui était un remplacement de "jmri.jmrix.secsi" par "jmri.jmrix.powerline".
- À ce point, soyez sûr de pouvoir compiler. Ce code
n'est pas encore compatible, Mais il devrait se compiler.
- Vérifier les dates du copyright
-
Parce que vous avez copié un système qui pourraient ne pas
avoir été touché pendant un certain temps, ajoutez l'année
courante ( et si nécessaire, votre nom ) aux notes du copyright
dans tous les fichiers.
- Création d'une structure SVN
-
Dans cette étape, nous avons la structure de base SVN en place.
- Ajouter tous les répertoires que vous avez créé dans SVN. Dans l'exemple,
c'était:
svn add powerline powerline serialdriver/serialmon/
svn add powerline/configurexml powerline/serialdriver/configurexml
- Ajouter tous les fichiers COPYING :
svn add powerline/COPYING powerline/*/COPYING powerline/*/*/COPYING
- Enfin, remettre ces fichiers (mais seulement ces fichiers):
svn commit -m"usual file" powerline
- À ce stade, assurez-vous que vous pouvez compiler.
Faire une Migration Basique
- Migrer les noms
-
À l'aide de votre éditeur favori, changer toutes
les occurrences de l'ancien nom système par le nouveau.
Puis rechercher et remplacer, peut-être pas littéralement, toutes les
occurrences.
- À ce stade, assurez-vous que vous pouvez compiler.
Créer des Tests Basiques
- Dupliquer les répertoire
-
En suivant les étapes ci-dessus, Dupliquer
le répertoire pour les tests des systèmes précédents,
la création d'un nouveau répertoire dans le test/jmri/jmrix
pour contenir les tests.
Changer le nom des paquets, vérifier les dates de copyright,
créer la structure de SVN, et migrer les noms.
-
A ce stade, assurez-vous que vous pouvez compiler
à la fois le code principal (qui n'a pas été modifié dans cette étape)
et les tests.
Vous devez également être en mesure d'exécuter avec succès le
tests dans votre nouveau système (même s'il a été créé
pour la fonctionnalité de l'ancien système):
tests ant &&./runtest.csh jmri.jmrix.powerline.SerialTest
Connectez les Bases vers le reste du système
- Connectez-vous à la configuration des menus
-
Modifier les fichiers jmri/jmrix/ActiveSystemsMenu.java (deux places),
src/jmri/jmrix/JmrixConfigPane.java (une place) et
src/jmri/jmrix/SystemsMenu.java (une place) pour ajouter le nouveau
système.
Ne soumettez pas ce SVN encore!
- À ce stade, assurez - vous que vous pouvez compiler et exécuter DecoderPro, et
que votre nouveau système apparaît dans le panneau des préférences.
- Connectez - vous pour tester l'arbre
-
Modifier le fichier test/jmri/jmrix/JmrixTest.java
pour appeler vos tests du nouveau système.
Ne soumettez pas ce SVN encore!
- À ce point, lorsque vous faites "ant alltest", votre nouveau système de test
doit être exécuté.
Migrer vers des fonctionnalités de Base
- mise à jour des options de connexion
-
Vitesses, etc, dans powerline/serialdriver/SerialDriverAdapter.java.
- Obtenez d'envoyer/recevoir des communications de travail
-
La première étape est d'obtenir des communications de travail afin que
vous puissiez envoyer un message de la fenêtre "Envoyer la commande",
et la voir et voir la réponse dans la fenêtre "Moniteur".
Le Rendre facile à utiliser
- Ajouter de Possibles Éléments de Démarrage
-
Modifier src/apps/ActionListBundle.properties pour ajouter des éléments appropriés.
Compléter la documentation
- Créer L'Arbre d'Aide
-
Commencez par dupliquer, puis modifiez, n'oubliez pas de
mettre à jour l'index.
Vous aurez également à modifier les emplacements sur
les différents cadres
- ant javadoc
-
Créer les JavaDocs, et résoudre les éventuels nouveaux (ou anciens) problèmes.
- Ajouter le système aux pages web "matériel"
-
Modifier help/fr/html/hardware/index.shtml.
Ajouter une connexion TCP/IP à un système existant
Ce sont des notes brutes de l'ajout d'une connexion TCP/IP du type RFID,
en copiant l'architecture du système C/MRI.
- Créer un répertoire "networkdriver" en parallèle avec le répertoire "serialdriver".
svn cp java/src/jmri/jmrix/cmri/serial/networkdriver/ java/src/jmri/jmrix/rfid/
- Éditez le paquet et importez les états, tous les fichiers ".cmri.serial." à ".rfid.",
puis ".cmri." à ".rfid.".
- changez le "setManufacturer" appelé dans NetworkDriverAdapter.
- C/MRI pourrait ne pas avoir été le meilleur point de départ, mais c'est ce que nous avons.
Quelques modifications spécifiques nécessaire:
- Changez CMRISystemConnectionMemo pour RfidSystemConnectionMemo
- Enlevez la référence à NodeConfigAction dans ConnectionConfig ( ou
utilisez ceci comme la base pour les configurations spéciales dont vous avez besoin;
c'était pour ajouter un bouton "Configure Nodes" )
- Changez le nom de SerialSensorManager
- Enlevez les références SerialTurnoutManager SerialLightManager ( Il n'y en a pas dans la RFID )
- Ajoutez RfidReporterManager
- À besoin d'un pilote de réseau:
svn cp java/src/jmri/jmrix/cmri/serial/SerialNetworkPortController.java java/src/jmri/jmrix/rfid/RfidNetworkPortController.java
et modifiez le comme ci-dessus.
- java/src/jmri/jmrix/rfid/networkdriver/configurexml/ConnectionConfigXml.java
contient du code mort pour configurer les nœuds C/MRI (encore une fois, peut-être pas
le bon système à copier). Laissez cela pour plus tard en commentant le corps
de extendElement (Element e) et décompressez Element (élément e).
- Changez les références SerialTrafficController pour RfidTrafficController.
- Un autre problème avec C/MRI comme prototype est qu'il a encore une
instance () appel dans NetworkDriverAdapter. Aller à RFID SerialDriverAdapter
et copiez la structure là.
// connect to the traffic controller
this.getSystemConnectionMemo().setRfidTrafficController(control);
control.setAdapterMemo(this.getSystemConnectionMemo());
control.connectPort(this);
control.sendInitString();
// declare up
jmri.jmrix.rfid.ActiveFlag.setActive();
( Il y a aussi un tas de choses avant cela dans la méthode configurée () qui doit
simplement être copié, parce que Les connexions RFID ont aussi besoin d'une configuration compliquée );
l'acteur a également besoin de certaines parties copiées.
- Ajoutez jmri.jmrix.rfid.networkdriver.ConnectionConfig à
java/src/jmri/jmrix/rfid//RfidConnectionTypeList.java
- Changez "RFID Device Connection" pour "Direct Serial Connection" dans ConnectionConfig.name()
La connexion réseau par défaut à "Network Connection".
- Vérifiez que configure/save/restart ramène toutes les options de configuration.
Connexions avec une Configuration Compliquée
Certains types de connexion ont besoin de plus de configuration et/ou la configuration que vous pouvez
obtenir avec l'habituel mécanisme option1/option2/option3. Les outils disponibles sont:
- loadDetails() dans ConnectionConfig. Cette fonction est appelée lors de
la mise en place de la fenêtre des préférences, et peut être utilisée pour ajouter
des commandes supplémentaires C/MRI l'utilise pour ajouter un bouton "Configure Nodes".
RFID l'utilise pour ajouter des écouteurs qui contrôlent quelles combinaisons d'options sont disponibles.
- extendElement(Element e) et unpackElement(Element e) dans ConnectionConfigXml
peut être utilisé pour stocker des informations supplémentaires et les recharger, respectivement.
C/MRI l'ajoute pour stocker ses informations de nœuds