void connect() { const int WM_USER_SIMCONNECT = 0x0402; connection = new SimConnect("simmaps", IntPtr.Zero, WM_USER_SIMCONNECT, null, 0); connection.AddToDataDefinition(DEFINITIONS.SimData, "Plane Altitude", "feet", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); connection.AddToDataDefinition(DEFINITIONS.SimData, "Plane Latitude", "degrees", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); connection.AddToDataDefinition(DEFINITIONS.SimData, "Plane Longitude", "degrees", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); connection.AddToDataDefinition(DEFINITIONS.SimData, "Plane Heading Degrees True", "degrees", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); connection.RegisterDataDefineStruct <SimData>(DEFINITIONS.SimData); connection.OnRecvSimobjectData += new SimConnect.RecvSimobjectDataEventHandler(simconnect_OnRecvSimobjectData); connection.OnRecvEvent += new SimConnect.RecvEventEventHandler(simconnect_OnRecvEvent); connection.SubscribeToSystemEvent(DEFINITIONS.SimStart, "SimStart"); requestData(); Terminal.WriteLine("Connected to Flight Simulator", ConsoleColor.Green); while (true) { connection.ReceiveMessage(); Thread.Sleep(10); //not a bottleneck } }
private void initDataRequest() { try { // listen to connect and quit msgs simconnect.OnRecvOpen += new SimConnect.RecvOpenEventHandler(simconnect_OnRecvOpen); simconnect.OnRecvQuit += new SimConnect.RecvQuitEventHandler(simconnect_OnRecvQuit); // listen to exceptions simconnect.OnRecvException += new SimConnect.RecvExceptionEventHandler(simconnect_OnRecvException); // define a data structure simconnect.AddToDataDefinition(DEFINITIONS.Struct1, "title", null, SIMCONNECT_DATATYPE.STRING256, 0.0f, SimConnect.SIMCONNECT_UNUSED); simconnect.AddToDataDefinition(DEFINITIONS.Struct1, "Plane Latitude", "degrees", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); simconnect.AddToDataDefinition(DEFINITIONS.Struct1, "Plane Longitude", "degrees", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); simconnect.AddToDataDefinition(DEFINITIONS.Struct1, "Plane Altitude", "feet", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); simconnect.AddToDataDefinition(DEFINITIONS.Struct1, "Airspeed Indicated", "knots", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); // IMPORTANT: register it with the simconnect managed wrapper marshaller // if you skip this step, you will only receive a uint in the .dwData field. simconnect.RegisterDataDefineStruct <Struct1>(DEFINITIONS.Struct1); // NearestVorCurrentICAO // catch a simobject data request simconnect.OnRecvSimobjectDataBytype += new SimConnect.RecvSimobjectDataBytypeEventHandler(simconnect_OnRecvSimobjectDataBytype); } catch (COMException ex) { } }
private void RegisterSimVars() { if (m_simVarModelList != null && m_oSimConnect != null) { foreach (var simVar in m_simVarModelList) { if (string.IsNullOrEmpty(simVar.UnitysName)) // Strings { m_oSimConnect.AddToDataDefinition(SimVarsEnum.TITLE, simVar.DataName, null, SIMCONNECT_DATATYPE.STRING256, 0, SimConnect.SIMCONNECT_UNUSED); } else { m_oSimConnect.AddToDataDefinition(SimVarsEnum.TITLE, simVar.DataName, simVar.UnitysName, SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); } } for (int i = 1; i <= 15; i++) { m_oSimConnect.AddToDataDefinition(SimVarsEnum.TOTAL_PAYLOAD, $"PAYLOAD STATION WEIGHT:{i}", "pounds", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); } // IMPORTANT: register it with the simconnect managed wrapper marshaller // if you skip this step, you will only receive a uint in the .dwData field. m_oSimConnect.RegisterDataDefineStruct <SimVarsStruct>(SimVarsEnum.TITLE); m_oSimConnect.RegisterDataDefineStruct <SimVarsPayloadStruct>(SimVarsEnum.TOTAL_PAYLOAD); //m_oSimConnect.WeatherRequestObservationAtStation(SimVarsEnum.WEATHER_INFO, "LOWW"); //m_oSimConnect.WeatherRequestObservationAtNearestStation(SimVarsEnum.WEATHER_INFO, 48.117680599757485f, 16.566300032290759f); } }
public void Connect() { if (sc == null) { try { sc = new SimConnect("FSWebService Controller", form.Handle, WM_USER_SIMCONNECT, null, 0); sc.OnRecvOpen += OnRecvOpen; sc.OnRecvException += OnRecvException; sc.OnRecvQuit += OnRecvQuit; sc.AddToDataDefinition(DEFINITIONS.Struct1, "Plane Latitude", "degrees", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); sc.AddToDataDefinition(DEFINITIONS.Struct1, "Plane Longitude", "degrees", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); sc.RegisterDataDefineStruct <Struct1>(DEFINITIONS.Struct1); sc.OnRecvSimobjectDataBytype += OnRecvSimobjectDataByType; IsConnected = true; } catch (Exception ex) { Console.WriteLine("Unable to connect to Sim"); // form.AddText("Unable to connect to Sim"); return; } pollingTimer.Elapsed += (sender, e) => { sc.RequestDataOnSimObjectType(DATA_REQUESTS.REQUEST_1, DEFINITIONS.Struct1, 0, SIMCONNECT_SIMOBJECT_TYPE.USER); }; pollingTimer.Start(); } }
// Set up the SimConnect event handlers private void initComms() { try { // listen to connect and quit msgs simconnect.OnRecvOpen += new SimConnect.RecvOpenEventHandler(simconnect_OnRecvOpen); simconnect.OnRecvQuit += new SimConnect.RecvQuitEventHandler(simconnect_OnRecvQuit); // listen to exceptions simconnect.OnRecvException += new SimConnect.RecvExceptionEventHandler(simconnect_OnRecvException); // catch the assigned object IDs simconnect.OnRecvAssignedObjectId += new SimConnect.RecvAssignedObjectIdEventHandler(simconnect_OnRecvAssignedObjectId); // set up the data definiton for the Maule lights simconnect.AddToDataDefinition(DEFINITIONS.MauleLights, "LIGHT STATES", "mask", SIMCONNECT_DATATYPE.INT32, 0.0f, SimConnect.SIMCONNECT_UNUSED); // IMPORTANT: register it with the simconnect managed wrapper marshaller // if you skip this step, you will only receive a uint in the .dwData field. simconnect.RegisterDataDefineStruct <MauleLights>(DEFINITIONS.MauleLights); // Subscribe to system event Pause simconnect.SubscribeToSystemEvent(EVENTS.PAUSED, "Pause"); simconnect.OnRecvEvent += new SimConnect.RecvEventEventHandler(simconnect_OnRecvEvent); // Map an event to the EventID: PAUSE_OFF simconnect.MapClientEventToSimEvent(EVENTS.SEND_UNPAUSE, "PAUSE_OFF"); } catch (COMException ex) { displayText(ex.Message); } }
public void Connect() { // Connect to FS try { // neue simconnect verbindung aufbauen // event management für open _mySimconnect.OnRecvOpen += simconnect_OnRecvOpen; // event management für close _mySimconnect.OnRecvQuit += simconnect_OnRecvQuit; _mySimconnect.OnRecvAssignedObjectId += mySimconnect_OnRecvAssignedObjectId; // abfragedaten zur verbindung hinzufügen _mySimconnect.AddToDataDefinition(Definitions.StructCoordinates, "Plane Latitude", "degrees", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); _mySimconnect.AddToDataDefinition(Definitions.StructCoordinates, "Plane Longitude", "degrees", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); // IMPORTANT: register it with the simconnect managed wrapper marshaller // if you skip this step, you will only receive a uint in the .dwData field. _mySimconnect.RegisterDataDefineStruct <StructCoordinates>(Definitions.StructCoordinates); // catch a simobject data request _mySimconnect.OnRecvSimobjectDataBytype += simconnect_OnRecvSimobjectDataBytype; _mySimconnect.RequestDataOnSimObjectType(DataRequests.Request_1, Definitions.StructCoordinates, 0, SIMCONNECT_SIMOBJECT_TYPE.USER); _connectionStatus = ConnectionStatus.Connected; } catch (COMException ex) { // A connection to the SimConnect server could not be established _connectionStatus = ConnectionStatus.Pending; Disconnect(); throw new Exception(Resources.SimConnection_Error + ex.Message); } }
public void Connect() { handle = new WindowInteropHelper(Application.Current.MainWindow).Handle; handleSource = HwndSource.FromHwnd(handle); // Get source of handle in order to add event handlers to it handleSource.AddHook(HandleSimConnectEvents); if (sc == null) { try { sc = new SimConnect(appName, handle, WM_USER_SIMCONNECT, null, 0); sc.OnRecvOpen += sc_OnRecvOpen; sc.OnRecvException += sc_OnRecvException; sc.OnRecvQuit += sc_OnRecvQuit; sc.AddToDataDefinition(DEFINITIONS.Struct1, "Plane Latitude", "degrees", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); sc.AddToDataDefinition(DEFINITIONS.Struct1, "Plane Longitude", "degrees", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); sc.RegisterDataDefineStruct<Struct1>(DEFINITIONS.Struct1); sc.OnRecvSimobjectDataBytype += sc_OnRecvSimobjectData; } catch (Exception ex) { Console.WriteLine("Unable to connect to Sim"); } refreshTimer.Elapsed += (sender, e) => { sc.RequestDataOnSimObjectType(DATA_REQUESTS.REQUEST_1, DEFINITIONS.Struct1, 0, SIMCONNECT_SIMOBJECT_TYPE.USER); }; refreshTimer.Start(); } }
// Set up all the SimConnect related data definitions and event handlers // Recebe todoas as variaveis da aeronave e guarda em suas variaveis private void initDataRequest() { try { // listen to connect and quit msgs simconnect.OnRecvOpen += new SimConnect.RecvOpenEventHandler(simconnect_OnRecvOpen); simconnect.OnRecvQuit += new SimConnect.RecvQuitEventHandler(simconnect_OnRecvQuit); // listen to exceptions simconnect.OnRecvException += new SimConnect.RecvExceptionEventHandler(simconnect_OnRecvException); // define a data structure simconnect.AddToDataDefinition(DEFINITIONS.Struct1, "PLANE PITCH DEGREES", "degrees", SIMCONNECT_DATATYPE.INT32, 0, SimConnect.SIMCONNECT_UNUSED); simconnect.AddToDataDefinition(DEFINITIONS.Struct1, "PLANE BANK DEGREES", "degrees", SIMCONNECT_DATATYPE.INT32, 0, SimConnect.SIMCONNECT_UNUSED); // IMPORTANT: register it with the simconnect managed wrapper marshaller // if you skip this step, you will only receive a uint in the .dwData field. simconnect.RegisterDataDefineStruct <Struct1>(DEFINITIONS.Struct1); // catch a simobject data request simconnect.OnRecvSimobjectDataBytype += new SimConnect.RecvSimobjectDataBytypeEventHandler(simconnect_OnRecvSimobjectDataBytype); } catch (COMException ex) { displayText(ex.Message); } }
/// <summary> /// ウィンドウが表示されたときのイベント /// </summary> private void Window_Loaded(object sender, RoutedEventArgs e) { try { simconnect = new SimConnect("Managed Data Request", this.Handle, WM_USER_SIMCONNECT, null, 0); /// Listen to connect and quit msgs simconnect.OnRecvOpen += new SimConnect.RecvOpenEventHandler(SimConnect_OnRecvOpen); simconnect.OnRecvQuit += new SimConnect.RecvQuitEventHandler(SimConnect_OnRecvQuit); /// Listen to exceptions simconnect.OnRecvException += new SimConnect.RecvExceptionEventHandler(SimConnect_OnRecvException); /// Catch a simobject data request simconnect.OnRecvSimobjectData += SimConnect_OnRecvSimobjectData; simconnect.AddToDataDefinition(DEFINITIONS.Struct1, "Title", null, SIMCONNECT_DATATYPE.STRING256, 0, SimConnect.SIMCONNECT_UNUSED); simconnect.AddToDataDefinition(DEFINITIONS.Struct1, "ATTITUDE INDICATOR PITCH DEGREES", "Radians", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); simconnect.AddToDataDefinition(DEFINITIONS.Struct1, "ATTITUDE INDICATOR BANK DEGREES", "Radians", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); simconnect.RegisterDataDefineStruct <Struct1>(DEFINITIONS.Struct1); simconnect.RequestDataOnSimObject(REQUEST.Dummy, DEFINITIONS.Struct1, SimConnect.SIMCONNECT_OBJECT_ID_USER, SIMCONNECT_PERIOD.SIM_FRAME, SIMCONNECT_DATA_REQUEST_FLAG.DEFAULT, 0, 0, 0); } catch (COMException ex) { MessageBox.Show("シミュレーターに接続出来ませんでした。\n終了します。", "エラー", MessageBoxButton.OK, MessageBoxImage.Error); this.Close(); } }
private void SetupEvents() { try { simConnect.OnRecvOpen += simConnect_OnRecvOpen; simConnect.OnRecvQuit += new SimConnect.RecvQuitEventHandler(simConnect_OnRecvQuit); simConnect.OnRecvException += new SimConnect.RecvExceptionEventHandler(simConnect_OnRecvException); simConnect.AddToDataDefinition(DEFINITIONS.DataStructure, "AIRSPEED TRUE", "knots", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); simConnect.AddToDataDefinition(DEFINITIONS.DataStructure, "PLANE ALTITUDE", "feet", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); simConnect.AddToDataDefinition(DEFINITIONS.DataStructure, "GPS POSITION LAT", "degrees latitude", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); simConnect.AddToDataDefinition(DEFINITIONS.DataStructure, "GPS POSITION LON", "degrees longitude", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); simConnect.AddToDataDefinition(DEFINITIONS.DataStructure, "PLANE HEADING DEGREES MAGNETIC", "degrees", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); // IMPORTANT: register it with the simconnect managed wrapper marshaller // if you skip this step, you will only receive a uint in the .dwData field. simConnect.RegisterDataDefineStruct <DataStructure>(DEFINITIONS.DataStructure); // catch a simobject data request simConnect.OnRecvSimobjectDataBytype += simConnect_OnRecvSimobjectDataBytype; } catch (COMException) { Console.WriteLine("Encountered an Exception whilst connecting to sim"); } }
void Connect() { try { // Создаем контроллер обрабоки данных и выбираем данные, которые необходимо получать от сима. simConn = new SimConnect("MFSDataGrabber", this.Handle, WM_USER_SIMCONNECT, null, 0); simConn.AddToDataDefinition(DATA_STRUCT_ENUM.Plane, "Plane Heading Degrees True", "degrees", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); simConn.AddToDataDefinition(DATA_STRUCT_ENUM.Plane, "Indicated Altitude", "feet", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); simConn.AddToDataDefinition(DATA_STRUCT_ENUM.Plane, "AIRSPEED TRUE", "Knots", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); simConn.AddToDataDefinition(DATA_STRUCT_ENUM.Plane, "GPS ETA", "Seconds", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); simConn.AddToDataDefinition(DATA_STRUCT_ENUM.Plane, "GPS ETE", "Seconds", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); simConn.AddToDataDefinition(DATA_STRUCT_ENUM.Plane, "Rotation Velocity Body Y", "feet per second", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); simConn.AddToDataDefinition(DATA_STRUCT_ENUM.World, "AMBIENT WIND VELOCITY", "Knots", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); simConn.AddToDataDefinition(DATA_STRUCT_ENUM.World, "SIMULATION RATE", "Number", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); simConn.RegisterDataDefineStruct <Plane>(DATA_STRUCT_ENUM.Plane); simConn.RegisterDataDefineStruct <World>(DATA_STRUCT_ENUM.World); simConn.OnRecvSimobjectDataBytype += OnResiveData; simConnectStatus = true; DataUpdateTimer.Interval = 1500; DataUpdateTimer.Start(); ConnectStatusChange(); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void Connect() { try { if (_simConnectionStatus) { return; } WindowInteropHelper lWih = new WindowInteropHelper(System.Windows.Application.Current.MainWindow); IntPtr lHwnd = lWih.Handle; gHs = HwndSource.FromHwnd(lHwnd); gHs.AddHook(new HwndSourceHook(WndProc)); _simClient = new SimConnect("Pushback Helper", lHwnd, 0x402, null, 0); // Sim connect configurations _simClient.OnRecvOpen += SimClient_OnRecvOpen; _simClient.OnRecvQuit += SimClient_OnRecvQuit; _simClient.OnRecvException += SimClient_OnRecvException; _simClient.AddToDataDefinition(DefinitionsEnum.HeadingDataStruct, "Plane Heading Degrees True", "degrees", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); _simClient.RegisterDataDefineStruct <HeadingDataStruct>(DefinitionsEnum.HeadingDataStruct); _simClient.OnRecvSimobjectDataBytype += SimClient_OnRecvSimobjectDataBytype; // _simConnectionStatus = true; SetConnectionText(); _timer.Start(); } catch (Exception) { _simConnectionStatus = false; lblSimStatus.Content = "ERROR!"; } }
private void OnConnected(SimConnect sender, SIMCONNECT_RECV_OPEN data) { foreach (var simEvent in Enum.GetValues(typeof(SimEvents)).Cast <SimEvents>()) { _simConnect.MapClientEventToSimEvent(simEvent, simEvent.ToString()); } foreach (var simVar in _simVars) { _simConnect.AddToDataDefinition( simVar.SimVar, simVar.Name, string.Empty, simVar.SimConnectType, 0, SimConnect.SIMCONNECT_UNUSED); _registerDataDefineStructMethodInfo.MakeGenericMethod(simVar.ClrType).Invoke(_simConnect, new object[] { simVar.SimVar }); _simConnect.RequestDataOnSimObject( simVar.SimVar, simVar.SimVar, SimConnect.SIMCONNECT_OBJECT_ID_USER, SIMCONNECT_PERIOD.VISUAL_FRAME, SIMCONNECT_DATA_REQUEST_FLAG.CHANGED, 0, 0, 0); } }
// Set up all the SimConnect related event handlers private void initClientEvent() { try { // listen to connect and quit msgs simconnect.OnRecvOpen += new SimConnect.RecvOpenEventHandler(simconnect_OnRecvOpen); simconnect.OnRecvQuit += new SimConnect.RecvQuitEventHandler(simconnect_OnRecvQuit); simconnect.OnRecvException += new SimConnect.RecvExceptionEventHandler(simconnect_OnRecvException); simconnect.OnRecvEvent += new SimConnect.RecvEventEventHandler(simconnect_OnRecvEvent); //Subscribe to events. Used to trigger data requests. simconnect.MapClientEventToSimEvent(EVENTS.AP_MASTER, "AP_MASTER"); simconnect.AddClientEventToNotificationGroup(NOTIFICATION_GROUPS.GROUP0, EVENTS.AP_MASTER, false); //Data request definitions. These are used when when we receive events. simconnect.AddToDataDefinition(DEFINITION.MCP, "Autopilot Master", "Boolean", SIMCONNECT_DATATYPE.INT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); simconnect.RegisterDataDefineStruct <MCP>(DEFINITION.MCP); simconnect.OnRecvSimobjectDataBytype += new SimConnect.RecvSimobjectDataBytypeEventHandler(simconnect_OnRecvSimobjectDataBytype); // set the group priority simconnect.SetNotificationGroupPriority(NOTIFICATION_GROUPS.GROUP0, SimConnect.SIMCONNECT_GROUP_PRIORITY_HIGHEST); } catch (COMException ex) { Debug.WriteLine(ex.Message); } }
// SIMCONNECT private void Connect() { try { if (_simConnectionStatus) { return; } _simClient = new SimConnect("Pushback Helper", Handle, 0x402, null, 0); // Sim connect configurations _simClient.OnRecvOpen += SimClient_OnRecvOpen; _simClient.OnRecvQuit += SimClient_OnRecvQuit; _simClient.OnRecvException += SimClient_OnRecvException; _simClient.AddToDataDefinition(DefinitionsEnum.HeadingDataStruct, "Plane Heading Degrees True", "degrees", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); _simClient.RegisterDataDefineStruct <HeadingDataStruct>(DefinitionsEnum.HeadingDataStruct); _simClient.OnRecvSimobjectDataBytype += SimClient_OnRecvSimobjectDataBytype; // _simConnectionStatus = true; SimConnectionStatusChangedEvents(); _timer.Start(); } catch (Exception ex) { _simConnectionStatus = false; MessageBox.Show(ex.Message); } SimConnectionStatusChangedEvents(); }
private void InitSimConnectField(Field field) { if (!isConnected) { return; } var attrib = FieldDefinition(field); if (attrib is null) { return; } var unitConfig = UnitTypeConfig.GetConfig(attrib.UnitType); // Set up data definition Console.WriteLine($"Def {attrib.DatumName}, {attrib.UnitType}"); simconnect.AddToDataDefinition(field, attrib.DatumName, unitConfig.Units, unitConfig.DataType, 0.0f, SimConnect.SIMCONNECT_UNUSED); var method = typeof(SimConnect).GetMethod("RegisterDataDefineStruct"); var methodRef = method.MakeGenericMethod(unitConfig.Struct); methodRef.Invoke(simconnect, new object[] { field }); // Get initial value simconnect.RequestDataOnSimObjectType(field, field, 0, SIMCONNECT_SIMOBJECT_TYPE.USER); // Create event mapping simconnect.MapClientEventToSimEvent(field, attrib.EventId); simconnect.AddClientEventToNotificationGroup(GROUPS.GroupA, field, false); }
private void CreateDataDefinition() { var type = GetType(); int definitionId; lock (DataDefinitions) { if (DataDefinitions.Contains(type)) { // We've already declared this data definition so return return; } definitionId = DataDefinitions.Count; DataDefinitions.Add(type); } var properties = type.GetProperties(BindingFlags.Instance | BindingFlags.Public) .Where(p => p.GetCustomAttributes(typeof(SimQueryVariableAttribute)).Any()) .ToList(); foreach (var property in properties) { var attribute = property.GetCustomAttribute <SimQueryVariableAttribute>(); var datumName = MappingUtils.ConvertSimVariableToSimulationString(attribute.Variable); var uom = MappingUtils.ConvertUnitOfMeasurementToSimulationString(attribute.UnitOfMeasurement); var simConnectType = MappingUtils.GetSimConnectDataTypeMapping(property.PropertyType); _simConnect.AddToDataDefinition((DummyEnum)definitionId, datumName, uom, simConnectType, 0f, 0); } }
public void setupSimConnect() { try { p3d = new SimConnect("P3DAutoSave", dummyWindow.Handle, SimConnectDummyWindow.WM_USER_SIMCONNECT, null, 0); } catch (COMException e) { MessageBox.Show(e.Message); MessageBox.Show("Please start P3D before launching this application."); Environment.Exit(1); } // listen to quit msg p3d.OnRecvQuit += new SimConnect.RecvQuitEventHandler(p3d_OnRecvQuit); // listen to events p3d.OnRecvEvent += new SimConnect.RecvEventEventHandler(p3d_OnRecvEvent); // Subscribe to system events p3d.SubscribeToSystemEvent(EVENTS.SIM_START, "SimStart"); p3d.SubscribeToSystemEvent(EVENTS.SIM_STOP, "SimStop"); p3d.SubscribeToSystemEvent(EVENTS.SIM_PAUSE, "Pause"); // Turn events on p3d.SetSystemEventState(EVENTS.SIM_START, SIMCONNECT_STATE.ON); p3d.SetSystemEventState(EVENTS.SIM_STOP, SIMCONNECT_STATE.ON); p3d.SetSystemEventState(EVENTS.SIM_PAUSE, SIMCONNECT_STATE.ON); // SimConnect variables p3d.AddToDataDefinition(VARIABLES.ON_GROUND, "SIM ON GROUND", "Bool", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); p3d.RequestDataOnSimObject(EVENTS.RECEIVE_DATA, VARIABLES.ON_GROUND, SimConnect.SIMCONNECT_OBJECT_ID_USER, SIMCONNECT_PERIOD.SECOND, 0, 0, 0, 0); Console.WriteLine("SimConnect initialized"); }
public void RegisterGenericValues(bool wasEmpty) { if (simconnect == null) { return; } if (!wasEmpty) { logger.LogInformation("Clearing Data definition"); simconnect.ClearDataDefinition(DEFINITIONS.GenericData); } foreach (TOGGLE_VALUE simValue in genericValues) { string value = simValue.ToString().Replace("__", ":").Replace("_", " "); logger.LogInformation("RegisterValue {1} {2}", simValue, value); simconnect?.AddToDataDefinition( DEFINITIONS.GenericData, value, eventLib.GetUnit(simValue), SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED ); } simconnect?.RegisterDataDefineStruct <GenericValuesStruct>(DEFINITIONS.GenericData); }
public void Initialize(IntPtr Handle) { simconnect = new SimConnect("Flight Recorder", Handle, WM_USER_SIMCONNECT, null, 0); // listen to connect and quit msgs simconnect.OnRecvOpen += new SimConnect.RecvOpenEventHandler(Simconnect_OnRecvOpen); simconnect.OnRecvQuit += new SimConnect.RecvQuitEventHandler(Simconnect_OnRecvQuit); simconnect.OnRecvException += Simconnect_OnRecvException; simconnect.OnRecvEvent += Simconnect_OnRecvEvent; simconnect.OnRecvSimobjectData += Simconnect_OnRecvSimobjectData; RegisterAircraftPositionDefinition(); RegisterAircraftPositionSetDefinition(); simconnect.AddToDataDefinition(DEFINITIONS.AircraftPositionInitial, "Initial Position", null, SIMCONNECT_DATATYPE.INITPOSITION, 0.0f, SimConnect.SIMCONNECT_UNUSED); simconnect.OnRecvEventFrame += Simconnect_OnRecvEventFrame; //simconnect.SubscribeToSystemEvent(EVENTS.POSITION_CHANGED, "PositionChanged"); simconnect.SubscribeToSystemEvent(EVENTS.FRAME, "Frame"); simconnect.OnRecvSystemState += Simconnect_OnRecvSystemState; simconnect.MapClientEventToSimEvent(EVENTS.FREEZE_LATITUDE_LONGITUDE, "FREEZE_LATITUDE_LONGITUDE_SET"); simconnect.MapClientEventToSimEvent(EVENTS.FREEZE_ALTITUDE, "FREEZE_ALTITUDE_SET"); simconnect.MapClientEventToSimEvent(EVENTS.FREEZE_ATTITUDE, "FREEZE_ATTITUDE_SET"); RegisterEvents(); Initialized?.Invoke(this, new()); }
private void Sim_OnRecvOpen(SimConnect sender, SIMCONNECT_RECV_OPEN data) { connectionLed.Fill = Brushes.Green; /// Define a data structure sim.AddToDataDefinition((DEFINITION)1, "PLANE LATITUDE", "degree", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); /// IMPORTANT: Register it with the simconnect managed wrapper marshaller /// If you skip this step, you will only receive a uint in the .dwData field. sim.RegisterDataDefineStruct <double>((DEFINITION)1); /// Define a data structure sim.AddToDataDefinition((DEFINITION)2, "PLANE LONGITUDE", "degree", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); sim.RegisterDataDefineStruct <double>((DEFINITION)2); sim.AddToDataDefinition((DEFINITION)3, "PLANE HEADING DEGREES TRUE", "degree", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); sim.RegisterDataDefineStruct <double>((DEFINITION)3); }
void setPayloadStation(SimConnect connection, int station, int weight) { payloadStruct payload = new payloadStruct(weight); connection.ClearDataDefinition(DATA_DEF.AIRCRAFT_PAYLOAD); connection.AddToDataDefinition(DATA_DEF.AIRCRAFT_PAYLOAD, String.Format("Payload station weight:{0}", station), "kg", SIMCONNECT_DATATYPE.INT32, 0.0f, SimConnect.SIMCONNECT_UNUSED); connection.SetDataOnSimObject(DATA_DEF.AIRCRAFT_PAYLOAD, SimConnect.SIMCONNECT_OBJECT_ID_USER, SIMCONNECT_DATA_SET_FLAG.DEFAULT, payload); }
void connect() { try { simconnect = new SimConnect("Managed Data Request", this.Handle, WM_USER_SIMCONNECT, null, 0); simconnect.MapClientEventToSimEvent(PAUSE_EVENTS.PAUSE, "PAUSE_ON"); simconnect.MapClientEventToSimEvent(PAUSE_EVENTS.UNPAUSE, "PAUSE_OFF"); simconnect.MapClientEventToSimEvent(PAUSE_EVENTS.GEAR_UP, "GEAR_UP"); simconnect.MapClientEventToSimEvent(PAUSE_EVENTS.GEAR_DOWN, "GEAR_DOWN"); simconnect.MapClientEventToSimEvent(PAUSE_EVENTS.THROTTLE_SET, "THROTTLE_SET"); simconnect.MapClientEventToSimEvent(PAUSE_EVENTS.THROTTLE_FULL, "THROTTLE_FULL"); simconnect.AddToDataDefinition(DEFINITIONS.Control1, "RUDDER POSITION", "", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); simconnect.AddToDataDefinition(DEFINITIONS.Control1, "ELEVATOR POSITION", "", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); simconnect.AddToDataDefinition(DEFINITIONS.Control1, "AILERON POSITION", "", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); simconnect.AddToDataDefinition(DEFINITIONS.Control1, "FLAPS HANDLE INDEX", "", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); simconnect.AddToDataDefinition(DEFINITIONS.Control1, "SPOILERS HANDLE POSITION", "", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); simconnect.AddToDataDefinition(DEFINITIONS.Control1, "General Eng Throttle Lever Position:1", "", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); simconnect.AddToDataDefinition(DEFINITIONS.Control1, "General Eng Throttle Lever Position:2", "", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); // IMPORTANT: register it with the simconnect managed wrapper marshaller // if you skip this step, you will only receive a uint in the .dwData field. simconnect.RegisterDataDefineStruct <Control1>(DEFINITIONS.Control1); // catch a simobject data request simconnect.OnRecvSimobjectData += new SimConnect.RecvSimobjectDataEventHandler(simconnect_OnRecvSimobjectData); } catch (COMException ex) { Console.WriteLine(ex); } }
private void RegisterStruct <TData>(Enum definition) { foreach (var field in typeof(TData).GetFields(BindingFlags.Instance | BindingFlags.Public)) { var attr = field.GetCustomAttributes <SimLinkAttribute>().First(); m_simConnect.AddToDataDefinition(definition, attr.Name, attr.Type, attr.Type == null ? SIMCONNECT_DATATYPE.STRING256 : SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); } m_simConnect.RegisterDataDefineStruct <TData>(definition); }
private void RegisterPlaneStatusDefinition() { simconnect.AddToDataDefinition(DEFINITIONS.PlaneStatus, "LIGHT BEACON", "bool", SIMCONNECT_DATATYPE.INT32, 0.0f, SimConnect.SIMCONNECT_UNUSED); simconnect.AddToDataDefinition(DEFINITIONS.PlaneStatus, "LIGHT LANDING", "bool", SIMCONNECT_DATATYPE.INT32, 0.0f, SimConnect.SIMCONNECT_UNUSED); simconnect.AddToDataDefinition(DEFINITIONS.PlaneStatus, "LIGHT TAXI", "bool", SIMCONNECT_DATATYPE.INT32, 0.0f, SimConnect.SIMCONNECT_UNUSED); simconnect.AddToDataDefinition(DEFINITIONS.PlaneStatus, "LIGHT NAV", "bool", SIMCONNECT_DATATYPE.INT32, 0.0f, SimConnect.SIMCONNECT_UNUSED); simconnect.AddToDataDefinition(DEFINITIONS.PlaneStatus, "LIGHT STROBE", "bool", SIMCONNECT_DATATYPE.INT32, 0.0f, SimConnect.SIMCONNECT_UNUSED); simconnect.AddToDataDefinition(DEFINITIONS.PlaneStatus, "GENERAL ENG MASTER ALTERNATOR:1", "Bool", SIMCONNECT_DATATYPE.INT32, 0.0f, SimConnect.SIMCONNECT_UNUSED); simconnect.AddToDataDefinition(DEFINITIONS.PlaneStatus, "ELECTRICAL MASTER BATTERY", "Bool", SIMCONNECT_DATATYPE.INT32, 0.0f, SimConnect.SIMCONNECT_UNUSED); simconnect.AddToDataDefinition(DEFINITIONS.PlaneStatus, "AVIONICS MASTER SWITCH", "Bool", SIMCONNECT_DATATYPE.INT32, 0.0f, SimConnect.SIMCONNECT_UNUSED); simconnect.RegisterDataDefineStruct <PlaneStatusStruct>(DEFINITIONS.PlaneStatus); }
void createRegister(SimVar temp) { if (!temp.isEvent) { simconnect.AddToDataDefinition(temp.eDef, temp.sName, temp.sUnits, SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); simconnect.RegisterDataDefineStruct <double>(temp.eDef); } lSimVars.Add(temp); }
private void ConnectButton_Click(object sender, RoutedEventArgs e) { if (!connectedToSim) { try { simConnect = new SimConnect("Managed Data Request", handle, WM_USER_SIMCONNECT, null, 0); } catch (COMException ex) { ConnectButton.Content = "Error connecting"; Console.WriteLine("ERROR CONNECTING TO SIMCONNECT: " + ex.ToString()); } if (simConnect != null) { /// Listen to connect and quit msgs simConnect.OnRecvOpen += new SimConnect.RecvOpenEventHandler(SimConnect_OnRecvOpen); simConnect.OnRecvQuit += new SimConnect.RecvQuitEventHandler(SimConnect_OnRecvQuit); /// Listen to exceptions simConnect.OnRecvException += new SimConnect.RecvExceptionEventHandler(SimConnect_OnRecvException); /// Catch a simobject data request //simConnect.OnRecvSimobjectDataBytype += new SimConnect.RecvSimobjectDataBytypeEventHandler(SimConnect_OnRecvSimobjectDataBytype); //set up the data definitions and things simConnect.AddToDataDefinition(DEFINITIONS.PlaneThrottle, "GENERAL ENG THROTTLE LEVER POSITION:1", "percent", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); simConnect.AddToDataDefinition(DEFINITIONS.PlaneThrottle, "GENERAL ENG THROTTLE LEVER POSITION:2", "percent", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); simConnect.RegisterDataDefineStruct <StructPlaneThrottle>(DEFINITIONS.PlaneThrottle); simConnect.AddToDataDefinition(DEFINITIONS.PlanePitchYaw, "ELEVATOR POSITION:1", "percent", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); simConnect.AddToDataDefinition(DEFINITIONS.PlanePitchYaw, "AILERON POSITION:1", "percent", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); simConnect.RegisterDataDefineStruct <StructPlanePitchYaw>(DEFINITIONS.PlanePitchYaw); } } else { if (simConnect != null) { continuePolling = false; simConnect.Dispose(); simConnect = null; } } }
public void Register(SimConnect connection) { // Per P3D documentation, if the variable is a string, then the unit should be left empty string unit = simValue.IsString ? "" : Unit; // Define a new structure for this variable connection.AddToDataDefinition(Id, Name, unit, SimConnectType, 0.0f, SimConnect.SIMCONNECT_UNUSED); // Register it with the SimConnect managed marshaller to allow data fetch connection.RegisterDataDefineStruct <T>(Id); }
public bool RegisterToSimConnect(SimVarItem simVar) { if (_connected) { _simConnect.AddToDataDefinition(simVar.def, simVar.SimVarName, simVar.Unit, SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); _simConnect.RegisterDataDefineStruct <double>(simVar.def); return(true); } return(false); }
public bool RegisterToSimConnect(SimVarItem simVar) { if (_connected) { if (simVar.Unit == Units.String) { _simConnect.AddToDataDefinition(simVar.Def, simVar.SimVarName, null, SIMCONNECT_DATATYPE.STRING64, 0.0f, SimConnect.SIMCONNECT_UNUSED); _simConnect.RegisterDataDefineStruct <StringVal64>(simVar.Def); } else { _simConnect.AddToDataDefinition(simVar.Def, simVar.SimVarName, simVar.Unit, SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); _simConnect.RegisterDataDefineStruct <double>(simVar.Def); } return(true); } return(false); }
static void Main(string[] args) { try { //Création d'une instance pour acceder à la librairie simconnect //m_scConnection = new Microsoft.FlightSimulator.SimConnect.SimConnect("FFSTracker", base.Handle, WM_USER_SIMCONNECT, null, 0); m_scConnection = new SimConnect("FSXML", IntPtr.Zero, WM_USER_SIMCONNECT, null, 0); Console.WriteLine("La connexion au simulateur a réussie"); } catch { Console.WriteLine("La connexion à FS à échouée."); return; } // On map les event avec notre enumérateur foreach (EventEnum item in Enum.GetValues(typeof(EventEnum))) { m_scConnection.MapClientEventToSimEvent(item, item.ToString()); } //On map les variables avec notre structure m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Title", "", SIMCONNECT_DATATYPE.STRING256, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Plane Latitude", "degrees latitude", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Plane Longitude", "degrees longitude", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Plane Altitude", "feet", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Airspeed Indicated", "knots", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Plane Heading Degrees Magnetic", "degrees", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Plane Heading Degrees True", "degrees", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Com Active Frequency:1", "MHz", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Com Active Frequency:2", "MHz", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Com Standby Frequency:1", "MHz", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Com Standby Frequency:2", "MHz", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Nav Active Frequency:1", "MHz", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Nav Active Frequency:2", "MHz", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Nav Standby Frequency:1", "MHz", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Nav Standby Frequency:2", "MHz", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Autopilot Master", "", SIMCONNECT_DATATYPE.INT32, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Autopilot Approach Hold", "", SIMCONNECT_DATATYPE.INT32, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Autopilot Heading Lock", "", SIMCONNECT_DATATYPE.INT32, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Autopilot Heading Lock Dir", "degrees", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Autopilot Altitude Lock", "", SIMCONNECT_DATATYPE.INT32, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Autopilot Altitude Lock Var", "feet", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Autopilot Vertical Hold Var", "feet/minute", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Autopilot Throttle Arm", "", SIMCONNECT_DATATYPE.INT32, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Autopilot Airspeed Hold", "", SIMCONNECT_DATATYPE.INT32, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Autopilot Airspeed Hold Var", "knots", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Autopilot Nav1 Lock", "", SIMCONNECT_DATATYPE.INT32, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Gps Drives Nav1", "", SIMCONNECT_DATATYPE.INT32, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Number Of Engines", "", SIMCONNECT_DATATYPE.INT32, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "General Eng Throttle Lever Position:1", "", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "General Eng Throttle Lever Position:2", "", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "General Eng Throttle Lever Position:3", "", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "General Eng Throttle Lever Position:4", "", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Flaps Handle Percent", "", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Gear Handle Position", "", SIMCONNECT_DATATYPE.INT32, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Spoilers Armed", "", SIMCONNECT_DATATYPE.INT32, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Spoilers Handle Position", "", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Brake Left Position", "", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "Brake Right Position", "", SIMCONNECT_DATATYPE.FLOAT64, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "APU GENERATOR SWITCH", "", SIMCONNECT_DATATYPE.INT32, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "APU_GENERATOR_ACTIVE", "", SIMCONNECT_DATATYPE.INT32, 0, SimConnect.SIMCONNECT_UNUSED); m_scConnection.AddToDataDefinition(DEFINITIONS.PERIODIQUE, "TOGGLE_MASTER_BATTERY", "", SIMCONNECT_DATATYPE.INT32, 0, SimConnect.SIMCONNECT_UNUSED); // On associe notre structure à la définition simconnect m_scConnection.RegisterDataDefineStruct<DonneesAvion>(DEFINITIONS.PERIODIQUE); m_scConnection.OnRecvException += new SimConnect.RecvExceptionEventHandler(OnRecvException); m_scConnection.OnRecvQuit += new SimConnect.RecvQuitEventHandler(OnRecvQuit); m_scConnection.OnRecvSimobjectData += new SimConnect.RecvSimobjectDataEventHandler(OnRecvSimobjectData); //On programme la requete cyclique pour l'obtention des données de l'avion m_scConnection.RequestDataOnSimObject(DATA_REQUESTS.REQUEST_1, DEFINITIONS.PERIODIQUE, SimConnect.SIMCONNECT_OBJECT_ID_USER, SIMCONNECT_PERIOD.SECOND, 0, 0, 0, 0); Timer timer = new Timer(); timer.Interval = 1000; timer.AutoReset = true; timer.Elapsed += new ElapsedEventHandler(OnTimer); timer.Start(); listener = new HttpListener(); listener.Prefixes.Add("http://+:8000/"); Console.WriteLine("Listening.."); listener.Start(); while (!quit) { // Note: The GetContext method blocks while waiting for a request. HttpListenerContext context = listener.GetContext(); HttpListenerRequest request = context.Request; // Obtain a response object. HttpListenerResponse response = context.Response; // Construct a response. if ((request.RawUrl == "/cmd") && (request.HttpMethod == "POST") && request.HasEntityBody && request.ContentType == "application/json") { var sr = new System.IO.StreamReader(request.InputStream, request.ContentEncoding); var code = sr.ReadToEnd(); Console.WriteLine(code); var deserializer = new JavaScriptSerializer(); var json = deserializer.Deserialize<commande>(code); Console.WriteLine(json.cmd + " : " + json.param); json.cmd = json.cmd.ToUpper(); Byte[] Bytes = BitConverter.GetBytes(Convert.ToInt32(json.param)); UInt32 Param = BitConverter.ToUInt32(Bytes, 0); try { m_scConnection.TransmitClientEvent(0, (EventEnum)Enum.Parse(typeof(EventEnum), json.cmd), Param, GROUP.GROUP1, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY); } catch (Exception e) { Console.WriteLine("La requete simconnect a échouée :" + e.Message); } response.Close(); } else if (request.RawUrl == "/getall") { response.ContentType = "application/json"; var serializer = new JavaScriptSerializer(); string json = serializer.Serialize(Donnees); byte[] buffer = System.Text.Encoding.UTF8.GetBytes(json); var output = response.OutputStream; output.Write(buffer, 0, buffer.Length); output.Close(); response.Close(); } else { response.StatusCode = 404; response.StatusDescription = "Not Found"; response.Close(); } } listener.Stop(); }