Vous n'êtes pas identifié(e).
@ Bo : Je vais déjà essayer de maîtriser un module radio ... C'est sûr que plusieurs modules c'est pratique en plus de faire un bel effet ... ... Mais je reste humble, et dans mes limites techniques pour l'instant !
@ Patrick : Je tiens à arriver au bout ... Mais ça va être plus long que prévu ! Hier soir, au lieu de coder, j'ai essayé de réfléchir à l'arborescence de ce que je voulais mettre en place, histoire de ne pas écrire des tas de lignes pour rien ...
Donc en gros :
1- Lorsque le Module radio est initialisé, je dois mémoriser la position des deux sélecteurs. (pour moi, par défaut, COM1 et NAV1)
2- Lorsque je mets l'avionique en service, je dois synchroniser COM1 et NAV1 les deux sélecteurs précédemment mémorisés de FSX vers le module radio.
3- Lorsque je change un sélecteur de position, je dois mémoriser sa nouvelle position et synchroniser l'affichage en fonction (en tenant compte du second sélecteur, et de l'affichage associé)
Vu que moi je n'ai qu'un seul module ( dédicace à Bo ), je garde mon sélecteur du haut en COM1, puis je jongle avec le second sélecteur pour les autres fonctions. Je pense me focaliser sur ce fonctionnement dans un premier temps, histoire d'essayer d'arriver à un résultat.
Si c'est ok, je n'aurai plus qu'à adapter le code dans l'autre sens ...
Voilà... il n'y a plus qu'à
ça a l'air tout facile, dit comme ça !
J'entre en mode codeur (mais modeste,hein !) Je crois que je vais pondre un truc qui va pas fonctionner, et Patrick va devoir s'arracher les cheveux pour m'aider ...
Bonjour Bo,
Sois rassuré, je ne tienspas à lâcher le morceau ! Du moins, tant que Patrick et Philippe ont la patience de me donner les billes nécessaires !
Amitiés.
Patrick,
Je te ferai un petit topo sur le DME (que je n'ai pas encore utilisé) et le XPDR.
Quant à la logique de Saïtek, peut-être est-ce en vue de cockpits bien "garnis" avec de nombreux modules radio, ce qui permet d'en dédier un aux COM, un aux NAV, etc... ?
Amtiés.
Bonjoour Patrick,
Merci pour le code corrigé et expliqué; C'est vraiment une aide très précieuse ...
Je n'ai rien pu faire hier faute de temps. De plus, j'ai pensé à quelques détails concernant mon approche de la gestion du Radio Panel :
En partant du principe que la ligne de code qui permet de configurer son affichage tient compte des 4 valeurs (2 Active / 2 stand-by) :
s=string.char(0,241,v1,v2,v3,v4,241,v5,v6,v7,v8,241,v9,v10,v11,v12,241,v11,v12,v13,v14,v15,0,0)
Donc, si à l'aide des bouton rotatifs du haut, je modifie la Com1 Stand-By, je dois avant tout lire les valeurs Com1 active, nav1 active et nav2 stand-by, pour pouvoir les réutiliser dans la fameuse ligne de commande, sans les modifier.
Cela implique que je dois savoir sur quelles position sont mes deux selecteurs (com1, com2, ...) pour pouvoir connaître le format des infos à passer. Il me faudrait donc initialiser deux variables globales indiquant l'état des deux sélecteurs.
A mettre en oeuvre avec ton code (après lecture plus pointue et compréhension !)
Amitiés.
Et encore merci pour le temps consacré.
Olivier.
Bonjour Philippe,
J'espère que vous passez de bonnes vacances ...
Amitiés.
Bonjour Patrick,
J'ai perdu beaucoup de temps à essayer de mettre place une boucle pour traiter les infos à envoyer au radiopanel après avoir mis en route l'avionique.
En gros ce que je voulais faire :
- Création d'un array avec la valeur des offsets désirés (par ex com1, com1stb, com2 et com2 stb)
- une boucle : Pour chaque valeur dans l'array, traitement de celui-ci et génération des variables.
- écriture des variables dans le module Saïtek
Tout cela dans le but de minimiser le code et les répétitions.
Voici ce que j'avais imaginé, et qui bien entendu ne fonctionne pas. Mais le principe y est :
ComArray = {ipc.readUW(0x034E), ipc.readUW(0x034E), ipc.readUW(0x3118),ipc.readUW(0x311C)}
for i, v in ipairs(ComArray) do
ipc.log(i,v)
-- Conversion en HEX
setval = DEC_HEX(v)
-- Extraction du 1er chiffre et conversion "saïtek"
ipc.log(string.sub(setval, 1, 1))
v[i] = 240 + tonumber(string.sub(setval, 1, 1))
-- Extraction du 2eme chiffre et conversion "saïtek"
ipc.log(string.sub(setval, 2, 2))
v[i] = 208 + tonumber(string.sub(setval, 2, 2))
-- Extraction du 3eme chiffre et conversion "saïtek"
ipc.log(string.sub(setval, 3, 3))
v[i] = 240 + tonumber(string.sub(setval, 3, 3))
-- Extraction du 4eme chiffre et conversion "saïtek"
ipc.log(string.sub(setval, 4, 4))
v[i] = 240 + tonumber(string.sub(com1, 4, 4))
end-- Définition de la variable s : Valeurs à écrire dans le module Saïtek
s=string.char(0,241,v1,v2,v3,v4,241,v5,v6,v7,v8,241,v9,v10,v11,v12,241,v11,v12,v13,v14,v15,0,0)
-- Envoi des valeurs dans le module Saïtek
com.writefeature (devradio, s, wrfradio)
end
N'y arrivant pas, j'ai donc écrit ceci, qui fonctionne parfaitement :
Ce code me semble très lourd et répétitif, même s'il a le mérite d'être"simple". En le collant ici, je viens de tilter que je pourrais appeler la fonction avec des paramètres, comme ceci :
RadioInit(com1,com1stb)
Après réflexion, la boucle n'était peut-être pas forcément une très bonne idée pour la suite. Je vais tester ça ! (ainsi que le passage de la fréquence Stand-by à Active) ... Je suis ambitieux aujourd'hui !
Il est aussi temps que je note précisément ce que je veux faire avec ce module Radio et les interactions que cela engendre avec FSX, pour ne pas partir dans tous les sens ...
Au plaisir de lire ton avis sur tout ça ...
PS : Je pensais t'avoir posé la question, mais je ne la retrouve pas : je reviens sur les valeurs retournées par le module. Qui sont l'addition de plusieurs bits. Moi j'étais parti sur la somme de ces bits, et toi tu en as sélectionné un. Comment détermines-tu, pour une valeur, le bit qui est réellement concerné par l'action ?
Bonjour Patrick,
Merci pour tes explications. Bon, finalement, je n'étais pas si loin du but ! ça me rassure un peu...
Mes deux bourdes :
- string.sub(test, 1) au lieu de string.sub(test, 1, 1) ... Lecture inattentive de ma part. Et le pire c'est que d'ordinaire, je mets des ipc.display, des ipc.log, ou des MsgBox dans d'autres cas ... Pourquoi ne l'ais-je pas fait hier ? Mystère !
- J'avais déjà utilisé tonumber() dans mon code, mais sans succès. Par exemple, je faisais :
tonumber(v1) au lieu de tonumber(string.sub(test, 1, 1)). Je faisais une conversion après ... Mais pour moi cela revenait au même ...
Voici donc un code qui fonctionne parfaitement (en plus d'être considérablement simplifié !)
Je suis en train de programmer ça pour l'initialisation du module Saïtek quand le switch "Avionic" est basculé sur OFF. Essais ce soir ....
une bonne partie de la journée à grenouiller sur le web pour un résultat décevant.
Objectif ? Lire la fréquence COM1 de FSX pour l'afficher sur le Radio Panel.
La lecture :
com1_frq = ipc.readUW(0x034E)
Me donne une valeur Décimale. Alors je la convertis grâce à la fonction ci-dessous (pas de moi ...)
function DEC_HEX(IN)
local B,K,OUT,I,D=16,"0123456789ABCDEF","",0
while IN>0 do
I=I+1
IN,D=math.floor(IN/B),math.mod(IN,B)+1
OUT=string.sub(K,D,D)..OUT
end
return OUT
end
Du coup j'exécute la commande :
test = DEC_HEX(com1_frq)
J'obtiens dans mon exemple, 3425. Ce qui est cohérent, puisque le premier chiffre est implicitement 1.
Donc la fréquence que j'obtiens ainsi est 134,25 qui est bien celle affichée sur le com1 de FSX.
là où je sèche complètement, c'est comment injecter ces valeurs dans cette ligne de commande, représentées ici par v1,v2,v3,v4 :
s=string.char(0,241,v1,v2,v3,v4,241,241,209,241,241,242,242,210,242,242,243,243,211,243,243,0,0)
car quoi que je fassed, j'obtien un message d'erreur :
[E] *** LUA Error: ...\Microsoft Flight Simulator X\Modules\RadioPanel.lua:134: bad argument #3 to 'char' (number expected, got nil)
Très naîvement, j'ai testé ce code, où test est la valeur extraite (3425). Il va de soit qu'en plus de faire de très nombreuses et à mon avis superflues lignes de code, la valeur v1 en l'état est refusée dans le string.char ...
if string.sub(test, 1) == 0 then
v1 = 240
elseif string.sub(test, 1) == 1 then
v1 = 241
elseif string.sub(test, 1) == 2 then
v1 = 242
elseif string.sub(test, 1) == 3 then
v1 = 243
elseif string.sub(test, 1) == 4 then
v1 = 244
elseif string.sub(test, 1) == 5 then
v1 = 245
elseif string.sub(test, 1) == 6 then
v1 = 246
elseif string.sub(test, 1) == 7 then
v1 = 247
elseif string.sub(test, 1) == 8 then
v1 = 248+0
elseif string.sub(test, 1) == 9 then
v1 = 249
end
Tout ça pour dire que j'y travaille ... c'est pas brillant, mais je creuse ...
Pour aujourd'hui je me mets en stand-by ... je n'y vois plus clair, et toutes ces infos lues aujourd'hui se mélangent lamentablement !
Amitiés.
=8
Non non, je te rassure ! Les drivers Saïtek ont été virés sur le champ et SPAD est inactif ! Je sais que je suis un newbee de base, mais quand même !!!
Ceci dit, tu as raison, on ne sait jamais ... Dans un grand moment de fatigue ...Ou le nez dans le guidon ...
Passe un bon dimanche, et passe quand tu peux !
Bonsoir Patrick,
Le rouge de la honte me monte aux joues ! Au cours de mes essais sur les LEDS, je me suis demandé si FSX n'écrasait pas mon paramétrage, alors que je fais tous mes tests avec mon C172 à train fixe ... argh ! Si.
Au premier vol chargé avec le beech baron par défaut, les trois leds vertes s'allument et restent allumées ...
En attendant, tes premiers essais d'affichage sont plutôt bons. As-tu essayé d'afficher une fréquence réelle sur un des afficheurs (ex : 122.05 en active et 122.25 en stand-by sur Com1 sur l'afficheur du haut)?
Oui j'affiche ces fréquences avec ces deux lignes de code :
s=string.char(0,240,240,208,240,240,241,241,209,241,241,242,242,210,242,242,243,243,211,243,243,0,0)
com.writefeature (devradio, s, wrfradio)
Explications des valeurs :
Code Display
0-9 0-9
10-15 <blank>
This repeats in modulo 16 until a character code of 207.208-217 0.-9. (decimal dot set)
218-223 .
224-239 -
240-248 0-9
250-255 <blank>
En revanche, Via le bouton du ACT/STBY, je ne parviens à les intervertir ...
C'est clair qu'on n'est pas sortis de l'auberge, et que je vais ramer encore quelques heures. Maisc'est franchement passionant ...
Encore, merci. Amitiés.
Patrick,
J'ai testé ton script concernant les leds. Résultat :
Quand RED s'affiche, elles flashent rouge puis séteignent.
Quant GREEN s'affiche, elles flashent vert puis s'éteignent
OFF s'affiche, tout est déjà éteint.
Quant à ton script RadioPanel.lua ... Il fonctionne parfaitement. Du coup, si j'ai bien compris la conversion de la valeur en bit grâce à ta méthode, j'avoue ne pas saisir ce qui te permet de déterminer que dans le cas ou 2 bits sont modifiés pour un bouton, lequel des deux concerne l'action en cours ?
Erratum : Les boutons de sélection de fréquences ne fonctionnent pas à tous les coups. Cela dépend de la position du sélecteur (Com1, com2 ...)
Edit : a l'aide de ton script, et avec le code concernant les leds, j'ai pu afficher des valeurs pour COM1.
Ce code :
function TLS_COM1()
testVar = ipc.readUD(0x3358)
if logic.And(testVar,1) ~= 0 then
ipc.display('com1_haut',10)
devradio = ipc.get("devradio")
wrfradio = ipc.get("wrfradio")
s=string.char(0,242,240,208,240,240,241,241,209,241,241,242,242,210,242,242,243,243,211,243,243,0,0)
com.writefeature (devradio, s, wrfradio)
ipc.log('com1_haut')
end
end
Donne ceci :
[img align=c]http://www.fsfiles.org/flightsimshotsv2/images/2014/11/15/CoM2l.jpg[/img]
Bonjour Patrick,
Pendant que je t'ai sous la main pour effectuer les tests, peux-tu me dire si tu allumes les Led en rouge et vert à la fois (valeur 63 pour le deuxième octet) celles-ci changent-elles réellement de couleur? (Peut-être en ambre).
Je viens de faire le test. La couleur dominante est le vert, et un semblant de rouge (ambre) très faible ...
Précision complémentaire : Les leds s'allument les temps d'une boucle. La commande en elle même ne fonctionne pas comme un interrupteur ON/OFF
Je teste le reste cet après midi.
Amitiés, et bon week-end.
@ Pat :
Tu m'en vois très heureux car sans matériel pour pouvoir tester (malgré la proposition de Phillipe), j'en étais resté aux conjectures.
C'est agaçant !!! Même sans le matériel tu y arrives ... ...
Moi je l'ai sous la main et je rame pour allumer trois pauvres leds !
@ Pat :
Mon RadioPanel.lua ne pouvait pas fonctionner, et pour cause ! Les valeurs testées étaient erronées ...
Je m'étais basé sur un document déjà cité ici, et trouvé sur le forum de Pete. Du coup, un utilisant les logs de fsX, plus la méthode de la calculatrice ( ... merci ! ...) j'ai pu faire un too des valeurs à scanner :
Bouton Valeur Bit
Commandes du haut
Com1 129 0+7 2^0 + 2^7 = 1 + 129 = 129
Com2 130 1+7 2^1 + 2^7 = 2 + 128 = 130
Na1 132 2+7 2^2 + 2^7 = 4 + 128 = 132
Nav2 136 3+7 2^3 + 2^7 = 8 + 128 = 136
Adf 144 4+7 2^4 + 2^7 = 16 + 128 = 144
Dme 160 5+7 2^5 + 2^7 = 32 + 128 = 160
XPDR 192 6+7 2^6 + 2^7 = 64 + 128 = 192
Outer ho 524417 1+7+19 2^1 + 2^7 + 2^19 = 1 + 128 + 524288 = 524417
Outer aho 262273 1+7+18 2^1 + 2^7 + 2^18 = 1 + 128 + 262144 = 262273
Inner ho 65665 1+7+16 2^1 + 2^7 + 2^16 = 1 + 128 + 65536 = 65665
Inner aho 131201 1+7+17 2^1 + 2^7 + 2^17 = 1 + 128 + 131072 = 131201
StdBy 16576 6+7+14 2^6 + 2^7 + 2^14 = 64 + 128 + 16384 = 16576Commandes du bas
Com1 129 0+7 2^0 + 2^7 = 1 + 128 = 129
Com2 257 0+8 2^0 + 2^8 = 1 + 256 = 257
Na1 513 0+9 2^0 + 2^9 = 1 + 512 = 513
Nav2 1025 0+10 2^0 + 2^10 = 1 + 1024 = 1025
Adf 2049 0+11 2^0 + 2^11 = 1 + 2048 = 2049
Dme 4097 0+12 2^0 + 2^12 = 1 + 4096 = 4097
XPDR 8193 0+13 2^0 + 2^13 = 1 + 8192 = 8193
Outer ho 4194433 0+7+22 2^0 + 2^7 + 2^22 = 1 + 128 + 4194304 = 4194433
Outuer aho 8388737 0+7+23 2^0 + 2^7 + 2^23 = 1 + 128 + 8388608 = 8388737
Inner ho 2097281 0+7+21 2^0 + 2^7 + 2^21 = 1 + 128 + 2097152 = 2097281
Inner aho 1048705 0+7+20 2^0 + 2^7 + 2^20 = 1 + 128 + 1048576 = 1048705
StdBy 32897 1+7+15 2^1 + 2^7 + 2^15 = 2 + 128 + 32768 = 32898
Il y a deux valeurs qui ne coîncident pas, C'est le Stand-by du bas ...
En revanche, dans la console de linda (et dans le log FSX), les valeurs sont correctes si je "descends" de com1 à xpdr. Mais si je "remonte" de xpdr à com1, un décalage se crée.
Par exemple si je suis sur COM2, c'est NAV1 qui s'affiche. Et quand je reviens en COM1, c'est l'affichage du knob du haut qui s'affiche ...
Mon script RadioPanel.lua :
@ Pat et Philippe :
Sur les indications de pat, cela fonctionne parfaitement pour les leds du Switch Panel !
Encore une fois, bravo ! C'est vraiment une logique qu'il faut acquérir ...
Voilà mon script de test, led.lua : (juste pour tester et s'amuser, hein !)
test = 0
dev = ipc.get("dev")
wrf = ipc.get("wrf")while test < 20 do
ipc.display('red',20)
s = string.char(0,56)
com.writefeature (dev, s, wrf)
test = test+1
endtest = 50
if test < 100 then
while test <100 do
ipc.display('green',20)
s = string.char(0,07)
com.writefeature (dev, s, wrf)
test = test+1
end
end
@ Bo : Malheureusement SPAD ne règle pas tous mes soucis. Et c'est bien dommage, car ça serait une solution simple et redoutablement efficace ! Autant en profiter pour retrousser les manches et s'y mettre !
@ Pat : La radio du A2A fait appel à des contrôles FSX et à des L:Var. Mais la difficulté n'est pas. Bien que le HIDRadio.lua soit bien déclaré, toute action de mon RadioPanel.lua ne fonctionne pas. Dans le doute, j'ai juste fait des ipc.display, et il ne se passe strictement rien.
De plus, si je déclare le HIDRadio en plus du HIDSwitch, le SwitchPanel ne fonctionne plus. Pour l'instant je me concentre sur le RadioPanel, déclaré seul dans le FSUIPC4.ini ...
@ Philippe : Si j'ai bien compris, si je souhaite utiliser cette comande, je devrais l'écrire ainsi :
com.writefeature (0x66C0, 0, 07) pour avoir les leds vertes ?
dev=0x66C0 , le switch panel
0= le premier octet est égal à zéro
07 = Les leds vertes
J'ai tout bon ou bien .... ?
Amitiés.
@ Bo :
Dreambox, mon avionique s’allume que quand j’allume le master avionique et la batterie wink pas quand mon ordi est ON, c'est quoi cette histoire? wink
Par-contre, je suis pas arrivé à avoir un on et off indépendant de chaque module (mon PA, mes 3 radios et mon BIP panel), il leur manque un interrupteur au module Saitek wink
Je veux bien croire que sur ce forum (et sur bien d'autres), les questions peuvent parfois laisser pantois ... Mais il faut bien commencer un jour ... D'où mes remerciements aux acteurs du forum, pour leurs connaissances, leur patience et leur présence régulière ...
Smiley qui s'incline !
Amitiés.
@ Philippe : Tu as bien résumé les choses ... Et je crois que notre ami Bo est d'humeur taquine ...
@ Bobonhom : Cher cousin ! Avant tout, merci, au passage, pour toutes tes participations riches d'apprentissages sur ce forum !
Philippe a déjà répondu en partie à la question. C'est vrai, il y a SPAD et LINDA. Mais ... Je découvre l'univers FSX et de tout ce qui gravite autour. Ou plus précisément, pour répondre à quelques questions à priori très simples, je suis amené à creuser un peu.
Confronté à un souci entre mes modules Saïtek et mon C172 de A2A fraîchement acquis, j'en arrive, au fil des recherches, à découvrir FSUIPC que je possédais en ignorant crassement toutes ses possibilités, Lua, Linda et de bien d'autres choses encore.
Les premiers essais que j'ai fait nécessitaient de combiner SPAD et LINDA ... C'est vrai, ça faisait ce que je voulais (ou presque), mais cela restait superficiel et surtout, je n'avais réellement aucune idée de la mécanique du système ...
Donc, en avant pour FSUIPC, LUA, A2A, GOOGLE et le FORUM ...
Le but n'est vraiment pas de réinventer la roue : SPAD et LINDA sont vraiment de très beaux outils, et je n'ai pas la prétention de vouloir faire mieux. Seulement de progresser dans mes connaissances et dans l'univers de mon simulateur adoré !
Faire les scripts qui permettent à ma très modeste config de fonctionner correctement ...
Et comme l'a dit Philippe, je souhaite également interfacer des boutons physiques à mes gauges virtuelles; autant pur le plaisir du réalisme que celui de la découverte et de l'apprentissage ... La cerise sur le gâteau ? On fait connaissance avec des gens passionnés qui partagent leurs connaissances et qui ont une patience folle !
Bref : apprendre, découvrir et partager, autour de passions communes ...
Je crois que c'est une bonne raison ...
Amitiés !
Me revoilà à l'arrêt ...
- Je n'imaginais pas me trouver coincé sur ce sujet : L'usage des contrôles FSX en ce qui concerne la radio et l'avionique en général (autopilote, transpondeur ...) J'ai bien les offsets à modifier, mais j'ignore quelles valeurs, ou quelles syntaxes utiliser. De plus, ne maîtrisant pas l'usage radio/autopilote (newbie de base), je ne suis pas certain d'opter pour les bons offsets dans mes tests (dont les résultats sont à peu près nuls d'ailleurs !)
- Le second point, je l'avais vu venir : L'affichage des LEDS et des afficheurs sur les modules Saïtek ... Cet article y fait référence, mais j'ignore comment articuler les choses ...
Bref, Je croyais avoir bien avancé, mais je ne suis pas allé très loin...
Je repasse en mode investigations !
Edit : J'ai trouvé une piste chez Pete Dowson pour les contrôles FSX ... Je teste ce soir !
Je me cite ( ) :
EDIT : De plus, dans la console Linda (vraiment très pratique, un Must Have), j'ai d'incessants contrôles qui tournent en boucle. Je suppose que j'ai donc dans un des LUA quelque chose qui met un peu le souc ...
Edit 2 : Dans aucun de mes LUA je cherche à adresser ces contrôles ...
Il s'agit de PANEL_ID_OPEN et PANEL_ID_CLOSE :
Ce comportement est normal et spécifique aux fonctionnalités AccuSim de A2A. Voir ce bref post
Bonjour Pat,
Merci pour ton message vraiment sympa. C'est vrai que plonger dans FSUIPC et LUA semble ouvrir la voie à de nombreuses possibilités dont je ne soupçonne encore même pas toute l'étendue ... Vous savez (Philippe et toi) donner les infos avec pédagogie et c'est pas donné à tout le monde ...
Et j'ai bien conscience d'être encore bien loin de maîtriser le sujet (les astuces viendront avec l'habitude et l'expérience), mais je commence à dégrossir les contours et c'est déjà pas si mal après m'être creusé la tête tout seul et en vain !
Pour répondre à ta question, le fait de manipuler simultanément plusieurs interrupteurs ne semble pas poser de problèmes; toutes les actions sont bien répercutées dans FSX. Mon script qui est désormais complet fonctionne bien, mais il comporte deux failles :
- Si pour une raison quelconque, (par exemple, batterie à plat), je bascule le magneto sur START, il va automatiquement revenir sur BOTH. Et du coup, derrière c'est u peu l'anarchie dans la gestion. C'est le gros point que je dois améliorer.
- De manière aléatoire, les Master BAT et ALT agissent bizarrement. Actionné plusieurs fois, le master BAT finit pas agir sur les deux (BAT et ALT). Parfois, il me faut actionner plusieurs fois le ALT pour le couper enfin ...
Comme tu le dis, ce n'est pas à priori une procédure très "académique" que de les actionner ainsi plusieurs fois de suite, mais je suppose que de le prévoir peut me prémunir de tracas ...
Quant au magneto, la doc A2A fait référence à une L:var, mais celle-ci influe sur la valeur du magneto, mais pas sur le positionnement de la clé dans le VC. Du coup j'utilise également le Magneto1_set.
Très bonne journée et au plaisir de te lire !
Edit : Effectivement, suite à la question de Philippe, j'ai posté sur le forum de l'admirable Pete Dowson. Il fait un travail remarquable et est d'une efficacité redoutable. J'espère avoir une réponse au sujet des leds, car je reconnais très humblement que j'aurais bien besoin d'un exemple de code pour que ça soit un peu plus ... lumineux ! Et j'ai bon espoir de pouvoir apporter une réponse à Philippe ce qui serait un juste retour des choses ...
Edit bis : Après le Switch Panel, il me reste le Radio Panel, et le Multi Panel ... Diantre ... ...
... Encore quelques heures de pressage de citron en vue !!!
Edit ter : J'oubliais le Bip Panel !!! Mais là, sans SPAD, point de salut à mon avis
... Malgré des heures de recherches (je n'ai peut-être pas regardé au bon endroit), je n'ai rien trouvé qui permette de le programmer via LUA.
Voilà le script dans sa dernière version :
-- Init Cold and Dark ---
ipc.writeLvar('Magnetos1Pct', 0)
ipc.writeLvar('Battery1Switch', 0)
ipc.writeLvar('Eng1_GeneratorSwitch', 0)
ipc.control(66701,0)
ipc.control(66237,0)
ipc.control(66031,0)
ipc.control(65858,0)
ipc.control(66162,0)
ipc.control(66058,0)
ipc.control(66239,0)
ipc.control(66379,0)
ipc.control(66054,0)
ipc.control(66054,0)
ipc.control(66240,0)
ipc.control(66061,0)
ipc.control(66080,0)
percent = 0-- Gestion du Magneto ---
function Magneto_OFF()
-- Magneto Selector OFF
-- 8192 : 2^13
testVar = ipc.readUD(0x66C0)
if logic.And(testVar,8192) ~= 0 then
ipc.writeLvar('Magnetos1Pct', 0)
ipc.control(66400,0)
end
end
function Magneto_LEFT()
-- Magneto Selector LEFT
-- 16384 : 2^14
testVar = ipc.readUD(0x66C0)
if logic.And(testVar,16384) ~= 0 then
ipc.writeLvar('Magnetos1Pct', 16)
ipc.control(66400,1)
end
endfunction Magneto_RIGHT()
-- Magneto Selector RIGHT
-- 32768 : 2^15
testVar = ipc.readUD(0x66C0)
if logic.And(testVar,32768) ~= 0 then
ipc.writeLvar('Magnetos1Pct', 38)
ipc.control(66400,2)
end
endfunction Magneto_BOTH()
-- Magneto Selector BOTH
-- 65536 : 2^16
testVar = ipc.readUD(0x66C0)
if logic.And(testVar,65536) ~= 0 then
ipc.writeLvar('Magnetos1Pct', 64)
ipc.control(66400,3)
end
end
function Magneto_START()
-- Magneto Selector START
-- 131072 : 2^17
testVar = ipc.readUD(0x66C0)
if logic.And(testVar,131072) ~= 0 then
ipc.writeLvar('Magnetos1Pct', 100)
ipc.control(66400,4)
end
end-- Gestion des Switchs
function Master_BAT()
-- Master Battery Bit : 2^0 = 1
testVar = ipc.readUD(0x66C0)
if logic.And(testVar,1) ~= 0 then
ipc.writeLvar('Battery1Switch', 1)
else
ipc.writeLvar('Battery1Switch', 0)
end
endfunction Master_ALT()
-- Master Alternator Bit : 2^1 = 2
testVar = ipc.readUD(0x66C0)
if logic.And(testVar,2) ~= 0 then
ipc.writeLvar('Eng1_GeneratorSwitch', 1)
else
ipc.writeLvar('Eng1_GeneratorSwitch', 0)
end
end
function Avionics()
-- Avionics Bit : 2^2 = 4
testVar = ipc.readUD(0x66C0)
if logic.And(testVar,4) ~= 0 then
ipc.control(66701,1)
else
ipc.control(66701,0)
end
endfunction Fuel_PUMP()
-- Fuel Pump Bit : 2^3 = 8
testVar = ipc.readUD(0x66C0)
if logic.And(testVar,8) ~= 0 then
ipc.control(66237,1)
else
ipc.control(66237,0)
end
end
function De_ICE()
-- De-Ice Bit : 2^4 = 16
testVar = ipc.readUD(0x66C0)
if logic.And(testVar,16) ~= 0 then
ipc.control(66031,1)
else
ipc.control(66031,0)
end
endfunction Pitot_HEAT()
-- Pitot Heat Bit : 2^5= 32
testVar = ipc.readUD(0x66C0)
if logic.And(testVar,32) ~= 0 then
ipc.control(65858,1)
else
ipc.control(65858,0)
end
endfunction Cowl_FLAPS()
-- Cowl Bit : 2^6= 64
testVar = ipc.readUD(0x66C0)
if logic.And(testVar,64) ~= 0 then
ipc.control(66162,1)
else
ipc.control(66162,0)
end
end
function Panel_LIGHT()
-- Panel LIGHTs Bit : 2^7= 128
testVar = ipc.readUD(0x66C0)
if logic.And(testVar,128) ~= 0 then
ipc.control(66058,1)
else
ipc.control(66058,0)
end
endfunction Beacon_LIGHT()
-- Beacon LIGHTs Bit : 2^8= 256
testVar = ipc.readUD(0x66C0)
if logic.And(testVar,256) ~= 0 then
ipc.control(66239,1)
else
ipc.control(66239,0)
end
end
function Nav_LIGHT()
-- Nav LIGHTs Bit : 2^9= 512
testVar = ipc.readUD(0x66C0)
if logic.And(testVar,512) ~= 0 then
ipc.control(66379,1)
else
ipc.control(66379,0)
end
endfunction Strobe_LIGHT()
-- Strobe LIGHTs Bit : 2^10= 1024
testVar = ipc.readUD(0x66C0)
if logic.And(testVar,1024) ~= 0 then
ipc.control(66054,1)
else
ipc.control(66054,0)
end
end
function Taxi_LIGHT()
-- Taxi LIGHTs Bit : 2^11= 2048
if logic.And(testVar,2048) ~= 0 then
ipc.control(66240,1)
else
ipc.control(66240,0)
end
endfunction Landing_LIGHT()
-- Landing LIGHTs Bit : 2^12= 4096
testVar = ipc.readUD(0x66C0)
if logic.And(testVar,4096) ~= 0 then
ipc.control(66061,1)
else
ipc.control(66061,0)
end
end
-- Gestion du Train ---
function Gear_UP()
-- Landing Gear Up Bit : 2^12= 262144
testVar = ipc.readUD(0x66C0)
if logic.And(testVar,66079) ~= 0 then
ipc.control(66079,1)
end
endfunction Gear_DOWN()
-- Landing Gear Down Bit : 2^12= 524288
testVar = ipc.readUD(0x66C0)
if logic.And(testVar,66080) ~= 0 then
ipc.control(66080,0)
end
end-- Events Magneto --
event.offsetmask(0x66C0, 8192,'UD', 'Magneto_OFF')
event.offsetmask(0x66C0, 16384,'UD', 'Magneto_LEFT')
event.offsetmask(0x66C0, 32768,'UD', 'Magneto_RIGHT')
event.offsetmask(0x66C0, 65536,'UD', 'Magneto_BOTH')
event.offsetmask(0x66C0, 131072,'UD', 'Magneto_START')-- Events Switchs --
event.offsetmask(0x66C0, 1,'UD', 'Master_BAT')
event.offsetmask(0x66C0, 2,'UD', 'Master_ALT')
event.offsetmask(0x66C0, 4,'UD', 'Avionics')
event.offsetmask(0x66C0, 8,'UD', 'Fuel_PUMP')
event.offsetmask(0x66C0, 16,'UD', 'De_ICE')
event.offsetmask(0x66C0, 32,'UD', 'Pitot_HEAT')
event.offsetmask(0x66C0, 64,'UD', 'Cowl_FLAPS')
event.offsetmask(0x66C0, 128,'UD', 'Panel_LIGHT')
event.offsetmask(0x66C0, 256,'UD', 'Beacon_LIGHT')
event.offsetmask(0x66C0, 512,'UD', 'Nav_LIGHT')
event.offsetmask(0x66C0, 1024,'UD', 'Strobe_LIGHT')
event.offsetmask(0x66C0, 2048,'UD', 'Taxi_LIGHT')
event.offsetmask(0x66C0, 4096,'UD', 'Landing_LIGHT')-- Events Gear ---
event.offsetmask(0x66C0, 262144,'UD', 'Gear_UP')
event.offsetmask(0x66C0, 524288,'UD', 'Gear_DOWN')
@ Pat :
J'ai ! Merci pour la piste ... Plongé dans la doc de LUA Library, j'ai trouvé ceci :
event.offsetmask(offset, mask,"type", "function-name")
Ce qui adapté à mon script, donne ceci (partiel car juste un test, week-end en famille !) :
function Fuel_Pump()
-- Fuel Pump Bit : 2^3 = 8
testVar = ipc.readUD(0x66C0)
if logic.And(testVar,8) ~= 0 then
ipc.control(66237,1)
else
ipc.control(66237,0)
end
endfunction Beacon_Light()
-- Beacon Lights Bit : 2^8= 256
testVar = ipc.readUD(0x66C0)
if logic.And(testVar,256) ~= 0 then
ipc.control(66239,1)
else
ipc.control(66239,0)
end
endfunction Strobe_Light()
-- Strobe Lights Bit : 2^10= 1024
testVar = ipc.readUD(0x66C0)
if logic.And(testVar,1024) ~= 0 then
ipc.control(66054,1)
else
ipc.control(66054,0)
end
endevent.offsetmask(0x66C0, 8,'UD', 'Fuel_Pump')
event.offsetmask(0x66C0, 256,'UD', 'Beacon_Light')
event.offsetmask(0x66C0, 1024,'UD', 'Strobe_Light')
Ne me reste plus qu'à adresser tous les boutons du switch panel et tester l'ensemble ...
Je vous tiens au courant !
Pat, encore un grand merci ! Je n'ai pas trouvé le smiley qui s'incline, mais l'intention y est !!!
Edit : Le code mérite sûrement d'être amélioré ou simplifié ...
Pour une fois que je peux très modestement aider !
Dans l'article cité, il y a cette commande : com.writefeature(dev, s, wrf) ....
Je ne parviens pas à trouver de référence à son sujet ...