Fsuipc et Lua

FSUIPC / Emulateurs de claviers & souris / IOCP, etc...

Fsuipc et Lua

Messagede mi-k » Mar 17 Déc 2013 14:57

Bonjour à tous,
Comme beaucoup je me suis récemment lancé dans la construction d'un cockpit de Cessna Mustang sur la base de l'add-on de F1( un moyen de mêler ma formation de pilote de ligne et mon métier d'informaticien (mais pas programmeur, je suis administrateur réseaux sur gros systèmes).
Etant au tout début je coince sur les Lua, à savoir comprendre comment cela fonctionne et surtout comment utiliser les scripts via Fsuipc. Une fois que j'aurai sortie cette situation je pourrai avancer nonbleu
Donc voila ce que j'ai fait jusque là, je suis sûr qu'avec le niveau de ressource du forum je vais débloquer ma situation.

Je suis partis d'un test sur un bouton n'ayant rien d'autre qu'une Lvar pour l'actionner (si je ne compte pas sur Key2mouse bien sûr). Le bouton en question est le Push du double rotary du G1000 servant à basculer la gestion de la fréquence NAV du PFD.
La Lvar est celle-ci "L:G1000NavPushPFD". Testée au travers de LINDA tout fonctionne, le rectangle bleu entourant la fréquence bascule bien du Nav1 au Nav2. L'étape suivante était d'intégrer cette Lvar dans un Script Lua afin de pouvoir piloter l'action au travers d'une action KeyPress de Fsuipc (l'étape finale sera de l'actionner via les iocard et sioc).
Donc voici le script que j'ai écris pour le test (inspiré du Script "F1MustangSwCtl.lua" livré avec le "Lua_Plugins").
Dans l'addon le Push est un toggle qui bascule le cadre bleu de Nav1 à Nav2 peu importe la position initiale.
Code: Tout sélectionner
-- F1MustangJL.lua
-- initialization
ipc.writeLvar("L:G1000NavPushPFD",0)  --place le curseur sur le nav1
-- clear
function clearflag(var)
   ipc.writeUW(0x0D6C, var)
   ipc.writeSTR(0x0D70, "LuaClear:F1MustangJL")
end
--
while 1 do
   if ipc.testflag(0) then
      clearflag(0)
      if (ipc.readLvar("L:G1000NavPushPFD" == 0)) then
         ipc.writeLvar("L:G1000NavPushPFD", 1)
      else
         ipc.writeLvar("L:G1000NavPushPFD", 0)
      end
   end
   --
   ipc.sleep(50)
end

Vous vous en doutez ce code ne fonctionne pas, il n'a pas d'erreur et il est bien lu dans FSX (j'ai pris soin d'oublier une parenthèse afin de créer une erreur de script et d'avoir la remonté dans les logs et valider qu'il était bien lu par l'action KeyPress).
Dernière étape, j'ai associé ce script à un KeyPress (ctrl+Z) associé à Lua F1MustangJL choisie dans la liste déroulante d'Fscuipc avec comme paramètre 0, résultat rien.
J'ai aussi essayé avec LuaToggle, même constat. J'ai pas essayé les autres car je ne connait pas leur destination.
Voila, j'en peux plus je comprend vraiment pas comment ça fonctionne alors si quelqu'un m'offre un petit coup de pouce je prend.
Par la même occasion s'il existe un moyen de récupérer la position du cadre bleu, car je vais en avoir besoin par la suite pour les modifications de fréquence qui dépendent de cette position pour agir sur le Nav1 ou le Nav2.
merci affiche
mi-k
 
Messages: 2
Inscription: 10/12/13

Re: Fsuipc et Lua

Messagede stevelep » Mer 18 Déc 2013 01:43

Salut,

Regarde bien ce post: viewtopic.php?f=89&t=3709&p=45272#p45272

On y détaille l'utilisation des L:Vars à travers les programmes LUA, les Macros et FSUIPC.
Notamment l'activation des programmes LUA en les assignant à une touche clavier.

BOB
Avatar de l’utilisateur
stevelep
Administrateur du site
 
Messages: 2075
Inscription: 27/03/09
Localisation: LSGN Neuchâtel, Suisse

Re: Fsuipc et Lua

Messagede mi-k » Mer 18 Déc 2013 02:05

Merci Bob je vais bien regarder de près pour la suite.
En attendant j'ai pas mal bossé dessus et j'ai fini par trouver le code. Le voici pour les intéressés.
Ce code permet après assignation des KeyPress dans Fsuipc de faire fonctionner complètement le double rotary push du G1000 PFD avec le bouton de bascule Nav (toute la partie gauche du PFD).
Code: Tout sélectionner
-- F1MustangJL.lua
-- LUA Script V 1.0
-- List of parameters
-- PFD
-- 1 NavPushPFD
-- 2 NavFlipPFD
-- 3 ComFlipPFD
-- 4 NAV_WHOLE_INC
-- 5 NAV_WHOLE_DEC
-- 6 NAV_FRACT_INC
-- 7 NAV_FRACT_DEC

-- 1 NavPushPFD
if ipcPARAM == 1 then
   LVarSet = "L:G1000NavPushPFD"
   if ipc.readLvar(LVarSet) == 0 then
      val = 1
   else val = 0
   end
   ipc.writeLvar(LVarSet,val)
end
-- 2 NavFlipPFD
if ipcPARAM == 2 then
   LVarSet = "L:G1000NavFlipPFD"
   if ipc.readLvar(LVarSet) == 0 then
      val = 1
   else val = 0
   end
   ipc.writeLvar(LVarSet,val)
end
-- 3 ComFlipPFD
if ipcPARAM == 3 then
   LVarSet = "L:G1000ComFlipPFD"
   if ipc.readLvar(LVarSet) == 0 then
      val = 1
   else val = 0
   end
   ipc.writeLvar(LVarSet,val)
end
-- 4 NAV_WHOLE_INC
if ipcPARAM == 4 then
   if ipc.readLvar("L:G1000NavPushPFD") == 1 then
      ipc.control(65641)
   else ipc.control(65645)
   end
end
-- 5 NAV_WHOLE_DEC
if ipcPARAM == 5 then
   if ipc.readLvar("L:G1000NavPushPFD") == 1 then
      ipc.control(65640)
   else ipc.control(65644)
   end
end
-- 6 NAV_FRACT_INC
if ipcPARAM == 6 then
   if ipc.readLvar("L:G1000NavPushPFD") == 1 then
      ipc.control(65643)
   else ipc.control(65647)
   end
end
-- 7 NAV_FRACT_DEC
if ipcPARAM == 7 then
   if ipc.readLvar("L:G1000NavPushPFD") == 1 then
      ipc.control(65642)
   else ipc.control(65646)
   end
end
mi-k
 
Messages: 2
Inscription: 10/12/13


Retourner vers Liaisons entreFS et les autres logiciels





Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités