/// <summary>
        /// Sends an LED command to the device
        /// </summary>
        /// <param name="boardType">The type of board the command is being sent to</param>
        /// <param name="ledNumber">The LED number</param>
        /// <param name="red">Power of the red hue</param>
        /// <param name="green">Power of the green hue</param>
        /// <param name="blue">Power of the blue hue</param>
        /// <returns></returns>
        public bool SendCommand(BoardType boardType, int ledNumber, LedPower red, LedPower green, LedPower blue)
        {
            var packet = PacketForCommand(boardType, ledNumber, red, green, blue);

            _log.LogDebug($"Sending {red}, {green}, {blue} to {boardType} #{ledNumber}", red, green, blue, boardType, ledNumber);
            return(_device.WriteFeatureData(packet));
        }
        private static byte ByteForColors(LedPower red, LedPower green, LedPower blue)
        {
            byte b = 0b_1000_0000;

            b |= ByteForColor(red);
            b |= (byte)(ByteForColor(green) << 2);
            b |= (byte)(ByteForColor(blue) << 4);
            return(b);
        }
 private static byte ByteForColor(LedPower color)
 {
     return(color switch
     {
         LedPower.Zero => 0,
         LedPower.Thirty => 1,
         LedPower.Sixty => 2,
         LedPower.Full => 3,
         _ => throw new ArgumentOutOfRangeException(nameof(color), color, null)
     });
        private static byte[] PacketForCommand(BoardType boardType, int ledNumber, LedPower red, LedPower green, LedPower blue)
        {
            var data = new byte[38];

            data[0]             = 0x02;
            data[1]             = (byte)boardType;
            data[2]             = CommandIdForCommand(boardType, ledNumber);
            data[ledNumber + 4] = ByteForColors(red, green, blue);
            data[37]            = 0xf0;

            return(data);
        }