kraken2: report modern firmware versions in simplified form

The different ways the firmware version is reported by liquidctl and CAM
causes some confusion, of at least surprise; CAM uses a simplified
2-digit form since the migration to the unified 5.x/6.x firmware.

Change how liquidctl reports the version for modern firmware to match
CAM, but retain the 3-digit form for 2.x/3.x firmware [and earlier].
Also log the raw firmware tuple with debug level.
This commit is contained in:
Jonas Malaco 2022-05-30 08:12:09 -03:00
parent 622d83c428
commit 12f7853e3c
5 changed files with 23 additions and 11 deletions

View File

@ -22,7 +22,7 @@ NZXT Smart Device (V1)
└── LED count (total) 20
NZXT Kraken X (X42, X52, X62 or X72)
└── Firmware version 6.0.2
└── Firmware version 6.2
# liquidctl status
NZXT Smart Device (V1)

View File

@ -27,7 +27,7 @@ suspended state, or if there have been hardware changes.
```
# liquidctl initialize
NZXT Kraken X (X42, X52, X62 or X72)
└── Firmware version 6.0.2
└── Firmware version 6.2
```
With this generation of Kraken X coolers, it is especially important that

View File

@ -19,7 +19,7 @@ NZXT Smart Device (V1)
└── LED count (total) 20
NZXT Kraken X (X42, X52, X62 or X72)
└── Firmware version 6.0.2
└── Firmware version 6.2
# liquidctl status
NZXT Smart Device (V1)

View File

@ -41,7 +41,7 @@ _STATUS_FAN_SPEED = 'Fan speed'
_STATUS_PUMP_SPEED = 'Pump speed'
_STATUS_FWVERSION = 'Firmware version'
# more aggressive than observed 4.0.3 and 6.0.2 firmware defaults
# more aggressive than observed 4.0.3 and 6.2 firmware defaults
_RESET_FAN_PROFILE = [(20, 25), (30, 50), (50, 90), (60, 100)]
_RESET_PUMP_PROFILE = [(20, 50), (30, 60), (40, 90), (50, 100)]
@ -133,8 +133,14 @@ class Kraken2(UsbHidDriver):
self.set_speed_profile('fan', _RESET_FAN_PROFILE)
self.set_speed_profile('pump', _RESET_PUMP_PROFILE)
firmware = '{}.{}.{}'.format(*self.firmware_version)
return [('Firmware version', firmware, '')]
fw = self.firmware_version
_LOGGER.debug('raw firmware version: %r', fw)
# after the transition to the unified 5.x/6.x firmware, NZXT/CAM
# simplified how they reports the firmware version from its raw
# 4-component form
fw_human = f'{fw[0]}.{fw[3]}' if fw[0] >= 5 else f'{fw[0]}.{fw[2]}.{fw[3]}'
return [('Firmware version', fw_human, '')]
def _get_status_directly(self):
msg = self._read()
@ -266,7 +272,7 @@ class Kraken2(UsbHidDriver):
@property
def supports_cooling_profiles(self):
return self.supports_cooling and self.firmware_version >= (3, 0, 0)
return self.supports_cooling and self.firmware_version[0] >= 3
@property
def firmware_version(self):
@ -278,7 +284,7 @@ class Kraken2(UsbHidDriver):
if clear_first:
self.device.clear_enqueued_reports()
msg = self.device.read(_READ_LENGTH)
self._firmware_version = (msg[0xb], msg[0xc] << 8 | msg[0xd], msg[0xe])
self._firmware_version = tuple(msg[0xb:0xf])
return msg
def _write(self, data):

View File

@ -17,7 +17,7 @@ def mockKrakenXDevice():
@pytest.fixture
def mockOldKrakenXDevice():
device = _MockKrakenDevice(fw_version=(2, 5, 8))
device = _MockKrakenDevice(fw_version=(2, 1, 8))
dev = Kraken2(device, 'Mock X62', device_type=Kraken2.DEVICE_KRAKENX)
dev.connect()
@ -72,7 +72,13 @@ def test_kraken_connect(mockKrakenXDevice):
def test_kraken_initialize(mockKrakenXDevice):
(fw_ver,) = mockKrakenXDevice.initialize()
assert fw_ver[1] == '6.0.2'
assert fw_ver[1] == '6.2'
def test_old_kraken_initialize(mockOldKrakenXDevice):
(fw_ver,) = mockOldKrakenXDevice.initialize()
assert fw_ver[1] == '2.1.8'
@pytest.mark.parametrize('has_hwmon,direct_access', [(False, False), (True, True)])
@ -144,7 +150,7 @@ def test_kraken_speed_profiles_not_supported(mockOldKrakenXDevice):
def test_krakenM_initialize(mockKrakenMDevice):
(fw_ver,) = mockKrakenMDevice.initialize()
assert fw_ver[1] == '6.0.2'
assert fw_ver[1] == '6.2'
def test_krakenM_get_status(mockKrakenMDevice):