Version: 1.4.14.0
Frequency: /Consistently
Severity: High
Context: Aerosoft CRJ and PMDG 737 FMC APIs using SimConnect Client Data Areas being read from a C# client using the latest SDK SimConnect libraries.
Bug description: This may not be an issue with the simulator itself but with incompatible libraries on the products’ end. Just leaving this here to notify anyone interested.
When reading the ClientDataAreas of the aforementioend aircraft with SIMCONNECT_CLIENT_DATA_REQUEST_FLAG.CHANGED, the data areas either don’t update or they don’t notify the client when they are being changed on the server side. After a few minutes, the simulator freezes, especially when pressing buttons on the FMC.
Did some more tests. It is not only with the CHANGED option. Running the data area read with SIMCONNECT_CLIENT_DATA_PERIOD.VISUAL_FRAME crashes the simulator immediately.
The same code has been working flawlessly for quite some time in MSFS.
Sample code:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct cduDataStruct
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 720)]
public byte[] cdu;
};
this.Sim.ClearClientDataDefinition(DEFINITIONS.ASCRJ_CDU_DEFINITION);
this.Sim.MapClientDataNameToID("ASCRJ CDU1 Data", CLIENT_DATA_AREAS.ASCRJ_CDU_0_ID);
this.Sim.MapClientDataNameToID("ASCRJ CDU2 Data", CLIENT_DATA_AREAS.ASCRJ_CDU_1_ID);
uint size = Convert.ToUInt32(Marshal.SizeOf(typeof(cduDataStruct)));
this.Sim.AddToClientDataDefinition(DEFINITIONS.ASCRJ_CDU_DEFINITION, 0, size, 0, 0);
this.RegisterClientDataDefineStruct<cduDataStruct>(DEFINITIONS.ASCRJ_CDU_DEFINITION);
this.Sim.RequestClientData(CLIENT_DATA_AREAS.ASCRJ_CDU_0_ID, DATA_REQUESTS.READ_ASCRJ_CDU_0, DEFINITIONS.ASCRJ_CDU_DEFINITION,
SIMCONNECT_CLIENT_DATA_PERIOD.ONCE, SIMCONNECT_CLIENT_DATA_REQUEST_FLAG.DEFAULT);
this.Sim.RequestClientData(CLIENT_DATA_AREAS.ASCRJ_CDU_1_ID, DATA_REQUESTS.READ_ASCRJ_CDU_1, DEFINITIONS.ASCRJ_CDU_DEFINITION,
SIMCONNECT_CLIENT_DATA_PERIOD.ONCE, SIMCONNECT_CLIENT_DATA_REQUEST_FLAG.DEFAULT);
this.Sim.RequestClientData(CLIENT_DATA_AREAS.ASCRJ_CDU_0_ID, DATA_REQUESTS.READ_ASCRJ_CDU_0, DEFINITIONS.ASCRJ_CDU_DEFINITION,
SIMCONNECT_CLIENT_DATA_PERIOD.ON_SET, SIMCONNECT_CLIENT_DATA_REQUEST_FLAG.CHANGED);
this.Sim.RequestClientData(CLIENT_DATA_AREAS.ASCRJ_CDU_1_ID, DATA_REQUESTS.READ_ASCRJ_CDU_1, DEFINITIONS.ASCRJ_CDU_DEFINITION,
SIMCONNECT_CLIENT_DATA_PERIOD.ON_SET, SIMCONNECT_CLIENT_DATA_REQUEST_FLAG.CHANGED);