Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
# configuration command.
LOGGER.info('using a flat profile to set %s to a fixed duty', channel)
self.set_speed_profile(channel, [(0, duty), (_CRITICAL_TEMPERATURE - 1, duty)])
return
mtype, dmin, dmax = _FIXED_SPEED_CHANNELS[channel]
duty = clamp(duty, dmin, dmax)
total_levels = _MAX_PUMP_SPEED_CODE - _MIN_PUMP_SPEED_CODE + 1
level = round((duty - dmin)/(dmax - dmin)*total_levels)
effective_duty = round(dmin + level*(dmax - dmin)/total_levels)
LOGGER.info('setting %s PWM duty to %i%% (level %i)', channel, effective_duty, level)
self._begin_transaction()
self._write([mtype, _MIN_PUMP_SPEED_CODE + level])
self._end_transaction_and_read()
class LegacyAsetekDriver(CommonAsetekDriver):
"""liquidctl driver for legacy fifth generation Asetek coolers."""
SUPPORTED_DEVICES = [
(0x2433, 0xb200, None, 'Asetek 690LC (assuming NZXT Kraken X) (experimental)', {}),
]
@classmethod
def probe(cls, handle, legacy_690lc=False, **kwargs):
if not legacy_690lc:
return
yield from super().probe(handle, **kwargs)
def __init__(self, device, description, **kwargs):
super().__init__(device, description, **kwargs)
# --device causes drivers to be instantiated even if they are later
# discarded; defer instantiating the data storage until to connect()
"""Disconnect from the device.
Implementation note: unlike SI_Close is supposed to do,¹ do not send
_USBXPRESS_NOT_CLEAR_TO_SEND to the device. This allows one program to
disconnect without sotping reads from another.
Surrounding device.read() with _USBXPRESS_[NOT_]CLEAR_TO_SEND would
make more sense, but there seems to be a yet unknown minimum delay
necessary for that to work well.
¹ https://github.com/craigshelley/SiUSBXp/blob/master/SiUSBXp.c
"""
super().disconnect(**kwargs)
class AsetekDriver(CommonAsetekDriver):
"""liquidctl driver for modern fifth generation Asetek coolers."""
SUPPORTED_DEVICES = [
(0x2433, 0xb200, None, 'Asetek 690LC (assuming EVGA CLC)', {}),
]
@classmethod
def probe(cls, handle, legacy_690lc=False, **kwargs):
if legacy_690lc:
return
yield from super().probe(handle, **kwargs)
def get_status(self, **kwargs):
"""Get a status report.
Returns a list of `(property, value, unit)` tuples.