mirror of
https://github.com/jkocon/g-helper.git
synced 2026-02-23 13:00:52 +01:00
171 lines
4.2 KiB
C#
171 lines
4.2 KiB
C#
namespace GHelper.Peripherals.Mouse.Models
|
|
{
|
|
//P304
|
|
public class TUFM5 : AsusMouse
|
|
{
|
|
public TUFM5() : base(0x0B05, 0x1898, "mi_02", false)
|
|
{
|
|
}
|
|
|
|
public override int DPIProfileCount()
|
|
{
|
|
return 2;
|
|
}
|
|
|
|
public override string GetDisplayName()
|
|
{
|
|
return "TUF GAMING M5";
|
|
}
|
|
|
|
|
|
public override PollingRate[] SupportedPollingrates()
|
|
{
|
|
return new PollingRate[] {
|
|
PollingRate.PR125Hz,
|
|
PollingRate.PR250Hz,
|
|
PollingRate.PR500Hz,
|
|
PollingRate.PR1000Hz
|
|
};
|
|
}
|
|
|
|
//Mouse has React mapped to 0x03 instead of 0x04 like other mice
|
|
protected override byte IndexForLightingMode(LightingMode lightingMode)
|
|
{
|
|
if (lightingMode == LightingMode.React)
|
|
{
|
|
return 0x03;
|
|
}
|
|
return ((byte)lightingMode);
|
|
}
|
|
|
|
//Mouse has React mapped to 0x03 instead of 0x04 like other mice
|
|
protected override LightingMode LightingModeForIndex(byte lightingMode)
|
|
{
|
|
if (lightingMode == 0x03)
|
|
{
|
|
return LightingMode.React;
|
|
}
|
|
return base.LightingModeForIndex(lightingMode);
|
|
|
|
}
|
|
|
|
public override int ProfileCount()
|
|
{
|
|
return 3;
|
|
}
|
|
public override int MaxDPI()
|
|
{
|
|
return 6_200;
|
|
}
|
|
public override bool HasBattery()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
public override bool HasLiftOffSetting()
|
|
{
|
|
return false;
|
|
}
|
|
public override LightingZone[] SupportedLightingZones()
|
|
{
|
|
return new LightingZone[] { LightingZone.Logo };
|
|
}
|
|
|
|
public override bool HasRGB()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public override bool HasAngleSnapping()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public override int DPIIncrements()
|
|
{
|
|
return 100;
|
|
}
|
|
|
|
public override bool CanChangeDPIProfile()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public override bool HasDebounceSetting()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public override int MaxBrightness()
|
|
{
|
|
return 4;
|
|
}
|
|
|
|
public override bool IsLightingModeSupported(LightingMode lightingMode)
|
|
{
|
|
return lightingMode == LightingMode.Static
|
|
|| lightingMode == LightingMode.Breathing
|
|
|| lightingMode == LightingMode.ColorCycle
|
|
|| lightingMode == LightingMode.React;
|
|
}
|
|
|
|
|
|
protected override byte[] GetUpdatePollingRatePacket(PollingRate pollingRate)
|
|
{
|
|
return new byte[] { reportId, 0x51, 0x31, 0x02, 0x00, (byte)pollingRate };
|
|
}
|
|
|
|
protected override byte[] GetUpdateAngleSnappingPacket(bool angleSnapping)
|
|
{
|
|
return new byte[] { reportId, 0x51, 0x31, 0x04, 0x00, (byte)(angleSnapping ? 0x01 : 0x00) };
|
|
}
|
|
|
|
protected override PollingRate ParsePollingRate(byte[] packet)
|
|
{
|
|
|
|
if (packet[1] == 0x12 && packet[2] == 0x04 && packet[3] == 0x00)
|
|
{
|
|
return (PollingRate)packet[9];
|
|
}
|
|
|
|
return PollingRate.PR125Hz;
|
|
}
|
|
|
|
protected override bool ParseAngleSnapping(byte[] packet)
|
|
{
|
|
|
|
if (packet[1] == 0x12 && packet[2] == 0x04 && packet[3] == 0x00)
|
|
{
|
|
return packet[13] == 0x01;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
protected override byte[] GetUpdateDebouncePacket(DebounceTime debounce)
|
|
{
|
|
return new byte[] { reportId, 0x51, 0x31, 0x03, 0x00, ((byte)debounce) };
|
|
}
|
|
|
|
protected override DebounceTime ParseDebounce(byte[] packet)
|
|
{
|
|
if (packet[1] != 0x12 || packet[2] != 0x04 || packet[3] != 0x00)
|
|
{
|
|
return DebounceTime.MS12;
|
|
}
|
|
|
|
if (packet[11] < 0x02)
|
|
{
|
|
return DebounceTime.MS12;
|
|
}
|
|
|
|
if (packet[11] > 0x07)
|
|
{
|
|
return DebounceTime.MS32;
|
|
}
|
|
|
|
return (DebounceTime)packet[11];
|
|
}
|
|
}
|
|
}
|