Opencockpits avec SIOC et FSUIPC (MSFS)

Avro

PILOTE PRO
Messages
1 976
Réactions
279
Bonjour,

SIOC le retour. J'ai donc acheté FSUIPC7 et réinstallé SIOC. Je tente d'interfacer mon MCP OC sur le BAE 146 de JustFlight en attendant le RJ85.

J'ai interfacé un premier bouton poussoir, les ennuis commencent tout de suite.

Code:
VAR 0079, NAME HDG_MODE, STATIC, LINK FSUIPC_INOUT, OFFSET $66C0, Length 1
VAR 0125, NAME 0I_HDG, LINK IOCARD_SW, INPUT 28, DEVICE 1 // MCP.txt
{
  IF V0125 = 1
  {
    V0212 = 1  // OK
    V0079 = 1 // KO
  }
}

// *******************
// SALIDAS // OUTPUTS
// *******************
VAR 0212, NAME 0O_HDGSEL, LINK IOCARD_OUT, OUTPUT 26, DEVICE 1 // MCP.txt

Quand, j'appuie sur le bouton HDG du MCP, je vois dans l'avion apparaître la led s'allumer puis s'éteindre immédiatement. Comment faire pour que le Heading reste enclenché ?

J'ai regardé les excellents tutos épinglés mais je n'ai pas ou pas su trouver la réponse.
 
L'offset $66C0 et un offset libre d'usage et non documenté dans FSUIPC.

Ton script est correct, il faut regarder ce qui est indiqué dans la documentation de ton avion.
Si l'offset repasse à 0, cela ne vient pas de SIOC.

Tu peux le vérifier facilement en utilisant la console IOCP et en mettant 1 dans la variable 0079
 
Tu as raison, quand j'essaye de mettre 1 dans la variable 79, elle repasse à 0 automatiquement. Cette Lvar doit être en lecture seule.
Sur X-Plane, j'avais la possibilité de voir les variables qui changent d'état. Cela ne semble pas exister avec FSUIPC.
 
Ce n'est pas documenté ?


Sur X-Plane, j'avais la possibilité de voir les variables qui changent d'état.Cela ne semble pas exister avec FSUIPC.
Pourtant FSUIPC te permets d'afficher les offsets dans MSFS directement ... !
 
Tu vas me dire : " mais comment ?"
2 solutions :
Par le log dans les menu de FSUIPC :

Choisir Log puis offsets...
1713529789735.png

Tu indiques le ou les offsets à afficher, ici les secondes, et l'emplacement d'affichage, ici la barre de titre :
1713529854932.png


Et voila le resultat dans la fenetre de MSFS:
1713529945559.png
 
Dernière édition:
Et la seconde solution : FSinterrogate
Que tu trouveras dans le répertoire "Utils" de FSUIPC

1713531142507.png

Je te laisse le découvrir !
 
Merci Fab,

Mon erreur était de prendre un offset libre. Il faut que je trouve les bons offsets. Avec IOCP_Console, j'ai l'affichage en direct des valeurs d'offset pour peu que je les connaisse.

FSInterrogate ne semble pas fonctionner pour MSFS.
 
Bon, même si FS2020 n'est pas dans la liste, cela fonctionne. Du coup, ça m'aide bien.

1713599353380.png


yapluka :love:
 
Bonjour,

j'avance. Je suis en train d'ajouter mon FMC (OC type 737). Pour les boutons du FMC, ce serait, si j'ai bien compris, vu comme un clavier mais je ne vois pas comment relier un bouton à celui du cockpit virtuel. Une idée brillante :) ?
 

Fichiers joints

  • claviervirtuel.JPG
    claviervirtuel.JPG
    214.5 KB · Affichages: 12
Dernière édition:
J'avais un problème d'offset entre autres. Comment utiliser les offsets libres ? Quelle est la plage ? Y a t- Il des offsets de 2 ou 4 bits ?
Le 66C0 est fonctionnel mais je n'ai pas réussi à en utiliser d'autres. J'en ai besoin d'un certain nombre pour le FMC.

Je ferai un tutoriel quand j'aurai un peu avancé.
 
Dernière édition:
J'utilise les offsets de 66c0 à 66df en 8bits, 16bits, 64bits, j'en assigne certains en bit array (ex 66c0.2) RAS
 
Just Flight n'est pas très disert concernant l'interfaçage de son avion avec du hardware OC en particulier et plus généralement avec n'importe quel hardware.

Il y a des LVAR prometteuses, par exemple :
  • PED_FWD_L_FMS_Lsk_1L
  • PED_FWD_L_FMS_Lsk_1L_ANIM
  • PED_FWD_L_FMS_1
  • PED_FWD_L_FMS_1_ANIM (appui du chiffre 1)
  • PED_FWD_L_FMS_A
  • PED_FWD_L_FMS_A_ANIM
  • etc.

J'essaye de lire les valeurs quand j'appuie sur le bouton correspondant. La première variable reste à 0 tandis que l'animation du bouton passe temporairement à 1 quand on clique dessus. FS Interrogate ne m'aide pas beaucoup sur ce coup là.

Pas trouvé comment faire pour simuler l'appui du bouton avec mon CDU OC. Je vais faire un message sur le forum Just Flight.
 
JustFlight a répondu. Je peux avancer

Thanks for confirming. That's the 'Classic' UNS-1 FMS so the LVars you listed above are correct.
In theory, all you should need to do to trigger a key press is to set the values of "PED_FWD_L_FMS_A" to "1". That will register as a press on the FMS and our code will then reset the LVar back to "0".


ça fait un paquet de LVAR. Il n'y aurait pas un moyen de faire un truc comme ça ?

Code:
[LvarOffsets]
205=PED_FWD_L_FMS_Lsk_1L=UB66C8.1
206=PED_FWD_L_FMS_Lsk_2L=UB66C8.2
207=PED_FWD_L_FMS_Lsk_3L=UB66C8.3
208=PED_FWD_L_FMS_Lsk_4L=UB66C8.4
209=PED_FWD_L_FMS_Lsk_5L=UB66C8.5

et sur SIOC
Code:
Var 1010, Name FMC, Link FSUIPC_INOUT, OFFSET $66C8, Length 4
Var 1009, Name keys, Link IOCARD_KEYS, Device 13
{
    if &keys = 56 // Lsk 1L
    {
        &FMC = SETBIT 1
    }
    if &keys = 64 // Lsk 2L
    {
        &FMC = SETBIT 2
    }
    if &keys = 72 // Lsk 3L
    {
        &FMC = SETBIT 3
    }
    if &keys = 80 // Lsk 4L
    {
        &FMC = SETBIT 4
    }
    if &keys = 88 // Lsk 5L
    {
        &FMC = SETBIT 5
    }
}

Je n'y crois pas mais sait-on jamais.
 
Dernière édition:
Hello,

le RJ85 est dans mon hangar. Comme je l'indiquais avant, j'ai besoin d'utiliser beaucoup de variables. Voici celles pour le FMS.

Déclaration des LVAR dans FSUIPC.ini

Code:
[LvarOffsets]
200=GNLU910_L_FMS_Lsk_1L=UB66C0
201=GNLU910_L_FMS_Lsk_2L= UB66C1 ou UB66C4 ?
202=GNLU910_L_FMS_Lsk_3L= ?
203=GNLU910_L_FMS_Lsk_4L=
204=GNLU910_L_FMS_Lsk_5L=
260=GNLU910_L_FMS_Lsk_6L=
205=GNLU910_L_FMS_Lsk_1R=
206=GNLU910_L_FMS_Lsk_2R=
207=GNLU910_L_FMS_Lsk_3R=
208=GNLU910_L_FMS_Lsk_4R=
209=GNLU910_L_FMS_Lsk_5R=
261=GNLU910_L_FMS_Lsk_6R=
210=GNLU910_L_FMS_1=
211=GNLU910_L_FMS_2=
212=GNLU910_L_FMS_3=
213=GNLU910_L_FMS_4=
214=GNLU910_L_FMS_5=
215=GNLU910_L_FMS_6=
216=GNLU910_L_FMS_7=
217=GNLU910_L_FMS_8=
218=GNLU910_L_FMS_9=
219=GNLU910_L_FMS_0=
220=GNLU910_L_FMS_A=
221=GNLU910_L_FMS_B=
222=GNLU910_L_FMS_C=
223=GNLU910_L_FMS_D=
224=GNLU910_L_FMS_E=
225=GNLU910_L_FMS_F=
226=GNLU910_L_FMS_G=
227=GNLU910_L_FMS_H=
228=GNLU910_L_FMS_I=
229=GNLU910_L_FMS_J=
230=GNLU910_L_FMS_K=
231=GNLU910_L_FMS_L=
232=GNLU910_L_FMS_M=
233=GNLU910_L_FMS_N=
234=GNLU910_L_FMS_O=
235=GNLU910_L_FMS_P=
236=GNLU910_L_FMS_Q=
237=GNLU910_L_FMS_R=
238=GNLU910_L_FMS_S=
239=GNLU910_L_FMS_T=
240=GNLU910_L_FMS_U=
241=GNLU910_L_FMS_V=
242=GNLU910_L_FMS_W=
243=GNLU910_L_FMS_X=
244=GNLU910_L_FMS_Y=
245=GNLU910_L_FMS_Z=
246=GNLU910_L_FMS_Msg=
247=GNLU910_L_FMS_Data=
248=GNLU910_L_FMS_Fuel=
249=GNLU910_L_FMS_Tune=
250=GNLU910_L_FMS_Prev=
251=GNLU910_L_FMS_Next=
252=GNLU910_L_FMS_Pwr=
253=GNLU910_L_FMS_Vnav=
254=GNLU910_L_FMS_List=
255=GNLU910_L_FMS_Menu=
256=GNLU910_L_FMS_Perf=
257=GNLU910_L_FMS_Enter=
258=GNLU910_L_FMS_Back=
259=GNLU910_L_FMS_PlusMinus=

Une autre solution évoquée par Fabrice serait d'utiliser des offsets en bit array. J'avais fait ça en LUA.

Questions :
  1. Combien d'offsets sont libres dans MSFS ?
  2. Peut-on utiliser LUA et comment ?
 
Je tente d'interfacer mon MCP OC sur le BAE 146 de JustFlight ...
Emmanuel, je passe juste par là et je viens de parcourir ton post.

Je vois que tu veux passer par des offsets de libre.
Sauf à ce que ASOBO aie créé des nouveaux bancs, il n'y a pas grand chose.
Du moins, je pense que ceux disponibles ne couvriront pas ton besoin.;)

Par contre, une chose m'interpelle...
Est ce que JustFlight , n'a pas créé son propre bancs d'offset pour toute la gestion de son modèle de vol.

C'est le parti qu'a pris PMDG, ce qui fait que chaque bouton de son Modèle de Vol à son propre offset (totalement indépendant du moteur de simulation...).
Il nous suffit donc de se référer à son SDK et là l'interfaçage est très pratique lorsque l'on suit bien la méthodologie PMDG.

Bon, ma réflexion ne va peut être pas beaucoup t'aider, mais je cela me surprends un peu qu'un des grands noms du monde des Modèles de vol hardcore ne s’appuierait que sur les offsets disponibles du moteur de simulation. :unsure:
 
  1. Combien d'offsets sont libres dans MSFS ?
Je suppose que tu veux dire
  1. Combien d'offsets sont libres dans FSUIPC ?

La limitation viendra de FSUIPC qui limite à 1024 index dans la section [LvarOffsets]

Extrait de la Doc. FSUIPC :
- index is the index number of the entry, starting from 0 with a max value of 1023 (i.e. maximum of 1024 entries)

Sinon, les offsets libres :
  • 0x2544 184
  • 0x2644 184
  • 0x2744 216
  • 0x2ABC 68
  • 0x6174 28
  • 0x66C0 64
  • 0xA000 512
Soit 1256 offsets libres

Et en cherchant bien :
0x6DB0 32
0x7930 223
 
Dernière édition:
Bonjour,

Pour les offsets libres je ne sais pas. Pour LUA il faut passer par FSUIPC.
D'accord mais : on déclare les .lua dans FSUIPC.ini ? où sont stockés les .lua (répertoire) ?

Est ce que JustFlight , n'a pas créé son propre bancs d'offset pour toute la gestion de son modèle de vol.
Pas trouvé.

Sinon, les offsets libres :
  • 0x2544 184
  • 0x2644 184
  • 0x2744 216
  • 0x2ABC 68
  • 0x6174 28
  • 0x66C0 64
  • 0xA000 512
Soit 1256 offsets libres

Et en cherchant bien :
0x6DB0 32
0x7930 223
Je vais faire quelques essais. Ce qui m'étonne, c'est que 1 bouton sur 4 à peu près sont actifs en utilisant la plage : 0x66C0 64
 
Je réponds en partie à mes questions.

J'ai installé LINDA.

D'accord mais : on déclare les .lua dans FSUIPC.ini ? où sont stockés les .lua (répertoire) ?

Dans FSUIPC 7.ini, il faut ajouter

Code:
[LuaFiles]
1=ipcReady
2=LINDA
3=rj85

[AUTO]
1= lua rj85

Je vais faire quelques essais. Ce qui m'étonne, c'est que 1 bouton sur 4 à peu près sont actifs en utilisant la plage : 0x66C0 64
J'ai changé le fonctionnement. J'essaye de mettre tous les bouton avec le seul offset 66C0. SIOC + lua

SIOC
Code:
// ****************************************************************************************
// * Config_SIOC ver 4.2 - By Manuel Velez - www.opencockpits.com
// ****************************************************************************************
// * FileName : FMC.txt RJ85
// * Date : 10/11/2024 par Emmanuel

Var 1101, Name key, Link USB_KEYS, device 21
Var 1102, Name OUTPUT0, Link IOCARD_OUT, Device 13, Output 0 // FMC OFST amber led
Var 1103, Name OUTPUT1, Link IOCARD_OUT, Device 13, Output 1 // FMC MSG amber led
Var 1104, Name OUTPUT2, Link IOCARD_OUT, Device 13, Output 2 // FMC EXEC green led
Var 1105, Name OUTPUT3, Link IOCARD_OUT, Device 13, Output 3 // FMC DSPY red led
Var 1106, Name OUTPUT4, Link IOCARD_OUT, Device 13, Output 4 // FMC FAIL red led


Var 1110, Name FMC_KEY, Link FSUIPC_INOUT, OFFSET $66C0, Length 2
Var 1111, Name FMC_MSG, Link FSUIPC_INOUT, OFFSET $66C4, Length 2
{
    if &FMC_MSG = 1
    {
        &OUTPUT1 = 1
    }
    else
    {
        &OUTPUT1 = 0
    }
}
Var 1112, Name FMC_EXEC_L, Link FSUIPC_INOUT, OFFSET $66CB, Length 2
{
    if &FMC_EXEC_L = 1
    {
        &OUTPUT2 = 1
    }
    else
    {
        &OUTPUT2 = 0
    }
}


Var 1100, Name keys, Link IOCARD_KEYS, Device 13
{
    if &keys = 56 // LSK 1L
    {
         &FMC_KEY = 1
    }
    if &keys = 64 // LSK 2L
    {
         &FMC_KEY = 2
    }
    if &keys = 72 // LSK 3L
    {
         &FMC_KEY = 3
    }
    if &keys = 80 // LSK 4L
    {
         &FMC_KEY = 4
    }
    if &keys = 88 // LSK 5L
    {
         &FMC_KEY = 5
    }
    if &keys = 87 // LSK 6L
    {
         &FMC_KEY = 6
    }
    if &keys = 86 // LSK 1R
    {
         &FMC_KEY = 7
    }
    if &keys = 85 // LSK 2R
    {
         &FMC_KEY = 8
    }
    if &keys = 84 // LSK 3R
    {
         &FMC_KEY = 9
    }
    if &keys = 83 // LSK 4R
    {
         &FMC_KEY = 10
    }
    if &keys = 82 // LSK 5R
    {
         &FMC_KEY = 11
    }
    if &keys = 74 // LSK 6R
    {
         &FMC_KEY = 12
    }
    if &keys = 71 // menu
    {
         &FMC_KEY = 13
    }
    if &keys = 79 // init ref
    {
         &FMC_KEY = 14
    }
    if &keys = 78 // rte
    {
         &FMC_KEY = 15
    }
    if &keys = 75 // des
    {
         &FMC_KEY = 16
    }
    if &keys = 70 // legs
    {
         &FMC_KEY = 17
    }
    if &keys = 67 // prog
    {
         &FMC_KEY = 18
    }
    if &keys = 63 // n1 altn
    {
         &FMC_KEY = 19
    }
    if &keys = 62 // fix
    {
         &FMC_KEY = 20
    }
    if &keys = 77 // clb
    {
         &FMC_KEY = 21
    }
    if &keys = 76 // crz
    {
         &FMC_KEY = 22
    }
    if &keys = 69 // dep arr
    {
         &FMC_KEY = 23
    }
    if &keys = 68 // hold
    {
         &FMC_KEY = 24
    }
    if &keys = 66 // EXEC
    {
         &FMC_KEY = 25
    }
    if &keys = 55 // Prev Pg
    {
         &FMC_KEY = 26
    }
    if &keys = 54 // Next Pg
    {
         &FMC_KEY = 27
    }
    if &keys = 7 // 0
    {
         &FMC_KEY = 28
    }
    if &keys = 32 // 1
    {
         &FMC_KEY = 29
    }
    if &keys = 31 // 2
    {
         &FMC_KEY = 30
    }
    if &keys = 30 // 3
    {
         &FMC_KEY = 31
    }
    if &keys = 24 // 4
    {
         &FMC_KEY = 32
    }
    if &keys = 23 // 5
    {
         &FMC_KEY = 33
    }
    if &keys = 22 // 6
    {
         &FMC_KEY = 34
    }
    if &keys = 16 // 7
    {
         &FMC_KEY = 35
    }
    if &keys = 15 // 8
    {
         &FMC_KEY = 36
    }
    if &keys = 14 // 9
    {
         &FMC_KEY = 37
    }
    if &keys = 8 // .
    {
         &FMC_KEY = 38
    }
    if &keys = 2 // division
    {
         &FMC_KEY = 39
    }
    if &keys = 6 // +/-
    {
         &FMC_KEY = 40
    }
    if &keys = 3 // Delete
    {
         &FMC_KEY = 41
    }
    if &keys = 1 // Clr
    {
         &FMC_KEY = 42
    }
    if &keys = 4 // SP
    {
         &FMC_KEY = 43
    }
    if &keys = 61 // A
    {
         &FMC_KEY = 44
    }
    if &keys = 60 // B
    {
         &FMC_KEY = 45
    }
    if &keys = 59 // C
    {
         &FMC_KEY = 46
    }
    if &keys = 58 // D
    {
         &FMC_KEY = 47
    }
    if &keys = 57 // E
    {
         &FMC_KEY = 48
    }
    if &keys = 53 // F
    {
         &FMC_KEY = 49
    }
    if &keys = 52 // G
    {
         &FMC_KEY = 50
    }
    if &keys = 51 // H
    {
         &FMC_KEY = 51
    }
    if &keys = 50 // I
    {
         &FMC_KEY = 52
    }
    if &keys = 49 // J
    {
         &FMC_KEY = 53
    }
    if &keys = 29 // K
    {
         &FMC_KEY = 54
    }
    if &keys = 28 // L
    {
         &FMC_KEY = 55
    }
    if &keys = 27 // M
    {
         &FMC_KEY = 56
    }
    if &keys = 26 // N
    {
         &FMC_KEY = 57
    }
    if &keys = 25 // O
    {
         &FMC_KEY = 58
    }
    if &keys = 21 // P
    {
         &FMC_KEY = 59
    }
    if &keys = 20 // Q
    {
         &FMC_KEY = 60
    }
    if &keys = 19 // R
    {
         &FMC_KEY = 61
    }
    if &keys = 18 // S
    {
         &FMC_KEY = 62
    }
    if &keys = 17 // T
    {
         &FMC_KEY = 63
    }
    if &keys = 13 // U
    {
         &FMC_KEY = 64
    }
    if &keys = 12 // V
    {
         &FMC_KEY = 65
    }
    if &keys = 11 // W
    {
         &FMC_KEY = 66
    }
    if &keys = 10 // X
    {
         &FMC_KEY = 67
    }
    if &keys = 9 // Y
    {
         &FMC_KEY = 68
    }
    if &keys = 5 // Z
    {
         &FMC_KEY = 69
    }
}

rj85.lua
Code:
function FMC_KEY()
    -- Lecture de l'offset
    key = ipc.readUB(0x66C0)
    print("Appui détecté : key =", key)

    if key == 1 then
        ipc.writeLvar('L:GNLU910_L_FMS_Lsk_1L', 1)
    elseif key == 2 then
        ipc.writeLvar('L:GNLU910_L_FMS_Lsk_2L', 1)
    elseif key == 3 then
        ipc.writeLvar('L:GNLU910_L_FMS_Lsk_3L', 1)
    elseif key == 4 then
        ipc.writeLvar('L:GNLU910_L_FMS_Lsk_4L', 1)
    elseif key == 5 then
        ipc.writeLvar('L:GNLU910_L_FMS_Lsk_5L', 1)
    elseif key == 6 then
        ipc.writeLvar('L:GNLU910_L_FMS_Lsk_6L', 1)
    elseif key == 7 then
        ipc.writeLvar('L:GNLU910_L_FMS_Lsk_1R', 1)
    elseif key == 8 then
        ipc.writeLvar('L:GNLU910_L_FMS_Lsk_2R', 1)
    elseif key == 9 then
        ipc.writeLvar('L:GNLU910_L_FMS_Lsk_3R', 1)
    elseif key == 10 then
        ipc.writeLvar('L:GNLU910_L_FMS_Lsk_4R', 1)
    elseif key == 11 then
        ipc.writeLvar('L:GNLU910_L_FMS_Lsk_5R', 1)
    elseif key == 12 then
        ipc.writeLvar('L:GNLU910_L_FMS_Lsk_6R', 1)
    elseif key == 13 then
        ipc.writeLvar('L:GNLU910_L_FMS_Menu', 1)
    elseif key == 14 then
        ipc.writeLvar('L:GNLU910_L_FMS_InitRef', 1)
    elseif key == 15 then
        ipc.writeLvar('L:GNLU910_L_FMS_Rte', 1)
    elseif key == 16 then
        ipc.writeLvar('L:GNLU910_L_FMS_Vnav', 1)
    elseif key == 17 then
        ipc.writeLvar('L:GNLU910_L_FMS_Legs', 1)
    elseif key == 18 then
        ipc.writeLvar('L:GNLU910_L_FMS_Prog', 1)
    elseif key == 19 then
        ipc.writeLvar('L:GNLU910_L_FMS_Atc', 1)
    elseif key == 20 then
        ipc.writeLvar('L:GNLU910_L_FMS_Fix', 1)
    elseif key == 21 then
        ipc.writeLvar('L:GNLU910_L_FMS_Vnav', 1)
    elseif key == 22 then
        ipc.writeLvar('L:GNLU910_L_FMS_Vnav', 1)
    elseif key == 23 then
        ipc.writeLvar('L:GNLU910_L_FMS_DepArr', 1)
    elseif key == 24 then
        ipc.writeLvar('L:GNLU910_L_FMS_Hold', 1)
    elseif key == 25 then
        ipc.writeLvar('L:GNLU910_L_FMS_Exec', 1)
    elseif key == 26 then
        ipc.writeLvar('L:GNLU910_L_FMS_PrvNxt', 0)
    elseif key == 27 then
        ipc.writeLvar('L:GNLU910_L_FMS_PrvNxt', 2)
    elseif key >= 28 and key <= 37 then
        local digit = key - 28
        ipc.writeLvar('L:GNLU910_L_FMS_' .. tostring(digit), 1)
    elseif key == 38 then
        ipc.writeLvar('L:GNLU910_L_FMS_Dot', 1)
    elseif key == 39 then
        ipc.writeLvar('L:GNLU910_L_FMS_Div', 1)
    elseif key == 40 then
        ipc.writeLvar('L:GNLU910_L_FMS_PlusMinus', 1)
    elseif key == 41 then
        ipc.writeLvar('L:GNLU910_L_FMS_Del', 1)
    elseif key == 42 then
        ipc.writeLvar('L:GNLU910_L_FMS_Clr', 1)
    elseif key == 43 then
        ipc.writeLvar('L:GNLU910_L_FMS_Sp', 1)
    elseif key == 44 then
        ipc.writeLvar('L:GNLU910_L_FMS_A', 1)
    elseif key == 45 then
        ipc.writeLvar('L:GNLU910_L_FMS_B', 1)
    elseif key == 46 then
        ipc.writeLvar('L:GNLU910_L_FMS_C', 1)
    elseif key == 47 then
        ipc.writeLvar('L:GNLU910_L_FMS_D', 1)
    elseif key == 48 then
        ipc.writeLvar('L:GNLU910_L_FMS_E', 1)
    elseif key == 49 then
        ipc.writeLvar('L:GNLU910_L_FMS_F', 1)
    elseif key == 50 then
        ipc.writeLvar('L:GNLU910_L_FMS_G', 1)
    elseif key == 51 then
        ipc.writeLvar('L:GNLU910_L_FMS_H', 1)
    elseif key == 52 then
        ipc.writeLvar('L:GNLU910_L_FMS_I', 1)
    elseif key == 53 then
        ipc.writeLvar('L:GNLU910_L_FMS_J', 1)
    elseif key == 54 then
        ipc.writeLvar('L:GNLU910_L_FMS_K', 1)
    elseif key == 55 then
        ipc.writeLvar('L:GNLU910_L_FMS_L', 1)
    elseif key == 56 then
        ipc.writeLvar('L:GNLU910_L_FMS_M', 1)
    elseif key == 57 then
        ipc.writeLvar('L:GNLU910_L_FMS_N', 1)
    elseif key == 58 then
        ipc.writeLvar('L:GNLU910_L_FMS_O', 1)
    elseif key == 59 then
        ipc.writeLvar('L:GNLU910_L_FMS_P', 1)
    elseif key == 60 then
        ipc.writeLvar('L:GNLU910_L_FMS_Q', 1)
    elseif key == 61 then
        ipc.writeLvar('L:GNLU910_L_FMS_R', 1)
    elseif key == 62 then
        ipc.writeLvar('L:GNLU910_L_FMS_S', 1)
    elseif key == 63 then
        ipc.writeLvar('L:GNLU910_L_FMS_T', 1)
    elseif key == 64 then
        ipc.writeLvar('L:GNLU910_L_FMS_U', 1)
    elseif key == 65 then
        ipc.writeLvar('L:GNLU910_L_FMS_V', 1)
    elseif key == 66 then
        ipc.writeLvar('L:GNLU910_L_FMS_W', 1)
    elseif key == 67 then
        ipc.writeLvar('L:GNLU910_L_FMS_X', 1)
    elseif key == 68 then
        ipc.writeLvar('L:GNLU910_L_FMS_Y', 1)
    elseif key == 69 then
        ipc.writeLvar('L:GNLU910_L_FMS_Z', 1)
    else
        print("Touche non reconnue ou nulle",  key)
    end
    
    ipc.sleep(50) -- Pause pour laisser le système traiter l'appui
    ipc.writeUB(0x66C0, 0) -- Remise à zéro propre

end

print("Script MCDU démarré")
event.offset("66C0", "UB", "FMC_KEY")

L'offset reçoit bien la valeur mais la LVAR n'est pas toujours exécutée.
 
Dernière édition:
Je ne comprends toujours pas pourquoi cela fonctionne si mal. Incompatibilité entre MSFS 2020 et SIOC/LUA, erreur dans mon script. Si quelqu'un a une piste, je suis preneur.
 
Salut ,
Je ne fait pas de script LUA mais quand tu écrits du code Sioc , tu y place beaucoup de lignes inutiles.
Je te donne un exemple :
Var 1112, Name FMC_EXEC_L, Link FSUIPC_INOUT, OFFSET $66CB, Length 2
{
if &FMC_EXEC_L = 1
{
&OUTPUT2 = 1
}
else
{
&OUTPUT2 = 0
}
}
tu devrais écrire comme suit pour être plus clair et moins long dans ton code :
Var 1112, Name FMC_EXEC_L, Link FSUIPC_INOUT, OFFSET $66CB, Length 2
{
&OUTPUT2 = &FMC_EXEC_L
}
C'est juste une simple remarque.
Bat
JeanMi
 
Alors, je ne connais pas la partie qui a été traitée par JeanMi, mais sur la partie de code LUA j'ai des petites remarques à faire...

L'entrée de ta fonction actuelle :

function FMC_KEY()
-- Lecture de l'offset
key = ipc.readUB(0x66C0)
print("Appui détecté : key =", key)
...

Il t'est proposé d'utiliser un passage par paramètre dans la bibliothèque de fonction sur cet "Event".
Autant l'utiliser...;)

function FMC_KEY(offset, value)

Avec cette structure, tu récupères directement en variable l'offset et sa valeur qui t'ont servi dans ton déclencheur.(y)



Un autre truc!...

Tu as structure conditionnelle très longue du type :

if key == 1 then
ipc.writeLvar('L:GNLU910_L_FMS_Lsk_1L', 1)
elseif key == 2 then
ipc.writeLvar('L:GNLU910_L_FMS_Lsk_2L', 1)
elseif key == 3 then
ipc.writeLvar('L:GNLU910_L_FMS_Lsk_3L', 1)
...

Perso, j’accélère le mouvement car c'est une structure qui consomme de temps CPU.

Je l'écris comme cela :

if key == 1 then
ipc.writeLvar('L:GNLU910_L_FMS_Lsk_1L', 1)
do return end

elseif key == 2 then
ipc.writeLvar('L:GNLU910_L_FMS_Lsk_2L', 1)
do return end

elseif key == 3 then
ipc.writeLvar('L:GNLU910_L_FMS_Lsk_3L', 1)
do return end
...


Avec cette forme d'écriture, tu sors directement de la boucle conditionnelle lorsque la condition est remplie.
Il n'y a aucune autres évaluations!...;)
 
Dernière édition:
Retour
Haut