mirror of
https://github.com/jkocon/g-helper.git
synced 2026-02-23 13:00:52 +01:00
Polling rates are fixed index numbers for all mice. 0 is immer 125Hz for example, if the mouse, like the Ckakram, do not support 125Hz, the first valid polling rate is 250Hz = 1.
This commit is contained in:
@@ -105,7 +105,7 @@ namespace GHelper
|
||||
|
||||
private void ComboBoxPollingRate_DropDownClosed(object? sender, EventArgs e)
|
||||
{
|
||||
mouse.SetPollingRate(comboBoxPollingRate.SelectedIndex + 1);
|
||||
mouse.SetPollingRate(mouse.SupportedPollingrates()[comboBoxPollingRate.SelectedIndex]);
|
||||
}
|
||||
|
||||
private void ButtonDPIColor_Click(object? sender, EventArgs e)
|
||||
@@ -337,7 +337,11 @@ namespace GHelper
|
||||
|
||||
if (mouse.CanSetPollingRate())
|
||||
{
|
||||
comboBoxPollingRate.Items.AddRange(mouse.PollingRateDisplayStrings());
|
||||
foreach(PollingRate pr in mouse.SupportedPollingrates())
|
||||
{
|
||||
comboBoxPollingRate.Items.Add(mouse.PollingRateDisplayString(pr));
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -433,7 +437,12 @@ namespace GHelper
|
||||
|
||||
if (mouse.CanSetPollingRate())
|
||||
{
|
||||
comboBoxPollingRate.SelectedIndex = mouse.PollingRate - 1;
|
||||
int idx = mouse.PollingRateIndex(mouse.PollingRate);
|
||||
if(idx == -1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
comboBoxPollingRate.SelectedIndex = idx;
|
||||
}
|
||||
|
||||
if (mouse.HasAngleSnapping())
|
||||
|
||||
@@ -15,6 +15,18 @@ namespace GHelper.Peripherals.Mouse
|
||||
Never = 0xFF
|
||||
}
|
||||
|
||||
public enum PollingRate
|
||||
{
|
||||
PR125Hz = 0,
|
||||
PR250Hz = 1,
|
||||
PR500Hz = 2,
|
||||
PR1000Hz = 3,
|
||||
PR2000Hz = 4,
|
||||
PR4000Hz = 5,
|
||||
PR8000Hz = 6,
|
||||
PR16000Hz = 7 //for whenever that gets supported lol
|
||||
}
|
||||
|
||||
public enum LiftOffDistance
|
||||
{
|
||||
Low = 0,
|
||||
@@ -88,6 +100,8 @@ namespace GHelper.Peripherals.Mouse
|
||||
|
||||
public abstract class AsusMouse : Device, IPeripheral
|
||||
{
|
||||
private static string[] POLLING_RATES = { "125 Hz", "250 Hz", "500 Hz", "1000 Hz", "2000 Hz", "4000 Hz", "8000 Hz", "16000 Hz" };
|
||||
|
||||
internal const int ASUS_MOUSE_PACKET_SIZE = 65;
|
||||
|
||||
public event EventHandler? Disconnect;
|
||||
@@ -106,7 +120,7 @@ namespace GHelper.Peripherals.Mouse
|
||||
public int DpiProfile { get; protected set; }
|
||||
public AsusMouseDPI[] DpiSettings { get; protected set; }
|
||||
public int Profile { get; protected set; }
|
||||
public int PollingRate { get; protected set; }
|
||||
public PollingRate PollingRate { get; protected set; }
|
||||
public bool AngleSnapping { get; protected set; }
|
||||
public short AngleAdjustmentDegrees { get; protected set; }
|
||||
|
||||
@@ -453,17 +467,35 @@ namespace GHelper.Peripherals.Mouse
|
||||
return false;
|
||||
}
|
||||
|
||||
public virtual string PollingRateDisplayString(int pollingRate)
|
||||
public virtual string PollingRateDisplayString(PollingRate pollingRate)
|
||||
{
|
||||
return PollingRateDisplayStrings()[pollingRate -1];
|
||||
return POLLING_RATES[(int)pollingRate];
|
||||
}
|
||||
|
||||
public virtual int PollingRateCount()
|
||||
{
|
||||
return PollingRateDisplayStrings().Length;
|
||||
return SupportedPollingrates().Length;
|
||||
}
|
||||
|
||||
public abstract string[] PollingRateDisplayStrings();
|
||||
public virtual int PollingRateIndex(PollingRate pollingRate)
|
||||
{
|
||||
for (int i = 0; i < PollingRateCount(); ++i)
|
||||
{
|
||||
if (SupportedPollingrates()[i] == pollingRate)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
public virtual bool IsPollingRateSupported(PollingRate pollingRate)
|
||||
{
|
||||
return SupportedPollingrates().Contains(pollingRate);
|
||||
}
|
||||
|
||||
public abstract PollingRate[] SupportedPollingrates();
|
||||
|
||||
public virtual bool CanSetPollingRate()
|
||||
{
|
||||
@@ -475,7 +507,7 @@ namespace GHelper.Peripherals.Mouse
|
||||
return new byte[] { 0x00, 0x12, 0x04, 0x00 };
|
||||
}
|
||||
|
||||
protected virtual byte[] GetUpdatePollingRatePacket(int pollingRate)
|
||||
protected virtual byte[] GetUpdatePollingRatePacket(PollingRate pollingRate)
|
||||
{
|
||||
return new byte[] { 0x00, 0x51, 0x31, 0x04, 0x00, (byte)pollingRate };
|
||||
}
|
||||
@@ -488,14 +520,14 @@ namespace GHelper.Peripherals.Mouse
|
||||
return new byte[] { 0x00, 0x51, 0x31, 0x0B, 0x00, (byte)(angleAdjustment & 0xFF), (byte)((angleAdjustment >> 8) & 0xFF) };
|
||||
}
|
||||
|
||||
protected virtual int ParsePollingRate(byte[] packet)
|
||||
protected virtual PollingRate ParsePollingRate(byte[] packet)
|
||||
{
|
||||
if (packet[1] == 0x12 && packet[2] == 0x04 && packet[3] == 0x00)
|
||||
{
|
||||
return packet[13];
|
||||
return (PollingRate)packet[13];
|
||||
}
|
||||
|
||||
return -1;
|
||||
return PollingRate.PR125Hz;
|
||||
}
|
||||
|
||||
protected virtual bool ParseAngleSnapping(byte[] packet)
|
||||
@@ -539,16 +571,16 @@ namespace GHelper.Peripherals.Mouse
|
||||
}
|
||||
}
|
||||
|
||||
public void SetPollingRate(int pollingRate)
|
||||
public void SetPollingRate(PollingRate pollingRate)
|
||||
{
|
||||
if (!CanSetPollingRate())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (pollingRate > PollingRateCount() || pollingRate < 1)
|
||||
if (!IsPollingRateSupported(pollingRate))
|
||||
{
|
||||
Logger.WriteLine(GetDisplayName() + ": Pollingrate:" + pollingRate + " is invalid.");
|
||||
Logger.WriteLine(GetDisplayName() + ": Pollingrate:" + pollingRate + " is not supported by this mouse.");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,8 +3,6 @@ namespace GHelper.Peripherals.Mouse.Models
|
||||
{
|
||||
public class ChakramX : AsusMouse
|
||||
{
|
||||
private static string[] POLLING_RATES = { "250Hz", "500Hz", "1000Hz" };
|
||||
|
||||
public ChakramX() : base(0x0B05, 0x1A1A, "mi_00", true)
|
||||
{
|
||||
}
|
||||
@@ -18,9 +16,13 @@ namespace GHelper.Peripherals.Mouse.Models
|
||||
return "ROG Chakram X (Wireless)";
|
||||
}
|
||||
|
||||
public override string[] PollingRateDisplayStrings()
|
||||
public override PollingRate[] SupportedPollingrates()
|
||||
{
|
||||
return POLLING_RATES;
|
||||
return new PollingRate[] {
|
||||
PollingRate.PR250Hz,
|
||||
PollingRate.PR500Hz,
|
||||
PollingRate.PR1000Hz
|
||||
};
|
||||
}
|
||||
|
||||
public override bool HasAngleSnapping()
|
||||
@@ -62,7 +64,6 @@ namespace GHelper.Peripherals.Mouse.Models
|
||||
|
||||
public class ChakramXWired : ChakramX
|
||||
{
|
||||
private static string[] POLLING_RATES = { "250Hz", "500Hz", "1000Hz", "2000Hz", "4000Hz", "8000Hz" };
|
||||
public ChakramXWired() : base(0x1A18, false)
|
||||
{
|
||||
}
|
||||
@@ -72,9 +73,16 @@ namespace GHelper.Peripherals.Mouse.Models
|
||||
return "ROG Chakram X (Wired)";
|
||||
}
|
||||
|
||||
public override string[] PollingRateDisplayStrings()
|
||||
public override PollingRate[] SupportedPollingrates()
|
||||
{
|
||||
return POLLING_RATES;
|
||||
return new PollingRate[] {
|
||||
PollingRate.PR250Hz,
|
||||
PollingRate.PR500Hz,
|
||||
PollingRate.PR1000Hz,
|
||||
PollingRate.PR2000Hz,
|
||||
PollingRate.PR4000Hz,
|
||||
PollingRate.PR8000Hz
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
{
|
||||
public class P711 : AsusMouse
|
||||
{
|
||||
private static string[] POLLING_RATES = { "125Hz", "250Hz", "500Hz", "1000Hz" };
|
||||
|
||||
public P711() : base(0x0B05, 0x1A70, "mi_01", true)
|
||||
{
|
||||
}
|
||||
@@ -23,9 +21,14 @@
|
||||
}
|
||||
|
||||
|
||||
public override string[] PollingRateDisplayStrings()
|
||||
public override PollingRate[] SupportedPollingrates()
|
||||
{
|
||||
return POLLING_RATES;
|
||||
return new PollingRate[] {
|
||||
PollingRate.PR125Hz,
|
||||
PollingRate.PR250Hz,
|
||||
PollingRate.PR500Hz,
|
||||
PollingRate.PR1000Hz
|
||||
};
|
||||
}
|
||||
|
||||
public override int ProfileCount()
|
||||
|
||||
Reference in New Issue
Block a user