Bonjour,
J'ai avancé sur panel builder et les offsets libres, je vais essayer de reprendre le cheminement pour les gauges du DA20 d'Honoresia.
Sur le PC FSX:
Créer un script LUA pour l'avion concerné. Ca a été expliqué plus haut dans la discussion, je reprends le script d'Honoresia pour l'exemple:
- Code: Tout sélectionner
while 1 do
-- LECTURE DES LVARS
oil_press = ipc.readLvar("L:NEEDLE_OIL_PRESS")
oil_temp = ipc.readLvar("L:NEEDLE_OIL_TEMP")
-- LECTURE DES OFFSETS
-- ECRITURE DANS DES OFFSETS LIBRES
ipc.writeSD(0X66C8, oil_press)
ipc.writeSD(0X66C9, oil_temp)
-- TEMPS D'ATTENTE (RAFRAICHISSEMENT AVANT NOUVELLE BOUCLE)
ipc.sleep(100)
end
L'astuce c'est que PanelBuilder attends les valeurs à un certain format (longueur de l'offset). Ici on écrit ipc.writeSD, autrement dit (d'après la doc FSUIPC LUA Library), une valeur de 32 bits.
Déjà le 2ème offset devrait donc commencer en 66CC (4 bytes) sinon le second chevauche le premier et rien ne va plus.
Ensuite, pour éditer les paramètres de l'interface FSUIPC de panel builder, d'expérience l'interface plante et ne sauvegarde pas toujours tout. Il vaut donc mieux aller directement au fichier ini qui se trouve par ici:
C:\Users\(votre session)\AppData\Roaming\simplugins\PanelManagerPRO\SimpluginsFSUIPC.ini
En éditant ce fichier on va trouver (toujours pour notre exemple), la section suivante:
- Code: Tout sélectionner
[EngOilTempPress]
OPRE0 = ushort,08BA,{0} * 55 / 16384
OTEM0 = short, 66c0,{0} * 140 / 16384
OPRE1 = ushort,0952,{0} * 55 / 16384
OTEM1 = short,0950,{0} * 140 / 16384
OPRE2 = ushort,09EA,{0} * 55 / 16384
OTEM2 = short,09E8,{0} * 140 / 16384
OPRE3 = ushort,0A82,{0} * 55 / 16384
OTEM3 = short,0A80,{0} * 140 / 16384
FPR0 = int,08F8,{0} / 144
FPR1 = int,0990,{0} / 144
FPR2 = int,0A28,{0} / 144
FPR3 = int,0AC0,{0} / 144
Les valeurs qui nous intéressent:
OPRE0 et
OTEM0 (pression et température moteur 1)
ushort et
short : variables stockées sur 2 octets (donc on devra utiliser des offsets de 2 octets dans notre script LUA)
(*). D'après la doc, la correspondance serait WriteSW pour short et WriteUW pour unsigned short.
08BA,
66C0 : les offsets que l'on remplacera par les notres.
{0} * 55 / 16384 : conversion des données (à voir avec la doc FSUIPC sur le format des offsets et selon ce que sort la LVar (pas forcément les mêmes unités?)
Je suppose que {0} représente la valeur lue dans l'offset.
Un petit tableau pour ne pas se tromper:
0x66C8 1 ushort WriteUW
Oil_press0x66C9 2
0x66CA 1 short WriteSW
Oil_temp0x66CB 2
0x66CC 1 Prochain offset libre
On se retrouve après modification de la section du SimpluginsFSUIPC.ini:
- Code: Tout sélectionner
[EngOilTempPress]
OPRE0 = ushort,66C8,{0} * 55 / 16384
OTEM0 = short,66CA,{0} * 140 / 16384
OPRE1 = ushort,0952,{0} * 55 / 16384
OTEM1 = short,0950,{0} * 140 / 16384
OPRE2 = ushort,09EA,{0} * 55 / 16384
OTEM2 = short,09E8,{0} * 140 / 16384
OPRE3 = ushort,0A82,{0} * 55 / 16384
OTEM3 = short,0A80,{0} * 140 / 16384
FPR0 = int,08F8,{0} / 144
FPR1 = int,0990,{0} / 144
FPR2 = int,0A28,{0} / 144
FPR3 = int,0AC0,{0} / 144
Et le script LUA correspondant:
- Code: Tout sélectionner
while 1 do
-- LECTURE DES LVARS
oil_press = ipc.readLvar("L:NEEDLE_OIL_PRESS")
oil_temp = ipc.readLvar("L:NEEDLE_OIL_TEMP")
-- LECTURE DES OFFSETS
-- ECRITURE DANS DES OFFSETS LIBRES
ipc.writeUW(0X66C8, oil_press)
ipc.writeSW(0X66CA, oil_temp)
-- TEMPS D'ATTENTE (RAFRAICHISSEMENT AVANT NOUVELLE BOUCLE)
ipc.sleep(100)
end
NB: j'ai testé vite fait avec le DA20, ça fonctionne sur le principe mais la conversion des valeurs n'est pas correcte. Je n'ai pas été plus loin, est-ce que ce sont les bonnes LVars, dans quelle unité, etc...
L'inconvénient c'est qu'il n'existe qu'un fichier ini... Donc pour chaque avion utilisé il faudra faire un fichier SimpluginsFSUIPC.ini différent et le remplacer avant le vol. Pas pratique mais pas non plus insurmontable.
(*) Je ne suis pas sur que l'on doive obligatoirement utiliser le même format de données (après tout on peut modifier le type dans l'ini), mais de ce que j'ai vu dans mon test avec les RPM du Cub, j'ai du utiliser le même format pour que ça fonctionne (FLOAT).
Olivier.