예제 #1
0
 public void Unpause()
 {
     logger.LogDebug("Unpause");
     simconnect?.TransmitClientEvent(SimConnect.SIMCONNECT_OBJECT_ID_USER, EVENTS.FREEZE_LATITUDE_LONGITUDE, 0, GROUPS.GENERIC, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
     simconnect?.TransmitClientEvent(SimConnect.SIMCONNECT_OBJECT_ID_USER, EVENTS.FREEZE_ALTITUDE, 0, GROUPS.GENERIC, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
     simconnect?.TransmitClientEvent(SimConnect.SIMCONNECT_OBJECT_ID_USER, EVENTS.FREEZE_ATTITUDE, 0, GROUPS.GENERIC, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
 }
예제 #2
0
 public void BatterySet(bool on)
 {
     //if (currentStatus?.MasterBattery == (on ? 0 : 1))
     {
         simconnect?.TransmitClientEvent(SimConnect.SIMCONNECT_OBJECT_ID_USER, EVENTS.MASTER_BATTERY_TOGGLE, 0, GROUPID.MAX, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
     }
 }
예제 #3
0
        public void setFail(SimConnect sc)
        {
            Console.WriteLine(sName + failureValue);
            switch (possibleType)
            {
            case POSSIBLE_FAIL_TYPE.STUCK:
            {
                if (!failStart)
                {
                    failureValue = dValue;
                    Console.WriteLine("start" + failureValue);
                    failStart = true;
                }
                dValue = failureValue;
                break;
            }

            case POSSIBLE_FAIL_TYPE.LEAK:
            {
                dValue -= failureValue;
                break;
            }

            case POSSIBLE_FAIL_TYPE.CONTINOUS:
            {
                if (isEvent)
                {
                    if (rnd.Next(11) >= 5)
                    {
                        sc.MapClientEventToSimEvent(eEvent, sName);
                        sc.TransmitClientEvent(SimConnect.SIMCONNECT_OBJECT_ID_USER, eEvent, 0, GROUP.ID_PRIORITY_STANDARD, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
                    }
                }
                else
                {
                    dValue = failureValue;
                }
                break;
            }

            case POSSIBLE_FAIL_TYPE.COMPLETE:
            {
                if (isEvent)
                {
                    sc.MapClientEventToSimEvent(eEvent, sName);
                    sc.TransmitClientEvent(SimConnect.SIMCONNECT_OBJECT_ID_USER, eEvent, 0, GROUP.ID_PRIORITY_STANDARD, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
                }
                else
                {
                    dValue = failureValue;
                }

                done = true;
                break;
            }
            }

            sc.SetDataOnSimObject(eDef, SimConnect.SIMCONNECT_OBJECT_ID_USER, SIMCONNECT_DATA_SET_FLAG.DEFAULT, dValue);
        }
 private void btnJetway_Click(object sender, RoutedEventArgs e)
 {
     if (!_simConnectionStatus)
     {
         return;
     }
     _simClient.MapClientEventToSimEvent(PushbackEventsEnum.KEY_TOGGLE_JETWAY, "TOGGLE_JETWAY");
     _simClient.TransmitClientEvent(0U, PushbackEventsEnum.KEY_TOGGLE_JETWAY, 1, NotificationGroupsEnum.Group0, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
 }
예제 #5
0
        // Подключение jetway к самолету по нажатию кнопки
        private void JetWayBtn_Click(object sender, EventArgs e)
        {
            if (!simConnectStatus)
            {
                return;
            }

            simConn.MapClientEventToSimEvent(EVENT_ENUM.toggleJetway, "TOGGLE_JETWAY");
            simConn.TransmitClientEvent(0U, EVENT_ENUM.toggleJetway, 1, SENDER_EVENT_ENUM.group0, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
        }
예제 #6
0
 private void SendCommand(EVENTS sendingEvent, uint data = 0)
 {
     try
     {
         simconnect?.TransmitClientEvent(SimConnect.SIMCONNECT_OBJECT_ID_USER, sendingEvent, data, GROUPID.MAX, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
     }
     catch (COMException ex) when(ex.Message == "0xC00000B0")
     {
         RecoverFromError(ex);
     }
 }
예제 #7
0
        private void SendToFSX(double aileron, double rudder, double elevator, double throttle, int gear, int flaps)
        {
            FsDataObjects.ControlDataStructure controls;
            controls.elevator  = elevator;
            controls.aileron   = aileron;
            controls.rudder    = rudder;
            controls.throttle1 = throttle * 100;
            controls.throttle2 = throttle * 100;
            controls.throttle3 = throttle * 100;
            controls.throttle4 = throttle * 100;

            simconnect.SetDataOnSimObject(FsDataObjects.DEFINITIONS.ControlDataStruct, SimConnect.SIMCONNECT_OBJECT_ID_USER, 0, controls);

            ControlsLatest = controls;

            if (gear != gear_last)
            {
                gear_last = gear;

                FsDataObjects.EVENTS g_state = (gear == 1) ? FsDataObjects.EVENTS.GEAR_UP : FsDataObjects.EVENTS.GEAR_DOWN;

                simconnect.TransmitClientEvent(SimConnect.SIMCONNECT_OBJECT_ID_USER, g_state, 0, FsDataObjects.NOTIFICATION_GROUPS.GROUP0, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
            }

            if (flaps != flaps_last)
            {
                flaps_last = flaps;

                FsDataObjects.EVENTS f_state = FsDataObjects.EVENTS.FLAPS0;

                if (flaps == 0)
                {
                    f_state = FsDataObjects.EVENTS.FLAPS0;
                }
                else if (flaps == 1)
                {
                    f_state = FsDataObjects.EVENTS.FLAPS1;
                }
                else if (flaps == 2)
                {
                    f_state = FsDataObjects.EVENTS.FLAPS2;
                }

                play_flap = true;

                simconnect.TransmitClientEvent(SimConnect.SIMCONNECT_OBJECT_ID_USER, f_state, 0, FsDataObjects.NOTIFICATION_GROUPS.GROUP0, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
            }
        }
예제 #8
0
 public void TransmitEvent(EventsEnum newEvent, uint data)
 {
     if (!Connected)
     {
         return;
     }
     simClient.TransmitClientEvent(0U, newEvent, data, NotificationGroupsEnum.Group0, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
 }
예제 #9
0
        private void sendSimEvent(CLIENT_EVENTS clientEvent, uint data = 0)
        {
            if (simconnect == null)
            {
                return;
            }

            simconnect.TransmitClientEvent(0, clientEvent, data, NOTIFICATION_GROUPS.GROUP0, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
        }
        public bool TransmitClientEvent(Groups group, Enum eventId, uint data)
        {
            if (_connected)
            {
                _simConnect.TransmitClientEvent((uint)SimConnect.SIMCONNECT_OBJECT_ID_USER, eventId, data, group, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
                return(true);
            }

            return(false);
        }
예제 #11
0
        public void SetValue(Field field, double val)
        {
            EnsureFieldIsEnabled(field);
            var controlAdaptor = controlAdaptors[field];
            var transmitVal    = controlAdaptor.PrepareTransmitValue(val);

            simconnect.TransmitClientEvent(SimConnect.SIMCONNECT_OBJECT_ID_USER,
                                           controlAdaptor.Definition,
                                           transmitVal,
                                           GROUPS.GroupA,
                                           SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
        }
예제 #12
0
 public void FreezeObjectPosition(uint objectID)
 {
     if (simConnect == null)
     {
         return;
     }
     simConnect.TransmitClientEvent(objectID,
                                    Events.FreezeLatitudeLongitude,
                                    1,
                                    (GROUP_ID)SimConnect.SIMCONNECT_GROUP_PRIORITY_HIGHEST,
                                    SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
 }
예제 #13
0
 public void BeaconSet(bool on)
 {
     if (currentStatus?.BeaconLight == (on ? 0 : 1))
     {
         simconnect.TransmitClientEvent(SimConnect.SIMCONNECT_OBJECT_ID_USER, EVENTS.BEACON_TOGGLE, 0, GROUPID.MAX, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
     }
 }
예제 #14
0
        // The simulation will pause each time a key is selected in the addon, so unpause the sim each time this happens

        void simconnect_OnRecvEvent(SimConnect sender, SIMCONNECT_RECV_EVENT data)
        {
            displayText("Pause event received");

            switch ((EVENTS)data.uEventID)
            {
            case EVENTS.PAUSED:

                simconnect.TransmitClientEvent((uint)SimConnect.SIMCONNECT_OBJECT_ID_USER, EVENTS.SEND_UNPAUSE, (uint)0, GROUPID.FLAG, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
                displayText("Unpause request sent...");
                break;
            }
        }
예제 #15
0
        public void OnSpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            if (e.Result.Confidence < .90 || !bVoiceRecognitionEnabled)
            {
                return;
            }

            switch (phrases[e.Result.Text])
            {
            case EVENTS.PAUSE:
                simconnect.TransmitClientEvent((uint)SimConnect.SIMCONNECT_OBJECT_ID_USER, EVENTS.PAUSE, (uint)0, GROUPID.FLAG, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
                Console.WriteLine("Pausing Prepar3D\n");
                break;

            case EVENTS.UNPAUSE:
                simconnect.TransmitClientEvent((uint)SimConnect.SIMCONNECT_OBJECT_ID_USER, EVENTS.UNPAUSE, (uint)0, GROUPID.FLAG, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
                Console.WriteLine("Unpausing Prepar3D\n");
                break;

            default:
                break;
            }
        }
예제 #16
0
 public void Freeze(uint aircraftId)
 {
     lock (lockObj)
     {
         logger.LogDebug("Freeze aircraft {id}", aircraftId);
         simconnect?.TransmitClientEvent(aircraftId, EVENTS.FREEZE_LATITUDE_LONGITUDE, 1, GROUPS.GENERIC, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
         simconnect?.TransmitClientEvent(aircraftId, EVENTS.FREEZE_ALTITUDE, 1, GROUPS.GENERIC, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
         simconnect?.TransmitClientEvent(aircraftId, EVENTS.FREEZE_ATTITUDE, 1, GROUPS.GENERIC, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
     }
 }
예제 #17
0
        static void Main()
        {
            simConnect = new SimConnect("SimConnectTest", GetConsoleWindow(), WM_USER_SIMCONNECT, null, 0);

            simConnect.MapClientEventToSimEvent(Events.EventSteerAileron, "AILERON_SET");
            simConnect.AddClientEventToNotificationGroup(NotificationGroups.Group0, Events.EventSteerAileron, false);

            simConnect.SetNotificationGroupPriority(NotificationGroups.Group0, SimConnect.SIMCONNECT_GROUP_PRIORITY_HIGHEST);

            while (true)
            {
                Thread.Sleep(50);
                int d = (int)(Math.Sin((DateTime.Now - DateTime.Today).TotalSeconds / 2) * 16000);
                simConnect.TransmitClientEvent(0, Events.EventSteerAileron, (uint)d, NotificationGroups.Group0, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
            }
        }
예제 #18
0
        private void AddSetVarListener()
        {
            connection.On <string>("doEvent", (stringEv) =>
            {
                Events?ev  = GetEvent(stringEv);
                uint value = GetValue(stringEv);

                if (ev != null)
                {
                    LogToConnection("New event " + ev.ToString() + " value: " + value);
                    simconnect.TransmitClientEvent(SimConnect.SIMCONNECT_OBJECT_ID_USER, ev, value, hSimConnect.group1, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
                }
                else
                {
                    LogToConnection("Invalid event " + stringEv);
                }
            });
        }
예제 #19
0
 public void ChangeLandingLightState()
 {
     SimConnect?.TransmitClientEvent(0, SimEvents.LANDING_LIGHTS_TOGGLE, 0, GROUP.GROUP1, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
 }
예제 #20
0
파일: Program.cs 프로젝트: ffs2/copilote
        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();
        }
예제 #21
0
 public void SetStarter1()
 {
     SimConnect?.TransmitClientEvent(0, SimEvents.TOGGLE_STARTER1, 1, GROUP.GROUP1, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
 }
예제 #22
0
 public void SendEvent(SimEvents evt, uint evtData)
 {
     m_simConnect.TransmitClientEvent(0U, (Enum)evt, evtData, (Enum)NOTIFICATION_GROUPS.GENERIC, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
 }
예제 #23
0
        ////////////////////////////////////////////////////////////////////////
        // COM1
        ////////////////////////////////////////////////////////////////////////

        private void btnCOM1MHzUp_Click(object sender, EventArgs e)
        {
            try
            {
                // send event
                simConnect.TransmitClientEvent(SimConnect.SIMCONNECT_OBJECT_ID_USER, EVENTS.COM_RADIO_WHOLE_INC, 0, GROUP.ID_PRIORITY_STANDARD, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
                // get status
                simConnect.RequestDataOnSimObjectType(DATA_REQUESTS.REQUEST_RADIOS, DEFINITIONS.Radios, 0, SIMCONNECT_SIMOBJECT_TYPE.USER);

                DisplayTextNewLine("Request sent...");
            }
            catch (COMException ex)
            {
                DisplayTextNewLine(ex.Message);
            }
        }
예제 #24
0
 public void SetFuel1SelectorAll()
 {
     SimConnect?.TransmitClientEvent(0, SimEvents.FUEL_SELECTOR_ALL, 0, GROUP.GROUP1, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
 }
예제 #25
0
 public void SetMixture1(uint value)
 {
     SimConnect?.TransmitClientEvent(0, SimEvents.MIXTURE1_SET, value, GROUP.GROUP1, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
 }
예제 #26
0
 public void SetAutoStart()
 {
     SimConnect?.TransmitClientEvent(0, SimEvents.ENGINE_AUTO_START, 1, GROUP.GROUP1, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
 }
예제 #27
0
 public void ChangeStrobesLightState()
 {
     SimConnect?.TransmitClientEvent(0, SimEvents.STROBES_TOGGLE, 0, GROUP.GROUP1, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
 }
예제 #28
0
 public void ChangeNavLightState()
 {
     SimConnect?.TransmitClientEvent(0, SimEvents.TOGGLE_NAV_LIGHTS, 0, GROUP.GROUP1, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
 }
예제 #29
0
        /// <summary>
        /// Sends the input parameters to FSX
        /// </summary>
        /// <param name="aileron">An aileron input in percent, between -1 and 1</param>
        /// <param name="rudder">An rudder input in percent, between -1 and 1</param>
        /// <param name="elevator">An elevator input in percent, between -1 and 1</param>
        /// <param name="throttle">An throttle input in percent, between 0 and 1</param>
        /// <param name="gear">The landing gear status, 0 being down and 1 being up</param>
        /// <param name="flaps">The flap status, with 0 being up, 1 being halfway, and 2 being down</param>
        private void SendToFSX(
            double aileron,
            double rudder,
            double elevator,
            double throttle,
            int gear,
            int flaps)
        {
            // Skip if not connected
            if (simconnect == null)
            {
                return;
            }

            // Set the data in the control data structure
            FsDataObjects.ControlDataStructure controls;
            controls.elevator  = elevator;
            controls.aileron   = aileron;
            controls.rudder    = rudder;
            controls.throttle1 = throttle * 100;
            controls.throttle2 = throttle * 100;
            controls.throttle3 = throttle * 100;
            controls.throttle4 = throttle * 100;

            // Set the data in the simconnect object
            simconnect.SetDataOnSimObject(
                FsDataObjects.DEFINITIONS.ControlDataStruct,
                SimConnect.SIMCONNECT_OBJECT_ID_USER,
                0,
                controls);

            // Save the latest controls parameters
            ControlsLatest = controls;

            // Transmit the gear state if it is different from the last gear state
            if (gear != gear_last)
            {
                gear_last = gear;

                FsDataObjects.EVENTS g_state = (gear == 1) ? FsDataObjects.EVENTS.GEAR_UP : FsDataObjects.EVENTS.GEAR_DOWN;

                simconnect.TransmitClientEvent(
                    SimConnect.SIMCONNECT_OBJECT_ID_USER,
                    g_state,
                    0,
                    FsDataObjects.NOTIFICATION_GROUPS.GROUP0,
                    SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
            }

            // Transmit the flaps state if it is different from the last flaps state
            if (flaps != flaps_last)
            {
                flaps_last = flaps;

                FsDataObjects.EVENTS f_state = FsDataObjects.EVENTS.FLAPS0;

                if (flaps == 0)
                {
                    f_state = FsDataObjects.EVENTS.FLAPS0;
                }
                else if (flaps == 1)
                {
                    f_state = FsDataObjects.EVENTS.FLAPS1;
                }
                else if (flaps == 2)
                {
                    f_state = FsDataObjects.EVENTS.FLAPS2;
                }

                simconnect.TransmitClientEvent(
                    SimConnect.SIMCONNECT_OBJECT_ID_USER,
                    f_state,
                    0,
                    FsDataObjects.NOTIFICATION_GROUPS.GROUP0,
                    SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
            }
        }
예제 #30
0
        static void Main(string[] args)
        {
            bool panelStrobeState = false;

            Console.WriteLine("Connecting to AVR panel controller");
            //var serialPort = new SerialPort("")



            Console.WriteLine("Hello World!");
            var connection = new SimConnect(
                Process.GetCurrentProcess().ProcessName,
                new IntPtr(0),
                0x0402,
                null,
                0);

            //hookup a handler for getting data out of the sim.
            connection.OnRecvSimobjectData += Connection_OnRecvSimobjectData;;

            //build control data definition schema.
            connection.AddToDataDefinition(DEFINITIONS.AirCraftControl, "AILERON POSITION", "position", SIMCONNECT_DATATYPE.FLOAT64, 0, 0);
            connection.AddToDataDefinition(DEFINITIONS.AirCraftControl, "ELEVATOR POSITION", "position", SIMCONNECT_DATATYPE.FLOAT64, 0, 1);
            connection.AddToDataDefinition(DEFINITIONS.AirCraftControl, "ELECTRICAL MASTER BATTERY", "bool", SIMCONNECT_DATATYPE.INT32, 0, 2);
            connection.AddToDataDefinition(DEFINITIONS.AirCraftControl, "GEAR HANDLE POSITION", "bool", SIMCONNECT_DATATYPE.INT32, 0, 3);

            connection.RegisterDataDefineStruct <AirCraftControlSimVars>(DEFINITIONS.AirCraftControl);
            AirCraftControlSimVars    controlSimVarsStruct;
            AirCraftControl_EventData controlSimEventStruct;

            //build the return data schema - we'll use this data to determine if we should toggle lights (or other events) or not.
            connection.AddToDataDefinition(DEFINITIONS.NonSettableData, nameof(lightStruct.LIGHT_STROBE).Replace("_", " "), "bool", SIMCONNECT_DATATYPE.INT32, 0, 0);
            connection.AddToDataDefinition(DEFINITIONS.NonSettableData, nameof(lightStruct.LIGHT_BEACON).Replace("_", " "), "bool", SIMCONNECT_DATATYPE.INT32, 0, 0);
            connection.AddToDataDefinition(DEFINITIONS.NonSettableData, nameof(lightStruct.LIGHT_CABIN_LIGHTS).Replace("_", " "), "bool", SIMCONNECT_DATATYPE.INT32, 0, 0);
            connection.AddToDataDefinition(DEFINITIONS.NonSettableData, nameof(lightStruct.LIGHT_LANDING).Replace("_", " "), "bool", SIMCONNECT_DATATYPE.INT32, 0, 0);
            connection.AddToDataDefinition(DEFINITIONS.NonSettableData, nameof(lightStruct.LIGHT_NAV).Replace("_", " "), "bool", SIMCONNECT_DATATYPE.INT32, 0, 0);
            connection.AddToDataDefinition(DEFINITIONS.NonSettableData, nameof(lightStruct.LIGHT_PANEL).Replace("_", " "), "bool", SIMCONNECT_DATATYPE.INT32, 0, 0);
            connection.AddToDataDefinition(DEFINITIONS.NonSettableData, nameof(lightStruct.LIGHT_TAXI).Replace("_", " "), "bool", SIMCONNECT_DATATYPE.INT32, 0, 0);

            connection.RegisterDataDefineStruct <NonSettableData>(DEFINITIONS.NonSettableData);

            //map all events to events with same names
            connection.MapClientEventToSimEvent(EVENTS.TOGGLE_MASTER_ALTERNATOR, nameof(EVENTS.TOGGLE_MASTER_ALTERNATOR));
            connection.MapClientEventToSimEvent(EVENTS.STROBES_TOGGLE, nameof(EVENTS.STROBES_TOGGLE));
            connection.MapClientEventToSimEvent(EVENTS.LANDING_LIGHTS_TOGGLE, nameof(EVENTS.LANDING_LIGHTS_TOGGLE));
            connection.MapClientEventToSimEvent(EVENTS.PANEL_LIGHTS_TOGGLE, nameof(EVENTS.PANEL_LIGHTS_TOGGLE));
            connection.MapClientEventToSimEvent(EVENTS.TOGGLE_BEACON_LIGHTS, nameof(EVENTS.TOGGLE_BEACON_LIGHTS));
            connection.MapClientEventToSimEvent(EVENTS.TOGGLE_CABIN_LIGHTS, nameof(EVENTS.TOGGLE_CABIN_LIGHTS));
            connection.MapClientEventToSimEvent(EVENTS.TOGGLE_NAV_LIGHTS, nameof(EVENTS.TOGGLE_NAV_LIGHTS));
            connection.MapClientEventToSimEvent(EVENTS.TOGGLE_TAXI_LIGHTS, nameof(EVENTS.TOGGLE_TAXI_LIGHTS));

            connection.MapClientEventToSimEvent(EVENTS.ALL_LIGHTS_TOGGLE, nameof(EVENTS.ALL_LIGHTS_TOGGLE));

            connection.MapClientEventToSimEvent(EVENTS.THROTTLE_SET, nameof(EVENTS.THROTTLE_SET));


            connection.RequestDataOnSimObject(
                Requests.REQUEST1,
                DEFINITIONS.NonSettableData,
                SimConnect.SIMCONNECT_OBJECT_ID_USER,
                SIMCONNECT_PERIOD.SIM_FRAME,
                SIMCONNECT_DATA_REQUEST_FLAG.DEFAULT,
                0, 0, 0);

            var task = Task.Run(() =>
            {
                while (true)
                {
                    //waitHandle.WaitOne();

                    System.Threading.Thread.Sleep(300);
                    connection.ReceiveMessage();

                    controlSimVarsStruct.aileron        = ran.Next(-1, 2) * ran.NextDouble();
                    controlSimVarsStruct.elevator       = ran.Next(-1, 2) * ran.NextDouble();
                    controlSimVarsStruct.master_battery = ran.Next(2) == 0 ? false : true;
                    controlSimVarsStruct.gear_position  = ran.Next(2) == 0 ? false : true;
                    controlSimEventStruct.throttlePos   = (uint)ran.Next(0, 16383);
                    //Debug.WriteLine(x.aileron);
                    // Debug.WriteLine(x.elevator);
                    try
                    {
                        //connection.SetDataOnSimObject(SettableData.AirCraftControl, SimConnect.SIMCONNECT_OBJECT_ID_USER, SIMCONNECT_DATA_SET_FLAG.DEFAULT, x);
                        //connection.TransmitClientEvent(SimConnect.SIMCONNECT_OBJECT_ID_USER, EVENTS.TOGGLE_MASTER_ALTERNATOR, 0, groups.group1, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
                        //connection.TransmitClientEvent(SimConnect.SIMCONNECT_OBJECT_ID_USER, EVENTS.STROBES_TOGGLE, 0, groups.group1, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
                        //connection.TransmitClientEvent(SimConnect.SIMCONNECT_OBJECT_ID_USER, EVENTS.ALL_LIGHTS_TOGGLE, 0, groups.group1, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
                        if (panelStrobeState != lightStruct.LIGHT_STROBE)
                        {
                            connection.TransmitClientEvent(SimConnect.SIMCONNECT_OBJECT_ID_USER, EVENTS.STROBES_TOGGLE, 0, groups.group1, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
                        }



                        connection.TransmitClientEvent(SimConnect.SIMCONNECT_OBJECT_ID_USER, EVENTS.THROTTLE_SET, controlSimEventStruct.throttlePos, groups.group1, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                    }
                }
            });
            var form     = new System.Windows.Forms.Form();
            var checkbox = new CheckBox();

            checkbox.CheckedChanged += (o, e) =>
            {
                panelStrobeState = checkbox.Checked;
            };

#if DEBUG
            //create a modal dialog for testing our panel
            //without actual serial coms.
            form.Controls.Add(checkbox);
            form.ShowDialog();
#else
            task.Wait();
#endif
        }
예제 #31
0
 public void SetAntiIce1(uint value)
 {
     SimConnect?.TransmitClientEvent(0, SimEvents.ANTI_ICE_SET_ENG1, value, GROUP.GROUP1, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
 }