MobiFlight Community Support

Welcome to the forum for MobiFlight! Feel free to reach out to the community in case you have questions, issues or just want to share great ideas or details about your latest home cockpit project.

You like MobiFlight? Donate via PayPal and support the MobiFlight development. Thanks! 

05/03/2024 - This forum is read-only

The community support for MobiFlight has moved exclusively over to our Discord server. Register for free and enjoy more interactive functions like image and video upload, voice chat. More than 7,000 registered users around the world make it a great experience!

See you on our MobiFlight Community Discord server.

A HUGE Thank You to everyone who participated in the forum, especially obviously to Pizman and Stephan who did an outstanding job over so many years providing an incredible service to the MobiFlight community.

The forum is still providing a lot of good content, hence we keep this information accessible.

icon
Avatar
tommy1332
Posts: 26
Ist es moeglich Werte an mehrere Offsets gleichzeitig zu schreiben?

Bsp: Ich habe einen Button, welcher beim gedrueckt werden, an zwei Offsets schreiben soll. Ist das irgendwie ueber den Connector moeglich?
Wenn nicht, waere das ein Feature-Request.

Zum Hintergrund:
Die Majestic Dash 8 Q400 hat ein Interface, welches man ueber zwei Lvars bedient. Um einen Wert zu schreiben, muss sowohl MJC_VAR_WRITE_VALUE auf 1 gesetzt und MJC_VAR_WRITE_CODE auf einen bestimmten Code gesetzt werden. Am bequemsten waere es jetzt, diese beiden Lvars auf Offsets zu mappen und dann nur noch ueber den Connector an diese beiden Offsets zu schreiben.
2017-10-06 02:57
Avatar
pizman82
Moderator
From: ETSI, Germany
Posts: 6010
Supporter
Hi
Grundsätzlich geht das.... Ich denke aber du brauchst was anderes.......

Zuerst die Mobiflight Variante....
Hier ist die Frage..... Ist es ein Taster oder ein Kippschalter....
Bei Tasten ist es ganz einfach.... Du machst Commando 1 auf ON PRESS..... Und Commando 2 auf ON RELEASE.

Bei Kippschaltern geht das natürloich nicht aber auch hier gibt es eine Einfache Lösung..... Du erstellst einfach für den betreffenden Schalter 2 INPUT Configs... Beide gehen z.b. auf den Schalter auf PIN xy und sagen ON PRESS ( also wenn der Kippschalter auf ON steht)
Nun musst du in jeder Config schlicht ein commando ausführen. Wichtig hier ist zu wissen das Mobiflight immer von Oben nach Unten arbeitet.... Also die Config die du zuerst erstellst (die Obere in der Liste) wird zuerst ausgeführt..... Millisekunden später dann die 2. Config.
Je nach Kommando kann das aber problematisch werden. Man muss hier je nach funktion vielleicht da FSUIPC Polling etwas reduzieren.

***

Aber jetzt zu deinen speziellen Fall..... Du arbeitest mit LVars.... Also musst du ja eh einen LUA Script haben der die betreffenden Kommandos an die LVAR schreibt.
Warum schreibst du also hier nicht in deinen Script den kompletten Vorgang ?
Beispiel:
Du schreibst mit Mobiflight per INPUT mit dem Schalter z.b. einen Customoffset 66C0 von 0 auf 1 ( Oder einen BIT... geht beides)
Dein LUA Script überwacht diesen betreffenden Offset und wenn der auf 1 geht dann führt er einen Befehl aus ( Wie jetzt auch mit der bekannten Technik)
NUR.... Sagst du jetzt nicht nur er soll "A" machen sondern du sagst er soll A und B hintereinander machen.....
Also in dem Fall erst die Eine LVar schreiben und dann die andere.

Nun kenne ich die Dash nicht..... Womöglich sprichst du hier auch über eine DataPipe..... Also das du für mehrere Schalter diese 2 Offsets brauchst und je nach Schalter wird ein anderer Code gebraucht..... Dann müsste man über eine andere Logic nachdenken..... Z.b. das die schalter dann den CODE an einen Freien Offset schreiben..... Und dein Lua script eine Änderung des Codes in dem Offset erkennt und diesen immer im Anschluss an ne veränderung ausführt.
Good Luck !
2017-10-06 03:49
Avatar
tommy1332
Posts: 26
Danke fuer die Antwort. Das war genau was ich wissen wollte.

Kann ich bei Tastern auch mehrere Input Configs verwenden?

Die von dir genannte Loesung mit dem Lua-Script waere meine Notloesung geworden. Der Plan ist momentan das hier (https://www.mobiflight.com/forum/message/6264.html) gepostete Script zu verwenden. Das spart Offsets ein und ist auch bequemer zu benutzen, da ich nur im Connector arbeiten muss.
2017-10-06 17:29
Avatar
pizman82
Moderator
From: ETSI, Germany
Posts: 6010
Supporter
Grundsätzlich.... Schalter gehen auch nach dem gleichen Prinzip.... Also mit 2 Configs.... Das Problme hier könnte aber sein das du ja mit den Umweg eines Lua Scripts arbeitest.
Angenommen du sagst bei den Schaltern das sie auch ein Release haben...... Also z.b. Schalter eins Soll Offset A auf 1 Setzen beim Drücken und wieder auf 0 beim Loslassen..... Schalter 2 soll Offset B auf Code 1234 setzen beim Drücken......
Das alles passiert sehr schnell..... Ich sehe also die gefahr das bevor dein Lua Script den Change auf Offset 1 erkennt dieser bereits wieder auf 0 swappt. ( Nur als Beispiel)

Probier es einfach aus.


Zu deinen Script;

Die Idee ist gut.... Ich bin da noch nicht wirklich gut drin in Lua Scripting aber würde als Laie sagen er hat 2 Schwächen
1. Du Hast keinen Autostart..... Warum den Script per Taste in FSUIPC starten...., Schreib ihn doch einfach in die IPCReady oder mache ihn abhängig das er immer startet wenn die DASH im Sim geladen wird.
2. Du schreibst dort das diese Methode Offsets spart..... Verpulverst aber für einen Boolean ansich einen Offset Byte obwohl ein BIT reichen würde.
Die Range auf 66C0 wird dir dafür nicht reichen..... Aber du kannst auch die Project Magenta Range verwenden dafür..... Alternativ musst du platzsparender werden.

Mein Fazit.... Versuch es mit deiner Technik.... Ich "vermute" aber das wird keine Lösung sein.

Alternative:
Leider haben wir es noch nicht geschafft per Mobiflight "Lua Makros" direkt zu triggern.... DAS steht aber noch auf der ToDo Liste

Bis das geht ( Falls es Sebastian überhaupt hinbringt) ist die alternative ein Gamecontroller ( ODER Key Press via Mobiflight)
Ziel ist es in FSUIPC für jede Funktion ein eigenes Lua Makro zu Triggern......
Für die Outputs verwendest du weiterhin ein einfaches "Allgemein Makro" das permanent den Zustand der Outputs aus den LVARS holt und auf Offsets schreibt.
Für Inputs verwendest du aber nicht diese Offsets sondern du schreibst direkt die betreffenden LVARS über einzellne Lua Makros.

Auch hier kannst du dir ein "Standard-Makro" schreiben das du nur immer an die betreffende LVar anpasst.
Der Vorteil.... In dem Macro kannst du alles was du brauchst Regeln.... Also z.b das 2 LVars geschrieben werden.... Oder das er erst eine andere LVar lesen soll und je nach deren Zustand was tun soll usw.
DAS ist aufwendig und kompliziert..... Ist aber leider das gewollte "Übel" wenn man mit einen AddOn fliegt das nicht auf FSUIPC arbeitet.

Hoffe das hilft dir irgendwie weiter !
[Last edited by pizman82, 2017-10-07 08:19]
Good Luck !
2017-10-07 08:14
Avatar
tommy1332
Posts: 26
iconQuote:

Angenommen du sagst bei den Schaltern das sie auch ein Release haben...... Also z.b. Schalter eins Soll Offset A auf 1 Setzen beim Drücken und wieder auf 0 beim Loslassen..... Schalter 2 soll Offset B auf Code 1234 setzen beim Drücken......
Das alles passiert sehr schnell..... Ich sehe also die gefahr das bevor dein Lua Script den Change auf Offset 1 erkennt dieser bereits wieder auf 0 swappt. ( Nur als Beispiel)


Da die Lvars nach der Ausfuehrung von der Dash selbst zurueckgesetzt werden, sollte das nicht passieren.

iconQuote:

1. Du Hast keinen Autostart..... Warum den Script per Taste in FSUIPC starten...., Schreib ihn doch einfach in die IPCReady oder mache ihn abhängig das er immer startet wenn die DASH im Sim geladen wird.


Das habe ich mir noch nicht angesehen. Ist sicher sinnvoll. Wenn alles laeuft, kuemmere ich mich darum.

iconpizman82:

2. Du schreibst dort das diese Methode Offsets spart..... Verpulverst aber für einen Boolean ansich einen Offset Byte obwohl ein BIT reichen würde.
Die Range auf 66C0 wird dir dafür nicht reichen.....



Die Idee ist doch aber nur zwei Offsets zu verwenden. Eins fuer MJC_VAR_WRITE_VALUE und eins fuer MJC_VAR_WRITE_CODE. Damit bleibe ich ganz sicher in der freien Offset-Range.
Das Byte (anstatt von einem Bit) wird verwendet, weil die Konfiguration im Connector vereinfacht wird. Wenn man spaeter noch auf die Masks achten muss, schleichen sich leicht Fehler ein. Aber gut waere es natuerlich, wenn das Luascript das unterstuetzen wuerde.

iconQuote:

Alternative:
Leider haben wir es noch nicht geschafft per Mobiflight "Lua Makros" direkt zu triggern.... DAS steht aber noch auf der ToDo Liste


Da freue ich mich schon drauf. Das wuerde mein Script abloesen und das ganze noch einfacher machen.

Die von dir genannte Alternative wuerde ich ja gerne vermeiden. Wenn es auf oben genannten Weg nicht klappt, versuche ich mich mal damit.

Danke fuer die Antworten. Ich werde berichten, ob es geklappt hat.
2017-10-07 17:06
Avatar
pizman82
Moderator
From: ETSI, Germany
Posts: 6010
Supporter
Jetzt hab ich dabei eins noch nicht verstanden.....
Ist der Teil mit den 2 Offsets ( Für die Inputs) ein teil DEINES Scripts oder ist das eine Funktion der DASH ?
icontommy1332:

Die Idee ist doch aber nur zwei Offsets zu verwenden. Eins fuer MJC_VAR_WRITE_VALUE und eins fuer MJC_VAR_WRITE_CODE.



Wie ich dich verstanden habe ist DAS ja im Prinzip eine Data Pipe..... Ich verstehe es so das ALLE inputs der Dash darüber laufen....
Du schreibst einen "Code" auf die eine LVar..... Und danach die andere auf "1". Wenn diese "1" wird, dann führt er den befehl aus der dem Code auf der anderen entspricht.... Also z.b. er schaltet die Landing Lights an bei Code 1234. Danach setzt er beide Lvars wieder auf 0.

Falls ja dann würde ich das trotzdem über einen Lua Script machen...... Also über EINEN Script für alle Schalter. ( Damit du nicht 2 Fubnktionen senden musst.

Ich stelle es mir so vor, das du schlicht in Mobiflight sämtliche Schalter alle auf EINEN Offset setzt.... ( Der Code Offset) . Jeder Schalter setzt den Offset auf einen bestimmten Code, aber immer der gleiche.

Dein Lua Script sagt nun.....
-Lese DIESEN Offset
-Wenn Wert = 0 dann beginne wieder von vorne ( Also lese wieder den Offset usw.)
-Wenn Wert NICHT 0, DANN Schreibe Wert auf die Code Lvar und Schreibe 1 auf die Initialisierungs LVar..... DANN Setze Offset wieder auf 0

Somit.... Solange kein Schalter betätigt wird ist der Wert "0" und der Script "wartet" auf eine Eingabe.
Wird per Mobiflight ein Schalter betätigt und wir schreiben den offset auf einen Code-Wert erkennt der Script das und führt BEIDE LVar Writes aus.... UND Er setzt den Offset wieder auf 0 damit erneuet eingaben möglich sind !

Ich denke DAS ist genau was du brauchst !
Good Luck !
2017-10-08 16:24
icon