+
     vi8.  c            
       sj   R t ^ RIt^ RIt^ RIHt ^ RIHt ^ RIHtH	t	H
t
Ht ]P                  ! ]4      tRR)RR*/tRtRtR	tR
t. R+Ot. R,Ot^<tR^ R^R^/t/ RR-bRR.bRR/bRR0bRR1bRR2bRR3bRR4bRR5bRR6bRR7bRR8bRR9bRR:bRR;bRR<bRR=bRR>R R?R!R@/CtR"^ R#^R$^R%^R&^/t^t^@t^t^At ! R' R(]4      t]tR# )Aao  liquidctl drivers for third generation NZXT Kraken X and M liquid coolers.

Kraken X (X42, X52, X62 and X72)
--------------------------------

These coolers house 5-th generation Asetek pumps with additional PCBs for
advanced control and RGB capabilites.

Kraken M22
----------

The Kraken M22 shares similar RGB funcionality to the X models of the same
generation, but has no liquid temperature sensor and no hability to report or
set fan or pump speeds.

Copyright Jonas Malaco and contributors

Incorporates work by leaty, Ksenija Stanojevic, Alexander Tong and Jens
Neumaier.

SPDX-License-Identifier: GPL-3.0-or-later
N)UsbHidDriverNotSupportedByDevice)clampnormalize_profileinterpolate_profilemap_directionfanpumpzLiquid temperaturez	Fan speedz
Pump speedFirmware versionZsynclogoringZoffZfixedsuper-fixedZfadingzspectrum-wavez	marquee-3z	marquee-4z	marquee-5z	marquee-6zcovering-marqueeZalternatingzmoving-alternatingZ	breathingzsuper-breathingZpulseztai-chizwater-coolerZloadingZwingsz
super-waveZslowestZslowernormalZfasterZfastestc                   s   a a ] tR t^^t oRtRtRtRRRR]/3RRR	R]/3.t]3V 3R
 lltR t	R t
R tRR ltRR ltR tR tR tR t]R 4       t]R 4       tRR ltR tR tRtVtV ;t# )Kraken2z2Third generation NZXT Kraken X or M liquid cooler.zKraken XzKraken Miq  i  z$NZXT Kraken X (X42, X52, X62 or X72)device_typei  zNZXT Kraken M22c                s   < \         SV `  W4       W0n        R V n        V P                  V P                  8g  V n        RV n        R# )TN)super__init__r   supports_lightingDEVICE_KRAKENMsupports_cooling_firmware_version)selfdeviceZdescriptionr   kwargs	__class__s   &&&&,=/usr/lib/python3.14/site-packages/liquidctl/driver/kraken2.pyr   ZKraken2.__init__n   s?    -&!% $ 0 0D4G4G G!%    c                sR   V P                   '       d-   V P                  R\        4       V P                  R\        4       V P                  p\
        P                  RV4       V^ ,          ^8  d   V^ ,           RV^,           2MV^ ,           RV^,           RV^,           2pRVR3.# )a  Initialize the device and the driver.

This method should be called every time the systems boots, resumes from
a suspended state, or if the device has just been (re)connected.  In
those scenarios, no other method, except `connect()` or `disconnect()`,
should be called until the device and driver has been (re-)initialized.

Returns None or a list of `(property, value, unit)` tuples, similarly
to `get_status()`.
r   r   zraw firmware version: %rZ.r	    )supports_cooling_profilesset_speed_profile_RESET_FAN_PROFILE_RESET_PUMP_PROFILEfirmware_version_LOGGERZdebug)r   r   ZfwZfw_humans   &,  r   
initializeZKraken2.initializeu   s     ))) ""5*<=""6+>?""0"5
 *,A!beWAbeW%BqE7!BqE7!BqE79S#Xr233r   c                s    V P                  4       p\        V^,          V^,          ^
,          ,           R3\        V^,          ^,          V^,          ,          R3\        V^,          ^,          V^,          ,          R3.# )      °Crpm)_read_STATUS_TEMPERATURE_STATUS_FAN_SPEED_STATUS_PUMP_SPEED)r   msg   & r   _get_status_directlyZKraken2._get_status_directly   sj    jjl !#a&3q6"9"4e<A!c!f 4e<Q1s1v!5u=
 	
r   c                s    \         V P                  P                  R 4      R,          R3\        V P                  P                  R4      R3\        V P                  P                  R4      R3.# )Ztemp1_inputgMbP?r%   Z
fan1_inputr&   Z
fan2_input)r(   _hwmonZread_intr)   r*   r      &r   _get_status_from_hwmonZKraken2._get_status_from_hwmon   s\     $++"6"6}"E"LeT 4 4\ BEJ!5!5l!CUK
 	
r   c                s|   V P                   V P                  8X  d   . # V P                  '       dC   V'       g;   \        P	                  RV P                  P
                  4       V P                  4       # V P                  '       d+   \        P                  RV P                  P
                  4       V P                  4       # )zJGet a status report.

Returns a list of `(property, value, unit)` tuples.
z4bound to %s kernel driver, reading status from hwmonz4directly reading the status despite %s kernel driver)	r   r   r.   r"   infoZdriverr1   warningr-   )r   Zdirect_accessr   s   &&,r   
get_statusZKraken2.get_status   s     t222I;;;}LLOQUQ\Q\QcQcd..00;;;OOR KK..0 ((**r   c                s"   V P                   '       g   \        4       hVR8X  d   \        P                  R4       RpRV9   d*   \        P                  R4       VP	                  RR4      pRp\
        V,          w  rxrrV\        V^ ^4      ,          pV'       d    VR	8w  d   \        P                  R
W!4       R	pV P                  W:WV4      p\        V,          pV\        V,          ,          p\        V4       F  w  ppV^,          pVV,          V	,          pV^ ,          ^,          V^ ,          ^ ,          V^ ,          ^,          .p\        \        P                  ! VR,          !  4      pV P                  ^^LWV.V,           V,           4       K  	  R# )z*Set the color mode for a specific channel.r   zCdeprecated mode, move to super-fixed, super-breathing or super-waver   Z	backwardsz2deprecated mode, move to direction=backward optionz
backwards-r   Zbackwardr   z5mode=%s unsupported with channel=%s, dropping to ring:r$   NNN)r   r   r"   r3   Zreplace_COLOR_MODESr   _generate_steps_ANIMATION_SPEEDS_COLOR_CHANNELS	enumeratelist	itertoolsZchain_write)r   channelmodecolorsZspeedZ	directionr   ZmvalZmod2Zmod4	mincolors	maxcolorsringonlystepsZsvalZbyte2iZledsZseqZbyte4r
   r   s   &&&&&&,               r   	set_colorZKraken2.set_color   sR    %%%&((7?OOab D$OOPQ<<b1D"I;G;M8DYiD116)OOS +G$$V	R 'w// 'GAtq&C3J%EGAJQ
DGAJ7D	b23DKKdE7$>EF (r   c                s   \        V4      p\        V4      V8  d   \        R V RV R24      hV^ 8X  d+   \        V4      ^ 8  d   \        P	                  RV4       R.pM+\        V4      V8  d   \        P	                  RWC4       VRV pRV9  d   V Uu. uF  qf3^	,          NK  	  ppV# V'       d   R.V,           .pV# V.pV# u upi )znot enough colors for mode=z, at least z	 requiredz(too many colors for mode=%s, none neededz+too many colors for mode=%s, dropping to %dNr   )    rF   rF   )r:   lenZ
ValueErrorr"   r3   )r   r?   r@   rA   r>   rB   ZcolorrC   s   &&&&&&  r   r6   ZKraken2._generate_steps   s    fv;":4&I;V_`aa!^6{Q JDQ[F[9$OOI -JY'F $-34VEXaZZVE4
 	 [6)*E  HE 5s   Cc                s   V P                   '       g   \        4       h\        V\        4      p\	        \        ^^24      4      \	        \        ^2^<^4      4      ,           ^<.,           pV Uu. uF  qf\        WF4      3NK  	  pp\        V,          w  rp
\        V4       FF  w  pw  r\        WV
4      p\        P                  RWV4       V P                  ^^MW,           W.4       KH  	  R# u upi )z+Set channel to follow a speed duty profile.u;   setting %s PWM duty to %d%% for liquid temperature >= %d°CN)r   r   r   _CRITICAL_TEMPERATUREr:   Zranger   _SPEED_CHANNELSr9   r   r"   r2   r<   )r   r=   Zprofiler   ZnormZstdtempsZtZinterpcbasedmindmaxrD   Ztempdutys   &&&,          r   r   ZKraken2.set_speed_profile   s     ---&(( *?@ b"&eBA.>)??2$F=EFX)$23XF+G4T(0OA|T*DLLV .KKdEIt:;	  1 Gs   )C'c                s    V P                   '       g   \        4       hV P                  '       d   V P                  V^ V3^;V3RR.4       R# V P	                  W4       R# )z"Set channel to a fixed speed duty.N<   d   )rP   rP   )r   r   r   r   set_instantaneous_speed)r   r=   rM   r   s   &&&,r   set_fixed_speedZKraken2.set_fixed_speed   sT     $$$&((+++""7aYT
Iz,Z[((7r   c                s    V P                   '       g   \        4       h\        V,          w  rEp\        W%V4      p\        P                  RW4       V P                  ^^MV^p,          ^ V.4       R# )z<Set channel to speed duty, but do not guarantee persistence.zsetting %s PWM duty to %d%%N)r   r   rI   r   r"   r2   r<   )r   r=   rM   r   rJ   rK   rL   s   &&&,   r   rQ   ZKraken2.set_instantaneous_speed  s^     $$$&((+G4TT&2GBS$a67r   c                sV    V P                   ;'       d    V P                  ^ ,          ^8  # )rF   )r   r!   r/   r0   r   r   Z!Kraken2.supports_cooling_profiles  s&    $$FF)>)>q)AQ)FFr   c                sZ    V P                   f   V P                  RR7      pV P                   # )NF)clear_first)r   r'   )r   Z_r,   r   r!   ZKraken2.firmware_version  s*    !!)

u
-A%%%r   c                s    V'       d   V P                   P                  4        V P                   P                  \        4      p\	        VR ,          4      V n        V# ):i   i   N)r   Zclear_enqueued_reportsZread_READ_LENGTHZtupler   )r   rS   r+      && r   r'   ZKraken2._read  s?    KK..0kk|,!&s7|!4
r   c                s    ^ .\         \        V4      ,
          ,          pV P                  P                  W,           4       R# )rF   N)_WRITE_LENGTHrG   r   Zwrite)r   ZdataZpaddingrU   r   r<   ZKraken2._write"  s+    %T23$.)r   c                s    \        4       h)zNot supported by this device.r   )r   r=   r>   Zvaluer   s   &&&&,r   
set_screenZKraken2.set_screen&  s    "$$r   )r   r   r   r   )F)r   Zforward)T)__name__Z
__module__Z__qualname__Z__firstlineno____doc__ZDEVICE_KRAKENXr   Z_MATCHESr   r#   r-   r1   r4   rE   r6   r   rR   rQ   Zpropertyr   r!   r'   r<   rW   Z__static_attributes__Z__classdictcell__Z__classcell__)r   Z__classdict__s   @@r   r   r   ^   s     <  NN	?>B
 	 
*>-
 		H 9G &48

+&G@.<$88 G G & &
*% %r   r   )i   rF   rP   )i   rF   rP   ))   i   )   2   )r\   Z   rN   ))rZ   r\   )r[   rO   )i(   r]   )r\   rP   )rF   rF   rF   rF   rF   F)rF   rF   rF   r$   r$   F)rF   rF   rF   r$   	   F)r$   rF   rF         F)r_   rF   rF   rF   rF   F)   rF   rF   r$   r$   T)ra   rF   r`   r$   r$   T)ra   rF   i   r$   r$   T)ra   rF   i   r$   r$   T)i   rF   rF   r$   r`   T)   rF   rF   r_   r_   T)rb   r`   rF   r_   r_   T)   rF   rF   r$   r`   F)rc   rF   rF   r$   r^   F)i   rF   rF   r$   r`   F)r`   rF   rF   r_   r_   T)r^   rF   rF   rF   rF   T)i
   rF   rF   r$   r$   T)i   rF   rF   r$   r$   T)i   rF   rF   r$   r`   T) rY   r;   ZloggingZliquidctl.driver.usbr    Zliquidctl.errorr   Zliquidctl.utilr   r   r   r   Z	getLoggerrX   r"   rI   r(   r)   r*   Z_STATUS_FWVERSIONr   r    rH   r8   r5   r7   Z_READ_ENDPOINTrT   Z_WRITE_ENDPOINTrV   r   ZKrakenTwoDriver) r   r   <module>rd      s  .   - 0) ) 

H
% 
^
^
 +  ! &  ? ?   

	%D %D %D	
 %D %D %C %C %C %C %C %C %C %D %D  %D!" %C#$ %C%& %C%C%C+2   J%l J%\ r   