@@ -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