Bonjour,
Au fait, peux-tu nous donner ton prénom? C'est plus convivial.
gily a écrit:Ok merci.. A ce sujet je me demandais quelle fonction utiliser dans l'interface pour aller écrire dans un accessoire dont on connait l'adresse sur le réseau JK.
il existe des fonctions IPC qui permettent de piloter les aiguilles ou les feux, donc suppose qu'il faut les utiliser comme par exemple IPC_SignalChangeCRE()
Bonne question. En fait, j'attendais qu'elle arrive, ce qui me montre que tu as bien lu la doc., et compris la philosophie.
Il y a deux approches, et aucune des deux n'est totalement implémentée aujourd'hui.
- La première est en effet d'envoyer la commande IPC_SignalChangeCRE(), avec un type "COMMAND".
Mais ça pose pas mal de problèmes, à commencer par le fait que la commande actuelle repose sur la transmission d'état de signaux qui reflètent ce que gère CDM-Rail.
Il faudrait donc étendre cette convention de passages d'états d'une façon non définie aujourd'hui.
- La deuxième serait de créer une fonction IPC_SignalDCCParamCRE(), un peu similaire à IPC_TrainDCCParamCRE(), qui fasse la transmission directe des paramètres
DCC vers le serveur, qui retransmettrait
sans interprétation à le centrale. Le danger, c'est que CDM-Rail est court-circuité, et ce sont des failles potentielles de sécurité.
Je vais réfléchir pour mettre les deux types de fonctions à disposition, aux deux niveaux. Mais il faut que je réfléchisse aussi aux gardes-fous dans CDM-Rail.
gily a écrit:Je me pose également une question sur le fichier du kit "ipc_protocole spécification" qui décrit comment échanger via des chaînes de caractères. D'après ce que j'ai compris, la chaîne de commande/longueur/nbparam/listeparam est à mettre dans le champ sName de la fonction. C'est bien celà?
Non, là tu n'y es pas du tout. La syntaxe du protocole de base est tellement lourde qu'il ne faut pas chercher à l'utiliser directement. En fait, le champ sName dans les fonctions de l'API correspond la plupart du temps à un paramètre particulier du protocole qui s'appelle NAME, c'est tout.
Le but de cette API est justement d'éviter d'avoir à se peler le détail du protocole.
Trois fonctions génériques de l'API permettent de passer directement:
- les commandes sans paramètre IPC_GenericNoParamCREQ()
- les commandes avec un seul paramètres entier IPC_GenericIntParamCREQ()
- les commandes avec un seul paramètres "chaine de caractère" IPC_GenericStrParamCREQ()
D'une façon générale, dans l'API, les arguments de chaque fonction correspondent aux paramètres utilisés dans la commande du protocole.
Pour en revenir aux signaux
========================
Dans le cas des évènements de signaux:
nIndex (paramètre OBJ) est le numéro de référence interne CDM-Rail du signal
sName (paramètre NAME) est la chaine de caractère qui représente le même numéro. Aucun intérêt dans le cas de CDM-Rail. Mais si un autre logiciel qui nomme explicitement le signaux adoptait le protocole, il pourrait y passer le nom des signaux.
nAddress (paramètre AD) est l'adresse du signal.
En fait, dans ton cas, si tu utilises IPC_SignalChangeCRE(), tu mets nIndex à 0, et sName à "" (chaine vide). Seule d'adresse nAddress/AD est nécessaire dans ce cas.
A suivre.
JP