Skip to content

Commit c04cbab

Browse files
committed
fix: correctly set fan speed on new kraken 2023
1 parent 4dc71a0 commit c04cbab

1 file changed

Lines changed: 25 additions & 14 deletions

File tree

NzxtKrakenV3.cs

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,33 +15,35 @@ namespace FanControl.NzxtKraken
1515
internal class KrakenControlV3 : KrakenControl
1616
{
1717
HidDevice _hidDevice;
18-
byte _channel;
1918
int _minValue;
20-
public KrakenControlV3(string id, string name, float resetValue, int minValue, HidDevice hidDevice, byte channel) : base(id, name, resetValue)
19+
byte[] _packet;
20+
public KrakenControlV3(string id, string name, float resetValue, int minValue, HidDevice hidDevice, byte[] channelData) : base(id, name, resetValue)
2121
{
2222
_hidDevice = hidDevice;
23-
_channel = channel;
2423
_minValue = minValue;
24+
_packet = new byte[44];
25+
_packet[0] = 0x72;
26+
_packet[1] = channelData[0];
27+
_packet[2] = channelData[1];
28+
_packet[3] = channelData[2];
2529
}
2630

2731
public override void Set(float val)
2832
{
2933
_hidDevice.TryOpen(out HidStream stream);
30-
var speed = Math.Min(Math.Max((int) val, _minValue), 100);
31-
var packet = new byte[44];
32-
packet[0] = 0x72;
33-
packet[1] = _channel;
34-
packet[2] = 0x0;
35-
packet[3] = 0x0;
36-
for (int i = 0; i < 40; i++) packet[i + 4] = (byte) speed;
37-
stream.Write(packet);
34+
var speed = Math.Min(Math.Max((int)val, _minValue), 100);
35+
for (int i = 0; i < 40; i++) _packet[i + 4] = (byte)speed;
36+
stream.Write(_packet);
3837
stream.Close();
3938
}
4039
}
4140

4241
internal class NzxtKrakenX3 : NzxtKrakenDevice
4342
{
4443
internal override string Name => "Kraken X3";
44+
45+
internal virtual byte[] PumpControlHeader => new byte[] { 0x1, 0x0, 0x0 };
46+
4547
public KrakenSensor liquidTemperature;
4648
public KrakenSensor pumpSpeed;
4749
public KrakenControlV3 pumpControl;
@@ -53,7 +55,7 @@ public NzxtKrakenX3(HidDevice hidDevice, IPluginLogger pluginLogger, IPluginSens
5355
pumpSpeed = new KrakenSensor($"pumprpm-{_serial}", $"Pump - {Name}");
5456
_container.FanSensors.Add(pumpSpeed);
5557

56-
pumpControl = new KrakenControlV3($"pumpcontrol-{_serial}", $"Pump - {Name}", 60, 20, hidDevice, 0x1 );
58+
pumpControl = new KrakenControlV3($"pumpcontrol-{_serial}", $"Pump - {Name}", 60, 20, hidDevice, PumpControlHeader);
5759
_container.ControlSensors.Add(pumpControl);
5860
}
5961

@@ -82,14 +84,18 @@ internal virtual void SetValues(byte[] packet)
8284
internal class NzxtKrakenZ3 : NzxtKrakenX3
8385
{
8486
internal override string Name => "Kraken Z3";
87+
internal override byte[] PumpControlHeader => new byte[] { 0x1, 0x0, 0x0 };
88+
89+
internal virtual byte[] FanControlHeader => new byte[] { 0x2, 0x0, 0x0 };
90+
8591
public KrakenSensor fanSpeed;
8692
public KrakenControlV3 fanControl;
8793
public NzxtKrakenZ3(HidDevice hidDevice, IPluginLogger pluginLogger, IPluginSensorsContainer container) : base(hidDevice, pluginLogger, container)
8894
{
8995
fanSpeed = new KrakenSensor($"fanrpm-{_serial}", $"Fan - {Name}");
9096
_container.FanSensors.Add(fanSpeed);
9197

92-
fanControl = new KrakenControlV3($"fancontrol-{_serial}", $"Fan - {Name}", 30, 0, hidDevice, 0x2);
98+
fanControl = new KrakenControlV3($"fancontrol-{_serial}", $"Fan - {Name}", 30, 0, hidDevice, FanControlHeader);
9399
_container.ControlSensors.Add(fanControl);
94100
}
95101

@@ -109,9 +115,12 @@ internal override void SetValues(byte[] packet)
109115
internal class NzxtKrakenElite : NzxtKrakenZ3
110116
{
111117
internal override string Name => "Kraken Elite";
118+
internal override byte[] PumpControlHeader => new byte[] { 0x1, 0x1, 0x0 };
119+
120+
internal override byte[] FanControlHeader => new byte[] { 0x2, 0x1, 0x1 };
112121

113122
public NzxtKrakenElite(HidDevice hidDevice, IPluginLogger pluginLogger, IPluginSensorsContainer container) : base(hidDevice, pluginLogger, container)
114-
{}
123+
{ }
115124

116125
public static new bool SupportsDevice(HidDevice hidDevice)
117126
{
@@ -122,7 +131,9 @@ public NzxtKrakenElite(HidDevice hidDevice, IPluginLogger pluginLogger, IPluginS
122131
internal class NzxtKraken2023 : NzxtKrakenZ3
123132
{
124133
internal override string Name => "Kraken";
134+
internal override byte[] PumpControlHeader => new byte[] { 0x1, 0x1, 0x0 };
125135

136+
internal override byte[] FanControlHeader => new byte[] { 0x2, 0x1, 0x1 };
126137
public NzxtKraken2023(HidDevice hidDevice, IPluginLogger pluginLogger, IPluginSensorsContainer container) : base(hidDevice, pluginLogger, container)
127138
{ }
128139

0 commit comments

Comments
 (0)