Skip to content
View in the app

A better way to browse. Learn more.

The AVSIM Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Assigning postfix(RPN) code to KeyPress

Featured Replies

I just bought AxisAndOhs to check it out if it was any useful for MSFS projects.

 

My first test was to bind the RPN code that is sent when you press the APPR button in the A320 airplane.IbxV2if.png

The RPN code is the same that is documented in the ModelBehaviorDebug for the A320 when APPR is pressed.  

 

But the keypress (CTRL-SHIFT-P) does not trigger the APPR button in the airplane.

 

See attached image

 

I am probably doing something wrong.

Please advice.

 

  • Commercial Member
48 minutes ago, nas123 said:

I am probably doing something wrong.

Please advice.

Hi,

are you sure that all this is really neceassary? Not at my computer right now, but wouldn't triggering "AP_APR_HOLD" be good enough? (that is the "toggle" event as per spec). Also, please double check that the button activates when using the mouse. Just in case.

About the L: - vars in general: when you are using them in AAO RPN scripts, you have to make a decision if only AAO should see them or if they should be handled in the simulator

"(L:MysimVar)" is a local variable, it doesn't leave AAO

"(L:MySimVar, Number)" is a sim variable, and it will be sent to the simulator. The difference is supplying the unit, in this case ", Number", which is the safest bet in all cases.

In the upcoming version 2.04 you will have the option to hand over processing of the script to the sim entirely, by prefixing "SIMPROC:". This already works in the 2.03 too as a hidden option, but IIRC it is just "SIMPROC" without the ":"

If you want, please post the entire script here as text , and I will rewrite it to AAO specs. It doesn't look quite right when you just copy and paste it from the devel log.

Edited by Lorby_SI

LORBY-SI

  • Author

FmoOGhH.png

Quote

are you sure that all this is really neceassary? Not at my computer right now, but wouldn't triggering "AP_APR_HOLD" be good enough? (that is the "toggle" event as per spec). Also, please double check that the button activates when using the mouse. Just in case.

A320/32NX does not reacts to either "AP_APR_HOLD" or "AP_LOC_HOLD". That is why I have to use the same code as found in the ModelBehaviorDebug.

Both buttons reacts to mouse clicks in the virtual cockpit.

 

Sending the RPN code from my own WASM module also works fine.

 

Quote

About the L: - vars in general: when you are using them in AAO RPN scripts, you have to make a decision if only AAO should see them or if they should be handled in the simulator

"(L:MysimVar)" is a local variable, it doesn't leave AAO

"(L:MySimVar, Number)" is a sim variable, and it will be sent to the simulator. The difference is supplying the unit, in this case ", Number", which is the safest bet in all cases.

Oh, I now see why it is not working in the Sim, only local in AAO.

 

Quote

If you want, please post the entire script here as text , and I will rewrite it to AAO specs. It doesn't look quite right when you just copy and paste it from the devel log.

I wrote it down by hand, as it is not possible to copy/paste anything from ModelBehaviorDegub window. If you know how to do that, I would like to know.FmoOGhH.png

Edited by nas123

  • Commercial Member
2 hours ago, nas123 said:

it is not possible to copy/paste anything from ModelBehaviorDegub window

But it would have been possible to copy&paste it from the AAO script editor window...

AAO would expect the script to be fully qualified (=without shortcuts). And I think that there is an error in it. Or at least calling LOC_HOLD_ON and LOC_HOLD_OFF in succession doesn't make a lot of sense to me. So I took the liberty of changing that and turn off the approach mode instead. (see lower quote)

Visualized:

Quote

                (L:A32NX_AUTOPILOT_APPR_MODE, Number) 1 == if{
                    0 (>L:A32NX_AUTOPILOT_APPR_MODE, Number)
                    1 (>K:AP_LOC_HOLD_ON)
                    1 (>K:AP_LOC_HOLD_OFF)
                } els{
                    1 (>L:A32NX_AUTOPILOT_APPR_MODE, Number)
                    0 (>L:A32NX_AUTOPILOT_LOC_MODE, Number)
                    1 (>K:AP_APR_HOLD_ON)
                }

For C&P into the script editor

Quote

(L:A32NX_AUTOPILOT_APPR_MODE,·Number)·1·==·if{·0·(>L:A32NX_AUTOPILOT_APPR_MODE,·Number)·1·(>K:AP_LOC_HOLD_ON)·1·(>K:AP_APR_HOLD_OFF)·}·els{·1·(>L:A32NX_AUTOPILOT_APPR_MODE,·Number)·0·(>L:A32NX_AUTOPILOT_LOC_MODE,·Number)·1·(>K:AP_APR_HOLD_ON)·}

 

Edited by Lorby_SI

LORBY-SI

  • Author
Quote

But it would have been possible to copy&paste it from the AAO script editor window...

aargh, how stupid of me..

 

Another issue with RPN coding as you seems to have some knowledge in this area( I know it is not an AAO issue, but I try anyway):

How do I convert the BOLD lines to standard C++ code(my brain can't understand it)?

(L:A32NX_AUTOPILOT_APPR_MODE, bool) if{
(>K:AP_APR_HOLD_ON)
(>K:AP_APR_HOLD_OFF)
}

(L:A32NX_AUTOPILOT_LOC_MODE, bool) if{
(>K:AP_LOC_HOLD)


(A:AUTOPILOT DISENGAGED, Bool) ! 1 and if {
1 1 != if { 0 (>L:XMLVAR_Autopilot_1_Status) }
2 1 != if {0 (>L:XMLVAR_Autopilot_2_Status) }
(L:XMLVAR_Autopilot_1_Status) ! (>L:XMLVAR_Autopilot_1_Status)
(L:XMLVAR_Autopilot_1_Status) (L:XMLVAR_Autopilot_2_Status) or
(A:AUTOPILOT MASTER, Bool) != if {
(>K:AP_MASTER)
(A:AUTOPILOT MASTER, Bool) ! if {
0 (>L:XMLVAR_Autopilot_2_Status)
     }
  }
}

(L:A32NX_AUTOPILOT_APPR_MODE, Bool) if{
(>K:AP_APR_HOLD)
}

(L:A32NX_AUTOPILOT_LOC_MODE, Bool) if {
(>K:AP_LOC_HOLD)
}

 

 

  • Commercial Member
12 minutes ago, nas123 said:

How do I convert the BOLD lines to standard C++ code

Install a copy of the old FSX SDK or a P3D SDK and look for the "Infix2Postfix.exe" tool. But to be honest, this script doesn't make a lot of sense - see infix: (I mean the stuff like "if (1 != 1)"...waiting for that to be true is a bit of a stretch)

Quote

 
 if ( ( ! (A:AUTOPILOT DISENGAGED , Bool) ) and 1 ) 
 {     
      if ( 1 != 1 ) 
      {
         (L:XMLVAR_Autopilot_1_Status) = 0 ;  
     } 
      if ( 2 != 1 ) 
      {
         (L:XMLVAR_Autopilot_2_Status) = 0 ;  
     } (L:XMLVAR_Autopilot_1_Status) = ( ! (L:XMLVAR_Autopilot_1_Status) ) ;  
      
      if ( ( (L:XMLVAR_Autopilot_1_Status) or (L:XMLVAR_Autopilot_2_Status) ) != (A:AUTOPILOT MASTER , Bool) ) 
      {
         (K:AP_MASTER) = result ;  
          
          if ( ! (A:AUTOPILOT MASTER , Bool) ) 
          {
             (L:XMLVAR_Autopilot_2_Status) = 0 ;  
          
         } 
     } 
 } 

 

 

Edited by Lorby_SI

LORBY-SI

  • Author
Quote

(I mean the stuff like "if (1 != 1)"...waiting for that to be true is a bit of a stretch)

This is also what I don't understand, but

1 1 != if { 0 (>L:XMLVAR_Autopilot_1_Status) }
2 1 != if {0 (>L:XMLVAR_Autopilot_2_Status) }

is what is coded in by MS/ASOBO as it is taken from the A320's ModelBehaviorDebug window.

To me this is total confusing.

Edited by nas123

  • Commercial Member
28 minutes ago, nas123 said:

as it is taken from the A320's ModelBehaviorDebug window.

And that is the problem, because you are seeing code that has already been interpreted. The actual written code works based on inheritance of generic templates, using #..# tags, that are replaced with the local value at runtime.

I am assuming that this part has been constructed from the generic ASOBO_AUTOPILOT_Push_Autopilot_Template and is the interpreted version of the reset code, which is this:

						<Case Value="2">
							<RESET_CODE>
								1 #ID# != if{ 0 (&gt;L:XMLVAR_Autopilot_1_Status) }
								2 #ID# != if{ 0 (&gt;L:XMLVAR_Autopilot_2_Status) }
							</RESET_CODE>
						</Case>
					</Switch>

So they want to make sure that with this generic code, only the autopilot status variable pertaining to the actual knob is changed.

There is bound to be another knob, maybe in another aircraft, where it says "2 2 !="

That being said - it can just as well be a simple programming error, because it definitely looks wrong. I would understand it if it would say "if (1 == 1)" . There are a few errors in the native code, don't just take it as gospel.

Edited by Lorby_SI

LORBY-SI

  • Author

In which MSFS file did you find the 

Quote

<Case Value="2">
							<RESET_CODE>
								1 #ID# != if{ 0 (&gt;L:XMLVAR_Autopilot_1_Status) }
								2 #ID# != if{ 0 (&gt;L:XMLVAR_Autopilot_2_Status) }
							</RESET_CODE>
						</Case>
					</Switch>

 

  • Commercial Member
2 hours ago, nas123 said:

In which MSFS file did you find the 

I am using Notepad++ -> Search -> Find in files, filtered for *.xml, *.html. *.js in the entire \Packages\ folder of MSFS. In this case I searched for the L-Vars that are in your script, then threaded my way through the Template hierarchy, assembling the code until I found the relevant bits. 

LORBY-SI

Archived

This topic is now archived and is closed to further replies.

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.