Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for NZXT Kraken Z63 and Z73 #79

Closed
3 of 4 tasks
jonasmalacofilho opened this issue Jan 29, 2020 · 96 comments
Closed
3 of 4 tasks

Support for NZXT Kraken Z63 and Z73 #79

jonasmalacofilho opened this issue Jan 29, 2020 · 96 comments
Labels
new device Support for a new device unresolved/archived Closed without resolution/completion (see comments)

Comments

@jonasmalacofilho
Copy link
Member

jonasmalacofilho commented Jan 29, 2020

Status: monitoring, fan/pump speeds and profiles and HUE 2 are already supported in the main branch. The main thing left to do is add support for the screen.

The new Kraken Z series adds an LCD to the pump/block top.

https://www.nzxt.com/products/kraken-z63
https://www.nzxt.com/products/kraken-z73

While these certainly require a new protocol to handle the LCD graphics, it might end up being an extension to (or part of) the (presumably) already new protocol for the X63/X73 (see #78).

I'm not sure if there will be a lot of interest in these devices (based on pricing and adoption of the existing competitors), much less of using them on platforms other than Windows or with software other than CAM.

Still, please add a 👍 if you are interested in support for either of these devices in liquidctl.

Additionally, if you have one of these, please get in touch (a comment is fine, but you can also reach me by email) so we can talk about working together on a driver.


Status:

  • Collect basic USB data for both devices (at least vendor and product IDs)
  • Inspect and analyze the new protocol (monitoring, cooling and LCD)
  • Adapt features that are (at least partially) common with the X models
  • Implement and test features that are exclusive to this model

Assorted notes:

@jonasmalacofilho jonasmalacofilho added help wanted new device Support for a new device labels Jan 29, 2020
@jonasmalacofilho jonasmalacofilho changed the title Support for Z63 and Z73 Support for NZXT Kraken Z63 and Z73 Jan 29, 2020
@astowe1080
Copy link

Hi! New here, heard about your work from CaseySJ’s remarkable (and popular) Z390 hackintosh build guide over at tonymacx86.

I don’t have the Z63 yet but it will arrive next week and I’m going to be interested in getting some sort of control over it within OSX 10.15. The build will also boot Win10 where I expect to simply use CAM.

I’m not much of a coder myself, but just want to throw my hat in the ring here as someone interested in supporting the Z63. Please let me know how I can help!

Thanks!

@inglor
Copy link

inglor commented Feb 11, 2020

Hi @jonasmalacofilho i have a z63 and running Linux. How can I grab what I do is required for supporting new device?

@jonasmalacofilho
Copy link
Member Author

Hi @astowe1080 and @inglor,

Thank you both for expressing interest in helping out here.

@inglor, can you start by running lsusb and figuring out the USB vendor and product IDs used by the Z63? After that, please post the output of lsusb -d <vendor>:<product> -v.


Afterwards, @astowe1080 and @inglor, we need some USB traffic captures. First I would like to ask you to disable as most dynamic features as possible (use a static animation, fixed pump and fan speeds, etc.), to reduce the amount of noise in the captured traffic.

To capture USB traffic I recommend Wireshark, and you can post the pcap files here or add them to liquidctl-device-data.

We would need to start with captures that show:

  • a general picture of what messages compose the protocol
  • the initial exchange of packets when CAM first connects to the device
  • how pump and fan speeds and temperature are read from the device

Later:

  • setting pump and fan speeds to fixed values
  • profiles based on liquid temperature, and later CPU/GPU temperatures¹
  • configuring simple GIFs
  • configuring more complex animations
  • temperature display modes

I would also like to ask you to describe how these are configured in CAM, and how they work on the cooler (since these are substantially new/different devices).

Some screenshots can also help. For example: showing the temperature and rpms for the corresponding traffic captures.


¹ One way of supporting features based on CPU/GPU temperature is to send that value to the cooler, and let it handle after that. This is not how previous Krakens worked, but since the Z63/Z73 have the temperature display mode, it would make sense to use the embedded processor to handle that instead of relying on the main CPU to render new GIFs every second. TL;DR: there's a chance that the protocol supports something like this, which would be interesting.

@inglor
Copy link

inglor commented Feb 13, 2020

Hi @jonasmalacofilho see below for lsusb -v output of the device

$ sudo lsusb -d 1e71:3008 -v
Bus 003 Device 003: ID 1e71:3008 NZXT ASM107x
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x1e71 NZXT
  idProduct          0x3008 
  bcdDevice            5.00
  iManufacturer           1 NZXT Inc.
  iProduct                2 NZXT KrakenZ Device
  iSerial                 3 326835463438
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0039
    bNumInterfaces          2
    bConfigurationValue     1
    iConfiguration          4 In Application
    bmAttributes         0xc0
      Self Powered
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               5
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.11
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength     598
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               5
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               5
Device Qualifier (for other device speed):
  bLength                10
  bDescriptorType         6
  bcdUSB               2.00
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  bNumConfigurations      1
Device Status:     0x0001
can't get debug descriptor: Resource temporarily unavailable
  Self Powered

@jonasmalacofilho
Copy link
Member Author

Thank you, @inglor.

Can you confirm the firmware version of your Z63, as reported by CAM?


It seems that this device simultaneously uses two interfaces, so when filtering captures it's important to use something like:

usb.src matches "^1\.3\." || usb.dst matches "^1\.3\."

(in this example: device is on bus 1, address 3, but we match all interfaces)

I'm guessing that the bulk endpoint 2 on interface 0 is used to transfer the GIFs, while the hid/interrupt endpoints on interface 1 are used for status reporting and configuring cooling settings.

@inglor
Copy link

inglor commented Feb 13, 2020

Can you confirm the firmware version of your Z63, as reported by CAM?

Not really CAM software is so buggy that it doesn't work. I'm hit by the infamous "white screen" issue. I'm trying to resolve it with NZXT support but it's gonna take some time. Also I'm away for some days so I'll report back after back. Hopefully they would have released a new version of NZXT CAM as the 4.2.3 is buggy.

@jonasmalacofilho
Copy link
Member Author

Not really CAM software is so buggy that it doesn't work.

Effective anti-analysis technique 🙂

@astowe1080
Copy link

astowe1080 commented Feb 13, 2020 via email

@jonasmalacofilho
Copy link
Member Author

@astowe1080

command line tools used for inspecting the Z63 USB traffic

Which tools do you mean?

In theory we’re trying to figure out how non-Windows OS’s interact with the Z63 but can Windows be used to gather the useful USB data?

Actually, we want to know how the software and/or kernel drivers supplied by manufacturer (usually only for Windows) interact with the device, so we can figure out how the protocol works and add support for it in our own cross-platform tool, liquidctl.

Without suitable software or kernel drivers, there is not much interaction with the device (or any USB device, really). While the HID interface is standard (so Linux and macOS will bind a standard HID driver to it), it's not a mouse or keyboard and (AFAIK) the kernel won't automatically start to poll the device for reports. And no (practical) data will be sent to the device (other than very low level USB management stuff).

@astowe1080
Copy link

astowe1080 commented Feb 14, 2020 via email

@jonasmalacofilho
Copy link
Member Author

@astowe1080

Don't worry about it : )
(also, it wasn't a dumb question)

Fwiw, I got CAM v4.2.3 installed last night and it reported my Z63’s firmware as “5.0” — can dig in deeper with it next week.

Thanks!

@inglor
Copy link

inglor commented Feb 26, 2020

Hi @jonasmalacofilho
I finally managed to run NZXT CAM software - I had to basically install it while ethernet was not plugged in, block it from firewall and now it's running. A couple of interesting points

  • Only latest NZXT CAM 4.2.3 works for Kraken Z63, previous versions don't (i.e. 4.1.1 or 4.0.1 which I tried)
  • If you don't have installed the NZXT CAM version or you start from a cold start (shutdown, power-off the PSU for 10 seconds and power on and start windows/linux) the Kraken Z63 displays the current Liquid temperature in white text (default orientation).
  • Once you start the NZXT CAM in windows it updates the LCD screen with what you've configured in the CAM settings and adds the colors.
  • The default "profile" of the Z63 without CAM is to have both pump and fans set to silent profile and it doesn't spin up or down while stressing the CPU. The Liquid temperature after a few cinebenches goes up to 31 C from 29 C and max CPU temp from motherboard is around 70 C for my setup (AMD 3950x).
  • If you shut down the CAM in windows the LCD screen stays static. It doesn't update but just shows the latest update from when CAM was running, which leads to me believe the LCD is pretty dump and just calculates the next frame and shows it.
  • If you restart of do a soft shutdown (no power down of the PSU) the Kraken Z63 shows the latest static image from the last time CAM was running - I assume this will be the same if you dual boot to linux after windows, but haven't tried it yet.
  • If you start CAM the fans and pump seems to be monitoring CPU temperature as I see them spin up when running a bentchmark and spin down after it finishes. It's not ideal and I'd rather monitor the Liquid temperature
  • After various attempts on the Wireshark to capture the USB data I've finally got some data.
    nzxt_kraken_z63_staring_CAM.zip. This is from a cold reboot to starting and closing CAM software so I presume the initiallization process and a few updates on CPU temp.

Personally I'm a little disapointed as I was hoping to be able to monitor water temperature instead of CPU for spinning up pump and fans of the AIO.

@jonasmalacofilho
Copy link
Member Author

@inglor

Thank you. I'll take a look as soon as I can.

@astowe1080
Copy link

astowe1080 commented Mar 3, 2020 via email

@jonasmalacofilho
Copy link
Member Author

@astowe1080 the screenshot is missing. AFAIK all attachments are scrubbed when you reply to a issue directly from the email notification.

@ghost
Copy link

ghost commented Mar 7, 2020

I use the NZXT Z63 (CPU: Ryzen 3900x) with Arch Linux and Windows 10. It only shows me the liquid temperature. As I use Linux most of the time, I really would appreciate support for this version.

@astowe1080
Copy link

astowe1080 commented Mar 8, 2020

@jonasmalacofilho
My mistake, here's the screenshot I mentioned and the CAM startup data I got from Wireshark --

  1. Launching CAM, letting it automatically load the dual CPU/GPU infographic function, exiting CAM
  2. Launching CAM, letting it automatically load the dual CPU/GPU infographic function, switching to .gif display, selecting and loading a .gif, exiting CAM
  3. Launching CAM, letting it automatically load the dual CPU/GPU infographic function, switching to "Spectrum Wave” function, exiting CAM

CAMdata.zip

@jonasmalacofilho
Copy link
Member Author

@astowe1080

Thanks, I'll take a look as soon as I can.

@ddv2005
Copy link

ddv2005 commented Mar 18, 2020

Z3 devices has 2 Endpoints. And looks like # 1 used for control/status and # 2 for upload LCD images. I guess that CAM software render and upload LCD images on demand. Hardware can store several images and then software can reuse old images by switching it via endpoint # 1

@inglor
Copy link

inglor commented Apr 16, 2020

Hi @jonasmalacofilho

How is this progressing? Do the Z devices get any similarities with the latest generation X ones and would it help the PR#100 once merged? In terms of CAM software they released a new version which seems a new UI is in a place so maybe something changed under the hood as well (communication with the pump).

Let me know if I can assist anyhow with trying to reverse engineer the API.

@jonasmalacofilho
Copy link
Member Author

Hi @inglor,

It looks like the pump speed is set the same way between your Z63 and a X63. And the fan speed follows a very obvious/similar pattern.

I haven't checked incoming status messages, but they also seem similar. So, as expected, the #100 should kick start the X63/X73 driver quite nicely.

In terms of CAM software they released a new version which seems a new UI is in a place so maybe something changed under the hood as well (communication with the pump).

A new UI yet again? Because CAM 3.x never got to support the new coolers, right?

Well, thanks for letting me know. But if there are changes in the protocol, I expect them to be restricted to the LCD; or at most they could explain the differences we're seeing between the actual HUE 2 and the X63. Anyway, I'll keep this in mind and if necessary I'll ask you for a few additional captures.

@inglor
Copy link

inglor commented May 25, 2020

Hi @jonasmalacofilho,

It looks like the pump speed is set the same way between your Z63 and a X63. And the fan speed follows a very obvious/similar pattern.

I haven't checked incoming status messages, but they also seem similar. So, as expected, the #100 should kick start the X63/X73 driver quite nicely.

I tried @tomaculum's 3232347 commit against my Z63 and doesn't detect something even though it's searching for it (looking at the USB device ID). I'm not sure if I need to modify the code to expect something though..

inglor@tiamat ~/.local/bin$ ./liquidctl --version
liquidctl v1.3.3 (32323472fdb0)
inglor@tiamat ~/.local/bin$ ./liquidctl --debug list
[DEBUG] liquidctl.cli: running liquidctl v1.3.3 (32323472fdb0)
[DEBUG] liquidctl.driver.usb: searching GenericHidBus (api=hid, drivers=[CommonSmartDeviceDriver, CorsairHidPsuDriver, KrakenThreeXDriver, KrakenTwoDriver, SeasonicEDriver, SmartDeviceDriver, SmartDeviceV2Driver])
[DEBUG] liquidctl.driver.usb: probing drivers for device 046d:c539
[DEBUG] liquidctl.driver.usb: probing drivers for device 046d:c539
[DEBUG] liquidctl.driver.usb: probing drivers for device 046d:4086
[DEBUG] liquidctl.driver.usb: probing drivers for device 046d:c539
[DEBUG] liquidctl.driver.usb: probing drivers for device 24f0:0140
[DEBUG] liquidctl.driver.usb: probing drivers for device 24f0:0140
[DEBUG] liquidctl.driver.usb: probing drivers for device 0b0e:0348
[DEBUG] liquidctl.driver.usb: probing drivers for device 0b05:18f3
[DEBUG] liquidctl.driver.usb: probing drivers for device 1e71:3008
[DEBUG] liquidctl.driver.usb: searching PyUsbBus (drivers=[AsetekDriver, CommonAsetekDriver, CorsairAsetekDriver, LegacyAsetekDriver])
[DEBUG] liquidctl.driver.usb: probing drivers for device 1d6b:0003
[DEBUG] liquidctl.driver.usb: probing drivers for device 1d6b:0002
[DEBUG] liquidctl.driver.usb: probing drivers for device 1d6b:0003
[DEBUG] liquidctl.driver.usb: probing drivers for device 1d6b:0002
[DEBUG] liquidctl.driver.usb: probing drivers for device 174c:3074
[DEBUG] liquidctl.driver.usb: probing drivers for device 1d6b:0003
[DEBUG] liquidctl.driver.usb: probing drivers for device 1e71:3008
[DEBUG] liquidctl.driver.usb: probing drivers for device 05e3:0608
[DEBUG] liquidctl.driver.usb: probing drivers for device 05e3:0608
[DEBUG] liquidctl.driver.usb: probing drivers for device 174c:2074
[DEBUG] liquidctl.driver.usb: probing drivers for device 1d6b:0002
[DEBUG] liquidctl.driver.usb: probing drivers for device 2109:0812
[DEBUG] liquidctl.driver.usb: probing drivers for device 1d6b:0003
[DEBUG] liquidctl.driver.usb: probing drivers for device 8087:0029
[DEBUG] liquidctl.driver.usb: probing drivers for device 0b05:18f3
[DEBUG] liquidctl.driver.usb: probing drivers for device 05e3:0610
[DEBUG] liquidctl.driver.usb: probing drivers for device 0b0e:0348
[DEBUG] liquidctl.driver.usb: probing drivers for device 0424:2514
[DEBUG] liquidctl.driver.usb: probing drivers for device 24f0:0140
[DEBUG] liquidctl.driver.usb: probing drivers for device 046d:c539
[DEBUG] liquidctl.driver.usb: probing drivers for device 2109:2812
[DEBUG] liquidctl.driver.usb: probing drivers for device 1d6b:0002
inglor@tiamat ~/.local/bin$ sudo lsusb | grep NZXT
[sudo] password for inglor:
Bus 003 Device 005: ID 1e71:3008 NZXT ASM107x

A new UI yet again? Because CAM 3.x never got to support the new coolers, right?

Well, thanks for letting me know. But if there are changes in the protocol, I expect them to be restricted to the LCD; or at most they could explain the differences we're seeing between the actual HUE 2 and the X63. Anyway, I'll keep this in mind and if necessary I'll ask you for a few additional captures.

Yeah I assume they upgrade it to add more support for the LCD screen.

@jonasmalacofilho
Copy link
Member Author

jonasmalacofilho commented May 25, 2020

@inglor

I just branched off a Z driver from the in-progress X one.

Can you try fourth-generation-krakens @ bee6c84?


# lsusb | grep NZXT
Bus 003 Device 005: ID 1e71:3008 NZXT ASM107x

This is unrelated to liquidctl, but it's now the second time a see a weird product description in lsusb. I'm thinking there might be a bug with a particular hub and/or in udev.

Can you show me the lsusb output with all devices (to see if, I expect, ASM107x belongs to some other device)?

@inglor
Copy link

inglor commented May 26, 2020

I think I might have an answer for that. The Kraken Z series have an incompatibility list published recently from NZXT (see support post) with some motherboards and unfortunately mine is listed these. The "official" workaround is to get an internal USB hub for the motherboard. I think that's why it's appearing as this. Personally if I was given an option to RMA I'd choose it and maybe even go back to X series - disappointed with the issues I've had so far.

For full lsusb -v see debug log

I checked the branch as suggested and now it's appearing normally:

$ ~/.local/bin/liquidctl --debug list                                 1 ↵ fourth-generation-krakens
[DEBUG] liquidctl.cli: running liquidctl v1.3.3 (bee6c846745b)
[DEBUG] liquidctl.driver.usb: searching GenericHidBus (api=hid, drivers=[CommonSmartDeviceDriver, CorsairHidPsuDriver, KrakenTwoDriver, KrakenX3Driver, KrakenZ3Driver, SeasonicEDriver, SmartDeviceDriver, SmartDeviceV2Driver])
[DEBUG] liquidctl.driver.usb: probing drivers for device 046d:c539
[DEBUG] liquidctl.driver.usb: probing drivers for device 046d:c539
[DEBUG] liquidctl.driver.usb: probing drivers for device 046d:4086
[DEBUG] liquidctl.driver.usb: probing drivers for device 046d:c539
[DEBUG] liquidctl.driver.usb: probing drivers for device 24f0:0140
[DEBUG] liquidctl.driver.usb: probing drivers for device 24f0:0140
[DEBUG] liquidctl.driver.usb: probing drivers for device 0b0e:0348
[DEBUG] liquidctl.driver.usb: probing drivers for device 0b05:18f3
[DEBUG] liquidctl.driver.usb: probing drivers for device 1e71:3008
[DEBUG] liquidctl.driver.usb: instanced driver for NZXT Kraken Z (Z63 or Z73) (experimental)
[DEBUG] liquidctl.driver.usb: searching PyUsbBus (drivers=[AsetekDriver, CommonAsetekDriver, CorsairAsetekDriver, LegacyAsetekDriver])
[DEBUG] liquidctl.driver.usb: probing drivers for device 1d6b:0003
[DEBUG] liquidctl.driver.usb: probing drivers for device 1d6b:0002
[DEBUG] liquidctl.driver.usb: probing drivers for device 1d6b:0003
[DEBUG] liquidctl.driver.usb: probing drivers for device 1d6b:0002
[DEBUG] liquidctl.driver.usb: probing drivers for device 174c:3074
[DEBUG] liquidctl.driver.usb: probing drivers for device 1d6b:0003
[DEBUG] liquidctl.driver.usb: probing drivers for device 1e71:3008
[DEBUG] liquidctl.driver.usb: probing drivers for device 05e3:0608
[DEBUG] liquidctl.driver.usb: probing drivers for device 05e3:0608
[DEBUG] liquidctl.driver.usb: probing drivers for device 174c:2074
[DEBUG] liquidctl.driver.usb: probing drivers for device 1d6b:0002
[DEBUG] liquidctl.driver.usb: probing drivers for device 2109:0812
[DEBUG] liquidctl.driver.usb: probing drivers for device 1d6b:0003
[DEBUG] liquidctl.driver.usb: probing drivers for device 8087:0029
[DEBUG] liquidctl.driver.usb: probing drivers for device 0b05:18f3
[DEBUG] liquidctl.driver.usb: probing drivers for device 05e3:0610
[DEBUG] liquidctl.driver.usb: probing drivers for device 0b0e:0348
[DEBUG] liquidctl.driver.usb: probing drivers for device 0424:2514
[DEBUG] liquidctl.driver.usb: probing drivers for device 24f0:0140
[DEBUG] liquidctl.driver.usb: probing drivers for device 046d:c539
[DEBUG] liquidctl.driver.usb: probing drivers for device 2109:2812
[DEBUG] liquidctl.driver.usb: probing drivers for device 1d6b:0002
Device ID 0: NZXT Kraken Z (Z63 or Z73) (experimental)
├── Vendor ID: 0x1e71
├── Product ID: 0x3008
├── Release number: 0x0500
├── Serial number: 326835463438
├── Bus: hid
├── Address: /dev/hidraw3
└── Driver: KrakenZ3Driver using module hid
[DEBUG] liquidctl.cli: hierarchy: UsbHidDriver, BaseUsbDriver, BaseDriver; HidapiDevice

But status gets a stacktrace:

[DEBUG] liquidctl.cli: device: NZXT Kraken Z (Z63 or Z73) (experimental)
Traceback (most recent call last):
  File "/home/inglor/.local/bin/liquidctl", line 11, in <module>
    load_entry_point('liquidctl', 'console_scripts', 'liquidctl')()
  File "/home/inglor/workspace/junk/liquidctl/liquidctl/cli.py", line 304, in main
    dev.connect(**opts)
  File "/home/inglor/workspace/junk/liquidctl/liquidctl/driver/usb.py", line 144, in connect
    self.device.open()
  File "/home/inglor/workspace/junk/liquidctl/liquidctl/driver/usb.py", line 473, in open
    self.hiddev.open_path(self.hidinfo['path'])
  File "hidraw.pyx", line 72, in hid.device.open_path
OSError: open failed

@jonasmalacofilho
Copy link
Member Author

jonasmalacofilho commented May 26, 2020

The "official" workaround is to get an internal USB hub for the motherboard. I think that's why it's appearing as this.

A non-compliant device and/or root hub (not sure what's causing the incompatibility) could explain what triggers the issue, but I still think this is showing that there's a buffer reuse bug in udev (or in lsusb and I missed that).

Can you let me know what versions of libudev, systemd and lsusb you have? I would like to take a second look at this once I have some free time.


But status gets a stacktrace

Were you running with root privileges? Or, alternatively, have you set up a udev rule that grants your user access to the hidraw device?

Anyway, I messed up and that particular commit is useless: I never made KrakenZ3Driver a subclass of KrakenX3Driver, so right now it's just an abstract driver that will raise NotImplementedErrorif you try to do anything.

Fixing this now, Just fixed with da19151, please update the code before running again. Also, you'll need to initialize the device before calling status.

@aronmgv
Copy link

aronmgv commented Jan 9, 2021

Has anyone been able to pass the kraken through to a (Windows) virtual machine for testing ?

I did, what's the problem?

That's what I did but wasn't able to get it fully working with the OLED screen.. What i did was a USB passthrough for the Kraken but apparently isn't enough for it's windows software to fully work. It apparently needs to see the CPU itself to read the temperatures and the load.. so the end effect was that NZXT cam pushed the animation to the OLED screen but it was suck at 0/0 values for example..

So I'm curious, were you able to overcome this problem as well? My VM is configured for CPU passthrough, so it sees all the cores, but couldn't make it to see it natively as host does. Is it possible somehow? If so this would also solve problem for NZXT cam within VM.. somebody? Appreciate your comments.

@himekifee
Copy link

Has anyone been able to pass the kraken through to a (Windows) virtual machine for testing ?

I did, what's the problem?

That's what I did but wasn't able to get it fully working with the OLED screen.. What i did was a USB passthrough for the Kraken but apparently isn't enough for it's windows software to fully work. It apparently needs to see the CPU itself to read the temperatures and the load.. so the end effect was that NZXT cam pushed the animation to the OLED screen but it was suck at 0/0 values for example..

So I'm curious, were you able to overcome this problem as well? My VM is configured for CPU passthrough, so it sees all the cores, but couldn't make it to see it natively as host does. Is it possible somehow? If so this would also solve problem for NZXT cam within VM.. somebody? Appreciate your comments.

Oh, I didn't. I think the packet is sent through usb interrupt. Does anyone have some interests working on this so we can talk about this in chat groups like gitter? I have several ideas but need more people to work on that.

@jonasmalacofilho
Copy link
Member Author

It apparently needs to see the CPU itself to read the temperatures and the load..

That's probably not going to work. Even if possible, it would mean giving the VM (probably unrestricted) access to the CPU MSRs, which could allow the Windows VM to do stuff the host doesn't expect.


we can talk about this in chat groups like gitter?

You're welcome to join our developer's Discord server: https://discord.gg/Cyb5CFAhd9.

@davidrapan
Copy link

Hi little bit of info about lcd...

  1. CAM draws over OffscreenCanvas with size 320x320
  2. Rotates according to your setting xD
  3. Then gets Image data buffer (I have example)
  4. Slices them, generates guid (sets as data.id) and send it to Kraken

And then u just tell device which image to show... (at least what i saw so far)
But i guess u guys already knows.

Anyway I'll come back when I'll have more, seya.

@himekifee
Copy link

Hi little bit of info about lcd...

1. CAM draws over OffscreenCanvas with size 320x320

2. Rotates according to your setting xD

3. Then gets Image data buffer (I have example)

4. Slices them, generates guid (sets as data.id) and send it to Kraken

And then u just tell device which image to show... (at least what i saw so far)
But i guess u guys already knows.

Anyway I'll come back when I'll have more, seya.

Ya, we already investigated LCD bucket, LCD mode, gifsicle, brightness, usb packets in discord but another guy showed full reverse engineering so we are pretty much stopped and waiting for him to post things now.

@davidrapan
Copy link

Hi little bit of info about lcd...

1. CAM draws over OffscreenCanvas with size 320x320

2. Rotates according to your setting xD

3. Then gets Image data buffer (I have example)

4. Slices them, generates guid (sets as data.id) and send it to Kraken

And then u just tell device which image to show... (at least what i saw so far)
But i guess u guys already knows.
Anyway I'll come back when I'll have more, seya.

Ya, we already investigated LCD bucket, LCD mode, gifsicle, brightness, usb packets in discord but another guy showed full reverse engineering so we are pretty much stopped and waiting for him to post things now.

Yeah, i just wanted to get rid of the CAM as soon as possible... but now when i know how they do things... and when i look at my $$$ Kraken... Im amazed... not even surprised why not even after a year so there is no fix (5m tops) for two GPUs and so and so... lol

@Nawaf89

This comment has been minimized.

@lenonk
Copy link

lenonk commented Feb 5, 2021

One interesting thing I've found with my new Z73 is that the default white mode (as on cold boot) shows, and updates, the liquid temperature properly.

However, if I load a Windows VM, and pass the USB device through, and set it to display liquid temps via CAM, it no longer updates the liquid temp after closing the VM.

I suppose this means that all the modes you can set via CAM are really just animated GIFs created by the software, and not programmed into firmware. I guess that makes sense, but still seems a little odd. The AIO obviously knows the liquid temp, so it must communicate that temp to CAM, which generates the GIF, then sends it back to the AIO. I would have expected that mode to be self contained.

At any rate, I just thought that was an interesting tidbit of info.

Is there any progress toward supporting the OLED? Is there any way I can help? I'm a developer myself, so I have some skills. ;)

@jonasmalacofilho
Copy link
Member Author

jonasmalacofilho commented Feb 5, 2021

@lenonk

Is there any progress toward supporting the OLED? Is there any way I can help? I'm a developer myself, so I have some skills. ;)

There hasn't been much progress besides what you can read in this issue. But please join our developer's Discord server: https://discord.gg/Cyb5CFAhd9.

@lenonk
Copy link

lenonk commented Feb 5, 2021

Screenshot_20210205_151534

:(

@jonasmalacofilho
Copy link
Member Author

jonasmalacofilho commented Feb 5, 2021

New link: https://discord.gg/f5HKCAadsr.
Link on the README, or here.

@lenonk
Copy link

lenonk commented Feb 5, 2021

Thanks. :)

@NickBolles
Copy link

@kebbleytea2 could you share your docker container? Maybe upload it to CA?

@KebbleyTea
Copy link

KebbleyTea commented Mar 9, 2021

@kebbleytea2 could you share your docker container? Maybe upload it to CA?

Just a side-note, the docker stuff is unrelated to the issue, but anyway...

I've got it as a public repo here: https://github.com/KebbleyTea/docker-liquidctl

It currently requires escalated privileges, not really had the time to improve on that. But feel free to fork and improve.
I've since taken out my Z73 due to an issue I had with it. So pre-warning, not touched it for a few months.

Hopefully that can get you started with it, in a container at least. I'm no expert.

@mrusme
Copy link

mrusme commented May 30, 2021

Since there was no status update on this in a while could anyone here maybe quickly confirm that it's at least possible to launch VirtualBox with Windows, pass the USB device through and permanently configure a gif?

@himekifee
Copy link

himekifee commented May 30, 2021

Yes. We also made some progress on protocol analysing in the discord server. So basically need somebody to implement the code and test it.

@LegsAJimbo
Copy link

@himekifee If it is of any help, I have a Z73 and I'd be more than happy to assist with testing code and/or capturing any data you may need, I'd love to get the LCD working with Manjaro.

@himekifee
Copy link

@himekifee If it is of any help, I have a Z73 and I'd be more than happy to assist with testing code and/or capturing any data you may need, I'd love to get the LCD working with Manjaro.

We've done 90% of the work in discord server. If you would like to help, please join discord server to help testing. Thanks.

@johnmanko
Copy link

Add Z53 to this list. I can test that model if this gets implemented.

@lenonk
Copy link

lenonk commented Oct 7, 2021

I'm still looking at creating a Cam like front end for this, just waiting for support to come to liquidctl. I'm not a Python guy, so I can't be of much help with the actual implementation.

@alfiedotwtf

This comment has been minimized.

@jonasmalacofilho

This comment has been minimized.

@daringer
Copy link

Is there some example code somewhere for the gif transfer?
I did some tryouts for the control flow here: https://github.com/daringer/liquidctl-nzxt-playground
But I guess nothing new, if I understood the issue history correctly. I can set brightness (yay!) and handle the slots/buckets a little, so not too much...

@himekifee
Copy link

We do have almost complete reverse-engineered protocol just no one is doing programming rn. You may also check KrakenZPlayground for some gif transfer code.

@mathslw
Copy link

mathslw commented Feb 1, 2022

I am using z73 on a x299 hackintosh and like to help if needed. The windows in parallels cannot see the usb device.

@jonasmalacofilho
Copy link
Member Author

Replaced by #444, as this was getting quite long despite being stalled and not containing that much technical information.

@jonasmalacofilho jonasmalacofilho added the unresolved/archived Closed without resolution/completion (see comments) label Apr 5, 2022
@liquidctl liquidctl locked and limited conversation to collaborators Apr 5, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
new device Support for a new device unresolved/archived Closed without resolution/completion (see comments)
Projects
None yet
Development

No branches or pull requests