sioc


Cette section est ambitieuse : il s’agit  de se familiariser avec une utilisation complète de  SIOC.

En effet si l’utilisation de FSUIPC, OGS et WideFS/WideClient ne présente pour principale difficulté que leur installation, c’est SIOC qui demande le plus d’étude.

J’ai voulu aborder le problème à partir du « niveau zéro », sans connaissances élaborées en programmation.

Bien sûr il est impossible de rentrer dans tous les détails des connaissances d’un programmeur (que je ne suis pas), et énoncer toutes les notions de base de la programmation serait très fastidieux.

J’ai préféré suivre un fil conducteur « à partir de rien » pour comprendre SIOC et se lancer dans son utilisation en programmation.

Pour les détails plus spécifiques à SIOC, j’ai fait appel à des documents externes que je vous propose, soit disponibles immédiatement en français, soit traduits par mes soins.
Il est en effet inutile de refaire le monde, et en particulier les documents qui existent déjà.




GENERALITES


Structure et traitement des données en informatique.


Fondamentalement, FS est un programme informatique comme les autres.

Un programme informatique a pour fonction de manipuler des données pour atteindre un objectif bien déterminé, selon le rôle du programme.
Cela se fait au moyen d’une série d’instructions qui sont exécutées par l’ordinateur dans un ordre bien établi.
Par exemple « calcule ceci, modifie cela en ça dans telle circonstance, affiche ceci au cas où cela est vrai, fais cela jusqu’à ce que cette valeur soit atteinte, répète cela autant de fois que ceci n’est pas nul, etc… ».

Les données elles-mêmes sont organisées en deux catégories : les constantes, dont la valeur reste identique durant tout le déroulement du programme, et les variables, dont la valeur est modifiée par les calculs du programme.

Ces données concernent tous les aspects du fonctionnement du programme, qu’ils soient perceptibles ou non.
Dans le cas de FS il s’agira par exemple des données d’affichage, que ce soit des menus ou du contenu de l’écran, des options de FS et leur réglage, des sons gérés par FS, des calculs de la position de l’avion, des interactions avec les joysticks ou autres dispositifs etc…

Parmi ces très nombreuses variables se trouvent les données qui concernent directement l’avion et ses systèmes : celles qui nous intéressent pour nos modules de cockpit.

Nous aurons donc besoin de variables comme par exemple la vitesse verticale ou horizontale, le cap, l’altitude etc… et de constantes comme par exemple la puissance d’un réacteur, la longueur ou le poids à vide de l’avion, sa charge maximale etc…

Lorsqu’on le charge, le programme commence toujours par dire à l’ordinateur avec quelles variables il va travailler et éventuellement ce que valent ces variables au début de l’exécution du programme.
L’ordinateur prend alors chacune des variables dans sa mémoire, qui est l’endroit où il va les traiter selon les instructions du programme.

Pour ne pas se perdre dans un fouillis inextricable, ces donnés doivent être organisées : le programme doit savoir précisément de quelle manière et où les retrouver dans sa mémoire.
Il le fait en définissant une série de cases, un peu comme un meuble à tiroirs, dont chacune contient une variable ou une constante.
Comme il y a un nombre gigantesque de tiroirs, chacun porte un numéro et ils sont classés selon ce numéro.

En pratique ces tiroirs sont nommés « adresses » de la mémoire ou encore « offsets ».
Le programme passe donc son temps à ouvrir des tiroirs selon les instructions du type de celles données plus haut, pour examiner la valeur de la variable correspondante et la modifier selon les instructions.

Voici un exemple imaginaire mais réaliste : FS dit à l’ordinateur : « va voir si la variable de position verticale du joystick a changé à l’adresse n° 5674, et si oui modifie dans telle proportion la variable « attitude de l’avion » à l’adresse 3456657,  mais aussi calcule la nouvelle valeur de la variable « vitesse » à l’adresse 345678, modifie la variable « bruit du vent » comme ceci à l’adresse 3894435, modifie la variable « représentation du yoke à l’écran » à l’adresse 26579235234 etc… »




Interactions des programmes entre eux : échanges et modification de variables.

Ce mode de fonctionnement assez simpliste vaut pour tous les programmes.
Donc sont concernés aussi des programmes comme SIOC, OGS, FSUIPC, etc…

Notre but comme constructeurs de cockpit est de faire communiquer des programmes entre eux pour que des actions sur des boutons reliés à l’ordinateur soient relayées à FS de manière à provoquer la modification correspondante sur l’avion, ou à l’inverse que des informations du tableau de bord puissent être représentées sur des éléments matériels reliés à l’ordinateur,  comme des voyants ou des affichages chiffrés.

Il faut agir pour cela à plusieurs niveaux.



Un réseau …

Tout d’abord, il est peu réaliste de charger un seul ordinateur de gérer tout cela à la fois : c’est trop.
Il faudra donc utiliser plusieurs ordinateurs connectés entre eux pour qu’ils puissent échanger les données : un réseau.
En pratique il vaut mieux utiliser un réseau matériel qu’un réseau WIFI (c’est un parti pris), à la fois parce que c’est plus simple (donc plus fiable)  mais aussi plus performant et moins cher.
Les aspects pratiques de la connection de PC(s) en réseau sont exposés dans la section « manipulations ».
Dans un réseau il y aura toujours un PC maître, le « Serveur » et le ou les autres PCs qui viennent se connecter à lui pour faire circuler l’information dans les deux sens : les « Clients » ou « Hôtes ».
Chaque PC est en outre identifié sur le réseau par son « adresse IP », qu’il faut donc absolument avoir défini et retenue pour la mentionner aux logiciels que nous utiliserons.


Des programmes …

Une fois nos PCs connectés et dialoguant entre eux, il faut déployer les programmes nécessaires à notre but primordial : faire le lien entre un bouton et FS (ou OGS).

Actuellement sont utilisés :


Les programmes de base :

1 - Un programme qui connaît les adresses des données de FS qui nous intéressent, et qui peut en outre soit communiquer leur valeur à d’autres programmes, soit modifier des valeurs à la demande d’autres programmes.

Il s’agit de FSUIPC, qui s’installe dans FS même.
Dans le cas de FSUIPC une liste complète des offsets de FS est disponible. On peut donc connaître le numéro des offsets à employer pour les autres programmes qui viendront agir sur FSUIPC.



*** Il existe un autre programme qui peut remplir cette fonction : IOCP de chez opencockpits.
Il ne se limite pas à interagir avec FS : IOCP s’occupe aussi de la communication des programmes de chez opencockpits, ou d’autres programmes  que nous utilisons aussi pour nos réalisations.***



*** Il y a une restriction très importante à ceci : les offsets que connaît FSUIPC sont strictement ceux de FS. Ils ne concernent donc que les fonctions présentes sur les avions par défaut de FS.
Les fonctions supplémentaires plus sophistiquées introduites par des add-ons comme les avions de PMDG ou PIC, etc… ne sont pas renseignées par FSUIPC.
Généralement d’ailleurs les concepteurs de ces add-ons ne veulent pas donner la liste des offsets, protégeant leurs sources… il est donc presque impossible de s’en servir pour nos cockpits, sauf par des voies très indirectes.
C’est très regrettable compte tenu de la qualité intrinsèque de ces add-ons, qui en feraient des modèles parfaits pour nos systèmes.
Il y a à ce jour une seule exception à cet état : les avions de Level-D sont fournis avec les outils nécessaires, mais il s’agit d’un 767…***



2 - Un programme, en deux parties, qui s’occupe de faire circuler l’information depuis FSUIPC vers les autres membres du réseau : WideFS qui s’installe dans FS, et WideClient, qui s’installe sur les autres PCs.
De manière similaire si on choisit IOCP plutôt que FSUIPC, le « serveur » IOCP s’installe dans FS et le « client » IOCP s’installe sur les autres PCs. (voir « réseau » pour les détails de ces appellations). Dans ce cas, IOCP joue à la fois le rôle de FSUIPC et de WideFS.
IOCP comme FSUIPC peuvent aussi répartir l’information entre différents programmes situés sur un même PC.



Les programmes utilisés pour nos besoins spécifiques.

Notre but est de lier OGS à la fois à FS (par FSUIPC ou IOCP) mais aussi au programme qui gère le matériel que nous allons connecter au PC : SIOC.
Ces programmes utilisent donc aussi des variables qui leur sont propres et qu’ils font correspondre à celles de FS grâce à FSUIPC/IOCP.
Elles sont également organisées et stockées dans des adresses qui leur sont propres et que nous devons donc aussi connaître.


3 - OGS sert à intégrer à l’avion de FS les fonctionnalités d’affichage (« glass cockpit ») qui n’existent pas sur les avions de base. Plus tard il intégrera des fonctions supplémentaires comme le FMC etc…
Pour cela il intègre certaines variables de FS et ajoute les siennes.
OGS pour ce faire dialogue avec FS par l’intermédiaire du couple WideClient et FSUIPC.
Il peut aussi utiliser IOCP car il intègre un module « client » IOCP.

OGS a un deuxième but : communiquer avec le programme qui gère le matériel que nous connectons au PC (SIOC).
Cela lui sert à savoir comment ses propres variables doivent changer selon les boutons actionnés, ou envoyer à SIOC les variables OGS à afficher sur les voyants ou afficheurs à chiffres.
Pour communiquer avec SIOC, OGS utilise son module client IOCP.


4 - SIOC : le maillon central de notre chaîne.
Il gère le matériel connecté au PC en définissant pour chaque bouton ou afficheur une variable.
Il se charge aussi de faire correspondre ces variables à celles de FS et OGS.

SIOC joue donc un rôle principal dans la gestion et la circulation des variables.
Il dispose de plusieurs modules pour ce faire.

Un module de communication : il s’agit d’un « serveur » qui utilise IOCP et/ou FSUIPC.

Un module de connection au matériel, c’est à dire aux cartes sur lesquelles sont connectées les boutons et afficheurs.
Quelle que soit leur fonction, les cartes ne peuvent faire circuler l’information que dans deux sens : de la carte vers le PC : « entrées » ou du PC vers la carte : « sorties ».
Les cartes elle-mêmes sont connectées physiquement au PC par un câble parallèle ou USB.

Un module de configuration : il nous permet de définir les variables que nous allons employer dans SIOC, puis de définir les liens entre ces variables propres de SIOC (celles liées aux boutons et afficheurs) et celles des autres programmes (OGS ou FSUIPC).
C’est donc nous qui définirons en utilisant ce module, par exemple que l’action sur le bouton correspondant à l’entrée n°12 de la carte doit correspondre à la valeur « ON » de la variable $64676476 de FSUIPC qui correspond par exemple à l’allumage des feux d’atterrissage.
Ou à l’inverse c’est nous qui dirons à SIOC que la valeur de la variable altitude de FS ou FSUIPC, par exemple $874748567  doit correspondre à l’activation de l’affichage sur un afficheur numérique qui lui se trouve à la variable 539 de SIOC.

Si vous avez compris les explications données jusqu’ici, vous devez pouvoir passer au niveau supérieur en entrant dans le vif du sujet : vous familiariser avec SIOC et ses scripts.




SIOC

Nous avons avec SIOC un programme qui peut recevoir des entrées (inputs) matérielles ou  logicielles, les traiter et éventuellement les modifier selon un scénario bien détaillé, puis les exporter (output) vers une carte ou un logiciel.

A y réfléchir un peu, ce sont là les caractéristiques d’un vrai langage de programmation… et c’est là tout l’intérêt de SIOC par rapport à IOCARDS, l’autre logiciel d’opencockpits : SIOC ne se contente pas de recevoir et envoyer les variables, il permet de les modifier selon des scénarios élaborés, digne d’une intelligence artificielle.

Configurer SIOC c’est donc écrire un programme.
Le programme consiste avant tout en une suite d’instruction qui sont exécutées de manière bien ordonnée.
Dans le cas de SIOC la liste d’instructions se nomme le « script ».
Nous verrons en détail ce qu’il contient.

Programmer ne représente pas une difficulté insurmontable.
Il faut cependant connaître quelques règles fondamentales et le détail du langage de programmation.
Le processus s’apparente beaucoup à une traduction du français vers une autre langue.




Conseils généraux et règles d’or.


Dans tout processus de programmation il y a deux règles d’or absolues.

- la rédaction doit être rigoureuse.
L’ordinateur est une machine puissante mais stupide et dépourvue d’imagination ou de capacité d’adaptation.
Il ne comprend que ce qu’il ne connaît ou reconnaît.
La moindre faute d’orthographe, de syntaxe, de ponctuation ou de mise en page dans une ligne la rendra incompréhensible à ses yeux.

Notre cerveau a la capacité de reconstituer le sense d’un taixte, en corr .
Ri geant les ai, reures
qui ysson présntes pour re trouvver lessens de la fraz.

L’ordinateur n’a pas cette faculté et toute erreur de ce type provoquera le blocage du script.



- il ne faut rien laisser au hasard mais être structuré et organisé.
Ce n’est pas en écrivant un programme que l’on réfléchit à ce qu’on va écrire.
Cette réflexion doit être menée avant la rédaction, et de manière complète.

Pour comprendre cette notion, reprenons la comparaison : avant de commencer à traduire un texte dans une autre langue, il faut un texte à traduire.
Ce texte doit être complet et tous ses aspects doivent être fixés avant le travail de traduction à proprement parler, soit la rédaction du programme.

Avant de commencer il faut donc avoir rédigé un « scénario » complet et précis en langage courant.
Il est très important également que toutes les variables à utiliser soient répertoriées et nommées : cela évite de s’embrouiller en cours de rédaction.
Aussi bien celles de FSUIPC ou des autres programmes externes, que celles que nous allons définir dans SIOC même.
La liste doit donc être impérativement dressée avant toute rédaction.




Comment apprendre à rédiger en SIOC ?

En pratique, on s’y prend comme pour apprendre et utiliser une nouvelle langue.

On commence par acquérir un vocabulaire, qui dans le cas de la programmation n’est jamais très étendu.
Comme dans une langue, le vocabulaire comprend différents types de mots ayant chacun un rôle différent.

Sans rentrer dans les détails, il s’agit des variables, des attributs, des liens, des opérateurs, des commandes et des fonctions.


Ensuite on apprend la syntaxe : comment rédiger, comment mettre en page, comment mettre la ponctuation.

Il est tout à fait recommandé de se familiariser avec la rédaction d’un script SIOC en lisant et analysant des scripts déjà rédigés, pour savoir comment s’y prendre ou utiliser les instructions, comment elles agissent etc...

On peut alors s’exercer à composer des petits textes pour mettre en pratique ses acquis.
En s’aidant d’exemples d’autres textes (scripts)  pour apprendre à rédiger.

Par exemple un petit script de quelques lignes modifiant quelques variables, qu’on peut tester pour savoir si on est dans le bon …

Enfin on se lance à rédiger un texte définitif dans toute sa complexité.




Comment programmer en SIOC ?

Le script est donc l’ensemble des instructions permettant à SIOC de relier les dispositifs matériels (boutons, encodeurs, afficheurs, axes de joysticks etc…) aux fonctions de FS, mais aussi de les faire correspondre aux variables des autres programmes (OGS, etc…) et également de les modifier selon un scénario bien ordonné.

Nous pouvons reprendre un script existant et éventuellement le modifier pour qu’il corresponde à notre construction : c’est la méthode la plus simple.

Nous pouvons aussi le rédiger à partir de zéro pour arriver à gérer tout le matériel que nous allons utiliser.
SIOC facilite la rédaction d’un script en l’automatisant en partie mais il est aussi possible de le rédiger sans aucun automatisme : « à la dure ».
Je vous conseille de n’utiliser ce dernier mode de rédaction « à la dure » que lorsque vous serez bien rodé à la rédaction automatisée de SIOC.

Dans tous les cas il s’agira de traduire du français vers le langage SIOC.

Par exemple il faudra traduire le fait que si le bouton de la carte comandant les feux d’atterrissage est enclenché, les feux d’atterrissage doivent s’allumer dans FS.

La première étape revient à conceptualiser que l’enclenchement du bouton modifie une variable dans les entrées de SIOC, et qu’il faut relier l’état « activé » de cette variable à celle de FSUIPC qui correspond aux feux d’atterrissage de FS.

La seconde reviendra à composer les instructions correspondantes dans la « langue SIOC » avec les instructions et les noms de variables adéquats.


Cependant un script SIOC a une structure bien déterminée et comprend plus que la simple liste des instructions.

La première partie du programme sert à dire à l’ordinateur quelles variables vont être utilisées.
Cette « déclaration » des variables est indispensable, l’ordinateur ne reconnaîtra dans le programme que les variables qui lui ont été déclarées.
D’où l’intérêt de les avoir répertoriées, organisées et nommées dans le projet rédigé sur papier avant toute programmation.

Vient ensuite le code proprement dit : la série d’instructions pour l’entrée, la manipulation et la sortie éventuelle des variables. En le rédigeant, on s’attache donc à respecter strictement la syntaxe, l’orthographe et la ponctuation.

On peut séparer chaque section du programme (par exemple la partie qui gère les interrupteurs des feux, la partie qui gère les boutons de l’EFIS, etc…).
Les langages de programmation comme SIOC permettent de délimiter ces différentes parties par des lignes commençant par des caractères spéciaux, qui ne sont pas interprétées par l’ordinateur comme des lignes de programmes : il les passe lorsqu’il les rencontres et elles ne servent qu’au rédacteur du code.
Elles permettent de mettre des titres ou des commentaires aux sections rédigées.

Une fois le code terminé, il faut enregistrer le scrip au format spécial .ssi : ce format est une traduction en langage plus direct pour SIOC et l'ordinateur, mais incompréhensible à la lecture.
Ce processus s'appelle la compilation.
(vous pouvez l'enregistrer en format .txt mais dans ce cas avant de l'employer il faudra le compiler).
La compilation est l'épreuve de vérité de votre travail : c'est là que les erreurs d'orthographe, de ponctutation ou de syntaxe, mais aussi les variables non déclarées seront identifiées et généreront un blocage ou une erreur.




Commencer la programmation en SIOC.


Avec ces conseils et principes de base, nous sommes prêts à rentrer dans le vif du sujet et apprendre SIOC.

C’est ici que je fais appel à des ressources extérieures.


- Pour commencer, et découvrir SIOC en douceur, petit à petit, jusqu’à découvrir des exemples de programmation, je vous conseille de lire l’excellent tutoriel de C. Keiffer : SIOC pas à pas.
La logique de fonctionnement y est très bien décrite et vous y trouverez des exemples d’utilisation des fonctions de SIOC.


- Ensuite il est temps d’approfondir en étudiant une présentation complète de SIOC.
Vous pouvez télécharger un tutoriel rédigé par les concepteurs de SIOC eux-mêmes et adapté par votre serviteur.

- SI vous voulez entrer dans le vif du sujet par une autre porte, le "site des deux Pierre" présente entre autres pages, une section très didactique dédiée à SIOC : on y trouve un excellent tutoriel sur l'apprentissage de SIOC. Pour rentrer en douceur dans le vif du sujet et devenir un pro sans souffrir. Le site est aussi dédié au Baron, mais ce qui vaut pour le Baron vaut aussi pour les Boeing "roturiers"... :)

- L’étape suivante consiste à disposer d’une description systématique des fonctions de SIOC :
un guide de référence complet de ses commandes et de son utilisation pratique. Peut-être ardu à lire d'une seule traite, mais la bible pour la programmation en SIOC.
Ce guide est disponible également sur opencockpits, traduit par votre serviteur…
Il s’agit de la traduction de l’aide en ligne de SIOC, d’où le nom du document …


- Vous pouvez également télécharger et lire le manuel en français de SIOC rédigé par M. Velez d’opencockpits.
Il s'agit cpendant du manuel de la version 1.0 de SIOC : pas très à jour donc mais déjà une bonne base de travail.


- Pour disposer d’une autre source d’exemples pratiques d’utilisation de SIOC,
Vous pouvez vous référer également aux travaux de Nico Kaan, à voir sur son site.

Il a en effet développé pour le Boeing 767 de Level-D une application permettant d’interagir avec les variables de ce magnifique add-on.
Bien plus que cela, il a conçu un script SIOC permettant de relier l’intégralité des éléments d’un cockpit matériel à toutes les fonctions du 767 de Level-D (y compris le FMC, l’overhead etc…).

Même si ce travail est spécifique au 767, il a également rédigé un tutoriel sur SIOC avec différents exemples de gestion avancée des fonctions du cockpit.
Une excellente source d’inspiration pour nos travaux de rédaction destinés à un cockpit de 737…
Avec son accord j’ai réalisé une traduction de ce tutoriel, vous pouvez vous en inspirer comme exemple.

Cerise sur le gâteau, il a mis à disposition depuis peu sur son site un script SIOC permettant de faire interagir le Boeing 767 de Level-D avec … le MCP vendu assemblé de chez opencockpits !


- La dernière ressource que je vous propose est le forum d’opencockpits.
La section consacrée à SIOC vous permettra d’y poser toutes vos questions et de découvrir des exemples de scripts à utiliser.