Utiliser des LVAR avec SIOC

Avro

PILOTE PRO
Messages
1 937
Réactions
269
Bonjour,

Je vous propose un tuto pour utiliser des LVAR en lieu et place des commandes standards de notre simulateur.

Pour simplifier la compréhension de ce tuto, nous allons repartir de celui de mameloose qui utilise des offsets libres de la bibliothèque SDK pour simuler des appuis de touches claviers ou des fonctions standards du simualteur.

Sioc touches claviers et fonctions précises

àla place nous utiliserons ces offsets pour déclencher des scripts LUA. Ces scripts communiqueront avec notre simulateur via des LVAR.

C'est quoi LUA ?

C'est un langage simple permettant de définir des actions à  générer dans le simulateur en fonction par exemple de lutlisation d'un joystick et de valeurs retournées par le simulateur. Imaginons que je veuille simuler un instructeur dans mon avion préféré. Je vais par exemple détecter que je tire sur le manche, je lis la vitesse de mon appareil, si ma vitesse est inférieur à  120 kts, je déclenche un son, une phrase préenregistrée de mon instructeur minvitant à  attendre la VR. LUA me permet de faire ça et bien d'autres choses.

Pourquoi des LVAR ?

Les addons récents d'avion sur P3D ont des interactions pilote-avion plus riches que celles utilisées par les avions par défaut. Pour connaitre les LVAR de votre appareil fétiche, je vous invite à  suivre ce qui suit:

Il faut déjà  aller dans votre super add-on préféré.
Entrer dans FSUIPC (ça vous savez faire)
et aller dans Keypress
presser SET
et appuyer sur une combin'aison de touche du clavier inutilisée (genre CTR+$ ... etc)
les touches apparaissent dans la fenêtre.
Dans la liste déroulante "control send when key pressed"
Selectionner "List local panel Vars"
Presser CONFIRM en bas

Ensuite il faut aller dans l'onglet LOGGING
activer "Button & key operation"
et "send to console"
la fenêtre console souvre.
En mode fenètré réduit pour voir la console et FSX
fermer FSUIPC
Dans le cockpit appuyer sur la combin'aison de touche prédéfinie avant

Cela fait apparaitre une longue liste de L:vars dans la console.

Retourner dans FSUIPC LOGGING et STOP pour arrêter le log.

Pour retouver la liste, il faut aller dans le dossier de FSUIPC
FSX>MODULE>
Là  on trouve un fichier FSUIPC4x.log

Pour ce tuto, j'utiliserai le CRJ 700 dAerosoft. et voici un petit extrait des 2737 LVAR de cet appareil :

Code:
L:ASCRJ_EICAS = 1.000000
L:ASCRJ_DSPL_CONT = 1.000000
L:ASCRJ_ISI_STD = 0.000000
L:ASCRJ_ISI_PLUS = 0.000000
L:ASCRJ_ISI_MINUS = 0.000000
L:ASCRJ_ISI_CAGE = 0.000000
L:ASCRJ_ISI_KNOB_CHANGE = 0.000000
L:ASCRJ_LSP_BRG1 = 0.000000
L:ASCRJ_RSP_BRG1 = 0.000000
L:ASCRJ_LSP_BRG2 = 0.000000
L:ASCRJ_RSP_BRG2 = 0.000000
L:ASCRJ_LSP_FORMAT_CHANGE = 0.000000
L:ASCRJ_RSP_FORMAT_CHANGE = 0.000000
L:ASCRJ_LSP_RANGE_CHANGE = 0.000000
L:ASCRJ_RSP_RANGE_CHANGE = 0.000000
L:ASCRJ_LSP_NAV_SOURCE_CHANGE = 0.000000
L:ASCRJ_RSP_NAV_SOURCE_CHANGE = 0.000000
L:ASCRJ_LSP_NAV_SOURCE_XSIDE = 0.000000
L:ASCRJ_RSP_NAV_SOURCE_XSIDE = 0.000000
L:ASCRJ_LSP_RA_TEST_BTN = 0.000000
L:ASCRJ_RSP_RA_TEST_BTN = 0.000000
L:ASCRJ_LSP_BARO_CHANGE = 0.000000
L:ASCRJ_RSP_BARO_CHANGE = 0.000000
L:ASCRJ_LSP_BARO_STD = 0.000000
L:ASCRJ_RSP_BARO_STD = 0.000000
L:ASCRJ_LSP_PFD_MODE = 1.000000
L:ASCRJ_RSP_PFD_MODE = 1.000000
L:ASCRJ_LSP_BRG1_INFO = 0.000000
L:ASCRJ_RSP_BRG1_INFO = 0.000000
L:ASCRJ_LSP_BRG2_INFO = 0.000000
L:ASCRJ_RSP_BRG2_INFO = 0.000000
L:ASCRJ_LSP_FORMAT_INFO = 2.000000
L:ASCRJ_RSP_FORMAT_INFO = 2.000000
L:ASCRJ_LSP_RANGE_INFO = 40.000000
L:ASCRJ_RSP_RANGE_INFO = 40.000000
L:ASCRJ_LSP_NAVSRC_INFO = 0.000000
L:ASCRJ_RSP_NAVSRC_INFO = 4.000000
L:ASCRJ_LSP_REFSPD_INFO = 0.000000
L:ASCRJ_RSP_REFSPD_INFO = 0.000000
L:ASCRJ_LSP_REFALT_INFO = 0.000000
L:ASCRJ_RSP_REFALT_INFO = 0.000000
L:ASCRJ_LSP_BARO_INFO = 0.000000
L:ASCRJ_RSP_BARO_INFO = 0.000000
L:ASCRJ_LSP_BARO_VALUE = 1022.787109
L:ASCRJ_RSP_BARO_VALUE = 1013.099609

=============== Début de lextrait du tuto de mameloose ===============

Il existe dans le SDK quelques variables qui permettent de simuler jusqu'à  9 joysticks comprenant chacun 32 boutons !

Ce qui veut dire qu'il est possible au total de simuler 288 touches !! Eh oui !

Petite mise en pratique

Ici dans le SDK le premier joystick virtuel est l'offset $3340 de longueur 4



Pour pouvoir contrôler cette variable, il suffit d'utiliser la fonction SETBIT et CLEARBIT pour chaque bouton

à  savoir que le premier bouton commence au bit 0

1- déclarer la variable et un bouton

comme précédemment, j'ouvre un code vierge et EDIT NEWVAR







ok on a deja vu tout ca avant ; la variable du joy est declarée et j'ai mis un simple bouton sur l'entrée n°5 de la master

2- définir le rôle du bouton !

dans cet exemple je vais utiliser le bouton n°5 de notre joystick virtuel (donc le bit n°4)

clic droit sur le bouton et NEWCOMMANDE



comme on a vu précédemment fonction IF (si mon inter est fermé =1)

reclic droit et NEWCOMMAND



alors je simule le bit 4 pour le joystick

et maintenant le contraire fonction ELSE donc, clic droit sur LE BOUTON ET NEW COMMANDE







VOILA !! à  partir de la on se dit c'est fini ! eh ben non

=============== Fin de lextrait du tuto de mameloose ===============

Je vais créer un fichier texte en utilisant un bloc-notes. Pour ma part, j'utilise Notepad++

Code:
--  Aircraft: CRJ 700 Aerosoft (Lvar)
--  Version: 1.0
--  Date: September 2018
--  Author: Emmanuel

    -- bouton 17
    bar = ipc.readUB(0x3340)
    if bar > 0 then
        ipc.writeLvar("L:ASCRJ_LSP_BARO_STD",1)
    end

Les textes apès -- sont des commentaires optionnels. Par exemple :
-- bouton 17 est là  pour me souvenir que c'est l'entrée 17 de ma carte I/O qui est testée.

Je sauvegarde ce fichier dans mon répertoire Modules de P3D en lui donnant lextension .lua Je lai appelé dans ce tuto Crj700.lua

Que fait le script ?

Il lit l'offset 3340 (readUB) et la valeur est stocké dans la variable bar (j'aurais pu lui donner un autre nom ;)). Avant que je nappuie sur mon bouton, la valeur de l'offset, et par conséquent la variable bar, est de 0. Quand j'appuie sur le bouton, cette variable passe temporairement à  1.

if bar > 0 permet dexécuter une ou plusieurs instructions écrites à  la suite du test et avant le terme end.

ipc.writeLvar permet décrire une LVAR qui sera interprêté par mon simulateur. Encore faut-il que la LVAR soit connue par laddon de mon avion (L:ASCRJ_LSP_BARO_STD) et que la valeur soit interprétable. Ici la LVAR permet, quand la valeur est à  1 de passer la valeur de QNH à  1013.25 mb.

1535969539_fsuipc_lua.jpg


On va lancer maintenant le simulateur. Dans le menu Add-ons, FSUIPC (version enregistrée), je crée un profil spécifique pour mon CRJ-700 et je clique sur le bouton. Il est détecté en Joy n° 64 Btn n° 4 que jassocie au script LUA Crj700.lua de mon répertoire Modules. C'est tout :)
 
Avro, merci pour le tuto!!

Faut que j'essaye en suivant pas à  pas quand j'aurais tout le nécessaire mais j'espère y arriver avec toutes ces infos!

Je suppose qu'il en va de même ensuite pour assigner par exemple le mouvement d'une aiguille d'une gauge via la Lvar correspondante?

Merci
 
Silverstar a dit:
Jy comprends que dalle mais merci pour le tutoriel :)

C'est inquiétant, j'aurais mal fait mon travail :eek:

Aurelien a dit:
Avro, merci pour le tuto!!

Your welcome.

Aurelien a dit:
Je suppose qu'il en va de même ensuite pour assigner par exemple le mouvement d'une aiguille d'une gauge via la Lvar correspondante?

Oui mais je ne sais pas de combien doffset libres on dispose pour animer des aiguilles. Il y a l'offset 3BC4 que j'ai utilisé pour un test.
 
A partir de $2910 il y a 224 octets de libres ou utilisables pour les boutons de joystick virtuel de FSUIPC
- $3210 encore 224 octets de libres
- $66C0 64 octets de libres
Pour info, j'utilises les offsets à  partir de $9000, 2028 octets de libres (Reserved for future improvements)
 
Désolé mais en mettant l'offset 3341, FSUIPC ne détecte rien.

Après l'offset libre 3340, il y a quoi ? 3341 ? 334A ?
 
Je viens de comprendre. On utilise les offsets 3340 3344 3348 334C puisque la longueur est de 4 octets plusieurs fois l'offset 3340 et c'est le numéro de bouton qui fait la différence.
 
Avro a dit:
Je viens de comprendre. On utilise les offsets 3340 3344 3348 334C puisque la longueur est de 4 octets plusieurs fois l'offset 3340 et c'est le numéro de bouton qui fait la différence.

Bonsoir, javance à  petits pas sur linterfaçage de Lvar!
A ce sujet, pouvez vous me dire quels sont les offset libres suivant après ces
- 3340
- 3344
- 3348
- ???

merci à  vous
 
Alors pour faire court sous FSUIPC :

Pour les entiers :

1 bit = 0 ou 1.
1 Unsigned byte = un octet = 8 bits = une valeur comprise entre 0 et 255
1 Unsigned word = 2 octets = 16 bits = une valeur comprise entre 0 et 65535
1 Unsigned Dword = 2 U word = 4 octets = 32 bits = une valeur comprise entre 0 et 4294967295

1 byte = un octet = 8 bits = une valeur comprise entre -128 et +127
1 word = 2 octets = 16 bits = une valeur comprise entre -32768 et +32767
1 Dword = 2 word = 4 octets = 32 bits = une valeur comprise entre -2147483648 et +2147483647

Pour les flottants :

1 float = 4 octets = une valeur comprise entre 0 et +3.4028234664 à— 10^38
 
Aurelien a dit:
si je poursuis,

3364
3368
336C
3370
3374
etc... ?
Si, tu poursuis...
Comme visiblement, tu te sers du range libre de FSUIPC, tu emplafonneras des Offsets déjà  utilisés par lui-même. :cool:
 
Bonjour,

En ce qui me concerne je cherche à  faire autre chose mais je ne sais pas si c'est possible ?

En clair je souhaiterai qu'une output SIOC ( un voyant ) soit le reflet d'une Lvar, c'est à  dire que si la Lvar passe à  la valeur 1, loutput SIOC passe à  l'état 1

Est ce que c'est possible et est ce quelqu'un peut maider pour le script Lua ?

Cordinateuralement

Bernard
 
Tabar57 a dit:
Bonjour,

En ce qui me concerne je cherche à  faire autre chose mais je ne sais pas si c'est possible ?

En clair je souhaiterai qu'une output SIOC ( un voyant ) soit le reflet d'une Lvar, c'est à  dire que si la Lvar passe à  la valeur 1, loutput SIOC passe à  l'état 1

Est ce que c'est possible et est ce quelqu'un peut maider pour le script Lua ?

Cordinateuralement

Bernard


Via un script Lua c'est très probablement réalisable! Je cherche comme toi, je teste différents script que je glane ici et là  sur le net, en essayant de comprendre le pourquoi du comment... mais je tavoue que pour le moment je bute sur la LED! J'ai réussi les switch et une première gauge mais pas de LED pour le moment...
On va y arriver! ;)
 
Je dirai que tu écris ta Lvar dans un offset libre ipc.writeUB(0x9050, 1) et tu récupère l'offset dans SIOC
 
Ok Fab, je vais essayer comme çà  mais je pensais pouvoir me passer de la recherche et de l'utilisation d'un offset libre

Merci en tous cas

Bernard
 
Merci à tous pour ces explications !

Pour être sûr d'avoir bien compris : Si je veux travailler avec l'Offset 0x0BC2 (2 octets), et que j'utilise l'offset libre 0x066B0, le prochain offset libre sera 0x66B2 ?

Olivier
 
Oui et attention au passage du "9" .... si l'offset est $1239 sur 1 octet, le prochain n'est pas $1240 mais $123A (c'est de l’hexadécimal)
 
Retour
Haut