From c0703f33f716bcbde14afe5350ee7583d4563d16 Mon Sep 17 00:00:00 2001 From: Darth Affe Date: Sat, 21 Sep 2024 09:52:03 +0200 Subject: [PATCH] Updated PicoPiConfig to .NET 8 and replaced the copy of the PicoSDK with the one from RGB.NET --- PicoPiConfig/PicoPiConfig.csproj | 4 +- PicoPiConfig/PicoPiSDK.cs | 201 ------------------------------- 2 files changed, 2 insertions(+), 203 deletions(-) delete mode 100644 PicoPiConfig/PicoPiSDK.cs diff --git a/PicoPiConfig/PicoPiConfig.csproj b/PicoPiConfig/PicoPiConfig.csproj index ae5cb43..bc9ab13 100644 --- a/PicoPiConfig/PicoPiConfig.csproj +++ b/PicoPiConfig/PicoPiConfig.csproj @@ -2,7 +2,7 @@ WinExe - net5.0-windows + net8.0-windows true latest enable @@ -25,7 +25,7 @@ - + diff --git a/PicoPiConfig/PicoPiSDK.cs b/PicoPiConfig/PicoPiSDK.cs deleted file mode 100644 index f6e27be..0000000 --- a/PicoPiConfig/PicoPiSDK.cs +++ /dev/null @@ -1,201 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Linq; -using HidSharp; - -//TODO DarthAffe 24.04.2021: Replace with RGB.NET PicoPiSDK once it's merged to main -namespace RGB.NET.Devices.PicoPi -{ - public class PicoPiSDK : IDisposable - { - #region Constants - - public const int VENDOR_ID = 0x1209; - public const int HID_BULK_CONTROLLER_PID = 0x2812; - - private const byte COMMAND_CHANNEL_COUNT = 0x01; - private const byte COMMAND_LEDCOUNTS = 0x0A; - private const byte COMMAND_PINS = 0x0B; - private const byte COMMAND_ID = 0x0E; - private const byte COMMAND_VERSION = 0x0F; - private const byte COMMAND_UPDATE = 0x01; - private const byte COMMAND_UPDATE_BULK = 0x02; - - #endregion - - #region Properties & Fields - - private readonly HidDevice _hidDevice; - private readonly HidStream _hidStream; - - private readonly byte[] _hidSendBuffer; - private readonly byte[] _bulkSendBuffer; - - private int _bulkTransferLength = 0; - - public string Id { get; } - public int Version { get; } - public IReadOnlyList<(int channel, int ledCount, int pin)> Channels { get; } - - #endregion - - #region Constructors - - public PicoPiSDK(HidDevice device) - { - this._hidDevice = device; - - _hidSendBuffer = new byte[_hidDevice.GetMaxOutputReportLength() - 1]; - - _hidStream = _hidDevice.Open(); - - Id = GetId(); - Version = GetVersion(); - Channels = new ReadOnlyCollection<(int channel, int ledCount, int pin)>(GetChannels().ToList()); - - _bulkSendBuffer = new byte[(Channels.Sum(c => c.ledCount + 1) * 3) + 5]; - } - - #endregion - - #region Methods - - public void SetLedCounts(params (int channel, int ledCount)[] ledCounts) - { - byte[] data = new byte[Channels.Count + 2]; - data[1] = COMMAND_LEDCOUNTS; - foreach ((int channel, int ledCount, _) in Channels) - data[channel + 1] = (byte)ledCount; - - foreach ((int channel, int ledCount) in ledCounts) - data[channel + 1] = (byte)ledCount; - - SendHID(data); - } - - public void SetPins(params (int channel, int pin)[] pins) - { - byte[] data = new byte[Channels.Count + 2]; - data[1] = COMMAND_PINS; - foreach ((int channel, _, int pin) in Channels) - data[channel + 1] = (byte)pin; - - foreach ((int channel, int pin) in pins) - data[channel + 1] = (byte)pin; - - SendHID(data); - } - - private string GetId() - { - SendHID(0x00, COMMAND_ID); - return ConversionHelper.ToHex(Read().Skip(1).Take(8).ToArray()); - } - - private int GetVersion() - { - SendHID(0x00, COMMAND_VERSION); - return Read()[1]; - } - - private IEnumerable<(int channel, int ledCount, int pin)> GetChannels() - { - SendHID(0x00, COMMAND_CHANNEL_COUNT); - int channelCount = Read()[1]; - - for (int i = 1; i <= channelCount; i++) - { - SendHID(0x00, (byte)((i << 4) | COMMAND_LEDCOUNTS)); - int ledCount = Read()[1]; - - SendHID(0x00, (byte)((i << 4) | COMMAND_PINS)); - int pin = Read()[1]; - - yield return (i, ledCount, pin); - } - } - - public void SendHidUpdate(in Span data, int channel, int chunk, bool update) - { - if (data.Length == 0) return; - - Span sendBuffer = _hidSendBuffer; - sendBuffer[0] = 0x00; - sendBuffer[1] = (byte)((channel << 4) | COMMAND_UPDATE); - sendBuffer[2] = update ? (byte)1 : (byte)0; - sendBuffer[3] = (byte)chunk; - data.CopyTo(sendBuffer.Slice(4, data.Length)); - SendHID(_hidSendBuffer); - } - - private void SendHID(params byte[] data) => _hidStream.Write(data); - - private byte[] Read() => _hidStream.Read(); - - public void Dispose() - { - _hidStream.Dispose(); - } - - #endregion - } - - /// - /// Contains helper methods for converting things. - /// - public static class ConversionHelper - { - #region Methods - - // Source: https://web.archive.org/web/20180224104425/https://stackoverflow.com/questions/623104/byte-to-hex-string/3974535 - /// - /// Converts an array of bytes to a HEX-representation. - /// - /// The array of bytes. - /// The HEX-representation of the provided bytes. - public static string ToHex(params byte[] bytes) - { - char[] c = new char[bytes.Length * 2]; - - for (int bx = 0, cx = 0; bx < bytes.Length; ++bx, ++cx) - { - byte b = ((byte)(bytes[bx] >> 4)); - c[cx] = (char)(b > 9 ? b + 0x37 : b + 0x30); - - b = ((byte)(bytes[bx] & 0x0F)); - c[++cx] = (char)(b > 9 ? b + 0x37 : b + 0x30); - } - - return new string(c); - } - - // Source: https://web.archive.org/web/20180224104425/https://stackoverflow.com/questions/623104/byte-to-hex-string/3974535 - /// - /// Converts the HEX-representation of a byte array to that array. - /// - /// The HEX-string to convert. - /// The correspondending byte array. - public static byte[] HexToBytes(ReadOnlySpan hexString) - { - if ((hexString.Length == 0) || ((hexString.Length % 2) != 0)) - return Array.Empty(); - - byte[] buffer = new byte[hexString.Length / 2]; - for (int bx = 0, sx = 0; bx < buffer.Length; ++bx, ++sx) - { - // Convert first half of byte - char c = hexString[sx]; - buffer[bx] = (byte)((c > '9' ? (c > 'Z' ? ((c - 'a') + 10) : ((c - 'A') + 10)) : (c - '0')) << 4); - - // Convert second half of byte - c = hexString[++sx]; - buffer[bx] |= (byte)(c > '9' ? (c > 'Z' ? ((c - 'a') + 10) : ((c - 'A') + 10)) : (c - '0')); - } - - return buffer; - } - - #endregion - } -}