28/11/2020 16:02 - Zip

Définir des commandes pour des interrupteurs à 2 ou 3 positions


  • Membre du bureau

    C’est un sujet qui a été abordé aujourd’hui par Perka. Je capitalise sur l’explication que je lui ai donné, et je vous transmets ici le résultat de mes recherches.

    Situation

    Sur nos manettes de bourgeois, il y a souvent, en plus de boutons poussoirs simples ou sous forme de “hats” (chapeaux, comme le trim par exemple), des interrupteurs qui peuvent prendre plusieurs positions maintenues.

    dbffae41-eb35-44ac-ba16-6337d74b626c-image.png

    Par exemple, sur la manette des gaz du Warthog, il y a un interrupteur “Flaps” (1) qui peut prendre trois positions, et un interrupteur “EAC” (2) qui peut en prendre 2.

    On constate que, quand souhaite utiliser un de ces interrupteurs pour mapper une commande double de DCS (par exemple, Master Arm ON et OFF), cela ne fonctionne pas comme prévu

    Explication

    La raison est que toutes les positions de ces interrupteurs ne génèrent pas une commande dans DCS.

    Globalement, un joystick complexe comme la manette des gaz du Warthog est vu dans Windows (par la librairie DirectX, qui sert à l’interfaçage direct du matériel pour les jeux) comme un ensemble d’axes et de boutons qui sont soit pressés (ON), soit non (OFF).

    Par exemple, le bouton qui vous sert à larguer des bombes sur votre joystick est un simple poussoir, dont la position pressée déclenche un signal électrique qui va être reconnu par Windows comme le fait que le bouton DirectX est pressé (ON). Quand on le lache physiquement, le signal se coupe, et Windows cesse de voir ce bouton comme ON ; mécaniquement, il est considéré comme OFF (le seul autre état).

    Dans le cas d’un bouton à plusieurs positions (comme l’interrupteur “EAC”), une seule des deux positions déclenchera un signal électrique (la position “vers l’avant” dans le cas de l’EAC. Et donc seule cette position correspond à un bouton DirectX pour Windows. L’autre est simplement neutre.
    Si vous voulez mapper dans DCS la position basse de cet interrupteur, vous constaterez que c’est impossible.

    Pour un interrupteur à trois positions (comme l’interrupteur “FLAPS”) c’est pareil : seules 2 des 3 positions possibles seront actives, la troisième correspondra simplement à une absence de signal.

    Solution

    Il est possible de créer des commandes dans DCS, en éditant les fichiers .lua qui sont dans les répertoires Input des modules comme par exemple le fichier Mods\aircraft\FA-18C\Input\FA-18C\joystick\default.lua

    On peut créer un contrôle qui exécute une action spécifique quand un bouton DirectX est enfoncé, et une autre quand il ne l’est plus.
    Par exemple, on peut créer un contrôle qui déclenche le Master Arm (ON) quand le bouton DirectX correspondant à l’interrupteur “EAC” en position haute est enfoncé (et maintenu, donc) et qui déclenche le Master Arm (OFF) quand il n’est plus enfoncé (donc, quand on déplace l’interrupteur dans l’autre position).
    Voici le contrôle correspondant :

    {down = SMS_commands.MasterArmSw, up = SMS_commands.MasterArmSw, cockpit_device_id = devices.SMS, value_down = 1.0, value_up = 0.0, name = _('Master Arm Switch 2-Pos ARM/SAFE'), category = {_('Toggle Switches'), _('Master Arm Panel')}},

    Je vous l’explique rapidement.

    • down= correspond à la commande qui est actionnée quand le bouton est enfoncé (en l’occurence, SMS_commands.MasterArmSw)
    • up= correspond à la commande qui est actionnée quand le bouton cesse d’être enfoncé (en l’occurence, SMS_commands.MasterArmSw ; oui, vous avez bien lu, c’est la même que pour down ! C’est la valeur qui va être différente - voir plus bas)
    • value_down= est la valeur (le paramètre) envoyé à la commande décrite dans down= quand le bouton est enfoncé (ici, 1.0 qui correspond à la montée de l’interrupteur Master Arm dans le cockpit)
    • value_up= est la valeur (le paramètre) envoyé à la commande décrite dans up= quand le bouton est enfoncé (ici, 0.0 qui correspond à la descente de l’interrupteur Master Arm dans le cockpit)
    • cockpit_device_id= va de paire avec up= et down= pour définir l’instrument qui reçoit la commande.
    • category= est la liste des catégories dans lesquelles le contrôle sera rangé (qu’on voit dans la liste déroulante catégories dans le dialogue Controls Options)
    • name= est le nom que le contrôle aura dans le dialogue Controls Options

    En pratique, ici on crée un contrôle (unique) qu’on pourra assigner à la position active d’un interrupteur (comme EAC par exemple), et qui appellera la commande SMS_commands.MasterArmSw dans l’instrument devices.SMS avec la valeur 1.0 quand l’interrupteur est dans cette position, et la valeur 0.0 quand il n’y est plus.

    Concrètement, cela permet de mettre le Master Arm sur ON quand l’interrupteur physique est dans une position, et sur OFF quand il est dans une autre.

    Aller plus loin

    C’est un domaine bien compliqué, heureusement bien décrit et documenté par l’excellent LeCuvier sur le forum d’Eagle Dynamics (en anglais).

    Vous pouvez voir ce que j’ai choisi de mettre dans mes mods “Config - Keys - XXXX” qui sont à votre disposition sur mon Google Drive (compatibles OvGME, voir mon tutoriel sur OvGME)

    [Edit du 14.05.2020]
    Depuis, on a mis en place les bibliothèques OvGME de la VEAF que vous pouvez découvrir dans un tutoriel que je vous propose.
    Si vous vous demandez ce qu’est OvGME, lisez cet autre tutoriel qui vous l’explique en détail.

    N’hésitez pas à me demander si vous avez des questions !


  • Membre du bureau

    Bien joué … et surtout bien expliqué 👍



  • Merci ZIP vais étudier ça avec une tablette de Doliprane à coté et un cerveau de rechange lol 🙂


  • Membre VEAF

    Je crois que j’ai compris le principe
    Je regarde un inter 2 positions pour commencer et ensuite je me met sur un trois comme les volets. Je crois avoir une info sur les codes commandes dcs avec le tuto de Stream deck
    Affaire à suivre, merci pour le tuyau @Zip


  • Membre du bureau

    J’ai mis à jour mon post en modifiant les références à mes mods qui sont désormais dans la bibliothèque OvGME DCS game files de la VEAF.
    Je t’invite à y jeter un coup d’oeil.


  • Membre du bureau

    Excellent! Merci @Zip!
    Je vais essayer ça au plus vite.
    Ca passe l’integrity check?


  • Membre du bureau

    @griffin non malheureusement.
    Globalement, les mods user files passent l’IC, les game files non. Il y a des exceptions.


  • Membre du bureau

    Pour tous, voici le code pour faire le 3 Way Switch avec les Flaps du F18

    {down = ctrl_commands.FlapSw, up = ctrl_commands.FlapSw, cockpit_device_id = devices.CONTROL_INTERFACE,	value_down =  1.0, value_up = 0.0, name = _('FLAP 3 way Switch - Up'),	category = {_('Toggle Switches'),_('Left Vertical Panel')}},
    {down = ctrl_commands.FlapSw, up = ctrl_commands.FlapSw, cockpit_device_id = devices.CONTROL_INTERFACE,	value_down =  -1.0, value_up = 0.0, name = _('FLAP 3 way Switch - Down'),	category = {_('Toggle Switches'),_('Left Vertical Panel')}},
    

    Merci professeur @ZIp !


  • Membre VEAF

    merci @griffin


  • Membre du bureau

    @griffin pour info c’est déjà dans le mod Config - Keys - FA-18C Keybinds du repository VEAF 😉


  • Membre du bureau

    @Zip oui, c’était pour donner un exemple de switch avec 3 pos.


  • Membre VEAF

    @Zip le fichier mod FA-18C ne peut être télécharger


  • Membre du bureau

    @phebus mais si, je viens de tester.
    Tu utilises bien OvGME ? Tu as lu le tutoriel ?


  • Membre VEAF

    Système stream deck fonctionne en bi-directionnel avec DCS
    Les retours d’infos du jeu remonte sur le stream deck comme, train rentré ou sorti avec un vrai retour d’information de dcs, les rotatifs peuvent être utilisés avec la souris ou sur le stream deck le retour d’information est le même partout.
    Exemple affichage en temps réel des canaux radio comm1 et comm2, affichage du canal et de la fréquence dans l’ufc.
    Retour visuel des 5 boutons pour les fonctions AP IFF TCN D/T…chaque bouton est fonctionnel et un retour d’information visuel sur l’état est instantané sur le jeu et sur le clavier, le rafraichissement est fait toute les 0.05 seconde.
    Je continue à creuser…


Log in to reply
 

Attention : merci de ne pas inclure de pièces jointes trop volumineuses !
En particulier :

  • pas de gros fichier temporaire, qui n’a qu’une courte durée de vie (.trk, ou autre) : utilisez un autre support (Google Drive par exemple) et déposez un lien.
  • pas d’image dans d’autres formats que .jpg ou .jpeg ; en particulier pas de .bmp ni de .png, qui ne sont pas (ou peu) compressés.
  • attention également au copié/collé d’une image, qui sera stockée dans son format d’origine (donc, si c’est du bmp ou du png à la base, voir règle #2)