#76 [↑][↓] 14-11-2014 17:12:21

Oliver77
Membre
Inscription : 16-03-2014
Renommée :   

Re : [FSX] Script LUA, Saitek et FSUIPC

@ Pat :

Mon RadioPanel.lua ne pouvait pas fonctionner, et pour cause ! Les valeurs testées étaient erronées ... castet

Je m'étais basé sur un document déjà cité ici, et trouvé sur le forum de Pete. Du coup, un utilisant les logs de fsX, plus la méthode de la calculatrice ( ... merci ! ...) j'ai pu faire un too des valeurs à scanner :

Bouton        Valeur        Bit

Commandes  du haut       
Com1        129            0+7        2^0 + 2^7 = 1 + 129 = 129
Com2        130            1+7        2^1 + 2^7 =    2 + 128 = 130
Na1            132            2+7        2^2 + 2^7 =    4 + 128 = 132
Nav2                136            3+7        2^3 + 2^7 =    8 + 128 = 136
Adf            144            4+7        2^4 + 2^7 = 16 + 128 = 144
Dme            160            5+7        2^5 + 2^7 = 32 + 128 = 160
XPDR                192            6+7        2^6 + 2^7 = 64 + 128 = 192
Outer ho            524417        1+7+19    2^1 + 2^7 + 2^19 = 1 + 128 + 524288 = 524417
Outer aho       262273        1+7+18    2^1 + 2^7 + 2^18 = 1 + 128 + 262144 = 262273
Inner ho            65665        1+7+16    2^1 + 2^7 + 2^16 = 1 + 128 + 65536 = 65665
Inner aho            131201        1+7+17    2^1 + 2^7 + 2^17 = 1 + 128 + 131072 = 131201
StdBy        16576        6+7+14    2^6 + 2^7 + 2^14 = 64 + 128 + 16384 = 16576

Commandes du bas
Com1        129            0+7        2^0 + 2^7 = 1 + 128 = 129
Com2         257            0+8        2^0 + 2^8 = 1 + 256 = 257
Na1            513            0+9        2^0 + 2^9 = 1 + 512 = 513
Nav2                1025                0+10        2^0 + 2^10 = 1 + 1024 = 1025
Adf            2049                0+11            2^0 + 2^11 = 1 + 2048 = 2049
Dme            4097                0+12     2^0 + 2^12 = 1 + 4096 = 4097
XPDR                8193                0+13     2^0 + 2^13 = 1 + 8192  = 8193
Outer ho        4194433               0+7+22    2^0 + 2^7 + 2^22 = 1 + 128 + 4194304 = 4194433
Outuer aho    8388737        0+7+23    2^0 + 2^7 + 2^23 = 1 + 128 + 8388608 = 8388737
Inner ho        2097281        0+7+21    2^0 + 2^7 + 2^21 = 1 + 128 + 2097152 = 2097281
Inner aho       1048705        0+7+20    2^0 + 2^7 + 2^20 = 1 + 128 + 1048576 = 1048705
StdBy        32897        1+7+15    2^1 + 2^7 + 2^15 = 2 + 128 + 32768 = 32898

Il y a deux valeurs qui ne coîncident pas, C'est le Stand-by du bas ...

En revanche, dans la console de linda (et dans le log FSX), les valeurs sont correctes si je "descends" de com1 à xpdr. Mais si je "remonte" de xpdr à com1, un décalage se crée.

Par exemple si je suis sur COM2, c'est NAV1 qui s'affiche. Et quand je reviens en COM1, c'est l'affichage du knob du haut qui s'affiche ...

Mon script RadioPanel.lua :

[Spoiler]

Dernière modification par Oliver77 (14-11-2014 17:14:39)

Hors ligne

#77 [↑][↓] 14-11-2014 17:17:43

Oliver77
Membre
Inscription : 16-03-2014
Renommée :   

Re : [FSX] Script LUA, Saitek et FSUIPC

@ Pat :

Tu m'en vois très heureux car sans matériel pour pouvoir tester (malgré la proposition de Phillipe), j'en étais resté aux conjectures.

C'est agaçant !!! Même sans le matériel tu y arrives ... solv_gif ...
Moi je l'ai sous la main et je rame pour allumer trois pauvres leds ! merlot

Dernière modification par Oliver77 (14-11-2014 17:21:46)

Hors ligne

#78 [↑][↓] 14-11-2014 19:55:31

Pat_59
Membre
Lieu : Sailly sur la lys près de LFQT
Inscription : 11-05-2013
Renommée :   17 

Re : [FSX] Script LUA, Saitek et FSUIPC

Oliver77 a écrit :

@ Pat :

Tu m'en vois très heureux car sans matériel pour pouvoir tester (malgré la proposition de Phillipe), j'en étais resté aux conjectures.

C'est agaçant !!! Même sans le matériel tu y arrives ... solv_gif ...
Moi je l'ai sous la main et je rame pour allumer trois pauvres leds ! merlot

Pendant que je t'ai sous la main pour effectuer les tests, peux-tu me dire si tu allumes les Led en rouge et vert à la fois (valeur 63 pour le deuxième octet) celles-ci changent-elles réellement de couleur?  (Peut-être en ambre).

En partant de ce principe, je pense qu'on peut gérer ton BIP panel directement en LUA. C'est pas totalement gagné et il faudra sûrement plusieurs tests mais c'est fort intéressant.

Concernant ton RadioPanel.lua, j'ai besoin de connaître la façon dont le HIDradio.lua stocke les valeurs renvoyées (pourquoi ne pas prendre l'offset 0x66C4).
Pour le moment, je ne vois pas trop d'incohérence (quoique) mais il faut que je me fasse une idée de comment sont gérés les switchs. Je demanderai sans doute d'autre précision (à moins que Philippe ne me prête un Radio Panel laugh ).

Bonne continuation.


Amicalement  Patrick[img align=D]http://www.pilote-virtuel.com/img/members/8639/P3DV3.jpg[/img]
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

#79 [↑][↓] 15-11-2014 10:46:12

Pat_59
Membre
Lieu : Sailly sur la lys près de LFQT
Inscription : 11-05-2013
Renommée :   17 

Re : [FSX] Script LUA, Saitek et FSUIPC

Bonjour Olivier,

Il y a un problème avec ton script. Tu compares plusieurs bits en même temps.
Par exemple dans cette ligne : StdBy        32897        1+7+15    2^1 + 2^7 + 2^15 = 2 + 128 + 32768 = 32898
le bit 1 est à 1 (le bouton haut est sur com2), le bit 7 est à 1 (le bouton bas est sur com1) et le bit 15 est à 1 (appui sur le StandBy du bas.
Suivant la position des boutons, tu n'auras jamais le même résultat.

Le bon tableau est le suivant :

Bouton        Valeur            Bit

Commandes  du haut       
Com1            1        0           
Com2            2        1
Nav1                4        2           
Nav2                8        3   
Adf                 16        4
Dme               32        5
XPDR             64        6   
Outer ho        524288        19
Outer aho      262144        18
Inner ho        65536          16
Inner aho      131072         17
StdBy            16384        14

Commandes du bas
Com1        128        7       
Com2        256        8         
Nav1                512        9           
Nav2                1024        10               
Adf                2048        11           
Dme                4096        12           
XPDR        8192        13               
Outer ho         4194304        22       
Outuer aho     8388608        23   
Inner ho         2097152        21       
Inner aho         1048576        20       
StdBy        32768        15

Edit : Le copier-coller a supprimer la mise en colonne (dommage).

J'ai modifié ton script, fais des essais et dis-moi quoi. On va s'amuser quand il faudra mettre des fonctions derrière tout cela.

[Spoiler]

Dernière modification par Pat_59 (15-11-2014 10:50:12)


Amicalement  Patrick[img align=D]http://www.pilote-virtuel.com/img/members/8639/P3DV3.jpg[/img]
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

#80 [↑][↓] 15-11-2014 12:20:09

Oliver77
Membre
Inscription : 16-03-2014
Renommée :   

Re : [FSX] Script LUA, Saitek et FSUIPC

Bonjour Patrick,

Pendant que je t'ai sous la main pour effectuer les tests, peux-tu me dire si tu allumes les Led en rouge et vert à la fois (valeur 63 pour le deuxième octet) celles-ci changent-elles réellement de couleur?  (Peut-être en ambre).

Je viens de faire le test. La couleur dominante est le vert, et un semblant de rouge (ambre) très faible ...
Précision complémentaire : Les leds s'allument les temps d'une boucle. La commande en elle même ne fonctionne pas comme un interrupteur ON/OFF

Je teste le reste cet après midi.

Amitiés, et bon week-end.

Hors ligne

#81 [↑][↓] 15-11-2014 13:32:30

Pat_59
Membre
Lieu : Sailly sur la lys près de LFQT
Inscription : 11-05-2013
Renommée :   17 

Re : [FSX] Script LUA, Saitek et FSUIPC

Les leds s'allument les temps d'une boucle. La commande en elle même ne fonctionne pas comme un interrupteur ON/OFF

Tu veux dire qu'il faut sans arrêt boucler sur l'instruction com.writefeature (dev, s, wrf) pour que les diodes restent allumées?
C'est assez génant parce que, tant que le programme boucle il ne fait pas autre chose.

J'ai modifié ton script de test des Led pour voir si cela confirme tes dires. Veux-tu essayer le mien?

Sans faire de boucle, les led rouges devraient s'allumer 10s puis les vertes également 10s pour enfin s'éteindre.

test = 0
dev = ipc.get("dev")
wrf = ipc.get("wrf")
ipc.sleep(1000)

if test == 0 then
ipc.display('red',10)
s = string.char(0,56)
com.writefeature (dev, s, wrf)
ipc.sleep(10000)
test = test+1
end

if test == 1 then
ipc.display('green',10)
s = string.char(0,7)
com.writefeature (dev, s, wrf)
ipc.sleep(10000)
test = test+1   
end

if test == 2 then
ipc.display('Off',10)
s = string.char(0,0)
com.writefeature (dev, s, wrf)
ipc.sleep(1000)
end


Amicalement  Patrick[img align=D]http://www.pilote-virtuel.com/img/members/8639/P3DV3.jpg[/img]
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

#82 [↑][↓] 15-11-2014 16:07:55

Oliver77
Membre
Inscription : 16-03-2014
Renommée :   

Re : [FSX] Script LUA, Saitek et FSUIPC

Patrick,

J'ai testé ton script concernant les leds. Résultat :

Quand RED s'affiche, elles flashent rouge puis séteignent.
Quant GREEN s'affiche, elles flashent vert puis s'éteignent
OFF s'affiche, tout est déjà éteint.

Quant à ton script RadioPanel.lua ... Il fonctionne parfaitement. Du coup, si j'ai bien compris la conversion de la valeur en bit grâce à ta méthode, j'avoue ne pas saisir ce qui te permet de déterminer que dans le cas ou 2 bits sont modifiés pour un bouton, lequel des deux concerne l'action en cours ?

Erratum : Les boutons de sélection de fréquences ne fonctionnent pas à tous les coups. Cela dépend de la position du sélecteur (Com1, com2 ...)

Edit : a l'aide de ton script, et avec le code concernant les leds, j'ai pu afficher des valeurs pour COM1.

Ce code :

function TLS_COM1()
    testVar = ipc.readUD(0x3358)
    if logic.And(testVar,1) ~= 0 then
        ipc.display('com1_haut',10)
        devradio = ipc.get("devradio")
        wrfradio = ipc.get("wrfradio")
        s=string.char(0,242,240,208,240,240,241,241,209,241,241,242,242,210,242,242,243,243,211,243,243,0,0)
        com.writefeature (devradio, s, wrfradio)
        ipc.log('com1_haut')
    end
end

Donne ceci :

[img align=c]http://www.fsfiles.org/flightsimshotsv2/images/2014/11/15/CoM2l.jpg[/img]

Dernière modification par Oliver77 (15-11-2014 19:19:15)

Hors ligne

#83 [↑][↓] 15-11-2014 22:36:02

Pat_59
Membre
Lieu : Sailly sur la lys près de LFQT
Inscription : 11-05-2013
Renommée :   17 

Re : [FSX] Script LUA, Saitek et FSUIPC

Bonsoir Olivier,

Concernant les Led du switch panel, tu avais donc raison. Je suis malgré tout surpris. Est-ce qu'avec le logiciel fourni, ces diodes ne peuvent rester allumées? Si non, j'en vois pas l'intérêt.
Si, avec le driver Saitek, c'est possible de les laisser allumer, on a sans doute raté quelque chose. Si c'est le cas, cela doit se passer au niveau du premier caractère envoyé (dans notre cas le 0) et il faudra tester d'autres possibilités.

Pour le RadioPanel.lua, je t'en parlerai demain mais je t'avais prévenu que cela se compliquerait.

En attendant, tes premiers essais d'affichage sont plutôt bons. As-tu essayé d'afficher une fréquence réelle sur un des afficheurs (ex : 122.05 en active et 122.25 en stand-by  sur Com1 sur l'afficheur du haut)?

Je pensais attaquer les affichages une fois que les boutons rotatifs auraient été programmés.

Nous ne sommes pas "sortis de l'auberge" mais c'est là que ça devient intéressant.


Amicalement  Patrick[img align=D]http://www.pilote-virtuel.com/img/members/8639/P3DV3.jpg[/img]
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

#84 [↑][↓] 15-11-2014 23:13:35

Oliver77
Membre
Inscription : 16-03-2014
Renommée :   

Re : [FSX] Script LUA, Saitek et FSUIPC

Bonsoir Patrick,

Le rouge de la honte me monte aux joues ! Au cours de mes essais sur les LEDS, je me suis demandé si FSX n'écrasait pas mon paramétrage, alors que je fais tous mes tests avec mon C172 à train fixe ... argh ! Si.

Au premier vol chargé avec le beech baron par défaut, les trois leds vertes s'allument et restent allumées ...

En attendant, tes premiers essais d'affichage sont plutôt bons. As-tu essayé d'afficher une fréquence réelle sur un des afficheurs (ex : 122.05 en active et 122.25 en stand-by  sur Com1 sur l'afficheur du haut)?

Oui j'affiche ces fréquences avec ces deux lignes de code :

s=string.char(0,240,240,208,240,240,241,241,209,241,241,242,242,210,242,242,243,243,211,243,243,0,0)
com.writefeature (devradio, s, wrfradio)

Explications des valeurs :

Code           Display
0-9          0-9
10-15      <blank>
This repeats in modulo 16 until a character code of 207.

208-217        0.-9. (decimal dot set)
218-223        .
224-239        -
240-248        0-9
250-255        <blank>

En revanche, Via le bouton du ACT/STBY, je ne parviens à les intervertir ...

C'est clair qu'on n'est pas sortis de l'auberge, et que je vais ramer encore quelques heures. Maisc'est franchement passionant ...

Encore, merci. Amitiés.

Hors ligne

#85 [↑][↓] 16-11-2014 11:02:25

Pat_59
Membre
Lieu : Sailly sur la lys près de LFQT
Inscription : 11-05-2013
Renommée :   17 

Re : [FSX] Script LUA, Saitek et FSUIPC

Bonjour Olivier,

Rassure-moi, quand tu fais tes tests, tu n'as aucun driver chargé ni Saitek ni Spad.

Je reviens vers toi dans la soirée.


Amicalement  Patrick[img align=D]http://www.pilote-virtuel.com/img/members/8639/P3DV3.jpg[/img]
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

#86 [↑][↓] 16-11-2014 11:23:19

Oliver77
Membre
Inscription : 16-03-2014
Renommée :   

Re : [FSX] Script LUA, Saitek et FSUIPC

laugh=8

Non non, je te rassure ! Les drivers Saïtek ont été virés sur le champ et SPAD est inactif ! Je sais que je suis un newbee de base, mais quand même !!! laugh

Ceci dit, tu as raison, on ne sait jamais ... Dans un grand moment de fatigue ...Ou le nez dans le guidon ...

Passe un bon dimanche, et passe quand tu peux !

Hors ligne

#87 [↑][↓] 16-11-2014 18:30:03

Oliver77
Membre
Inscription : 16-03-2014
Renommée :   

Re : [FSX] Script LUA, Saitek et FSUIPC

une bonne partie de la journée à grenouiller sur le web pour un résultat décevant.

Objectif ? Lire la fréquence COM1 de FSX pour l'afficher sur le Radio Panel.

La lecture :

com1_frq = ipc.readUW(0x034E)

Me donne une valeur Décimale.  Alors je la convertis grâce à la fonction ci-dessous (pas de moi ...)

function DEC_HEX(IN)
    local B,K,OUT,I,D=16,"0123456789ABCDEF","",0
    while IN>0 do
        I=I+1
        IN,D=math.floor(IN/B),math.mod(IN,B)+1
        OUT=string.sub(K,D,D)..OUT
    end
    return OUT
end

Du coup j'exécute la commande :

test = DEC_HEX(com1_frq)

J'obtiens dans mon exemple, 3425. Ce qui est cohérent, puisque le premier chiffre est implicitement 1.
Donc la fréquence que j'obtiens ainsi est 134,25 qui est bien celle affichée sur le com1 de FSX.

là où je sèche complètement, c'est comment injecter ces valeurs dans cette ligne de commande, représentées ici par v1,v2,v3,v4 :

s=string.char(0,241,v1,v2,v3,v4,241,241,209,241,241,242,242,210,242,242,243,243,211,243,243,0,0)

car quoi que je fassed, j'obtien un message d'erreur :

[E] *** LUA Error: ...\Microsoft Flight Simulator X\Modules\RadioPanel.lua:134: bad argument #3 to 'char' (number expected, got nil)

Très naîvement, j'ai testé ce code, où test est la valeur extraite (3425). Il va de soit qu'en plus de faire de très nombreuses et à mon avis superflues lignes de code, la valeur v1 en l'état est refusée dans le string.char ...

if string.sub(test, 1) == 0 then
                v1 = 240
            elseif string.sub(test, 1) == 1 then
                v1 = 241
            elseif string.sub(test, 1) == 2 then
                v1 = 242
            elseif string.sub(test, 1) == 3 then
                v1 = 243
            elseif string.sub(test, 1) == 4 then
                v1 = 244
            elseif string.sub(test, 1) == 5 then
                v1 = 245
            elseif string.sub(test, 1) == 6 then
                v1 = 246
            elseif string.sub(test, 1) == 7 then
                v1 = 247
            elseif string.sub(test, 1) == 8 then
                v1 = 248+0
            elseif string.sub(test, 1) == 9 then
                v1 = 249
            end

Tout ça pour dire que j'y travaille ... c'est pas brillant, mais je creuse ...
Pour aujourd'hui je me mets en stand-by ... je n'y vois plus clair, et toutes ces infos lues aujourd'hui se mélangent lamentablement !

Amitiés.

Dernière modification par Oliver77 (16-11-2014 18:30:29)

Hors ligne

#88 [↑][↓] 16-11-2014 21:46:45

Pat_59
Membre
Lieu : Sailly sur la lys près de LFQT
Inscription : 11-05-2013
Renommée :   17 

Re : [FSX] Script LUA, Saitek et FSUIPC

Bonsoir,

Ta boucle de test pour v1 est fausse quand tu fais string.sub(test,1) le résultat (si test = 1234) est 1234. Pour isoler le premier chiffre il faut écrire string.sub(test,1,1), string.sub(test,2,2) pour le deuxième etc...

On pourrait alors écrire v = tonumber(string.sub(test,1,1)) puis
v1= 240 + v
Ou encore sur une seule ligne: v1 = 240 + tonumber(string.sub(test,1,1))

L'instruction tonumber permet de transformer une chaîne (string) en nombre pour pouvoir faire des opérations arithmétiques. Quand on utilise une instruction "string", le résultat est toujours sous forme de chaîne. Dans notre exemple, si le résultat de string.sub(test,1,1) est 1 que l'on place dans la variable v par exemple.
Si on pose if v == 1, le résultat sera "False". À l'inverse si on pose if v == "1" donne True . Il faut donc remettre la variable sous forme numérique en utilisant l'instruction "tonumber". L'inverse peut-être également fait avec l'instruction "tostring".

Ta valeur v1 sera alors un nombre et non une chaîne considérée comme un ou des caractères.

En procédant de la sorte, tu initialises tes variables v1, v2, v3 et v4 en 4 lignes de programme (on peut faire encore mieux, pas dans ce cas-ci toutefois, en utilisant des tables ou tableaux).

Ton message d'erreur indique que le programme attend un nombre pour v1 mais qu'il obtient "nil" (valeur vide ou non définie). Si tu utilisais ta boucle de test qui était fausse, il était normal que v1=nil.

Il faudrait que je vois l'ensemble du code.

PS : Utilise les ipc.log quand tu n'es pas sûr du résultat. Si tu avais mis un ipc.log (string.sub(test,1)) avant de lancer ta boucle, tu aurais tout de suite remarqué que ça ne pouvait pas fonctionner.

Dernière modification par Pat_59 (17-11-2014 00:08:03)


Amicalement  Patrick[img align=D]http://www.pilote-virtuel.com/img/members/8639/P3DV3.jpg[/img]
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

#89 [↑][↓] 17-11-2014 10:08:28

Oliver77
Membre
Inscription : 16-03-2014
Renommée :   

Re : [FSX] Script LUA, Saitek et FSUIPC

Bonjour Patrick,

Merci pour tes explications. Bon, finalement, je n'étais pas si loin du but ! ça me rassure un peu...

Mes deux bourdes :

- string.sub(test, 1) au lieu de string.sub(test, 1, 1) ... Lecture inattentive de ma part. Et le pire c'est que d'ordinaire, je mets des ipc.display, des ipc.log, ou des MsgBox dans d'autres cas ... Pourquoi ne l'ais-je pas fait hier ? Mystère !

- J'avais déjà utilisé tonumber() dans mon code, mais sans succès. Par exemple, je faisais :

tonumber(v1) au lieu de tonumber(string.sub(test, 1, 1)). Je faisais une conversion après ... Mais pour moi cela revenait au même ...

Voici donc un code qui fonctionne parfaitement (en plus d'être considérablement simplifié !)

[Spoiler]

Je suis en train de programmer ça pour l'initialisation du module Saïtek quand le switch "Avionic" est basculé sur OFF. Essais ce soir ....

Hors ligne

#90 [↑][↓] 17-11-2014 15:04:55

Pat_59
Membre
Lieu : Sailly sur la lys près de LFQT
Inscription : 11-05-2013
Renommée :   17 

Re : [FSX] Script LUA, Saitek et FSUIPC

Bonjour Olivier,

Bravo ! Après on pourra passer à l'étape suivante. Affichage des valeurs en fonction de la position du switch rotatif (Com1, Com2, etc...).
Peut-être un peu plus compliqué (encore que), modifier les fréquences en stand-by via les rotatifs et les envoyées dans FSX.

A te lire.


Amicalement  Patrick[img align=D]http://www.pilote-virtuel.com/img/members/8639/P3DV3.jpg[/img]
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

#91 [↑][↓] 18-11-2014 07:47:04

Oliver77
Membre
Inscription : 16-03-2014
Renommée :   

Re : [FSX] Script LUA, Saitek et FSUIPC

Bonjour Patrick,

J'ai perdu beaucoup de temps à essayer de mettre place une boucle pour traiter les infos à envoyer au radiopanel après avoir mis en route l'avionique.

En gros ce que je voulais faire :

- Création d'un array avec la valeur des offsets désirés (par ex com1, com1stb, com2 et com2 stb)
- une boucle : Pour chaque valeur dans l'array, traitement de celui-ci et génération des variables.
- écriture des variables dans le module Saïtek

Tout cela dans le but de minimiser le code et les répétitions.

Voici ce que j'avais imaginé, et qui bien entendu ne fonctionne pas. Mais le principe y est :

ComArray = {ipc.readUW(0x034E), ipc.readUW(0x034E), ipc.readUW(0x3118),ipc.readUW(0x311C)}

for i, v in ipairs(ComArray) do
    ipc.log(i,v)
    -- Conversion en HEX
       setval = DEC_HEX(v)
    -- Extraction du 1er chiffre et conversion "saïtek"
    ipc.log(string.sub(setval, 1, 1))
    v[i] = 240 + tonumber(string.sub(setval, 1, 1))
    -- Extraction du 2eme chiffre et conversion "saïtek"        
    ipc.log(string.sub(setval, 2, 2))
    v[i] = 208 + tonumber(string.sub(setval, 2, 2))
    -- Extraction du 3eme chiffre et conversion "saïtek"
    ipc.log(string.sub(setval, 3, 3))
    v[i] = 240 + tonumber(string.sub(setval, 3, 3))
    -- Extraction du 4eme chiffre et conversion "saïtek"
    ipc.log(string.sub(setval, 4, 4))
    v[i] = 240 + tonumber(string.sub(com1, 4, 4))   
end

-- Définition de la variable s : Valeurs à écrire dans le module Saïtek
s=string.char(0,241,v1,v2,v3,v4,241,v5,v6,v7,v8,241,v9,v10,v11,v12,241,v11,v12,v13,v14,v15,0,0)
       
-- Envoi des valeurs dans le module Saïtek
com.writefeature (devradio, s, wrfradio)
end

N'y arrivant pas, j'ai donc écrit ceci, qui fonctionne parfaitement :

[Spoiler]

Ce code me semble très lourd et répétitif, même s'il a le mérite d'être"simple". En le collant ici, je viens de tilter que je pourrais appeler la fonction avec des paramètres, comme ceci :

RadioInit(com1,com1stb)

Après réflexion, la boucle n'était peut-être pas forcément une très bonne idée pour la suite. Je vais tester ça ! (ainsi que le passage de la fréquence Stand-by à Active) ... Je suis ambitieux aujourd'hui ! wink

Il est aussi temps que je note précisément ce que je veux faire avec ce module Radio et les interactions que cela engendre avec FSX, pour ne pas partir dans tous les sens ...

Au plaisir de lire ton avis sur tout ça ...

PS : Je pensais t'avoir posé la question, mais je ne la retrouve pas : je reviens sur les valeurs retournées par le module. Qui sont l'addition de plusieurs bits. Moi j'étais parti sur la somme de ces bits, et toi tu en as sélectionné un. Comment détermines-tu, pour une valeur, le bit qui est réellement concerné par l'action ?

Dernière modification par Oliver77 (18-11-2014 07:55:57)

Hors ligne

#92 [↑][↓] 18-11-2014 08:58:46

dreambox62
Membre
Lieu : Nord / Pas de Calais
Inscription : 04-02-2013
Renommée :   

Re : [FSX] Script LUA, Saitek et FSUIPC

Message Effacé

Dernière modification par dreambox62 (12-05-2015 09:33:46)

Hors ligne

#93 [↑][↓] 18-11-2014 09:17:48

Oliver77
Membre
Inscription : 16-03-2014
Renommée :   

Re : [FSX] Script LUA, Saitek et FSUIPC

Bonjour Philippe,

J'espère que vous passez de bonnes vacances ...

Amitiés.

Hors ligne

#94 [↑][↓] 18-11-2014 10:12:20

Pat_59
Membre
Lieu : Sailly sur la lys près de LFQT
Inscription : 11-05-2013
Renommée :   17 

Re : [FSX] Script LUA, Saitek et FSUIPC

Bonjour Olivier,

PS : Je pensais t'avoir posé la question, mais je ne la retrouve pas : je reviens sur les valeurs retournées par le module. Qui sont l'addition de plusieurs bits. Moi j'étais parti sur la somme de ces bits, et toi tu en as sélectionné un. Comment détermines-tu, pour une valeur, le bit qui est réellement concerné par l'action ?

Pour ce faire, il faut mémoriser la précédente valeur de l'offset. Puis on fait la différence entre les deux (nouvelle valeur - ancienne valeur). La différence nous donnera le bit modifié, pour retrouver le bit en question j'utilise les logarithmes.

Exemple:
Dif = testval - precedent_testval

if Dif > 0 then
bitmodif = math.log(Dif)/math.log(2)
else
bitmodif = math.log(math.abs(Dif))/math.log(2) -- On ne peut pas faire d'opérations logarithmiques
end                                                                          sur des nombres négatifs

Si Dif est positif le bit est à 1 sinon le bit était à 1 et est revenu à 0.

Si Dif = 1024, bitmodif = 10 donc le bit n° 10 est passé sur 1.

Si Dif = -1024 bitmodif = 10, le bit n° 10 est revenu à 0


@ Philippe   Je te souhaite également d'excellentes vacances. A bientôt.

Dernière modification par Pat_59 (18-11-2014 10:16:20)


Amicalement  Patrick[img align=D]http://www.pilote-virtuel.com/img/members/8639/P3DV3.jpg[/img]
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

#95 [↑][↓] 18-11-2014 12:58:19

Pat_59
Membre
Lieu : Sailly sur la lys près de LFQT
Inscription : 11-05-2013
Renommée :   17 

Re : [FSX] Script LUA, Saitek et FSUIPC

Petites corrections (en rouge) apportées à ton script plus haut.
Tout fonctionne bien. Rajout d'une petite boucle pour contrôler les résultats.

function Radio_Init ()
    ComArray = {ipc.readUW(0x034E), ipc.readUW(0x0311A), ipc.readUW(0x3118),ipc.readUW(0x311C)}
    v = {}
    j = 0
    for i, w in ipairs(ComArray) do
    -- Conversion en HEX
       setval = DEC_HEX(w)
       ipc.log (setval)
    -- Extraction du 1er chiffre et conversion "saïtek"
    ipc.log(string.sub(setval, 1, 1))
    v[i+j] = 240 + tonumber(string.sub(setval, 1, 1))
    -- Extraction du 2eme chiffre et conversion "saïtek"
    ipc.log(string.sub(setval, 2, 2))
    v[i+1+j] = 208 + tonumber(string.sub(setval, 2, 2))
    -- Extraction du 3eme chiffre et conversion "saïtek"
    ipc.log(string.sub(setval, 3, 3))
    v[i+2+j] = 240 + tonumber(string.sub(setval, 3, 3))
    -- Extraction du 4eme chiffre et conversion "saïtek"
    ipc.log(string.sub(setval, 4, 4))
    v[i+3+j] = 240 + tonumber(string.sub(setval, 4, 4))
    j=j+3
end
for i = 1,16 do
    ipc.log ("v"..i.." = "..v[i])
end
end

Tiens, ma fonction convertisseur décimal --> hexadécimal :

function DEC_HEX(Value)
    HexVal = string.format("%X", Value) 
    HexVal = HexVal..""
    return (HexVal)
end

L'inverse (HEX -> DEC) s'obtient tout simblement comme ceci : Dec = tonumber(Hex,16).

Dernière modification par Pat_59 (18-11-2014 13:16:16)


Amicalement  Patrick[img align=D]http://www.pilote-virtuel.com/img/members/8639/P3DV3.jpg[/img]
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

#96 [↑][↓] 18-11-2014 14:16:41

Pat_59
Membre
Lieu : Sailly sur la lys près de LFQT
Inscription : 11-05-2013
Renommée :   17 

Re : [FSX] Script LUA, Saitek et FSUIPC

Édit au précédent post.

Je ne t'ai pas donné d'explications sur les corrections apportées. Les voici:

L'offset en rouge correspond au COM1 stby , tu avais mis deux fois le COM1.

Tu vas stocker tes résultats dans une table v et tu n'as pas initialisé cette table (v{})

Dans ta boucle tu utilisais v pour y mettre la valeur provenant de ComArray or tu utilises déjà v pour y mettre les résultats. J'ai donc modifié en utilisant w.

Ensuite tu n'incrémentais pas les valeurs de i. i ne pourra pas dépasser le nombre d'éléments placés dans la table ComArray (ici 4). Il faut donc ruser, le pourquoi de l'utilisation de "j" qui augmente "artificiellement" la valeur de i afin de construire une table "v" avec toutes les valeurs nécessaires.

Voilà, je pense que c'est tout. En tout cas, bravo, tu progresses à pas de géant.

Édit: l'instruction "ipc.log(i,v)" que tu avais dans ton script, ne fonctionnera pas (seul "i" sera affiché, il n'y aura pas d'erreur),

Il faut concaténer les infos vouliues. Exemple ( pour que cela soit clair, je nomme les variables): ipc.log("i:"..i.." v:"..v).

Dernière modification par Pat_59 (18-11-2014 16:50:29)


Amicalement  Patrick[img align=D]http://www.pilote-virtuel.com/img/members/8639/P3DV3.jpg[/img]
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

#97 [↑][↓] 19-11-2014 14:10:44

Oliver77
Membre
Inscription : 16-03-2014
Renommée :   

Re : [FSX] Script LUA, Saitek et FSUIPC

Bonjoour Patrick,

Merci pour le code corrigé et expliqué; C'est vraiment une aide très précieuse ...

Je n'ai rien pu faire hier faute de temps. De plus, j'ai pensé à quelques détails concernant mon approche de la gestion du Radio Panel :

En partant du principe que la ligne de code qui permet de configurer son affichage tient compte des 4 valeurs (2 Active / 2 stand-by) :

s=string.char(0,241,v1,v2,v3,v4,241,v5,v6,v7,v8,241,v9,v10,v11,v12,241,v11,v12,v13,v14,v15,0,0)

Donc, si à l'aide des bouton rotatifs du haut, je modifie la Com1 Stand-By, je dois avant tout lire les valeurs Com1 active, nav1 active et nav2 stand-by, pour pouvoir les réutiliser dans la fameuse ligne de commande, sans les modifier.

Cela implique que je dois savoir sur quelles position sont mes deux selecteurs (com1, com2, ...) pour pouvoir connaître le format des infos à passer. Il me faudrait donc initialiser deux variables globales indiquant l'état des deux sélecteurs.

A mettre en oeuvre avec ton code (après lecture plus pointue et compréhension !)

Amitiés.
Et encore merci pour le temps consacré.
Olivier.

Hors ligne

#98 [↑][↓] 19-11-2014 15:37:05

Pat_59
Membre
Lieu : Sailly sur la lys près de LFQT
Inscription : 11-05-2013
Renommée :   17 

Re : [FSX] Script LUA, Saitek et FSUIPC

Bonjour Olivier,

En effet, pour pouvoir envoyer la bonne séquence, il va falloir prendre en compte la position des sélecteurs de gauche, haut et bas.

Ton idée de ComArray m'a séduit mais il faudrait en définir plusieurs en fonction de ce que j'ai dit précédemment.
D'ailleurs qu'en est-il de l'affichage quand le sélecteur est en position DME ou en position XPDR?

Je ne comprends pas très bien la logique de Saitek. Il me semblait plus simple de mettre en haut les "1" (Com1, Nav1, Adf1,DME1) et les "2" en bas. Du coup, on se retrouve avec des fonctions dupliquées. On ne peut pas mettre deux fréquences actives sur le même appareil donc si les deux sélecteurs sont sur la même position (par exemple Com1), les deux lignes (haut et bas) doivent afficher les mêmes informations. Ainsi si l'on modifie l'une des deux, l'autre est également modifiée (à moins qu'il ne soit possible de mémoriser deux fréquences différentes en stand-by mais ce n'est pas la réalité).

En attendant, continuons sur la lancée.


Amicalement  Patrick[img align=D]http://www.pilote-virtuel.com/img/members/8639/P3DV3.jpg[/img]
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

#99 [↑][↓] 19-11-2014 16:05:11

Oliver77
Membre
Inscription : 16-03-2014
Renommée :   

Re : [FSX] Script LUA, Saitek et FSUIPC

Patrick,

Je te ferai un petit topo sur le DME (que je n'ai pas encore utilisé) et le XPDR.

Quant à la logique de Saïtek, peut-être est-ce en vue de cockpits bien "garnis" avec de nombreux modules radio, ce qui permet d'en dédier un aux COM, un aux NAV, etc... ?

Amtiés.

Hors ligne

#100 [↑][↓] 19-11-2014 16:08:26

Bobonhom
Membre
Lieu : Les Laurentides Québecoise
Inscription : 24-04-2012
Renommée :   125 
Site Web

Re : [FSX] Script LUA, Saitek et FSUIPC

Oliver77 a écrit :

Patrick,

Je te ferai un petit topo sur le DME (que je n'ai pas encore utilisé) et le XPDR.

Quant à la logique de Saïtek, peut-être est-ce en vue de cockpits bien "garnis" avec de nombreux modules radio, ce qui permet d'en dédier un aux COM, un aux NAV, etc... ?

Amtiés.

C'est d'ailleurs ce qu je fais avec mes trois modules radio.... Lâchez pas!


-Comm 1 et Nav 1 pour le premier
-Comm 2 et Nav 2 pour le deuxième
-ADF et Transpondeur pour le dernier...

Dernière modification par Bobonhom (19-11-2014 18:48:12)


79et5g.jpg

Hors ligne

Pied de page des forums