From cd252ddca444a7046385a27bd4eb3b3f5351cfe4 Mon Sep 17 00:00:00 2001 From: conorm125 Date: Sun, 8 Nov 2020 13:45:24 +0000 Subject: [PATCH] finished adding support for chroma devices --- .vs/RGBController2/v16/.suo | Bin 140288 -> 152064 bytes RGBController2/Boards/ChromaDeviceBoard.cs | 61 +++++++++++------- RGBController2/ViewModels/MainViewModel.cs | 21 +++++- .../ViewModels/Tabs/ChromaDeviceTab.cs | 40 +++++++++--- ...BController2.csprojAssemblyReference.cache | Bin 139721 -> 625 bytes 5 files changed, 87 insertions(+), 35 deletions(-) diff --git a/.vs/RGBController2/v16/.suo b/.vs/RGBController2/v16/.suo index d136a15b8d3f31f292c46ebfb80cdde20d1e30a7..de4e06f2ff5ed5c780ae05b17a21ac9e43d3a75d 100644 GIT binary patch delta 9529 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 delta 6940 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 diff --git a/RGBController2/Boards/ChromaDeviceBoard.cs b/RGBController2/Boards/ChromaDeviceBoard.cs index 2e92314..3b13835 100644 --- a/RGBController2/Boards/ChromaDeviceBoard.cs +++ b/RGBController2/Boards/ChromaDeviceBoard.cs @@ -8,7 +8,12 @@ namespace RGBController2.Boards { public class ChromaDeviceBoard : IBoard { - enum deviceTypes + /// + /// True is communication has been established with the Arduino, false otherwise. + /// + public bool Connected { get; } + + public enum DeviceTypes { Mousepad, Keypad, @@ -17,23 +22,19 @@ namespace RGBController2.Boards Mouse } - private bool _connected; - //private IChroma _device; - public bool Connected - { - get { return _connected; } - } + private DeviceTypes _deviceType; - public ChromaDeviceBoard() + /// + /// Constructs a ChromaDeviceBoard for controlling a Chroma device. + /// + /// The type of the chroma device to control. + public ChromaDeviceBoard(DeviceTypes deviceType) { - // ToDo add device type selection here - _connected = true; - // ConnectToDevice(); - } - - public async void ConnectToDevice() - { - // _device = await ColoreProvider.CreateNativeAsync(); + Connected = true; + _deviceType = deviceType; + // This is here because the device needs to be initilised by the first call + // This won't actually set the colour + SetAllLeds(255, 255, 255); } /// @@ -42,16 +43,28 @@ namespace RGBController2.Boards /// The red value /// The green value /// The blue value - public async void SetAllLeds(byte red, byte green, byte blue) + public void SetAllLeds(byte red, byte green, byte blue) { - //if (_device.Initialized) - //{ - // var colour = new ColoreColor((byte)red, (byte)green, (byte)blue); - // await _device.Mouse.SetAllAsync(colour); - //} var colour = new ColoreColor((byte)red, (byte)green, (byte)blue); - Chroma.Instance.SetAll(colour); - } + switch (_deviceType) + { + case DeviceTypes.Mousepad: + Chroma.Instance.Mousepad.SetAll(colour); + break; + case DeviceTypes.Mouse: + Chroma.Instance.Mouse.SetAll(colour); + break; + case DeviceTypes.Keypad: + Chroma.Instance.Keypad.SetAll(colour); + break; + case DeviceTypes.Keyboard: + Chroma.Instance.Keyboard.SetAll(colour); + break; + case DeviceTypes.Headset: + Chroma.Instance.Headset.SetAll(colour); + break; + } + } } } diff --git a/RGBController2/ViewModels/MainViewModel.cs b/RGBController2/ViewModels/MainViewModel.cs index 6fd99cb..1404933 100644 --- a/RGBController2/ViewModels/MainViewModel.cs +++ b/RGBController2/ViewModels/MainViewModel.cs @@ -11,6 +11,7 @@ using System.Windows; using System.Xml; using System.IO; using System.Linq; +using RGBController2.Boards; namespace RGBController2.ViewModels { @@ -126,6 +127,24 @@ namespace RGBController2.ViewModels case "chroma": { var tab = new ChromaDeviceTab(name); + switch (device) + { + case "Mousepad": + tab.SelectedDevice = ChromaDeviceBoard.DeviceTypes.Mousepad; + break; + case "Keypad": + tab.SelectedDevice = ChromaDeviceBoard.DeviceTypes.Keypad; + break; + case "Headset": + tab.SelectedDevice = ChromaDeviceBoard.DeviceTypes.Headset; + break; + case "Keyboard": + tab.SelectedDevice = ChromaDeviceBoard.DeviceTypes.Keyboard; + break; + case "Mouse": + tab.SelectedDevice = ChromaDeviceBoard.DeviceTypes.Mouse; + break; + } _tabs.Add(tab); break; } @@ -239,7 +258,7 @@ namespace RGBController2.ViewModels xmlWriter.WriteString("chroma"); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("device"); - xmlWriter.WriteString("not used"); + xmlWriter.WriteString(((ChromaDeviceTab)tab).SelectedDevice.ToString()); xmlWriter.WriteEndElement(); break; } diff --git a/RGBController2/ViewModels/Tabs/ChromaDeviceTab.cs b/RGBController2/ViewModels/Tabs/ChromaDeviceTab.cs index 931b016..7c599f4 100644 --- a/RGBController2/ViewModels/Tabs/ChromaDeviceTab.cs +++ b/RGBController2/ViewModels/Tabs/ChromaDeviceTab.cs @@ -13,6 +13,30 @@ namespace RGBController2.ViewModels.Tabs /// public class ChromaDeviceTab : Tab, INotifyPropertyChanged { + private ChromaDeviceBoard.DeviceTypes[] _availableDevices; + public ChromaDeviceBoard.DeviceTypes[] AvailableDevices + { + get { return _availableDevices; } + } + + private ChromaDeviceBoard.DeviceTypes _selectedDevice; + public ChromaDeviceBoard.DeviceTypes SelectedDevice + { + get { return _selectedDevice; } + set + { + if (value != _selectedDevice) + { + _selectedDevice = value; + EnableSelectLightingMode = true; + OnPropertyChanged(nameof(EnableSelectLightingMode)); + _device = new ChromaDeviceBoard(value); + SelectedLightingMode = new StaticViewModel(_device); + OnPropertyChanged(nameof(SelectedLightingMode)); + } + } + } + /// /// Construcats a ChromaDeviecTabViewModel. @@ -24,20 +48,16 @@ namespace RGBController2.ViewModels.Tabs Name = name; ConnectionStatus = "Device Disconnected"; - // Create the device object - _device = new ChromaDeviceBoard(); - - // Get a list of the available cue devices - //_availableDevices = ((CUEDeviceBoard)_device).AvailableDevices; - // This is a temporary viewmodel that is used before the user has connected to a device SelectedLightingMode = new InformationViewModel(); OnPropertyChanged(nameof(SelectedLightingMode)); - // REMOVE ME - when fully impliment device selection - EnableSelectLightingMode = true; - OnPropertyChanged(nameof(EnableSelectLightingMode)); - + // Set the availble devices in the GUI + // For now we have no method of finding which chroma devices are connected + // So we will give the user a choice of all of them + _availableDevices = new ChromaDeviceBoard.DeviceTypes[] {ChromaDeviceBoard.DeviceTypes.Headset, ChromaDeviceBoard.DeviceTypes.Keyboard, ChromaDeviceBoard.DeviceTypes.Keypad, + ChromaDeviceBoard.DeviceTypes.Mouse, ChromaDeviceBoard.DeviceTypes.Mousepad}; + OnPropertyChanged(nameof(AvailableDevices)); } } diff --git a/RGBController2/obj/Debug/netcoreapp3.1/RGBController2.csprojAssemblyReference.cache b/RGBController2/obj/Debug/netcoreapp3.1/RGBController2.csprojAssemblyReference.cache index e5c5e06163acbc97a7c73d46846ccb67f224ce43..d2d0d8486bdedb92a7674c8d7d2879031b0f1612 100644 GIT binary patch delta 59 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 S$pp15C8*_&pj7E@`~Lv`OuwE0