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
pizman82
Moderator
From: ETSI, Germany
Posts: 6010
Supporter
Hi Sebastian
(Sorry etwas ausführlich und lang... Wills nur Sauber beschreiben)
Womöglich kein Bug aber ein kleiner Schönheitsfehler der zu Problemen führen kann, da die Logik etwas "kompliziert" rüberkommt.

*********

Liest man einen Byte Offset aus wird ja bekanntlich der Dezimal Value angezeigt ( FSUIPC Wert ... Von Compare und Ausgabewert reden wir jetzt mal nicht)

Liest man aber einen Bitmask Offset aus ( z.b. Bit 4 ) und ist dieser an (0001 0000) Dann hat AUCH diese Configline einen Value der dem eines ganzen Byte entspricht ... In diesen Fall 16 . Somit Bitstatus 0 = Value 0 Bitstatus 1 = Value 16

Habe auch überprüft was passiert wenn man 2 Bits gleichzeitig mit 2 verschiedenen Configs ausliest.... z.b. Bit 4 und 5 .....
Hier hat die Config für Bit 4 den Value 16 (Wie Oben beschrieben)..... Die Config von Bit 5 hat folgerichtig dann den Value 32.
Liest man zusätzlich den ganzen Byte ( 0011 0000 ) Dann ist der Wert 48 Was stimmt...

Somit steht bis hier fest Mobi arbeitet ansich richtig..... Die Bitmask Offsets arbeiten "Unabhängig" vom restlichen Byte.
Er Zeigt zwar den Wert an wie wenn es ein Byte wäre... Aber spezifisch in jeder Config unabhängig vom "echten " Byte den wir gerade zerstückeln.


Rein Logisch sollte der Wert eines Bit Mask Reads aber doch besser 1 oder 0 sein oder ??


Ansich eigentlich kein Problem aber im weiteren verlauf ergeben sich ein paar unpraktische Situation dadurch.

1. Input Bitmask.
Will ich mit einen Schalter den Wert eines BITs ändern MUSS dieses in Mobiflight mit 1 oder 0 geschehen. Also obwohl Der Wert der Config z.b. wie oben bei Bit 4 Von 0 auf 16 wechselt muss der Input 0/1 sein..... Versucht man "16" als Value zu senden dann kommt zwar KEINE Fehlermeldung aber er sendet nur "0" ( Offenbar weil 16 nicht möglich ist)
(( Womöglich ein teil des Problems von Avidflyer https://www.mobiflight.com/forum/topic/514.html ))

2. IF ELSE als Value in Inputs.
Da ja für die IF Condition der Output Value genommen wird ergibt sich ein etwas kurioses Problem.
IF($=0,1,0) Funktioniert ( Wenn Wert 0 dann sende 1, sonst (Wert wäre dann 16 bei Bit4) sende 0
Verwendet man aber umgekehrt IF($=1,0,1) was bei Bytes Boolean ja auch geht hat man hier ein Problem da es den Wert "1" nicht gibt Hier müsste man dann sagen IF($=16,0,1) oder pauschal IF($>0,0,1)
Auch hier für einen Laien etwas strange.... Ein Bit ist ja ebenfalls technisch gesehen Boolean wie auch ein Byte Boolean Offset !


3. Output Wert als Precondition.
Auch hier reicht es nicht wie bei anderen Boolean Werten schlicht "Wenn X=1" zu verwenden, da ja der Wert je nach Bit 1,2,4,8,16,32 usw ist.
Natürlich kann man auch hier pauschal "Größer 0" oder den spezifischen Wert (z.b. 16) verwenden oder schlicht in den Outputs selbst einen Compare ala "Wenn 0 Dann 0 Sonst 1" verwenden.... Aber ebenfalls für den Laien etwas undurchsichtig.

*****

Fazit:
Falls das ganze keinen zu großen Aufwand macht und du darin einen praktischen Nutzen siehst würde ich vorschlagen hier den Code zu ändern.
Sollte das gewollt sein wäre ich dankbar für ne kurze erklärung.

Danke !
Good Luck !
2017-05-05 03:55
Avatar
pizman82
Moderator
From: ETSI, Germany
Posts: 6010
Supporter
Nachtrag:

Betrifft zwar jetzt nicht den "Fehler" von Oben aber passt gut hier her und ich muss keinen neunen Topic aufmachen.

Bei einen Testlauf zwecks dem Problme von Avidflyer wollte ich heute einen Bitmask WRITE machen der sich über mehrere Bits erstreckt......

Ohne jetzt zu sehr ins Detail zu gehen..... Ich würde gerne in einen Byte ZWEI Bits gleichzeitig beschreiben.....
Da ich bei INPUT auch Bitmask anwählen kann und OFFENBAR auch mehrere Bits auswählen kann habe ich das versucht...

Ziel soll es sein die Bits 6 und 7 mit einen Input Tastendruck zu beschreiben.... Vorher ??xx.xxxx ::::: Nachher 10xx.xxxx
Bzw mit einen anderen Taster in gegenrichtung Vorher ??xx.xxxx :::::: Nachher 01xx.xxxx

Problem:
Auch hier lässt Mobiflight offenbar nur einen Einstelligen Wert von 1 oder 0 zu ( Oder ich hab den Syntax nicht verstanden)
Verwende ich 1 dann setzt er BEIDE Bits auf 1 .... Verwende ich 0 dann setzt er BEIDE auf 0

Meine überlegung wäre es eigentlich gewesen Decimal zu rechnen.... Also 1 = 01 und 2 = 10 ...... Er nimmt aber 2 nicht an und erkennt es wie im Eingans-Posting beschrieben als 0!
Auch Leerzeichen brachte nix .... "0 1" oder "1 0"

******************
Mir ist klar das es andere Möglichkeiten gibt das gekonnt zu umschippern (z.b. mit Release arbeiten und On Press den 1. Bit und mit Release den 2. Bit setzen) ODER man schreibt schlicht den ganzen Byte mit ner klar berechneten IF Funktion.....

Trotzdem die FRAGE:
Geht das ?? Kann man mehrere Bits gezielt in einen Input beschreiben... Wenn JA Wie ? Wenn NEIN... Ist das ein Fehler oder sollte man darüber nachdenken das zu ermöglichen ?
Good Luck !
2017-05-07 02:08
Avatar
DocMoebiuz
Moderator
From: NW of KPWK, United States
Posts: 1516
Es ist so gedacht wie Du beschreibst, Anwendungsfall sind die Light Switches.

Die Maske maskiert die Bits (in der Regel ein Einziges, s. Light Switches) und 1 oder 0 entscheidet wie es gesetzt wird.

Zwei oder mehr Bits können gesetzt aber eben nur mit dem gleichen Wert.

Wann benötigt man denn das Setzen von mehreren Bits? Würde mich interessieren damit ich es besser verstehe.
Have a great day!
Sebastian

MobiFlight - Simply build your own home cockpit for your favorite flight sim - MSFS2020, FSX, Prepar3D (FSUIPC), X-Plane (XPUIPC)
2017-05-07 04:09
Avatar
pizman82
Moderator
From: ETSI, Germany
Posts: 6010
Supporter
Hi.

Vorweg.... Habe das erst bei dieser Situation gebrauchen können.... By the Way: Ist auch nicht mehr aktuell da es sich um einen Fehler in FSUIPC bzw dem FSX gehandelt hat. Heute morgen bekam ich Antwort von Pete Dawson.... FSUIPC wird das mit dem nächsten größeren Release fixen.
Somit ist da kein akuter Bedarf..... Möglicherweise wäre es noch von Nöten wenn man versuchen will z.b. mehrere Lights mit einen Switch zu steuern.... Aber auch das ist natürlich nicht zwingend nötig.

*******
Somit nur noch zur Info das du weist worum es ging....

OFFSET 3122 :
iconQuote:

Radio audio switches. Read/write bit settings as follows:
2^7 COM1 transmit
2^6 COM2 transmit
2^5 COM receive both
2^4 NAV1 sound
2^3 NAV2 sound
2^2 Marker sound
2^1 DME sound
2^0 ADF1 sound



Die Bits 0-5 sind Problemlos.... Alles ON/OFF Bits.... Hier funktioniert die bewährte "IF($=0,1,0) Technik !
Problematisch ist Bit 6 bzw 7. ( Com1 und Com2 )
Hier sagt der FSX Es dürfen nicht BEIDE Aktiv sein... Und es Ist zwar möglich einen Bit auf 0 zu setzen.... Aber die Funktion geht intern erst aus wenn die andere AN geht.

Eigentlich hat FSUIPC hier eine Funktion die Intern den Bit toggelt... Also Wenn ich COM2 Aktiv habe und auf COM1 wechseln will (0100.0000) dann setzte ich bit 7 auf 1.... FSUIPC sollte dann automatisch Bit 6 auf 0 Setzen..... Und Umgekehrt bei COM1 zu COM2 .
GENAU DAS ging aber aktuell nicht da hier ein Fehler im FSUIPC bzw FSX war.
Setzte man während Com1 Aktiv war (1000.0000) den Bit 6 auf 1 dann kam 1100.0000 raus ( er resetete nicht bit 7) und das hat der FSX nicht akzeptiert.

Also wäre hier die Möglichkeit ganz cool gewesen per Tastendruck mehrere BITS spezifisch zu beschreiben....
Sprich Ich schreibe für COM1 gezielt 10xx.xxxx und für COM2 01xx.xxxx .

WIE GESAGT: Der Fehler sollte gefixt werden und dann dürfte es reichen nur noch den betreffenden Bit zu schreiben.... Den Rest macht dann FSUIPC

***********
Falls übrigens an der Lösung interesse besteht wie ich den Fehler umgangen habe.....
Mein Value für den COM1 Schalter war IF($>=128,$,$+64) ..... Für COM2 IF($<128,$,$-64)

Wenn Com1 Aktiv ist erhöt der Bit 7 den Wert des ganzen Byte auf mindestens 128 ..... Somit Wenn wert 128 oder Größer dann ist Com1 Aktiv... Wenn Kleiner Com2
Würde man jetzt schlicht 128 oder 64 an den ganzen Byte senden dann würden die Bits 0-5 überschrieben 8 Was wir ja nicht wollen)
Erhöht bzw verringert man je nach Situation aber den Aktuellen Wert des Bytes um 64 dann schreibt man indirekt die Bits 6 und 7 gleichzeitig OHNE die Bits 0-5 zu beeinflussen.

Nur mal als Technik falls jemand ein ähnliches Problem mal hat !
[Last edited by pizman82, 2017-05-09 01:13]
Good Luck !
2017-05-07 16:54
icon