Vous n'êtes pas identifié(e).
salut a tous
j'ai besoin d'aide,voila j’utilise un script lua npcv2.21.zip trouver sur avsim pour contrôler les instruments des avions par des commande vocales via VOICE ATTACK avec ce script en peut par exemple changer la fréquence COMs NAVs ADFs SQWK les valeur ALT HDG CRS IAS VS pour les avions par Default PMDG A2A même LE majestics dash8 " via le clavier" en attribut des touches clavier au différente commande puis en entre au clavier numérique les différentes valeur, pour l'Altitude en veut saisire 10000 pied sur le mcp en appui sur la touche affecter pour le changement de la valeur et puis en tape directement 10000 sur le clavier numérique et la valeur change la radio pareille pour NAV HDG etc
sauf que pour le Majestic pour les COMs NAVs ADFs SQWK impossible en cherchant jai trouver les valeur dans le fichier varlist.xlsx et a laide de IntVarCRCGen.exe
You have to use the XML interface for setting them. The variables are in the EFIS section.
EFISdata_->ARCDUs[0].stby_freq_com[0] Like: 35775 for 135.775
EFISdata_->ARCDUs[0].stby_freq_com[0] en entran ca dans IntVarCRCGen.exe = 65058
avec ce script la frequence com change 135.775
function stby_freq_com1 ()
MJCD8_Write(35775, 65058).
end
30775 = 135.775
si vous voulez je peut mettre les script lua mes comment ?
Dernière modification par kzw313 (20-02-2021 09:46:35)
Hors ligne
C'est quoi la question ?
PC: i9 9900K @5.2 Ghz - Gigabyte GEForce RTX 4080 OC 16 Go - Asus Z390 Pro Gaming - 32Go de RAM DDR4 3200Mhz
Portable: MSI Raider 18 HX - i9 14900HX RTX 4080 12Go 4K 18" display 240hz - 64Go DDR5 - 3To M2 SSD
Hors ligne
Alors un script LUA pour ce genre de chose, il faut assigner une valeur à une variable locale lue et écrite par l'avion en question via une fonction.
Ca va ressembler à ça dans ton exemple :
function COM_frequency ()
Lvar = "ARCDUs[0].stby_freq_com"
ipc.writeLvar(Lvar, 35775)
Dernière modification par ydelta (19-02-2021 21:40:46)
PC: i9 9900K @5.2 Ghz - Gigabyte GEForce RTX 4080 OC 16 Go - Asus Z390 Pro Gaming - 32Go de RAM DDR4 3200Mhz
Portable: MSI Raider 18 HX - i9 14900HX RTX 4080 12Go 4K 18" display 240hz - 64Go DDR5 - 3To M2 SSD
Hors ligne
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
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.
bon courage
Dernière modification par zigou (20-02-2021 00:06:13)
Hors ligne
Bonjour,
Je ne peux pas aider, désolé, mais je suis le sujet, et je voudrais savoir :
- que veut dire "aux expires" dans le titre ?
- c'est quoi la touche "Didier" mentionnée dans le premier post ?
Merci
En ligne
Bonjour,
Vu l'orthographe, je pencherais pour la touche "dédiée".
MSI B250M Mortar, I7-7700K, 16Go 2400MHz, MSI RTX 4060 Ti 8Go, be quiet! Dark Rock TF, SSD Samsung 850 EVO, DD WD 1To, Oculus rift
Hors ligne
Expires -> experts je pense :))
PC: i9 9900K @5.2 Ghz - Gigabyte GEForce RTX 4080 OC 16 Go - Asus Z390 Pro Gaming - 32Go de RAM DDR4 3200Mhz
Portable: MSI Raider 18 HX - i9 14900HX RTX 4080 12Go 4K 18" display 240hz - 64Go DDR5 - 3To M2 SSD
Hors ligne
Bien vu !
Bon au moins on apprend une nouvelle langue
MSI B250M Mortar, I7-7700K, 16Go 2400MHz, MSI RTX 4060 Ti 8Go, be quiet! Dark Rock TF, SSD Samsung 850 EVO, DD WD 1To, Oculus rift
Hors ligne
Merci Zigou
avec mon script
function stby_freq_com1 ()
MJCD8_Write(35775, 65058).
end
Je peut changer la fréquence du com1 afficher exemple 118.000 ----) a 135.775
De cette manière je devrais faire plusieurs script lua pour chaque fréquence
Pour le changement com1 en 136.775
function stby_freq_com1 ()
MJCD8_Write(36775, 65058).
end
Pour le changement com1 en 124.775
function stby_freq_com1 ()
MJCD8_Write(24775, 65058).
end
Pour le changement com1 en 118.775
function stby_freq_com1 ()
MJCD8_Write(18775, 65058).
end
Etc
Mai avec le script sur avsim en peut changer la fréquence via le pavé numérique
En entre directement la fréquence 118.000 a traver les touches
Touche : 1
Touche : 1
Touche : 8
Touche : . (point pavé numérique)
Touche : 0
Touche : 0
Touche : 0
D5turbi titre changer
Dernière modification par kzw313 (20-02-2021 12:20:47)
Hors ligne
Je ne comprends rien : "aux expires" veut dire "demande aide" ?
??????
Ah!!!! Je viens de comprendre : ce message était destiné "aux experts" ...
Bein fallait le trouver.
Bien vu ydelta
Dernière modification par Armand42 (20-02-2021 13:13:40)
En ligne
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)
Dernière modification par zigou (20-02-2021 18:58:30)
Hors ligne
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.
Hors ligne
NpCkeyData.lua
NpCsetCom.lua
--NpCsetCom 14Aug2013
-- Modified not to show frequencies on green bar
--Must enter first Com or Nav digit (a 1)
--Al Klayton, 1Oct2013
acr = ipc.get("ACTIVE_RADIO")
ipc.set("KEY_POS", 1)
onoff = ipc.get("ONOFF")
if (not(onoff == nil) and onoff == "OFF") then
return
end
if ipcPARAM == 1 then --setup for toggle code below
acr = "COM_2" --ipcPARAM =0 for toggle, =1 for COM_1 only, =2 for COM_2 only
else
if ipcPARAM == 2 then
acr = "COM_1"
end
end
if not(acr == nil) and acr == "COM_1" then
nacr = "COM_2" --do this code to setup for Com radio toggle
ipc.writeSTR(0x3380, nacr); --display delected radio on green bar
else
nacr = "COM_1" --do this code to setup for Com radio toggle
ipc.writeSTR(0x3380, nacr); --display delected radio on green bar
end
ipc.set("ACTIVE_RADIO", nacr);
ipc.writeSW(0x32FA, 3); --show active radio on green bar for 3 sec
Dernière modification par kzw313 (20-02-2021 22:48:40)
Hors ligne
Hello
pas trop le temps alors j'espère que tu maitrises un peu le LUA
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
Dernière modification par zigou (21-02-2021 11:38:31)
Hors ligne
Yo !
Complètement HS.
Comme tous les posts de PV que je lis deux fois par jour, celui-ci a toute mon admiration.
Aucun humour la dedans, juste que je suis ébahi devant tant de connaissance.
Et avec une pointe d'humour: En "lisant" ces données techniques (même traduite du Mandarin au Breton...)
j'en arrive à rire de mon inculture !
Bref, chapeau les gars, dans le même registre que bien des pointures que contient ce fofo.
Fin du HS; Pierrick.
Veuillez emprunter l’ascenseur, l'escalier est en panne...
Hors ligne
Hello
pas trop le temps alors j'espère que tu maitrises un peu le LUA
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= 0x311Aidé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 panelIl 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équencesBon dimanche
zigou bonjour
1: je ne maitrise pas du tout les script lua =V
ce que jai fait
if acr == "COM_1" then
CurrFreq = ipc.readUW(0x311A) --get freq of active radio
freqloc= 0x311A
changement
if acr == "COM_1" then
CurrFreq = MJC_Read(65094) --get freq of active radio
freqloc= 65094
ipc.writeUW(freqloc, NewFreq) -- update radio panel
changement
MJCD8_Write(freqloc, NewFreq) -- update radio panel
mais ça ne marche pas
Hors ligne
tu es ambitieux de te lancer dans une telle aventure
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....
Hors ligne
j'ai crée un fichier lua MJC8Q400.lua ou j'ai coller ce script
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
activer via la touche C
puis jai coller ces deux ligne dans le script NpCkeyData.lua comme ca
NewFreq = logic.Or(DigitSpace, movPARAM+0x0900) --add on temp 3rd freq digit = 9
ipc.writeUW(freqloc, NewFreq) -- update radio panel
q400_freq= BCD_to_MJC8Q400(NewFreq)
MJCD8_Write(q400_freq, 65058)
keypos=keypos+1
j active le 'script' la touche C puis je rentre la fréquence via le pave numérique ex:123.25 la jai un message (No Function Selected)
Dernière modification par kzw313 (23-02-2021 11:14:59)
Hors ligne
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
Hors ligne
salut zigou
tu veut que je mais la fonction la fonction BCD_to_MJC8Q400 dans le même fichier a la fin de ce même fichier ou avant ou après
ipc.writeUW(freqloc, NewFreq) -- update radio panel
q400_freq= BCD_to_MJC8Q400(NewFreq)
MJCD8_Write(q400_freq, 65058)
Dernière modification par kzw313 (23-02-2021 20:17:50)
Hors ligne