Loading GamepadReader.cs 0 → 100644 +8 −0 Original line number Diff line number Diff line namespace SwitchSlidePresenter; public abstract class GamepadReader { public abstract event Action NextSlide; public abstract event Action PrevSlide; public abstract Task Read(); } No newline at end of file JoyConRead.cs +60 −47 Original line number Diff line number Diff line Loading @@ -10,12 +10,58 @@ using wtf.cluster.JoyCon.Rumble; namespace SwitchSlidePresenter; public class JoyConRead { public static async Task Read() { public class JoyConRead : GamepadReader { public override event Action NextSlide; public override event Action PrevSlide; public override async Task Read() { Console.OutputEncoding = Encoding.UTF8; HidDevice? device = null; HidDevice? device = GetHidDevice(); if (device == null) { Console.WriteLine("No controller. Please connect Joy-Con or Pro controller via Bluetooth."); return; } JoyCon joycon = new(device); joycon.Start(); await joycon.SetInputReportModeAsync(JoyCon.InputReportType.Simple); await LogDeviceInfo(joycon); joycon.ReportReceived += OnJoyConOnReportReceived; Console.WriteLine($"JoyCon ready for presenting."); joycon.StoppedOnError += (_, ex) => { Console.WriteLine(); Console.WriteLine($"Critical error: {ex.Message}"); Console.WriteLine("Controller polling stopped."); Environment.Exit(1); return Task.CompletedTask; }; Console.ReadKey(); joycon.Stop(); Console.WriteLine(); Console.WriteLine("Stopped."); } private static async Task LogDeviceInfo(JoyCon joycon) { DeviceInfo deviceInfo = await joycon.GetDeviceInfoAsync(); Console.WriteLine( $"Type: {deviceInfo.ControllerType}, Firmware: {deviceInfo.FirmwareVersionMajor}.{deviceInfo.FirmwareVersionMinor}"); string? serial = await joycon.GetSerialNumberAsync(); Console.WriteLine($"Serial number: {serial ?? "<none>"}"); ControllerColors? colors = await joycon.GetColorsAsync(); Console.WriteLine(colors != null ? $"Body color: {colors.BodyColor}, buttons color: {colors.ButtonsColor}" : "Colors not specified, seems like the controller is grey."); } private static HidDevice? GetHidDevice() { DeviceList list = DeviceList.Local; HidDevice? device = null; if (OperatingSystem.IsWindows()) { var nintendos = list.GetHidDevices(0x057e); device = nintendos.FirstOrDefault(); Loading Loading @@ -44,54 +90,21 @@ public class JoyConRead { } } } if (device == null) { Console.WriteLine("No controller. Please connect Joy-Con or Pro controller via Bluetooth."); return; return device; } JoyCon joycon = new(device); joycon.Start(); await joycon.SetInputReportModeAsync(JoyCon.InputReportType.Simple); DeviceInfo deviceInfo = await joycon.GetDeviceInfoAsync(); Console.WriteLine( $"Type: {deviceInfo.ControllerType}, Firmware: {deviceInfo.FirmwareVersionMajor}.{deviceInfo.FirmwareVersionMinor}"); var serial = await joycon.GetSerialNumberAsync(); Console.WriteLine($"Serial number: {serial ?? "<none>"}"); ControllerColors? colors = await joycon.GetColorsAsync(); if (colors != null) { Console.WriteLine($"Body color: {colors.BodyColor}, buttons color: {colors.ButtonsColor}"); } else { Console.WriteLine("Colors not specified, seems like the controller is grey."); } joycon.ReportReceived += OnJoyconOnReportReceived; joycon.StoppedOnError += (_, ex) => { Console.WriteLine(); Console.WriteLine($"Critical error: {ex.Message}"); Console.WriteLine("Controller polling stopped."); Environment.Exit(1); private Task OnJoyConOnReportReceived(JoyCon _, IJoyConReport input) { if (input is not InputSimple j) { Console.WriteLine($"Invalid input report type: {input.GetType()}"); return Task.CompletedTask; }; Console.ReadKey(); joycon.Stop(); Console.WriteLine(); Console.WriteLine("Stopped."); } private static Task OnJoyconOnReportReceived(JoyCon _, IJoyConReport input) { if (input is InputSimple j) { bool prev = PreviousPressed(j.Buttons); bool next = NextPressed(j.Buttons); if (prev) Console.WriteLine("Previous Slide"); PrevSlide?.Invoke(); if (next) Console.WriteLine("Next Slide"); } else { Console.WriteLine($"Invalid input report type: {input.GetType()}"); } NextSlide?.Invoke(); return Task.CompletedTask; } Loading Program.cs +4 −12 Original line number Diff line number Diff line using HidSharp; using System.Text; using wtf.cluster.JoyCon; using wtf.cluster.JoyCon.Calibration; using wtf.cluster.JoyCon.ExtraData; using wtf.cluster.JoyCon.HomeLed; using wtf.cluster.JoyCon.InputReports; using wtf.cluster.JoyCon.Rumble; namespace SwitchSlidePresenter { namespace SwitchSlidePresenter { class Program { static async Task Main(string[] args) { await JoyConRead.Read(); private static async Task Main() { GamepadReader reader = new JoyConRead(); await reader.Read(); } } } No newline at end of file SlideSwitchPress.csdeleted 100644 → 0 +0 −7 Original line number Diff line number Diff line namespace SwitchSlidePresenter; public enum SlideSwitchPress { None, Previous, Next } No newline at end of file Loading
GamepadReader.cs 0 → 100644 +8 −0 Original line number Diff line number Diff line namespace SwitchSlidePresenter; public abstract class GamepadReader { public abstract event Action NextSlide; public abstract event Action PrevSlide; public abstract Task Read(); } No newline at end of file
JoyConRead.cs +60 −47 Original line number Diff line number Diff line Loading @@ -10,12 +10,58 @@ using wtf.cluster.JoyCon.Rumble; namespace SwitchSlidePresenter; public class JoyConRead { public static async Task Read() { public class JoyConRead : GamepadReader { public override event Action NextSlide; public override event Action PrevSlide; public override async Task Read() { Console.OutputEncoding = Encoding.UTF8; HidDevice? device = null; HidDevice? device = GetHidDevice(); if (device == null) { Console.WriteLine("No controller. Please connect Joy-Con or Pro controller via Bluetooth."); return; } JoyCon joycon = new(device); joycon.Start(); await joycon.SetInputReportModeAsync(JoyCon.InputReportType.Simple); await LogDeviceInfo(joycon); joycon.ReportReceived += OnJoyConOnReportReceived; Console.WriteLine($"JoyCon ready for presenting."); joycon.StoppedOnError += (_, ex) => { Console.WriteLine(); Console.WriteLine($"Critical error: {ex.Message}"); Console.WriteLine("Controller polling stopped."); Environment.Exit(1); return Task.CompletedTask; }; Console.ReadKey(); joycon.Stop(); Console.WriteLine(); Console.WriteLine("Stopped."); } private static async Task LogDeviceInfo(JoyCon joycon) { DeviceInfo deviceInfo = await joycon.GetDeviceInfoAsync(); Console.WriteLine( $"Type: {deviceInfo.ControllerType}, Firmware: {deviceInfo.FirmwareVersionMajor}.{deviceInfo.FirmwareVersionMinor}"); string? serial = await joycon.GetSerialNumberAsync(); Console.WriteLine($"Serial number: {serial ?? "<none>"}"); ControllerColors? colors = await joycon.GetColorsAsync(); Console.WriteLine(colors != null ? $"Body color: {colors.BodyColor}, buttons color: {colors.ButtonsColor}" : "Colors not specified, seems like the controller is grey."); } private static HidDevice? GetHidDevice() { DeviceList list = DeviceList.Local; HidDevice? device = null; if (OperatingSystem.IsWindows()) { var nintendos = list.GetHidDevices(0x057e); device = nintendos.FirstOrDefault(); Loading Loading @@ -44,54 +90,21 @@ public class JoyConRead { } } } if (device == null) { Console.WriteLine("No controller. Please connect Joy-Con or Pro controller via Bluetooth."); return; return device; } JoyCon joycon = new(device); joycon.Start(); await joycon.SetInputReportModeAsync(JoyCon.InputReportType.Simple); DeviceInfo deviceInfo = await joycon.GetDeviceInfoAsync(); Console.WriteLine( $"Type: {deviceInfo.ControllerType}, Firmware: {deviceInfo.FirmwareVersionMajor}.{deviceInfo.FirmwareVersionMinor}"); var serial = await joycon.GetSerialNumberAsync(); Console.WriteLine($"Serial number: {serial ?? "<none>"}"); ControllerColors? colors = await joycon.GetColorsAsync(); if (colors != null) { Console.WriteLine($"Body color: {colors.BodyColor}, buttons color: {colors.ButtonsColor}"); } else { Console.WriteLine("Colors not specified, seems like the controller is grey."); } joycon.ReportReceived += OnJoyconOnReportReceived; joycon.StoppedOnError += (_, ex) => { Console.WriteLine(); Console.WriteLine($"Critical error: {ex.Message}"); Console.WriteLine("Controller polling stopped."); Environment.Exit(1); private Task OnJoyConOnReportReceived(JoyCon _, IJoyConReport input) { if (input is not InputSimple j) { Console.WriteLine($"Invalid input report type: {input.GetType()}"); return Task.CompletedTask; }; Console.ReadKey(); joycon.Stop(); Console.WriteLine(); Console.WriteLine("Stopped."); } private static Task OnJoyconOnReportReceived(JoyCon _, IJoyConReport input) { if (input is InputSimple j) { bool prev = PreviousPressed(j.Buttons); bool next = NextPressed(j.Buttons); if (prev) Console.WriteLine("Previous Slide"); PrevSlide?.Invoke(); if (next) Console.WriteLine("Next Slide"); } else { Console.WriteLine($"Invalid input report type: {input.GetType()}"); } NextSlide?.Invoke(); return Task.CompletedTask; } Loading
Program.cs +4 −12 Original line number Diff line number Diff line using HidSharp; using System.Text; using wtf.cluster.JoyCon; using wtf.cluster.JoyCon.Calibration; using wtf.cluster.JoyCon.ExtraData; using wtf.cluster.JoyCon.HomeLed; using wtf.cluster.JoyCon.InputReports; using wtf.cluster.JoyCon.Rumble; namespace SwitchSlidePresenter { namespace SwitchSlidePresenter { class Program { static async Task Main(string[] args) { await JoyConRead.Read(); private static async Task Main() { GamepadReader reader = new JoyConRead(); await reader.Read(); } } } No newline at end of file
SlideSwitchPress.csdeleted 100644 → 0 +0 −7 Original line number Diff line number Diff line namespace SwitchSlidePresenter; public enum SlideSwitchPress { None, Previous, Next } No newline at end of file