[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
Elève Pilote
Elève Pilote
Messages : 721
Inscription : 17 avril 2017

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

#1

Message par asta » lun. avr. 17, 2017 12:29 pm

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 : viewtopic.php?f=435&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
Elève Pilote
Elève Pilote
Messages : 721
Inscription : 17 avril 2017

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

#2

Message par asta » lun. avr. 17, 2017 3:47 pm

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 » mer. avr. 19, 2017 7:52 pm

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
Elève Pilote
Elève Pilote
Messages : 721
Inscription : 17 avril 2017

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

#4

Message par asta » jeu. avr. 20, 2017 8:41 am

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
Elève Pilote
Elève Pilote
Messages : 721
Inscription : 17 avril 2017

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

#5

Message par asta » jeu. avr. 20, 2017 10:02 pm

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 » jeu. avr. 20, 2017 11:13 pm

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
Elève Pilote
Elève Pilote
Messages : 721
Inscription : 17 avril 2017

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

#7

Message par asta » jeu. avr. 20, 2017 11:36 pm

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
Elève Pilote
Elève Pilote
Messages : 721
Inscription : 17 avril 2017

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

#8

Message par asta » sam. avr. 22, 2017 9:27 pm

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 : 17029
Inscription : 29 décembre 2004

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

#9

Message par Azrayen » sam. avr. 22, 2017 10:39 pm

Bonne nouvelle :)
Image Image

Image
Répondre

Revenir à « Mods et Applications »