[Résolu] Mirage 2000 script LUA (PCA/PPA) lecture et écriture

Salle dédiée aux mods/addons et applications pour DCS World
Avatar de l’utilisateur

Topic author
asta
Pilote Philanthrope
Pilote Philanthrope
Messages : 1355
Inscription : 17 avril 2017

[Résolu] Mirage 2000 script LUA (PCA/PPA) lecture et écriture

#1

Message par asta »

Bonjour à tous,

Vous l'avez peut être déjà vue, je bosse en ce moment sur une application Android pour le Mirage 2000C, mais j'ai deux problèmes techniques qui commencent à m'user, du coup je fais appel à communauté pour savoir si vous pouvez m'aider.

Thread du projet : http://www.checksix-forums.com/viewtopi ... 5&t=197212


Problème N°1 : J'arrive à récupérer l'état de bouton du PCA/PPA, mais pas forcément la valeur à coté

Voici un extrait de ce que j'arrive à faire, récupérer l'était d'un switch (0 ou 1) et l'envoyer à mon application pour afficher le bouton sur l'appli' dans la bonne position.

Code : Tout sélectionner

function LuaExportAfterNextFrame() local selfData = LoGetSelfData() if selfData then local MainPanel = GetDevice(0) masterArm = math.floor(MainPanel:get_argument_value(234)) --J'arrive à lire l'état du masterArm gearNow = math.floor(MainPanel:get_argument_value(404)) -- J'arrive à lire l'état de la manette du train msgOut = HEAD_MSG..","..masterArm..","..gearNow.." \n" -- j'édite ma commande c:sendto(msgOut, clientIP, ANDROID_PORT) -- je l'envoie à mon application mobile end end
Voici ce que je n'arrive pas à faire, c'est récupérer les valeurs des cadrans au dessus des boutons, je pense avoir trouver les codes pour l'état des boutons, mais c'est tout...

Code : Tout sélectionner

log_file:write("\n") log_file:write(MainPanel:get_argument_value(236)) log_file:write(",") log_file:write(MainPanel:get_argument_value(238)) log_file:write(",") log_file:write(MainPanel:get_argument_value(240)) log_file:write(",") log_file:write(MainPanel:get_argument_value(242)) log_file:write(",") log_file:write(MainPanel:get_argument_value(244)) log_file:write(",") log_file:write(MainPanel:get_argument_value(246)) log_file:write(",") log_file:write(MainPanel:get_argument_value(247)) log_file:write(",") log_file:write(MainPanel:get_argument_value(251)) log_file:write(",") log_file:write(MainPanel:get_argument_value(252)) log_file:write(",") log_file:write(MainPanel:get_argument_value(254)) log_file:write(",") log_file:write(MainPanel:get_argument_value(255)) log_file:write(",") log_file:write(MainPanel:get_argument_value(257)) log_file:write(",") log_file:write(MainPanel:get_argument_value(258)) log_file:write(",") log_file:write(MainPanel:get_argument_value(260)) log_file:write(",") log_file:write(MainPanel:get_argument_value(261)) log_file:write(",") log_file:write(MainPanel:get_argument_value(263)) log_file:write(",") log_file:write(MainPanel:get_argument_value(264)) log_file:write("\n")
sortie :
0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0
Du coup j'arrive bien à récupérer les états des boutons du PCA, mais je ne sais pas comment récupérer les valeurs des cadrans, vous avez une idée ?



Problème N°2 : je n'arrive pas à envoyer des actions au PCA/PPA
Voici les fichiers d'où j'essaie d'extraire les commandes pour intéragir avec le PCA/PPA
..\DCS World\Mods\aircraft\M-2000C\Cockpit\clickabledata.lua
..\DCS World\Mods\aircraft\M-2000C\Cockpit\command_defs.lua
..\DCS World\Mods\aircraft\M-2000C\Cockpit\devices.lua

D'après ces fichiers, on devrait avoir ces codes pour intéragir avec les instruments :

Code : Tout sélectionner

start_command = 3000 device_commands = { ... --PCA/PPA Button_234 = start_command + 234; Button_235 = start_command + 235; Button_237 = start_command + 237; Button_239 = start_command + 239; Button_241 = start_command + 241; Button_243 = start_command + 243; Button_245 = start_command + 245; Button_247 = start_command + 247; Button_248 = start_command + 248; Button_249 = start_command + 249; Button_250 = start_command + 250; Button_253 = start_command + 253; Button_256 = start_command + 256; Button_259 = start_command + 259; Button_262 = start_command + 262; Button_265 = start_command + 265; Button_266 = start_command + 266; Button_269 = start_command + 269; Button_272 = start_command + 272; Button_275 = start_command + 275; Button_276 = start_command + 276; Button_277 = start_command + 277; Button_278 = start_command + 278; Button_279 = start_command + 279; Button_409 = start_command + 409; ... }
Voici ce que j'essaie de faire :

Code : Tout sélectionner

function LuaExportBeforeNextFrame() data, ip, port = c:receivefrom() if data then log_file:write("---------------------------------------------------\n") log_file:write("Received: ", data) log_file:write("\n") clientIP = ip local dataArray = string.gmatch(data, '([^,]+)') if dataArray(0)==HEAD_MSG then LoSetCommand(dataArray(1)) end end end
Et ça marche plutôt bien pour certains boutons, j'arrive à envoyer "283" par exemple, qui me fais changer l'état de mon MasterArm dans le cockpit.
Dans mes logs j'ai :
---------------------------------------------------
Received: M2KCASS,283
Mais lorsque j'envoie un code pour le PCA/PPA, je n'ai rien qui se passe... 235,3235,...



Si jamais vous avez des pistes, je suis preneur :)

@ très vite

Asta
Dernière modification par asta le sam. avr. 22, 2017 9:28 pm, modifié 1 fois.
Avatar de l’utilisateur

Topic author
asta
Pilote Philanthrope
Pilote Philanthrope
Messages : 1355
Inscription : 17 avril 2017

Re: [Besoin aide] Mirage 2000 script LUA (PCA/PPA) lecture et écriture

#2

Message par asta »

Re',

Je viens de trouver la solution à mon problème N°1, j'arrive maintenant à récupérer toutes les données liées au PCA/PPA.

Voici ce que je récupère en output :
-----------------------------------------
PCA_UR

-----------------------------------------
text_PCA_UR1
RDO
-----------------------------------------
text_PCA_UR2
POL
-----------------------------------------
text_PCA_UR3
TAF
-----------------------------------------
text_PCA_UR4

-----------------------------------------
text_PCA_UR5

-----------------------------------------
PCA_BR

-----------------------------------------
text_PCA_BR1
MAG
-----------------------------------------
text_PCA_BR2
530
-----------------------------------------
text_PCA_BR3
RP
-----------------------------------------
text_PCA_BR4

-----------------------------------------
text_PCA_BR5


Je reste cependant toujours intéressé si vous avez une solution pour mon problème N°2 ^^

@ plus

Asta'
Avatar de l’utilisateur

jdaou
Elève Pilote
Elève Pilote
Messages : 652
Inscription : 10 mars 2003

Re: [Besoin aide] Mirage 2000 script LUA (PCA/PPA) lecture et écriture

#3

Message par jdaou »

Salut,

As-tu regardé ce qui se fait du côté de dcs-bios, et le module m2k qu'a fait Exo7 ?

genre, dans le module m2kc pour dcs-bios, la première ligne du PCA :

Code : Tout sélectionner

definePushButton("PCA_BUTTON_1", 6, 3235, 235, "PCA", "PCA Button 1")
je n'ai pas regardé le code derrière, mais il faut peut être aussi déclarer le device (6 ici ) ?
Avatar de l’utilisateur

Topic author
asta
Pilote Philanthrope
Pilote Philanthrope
Messages : 1355
Inscription : 17 avril 2017

Re: [Besoin aide] Mirage 2000 script LUA (PCA/PPA) lecture et écriture

#4

Message par asta »

Hello,

Hier soir j'ai trouvé quelque chose qui marche, mais... "mal", parfois j'envoie une commande et le bouton n'est pas affecté dans le cockpit.

Merci pour ta piste du coup, je verrai ça ce weekend et je partagerai dans tous les cas les différentes solutions.
@ très vite
Avatar de l’utilisateur

Topic author
asta
Pilote Philanthrope
Pilote Philanthrope
Messages : 1355
Inscription : 17 avril 2017

Re: [Besoin aide] Mirage 2000 script LUA (PCA/PPA) lecture et écriture

#5

Message par asta »

Re',

Comme promis, voici mon retour.

Je n'avais pas connaissance du travail d'Exo7, merci, c'est une bonne source d'information.

Du coup, derrière le "definePushButton", je retrouve la méthode que j'ai trouvé hier soir qui est "performClickableAction"

Exemple :

Code : Tout sélectionner

GetDevice(6):performClickableAction(3235,1.0)
GetDevice(6) : donne le device PCA
performClickableAction : c'est la méthode de l'action
3235 : identifiant d'un bouton
1.0 : la valeur que je veux donner à mon bouton

mais... ce n'est pas encore parfait, il faut que je clique deux fois sur mon bouton arrive à faire changer la valeur, donc je continue de chercher et de comprendre, si vous avez une solution, je suis preneur ^^

Encore merci à toi @jdaou
Avatar de l’utilisateur

jdaou
Elève Pilote
Elève Pilote
Messages : 652
Inscription : 10 mars 2003

Re: [Besoin aide] Mirage 2000 script LUA (PCA/PPA) lecture et écriture

#6

Message par jdaou »

asta a écrit :Re',
Je n'avais pas connaissance du travail d'Exo7, merci, c'est une bonne source d'information.
[...] Encore merci à toi @jdaou
De rien, ça m'intéresse aussi :)
Tu peux regarder comment la fonction BIOS.util.defineTumb est gaulée, ligne 507 du fichier util.lua : dcs-bios/Scripts/DCS-BIOS/lib/Util.lua

En passant, je viens de me dire qu'un autre truc qui pourrait être intéressant et speeder un peu le développement (ou pas ), c'est de faire en sorte que ton appli puisse utiliser dcsbios pour passer les commandes. Ca économiserait la maintenance du code côté dcs, et ferai une bonne base pour la suite. Regarde du côté de l'outil control-reference.js pour voir comment il a fait dans son appli chrome.
Avatar de l’utilisateur

Topic author
asta
Pilote Philanthrope
Pilote Philanthrope
Messages : 1355
Inscription : 17 avril 2017

Re: [Besoin aide] Mirage 2000 script LUA (PCA/PPA) lecture et écriture

#7

Message par asta »

jdaou a écrit :
asta a écrit :Re',
Je n'avais pas connaissance du travail d'Exo7, merci, c'est une bonne source d'information.
[...] Encore merci à toi @jdaou
De rien, ça m'intéresse aussi :)
Tu peux regarder comment la fonction BIOS.util.defineTumb est gaulée, ligne 507 du fichier util.lua : dcs-bios/Scripts/DCS-BIOS/lib/Util.lua

En passant, je viens de me dire qu'un autre truc qui pourrait être intéressant et speeder un peu le développement (ou pas ), c'est de faire en sorte que ton appli puisse utiliser dcsbios pour passer les commandes. Ca économiserait la maintenance du code côté dcs, et ferai une bonne base pour la suite. Regarde du côté de l'outil control-reference.js pour voir comment il a fait dans son appli chrome.
C'est exactement ce que j'analyse ^^
Cette page aussi est intéressante : https://github.com/3rd-KaTZe/Export_DCS ... r/sioc.lua

J'ai bien compris qu'il y avait différents types de boutons, je n'arrive "juste" pas encore à bien les gérer :)

J'ai aussi songé à me greffer sur DCSBIOS, rien de fixé, à voir :)
Avatar de l’utilisateur

Topic author
asta
Pilote Philanthrope
Pilote Philanthrope
Messages : 1355
Inscription : 17 avril 2017

Re: [Besoin aide] Mirage 2000 script LUA (PCA/PPA) lecture et écriture

#8

Message par asta »

Hello,

Je viens avec une bonne news, j'arrive à faire ce que je veux avec les boutons :)

En fait il y a quelque chose que je ne savais pas, c'est qu'on ne peut pas faire plusieurs commandes de suite comme ça :

Code : Tout sélectionner

GetDevice(6):performClickableAction(3235,1.0)
le performClickableAction ne s'effectue que sur une seule frame, du coup, pour les "press buttons" (boutons du PCA par exemple), il vaut d'abord envoyer :

Code : Tout sélectionner

GetDevice(6):performClickableAction(3235,1.0) --Pour presser le bouton à une frame
et à la frame suivante il faut envoyer :

Code : Tout sélectionner

GetDevice(6):performClickableAction(3235,0) --Pour relâcher la pression sur le bouton
Mes problèmes techniques sont donc maintenant : résolus !

Merci pour votre aide
Avatar de l’utilisateur

Azrayen
Moderateur
Moderateur
Messages : 18906
Inscription : 29 décembre 2004

Re: [Résolu] Mirage 2000 script LUA (PCA/PPA) lecture et écriture

#9

Message par Azrayen »

Bonne nouvelle :)
Image Image

Image

Pauli
Nouvelle Recrue
Nouvelle Recrue
Messages : 17
Inscription : 08 janvier 2021

Re: [Résolu] Mirage 2000 script LUA (PCA/PPA) lecture et écriture

#10

Message par Pauli »

bonjour à tous !
je déterre un vieux post, on ne sais jamais si Asta tu te souviens de la réponse à ta question 1.
J'arrive à récupérer à peu près tout du cockpit sauf les données du PCA.

Device = GetDevice(0)
string.format("%s", Device:get_argument_value(237)) -> me retourne toujours 0
string.format("%f", Device:get_argument_value(237)) -> me retourne toujours 0
Device:get_argument_value(237) -> me retourne toujours 0

même chose avec GetDevice(6) -> même si a priori ca n'a pas de sens....

bref, je suis dans les choux......
Avatar de l’utilisateur

Topic author
asta
Pilote Philanthrope
Pilote Philanthrope
Messages : 1355
Inscription : 17 avril 2017

Re: [Résolu] Mirage 2000 script LUA (PCA/PPA) lecture et écriture

#11

Message par asta »

Pauli a écrit :
mar. mars 02, 2021 8:26 am
même chose avec GetDevice(6) -> même si a priori ca n'a pas de sens....
Hello,
Tu approches de la solution pourtant !

Le PCA crache un gros String, que tu choppes via le GetDevice.
Pour savoir quelle clé tu dois mettre en paramètre de ton GetDevice, il faut toutes se les faire :Jumpy: .
Ce que je t'invite à faire, c'est à tout envoyer en brut dans un log le temps du test, tu verras lequel correspond à quoi et voilà.

Sinon, autre piste : https://github.com/Margouill/CockpitPP/ ... kpitpp.lua
ici il est utilisée la clé 5.

++
Dernière modification par asta le mar. mars 02, 2021 6:16 pm, modifié 1 fois.

Pauli
Nouvelle Recrue
Nouvelle Recrue
Messages : 17
Inscription : 08 janvier 2021

Re: [Résolu] Mirage 2000 script LUA (PCA/PPA) lecture et écriture

#12

Message par Pauli »

Merci de ta reponse rapide, mais je ne comprend pas ta reponse a moins que tu veuilles parler de la fonction performClickableAction ?
A priori get_argument_value ne devrait pas répondre sur autre chose qur device 0 (main panel) ?
quoi qu'il en soit j'ai qd même testé de manière recursive de 0 à 50.... seul get_argument_value répond sur getdevice(0), le reste renvoie à priori une valeur nulle...
A priori parce que je viens de me rendre compte que GetDevice renvoie une valeur null le script plante et nécessite un redémarrage de DCS......
je vais qd même gerer cette exception... mais je me demande si ta réponse ne porte pas plus sur performClickableAction, sachant que dans ton lien, le script n'interroge que le device 0....

Pauli
Nouvelle Recrue
Nouvelle Recrue
Messages : 17
Inscription : 08 janvier 2021

Re: [Résolu] Mirage 2000 script LUA (PCA/PPA) lecture et écriture

#13

Message par Pauli »

sachant que mon probleme, contrairement à toi est que je n'arrive même pas à récuperer les valeurs des boutons PCA qui restent toujours à 0....
Avatar de l’utilisateur

Topic author
asta
Pilote Philanthrope
Pilote Philanthrope
Messages : 1355
Inscription : 17 avril 2017

Re: [Résolu] Mirage 2000 script LUA (PCA/PPA) lecture et écriture

#14

Message par asta »

Et tu as regardé ce que je t'ai envoyé ? ^^
Car il y a toutes les clés du 2000 dans la partie Android de l'appli' et même un tuto' de rédigé
Avec le lua que je t'ai posté avant tu comprends comment ça se passe pour setter et pour getter.

Si c'est set une valeur, en effet, il faut utiliser performClickableAction, dans le code source de Cockpit++ tu as toutes les info'.
Si c'est get une valeur, utilise list_indication pour le PCA. Il renvoie un String, à toi de la parser.
Avatar de l’utilisateur

Topic author
asta
Pilote Philanthrope
Pilote Philanthrope
Messages : 1355
Inscription : 17 avril 2017

Re: [Résolu] Mirage 2000 script LUA (PCA/PPA) lecture et écriture

#15

Message par asta »

Pauli a écrit :
mar. mars 02, 2021 6:08 pm
sachant que mon probleme, contrairement à toi est que je n'arrive même pas à récuperer les valeurs des boutons PCA qui restent toujours à 0....
Chose "bête", il faut être "dans son cockpit", avec le briefing de retiré pour que ça marche. (au cas où tu ferais les tests sans être en vol, me suis déjà fait avoir... j'avais encore la pause de mise...)

Sinon, encore plus simple, tu installes l'appli' : https://margouill.github.io/CockpitPP/
et tu fais de l'analyse de l'existant.

Je ne suis plus dans le projet pour rappel. Mais il y a un nouveau petit groupe que tu peux retrouver sur leur Discord (via le lien que je t'ai passé), grâce à Margouill qui a repris le projet.

Pauli
Nouvelle Recrue
Nouvelle Recrue
Messages : 17
Inscription : 08 janvier 2021

Re: [Résolu] Mirage 2000 script LUA (PCA/PPA) lecture et écriture

#16

Message par Pauli »

oui je voulais éviter d'être trop long, et je viens de lire le code de ton appli aussi qui confirme bien que les get ne se font que sur le device 0....
je pense avoir compris le principe des functions DCS dont get_argument_value qui doit normalement me renvoyer les donnes de l'argument....
D'ailleurs j'arrive à récupérer a peu près toutes les valeurs des autres boutons du cockpit et à vérifier leur état en actionnant les boutons sur DCS....

Seulement pour le PCA.... rien... toujours 0

dis moi si je me trompe mais le code suivant devrait ne devrait pas me retourner 0 ou 1 en fonction de si le bouton est activé ou pas ?

local MainPanel = GetDevice(0)
pca = MainPanel:get_argument_value(239) --bouton 3
file_log:write(pca..\n")

chez moi file_log affiche que des 0, test fait en vol, sans briefing, sans pause ;)
aucune erreur dans dcs.log .... à part "Can't execute Lua file ./Mods/aircraft/M-2000C/Cockpit/RWR/RWR_init.lua"
mais je pense sans conséquence sur mon sujet à priori.....

depuis ton premier post le mod m2k à peut être évolué, je me demande si le pb ne viendrait pas de là...... bref
je continue à creuser...... profond...... ;)

Pauli
Nouvelle Recrue
Nouvelle Recrue
Messages : 17
Inscription : 08 janvier 2021

Re: [Résolu] Mirage 2000 script LUA (PCA/PPA) lecture et écriture

#17

Message par Pauli »

merci

Pauli
Nouvelle Recrue
Nouvelle Recrue
Messages : 17
Inscription : 08 janvier 2021

Re: [Résolu] Mirage 2000 script LUA (PCA/PPA) lecture et écriture

#18

Message par Pauli »

bon, j'ai testé ton script et j'obtiens en effet un paquet qui ressemble fort à l’état du PCA.....
ca me rassure je vais partir sur un pb de formatage des données....... à priori puisque je ne vois pas autre chose ;)
..... je creuse et posterais qd j'aurais trouvé
Gracie !!


text_PCA_BR5

,0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0,-----------------------------------------
PPA

Pauli
Nouvelle Recrue
Nouvelle Recrue
Messages : 17
Inscription : 08 janvier 2021

Re: [Résolu] Mirage 2000 script LUA (PCA/PPA) lecture et écriture

#19

Message par Pauli »

ok c'est bon,

en executant les scripts DSC je m'atais fait un fichier avec les différentes commandes correspondant à plusieurs Mod (que mon cockpit soit compatible avec m2k et autres....)
et bizarrement pour la PCA ca ne correspond pas

j'avais par example comme argument pour le bouton 3 -> 239
or l'etat du bouton est en fait le 240 !!!!!!!

et toujours 1 sur 2, je sais pas pourquoi....

MainPanel:get_argument_value(236) ..";".. MainPanel:get_argument_value(238) ..";".. MainPanel:get_argument_value(240) ..";".. MainPanel:get_argument_value(242)

Bref..... J'aurais du mieux lire ton premier post y avais déjà la réponse, pffffff.
Avatar de l’utilisateur

Topic author
asta
Pilote Philanthrope
Pilote Philanthrope
Messages : 1355
Inscription : 17 avril 2017

Re: [Résolu] Mirage 2000 script LUA (PCA/PPA) lecture et écriture

#20

Message par asta »

L'essentiel est que t'y sois arrivé.
Bien joué !
pour la suite, n'hésite pas à rejoindre la commu' dont je t'ai parlé plus haut
Répondre

Revenir à « Mods et Applications »