#1 Re : Compléments & Utilitaires » [P3D][FSX] demande aide pour script lua » 05-03-2021 19:31:41

Bonsoir kzw313

le LUA est un langage de script, je ne peux pas faire de tutoriel, il faut avoir des bases de programmation.
Tu trouveras plein d'infos sur internet si tu as envie d'apprendre.

Une fois cet apprentissage, il faut comprendre comment l'appliquer à FSX/P3D.
Mais je le répète, la base est déjà d'avoir des connaissances en programmation.

#3 Re : Compléments & Utilitaires » [P3D][FSX] demande aide pour script lua » 03-03-2021 18:41:23

ça veut dire que Majestic n'utilise pas le même format de fréquence pour COM et NAV. cepopossible_gif

j'ai tenté de deviner le format de NAV à partir de ton log car il n'est pas documenté dans leur fichier de variables.

Sans aucune certitude

[Spoiler]

#4 Re : Compléments & Utilitaires » [P3D][FSX] demande aide pour script lua » 02-03-2021 21:18:43

essaie ca, je n'ai pas testé et j'espère que je n'ai pas encore fait d'erreur de copier-coller.

si ca marche, tu reprendras mes explications, peut etre que tu comprendras mieux.

[Spoiler]

#5 Re : Compléments & Utilitaires » [P3D][FSX] demande aide pour script lua » 01-03-2021 23:02:18

regarde mon post #46, je te dis comment appeler la nouvelle fonction avec 2 paramètres:

Pour finir avec l'étape 1, partout ou tu appelles stby_freq_com1(NewFreq), il faut mettre à jour pour passer ce deuxième paramètre (note que j'en ai profité pour renommer la fonction puisqu'elle ne se limite plus à COM1):
- stby_freq(65058, NewFreq) si tu veux continuer à changer COM1 SBY
- ou stby_freq(65094, NewFreq) si tu veux tester si ca fonctionne avec COM2 SBY

Dans le post #5, j'explique comment obtenir le code de la variable Majestic à partir de son nom.
Donc oui, COM1= 65058.

Je n'ai pas vérifié pour COM2, tu as mentionné 65094, je t'ai cru sur parole. mad2_gif

#6 Re : Compléments & Utilitaires » [P3D][FSX] demande aide pour script lua » 01-03-2021 21:45:43

Ce que tu as fait (et je confirme que ca ne peut pas marcher):

function stby_freq_com1(65058, bcd_freq)
  local q400_freq= BCD_to_MJC8Q400(bcd_freq)
  MJCD8_Write(q400_freq, (65058)
end

et ce que je te demande et que je t'ai donné dans mon message précédent avec l'explication du pourquoi:

function stby_freq(variable, bcd_freq)
  local q400_freq= BCD_to_MJC8Q400(bcd_freq)
  MJCD8_Write(q400_freq, variable)
end

ps: et je t'ai aussi dit que j'avais renommé la fonction puisqu'on change son comportement.

#7 Re : Compléments & Utilitaires » [P3D][FSX] demande aide pour script lua » 01-03-2021 20:04:59

Hello kzw313

il faut y aller étape par étape.

La fonction MJCD8_Write(value, variable) prend 2 paramètres: la variable et la valeur que tu veux écrire.

La fonction stby_freq_com1 appelle MJCD8_Write mais ne prend qu'un seul paramètre (bcd_freq) qui est la valeur.

function stby_freq_com1(bcd_freq)
  local q400_freq= BCD_to_MJC8Q400(bcd_freq)
  MJCD8_Write(q400_freq, 65058)
end

Donc la fonction actuelle utilise une valeur pré-définie (65058) pour donner la variable à écrire à MJCD8_Write.

Tu cherches à étendre les possibilités de ton script pour écrire dans une autre variable (ex COM2).

Donc il faut modifier la fonction pour ajouter la "variable" en paramètre:
function stby_freq(variable, bcd_freq)
  local q400_freq= BCD_to_MJC8Q400(bcd_freq)
  MJCD8_Write(q400_freq, variable)
end

Pour finir avec l'étape 1, partout ou tu appelles stby_freq_com1(NewFreq), il faut mettre à jour pour passer ce deuxième paramètre (note que j'en ai profité pour renommer la fonction puisqu'elle ne se limite plus à COM1):
- stby_freq(65058, NewFreq) si tu veux continuer à changer COM1 SBY
- ou stby_freq(65094, NewFreq) si tu veux tester si ca fonctionne avec COM2 SBY

L'étape 2 consiste à passer la valeur 65058 ou 65094 via une nouvelle variable, ce qui permettra à ton script de passer de l'un à l'autre.

J'espère que ca t'aide et que tu comprends un minimum.

cordialement

#8 Re : Compléments & Utilitaires » [P3D][FSX] demande aide pour script lua » 28-02-2021 18:20:45

Regarde la fonction MJCD8_Write(value, variable), c'est celle ci qui écrit la fréquence dans la variable du Majestic.
Elle prend deux paramètres, la variable (pour l'instant 65058 qui correspond à EFISdata_->ARCDUs[0].stby_freq_com[0]) et la valeur (fréquence dans notre cas).

Donc si tu veux maintenant pouvoir écrire la fréquence dans une variable COM1 ou COM2, il faut aussi avoir un 2e paramètre dans stby_freq_com1(bcd_freq) --> par exemple stby_freq_com1(variable, bcd_freq)

à toi de modifier le code de cette fonction pour prendre en compte ce nouveau paramètre.

#9 Re : Compléments & Utilitaires » [P3D][FSX] demande aide pour script lua » 28-02-2021 15:49:13

Salut,

oui maintenant c'est à toi de travailler laugh

Etape 1:
Nous avons créé une fonction pour écrire dans la variable COM1 SBY du Q400: 65058
function stby_freq_com1(bcd_freq)
  local q400_freq= BCD_to_MJC8Q400(bcd_freq)
  MJCD8_Write(q400_freq, 65058)
end

Donc, il faudrait que tu ajoutes un 2e paramètre à cette fonction pour pouvoir donner une autre variable que COM1.
Dans un premier temps, ajoute ce 2e paramètre, utilise le à la place de 65058 et modifie tous les appels à la fonction pour passer ce 2e paramètre avec la valeur 65058.

Etape 2 (quand tu as fini avec succès l'étape 1):
Recherche la variable: freqloc
Elle est utilisée pour justement spécifier s'il faut écrire la fréquence dans COM1, COM2, NAV1 ou NAV2 dans les radios par défaut.
Il faut utiliser le même principe pour le Q400.
En début de sujet, j'ai expliqué comment trouver le code de la variable COM1 du Majestic (65058).
Il te faut donc trouver les codes pour COM2, puis NAV1/NAV2 si tu veux tout câbler.

Etape 3:
Il te suffit de créer une nouvelle variable "q400_freqloc" et de la mettre à jour en même temps que freqloc avec les codes que tu as trouvés à l'étape 2.
Ensuite tu remplaces la valeur 65058 par la variable "q400_freqloc" quand tu appelles ta fonction "stby_freq_com1" (que tu pourrais d'ailleurs renommer)

N'hésite pas à partager tes progrès.
Bonne chance ! mad2_gif=W

#10 Re : Compléments & Utilitaires » [P3D][FSX] demande aide pour script lua » 26-02-2021 20:45:04

En regardant à tête reposée ma fonction de conversion de format, je pense avoir trouvé l'erreur:
Remplace la fonction par celle ci (j'ai mis en gras ce que j'ai corrigé):

function BCD_to_MJC8Q400(bcd_freq)
  digit4= logic.Shr(bcd_freq, 12)

  digit3= logic.And(bcd_freq, 0x0F00)
  digit3= logic.Shr(digit3, 8)

  digit2= logic.And(bcd_freq, 0x00F0)
  digit2= logic.Shr(digit2, 4)

  digit1= logic.And(bcd_freq, 0x000F)

  local mjc8q400_freq= 10*digit1+100*digit2+1000*digit3+10000*digit4
  return mjc8q400_freq
end

#11 Re : Compléments & Utilitaires » [P3D][FSX] demande aide pour script lua » 25-02-2021 20:58:43

ok j'essaierai de lancer mon simu ce week-end, au moins la valeur de la fréquence n'est plus corrompue, je retrouve bien les fréquences que tu rentres.
Je dois merder qq part dans la conversion vers le format du Q400.

#12 Re : Compléments & Utilitaires » [P3D][FSX] demande aide pour script lua » 25-02-2021 18:26:30

Essaie ca, j'ai vu une erreur qui peut expliquer le comportement étrange

[Spoiler]

#13 Re : Compléments & Utilitaires » [P3D][FSX] demande aide pour script lua » 24-02-2021 23:40:58

bizarre
peux tu copier le script modifié stp ?
quelle est la fréquence que tu tapes au clavier ?
si je regarde uniquement la variable d'origine NewFreq, je vois 128.00, puis 3 fois 123.00 blink

#14 Re : Compléments & Utilitaires » [P3D][FSX] demande aide pour script lua » 24-02-2021 22:04:54

on avance.

Modifie la fonction comme suit:

function stby_freq_com1(NewFreq)
  local q400_freq= BCD_to_MJC8Q400(NewFreq)
  ipc.log("NewFreq (BCD)= " .. NewFreq)
  ipc.log("Q400Freq= " .. q400_freq)
  MJCD8_Write(q400_freq, 65058)
end

Lance ton simu, change tes fréquences comme décrit et ensuite, ouvre le répertoire "Modules" de ton simu (là ou tu as du mettre les scripts).

Il y a un fichier FSUIPCx.log (x étant la version de ton FSUIPC).
Tu devrais voir dedans les logs que j'ai rajoutés dans la fonction ci-dessus.
copie moi ces lignes et peut etre que je comprendrais ou est l'erreur.

#15 Re : Compléments & Utilitaires » [P3D][FSX] demande aide pour script lua » 24-02-2021 19:23:55

Je n'ai pas le plaisir de connaitre Linda, elle est jolie ? e_Clown

Tu mélanges deux choses différentes.

Avec linda, tu peux affecter des "fonctions" à des touches/boutons/etc.
Donc soit tu as 4 touches sur ton joystick de dispo et il faut écrire les 4 fonctions pour incrémenter/décrémenter les deux parties de la fréquence (entière et décimale), soit tu oublies et tu reviens à ton idée de départ d'utiliser NpCkeyData.

Les scripts NpCkeyData (de ce que j'ai vu rapidement) capturent les touches de ton clavier numérique pour rentrer une fréquence.
Je t'ai donné le code dans mon post précédent. En début de fichier, tu dois définir les deux fonctions dont tu as besoin:
- BCD_to_MJC8Q400
- MJCD8_Write

plus cette troisième qui appelle les deux précédentes:
function stby_freq_com1(NewFreq)
  local q400_freq= BCD_to_MJC8Q400(NewFreq)
  MJCD8_Write(q400_freq, 65058)
end

puis, dans le script, à chaque fois que tu vois l'instruction:
ipc.writeUW(freqloc, NewFreq)   -- update radio panel

tu changes comme suit:
ipc.writeUW(freqloc, NewFreq)   -- update radio panel
stby_freq_com1(NewFreq)

Dernier conseil:
Avant de modifier quoique ce soit, installe les scripts NpCkeyData  et vérifie que tu arrives à modifier la fréquence COM1 sur un avion de base. C'est la base de vérifier que tout fonctionne avant d'entreprendre des modifs.

#16 Re : Compléments & Utilitaires » [P3D][FSX] demande aide pour script lua » 23-02-2021 22:08:33

Tu ne réponds pas à ma question e_Clown
Je ne demande pas ou tu as mis ma fonction mais la fonction MJCD8_Write
Je soupçonne que tu as du trouver sur la toile un exemple utilisant cette fonction MJCD8_Write mais que tu ne l'as jamais définie.

Insère les deux fonctions suivantes en début de fichier comme suit:
--Al Klayton, 14Nov2013

function BCD_to_MJC8Q400(bcd_freq)
digit4= 10000*logic.Shr(bcd_freq, 12)

digit3= logic.And(bcd_freq, 0x0F00)
digit3= 1000*logic.Shr(bcd_freq, 8)

digit2= logic.And(NewFreq, 0x00F0)
digit2= 100*logic.Shr(NewFreq, 4)

digit1= 10*logic.And(NewFreq, 0x000F)

local mjc8q400_freq= digit1+digit2+digit3+digit4
return mjc8q400_freq
end

function MJCD8_Write(value, variable)
    ipc.writeLvar("MJC_VAR_WRITE_VALUE", value)
    ipc.writeLvar("MJC_VAR_WRITE_CODE", variable)
end

onoff = ipc.get("ONOFF")

PS: fais attention, j'ai vu que tu as copié plusieurs fois la fonction BCD_to_MJC8Q400 dans le script. Tu ne dois la déclarer qu'une seule, en début de fichier, tel que ci dessus

#17 Re : Compléments & Utilitaires » [P3D][FSX] demande aide pour script lua » 23-02-2021 20:34:32

Tu as modifié le script initial pour appeler cette fonction:
MJCD8_Write(q400_freq, 65058)

donc ou est cette fonction ?

#18 Re : Compléments & Utilitaires » [P3D][FSX] demande aide pour script lua » 23-02-2021 19:50:31

la fonction BCD_to_MJC8Q400 est faite pour convertir le format de fréquence, il ne faut pas l'appeler à partir d'une touche mais dans ton script.

Ou as tu mis la fonction MJCD8_Write ?
tu peux mettre la fonction BCD_to_MJC8Q400 dans le même fichier que MJCD8_Write

#19 Re : Compléments & Utilitaires » [P3D][FSX] demande aide pour script lua » 22-02-2021 18:23:16

w00t tu es ambitieux de te lancer dans une telle aventure e_Clown eusa_clap

je ne peux pas tester alors je ne te garantis rien, d'autant que le script est complexe malgré tout.

Tes changements ne fonctionnent pas parce que FSX (et donc ton script) utilise un format BCD pour encoder les fréquences.
Il faudrait réécrire toute la logique du script qui capture les touches numériques.

Je te propose une solution intermédiaire, on laisse la logique telle qu'elle est, et on convertit à la volée la fréquence au format BCD en décimal pour appeler la fonction du Majestic.

Sauf erreur de ma part, cette fonction devrait convertir le format BCD en format compatible avec le Q400:
function BCD_to_MJC8Q400(bcd_freq)
digit4= 10000*logic.Shr(bcd_freq, 12)

digit3= logic.And(bcd_freq, 0x0F00)
digit3= 1000*logic.Shr(bcd_freq, 8)

digit2= logic.And(NewFreq, 0x00F0)
digit2= 100*logic.Shr(NewFreq, 4)

digit1= 10*logic.And(NewFreq, 0x000F)

local mjc8q400_freq= digit1+digit2+digit3+digit4
return mjc8q400_freq
end


A chaque fois que tu vois une écriture de la fréquence sur la radio FSX: ipc.writeUW(freqloc, NewFreq)
tu appelles les deux fonctions suivantes (et tu conserves l'appel à ipc.writeUW...):
q400_freq= BCD_to_MJC8Q400(NewFreq)
MJCD8_Write(q400_freq, 65058)

je croise les doigts.... blink

#20 Re : Compléments & Utilitaires » [P3D][FSX] demande aide pour script lua » 21-02-2021 11:35:57

Hello

pas trop le temps alors j'espère que tu maitrises un peu le LUA mad2_gif

le bout de code dans ton script qui lit la fréquence COM1:
if acr == "COM_1"  then
               CurrFreq =  ipc.readUW(0x311A)                                               --get freq of active radio
     freqloc= 0x311A 

idéalement, il faudrait la remplacer avec la lecture de la variable COM1 du Majestic (ie MJC_Read)

Et déjà pour t'entrainer, le bout de code qui écrit la valeur COM1 dans la radio de base FSX:
NewFreq = logic.Or(DigitSpace, movPARAM+0x0900)                           --add on temp 3rd freq digit = 9
ipc.writeUW(freqloc, NewFreq)                                          -- update radio panel                                                   

Il faut remplacer le ipc.writeUW par l'appel à ta fonction: stby_freq_com1 (NewFreq)

PS: Il faut certainement convertir le format de NewFreq (format FSX) au format Majestic.
PS2: je te fais ca rapide car ton script est complexe et il gère toutes les fréquences COM1, COM2, NAV1, NAV2
mais si tu comprends la modif pour COM1, tu sauras l'adapter pour les autres fréquences

Bon dimanche

#21 Re : Compléments & Utilitaires » [P3D][FSX] demande aide pour script lua » 20-02-2021 20:32:42

oui c'est sur, c'est plus clair avec la vidéo.
Du coup, tu as toutes les infos que tu voulais ? le script LUA de la vidéo capture les touches du clavier pour rentrer diverses fréquences, donc il te faut l'adapter pour écrire la fréquence dans la bonne variable du Majestic.

Tu as déjà la fonction pour écrire la fréquence standby du COM1:

function stby_freq_com1 (freq)
MJCD8_Write(freq, 65058).
end

Tu n'as plus qu'à appeler cette fonction à partir de ton script pour commencer.
Il faudra certainement convertir le format de la fréquence COM. Ton script semble prendre tous les digits (1 3 5 . 7 7 5) alors que la variable Majestic ne prend que les 5 derniers digits sans le point de séparation.
Si tu as du mal, partage le bout de code, et on verra ce qu'on peut faire.

#22 Re : Compléments & Utilitaires » [P3D][FSX] demande aide pour script lua » 20-02-2021 18:56:54

Hello kzw123

Non, tu ne vas pas écrire une fonction par fréquence, tu ajoutes la fréquence en paramètre de ta fonction:

function stby_freq_com1 (freq)
MJCD8_Write(freq, 65058).
end

Et tu appelles ta fonction avec la fréquence voulue:
- pour 135.775 --> stby_freq_com1(35775)
- pour 124.800 --> stby_freq_com1(24800)
- etc

Ce qui veut dire que pour faire la boucle, il va falloir que tu lises d'abord la fréquence standby, tu la modifies selon ta guise et tu écris la nouvelle fréquence.

La lecture des variables majestic fonctionne de la même manière: freq= MJCD8_Read(65058).
(le paramètre du read étant le code de la variable Majestic)

#23 Re : Compléments & Utilitaires » [P3D][FSX] demande aide pour script lua » 19-02-2021 23:59:27

en effet, la question n'est pas claire.

La fonction LUA de kzw313 est correcte, pour programmer le majestic, il faut bien appeler MJCD8_Write ou MJCD8_Read.
Le code est donné quelque part pour ces deux fonctions LUA (je peux le retrouver si c'était la question).

Si la question est de comprendre l'appel à:
MJCD8_Write(35775, 65058)

Le premier paramètre est la fréquence: 35775 ==> (1) 35.775 wink

Le deuxième paramètre correspond à la variable interne EFISdata_->ARCDUs[0].stby_freq_com[0]
Pour obtenir le code qui correspond à cette variable, il faut utiliser l'utilitaire de Majestic: IntVarCRCGen.exe
Tu rentres le nom de la variable (EFISdata_->ARCDUs[0].stby_freq_com[0]), il te donne son code à utiliser comme deuxième paramètre: 65058.
MJCCRCGen.jpg

bon courage

#24 Re : Compléments & Utilitaires » [Résolu][FSX]Jauges carburant ATR » 17-06-2020 17:46:02

Boufogre a écrit :

Salut Armand,

Il me semble me souvenir d'un bug comme celui-là avec d'autres avions.

Charge le Cessna par défaut, change le sélecteur de carburant de LEFT vers BOTH, et recharge l'ATR.

Essaye de voir si ça marche.

moi je parie sur Boufogre, ca tient la route laugh eusa_clap

#25 Re : Compléments & Utilitaires » [Résolu][FSX]Jauges carburant ATR » 16-06-2020 21:14:30

Bizarre cette erreur "grossière" dans le panel.cfg mad2_gif
mais en toute logique, puisque les deux jauges sont dupliquées, elles devraient afficher la même valeur (celle du réservoir 1) et Armand observe que seul un réservoir se vide... et en plus, sur 3 addons différents wacko

Suis curieux d'avoir le verdict car c'est un truc de fou cette histoire. w00t

Pied de page des forums

Propulsé par FluxBB