#1 [↑][↓]  31-10-2014 22:07:03

Oliver77
Elève Pilote
Date d'inscription: 16-03-2014
Renommée :   

[FSX] Script LUA, Saitek et FSUIPC

Bonsoir à tous !

Je crois que j'ai un petit souci de compréhension (ou d'interprétation) avec les scripts LUA que je découvre. L'objectif : Faire fonctionner mon Saitek Multi Pane fraîchement acquis d'occasion avec le C172 A2A...

A2A exploite des L:var pour ses avions, et il faut donc piloter FSUIPC (version enregistré 4.937) via ces L:var.

Pour y parvenir, J'ai d'abord un fichier macro "a2a_c172.mcro", présent dans le dossier Modules de Fsx. Il est incomplet, et me sert pour de simples tests :

[MACROS]
1=L:ControlsLock=TOGGLE
2=L:vis_WheelChocks=TOGGLE
3=L:vis_WingLeft_TieDown=TOGGLE
4=L:vis_WingRight_TieDown=TOGGLE
5=L:vis_Tail_TieDown=TOGGLE
6=L:kma26SelectorKnob_pos=SET
7=L:COM1_TRANSMIT_SELECT=TOGGLE
8=L:COM2_TRANSMIT_SELECT=TOGGLE
9=L:kma26Com1Switch=TOGGLE
10=L:kma26Com2Switch=TOGGLE
11=L:PedestalLightKnob=SET
12=L:PanelLightKnob=SET
13=L:GlareshieldLightKnob=SET
14=L:RadioLightKnob=SET
15=L:Battery1Switch=SET
16=L:Eng1_GeneratorSwitch=SET
17=L:Avionics_Master_Set=SET

Ce ficher macro est bien déclaré dans le fsuipc4.ini :

[MacroFiles]
1=a2a_c172

J'ai ensuite un fichier HidSwitch.lua destiné à "écouter" les actions sur le switch panel. si j'actionne un des boutons du switch, l'offset 0x3360 est ms à jour en conséquence :

-- Based on HIDDemo.lua from Peter Dowson
-- Adjusted for Saitek panels by Pierre Baillargeon, Kama2004 on Avsim

-- Polling rate in number of polls per second
Pollrate = 25

-- opening HID device Saitek Switch panel
Vendor = 0x06A3
Product = 0x0D67
Device = 0
Report = 0
dev, rd, wrf, wr, init = com.openhid(Vendor, Product, Device, Report)

-- These are the tables of values we need

buttons = {}
PrevData = ""
prevbuttons = { 0 }

-- The Polling routine is caled on a time event, set at the end
------------------------------------------------------------------------
function Poll(time)
  -- Use "readlast" so the values we use are the most up-to-date
  CurrentData, n, discards = com.readlast(dev, rd)
   
  -- Extract values we need
  if n ~= 0 then
        buttons[1] = com.GetHidButtons(dev, CurrentData)
        -- check for changes   
            if buttons[1] ~= prevbuttons[1] then
                prevbuttons[1] = buttons[1]
                -- Send to FSUIPC as a set of 32 virtual buttons
                -- i.e. DWORD offsets 335C onwards
                ipc.writeUD(0x3360, buttons[1])
            end
  end
end
------------------------------------------------------------------------

if init then
   -- Deal with initial values, if supplied (some joysticks don't)
   ipc.log("init seen!")
   Poll(0)
end

if Pollrate == 0 then
   -- Ouch. Mustn't divide by zero!
   Pollrate = 25
end

event.timer(1000/Pollrate, "Poll")  -- poll values 'Pollrate' times per second

Il est bien déclaré dans le fsuipc4.ini et est lancé automatiquement :

[LuaFiles]
1=ipcinit
2=HidMulti
3=HidRadio
4=HidSwitch
5=A2AC172_Switch

[Auto]
1=lua HIDRadio
2=lua HIDMulti
3=lua HIDSwitch
4=lua A2AC172_Switch

Et enfin, j'ai mon fichier A2AC172_Switch.lua (bien déclaré dans lefsuipc4.ini) :

-- Lecture de l'offset "switch panel"
pos = ipc.readUb(0x3360)

-- si la valeur est 1, alors le Master Bat est actionné

if pos == 1 then
    MasterBat = ipc.readLvar('Battery1Switch')
    if MasterBat == 0 then
        ipc.writeLvar('Battery1Switch', 0)
    else
        ipc.writeLvar('Battery1Switch', 1)
    end
end

Pourtant, jamais rien ne se passe !  roll

Si je déclare un bouton directement dansFSUIPC, avec une action sur le L:BatterySwitch, en press et en release, alors ça fonctionne parfaitement.

Ais-je fait une erreur en "comprenant" que sile fichierest correctement renseigné dansle FSUIC4.ini, il devenait alors une "macro" à part entière, en attente de fonctionnement ?

Ou est-ce que je dois passer obligatoirement par la création de bouton ?

Siun habitué des scripts LUA veut bien m'éclairer un peu ... MayDay ...  :oops:

Hors ligne

 

#2 [↑][↓]  01-11-2014 21:47:03

Pat_59
Copilote
Lieu: Sailly sur la lys près de LFQT
Date d'inscription: 11-05-2013
Renommée :   17 

Re: [FSX] Script LUA, Saitek et FSUIPC

Bonsoir,

Sans approfondir ce que tu recherches à faire.
Ça ne peut pas fonctionner. Ton dernier script (A2AC172_Switch.lua) ne contient pas de fonction. Il ne sera jamais appelé.

Il y a aussi une erreur de syntaxe dans ton instruction "ipc.readUb" qui doit être écrite "ipc.readUB", le langage LUA est très sensible à la casse.

Il te faut créer une fonction que l'on appellera "Master_Bat" par exemple comme suit:

function Master_Bat ()
-- Lecture de l'offset "switch panel"
pos = ipc.readUB(0x3360)

-- si la valeur est 1, alors le Master Bat est actionné

if pos == 1 then
    MasterBat = ipc.readLvar('Battery1Switch')
    if MasterBat == 0 then
        ipc.writeLvar('Battery1Switch', 0)
    else
        ipc.writeLvar('Battery1Switch', 1)
    end
end
end
event.offset("3360", "UB", "Master_Bat")

et surveiller l'offset 0x3360 avec l'instruction event.offset (toujours à la fin du script).

Quand la valeur de cet offset change, la fonction "Master_Bat" est appelée. Si la valeur de l'offset est égale à 1, le reste de la fonction s'exécute.

En partant de ce principe, tu pourras "étoffer" ta fonction avec la possibilité d'autres valeurs fournies par l'offset (0x3360). Inutile de faire d'autres scripts qui surveilleront également cet offset, l'idéal étant de limiter le nombre de "thread" (nombre de tâches tournant simultanément)

PS : Je ne vois pas trop l'utilité du fichier macro.

Dernière modification par Pat_59 (01-11-2014 22:34:00)


Amicalement  Patrickhttp://www.pilote-virtuel.com/img/members/8639/P3DV3.jpg
Configuration: Intel I7 3770k OC 4,4 GHz, CM Asrock Z77 Extrem 9
8Gb Gskill DDR3 2133, CG Nvidia 980 GTX TI 6Gb, Windows 8 64bits
P3D V3.3, X52 Pro, CH Product "Éclipse", TIR 5 etc....

Hors ligne

 

#3 [↑][↓]  01-11-2014 22:24:33

Oliver77
Elève Pilote
Date d'inscription: 16-03-2014
Renommée :   

Re: [FSX] Script LUA, Saitek et FSUIPC

Bonsoir Pat,

Merci pour ces précisions. Dans toutes les recherches effectuées, j'ai trouvé pas mal d'infos, et bien vu qu'il y avait des fonctions, mais sans trouver le mécanisme d'appel. Tu as répondu à cette interrogation.

Sauf erreur de ma part, la macro permet de regrouper un certain nombre d'action pour un seul bouton. Et de programmer toutes les actions utiles au C172 de A2A, qui utilise des L:Var non adressées directement par FSX.

Le point de départ de mes recherches, c'est de faire fonctionner le multipanel deSaitek avec le c172 de A2A.

Mais si tu estimes, par expérience, que je suis sur la mauvaise voie en procédant ainsi, je suis preneur de toute information qui me permettra de progresser et d'avancer dans ce très modeste (mais très nouveau et encore obscure pour  moi) projet ... Je ne pourrai pas tester tout cela avant dimanche soir ou lundi mais je ne manquerai pas de te dire ce qu'il en est !

Merci ;o)

Hors ligne

 

#4 [↑][↓]  01-11-2014 22:58:07

Pat_59
Copilote
Lieu: Sailly sur la lys près de LFQT
Date d'inscription: 11-05-2013
Renommée :   17 

Re: [FSX] Script LUA, Saitek et FSUIPC

Quand je parlais de macros, je pensais au fichier que tu avais fait (mcro) avec l'aide de FSUIPC.
Étant donné que tu pars sur de la programmation LUA, ces macros n'ont plus lieu d'être (parfois, elles sont quand même nécessaires si il n'y a pas de Lvar associées).
La programmation LUA permet quasiment de tout faire, il suffit d'un peu d'imagination, d'un peu de programmation (on progresse vite si on a déjà quelques notions) et de beaucoup de ténacité.
Pas de soucis, pour affecter plusieurs actions sur le même bouton et même en fonction d'autres paramètres.

Au plaisir de te lire,


Amicalement  Patrickhttp://www.pilote-virtuel.com/img/members/8639/P3DV3.jpg
Configuration: Intel I7 3770k OC 4,4 GHz, CM Asrock Z77 Extrem 9
8Gb Gskill DDR3 2133, CG Nvidia 980 GTX TI 6Gb, Windows 8 64bits
P3D V3.3, X52 Pro, CH Product "Éclipse", TIR 5 etc....

Hors ligne

 

#5 [↑][↓]  03-11-2014 16:52:07

dreambox62
Pilote confirmé
Lieu: Nord / Pas de Calais
Date d'inscription: 04-02-2013
Renommée :   

Re: [FSX] Script LUA, Saitek et FSUIPC

Message Effacé

Dernière modification par dreambox62 (12-05-2015 10:24:27)

Hors ligne

 

#6 [↑][↓]  03-11-2014 18:30:21

Oliver77
Elève Pilote
Date d'inscription: 16-03-2014
Renommée :   

Re: [FSX] Script LUA, Saitek et FSUIPC

Aprèsn  avoir fait des test dans tous les sens, je sais que mon switch panel cause bien à fsx, et que l'offset 0x3360 se met bien à jour via le HIDSwitch.lua .

En revanche, le script ci-dessous ne fait strictement rien ! :o(

testVar == ipc.readUW(0x9500) -- Lecture de l'offset dédié au switch panel
ipc.display('Test HID lua : '..testVar, 16384)


function Master_Bat()
    if testVar == 1 then -- si le bouton master bat est modifié
        ipc.display('Test HID lua : '..testVar, 16383)    -- on affiche l'état à l'écran
        MasterBat=ipc.readLvar('Battery1Switch') -- Lit l'état du bouton
        if MasterBat == 1 then
            ipc.writeLvar('L:Battery1Switch', 0) -- si il est sur On, on le passe à OFF
        else
            ipc.writeLvar('L:Battery1Switch', 1) -- Si il est sur OFF, onle passe à ON
        end
    end
end

event.offset('0x9500', 'UW', 'Master_Bat') -- "écoute" de l'offset

J'ai essayé pas mal de choses, de variantes, en vain ....

Hors ligne

 

#7 [↑][↓]  03-11-2014 20:08:39

ARCC
Copilote
Lieu: Loc Maria Plouzane (29)
Date d'inscription: 13-03-2008
Renommée :   

Re: [FSX] Script LUA, Saitek et FSUIPC

Mais dit moi !!!!

Je viens d'aller sur le forum de LINDA a partir de "support forum" dans l'accueil de Linda
Cela te renvoi vers le Forum sur Avsim et la je trouve que pour le C172 de A2A, un gentil simmer à réaliser le fichier "Action" pour ton coucou.

Téléchargement effectué (il faut surement être inscrit)
Une fois dezippé, je me retrouve avec les fichiers qui vont bien à placer dans Linda \aircraft\....
et dans Linda.cfg\ aircraft ....

Le tout developpé par;

Aircraft: A2A Cessna 172R
  Version: 1.0.2
     Date: Jan 2014
   Author: Artem Crum, Guenter Steiner

Merci à eux.

A+
Christian


Un ancien sous-marinier qui à pris de la hauteur.

Hors ligne

 

#8 [↑][↓]  03-11-2014 21:26:03

Pat_59
Copilote
Lieu: Sailly sur la lys près de LFQT
Date d'inscription: 11-05-2013
Renommée :   17 

Re: [FSX] Script LUA, Saitek et FSUIPC

Oliver77 a écrit:

Aprèsn  avoir fait des test dans tous les sens, je sais que mon switch panel cause bien à fsx, et que l'offset 0x3360 se met bien à jour via le HIDSwitch.lua .

En revanche, le script ci-dessous ne fait strictement rien ! :o(

testVar == ipc.readUW(0x9500) -- Lecture de l'offset dédié au switch panel
ipc.display('Test HID lua : '..testVar, 16384)


function Master_Bat()
    if testVar == 1 then -- si le bouton master bat est modifié
        ipc.display('Test HID lua : '..testVar, 16383)    -- on affiche l'état à l'écran
        MasterBat=ipc.readLvar('Battery1Switch') -- Lit l'état du bouton
        if MasterBat == 1 then
            ipc.writeLvar('L:Battery1Switch', 0) -- si il est sur On, on le passe à OFF
        else
            ipc.writeLvar('L:Battery1Switch', 1) -- Si il est sur OFF, onle passe à ON
        end
    end
end

event.offset('0x9500', 'UW', 'Master_Bat') -- "écoute" de l'offset

J'ai essayé pas mal de choses, de variantes, en vain ....

Ta variable  "testVar" n'est lue qu'une seule fois au démarrage du script (et il y a une erreur de syntaxe le "==" n'est utilisé qu'en cas  de comparaison suite à un "if" par exemple). Seule la fonction Mater_Bat est appelée si l'offset change de valeur pas la totalité du script.
Si tu avais recopié l'exemple de fonction que je t'avais donné plus haut, tu aurais remarqué que j'avais intégré la variable "pos" qui est devenue "testVar" directement dans la fonction.
Tu dois donc intégrer "testVar = ipc.readUW(0x9500)" dans la fonction "Master_Bat"  directement en dessous de la déclaration "function Master_Bat ()".
Comme tu utilises la notation hexadécimale (0x9500), les guillemets dans l'instruction event.offset concernant l'offset ne sont pas nécessaire (je ne suis pas sûr que cela soit source d'erreur).

PS: Hier nous en étions à l'offset 0x3360, pourquoi le 0x9500 aujourd'hui ?

Dernière modification par Pat_59 (03-11-2014 23:03:57)


Amicalement  Patrickhttp://www.pilote-virtuel.com/img/members/8639/P3DV3.jpg
Configuration: Intel I7 3770k OC 4,4 GHz, CM Asrock Z77 Extrem 9
8Gb Gskill DDR3 2133, CG Nvidia 980 GTX TI 6Gb, Windows 8 64bits
P3D V3.3, X52 Pro, CH Product "Éclipse", TIR 5 etc....

Hors ligne

 

#9 [↑][↓]  03-11-2014 21:56:56

Pat_59
Copilote
Lieu: Sailly sur la lys près de LFQT
Date d'inscription: 11-05-2013
Renommée :   17 

Re: [FSX] Script LUA, Saitek et FSUIPC

dreambox62 a écrit:

Ma contribution sur France VFR

Cordialement DREAMBOX

Bonsoir (cher voisin) Dreambox,

Je suis allé faire un tour sur le lien indiqué et il me semble que le membre "odrezet" n'est autre que notre ami oliver77 ici présent.
Si vous rencontrez des problèmes sur l'utilisation des offset, la plage 0x66C0 à 0x66FF est libre et même réservée pour ce genre d'utilisation. Aucun add-on n'y écrit quoique ce soit (du moins je n'en ai pas eu l'expérience).
Bonne continuation.


Amicalement  Patrickhttp://www.pilote-virtuel.com/img/members/8639/P3DV3.jpg
Configuration: Intel I7 3770k OC 4,4 GHz, CM Asrock Z77 Extrem 9
8Gb Gskill DDR3 2133, CG Nvidia 980 GTX TI 6Gb, Windows 8 64bits
P3D V3.3, X52 Pro, CH Product "Éclipse", TIR 5 etc....

Hors ligne

 

#10 [↑][↓]  04-11-2014 06:12:33

dreambox62
Pilote confirmé
Lieu: Nord / Pas de Calais
Date d'inscription: 04-02-2013
Renommée :   

Re: [FSX] Script LUA, Saitek et FSUIPC

Message Effacé

Dernière modification par dreambox62 (12-05-2015 10:24:53)

Hors ligne

 

#11 [↑][↓]  04-11-2014 06:56:46

Oliver77
Elève Pilote
Date d'inscription: 16-03-2014
Renommée :   

Re: [FSX] Script LUA, Saitek et FSUIPC

@ Philippe et Pat :

Futurs voisins ... D'ici quelques mois je serai Nordiste également ... Bah oui, c'est bien moi sur les deux forums ! Je ne me souviens même plus pourquoi mon pseudo ici est différent ? Je devais être mal luné ... laugh

Pat : J'ai changé d'offset car j'avais des soucis avec le module AccuFeel de A2A. Vu que ça fonctionnait parfaitement avant tous ces tests, j'ai fait le tour des modifications éventuelles et hormis mes essais et bidouillages FSUIPC/SAITEK, il n'y avait rien. Après le changement d'offset, tout est revenu à la normale. J'essaierai de tester les plages d'Offset plus "conventionnelles" pour FSUIPC.

Quant à "testVar = ipc.readUW(0x9500)" je ferai le test ce soir.

Philippe : Je suis pourtant un habitué des recherches et de la dépatouille ... D'ordinaire je retombe toujours sur mes pattes, même si c'est parfois long et compliqué ... Mais là ... La sensation d'être une poule qi vient de trouver un couteau est assez désagréable ! angryfire_b1_d_gif FSUIPC et LUA me semblent bien obscurs alors que je suis certain que ça n'est pas si compliqué ... Je dois prendre "eulbiniou" par le mauvais bout ...

Merci en tout cas pour votre aide. Et votre patience ! laugh

Hors ligne

 

#12 [↑][↓]  04-11-2014 07:04:08

Oliver77
Elève Pilote
Date d'inscription: 16-03-2014
Renommée :   

Re: [FSX] Script LUA, Saitek et FSUIPC

@ Christian :

Merci pour l'info. J'avais déjà vu et testé. Si ma mémoire est bonne, le multipanel n'était pas très bien géré. Notamment au niveau de l'affichage... Mais c'est vrai que Linda est un outil vraiment chouette !

Du coup, j'ai cherché à creuser un peu, pour comprendre (ou tout du moins, tenter) le fonctionnement de FSUIPC et des LUA, pour voir si il était possible de piloter ces modules SAITEK sans LINDA ou SPAD. En gros, avoir simplement un FSUPC (certes enregistré) et placer les bons fichiers LUA pour que tout soit interfacé avec FSX.

C'est vrai que cela revient un peu à réinventer la roue; mais le but principal c'est de bien comprendre la mécanique de l'ensemble ...

Hors ligne

 

#13 [↑][↓]  04-11-2014 09:48:45

Pat_59
Copilote
Lieu: Sailly sur la lys près de LFQT
Date d'inscription: 11-05-2013
Renommée :   17 

Re: [FSX] Script LUA, Saitek et FSUIPC

Pour te faire gagner un peu de temps, ton script LUA tel qu'il devrait se présenter.

function Master_Bat()
    testVar = ipc.readUW(0x9500) -- Lecture de l'offset dédié au switch panel
    ipc.display("Test HID lua : "..testVar,16383)
    if testVar == 1 then -- si le bouton master bat est modifié
        ipc.display('Test HID lua : '..testVar, 16383)    -- on affiche l'état à l'écran
        MasterBat=ipc.readLvar('Battery1Switch') -- Lit l'état du bouton
        if MasterBat == 1 then
            ipc.writeLvar('L:Battery1Switch', 0) -- si il est sur On, on le passe à OFF
        else
            ipc.writeLvar('L:Battery1Switch', 1) -- Si il est sur OFF, onle passe à ON
        end
    end
end

event.offset(0x9500, 'UW', 'Master_Bat') -- "écoute" de l'offset

Tu utilises l'instruction ipc.display pour visualiser des informations à l'écran (d'ailleurs avec un paramètre de 16383 qui correspond au temps d'affichage de la fenêtre en seconde, tu dois bien avoir le temps de la voir wink ) mais tu peux aussi utiliser l'instruction ipc.log (même syntaxe mais sans le paramètre temps, ex: ipc.log("Test HID lua : "..testVar) ).

L'information apparaitra dans la fenêtre Console de Linda (raccourci touche F1) et sera enregistrée dans le fichier FSUIPC4.log. L'avantage étant que les informations restent, ce qui permet de suivre l'évolution des paramètres d'un script (facilitant le "débogage") surtout quand il devient très complexe (mon dernier en date fait plus de 1200 lignes et utilise plus de 30 fonctions).

Dans le même ordre d'idée, Linda possède un éditeur LUA qui signale immédiatement toute erreur de syntaxe (ce que ne fait pas Notepad++) en indiquant le n° de ligne où ce situe l'erreur. Il n'indique malheureusement pas les erreurs de procédures, il faut bien travailler un peu, mais cela aide quand même.

Bonne continuation, je suis ce fil avec intérêt ici n'étant pas membre du forum F-VFR.


Amicalement  Patrickhttp://www.pilote-virtuel.com/img/members/8639/P3DV3.jpg
Configuration: Intel I7 3770k OC 4,4 GHz, CM Asrock Z77 Extrem 9
8Gb Gskill DDR3 2133, CG Nvidia 980 GTX TI 6Gb, Windows 8 64bits
P3D V3.3, X52 Pro, CH Product "Éclipse", TIR 5 etc....

Hors ligne

 

#14 [↑][↓]  04-11-2014 21:43:06

Oliver77
Elève Pilote
Date d'inscription: 16-03-2014
Renommée :   

Re: [FSX] Script LUA, Saitek et FSUIPC

Bon, j'ai fait chou-blanc ... Malgré ton script corrigé, il ne se passe absolument rien. Pas d'affichage,ett encore moins d'inscriptions dans le FSUIPC4.log ...castet

Je précise que le fichier lua en question est bien dans la section [LuaFiles]. J'ai même essayé de l'ajouter dans la section [auto] ... Je ferai d'autres tests demain avec LINDA ....

Dernière modification par Oliver77 (05-11-2014 06:52:26)

Hors ligne

 

#15 [↑][↓]  05-11-2014 09:23:29

Pat_59
Copilote
Lieu: Sailly sur la lys près de LFQT
Date d'inscription: 11-05-2013
Renommée :   17 

Re: [FSX] Script LUA, Saitek et FSUIPC

Les joies de la programmation! Si tout fonctionnait du premier coup ce serait moins intéressant.

Le script corrigé, tu l'as enregistré sous quel nom et à quel endroit? Le nom doit comporter l'extension .lua et le fichier doit être enregistré dans le répertoire Modules.
Ensuite le script doit être lancé. Soit en l'indiquant dans la section [Auto] (avec un A majuscule) du FSUIPC4.ini, soit en éditant le fichier ipcReady.lua en y ajoutant une ligne ipc.runlua(nom de ton fichier sans l'extension .lua, entre guillemets et entre parenthèses) ex : ipc.runlua("xxxx").

Si ça ne fonctionne toujours pas, la valeur de ton offset 0x9500 ne change pas. Il faut chercher pourquoi.

Linda, encore une fois, peut-être d'une grande aide dans ce cas.
Il y a une fenêtre "développeur" (Linda Tracer touche de raccourci CTRL F1) dans laquelle tu peux "monitorer" la valeur d'un offset (colonne du milieux) ou même d'y écrire une valeur ce qui te permettra de voir si ton script fonctionne.

Attention au format de tes données, dans tes premiers post tu utilisais le format UB (8 bits), tu es passé au format UW (16 bits). Si tu écris dans l'offset, assure toi d'utiliser le bon format.

Si tu le désires, on peut se prendre un rendez-vous via Skype. C'est plus facile d'expliquer certaines choses oralement que par écrit.

Dernière modification par Pat_59 (05-11-2014 10:44:04)


Amicalement  Patrickhttp://www.pilote-virtuel.com/img/members/8639/P3DV3.jpg
Configuration: Intel I7 3770k OC 4,4 GHz, CM Asrock Z77 Extrem 9
8Gb Gskill DDR3 2133, CG Nvidia 980 GTX TI 6Gb, Windows 8 64bits
P3D V3.3, X52 Pro, CH Product "Éclipse", TIR 5 etc....

Hors ligne

 

#16 [↑][↓]  05-11-2014 11:32:22

Oliver77
Elève Pilote
Date d'inscription: 16-03-2014
Renommée :   

Re: [FSX] Script LUA, Saitek et FSUIPC

- Le fichier lua en question s'appelle a2a.lua, et il est bien reconnu comme une extention LUA par Windows.
- Ce fichier se trouve dans le dossier Modules de FSX.
- Il est bien inscrit dans FSUIPC4.INI :

[LuaFiles]
1=HidMulti
2=HidRadio
3=HidSwitch
4=a2a

[Auto]
1=lua HIDRadio
2=lua HIDMulti
3=lua HIDSwitch
4=lua a2a

- Pour confirmer que J'écris bien dans l'offset au bon format (UW) :

function Poll(time)
  -- Use "readlast" so the values we use are the most up-to-date
  CurrentData, n, discards = com.readlast(dev, rd)
   
  -- Extract values we need
  if n ~= 0 then
        buttons[1] = com.GetHidButtons(dev, CurrentData)
        -- check for changes   
            if buttons[1] ~= prevbuttons[1] then
                prevbuttons[1] = buttons[1]
                -- Send to FSUIPC as a set of 32 virtual buttons
                -- i.e. DWORD offsets 335C onwards
                ipc.writeUW(0x9500, buttons[1])
               
            end
  end
end

Je ferai des tests complémentaires avec Linda ce soir.

Merci pour ta proposition de RDV Skype, c'est vraiment sympa ! J'essaie donc tout ça et si vraiment je n'arrive à rien (SIC) je solliciterai un peu de ton temps ...

Hors ligne

 

#17 [↑][↓]  05-11-2014 14:54:53

Pat_59
Copilote
Lieu: Sailly sur la lys près de LFQT
Date d'inscription: 11-05-2013
Renommée :   17 

Re: [FSX] Script LUA, Saitek et FSUIPC

Tout paraît correct, pourtant il y a un problème quelque part et il va falloir le trouver.

Il serait peut-être bon de "checker" aussi le HIDSwitch.lua, voir si l'offset 0x9500 est véritablement écrit avec la ou les valeurs attendues.

J'attends tes tests depuis la console Linda.


Amicalement  Patrickhttp://www.pilote-virtuel.com/img/members/8639/P3DV3.jpg
Configuration: Intel I7 3770k OC 4,4 GHz, CM Asrock Z77 Extrem 9
8Gb Gskill DDR3 2133, CG Nvidia 980 GTX TI 6Gb, Windows 8 64bits
P3D V3.3, X52 Pro, CH Product "Éclipse", TIR 5 etc....

Hors ligne

 

#18 [↑][↓]  05-11-2014 20:52:03

Oliver77
Elève Pilote
Date d'inscription: 16-03-2014
Renommée :   

Re: [FSX] Script LUA, Saitek et FSUIPC

bon, alors ...

Offset modifié pour entrer dans le standard FSUIPC : 0x66CE.

Action d'un bouton du switch pris en compte dans la console Linda :

LUA.2: Local: s = [O] Offset set: 0x66C0 type=UB format=DEC strlen=DEC val=8193

Il apparaît comme Ub, alors que mes deux scripts LUA sont en UW ...

Depuis Linda, dans la fenêtre ci-dessous, si je modifie la valeur de l'offset 0x66CE, celui-ci est  bien mis à jour dans FSX :

http://www.fsfiles.org/flightsimshotsv2/images/2014/11/05/yj6Mf.jpg

http://www.fsfiles.org/flightsimshotsv2/images/2014/11/05/dIh19.jpg

J'en déduis que le HIdswitch.lua fonctionne ...

Pourtant, le a2a.lua reste définitivement muet ...

Hors ligne

 

#19 [↑][↓]  05-11-2014 21:07:18

Pat_59
Copilote
Lieu: Sailly sur la lys près de LFQT
Date d'inscription: 11-05-2013
Renommée :   17 

Re: [FSX] Script LUA, Saitek et FSUIPC

Tu parles de 0x66CE et je vois 0x66C0.

Il faut accorder ses violons. Tu as modifié le a2a.lua en conséquence? (la valeur testVar et l'instruction event.offset).

Depuis FSUIPC, tu surveilles l'offset 0x66C0 en 32bits et tu écris des données en 16 bits (UW).

Édit: J'ai regardé le script original "HIDSwitch.lua", les données sont au format 32bits (UD), je pense que tu devrais garder ce format pour tes autres scripts. Si tu démarres de l'offset 0x66C0, la plage utilisée pour le format UD va jusqu'à l'offset 0x66C4 (4x 8bits) mais tu dois écrire et lire depuis 0x66C0. Je ne sais pas si c'est très clair.
D'autre part, il est impossible d'écrire une valeur décimale supérieur à 255 sur un seul octet (format UB) quand je parle de décimale je devrais dire en base 10 et il s'agit de nombre entier.
Il y a donc quelque chose qui ne va pas dans le log donné par la console.

J'aimerais revoir une copie de tes deux scripts (HIDSwitch et a2a), il y a sûrement une incompatibilité quelque part (format de données ou adresse).

Je ne te ferai pas de cours sur comment transformer des nombres en binaire et savoir comment les écrire sur des adresses mémoire (et les relire par la suite) mais c'est important à connaître quand on attaque la programmation. Un programme fait ce que tu lui demandes, encore faut-il s'assurer que ce qu'on lui demande est possible pour lui. Par exemple, si tu essayes d'écrire un nombre entier (positif, si il est négatif cela complique un peu les choses) supérieur à 255 sur un octet (8 bits), le programme ne t'indiquera pas d'erreur pourtant le résultat escompté ne sera pas là.
Ceci pour te dire et n'en prends pas ombrage, qu'il y a certaine base à connaître sur le fonctionnement binaire d'un programme quelqu'il soit (l'informatique n'est faite que de 1 et de 0); ensuite tout devient plus clair.

Ma proposition Skype tient toujours et la programmation est une sorte de virus (comme la simulation de vol): quand on y a goûté, on y revient forcément.

Dernière modification par Pat_59 (05-11-2014 22:23:56)


Amicalement  Patrickhttp://www.pilote-virtuel.com/img/members/8639/P3DV3.jpg
Configuration: Intel I7 3770k OC 4,4 GHz, CM Asrock Z77 Extrem 9
8Gb Gskill DDR3 2133, CG Nvidia 980 GTX TI 6Gb, Windows 8 64bits
P3D V3.3, X52 Pro, CH Product "Éclipse", TIR 5 etc....

Hors ligne

 

#20 [↑][↓]  05-11-2014 21:52:17

Oliver77
Elève Pilote
Date d'inscription: 16-03-2014
Renommée :   

Re: [FSX] Script LUA, Saitek et FSUIPC

Au temps pour moi !

c'est bien le 0x66C0 !!!

le a2a.lua :

function Master_Bat()
    testVar == ipc.readUD(0x66C0) -- Lecture de l'offset dédié au switch panel   
    ipc.display('Test HID A2A : '..testVar,15)
    ipc.log('Test HID A2A : '..testVar)
    -- if testVar == 1 then -- si le bouton master bat est modifié
        -- ipc.display('Test HID lua : '..testVar, 10)    -- on affiche l'état à l'écran
        -- ipc.log('Test HID lua testvar : '..testVar)
        -- MasterBat=ipc.readLvar('Battery1Switch') -- Lit l'état du bouton
        -- if MasterBat == 1 then
            -- ipc.writeLvar('L:Battery1Switch', 0) -- si il est sur On, on le passe à OFF
        -- else
            -- ipc.writeLvar('L:Battery1Switch', 1) -- Si il est sur OFF, onle passe à ON
        -- end
    -- end
end

event.offset(0x66C0, 'UD', 'Master_Bat') -- "écoute" de l'offset

J'ai rectifié le tout pour être en Ud/UW partout.

Mais si je modifie l'offset via Linda, rien ne bouge ... Je commence à craquer ... il va falloir que je revoie tout ça ...

Hors ligne

 

#21 [↑][↓]  05-11-2014 22:39:18

Pat_59
Copilote
Lieu: Sailly sur la lys près de LFQT
Date d'inscription: 11-05-2013
Renommée :   17 

Re: [FSX] Script LUA, Saitek et FSUIPC

Cela ne risque pas de fonctionner:

Tout d'abord, erreur de syntaxe (déjà évoqué), une variable s'initialise avec le signe = et non avec == (utilisé uniquement pour comparaison), en début de script. testVar= et non testVar==
Ensuite, toutes les autres lignes sont en commentaire mais je suppose que c'est pour cause de test.

Partons sur de bonnes bases.


Amicalement  Patrickhttp://www.pilote-virtuel.com/img/members/8639/P3DV3.jpg
Configuration: Intel I7 3770k OC 4,4 GHz, CM Asrock Z77 Extrem 9
8Gb Gskill DDR3 2133, CG Nvidia 980 GTX TI 6Gb, Windows 8 64bits
P3D V3.3, X52 Pro, CH Product "Éclipse", TIR 5 etc....

Hors ligne

 

#22 [↑][↓]  06-11-2014 06:38:53

dreambox62
Pilote confirmé
Lieu: Nord / Pas de Calais
Date d'inscription: 04-02-2013
Renommée :   

Re: [FSX] Script LUA, Saitek et FSUIPC

Message Effacé

Dernière modification par dreambox62 (12-05-2015 10:25:31)

Hors ligne

 

#23 [↑][↓]  06-11-2014 08:59:02

Oliver77
Elève Pilote
Date d'inscription: 16-03-2014
Renommée :   

Re: [FSX] Script LUA, Saitek et FSUIPC

@ Pat :

castet Pas taper ! "Smiley Honteux" ! .... Ce double "=" pourtant déjà signalé comme tu dis, et pourtant déjà corrigé ... Joie et bonheur du copier/coller ... La honte ! Quant aux lignes en commentaire, c'était effectivement à des fins de tests.

Et les tests sont concluants ! YEP ! Enfin ... J'admire ta patience !

@ Philippe : Effectivement, la valeur de mon offset n'a plus rien à voir avec 1; J'ai commencé quelques modifications brèves ce matin, je verrai ça ce soir.

tu compare testVar à une stricte égalité à 1 pour que ça fonctionne il te faut faire un masque avec un ET logique (and) sur la valeur 1

j'espère me faire comprendre

Là comme ça à brûle pourpoing, sans eulbiniou sous la main, je suis pas certain (en fait si, je suis sûr) de pas avoir tout compris. Il faudra que je regarde ça à tête reposée ce soir ...

De plus, Quand je bascule l'inter, la valeur est bien modifée (53181) par exemple. Mais rebasculer l'inter en off ne modifie pas la valeur. Je dois le rebasculer encore une fois (donc à ON) ... Est-ce l'effet de ma comparaison stricte ?

Au plaisir de vous lire !

Hors ligne

 

#24 [↑][↓]  06-11-2014 09:52:29

dreambox62
Pilote confirmé
Lieu: Nord / Pas de Calais
Date d'inscription: 04-02-2013
Renommée :   

Re: [FSX] Script LUA, Saitek et FSUIPC

Message Effacé

Dernière modification par dreambox62 (12-05-2015 10:25:48)

Hors ligne

 

#25 [↑][↓]  06-11-2014 17:37:06

Oliver77
Elève Pilote
Date d'inscription: 16-03-2014
Renommée :   

Re: [FSX] Script LUA, Saitek et FSUIPC

@ Pat :

PS : Je ne vois pas trop l'utilité du fichier macro.

J'avais trouvé l'info de ce fichier macro sur les forum de A2A. Mais l'info n'étant pas de la toute dernière fraicheur, j'avais mis ce fichier de côté suite à ton message. jusqu'à ce matin, son absence n'avait aucune incidence. Forcément, mes scripts ne fonctionnaient pas ...

mais depuis ce matin, ils fonctionnent enfin, et j'ai pu constater que mon interrupteur fonctionnait plutôt comme un switch ... Je me suis souvenu (si si ! comme quoi les recherches ça a du bon), que dans le fichier macro, on attribuait à un l:var une fonction "toggle" ou "set"  ...

J'ai donc remis en servie mon fichier macro de test et ... Bin mince alors ... ça fonctionne ... w00t Mettez-vous à ma place ! Après toutes ces heures à tester et à tourner en rond, je suis sous le choc ! laugh bonne nouvelle donc !

@ Philippe :

pour ta bascule inter en deux fois , c'est plutôt dans ton HIDswitch.lua que ça ce trouve

Voir ma réponse à Pat ci-dessus ... Cela fonctionne.

tu compare testVar à une stricte égalité à 1 pour que ça fonctionne il te faut faire un masque avec un ET logique (and) sur la valeur 1

Je vais voir ça de mon côté en attendant tes explications. Pour l'instant, les tests avec le script ci-dessous  sont concluants. Mais il ne s'agit que d'un seul switch sur le panel ... Je pense que ça va vite se corser ...

function Master_Bat()
    testVar = ipc.readUD(0x66C0) -- Lecture de l'offset dédié au switch panel   
    --ipc.display('Test HID A2A : '..testVar,15)
    ipc.log('Test HID A2A : '..testVar)
    if testVar == 532481 or testVar == 532480 then -- si le bouton master bat est modifié
        --ipc.display('Test HID lua : '..testVar, 10)    -- on affiche l'état à l'écran
        ipc.log('Test HID lua testvar : '..testVar)
        MasterBat=ipc.readLvar('Battery1Switch') -- Lit l'état du bouton
        --ipc.display('Test HID lua : '..MasterBat, 10)    -- on affiche l'état à l'écran
        ipc.log('Test HID lua testvar : '..MasterBat)
        if MasterBat == 1 then
            ipc.writeLvar('L:Battery1Switch', 0) -- si il est sur On, on le passe à OFF
        else
            ipc.writeLvar('L:Battery1Switch', 1) -- Si il est sur OFF, onle passe à ON
        end
    end
end

Hors ligne

 

Pied de page des forums

Maintenance informatique Lausanne