From 21a829632a627252f963808b6e79bdc789385f20 Mon Sep 17 00:00:00 2001 From: Timian Heber Date: Sun, 6 Oct 2024 19:46:45 +0200 Subject: [PATCH 01/11] Experimentations in input event handling --- src/CTrue.FsConnect.TestConsole/Program.cs | 5 ++ .../Properties/launchSettings.json | 2 +- src/CTrue.FsConnect/FsConnect.cs | 89 +++++++++++++++++-- src/CTrue.FsConnect/IFsConnect.cs | 5 ++ 4 files changed, 95 insertions(+), 6 deletions(-) diff --git a/src/CTrue.FsConnect.TestConsole/Program.cs b/src/CTrue.FsConnect.TestConsole/Program.cs index f2b26bb..076d7e5 100644 --- a/src/CTrue.FsConnect.TestConsole/Program.cs +++ b/src/CTrue.FsConnect.TestConsole/Program.cs @@ -44,6 +44,11 @@ private static void Run(Options commandLineOptions) { _fsConnect = new FsConnect(); + _fsConnect.InputEventDefintion = "joystick:1:button:0"; + //_fsConnect.InputEventDefintion = "w"; + + _fsConnect.InputEventRaised += (sender, args) => { Console.WriteLine("Input event raised"); }; + try { if (string.IsNullOrEmpty(commandLineOptions.Hostname)) diff --git a/src/CTrue.FsConnect.TestConsole/Properties/launchSettings.json b/src/CTrue.FsConnect.TestConsole/Properties/launchSettings.json index 52029a9..6028de8 100644 --- a/src/CTrue.FsConnect.TestConsole/Properties/launchSettings.json +++ b/src/CTrue.FsConnect.TestConsole/Properties/launchSettings.json @@ -2,7 +2,7 @@ "profiles": { "FsConnectTestConsole": { "commandName": "Project", - "commandLineArgs": "-h localhost -p 500 -l Debug" + "commandLineArgs": "-h 192.168.1.174 -p 500 -l Debug" } } } \ No newline at end of file diff --git a/src/CTrue.FsConnect/FsConnect.cs b/src/CTrue.FsConnect/FsConnect.cs index 9425aa0..ec31f27 100644 --- a/src/CTrue.FsConnect/FsConnect.cs +++ b/src/CTrue.FsConnect/FsConnect.cs @@ -40,7 +40,26 @@ private enum SimEvents enum GROUP_IDS { - GROUP_1 = 98, + GROUP_1 = 98 + } + + public enum GroupIds + { + JOYSTICK_EVENT_KEY_GROUP = 200, + INPUT_KEY_GROUP = 201, + JOYSTICK_EVENT_KEY_GROUP2 = 203, + INPUT_KEY_GROUP2 = 204 + } + + public enum EventIds + { + JOYSTICK_BUTTON1 = 300, + JOYSTICK_BUTTON2 = 301 + } + + public enum SimConnectEnums : uint + { + SIMCONNECT_UNUSED = 4294967295 } #endregion @@ -72,6 +91,9 @@ enum GROUP_IDS /// public event EventHandler Crashed; + /// + public event EventHandler InputEventRaised; + /// public bool Connected { @@ -96,6 +118,14 @@ private set /// public bool Paused => _paused; + /// + /// Experimental: Set this to set up an input event handler, raising the event when triggered. + /// + /// + /// Example: "joystick:1:button:0" + /// + public string InputEventDefintion { get; set; } = string.Empty; + /// public void Connect(string applicationName, uint configIndex = 0) { @@ -137,6 +167,29 @@ public void Connect(string applicationName, uint configIndex = 0) _simConnect.MapClientEventToSimEvent(SimEvents.PauseSet, "PAUSE_SET"); } + void RegisterInputEvent(Enum joystickButtonEventId, Enum joystickButtonEventGroup, Enum inputGroup, string inputDefinition) + { + // Setup client event + _simConnect.MapClientEventToSimEvent(joystickButtonEventId, null); + _simConnect.AddClientEventToNotificationGroup(joystickButtonEventGroup, joystickButtonEventId, false); + _simConnect.SetNotificationGroupPriority(joystickButtonEventGroup, 1); + + // Setup input event mapping + _simConnect.MapInputEventToClientEvent( + inputGroup, + inputDefinition, + joystickButtonEventId, + 1, + SimConnectEnums.SIMCONNECT_UNUSED, + 0, + false + ); + + _simConnect.SetInputGroupPriority(inputGroup, 1); + + Log.Information("Input event g:{inputGroup} e:{inputEventId} registration complete for '{inputDefinition}'", joystickButtonEventGroup, joystickButtonEventId, inputDefinition); + } + /// public void Connect(string applicationName, string hostName, uint port, SimConnectProtocol protocol) { @@ -163,6 +216,10 @@ public void Disconnect() _simConnect.UnsubscribeFromSystemEvent(SimEvents.ObjectAdded); _simConnect.RemoveClientEvent(GROUP_IDS.GROUP_1, SimEvents.PauseSet); + + if(!string.IsNullOrEmpty(InputEventDefintion)) + _simConnect.RemoveClientEvent(GroupIds.INPUT_KEY_GROUP, EventIds.JOYSTICK_BUTTON1); + _simConnectReceiveThread.Abort(); _simConnectReceiveThread.Join(); @@ -379,6 +436,22 @@ private void SimConnect_OnRecvOpen(SimConnect sender, SIMCONNECT_RECV_OPEN data) _connectionInfo.SimConnectBuild = $"{data.dwSimConnectBuildMajor}.{data.dwSimConnectBuildMinor}"; Connected = true; + + if(!string.IsNullOrEmpty(InputEventDefintion)) + { + // Do this after getting the OnRecvOpen event, otherwise connection will fail. + + uint joystickId = 1; // Look at the USB game controller app and determine other of joysticks + uint joystickButtonId = 0; // Use app and see which buttons are mapped to a button id + //string inputDefinition = $"joystick:{joystickId}:button:{joystickButtonId}"; + RegisterInputEvent(EventIds.JOYSTICK_BUTTON1, GroupIds.JOYSTICK_EVENT_KEY_GROUP, GroupIds.INPUT_KEY_GROUP, InputEventDefintion); + + // TODO later: Generalize concept around registering input events + //joystickId = 1; + //joystickButtonId = 1; + //inputDefinition = $"joystick:{joystickId}:button:{joystickButtonId}"; + //RegisterInputEvent(EventIds.JOYSTICK_BUTTON2, GroupIds.JOYSTICK_EVENT_KEY_GROUP2, GroupIds.INPUT_KEY_GROUP2, inputDefinition); + } } private void SimConnect_OnRecvQuit(SimConnect sender, SIMCONNECT_RECV data) @@ -389,7 +462,7 @@ private void SimConnect_OnRecvQuit(SimConnect sender, SIMCONNECT_RECV data) private void SimConnect_OnRecvEvent(SimConnect sender, SIMCONNECT_RECV_EVENT data) { - Log.Debug("OnRecvEvent (S: {Size}, V: {Version}, I: {Id}) {GroupId}, {EventId}, {Data}", data.dwSize, data.dwVersion, data.dwID, data.uGroupID, data.uEventID, data.dwData); + Log.Debug("OnRecvEvent ({Size}b/{Version}/{Id}) g:{GroupId}, e:{EventId}, d:{Data}", data.dwSize, data.dwVersion, data.dwID, data.uGroupID, data.uEventID, data.dwData); if (data.uEventID == (uint)SimEvents.EVENT_AIRCRAFT_LOAD) { @@ -417,14 +490,20 @@ private void SimConnect_OnRecvEvent(SimConnect sender, SIMCONNECT_RECV_EVENT dat Log.Debug("ClientEvent: Paused: {Paused}", _paused); PauseStateChanged?.Invoke(this, new PauseStateChangedEventArgs() { Paused = data.dwData == 1 }); } + else if (data.uGroupID == (uint)GroupIds.JOYSTICK_EVENT_KEY_GROUP) + { + if (data.uEventID == (uint)EventIds.JOYSTICK_BUTTON1) + { + Log.Information("ClientEvent: Input event 1 event: {dwData}", data.dwData); + InputEventRaised?.Invoke(this, EventArgs.Empty); + } + } } private void SimConnect_OnRecvException(SimConnect sender, SIMCONNECT_RECV_EXCEPTION data) { Log.Warning("OnRecvException ({Size}b/{Version}/{Id}) Exception: {Exception}, SendId: {SendId}, Index: {Index}", data.dwSize, data.dwVersion, data.dwID, ((FsException)data.dwException).ToString(), data.dwSendID, data.dwIndex); - - SIMCONNECT_EXCEPTION eException = (SIMCONNECT_EXCEPTION)data.dwException; - + FsError?.Invoke(this, new FsErrorEventArgs() { ExceptionCode = (FsException)data.dwException, diff --git a/src/CTrue.FsConnect/IFsConnect.cs b/src/CTrue.FsConnect/IFsConnect.cs index 854964b..511fb42 100644 --- a/src/CTrue.FsConnect/IFsConnect.cs +++ b/src/CTrue.FsConnect/IFsConnect.cs @@ -57,6 +57,11 @@ public interface IFsConnect : IDisposable /// event EventHandler Crashed; + /// + /// + /// + event EventHandler InputEventRaised; + /// /// Gets a boolean value indication whether a connection to Flight Simulator is established. /// From 5ffefb786fb5144c64ca6025581c7a7fa9e0da9b Mon Sep 17 00:00:00 2001 From: Timian Heber Date: Sun, 6 Oct 2024 20:03:15 +0200 Subject: [PATCH 02/11] Updated version --- src/CTrue.FsConnect/CTrue.FsConnect.csproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/CTrue.FsConnect/CTrue.FsConnect.csproj b/src/CTrue.FsConnect/CTrue.FsConnect.csproj index 9da75cb..ce09324 100644 --- a/src/CTrue.FsConnect/CTrue.FsConnect.csproj +++ b/src/CTrue.FsConnect/CTrue.FsConnect.csproj @@ -13,11 +13,11 @@ Contains SimConnect binaries, as distributed by the Flight Simulator 20202 SDK 0 true https://github.com/c-true/FsConnect msfs flight-simulator simconnect - 1.3.3 + 1.3.4 true Added and updated some method signatures. * Added event ids for setting COM and NAV frequencies. - 1.3.3.0 - 1.3.3.0 + 1.3.4.0 + 1.3.4.0 From 625c2d7a264d7b0b7c802caffe3195fe3473e5d1 Mon Sep 17 00:00:00 2001 From: Timian Heber Date: Mon, 7 Oct 2024 10:30:35 +0200 Subject: [PATCH 03/11] Added readme to NuGet package --- src/CTrue.FsConnect/CTrue.FsConnect.csproj | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/CTrue.FsConnect/CTrue.FsConnect.csproj b/src/CTrue.FsConnect/CTrue.FsConnect.csproj index ce09324..0e0bfbd 100644 --- a/src/CTrue.FsConnect/CTrue.FsConnect.csproj +++ b/src/CTrue.FsConnect/CTrue.FsConnect.csproj @@ -9,11 +9,12 @@ Contains SimConnect binaries, as distributed by the Flight Simulator 20202 SDK 0.10.0 release. C-True true + README.md LICENSE.txt true https://github.com/c-true/FsConnect msfs flight-simulator simconnect - 1.3.4 + 1.3.4-alpha true Added and updated some method signatures. * Added event ids for setting COM and NAV frequencies. 1.3.4.0 @@ -34,6 +35,7 @@ Contains SimConnect binaries, as distributed by the Flight Simulator 20202 SDK 0 + From b46c1b5a7acf0f2472f1a175502a364bea19afc9 Mon Sep 17 00:00:00 2001 From: Timian Heber Date: Fri, 11 Oct 2024 19:43:30 +0200 Subject: [PATCH 04/11] Added Directory.Build.props * Packages in artifacts folder * Incremental work on generalizing input events --- .../CTrue.FsConnect.Managers.csproj | 6 -- src/CTrue.FsConnect.TestConsole/Program.cs | 2 +- src/CTrue.FsConnect.sln | 7 +- src/CTrue.FsConnect/CTrue.FsConnect.csproj | 72 +++++++++---------- src/CTrue.FsConnect/FsConnect.cs | 38 +++++----- src/CTrue.FsConnect/IFsConnect.cs | 10 +++ src/CTrue.FsConnect/InputEventInfo.cs | 30 ++++++++ src/Directory.Build.props | 27 +++++++ src/Directory.Build.targets | 28 ++++++++ src/Directory.Packages.props | 6 ++ 10 files changed, 159 insertions(+), 67 deletions(-) create mode 100644 src/CTrue.FsConnect/InputEventInfo.cs create mode 100644 src/Directory.Build.props create mode 100644 src/Directory.Build.targets create mode 100644 src/Directory.Packages.props diff --git a/src/CTrue.FsConnect.Managers/CTrue.FsConnect.Managers.csproj b/src/CTrue.FsConnect.Managers/CTrue.FsConnect.Managers.csproj index fae406b..59928bd 100644 --- a/src/CTrue.FsConnect.Managers/CTrue.FsConnect.Managers.csproj +++ b/src/CTrue.FsConnect.Managers/CTrue.FsConnect.Managers.csproj @@ -2,7 +2,6 @@ net45 - C-True Flight Simulator Connect Managers @@ -15,17 +14,12 @@ - Controlling transponder code - Initial Autopilot manager - C-True true LICENSE.txt true - https://github.com/c-true/FsConnect msfs flight-simulator simconnect - 1.3.3 true Added support for NAV frequencies, transponder and autopilot heading bug - 1.3.3.0 - 1.3.3.0 diff --git a/src/CTrue.FsConnect.TestConsole/Program.cs b/src/CTrue.FsConnect.TestConsole/Program.cs index 076d7e5..cc2724e 100644 --- a/src/CTrue.FsConnect.TestConsole/Program.cs +++ b/src/CTrue.FsConnect.TestConsole/Program.cs @@ -44,7 +44,7 @@ private static void Run(Options commandLineOptions) { _fsConnect = new FsConnect(); - _fsConnect.InputEventDefintion = "joystick:1:button:0"; + _fsConnect.InputEventDefintion = "joystick:0:button:0"; //_fsConnect.InputEventDefintion = "w"; _fsConnect.InputEventRaised += (sender, args) => { Console.WriteLine("Input event raised"); }; diff --git a/src/CTrue.FsConnect.sln b/src/CTrue.FsConnect.sln index c46ff03..6e46d83 100644 --- a/src/CTrue.FsConnect.sln +++ b/src/CTrue.FsConnect.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.30011.22 +# Visual Studio Version 17 +VisualStudioVersion = 17.11.35312.102 MinimumVisualStudioVersion = 15.0.26124.0 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CTrue.FsConnect", "CTrue.FsConnect\CTrue.FsConnect.csproj", "{D507C538-CA5D-4162-93D2-C3C560F6648E}" EndProject @@ -9,6 +9,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CTrue.FsConnect.TestConsole EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{12C96830-77DE-4270-9FAF-56D356FA045C}" ProjectSection(SolutionItems) = preProject + Directory.Build.props = Directory.Build.props + Directory.Build.targets = Directory.Build.targets + Directory.Packages.props = Directory.Packages.props ..\README.md = ..\README.md EndProjectSection EndProject diff --git a/src/CTrue.FsConnect/CTrue.FsConnect.csproj b/src/CTrue.FsConnect/CTrue.FsConnect.csproj index 0e0bfbd..8f858b1 100644 --- a/src/CTrue.FsConnect/CTrue.FsConnect.csproj +++ b/src/CTrue.FsConnect/CTrue.FsConnect.csproj @@ -1,46 +1,42 @@  - - net45 - C-True - Flight Simulator Connect - - An easy to use wrapper for SimConnect, for connection to Flight Simulator 2020. -Contains SimConnect binaries, as distributed by the Flight Simulator 20202 SDK 0.10.0 release. - C-True - true - README.md - LICENSE.txt - true - https://github.com/c-true/FsConnect - msfs flight-simulator simconnect - 1.3.4-alpha - true - Added and updated some method signatures. * Added event ids for setting COM and NAV frequencies. - 1.3.4.0 - 1.3.4.0 - + + net45 + Flight Simulator Connect + + + An easy to use wrapper for SimConnect, for connection to Flight Simulator 2020. + Contains SimConnect binaries, as distributed by the Flight Simulator 20202 SDK 0.10.0 release. + + true + README.md + LICENSE.txt + true + msfs flight-simulator simconnect + true + Added and updated some method signatures. * Added event ids for setting COM and NAV frequencies. + - - x64 - + + x64 + - - - ..\Dependencies\SimConnect\lib\net40\Microsoft.FlightSimulator.SimConnect.dll - - + + + ..\Dependencies\SimConnect\lib\net40\Microsoft.FlightSimulator.SimConnect.dll + + - - - - - - - + + + + + + + - - - + + + diff --git a/src/CTrue.FsConnect/FsConnect.cs b/src/CTrue.FsConnect/FsConnect.cs index ec31f27..167dcb8 100644 --- a/src/CTrue.FsConnect/FsConnect.cs +++ b/src/CTrue.FsConnect/FsConnect.cs @@ -21,6 +21,8 @@ public class FsConnect : IFsConnect private readonly FsConnectionInfo _connectionInfo = new FsConnectionInfo(); private bool _paused = false; private int _nextId = (int)FsConnectEnum.Base; + + private Dictionary _inputEventInfoDictionary = new Dictionary(); #region Simconnect structures @@ -51,7 +53,7 @@ public enum GroupIds INPUT_KEY_GROUP2 = 204 } - public enum EventIds + public enum EventIds : uint { JOYSTICK_BUTTON1 = 300, JOYSTICK_BUTTON2 = 301 @@ -118,12 +120,7 @@ private set /// public bool Paused => _paused; - /// - /// Experimental: Set this to set up an input event handler, raising the event when triggered. - /// - /// - /// Example: "joystick:1:button:0" - /// + /// public string InputEventDefintion { get; set; } = string.Empty; /// @@ -167,27 +164,29 @@ public void Connect(string applicationName, uint configIndex = 0) _simConnect.MapClientEventToSimEvent(SimEvents.PauseSet, "PAUSE_SET"); } - void RegisterInputEvent(Enum joystickButtonEventId, Enum joystickButtonEventGroup, Enum inputGroup, string inputDefinition) + public void RegisterInputEvent(InputEventInfo inputEventInfo) { // Setup client event - _simConnect.MapClientEventToSimEvent(joystickButtonEventId, null); - _simConnect.AddClientEventToNotificationGroup(joystickButtonEventGroup, joystickButtonEventId, false); - _simConnect.SetNotificationGroupPriority(joystickButtonEventGroup, 1); + _simConnect.MapClientEventToSimEvent(inputEventInfo.JoystickButtonEventId, null); + _simConnect.AddClientEventToNotificationGroup(inputEventInfo.JoystickButtonEventGroup, inputEventInfo.JoystickButtonEventId, false); + _simConnect.SetNotificationGroupPriority(inputEventInfo.JoystickButtonEventGroup, 1); // Setup input event mapping _simConnect.MapInputEventToClientEvent( - inputGroup, - inputDefinition, - joystickButtonEventId, + inputEventInfo.InputGroup, + inputEventInfo.InputDefinition, + inputEventInfo.JoystickButtonEventId, 1, SimConnectEnums.SIMCONNECT_UNUSED, 0, false ); - _simConnect.SetInputGroupPriority(inputGroup, 1); + _simConnect.SetInputGroupPriority(inputEventInfo.InputGroup, 1); + + //_inputEventInfoDictionary.Add((uint)inputEventInfo.JoystickButtonEventGroup, inputEventInfo); - Log.Information("Input event g:{inputGroup} e:{inputEventId} registration complete for '{inputDefinition}'", joystickButtonEventGroup, joystickButtonEventId, inputDefinition); + Log.Information("Input event g:{inputGroup} e:{inputEventId} registration complete for '{inputDefinition}'", inputEventInfo.JoystickButtonEventGroup, inputEventInfo.JoystickButtonEventId, inputEventInfo.InputDefinition); } /// @@ -441,10 +440,9 @@ private void SimConnect_OnRecvOpen(SimConnect sender, SIMCONNECT_RECV_OPEN data) { // Do this after getting the OnRecvOpen event, otherwise connection will fail. - uint joystickId = 1; // Look at the USB game controller app and determine other of joysticks - uint joystickButtonId = 0; // Use app and see which buttons are mapped to a button id - //string inputDefinition = $"joystick:{joystickId}:button:{joystickButtonId}"; - RegisterInputEvent(EventIds.JOYSTICK_BUTTON1, GroupIds.JOYSTICK_EVENT_KEY_GROUP, GroupIds.INPUT_KEY_GROUP, InputEventDefintion); + InputEventInfo iei = new InputEventInfo(EventIds.JOYSTICK_BUTTON1, GroupIds.JOYSTICK_EVENT_KEY_GROUP, GroupIds.INPUT_KEY_GROUP, InputEventDefintion, + () => { Log.Information("Input event"); }); + RegisterInputEvent(iei); // TODO later: Generalize concept around registering input events //joystickId = 1; diff --git a/src/CTrue.FsConnect/IFsConnect.cs b/src/CTrue.FsConnect/IFsConnect.cs index 511fb42..8b92617 100644 --- a/src/CTrue.FsConnect/IFsConnect.cs +++ b/src/CTrue.FsConnect/IFsConnect.cs @@ -326,5 +326,15 @@ public interface IFsConnect : IDisposable /// /// Returns an int that can be used to identifying SimConnect artifacts, such as definitions and events. int GetNextId(); + + /// + /// Experimental: Set this to set up an input event handler, raising the event when triggered. + /// + /// + /// Example: "joystick:1:button:0" + /// + string InputEventDefintion { get; set; } + + void RegisterInputEvent(InputEventInfo inputEventInfo); } } \ No newline at end of file diff --git a/src/CTrue.FsConnect/InputEventInfo.cs b/src/CTrue.FsConnect/InputEventInfo.cs new file mode 100644 index 0000000..79a8bf3 --- /dev/null +++ b/src/CTrue.FsConnect/InputEventInfo.cs @@ -0,0 +1,30 @@ +using System; + +namespace CTrue.FsConnect +{ + public class InputEventInfo + { + public Enum JoystickButtonEventId { get; } + public Enum JoystickButtonEventGroup { get; } + public Enum InputGroup { get; } + public string InputDefinition { get; } + + public InputEventRaised InputEventRaisedDelegate { get; } + + public InputEventInfo(Enum joystickButtonEventId, Enum joystickButtonEventGroup, Enum inputGroup, string inputDefinition, InputEventRaised inputEventRaisedDelegate) + { + JoystickButtonEventId = joystickButtonEventId; + JoystickButtonEventGroup = joystickButtonEventGroup; + InputGroup = inputGroup; + InputDefinition = inputDefinition; + InputEventRaisedDelegate = inputEventRaisedDelegate; + } + + public void RaiseInputEvent() + { + InputEventRaisedDelegate.Invoke(); + } + } + + public delegate void InputEventRaised(); +} \ No newline at end of file diff --git a/src/Directory.Build.props b/src/Directory.Build.props new file mode 100644 index 0000000..eb13185 --- /dev/null +++ b/src/Directory.Build.props @@ -0,0 +1,27 @@ + + + + 1 + 3 + 4 + 0 + -alpha + + $([System.IO.Path]::GetDirectoryName($([MSBuild]::GetPathOfFileAbove('.gitignore', '$(MSBuildThisFileDirectory)')))) + $(RootFolder)\artifacts + false + + + + $(MajorVersion).$(MinorVersion).$(PatchLevel)$(Tag) + $(MajorVersion).$(MinorVersion).$(PatchLevel).$(BuildCounter) + $(MajorVersion).$(MinorVersion).$(PatchLevel).$(BuildCounter) + $(MajorVersion).$(MinorVersion).$(PatchLevel).$(BuildCounter)$(Tag)+$(GitCommitId) + + C-True + C-True + git + https://github.com/c-true/FsConnect + + + \ No newline at end of file diff --git a/src/Directory.Build.targets b/src/Directory.Build.targets new file mode 100644 index 0000000..4b88f47 --- /dev/null +++ b/src/Directory.Build.targets @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props new file mode 100644 index 0000000..cd08f21 --- /dev/null +++ b/src/Directory.Packages.props @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file From ebffc924c704fe7d345fde037b13f23bc3d6de6b Mon Sep 17 00:00:00 2001 From: tihe Date: Fri, 11 Oct 2024 22:30:09 +0200 Subject: [PATCH 05/11] Uses Directory.Build.props --- .../CTrue.FsConnect.ExampleConsole.csproj | 2 +- .../CTrue.FsConnect.Managers.Test.csproj | 8 ++++---- .../CTrue.FsConnect.Managers.csproj | 2 +- .../CTrue.FsConnect.Test.csproj | 8 ++++---- .../CTrue.FsConnect.TestConsole.csproj | 8 ++++---- src/CTrue.FsConnect.sln | 2 +- src/CTrue.FsConnect/CTrue.FsConnect.csproj | 4 ++-- src/Directory.Packages.props | 11 ++++++++--- src/NuGet.config | 15 +++++++++++++++ .../CTrue.FsConnect.FsEnumGenerator.csproj | 4 ++-- 10 files changed, 42 insertions(+), 22 deletions(-) create mode 100644 src/NuGet.config diff --git a/src/CTrue.FsConnect.ExampleConsole/CTrue.FsConnect.ExampleConsole.csproj b/src/CTrue.FsConnect.ExampleConsole/CTrue.FsConnect.ExampleConsole.csproj index 0fb0635..5c1c560 100644 --- a/src/CTrue.FsConnect.ExampleConsole/CTrue.FsConnect.ExampleConsole.csproj +++ b/src/CTrue.FsConnect.ExampleConsole/CTrue.FsConnect.ExampleConsole.csproj @@ -2,7 +2,7 @@ Exe - net472 + net481 diff --git a/src/CTrue.FsConnect.Managers.Test/CTrue.FsConnect.Managers.Test.csproj b/src/CTrue.FsConnect.Managers.Test/CTrue.FsConnect.Managers.Test.csproj index 9831990..1a4ffc2 100644 --- a/src/CTrue.FsConnect.Managers.Test/CTrue.FsConnect.Managers.Test.csproj +++ b/src/CTrue.FsConnect.Managers.Test/CTrue.FsConnect.Managers.Test.csproj @@ -1,7 +1,7 @@ - net45 + net481 @@ -13,9 +13,9 @@ x64 - - - + + + diff --git a/src/CTrue.FsConnect.Managers/CTrue.FsConnect.Managers.csproj b/src/CTrue.FsConnect.Managers/CTrue.FsConnect.Managers.csproj index 59928bd..2387fa2 100644 --- a/src/CTrue.FsConnect.Managers/CTrue.FsConnect.Managers.csproj +++ b/src/CTrue.FsConnect.Managers/CTrue.FsConnect.Managers.csproj @@ -1,7 +1,7 @@  - net45 + net481 Flight Simulator Connect Managers diff --git a/src/CTrue.FsConnect.Test/CTrue.FsConnect.Test.csproj b/src/CTrue.FsConnect.Test/CTrue.FsConnect.Test.csproj index 05ea411..c1bb9a3 100644 --- a/src/CTrue.FsConnect.Test/CTrue.FsConnect.Test.csproj +++ b/src/CTrue.FsConnect.Test/CTrue.FsConnect.Test.csproj @@ -1,14 +1,14 @@  - net45 + net481 x64 - - - + + + diff --git a/src/CTrue.FsConnect.TestConsole/CTrue.FsConnect.TestConsole.csproj b/src/CTrue.FsConnect.TestConsole/CTrue.FsConnect.TestConsole.csproj index 10eadf8..c39ce4a 100644 --- a/src/CTrue.FsConnect.TestConsole/CTrue.FsConnect.TestConsole.csproj +++ b/src/CTrue.FsConnect.TestConsole/CTrue.FsConnect.TestConsole.csproj @@ -2,7 +2,7 @@ Exe - net472 + net481 @@ -14,9 +14,9 @@ - - - + + + diff --git a/src/CTrue.FsConnect.sln b/src/CTrue.FsConnect.sln index 6e46d83..8e71618 100644 --- a/src/CTrue.FsConnect.sln +++ b/src/CTrue.FsConnect.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 -VisualStudioVersion = 17.11.35312.102 +VisualStudioVersion = 17.10.35004.147 MinimumVisualStudioVersion = 15.0.26124.0 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CTrue.FsConnect", "CTrue.FsConnect\CTrue.FsConnect.csproj", "{D507C538-CA5D-4162-93D2-C3C560F6648E}" EndProject diff --git a/src/CTrue.FsConnect/CTrue.FsConnect.csproj b/src/CTrue.FsConnect/CTrue.FsConnect.csproj index 8f858b1..c9e2585 100644 --- a/src/CTrue.FsConnect/CTrue.FsConnect.csproj +++ b/src/CTrue.FsConnect/CTrue.FsConnect.csproj @@ -1,7 +1,7 @@  - net45 + net481 Flight Simulator Connect @@ -36,7 +36,7 @@ - + diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index cd08f21..e77cdd6 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -1,6 +1,11 @@  - - - + + + + + + + + \ No newline at end of file diff --git a/src/NuGet.config b/src/NuGet.config new file mode 100644 index 0000000..b3453da --- /dev/null +++ b/src/NuGet.config @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/tools/CTrue.FsConnect.FsEnumGenerator/CTrue.FsConnect.FsEnumGenerator.csproj b/src/tools/CTrue.FsConnect.FsEnumGenerator/CTrue.FsConnect.FsEnumGenerator.csproj index 3bcde41..5f980b4 100644 --- a/src/tools/CTrue.FsConnect.FsEnumGenerator/CTrue.FsConnect.FsEnumGenerator.csproj +++ b/src/tools/CTrue.FsConnect.FsEnumGenerator/CTrue.FsConnect.FsEnumGenerator.csproj @@ -2,12 +2,12 @@ Exe - net472 + net481 FsEnumGenerator - + From d4d8f41ecf7326165d08a6751f5c641197e6cce4 Mon Sep 17 00:00:00 2001 From: TimianHeber Date: Fri, 11 Oct 2024 23:02:16 +0200 Subject: [PATCH 06/11] Hooked up input handling structure --- src/CTrue.FsConnect/FsConnect.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/CTrue.FsConnect/FsConnect.cs b/src/CTrue.FsConnect/FsConnect.cs index 167dcb8..41e0052 100644 --- a/src/CTrue.FsConnect/FsConnect.cs +++ b/src/CTrue.FsConnect/FsConnect.cs @@ -184,7 +184,7 @@ public void RegisterInputEvent(InputEventInfo inputEventInfo) _simConnect.SetInputGroupPriority(inputEventInfo.InputGroup, 1); - //_inputEventInfoDictionary.Add((uint)inputEventInfo.JoystickButtonEventGroup, inputEventInfo); + _inputEventInfoDictionary.Add((uint)(object)inputEventInfo.JoystickButtonEventGroup, inputEventInfo); Log.Information("Input event g:{inputGroup} e:{inputEventId} registration complete for '{inputDefinition}'", inputEventInfo.JoystickButtonEventGroup, inputEventInfo.JoystickButtonEventId, inputEventInfo.InputDefinition); } @@ -496,6 +496,14 @@ private void SimConnect_OnRecvEvent(SimConnect sender, SIMCONNECT_RECV_EVENT dat InputEventRaised?.Invoke(this, EventArgs.Empty); } } + else if (_inputEventInfoDictionary.TryGetValue(data.uGroupID, out var iei)) + { + Log.Information("Handling input event: {uGroupID} / {uEventID}", data.uGroupID, data.uEventID); + if (data.uEventID == (uint)(object)iei.JoystickButtonEventId) ; + { + iei.RaiseInputEvent(); + } + } } private void SimConnect_OnRecvException(SimConnect sender, SIMCONNECT_RECV_EXCEPTION data) From ce85ff60a996f065420ffa3d994c4d3e4128fe43 Mon Sep 17 00:00:00 2001 From: Timian Heber Date: Sat, 12 Oct 2024 20:23:28 +0200 Subject: [PATCH 07/11] Updated to latest MSFS SDK version 0.24.3.0 * Generalized input event mapping --- .../CTrue.FsConnect.ExampleConsole.csproj | 4 +- .../CTrue.FsConnect.Managers.Test.csproj | 2 +- .../CTrue.FsConnect.Managers.csproj | 4 +- .../CTrue.FsConnect.Test.csproj | 4 +- .../CTrue.FsConnect.TestConsole.csproj | 4 +- src/CTrue.FsConnect.TestConsole/Options.cs | 6 ++ src/CTrue.FsConnect.TestConsole/Program.cs | 40 ++++++- .../Properties/launchSettings.json | 2 +- src/CTrue.FsConnect/CTrue.FsConnect.csproj | 6 +- src/CTrue.FsConnect/FsConnect.cs | 99 ++++++------------ src/CTrue.FsConnect/FsConnectEnum.cs | 2 +- src/CTrue.FsConnect/IFsConnect.cs | 13 +-- src/CTrue.FsConnect/InputEventInfo.cs | 10 +- .../SimConnect/build/SimConnect.dll | Bin 58368 -> 67072 bytes .../Microsoft.FlightSimulator.SimConnect.dll | Bin 131584 -> 0 bytes .../Microsoft.FlightSimulator.SimConnect.dll | Bin 0 -> 152576 bytes src/Dependencies/SimConnect/readme.txt | 2 +- src/Directory.Build.props | 2 +- src/Directory.Packages.props | 19 ++-- src/NuGet.config | 4 + .../CTrue.FsConnect.FsEnumGenerator.csproj | 16 +-- 21 files changed, 118 insertions(+), 121 deletions(-) delete mode 100644 src/Dependencies/SimConnect/lib/net40/Microsoft.FlightSimulator.SimConnect.dll create mode 100644 src/Dependencies/SimConnect/lib/net461/Microsoft.FlightSimulator.SimConnect.dll diff --git a/src/CTrue.FsConnect.ExampleConsole/CTrue.FsConnect.ExampleConsole.csproj b/src/CTrue.FsConnect.ExampleConsole/CTrue.FsConnect.ExampleConsole.csproj index 5c1c560..84387ba 100644 --- a/src/CTrue.FsConnect.ExampleConsole/CTrue.FsConnect.ExampleConsole.csproj +++ b/src/CTrue.FsConnect.ExampleConsole/CTrue.FsConnect.ExampleConsole.csproj @@ -2,7 +2,7 @@ Exe - net481 + net461 @@ -19,7 +19,7 @@ - ..\Dependencies\SimConnect\lib\net40\Microsoft.FlightSimulator.SimConnect.dll + ..\Dependencies\SimConnect\lib\net461\Microsoft.FlightSimulator.SimConnect.dll diff --git a/src/CTrue.FsConnect.Managers.Test/CTrue.FsConnect.Managers.Test.csproj b/src/CTrue.FsConnect.Managers.Test/CTrue.FsConnect.Managers.Test.csproj index 1a4ffc2..bb1efd9 100644 --- a/src/CTrue.FsConnect.Managers.Test/CTrue.FsConnect.Managers.Test.csproj +++ b/src/CTrue.FsConnect.Managers.Test/CTrue.FsConnect.Managers.Test.csproj @@ -1,7 +1,7 @@ - net481 + net461 diff --git a/src/CTrue.FsConnect.Managers/CTrue.FsConnect.Managers.csproj b/src/CTrue.FsConnect.Managers/CTrue.FsConnect.Managers.csproj index 2387fa2..e330a79 100644 --- a/src/CTrue.FsConnect.Managers/CTrue.FsConnect.Managers.csproj +++ b/src/CTrue.FsConnect.Managers/CTrue.FsConnect.Managers.csproj @@ -1,7 +1,7 @@  - net481 + net461 Flight Simulator Connect Managers @@ -36,7 +36,7 @@ - ..\Dependencies\SimConnect\lib\net40\Microsoft.FlightSimulator.SimConnect.dll + ..\Dependencies\SimConnect\lib\net461\Microsoft.FlightSimulator.SimConnect.dll diff --git a/src/CTrue.FsConnect.Test/CTrue.FsConnect.Test.csproj b/src/CTrue.FsConnect.Test/CTrue.FsConnect.Test.csproj index c1bb9a3..1bf485e 100644 --- a/src/CTrue.FsConnect.Test/CTrue.FsConnect.Test.csproj +++ b/src/CTrue.FsConnect.Test/CTrue.FsConnect.Test.csproj @@ -1,7 +1,7 @@  - net481 + net461 x64 @@ -17,7 +17,7 @@ - ..\Dependencies\SimConnect\lib\net40\Microsoft.FlightSimulator.SimConnect.dll + ..\Dependencies\SimConnect\lib\net461\Microsoft.FlightSimulator.SimConnect.dll diff --git a/src/CTrue.FsConnect.TestConsole/CTrue.FsConnect.TestConsole.csproj b/src/CTrue.FsConnect.TestConsole/CTrue.FsConnect.TestConsole.csproj index c39ce4a..ed85601 100644 --- a/src/CTrue.FsConnect.TestConsole/CTrue.FsConnect.TestConsole.csproj +++ b/src/CTrue.FsConnect.TestConsole/CTrue.FsConnect.TestConsole.csproj @@ -2,7 +2,7 @@ Exe - net481 + net461 @@ -26,7 +26,7 @@ - ..\Dependencies\SimConnect\lib\net40\Microsoft.FlightSimulator.SimConnect.dll + ..\Dependencies\SimConnect\lib\net461\Microsoft.FlightSimulator.SimConnect.dll diff --git a/src/CTrue.FsConnect.TestConsole/Options.cs b/src/CTrue.FsConnect.TestConsole/Options.cs index 4566b7f..737b143 100644 --- a/src/CTrue.FsConnect.TestConsole/Options.cs +++ b/src/CTrue.FsConnect.TestConsole/Options.cs @@ -16,5 +16,11 @@ public class Options [Option('l', "loglevel", HelpText = "Specifies the log level.", Default = LogEventLevel.Warning)] public LogEventLevel LogLevel { get; set; } + + [Option('j', "joystick", + HelpText = + "Provide the joystick id, the index in list of joysticks, to handle joystick events. (Use Setup USB Game Controllers app)", + Required = false, Default = 0)] + public uint JoystickId { get; set; } } } \ No newline at end of file diff --git a/src/CTrue.FsConnect.TestConsole/Program.cs b/src/CTrue.FsConnect.TestConsole/Program.cs index cc2724e..3cb4a71 100644 --- a/src/CTrue.FsConnect.TestConsole/Program.cs +++ b/src/CTrue.FsConnect.TestConsole/Program.cs @@ -44,11 +44,6 @@ private static void Run(Options commandLineOptions) { _fsConnect = new FsConnect(); - _fsConnect.InputEventDefintion = "joystick:0:button:0"; - //_fsConnect.InputEventDefintion = "w"; - - _fsConnect.InputEventRaised += (sender, args) => { Console.WriteLine("Input event raised"); }; - try { if (string.IsNullOrEmpty(commandLineOptions.Hostname)) @@ -91,6 +86,7 @@ private static void Run(Options commandLineOptions) Console.WriteLine("Initializing data definitions"); InitializeDataDefinitions(_fsConnect); + InitializeInputEvents(_fsConnect, commandLineOptions.JoystickId); _fsConnect.SetText("Test Console connected", 2); @@ -141,6 +137,21 @@ private static void InitializeDataDefinitions(FsConnect fsConnect) fsConnect.RegisterDataDefinition(Definitions.PlanePosition); } + private static void InitializeInputEvents(FsConnect fsConnect, uint joystickId) + { + // Use Set Up USB Game controller app in windows to determine order of USB joystick devices. Use the Properties view to determine button ids. + // Note that there may be a constraint in SimConnect for the number of buttons supported, all buttons in complex devices may not be mappable. + InputEventInfo iei = new InputEventInfo(EventIds.JOYSTICK_BUTTON1, GroupIds.JOYSTICK_EVENT_KEY_GROUP, GroupIds.INPUT_KEY_GROUP, GetjoystickButtonInputEventDefinition(joystickId, 0), + () => { Log.Information("Joystick button 1 clicked"); }); + + fsConnect.RegisterInputEvent(iei); + + iei = new InputEventInfo(EventIds.JOYSTICK_BUTTON2, GroupIds.JOYSTICK_EVENT_KEY_GROUP, GroupIds.INPUT_KEY_GROUP, GetjoystickButtonInputEventDefinition(joystickId, 1), + () => { Log.Information("Joystick button 2 clicked"); }); + + fsConnect.RegisterInputEvent(iei); + } + static void DisplayHelp(ParserResult result, IEnumerable errs) { HelpText helpText; @@ -159,5 +170,24 @@ static void DisplayHelp(ParserResult result, IEnumerable errs) } Console.WriteLine(helpText); } + + private static string GetjoystickButtonInputEventDefinition(uint joystickId, uint buttonId) + { + return $"joystick:{joystickId}:button:{buttonId}"; + } + } + + public enum GroupIds : uint + { + JOYSTICK_EVENT_KEY_GROUP = 200, + INPUT_KEY_GROUP = 201, + JOYSTICK_EVENT_KEY_GROUP2 = 203, + INPUT_KEY_GROUP2 = 204 + } + + public enum EventIds : uint + { + JOYSTICK_BUTTON1 = 300, + JOYSTICK_BUTTON2 = 301 } } diff --git a/src/CTrue.FsConnect.TestConsole/Properties/launchSettings.json b/src/CTrue.FsConnect.TestConsole/Properties/launchSettings.json index 6028de8..d44395f 100644 --- a/src/CTrue.FsConnect.TestConsole/Properties/launchSettings.json +++ b/src/CTrue.FsConnect.TestConsole/Properties/launchSettings.json @@ -2,7 +2,7 @@ "profiles": { "FsConnectTestConsole": { "commandName": "Project", - "commandLineArgs": "-h 192.168.1.174 -p 500 -l Debug" + "commandLineArgs": "-h 192.168.1.174 -p 500 -l Debug -j 0" } } } \ No newline at end of file diff --git a/src/CTrue.FsConnect/CTrue.FsConnect.csproj b/src/CTrue.FsConnect/CTrue.FsConnect.csproj index c9e2585..1f73c9d 100644 --- a/src/CTrue.FsConnect/CTrue.FsConnect.csproj +++ b/src/CTrue.FsConnect/CTrue.FsConnect.csproj @@ -1,7 +1,7 @@  - net481 + net461 Flight Simulator Connect @@ -23,14 +23,14 @@ - ..\Dependencies\SimConnect\lib\net40\Microsoft.FlightSimulator.SimConnect.dll + ..\Dependencies\SimConnect\lib\net461\Microsoft.FlightSimulator.SimConnect.dll - + diff --git a/src/CTrue.FsConnect/FsConnect.cs b/src/CTrue.FsConnect/FsConnect.cs index 41e0052..8cb71cd 100644 --- a/src/CTrue.FsConnect/FsConnect.cs +++ b/src/CTrue.FsConnect/FsConnect.cs @@ -13,20 +13,19 @@ namespace CTrue.FsConnect /// public class FsConnect : IFsConnect { - private SimConnect _simConnect = null; - private EventWaitHandle _simConnectEventHandle = new EventWaitHandle(false, EventResetMode.AutoReset); + private readonly EventWaitHandle _simConnectEventHandle = new EventWaitHandle(false, EventResetMode.AutoReset); + private readonly List _inputEventInfoList = new List(); + private Thread _simConnectReceiveThread = null; private readonly FsConnectionInfo _connectionInfo = new FsConnectionInfo(); private bool _paused = false; private int _nextId = (int)FsConnectEnum.Base; - private Dictionary _inputEventInfoDictionary = new Dictionary(); - #region Simconnect structures - private enum SimEvents + private enum SimEvents : uint { EVENT_AIRCRAFT_LOAD, EVENT_FLIGHT_LOAD, @@ -40,30 +39,11 @@ private enum SimEvents SetText } - enum GROUP_IDS + enum GROUP_IDS : uint { GROUP_1 = 98 } - public enum GroupIds - { - JOYSTICK_EVENT_KEY_GROUP = 200, - INPUT_KEY_GROUP = 201, - JOYSTICK_EVENT_KEY_GROUP2 = 203, - INPUT_KEY_GROUP2 = 204 - } - - public enum EventIds : uint - { - JOYSTICK_BUTTON1 = 300, - JOYSTICK_BUTTON2 = 301 - } - - public enum SimConnectEnums : uint - { - SIMCONNECT_UNUSED = 4294967295 - } - #endregion /// @@ -93,9 +73,6 @@ public enum SimConnectEnums : uint /// public event EventHandler Crashed; - /// - public event EventHandler InputEventRaised; - /// public bool Connected { @@ -120,9 +97,6 @@ private set /// public bool Paused => _paused; - /// - public string InputEventDefintion { get; set; } = string.Empty; - /// public void Connect(string applicationName, uint configIndex = 0) { @@ -164,29 +138,30 @@ public void Connect(string applicationName, uint configIndex = 0) _simConnect.MapClientEventToSimEvent(SimEvents.PauseSet, "PAUSE_SET"); } + /// public void RegisterInputEvent(InputEventInfo inputEventInfo) { // Setup client event - _simConnect.MapClientEventToSimEvent(inputEventInfo.JoystickButtonEventId, null); - _simConnect.AddClientEventToNotificationGroup(inputEventInfo.JoystickButtonEventGroup, inputEventInfo.JoystickButtonEventId, false); - _simConnect.SetNotificationGroupPriority(inputEventInfo.JoystickButtonEventGroup, 1); + _simConnect.MapClientEventToSimEvent(inputEventInfo.ClientEventId, null); + _simConnect.AddClientEventToNotificationGroup(inputEventInfo.NotificationGroupId, inputEventInfo.ClientEventId, false); + _simConnect.SetNotificationGroupPriority(inputEventInfo.NotificationGroupId, 1); // Setup input event mapping _simConnect.MapInputEventToClientEvent( inputEventInfo.InputGroup, inputEventInfo.InputDefinition, - inputEventInfo.JoystickButtonEventId, + inputEventInfo.ClientEventId, 1, - SimConnectEnums.SIMCONNECT_UNUSED, + (FsConnectEnum)SimConnect.SIMCONNECT_UNUSED, 0, false ); _simConnect.SetInputGroupPriority(inputEventInfo.InputGroup, 1); - _inputEventInfoDictionary.Add((uint)(object)inputEventInfo.JoystickButtonEventGroup, inputEventInfo); + _inputEventInfoList.Add(inputEventInfo); - Log.Information("Input event g:{inputGroup} e:{inputEventId} registration complete for '{inputDefinition}'", inputEventInfo.JoystickButtonEventGroup, inputEventInfo.JoystickButtonEventId, inputEventInfo.InputDefinition); + Log.Information("Input event g:{inputGroup} e:{inputEventId} registration complete for '{inputDefinition}'", inputEventInfo.NotificationGroupId, inputEventInfo.ClientEventId, inputEventInfo.InputDefinition); } /// @@ -206,6 +181,7 @@ public void Disconnect() try { + Log.Debug("Disconnecting from Flight Simulator. Unsubscribing from events."); _simConnect.UnsubscribeFromSystemEvent(SimEvents.EVENT_AIRCRAFT_LOAD); _simConnect.UnsubscribeFromSystemEvent(SimEvents.EVENT_FLIGHT_LOAD); _simConnect.UnsubscribeFromSystemEvent(SimEvents.EVENT_PAUSED); @@ -216,8 +192,11 @@ public void Disconnect() _simConnect.RemoveClientEvent(GROUP_IDS.GROUP_1, SimEvents.PauseSet); - if(!string.IsNullOrEmpty(InputEventDefintion)) - _simConnect.RemoveClientEvent(GroupIds.INPUT_KEY_GROUP, EventIds.JOYSTICK_BUTTON1); + _inputEventInfoList.ForEach(iei => + { + _simConnect.RemoveClientEvent(iei.NotificationGroupId, iei.ClientEventId); + _simConnect.RemoveInputEvent(iei.InputGroup, iei.InputDefinition); + }); _simConnectReceiveThread.Abort(); _simConnectReceiveThread.Join(); @@ -247,6 +226,8 @@ public void Disconnect() Connected = false; } + + Log.Information("Disconnected from Flight Simulator"); } #region RegisterDataDefinition @@ -435,21 +416,6 @@ private void SimConnect_OnRecvOpen(SimConnect sender, SIMCONNECT_RECV_OPEN data) _connectionInfo.SimConnectBuild = $"{data.dwSimConnectBuildMajor}.{data.dwSimConnectBuildMinor}"; Connected = true; - - if(!string.IsNullOrEmpty(InputEventDefintion)) - { - // Do this after getting the OnRecvOpen event, otherwise connection will fail. - - InputEventInfo iei = new InputEventInfo(EventIds.JOYSTICK_BUTTON1, GroupIds.JOYSTICK_EVENT_KEY_GROUP, GroupIds.INPUT_KEY_GROUP, InputEventDefintion, - () => { Log.Information("Input event"); }); - RegisterInputEvent(iei); - - // TODO later: Generalize concept around registering input events - //joystickId = 1; - //joystickButtonId = 1; - //inputDefinition = $"joystick:{joystickId}:button:{joystickButtonId}"; - //RegisterInputEvent(EventIds.JOYSTICK_BUTTON2, GroupIds.JOYSTICK_EVENT_KEY_GROUP2, GroupIds.INPUT_KEY_GROUP2, inputDefinition); - } } private void SimConnect_OnRecvQuit(SimConnect sender, SIMCONNECT_RECV data) @@ -488,24 +454,21 @@ private void SimConnect_OnRecvEvent(SimConnect sender, SIMCONNECT_RECV_EVENT dat Log.Debug("ClientEvent: Paused: {Paused}", _paused); PauseStateChanged?.Invoke(this, new PauseStateChangedEventArgs() { Paused = data.dwData == 1 }); } - else if (data.uGroupID == (uint)GroupIds.JOYSTICK_EVENT_KEY_GROUP) - { - if (data.uEventID == (uint)EventIds.JOYSTICK_BUTTON1) - { - Log.Information("ClientEvent: Input event 1 event: {dwData}", data.dwData); - InputEventRaised?.Invoke(this, EventArgs.Empty); - } - } - else if (_inputEventInfoDictionary.TryGetValue(data.uGroupID, out var iei)) + else if (GetInputEventHandler(data.uGroupID, data.uEventID, out var iei)) { Log.Information("Handling input event: {uGroupID} / {uEventID}", data.uGroupID, data.uEventID); - if (data.uEventID == (uint)(object)iei.JoystickButtonEventId) ; - { - iei.RaiseInputEvent(); - } + iei.RaiseInputEvent(); } } + private bool GetInputEventHandler(uint groupId, uint eventId, out InputEventInfo iei) + { + iei = _inputEventInfoList.FirstOrDefault(i => + (uint)(object)i.NotificationGroupId == groupId && (uint)(object)i.ClientEventId == eventId); + + return iei != null; + } + private void SimConnect_OnRecvException(SimConnect sender, SIMCONNECT_RECV_EXCEPTION data) { Log.Warning("OnRecvException ({Size}b/{Version}/{Id}) Exception: {Exception}, SendId: {SendId}, Index: {Index}", data.dwSize, data.dwVersion, data.dwID, ((FsException)data.dwException).ToString(), data.dwSendID, data.dwIndex); diff --git a/src/CTrue.FsConnect/FsConnectEnum.cs b/src/CTrue.FsConnect/FsConnectEnum.cs index 3683489..20b9de8 100644 --- a/src/CTrue.FsConnect/FsConnectEnum.cs +++ b/src/CTrue.FsConnect/FsConnectEnum.cs @@ -3,7 +3,7 @@ /// /// The is a dummy enum used when identifying definitions, events and other SimConnect artifacts that needs to be identified. /// - public enum FsConnectEnum + public enum FsConnectEnum : uint { /// /// Base enum identifying the first enum id used by FsConnect. diff --git a/src/CTrue.FsConnect/IFsConnect.cs b/src/CTrue.FsConnect/IFsConnect.cs index 8b92617..bb217a4 100644 --- a/src/CTrue.FsConnect/IFsConnect.cs +++ b/src/CTrue.FsConnect/IFsConnect.cs @@ -57,11 +57,6 @@ public interface IFsConnect : IDisposable /// event EventHandler Crashed; - /// - /// - /// - event EventHandler InputEventRaised; - /// /// Gets a boolean value indication whether a connection to Flight Simulator is established. /// @@ -328,13 +323,9 @@ public interface IFsConnect : IDisposable int GetNextId(); /// - /// Experimental: Set this to set up an input event handler, raising the event when triggered. + /// Registers handling of an input event. /// - /// - /// Example: "joystick:1:button:0" - /// - string InputEventDefintion { get; set; } - + /// void RegisterInputEvent(InputEventInfo inputEventInfo); } } \ No newline at end of file diff --git a/src/CTrue.FsConnect/InputEventInfo.cs b/src/CTrue.FsConnect/InputEventInfo.cs index 79a8bf3..c4f20d6 100644 --- a/src/CTrue.FsConnect/InputEventInfo.cs +++ b/src/CTrue.FsConnect/InputEventInfo.cs @@ -4,17 +4,17 @@ namespace CTrue.FsConnect { public class InputEventInfo { - public Enum JoystickButtonEventId { get; } - public Enum JoystickButtonEventGroup { get; } + public Enum ClientEventId { get; } + public Enum NotificationGroupId { get; } public Enum InputGroup { get; } public string InputDefinition { get; } public InputEventRaised InputEventRaisedDelegate { get; } - public InputEventInfo(Enum joystickButtonEventId, Enum joystickButtonEventGroup, Enum inputGroup, string inputDefinition, InputEventRaised inputEventRaisedDelegate) + public InputEventInfo(Enum clientEventId, Enum notificationGroupId, Enum inputGroup, string inputDefinition, InputEventRaised inputEventRaisedDelegate) { - JoystickButtonEventId = joystickButtonEventId; - JoystickButtonEventGroup = joystickButtonEventGroup; + ClientEventId = clientEventId; + NotificationGroupId = notificationGroupId; InputGroup = inputGroup; InputDefinition = inputDefinition; InputEventRaisedDelegate = inputEventRaisedDelegate; diff --git a/src/Dependencies/SimConnect/build/SimConnect.dll b/src/Dependencies/SimConnect/build/SimConnect.dll index da40b739e0ba266b6f7fd995421416060d278fcb..f6b76780e88e9f705a7b8e5267b9555e653a669b 100644 GIT binary patch literal 67072 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 literal 58368 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�J|dw(hL6 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 literal 0 HcmV?d00001 diff --git a/src/Dependencies/SimConnect/readme.txt b/src/Dependencies/SimConnect/readme.txt index 6b8d9b0..086e1dc 100644 --- a/src/Dependencies/SimConnect/readme.txt +++ b/src/Dependencies/SimConnect/readme.txt @@ -1 +1 @@ -The SimConnect binaries in this folder are distributed as part of the Microsoft Flight Simulator 2020 SDK version 0.5.1 release. \ No newline at end of file +The SimConnect binaries in this folder are distributed as part of the Microsoft Flight Simulator 2020 SDK version 0.24.3.0 release. \ No newline at end of file diff --git a/src/Directory.Build.props b/src/Directory.Build.props index eb13185..597cdc7 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -3,7 +3,7 @@ 1 3 - 4 + 5 0 -alpha diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index e77cdd6..be5ffe7 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -1,11 +1,14 @@  - - - - - - - - + + true + + + + + + + + + \ No newline at end of file diff --git a/src/NuGet.config b/src/NuGet.config index b3453da..96dca10 100644 --- a/src/NuGet.config +++ b/src/NuGet.config @@ -5,9 +5,13 @@ + + + + diff --git a/src/tools/CTrue.FsConnect.FsEnumGenerator/CTrue.FsConnect.FsEnumGenerator.csproj b/src/tools/CTrue.FsConnect.FsEnumGenerator/CTrue.FsConnect.FsEnumGenerator.csproj index 5f980b4..c08fb8d 100644 --- a/src/tools/CTrue.FsConnect.FsEnumGenerator/CTrue.FsConnect.FsEnumGenerator.csproj +++ b/src/tools/CTrue.FsConnect.FsEnumGenerator/CTrue.FsConnect.FsEnumGenerator.csproj @@ -1,13 +1,13 @@ - - Exe - net481 - FsEnumGenerator - + + Exe + net461 + FsEnumGenerator + - - - + + + From c5181cd32df265a8f9211078243ab8ef08f303c5 Mon Sep 17 00:00:00 2001 From: Timian Heber Date: Sun, 13 Oct 2024 21:47:12 +0200 Subject: [PATCH 08/11] Simple check for not registrering input events multiple times --- src/CTrue.FsConnect/FsConnect.cs | 11 ++++++++++- src/CTrue.FsConnect/IFsConnect.cs | 3 ++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/CTrue.FsConnect/FsConnect.cs b/src/CTrue.FsConnect/FsConnect.cs index 8cb71cd..94dcf09 100644 --- a/src/CTrue.FsConnect/FsConnect.cs +++ b/src/CTrue.FsConnect/FsConnect.cs @@ -139,8 +139,15 @@ public void Connect(string applicationName, uint configIndex = 0) } /// - public void RegisterInputEvent(InputEventInfo inputEventInfo) + public bool RegisterInputEvent(InputEventInfo inputEventInfo) { + if (GetInputEventHandler((uint)(object)inputEventInfo.NotificationGroupId, + (uint)(object)inputEventInfo.ClientEventId, out _)) + { + Log.Warning("Input event already registered g:{inputGroup} e:{inputEventId} '{inputDefinition}'", inputEventInfo.NotificationGroupId, inputEventInfo.ClientEventId, inputEventInfo.InputDefinition); + return false; + } + // Setup client event _simConnect.MapClientEventToSimEvent(inputEventInfo.ClientEventId, null); _simConnect.AddClientEventToNotificationGroup(inputEventInfo.NotificationGroupId, inputEventInfo.ClientEventId, false); @@ -162,6 +169,8 @@ public void RegisterInputEvent(InputEventInfo inputEventInfo) _inputEventInfoList.Add(inputEventInfo); Log.Information("Input event g:{inputGroup} e:{inputEventId} registration complete for '{inputDefinition}'", inputEventInfo.NotificationGroupId, inputEventInfo.ClientEventId, inputEventInfo.InputDefinition); + + return true; } /// diff --git a/src/CTrue.FsConnect/IFsConnect.cs b/src/CTrue.FsConnect/IFsConnect.cs index bb217a4..146290c 100644 --- a/src/CTrue.FsConnect/IFsConnect.cs +++ b/src/CTrue.FsConnect/IFsConnect.cs @@ -326,6 +326,7 @@ public interface IFsConnect : IDisposable /// Registers handling of an input event. /// /// - void RegisterInputEvent(InputEventInfo inputEventInfo); + /// Returns true if input event was registered, false if already registered. + bool RegisterInputEvent(InputEventInfo inputEventInfo); } } \ No newline at end of file From 090b280aaf6d35c5789d922f87511b087b8eadd9 Mon Sep 17 00:00:00 2001 From: Timian Heber Date: Mon, 14 Oct 2024 19:26:47 +0200 Subject: [PATCH 09/11] Added ClientEventName * Version incremented --- src/CTrue.FsConnect.TestConsole/Program.cs | 4 ++-- src/CTrue.FsConnect/FsConnect.cs | 2 +- src/CTrue.FsConnect/InputEventInfo.cs | 26 ++++++++++++++++++++-- src/Directory.Build.props | 6 ++--- 4 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/CTrue.FsConnect.TestConsole/Program.cs b/src/CTrue.FsConnect.TestConsole/Program.cs index 3cb4a71..b7e12ed 100644 --- a/src/CTrue.FsConnect.TestConsole/Program.cs +++ b/src/CTrue.FsConnect.TestConsole/Program.cs @@ -142,12 +142,12 @@ private static void InitializeInputEvents(FsConnect fsConnect, uint joystickId) // Use Set Up USB Game controller app in windows to determine order of USB joystick devices. Use the Properties view to determine button ids. // Note that there may be a constraint in SimConnect for the number of buttons supported, all buttons in complex devices may not be mappable. InputEventInfo iei = new InputEventInfo(EventIds.JOYSTICK_BUTTON1, GroupIds.JOYSTICK_EVENT_KEY_GROUP, GroupIds.INPUT_KEY_GROUP, GetjoystickButtonInputEventDefinition(joystickId, 0), - () => { Log.Information("Joystick button 1 clicked"); }); + (_) => { Log.Information("Joystick button 1 clicked"); }); fsConnect.RegisterInputEvent(iei); iei = new InputEventInfo(EventIds.JOYSTICK_BUTTON2, GroupIds.JOYSTICK_EVENT_KEY_GROUP, GroupIds.INPUT_KEY_GROUP, GetjoystickButtonInputEventDefinition(joystickId, 1), - () => { Log.Information("Joystick button 2 clicked"); }); + (_) => { Log.Information("Joystick button 2 clicked"); }); fsConnect.RegisterInputEvent(iei); } diff --git a/src/CTrue.FsConnect/FsConnect.cs b/src/CTrue.FsConnect/FsConnect.cs index e8147b7..7415d86 100644 --- a/src/CTrue.FsConnect/FsConnect.cs +++ b/src/CTrue.FsConnect/FsConnect.cs @@ -149,7 +149,7 @@ public bool RegisterInputEvent(InputEventInfo inputEventInfo) } // Setup client event - _simConnect.MapClientEventToSimEvent(inputEventInfo.ClientEventId, null); + _simConnect.MapClientEventToSimEvent(inputEventInfo.ClientEventId, inputEventInfo.ClientEventName); _simConnect.AddClientEventToNotificationGroup(inputEventInfo.NotificationGroupId, inputEventInfo.ClientEventId, false); _simConnect.SetNotificationGroupPriority(inputEventInfo.NotificationGroupId, 1); diff --git a/src/CTrue.FsConnect/InputEventInfo.cs b/src/CTrue.FsConnect/InputEventInfo.cs index c4f20d6..c58d03b 100644 --- a/src/CTrue.FsConnect/InputEventInfo.cs +++ b/src/CTrue.FsConnect/InputEventInfo.cs @@ -2,29 +2,51 @@ namespace CTrue.FsConnect { + /// + /// The is used to register a binding between an input event and client event. + /// public class InputEventInfo { public Enum ClientEventId { get; } + public string ClientEventName { get; } public Enum NotificationGroupId { get; } public Enum InputGroup { get; } public string InputDefinition { get; } public InputEventRaised InputEventRaisedDelegate { get; } + /// + /// Creates an instance. + /// + /// + /// + /// + /// + /// public InputEventInfo(Enum clientEventId, Enum notificationGroupId, Enum inputGroup, string inputDefinition, InputEventRaised inputEventRaisedDelegate) + : this(clientEventId, null, notificationGroupId, inputGroup, inputDefinition, inputEventRaisedDelegate) + { + } + + public InputEventInfo(Enum clientEventId, string clientEventName, Enum notificationGroupId, Enum inputGroup, string inputDefinition, + InputEventRaised inputEventRaisedDelegate) { ClientEventId = clientEventId; + ClientEventName = clientEventName; NotificationGroupId = notificationGroupId; InputGroup = inputGroup; InputDefinition = inputDefinition; InputEventRaisedDelegate = inputEventRaisedDelegate; } + /// + /// Invokes the registered delegate. + /// public void RaiseInputEvent() { - InputEventRaisedDelegate.Invoke(); + InputEventRaisedDelegate?.Invoke(this); } } - public delegate void InputEventRaised(); + public delegate void InputEventRaised(InputEventInfo iei); } \ No newline at end of file diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 597cdc7..994d8b4 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -2,10 +2,10 @@ 1 - 3 - 5 + 4 + 0 0 - -alpha + $([System.IO.Path]::GetDirectoryName($([MSBuild]::GetPathOfFileAbove('.gitignore', '$(MSBuildThisFileDirectory)')))) $(RootFolder)\artifacts From d0c31a36c670077e44d7e7beb4c3de253b040da3 Mon Sep 17 00:00:00 2001 From: Timian Heber Date: Mon, 14 Oct 2024 20:33:06 +0200 Subject: [PATCH 10/11] Updated readme and docs --- README.md | 10 +++++++++- .../CTrue.FsConnect.Managers.csproj | 2 +- src/CTrue.FsConnect/CTrue.FsConnect.csproj | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9c797bf..d58a341 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ A simple easy-to-use wrapper for the Flight Simulator 2020 SimConnect library. A If, on the other hand, you just want to connect to Flight Simulator and read some information this may give you a quicker start. FsConnect uses the _Microsoft.FlightSimulator.SimConnect_ .NET Framework library and the underlying native x64 _simconnect.dll_ library. -These files are distributed via the Flight Simulator 2020 SDK, currently version 0.10.0, but are included for easy use. +These files are distributed via the Flight Simulator 2020 SDK, currently version 0.24.3.0, but are included for easy use. At the moment this project is intended as an easier to use wrapper than the current SimConnect for simple projects, creating a simpler C# programming model and reducing the need for repeated boiler plate code. @@ -19,6 +19,8 @@ At the moment this project is intended as an easier to use wrapper than the curr For more information about SimConnect and the Flight Simulator SDK see the [Microsoft Flight Simulator SDK site]( https://docs.flightsimulator.com/html/Programming_Tools/SimConnect/SimConnect_SDK.htm) and the [SimConnect SDK section](https://docs.flightsimulator.com/html/Programming_Tools/SimConnect/SimConnect_SDK.htm) in particular. +A useful tool for debugging SimConnect usage is the _SimConnect Inspector_ available from the Debug mode in Flight Simulator. See the [SDK documentation](https://docs.flightsimulator.com/html/Developer_Mode/Menus/Tools/SimConnect_Inspector.htm) for more information. + ## Current features * Supports connections from API, without direct use of SimConnect.cfg file @@ -422,6 +424,12 @@ Supports: ## Change log +## 1.4.0 + +* Updated to SDK version 0.24.3.0. +* Support for registering input events. +* Updated to .NET Framework 4.6.1 to match SimConnect version. + ## 1.3.3 * Added support for NAV frequencies, transponder and autopilot heading bug diff --git a/src/CTrue.FsConnect.Managers/CTrue.FsConnect.Managers.csproj b/src/CTrue.FsConnect.Managers/CTrue.FsConnect.Managers.csproj index e330a79..481b597 100644 --- a/src/CTrue.FsConnect.Managers/CTrue.FsConnect.Managers.csproj +++ b/src/CTrue.FsConnect.Managers/CTrue.FsConnect.Managers.csproj @@ -19,7 +19,7 @@ true msfs flight-simulator simconnect true - Added support for NAV frequencies, transponder and autopilot heading bug + Updated SDK version to 0.24.3.0 diff --git a/src/CTrue.FsConnect/CTrue.FsConnect.csproj b/src/CTrue.FsConnect/CTrue.FsConnect.csproj index 1f73c9d..887acec 100644 --- a/src/CTrue.FsConnect/CTrue.FsConnect.csproj +++ b/src/CTrue.FsConnect/CTrue.FsConnect.csproj @@ -14,7 +14,7 @@ true msfs flight-simulator simconnect true - Added and updated some method signatures. * Added event ids for setting COM and NAV frequencies. + Support for registering input events. * Updated SDK version to 0.24.3.0 From 7b6bf4644b47daf5dc6151bfcafc5411d56aec41 Mon Sep 17 00:00:00 2001 From: Timian Heber Date: Mon, 14 Oct 2024 20:42:38 +0200 Subject: [PATCH 11/11] License updated --- src/CTrue.FsConnect.Managers/licenses/LICENSE.txt | 2 +- src/CTrue.FsConnect/licenses/LICENSE.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/CTrue.FsConnect.Managers/licenses/LICENSE.txt b/src/CTrue.FsConnect.Managers/licenses/LICENSE.txt index d071abb..5b86c7c 100644 --- a/src/CTrue.FsConnect.Managers/licenses/LICENSE.txt +++ b/src/CTrue.FsConnect.Managers/licenses/LICENSE.txt @@ -1,4 +1,4 @@ -Copyright 2020-2021 C-True +Copyright 2020-2024 C-True Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/src/CTrue.FsConnect/licenses/LICENSE.txt b/src/CTrue.FsConnect/licenses/LICENSE.txt index 7c15758..89afd41 100644 --- a/src/CTrue.FsConnect/licenses/LICENSE.txt +++ b/src/CTrue.FsConnect/licenses/LICENSE.txt @@ -1,4 +1,4 @@ -Copyright 2020-2021 C-True +Copyright 2020-2024 C-True Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: