Flight Sim Profile

Profile Information

Since there wasn't any real clear example of how to interact between the GNS 530 using C# through SimConnect, I wrote a minimalist example that hopefully will allow others to avoid some of that initial grief and hair pulling. The concept will be the same for the 430 if you use that unit instead. While I don't have the G1000 unit, I'm guessing that it works in a similar manner through the configuration of a .INI file. You can use this example as the stepping stone to connecting up your hardware to the GNS.
I wrote this to connect to P3D using the SimConnect 3.2 version of the DLL. If you want to target FSX or a different version of P3D, you'll need to swap out the DLL in the references part of the project to something else and also swap out the 'using LockheedMartin.Prepar3D.SimConnect;' statement to the FSX one in the cSimConnect.cs file to the appropriate DLL namespace.
VS2015 C# 4.5 Framework project is here: https://www.dropbox.com/sh/a2as1vy4ryme1m0/AABCuBZ11yYixc_1UYwOHFCga?dl=0
A copy of the GNS.ini file that is configured to work with the program is included in the zip fle. You will need to swap out your installed one for mine before launching P3D. You can find your installed one in the folder: "C:\Program Files (x86)\Mindstar\Flight Simulator Addons\GNS.ini"
I hope you find this useful.
Geodirk
Note: the GPS image in the program is just static..

Hi Ed,
Pardon my frustration, but from my first post above I made it amply clear that I know and have read the SDK. I know how this function works. I've used it over and over and over again in my code. But you have yet to give me a simple one line snippet of how to actually use what is written in your guide to call the function using your hex numbers. SimConnect_MapClientEventToSimEvent doesn't take a hex number it takes a constant char event name.
From the SDK this is the syntax for the call:
HRESULT SimConnect_MapClientEventToSimEvent(
HANDLE hSimConnect,
SIMCONNECT_CLIENT_EVENT_ID EventID,
const char* EventName
);
All I'm looking for is the one line of code to merge what your guide says and this function. Can I pass in the 0x11000 as a char and have it work??
- Dirk

Hi Ed,
Yes, I've designed an Arduino controller that manages all the button, switches, knob events for various instruments around the cockpit panel. I'm planning on laying out a circuit board for your GNS unit that also contains all the necessary knobs and buttons for a Garmin. I'll hook this up to my existing C# driver code that communicates with P3D using simconnect.
So, for example, I have a knob that controls the airspeed indicator instrument. Some code snippets for controlling that device are:
public void OpenConection(IntPtr handle)
{
do
{
try
{
// open connection to FS
_FSData = new SimConnect("Managed Data Request", handle, WM_USER_SIMCONNECT, null, 0);
// Simevents
_FSData.MapClientEventToSimEvent(EVENT_ID.AIRSPEED_DEC, "TRUE_AIRSPEED_CAL_DEC");
_FSData.MapClientEventToSimEvent(EVENT_ID.AIRSPEED_INC, "TRUE_AIRSPEED_CAL_INC");
// handler for events notification
_FSData.OnRecvEvent += new SimConnect.RecvEventEventHandler(ReceiveEvent);
}
catch (Exception ex)
{
Console.WriteLine("cSimconnect.OpenConnection(): " + ex.Message);
Thread.Sleep(1000);
}
} while (!_bHasFSConnection);
return;
}
//Set Airspeed Calibration Knob
public void SetAirspeedCalibration(bool bInc)
{
if (bInc)
{
_FSData.TransmitClientEvent(1, EVENT_ID.AIRSPEED_INC, 0, GROUP_ID.GROUP0, SIMCONNECT_EVENT_FLAG.DEFAULT);
_FSData.TransmitClientEvent(1, EVENT_ID.AIRSPEED_INC, 0, GROUP_ID.GROUP0, SIMCONNECT_EVENT_FLAG.DEFAULT); //run twice to speed it up
}
else
{
_FSData.TransmitClientEvent(1, EVENT_ID.AIRSPEED_DEC, 0, GROUP_ID.GROUP0, SIMCONNECT_EVENT_FLAG.DEFAULT);
_FSData.TransmitClientEvent(1, EVENT_ID.AIRSPEED_DEC, 0, GROUP_ID.GROUP0, SIMCONNECT_EVENT_FLAG.DEFAULT); //run twice to speed it up
}
}
In both of these code snippets, to receive an event or transmit an event to the sim, they are using the predefined enums of EVENT_ID.AIRSPEED_INC and EVENT_ID.AIRSPEED_DEC
But your guide says to map to events that are hex numbers (e.g., GPS1_COM_FREQ_TOGGLE=0x11000). I guess when I'm looking at the SDK, I'm not following how one would do that? I'm not seeing any spot where you can trigger an event using a hex number. So, how does one implement what you are suggesting in your guide?
- Dirk

Hi Ed,
Well your guide to your software says:
I'm looking to implement what you have written. But I can't find any sort of documentation in the P3D SDK that shows how to do what you are suggesting. Lots of examples of how to use all the simconnect predefined enums, but nothing that would let me use the hex numbers to trigger the event. So I'm looking for a small code snippet from you that demonstrates using simconnect to trigger an event that will pass over to the GNS.
That make sense?
- Dirk

Hi Ed,
I'm looking for a code snippet (preferably C# but I can manage [pun intended] to read other languages) that shows how to use a couple of simconnect functions when I have defined a hex event code in the .ini file. I've scoured Google yesterday looking for an example of how to use a hex number versus the usual predefined enums (e.g., KEY_GPS_POWER_BUTTON) but couldn't find anything. For example, if I have defined this in the following in the .ini file: GPS1_COM_FREQ_TOGGLE=0x11000 how would I setup and call the simconnect functions of:
TransmitClientEvent()
MapClientEventToSimEvent()
Thanks for the help,
Dirk

Hey Patrick, Thanks SO much for the insights. I can confirm that it's all working properly now. Your explanation of using a '0' over the '1' now makes perfect sense as to why all my other controls (lights, gauges, etc.) were working but pause was not. Also appreciate the other suggestions. I'll refactor my code to do the argument passing better. Thanks again! - DIrk

Hi Dave, Nope - I'm not in multiplayer mode but just the Freeflight mode. Like I mentioned before, all my other calls to lights / gauges work just fine. Not sure why only the pause key seems to be a problem. Can anyone else check my C# code and verify that it is not working for them either? - Dirk

Hi Patrick, It must be a C# thing then because I can get everything else to work for a Cessna 172 except just the pause toggle/on/off. I created a simple C# example showing the issue here if anyone wants to verify the bug: https://www.wuala.com/geodirk/FSX_Public/?key=eWWqH7ouzi8F Patrick - what version of Microsoft.FlightSimulator.SimConnect,dll are you using? Is it more recent then: version=10.0.61259.0 that I'm using? Thanks, Dirk

Anyone know why trying to set any of the pause events for FSX (on, off, toggle) doesn't work in SimConnect? All my other events for lights, radio buttons, switches, etc. work fine. Is the pause key read only maybe? FSData.MapClientEventToSimEvent(EVENT_ID.KEY_PAUSE_ON, "PAUSE_ON"); FSData.TransmitClientEvent(1, EVENT_ID.KEY_PAUSE_ON, 0, GROUP_ID.GROUP0, SIMCONNECT_EVENT_FLAG.DEFAULT);Thanks, Dirk