Files
HidSliders/HidSliders.Hid/MixerButtonHelper.cs

75 lines
3.0 KiB
C#

namespace HidSliders.Hid;
public class MixerButtonHelper
{
public static List<MixerButton> GetSetFlags(long value)
{
var setFlags = new List<MixerButton>();
foreach (MixerButton flag in Enum.GetValues(typeof(MixerButton)))
{
if ((value & (long)flag) == (long)flag)
{
setFlags.Add(flag);
}
}
return setFlags;
}
public static ButtonGroups GetButtonGroup(MixerButton button)
{
var buttonValue = (long)button;
if (((long)ButtonGroups.Channel1 & buttonValue) != 0) return ButtonGroups.Channel1;
if (((long)ButtonGroups.Channel2 & buttonValue) != 0) return ButtonGroups.Channel2;
if (((long)ButtonGroups.Channel3 & buttonValue) != 0) return ButtonGroups.Channel3;
if (((long)ButtonGroups.Channel4 & buttonValue) != 0) return ButtonGroups.Channel4;
if (((long)ButtonGroups.Channel5 & buttonValue) != 0) return ButtonGroups.Channel5;
throw new ArgumentException("The provided button does not match any button group.", nameof(button));
}
public static ChannelButton GetChannelButton(MixerButton button)
{
return GetChannelButton(button, GetButtonGroup(button));
}
public static ChannelButton GetChannelButton(MixerButton button, ButtonGroups buttonGroup)
{
var longButton = (long)button;
if (longButton >= 0x10000000000)
{
return ChannelButton.ChannelMute;
}
int intButton = 0;
switch (buttonGroup)
{
case ButtonGroups.Channel1:
intButton = (int)(longButton >> 0);
break;
case ButtonGroups.Channel2:
intButton = (int)(longButton >> 8);
break;
case ButtonGroups.Channel3:
intButton = (int)(longButton >> 16);
break;
case ButtonGroups.Channel4:
intButton = (int)(longButton >> 24);
break;
case ButtonGroups.Channel5:
intButton = (int)(longButton >> 32);
break;
}
if (((int)ChannelButton.ChannelA1 & intButton) != 0) return ChannelButton.ChannelA1;
if (((int)ChannelButton.ChannelA2 & intButton) != 0) return ChannelButton.ChannelA2;
if (((int)ChannelButton.ChannelA3 & intButton) != 0) return ChannelButton.ChannelA3;
if (((int)ChannelButton.ChannelA4 & intButton) != 0) return ChannelButton.ChannelA4;
if (((int)ChannelButton.ChannelA5 & intButton) != 0) return ChannelButton.ChannelA5;
if (((int)ChannelButton.ChannelB1 & intButton) != 0) return ChannelButton.ChannelB1;
if (((int)ChannelButton.ChannelB2 & intButton) != 0) return ChannelButton.ChannelB2;
if (((int)ChannelButton.ChannelB3 & intButton) != 0) return ChannelButton.ChannelB3;
throw new ArgumentException("The provided button does not match any channel button in the specified button group.", nameof(button));
}
}