Moderate Chop Posted May 9, 2022 Report Posted May 9, 2022 I thought I knew what I was doing, but maybe not! For Leonardo's new Maddog X, here is the relevant (for this discussion) part of their MaddogX_interior.xml file: <PartInfo> <Name>CM1_winglightl_switch1</Name> <AnimLength>20</AnimLength> <Animation> <Parameter> <Code>(L:CM1_winglightl_switch1, enum) 10 *</Code> </Parameter> </Animation> <MouseRect> <Cursor>Hand</Cursor> <MouseFlags>LeftSingle+RightSingle+WheelDown+WheelUp</MouseFlags> <CallbackCode> (M:Event) 'LeftSingle' scmi 0 == if{ 536870912 0 + (>L:ext_lights_event,number) } (M:Event) 'RightSingle' scmi 0 == if{ 2147483648 0 + (>L:ext_lights_event,number) } (M:Event) 'WheelDown' scmi 0 == if{ 536870912 0 + (>L:ext_lights_event,number) } (M:Event) 'WheelUp' scmi 0 == if{ 2147483648 0 + (>L:ext_lights_event,number) } </CallbackCode> </MouseRect> </PartInfo> <PartInfo> <Name>CM1_winglightr_switch1</Name> <AnimLength>20</AnimLength> <Animation> <Parameter> <Code>(L:CM1_winglightr_switch1, enum) 10 *</Code> </Parameter> </Animation> <MouseRect> <Cursor>Hand</Cursor> <MouseFlags>LeftSingle+RightSingle+WheelDown+WheelUp</MouseFlags> <CallbackCode> (M:Event) 'LeftSingle' scmi 0 == if{ 536870912 1 + (>L:ext_lights_event,number) } (M:Event) 'RightSingle' scmi 0 == if{ 2147483648 1 + (>L:ext_lights_event,number) } (M:Event) 'WheelDown' scmi 0 == if{ 536870912 1 + (>L:ext_lights_event,number) } (M:Event) 'WheelUp' scmi 0 == if{ 2147483648 1 + (>L:ext_lights_event,number) } </CallbackCode> </MouseRect> </PartInfo> In the attached MD80Assigns.lua file, you can see how I have my script coded for this landing lights action. When I press the switch, everything works fine. The 'ext_lights_event' LVAR is written using the 'LeftSingle' parameters - 536870912 for the left switch, and 536870913 for the right - and both switches go to the EXT ON position. When I release the switch, the 'RightSingle' parameters are sent - 2147483648 [2^31] for the left switch, and 2147483649 [2^31 + 1] for the right. However, only the left switch moves back to the off position. The right switch does not respond at all. The attached lua log file doesn't show any error (I don't think). This observation is consistent across all of the functions I've defined: Parameters that are <= 2^31 seem to work properly. Those greater than this value are apparently not sent, although the script is executing. I know I'm probably missing something simple, so I apologize in advance for that. But I've reached the limits of my knowledge and troubleshooting skills (which are meager to begin with!). Any suggestions would be greatly appreciated. Thanks! MD80Assigns.lua MD80Assigns.log
John Dowson Posted May 9, 2022 Report Posted May 9, 2022 10 hours ago, Moderate Chop said: When I release the switch, the 'RightSingle' parameters are sent - 2147483648 [2^31] for the left switch, and 2147483649 [2^31 + 1] for the right. However, only the left switch moves back to the off position. The right switch does not respond at all. The attached lua log file doesn't show any error (I don't think). This observation is consistent across all of the functions I've defined: Parameters that are <= 2^31 seem to work properly. Those greater than this value are apparently not sent, although the script is executing. This doesn't surprise me as the maximum value of an int/long int is 2^31-1. But the callback code is adding either 536870912 (left single) or 2147483648 (right single) to the value of L:ext_lights_event (although I don't fully understand that code!), so I don't think you should be setting this lvar to such values... Try looking at what that lvar actually holds (using the lvar logging menu item) and see how that changes when you set/change the landing lights in the UI. If the aircraft is using integer values outside if the int range (i.e unsigned int values) then I don't think these can be used via lua. You could also try setting the lvar value using the Add-ons->WASM-> Set Lvar... menu item - can you set such values from there?
John Dowson Posted May 9, 2022 Report Posted May 9, 2022 4 hours ago, John Dowson said: You could also try setting the lvar value using the Add-ons->WASM-> Set Lvar... menu item - can you set such values from there? I've tried this here and this does work (I am just using some lvars for the A320 when not loaded for this test): A320_FCU_SHOW_SELECTED_HEADING = 2147483649.000000 A320_NE0_FCU_STATE = 2147483648.000000 So it does look like this might be an issue with the lua handling, or how the lua numbers are passed to the FSUIPC C lua library. I will look into this in further detail when I get time (most probably not until next week I'm afraid), but in the mean-time you could maybe try adding the lvar to a free user offset and then updating the lvar by writing to the offset instead. John
Moderate Chop Posted May 9, 2022 Author Report Posted May 9, 2022 (edited) Thank you very much for your replies and suggestions, John. I will look into this later today and see if I can make progress. Later... I don't think the LVAR ext_lights_event actually has a value - it always reports '0' when I list the LVARs via the WASM menu, regardless of the switch positions. It just seems to be a container for an array of other actions, triggered by the parameter you send. Using Add-ons->WASM-> Set Lvar... behaves just like the lua script, or the assignments in the Assignments --> Buttons & Switches... menu item. As a workaround, user Andy Digital on the MaddogX forums suggested subtracting the indicated interval and sending the negative of the result. So instead of 2147483649 send -2147483647. And this indeed seems to work! This is because of some int overflow wrap around I do not understand(?). Anyway, it works, and I'll use this technique for now. Thanks! Eric Edited May 10, 2022 by Moderate Chop Follow on info.
John Dowson Posted May 10, 2022 Report Posted May 10, 2022 On 5/9/2022 at 4:05 AM, Moderate Chop said: This observation is consistent across all of the functions I've defined: Parameters that are <= 2^31 seem to work properly. Those greater than this value are apparently not sent, although the script is executing. I have just checked this with a simple lua script: Quote B2D = 2147483648 -- 2^31 ipc.writeLvar("A320_FCU_SHOW_SELECTED_HEADING", B2D) ipc.writeLvar("A320_NE0_FCU_STATE", B2D+1) And when I run this and list the lvar values I see: A320_FCU_SHOW_SELECTED_HEADING = 2147483648.000000 A320_NE0_FCU_STATE = 2147483649.000000 So values > 2^31 are being sent and applied correctly. I therefore suspect that it is the aircraft model that is not accepting such values. You can also verify that the value is being sent and applied correctly by setting Debug (or maybe Trace) level logging in the FSUIPC WASM module and check the FSUIPC_WASM.log file to see what values the WASM is applying (see the Advanced User manual for details). John
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now