/// <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); }