Rick Staa (43553902) at 25 May 18:14
Initial commit
There is still is one little bug in my setup. OpenRGB now shows 8 ballistics RGB devices where I only installed 4. Control-wise it however doesn't matter since the last 4 are exactly equal to the first 4. This is cased by a small difference in location between the two menu items that are created for the same ram (i.e. /dev/i2c-1 vs /dev/i2c-2). Probably caused by the ram layout, not the OpenRGB program.
$ i2cdetect -l
i2c-3 smbus SMBus PIIX4 adapter port 1 at 0b20 SMBus adapter
i2c-1 smbus SMBus PIIX4 adapter port 0 at 0b00 SMBus adapter
i2c-2 smbus SMBus PIIX4 adapter port 2 at 0b00 SMBus adapter
i2c-0 i2c Synopsys DesignWare I2C adapter I2C adapter
@TheRogueZeta I verified that the problem is solved in the kernel that I build using steps given in #1984 (comment 872699651). As a result, it looks like the patch created by @terry.bowman is working in ubuntu 20.04 under kernel version 5.13. Thanks again for all the effort you put into getting this issue fixed!
For future reference, I was able to apply the patch series on my kernel and install it on Ubuntu 20.04 using the following steps:
b4 am -o- https://lore.kernel.org/linux-i2c/[email protected]/T/#mde6458f2c96113daccb27ccef0cf8bce2d47fcc7 | git am) or by downloading the mbox.gz file directly and using it in the git am command.cp -v /boot/config-$(uname -r) .config.make olddefconfig to keep old config settings while using defaults for the new options.make deb-pkg -j $(nproc) command.sudo dpkg -i ../linux-headers-*.deb ../linux-image-*.deb.sudo update-grub2.@TheRogueZeta Thanks a lot for the update. I will check if the new patch fixes the ram detection.
@TheRogueZeta I'm now trying to see if building the kernel from source while applying the patch (i.e. https://launchpad.net/~vicamo/+archive/ubuntu/ppa-1950062)fixes the error.
In the meantime, are you sure I don't also need the patch explained in the README https://gitlab.com/CalcProgrammer1/OpenRGB#smbus-access-1 as I'm on an Asus B550 board? Based on some issues, it already should be merged in the upstream, but the official documentation has not yet been updated.
@TheRogueZeta I tried verifying the fix provided by https://launchpad.net/~vicamo/+archive/ubuntu/ppa-1950062 but I still don't see my RAM sticks in OpenRGB. I installed the fix as follows:
sudo add-apt-repository ppa:vicamo/ppa-1950062.sudo update.sudo install linux-oem-5.14-headers-5.14.0-2023 linux-oem-5.14-tools-5.14.0-2023 linux-oem-5.14-tools-host.sudo apt reboot.sudo openrgb.Maybe I need to apply the patch directly on my kernel?
Let's now set the following colours using the old dragon centre app: #2faced - (47, 172, 237), #dedca7 - (222, 220, 167), #b00b1e - (176, 11, 30), #bad801 - (186, 216, 1), #da7a11 - (218, 122, 17), #bec001 - (190, 192, 1), #5ead13 - (94, 173, 19), #7aff1e - (122, 255, 30), #7AFF1F - (122, 255, 31), #7AFF20 - (122, 255, 32), #7AFF21 - (122, 255, 33), #7AFF22 - (122, 255, 34), #7AFF23 - (122, 255, 35), #7AFF27 - (122, 255, 39), #7AFF29 - (122, 255, 41), #7AFF2A - (122, 255, 42), #7aff28 - (122, 255, 40), #7af51e - (122, 245, 30), #70ff1e - (112, 255, 30):
The full capture of my investigation can be found here:
Let's quickly check when the values are changing. Let's start with #7AFF1E again and increase the B value until a change is seen. I will not display the bytes that are not related to the RGB signal:
#7AFF1E - (122, 255, 30)
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x10
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x04
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
#7AFF1F - (122, 255, 31)
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x10
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x04
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
#7AFF20 - (122, 255, 32)
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x10
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x05
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
#7AFF21 - (122, 255, 33)
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x10
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x05
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
#7AFF22 - (122, 255, 34)
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x10
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x05
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
#7AFF23 - (122, 255, 35)
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x10
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x05
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
#7AFF27 - (122, 255, 39)
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x10
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x05
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
#7AFF29 - (122, 255, 41)
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x10
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x06
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
#7AFF2A - (122, 255, 42)
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x10
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x06
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
It looks like this device does not support a continuous RGB spectrum, but simply parts of it. This can also be seen from the fact that some colours don't display correctly on the GPU.
@Dracrius Based on the informatino you gave me I did another capture, but now only from starting up the MSI mystic light program. When doing this it gives the following files:
These files are created by two processes communicating with the MSI GTX 1070TI on address 0x38:
- **nvapi_897093** is the communication from the `MSI.CentralServer.exe` program. This program is the new https://www.msi.com/Landing/MSI-Center, which contains both the Mystic Light Tool and the System Information tool.
- **nvapi_907343** is the communication from the `LedKeeper2.exe` program. This program is equal to the old [Mystic Light tool](https://www.msi.com/Landing/mystic-light-rgb-gaming-pc/)..
Both processes send the following byte stream when connecting to the GPU. Maybe to establish a connection?:
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x04 Size: 0x01 Data: 0x01
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x00 Reg: Size: 0x03 Data: 0x00 0xF2 0x46
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x01 Size: 0x01 Data: 0xFF
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x00 Reg: Size: 0x03 Data: 0x00 0xF2 0x4A
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x01 Size: 0x01 Data: 0xFF
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x00 Reg: Size: 0x03 Data: 0x00 0xF0 0x03
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x01 Size: 0x01 Data: 0x25
After that, the MSI center doesn't send any bytes anymore while the Mystic Light Tool sends a byte stream to set the colour that it had in memory (RGB: 122, 255, 30 - #7aff1e) to the GPU:
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x15
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x10
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x04
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x10
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x04
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
When I then send a new color request (i.e. RGB: 176, 11, 39 - #b00b1e) I capture the following byte stream:
==Some initialization==
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x18
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x01
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0xFA
===The actual color command==
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x18
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x01
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0xFA
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x15
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x17
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x02
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x04
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x17
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x02
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x04
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
If I then again send the first colour I get (RGB: 122, 255, 30 - #7aff1e):
==Some initialization==
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x18
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x01
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0xFA
==Color command similar to the initial command==
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x15
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x10
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x04
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x10
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x04
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
It's again hard to see where the colours go, but the byte sequence is equal except the first part, which is new. Let's change one value in the colouring (i.e. RGB: 122, 255, 31 - #7aff1f).
==Some initialization==
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x18
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x01
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0xFA
==Color command similar to the initial command==
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x15
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x10
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x04
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x10
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x04
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
This gives us the same command, meaning that the colour values are rounded. Lets make a bigger change (i.e. RGB: 122, 255, 40 - #7aff28). This gives us:
==Some initialization==
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x18
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x01
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0xFA
==Color command similar to the initial command==
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00 << Reading current color?
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x15 << Also set command?
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
=RGB command=
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x10 << R (rounded)
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x20 << G (rounded)
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x06 << B (rounded)
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA << Close or alpha channel which does not exist?
=RGB command=
=SET COMMAND=
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
=SET COMMAND=
=RGB command=
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x10 << R (rounded)
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x20 << G (rounded)
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x06 << B (rounded)
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA << Close Or alpha channel which does not exist?
=RGB command=
In this since we now changed the B value, the following lines are changed:
When we change the G value, we get the following change:
When we change the R value, we get the following change:
It looks like the following commands are used for setting the colour:
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x10 << R (rounded)
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x20 << G (rounded)
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x06 << B (rounded)
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26
From this we can see that the control goes as follows. First a general connection read command and a connection command are send:
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x18
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x01
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0xFA
After that this read command always retrieves some information from the GPU:
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
Then this set command is always used:
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x15
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
Then the rounded RGB data is send by modifying this command:
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x10 << R
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x20 << G
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x06 << B
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA << Alpha
Followed by another set command:
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
and again the same rounded RGB command:
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x10 << R
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x20 << G
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x06 << B
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA << Alpha
I was not able to find how the program converts the rgb values, maybe rounding or using another data format but we now have more information about which bytes are used for setting the RGB.
I checked the constants in https://github.com/Vipeax/MSI-LED-Tool/blob/master/MSI%20LED%20Tool/Constants.cs, but they are not contained in the capture. Further, the tools seems to be broken.
@Dracrius Thank you so much for looking into my problem. So the missing part we need to find is how the RGB values show up. I will do some more tests to see if I can find them back in the logs. I also found this GitHub project which might help, https://github.com/Vipeax/MSI-LED-Tool.
@TheRogueZeta Thanks a lot for letting me know I overlooked that bug. I added myself as being affected. Hope a fix is merged into the upstream soon.
I can't get my 4x8gb Crucial Ballistix RGB C16 3200 MHz (BL2K8G32C16U4BL) to show up in OpenRGB under Ubuntu 20.04. They show up without any problems on Windows 11. I think this is due to a permission issue or that I first need to patch the kernel.
To solve the permission problem. I tried adding the udev rules and rebooting the OS, but this unfortunately does not work.
I tried to patch the kernel according to OpenRGB-Kernel-Patch, but haven't been able to successfully do so for kernel 5.13 on Ubuntu 20.04. Furthermore, I however was under the impression that the patch has already been released into the upstream as of v5.2.11 (see https://bugzilla.kernel.org/show_bug.cgi?id=204807#c127).
| Type | Item | Price |
|---|---|---|
| CPU | AMD Ryzen 5 5600G 3.9 GHz 6-Core Processor | $214.99 @ Newegg |
| Motherboard | Asus ROG STRIX B550-E GAMING ATX AM4 Motherboard | $283.92 @ MemoryC |
| Memory | Crucial Ballistix RGB 16 GB (2 x 8 GB) DDR4-3200 CL16 Memory | $132.55 @ Amazon |
| Memory | *Crucial Ballistix RGB 16 GB (2 x 8 GB) DDR4-3200 CL16 Memory | $132.55 @ Amazon |
| Video Card | NVIDIA GeForce GTX 1070 8 GB Video Card (2-Way SLI) | - |
| Video Card | NVIDIA GeForce GTX 1070 8 GB Video Card (2-Way SLI) | - |
| Case | Fractal Design Meshify 2 Compact TG Light Tint ATX Mid Tower Case | $139.98 @ Newegg |
| Power Supply | Corsair HXi 750 W 80+ Platinum Certified Fully Modular ATX Power Supply | $364.00 @ Amazon |
| Prices include shipping, taxes, rebates, and discounts | ||
| Total | $1267.99 | |
| *Lowest price parts chosen from parametric criteria | ||
| Generated by PCPartPicker 2022-03-11 14:01 EST-0500 |
openrgb output
$ sudo openrgb
Attempting to connect to local OpenRGB server.
Connection attempt failed
Local OpenRGB server unavailable.
Running standalone.
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
1E 9F 02 01 00 00
78 3C 00 01 00 00
78 3C 00 00 00 00
00 00 00 00 00 00
00 00 00 09 0B 02
01 F4 00 00 00 00
00 00 00 00 00 00
00 00 00 00 00 00
00 00 00 00 00 00
00 00 00 00 00 00
lcmod output
$ lsmod | grep i2c
i2c_i801 36864 0
i2c_smbus 20480 1 i2c_i801
i2c_piix4 28672 3
i2cdetect output
$ i2cdetect -l
i2c-3 smbus SMBus PIIX4 adapter port 1 at ff20 SMBus adapter
i2c-10 i2c NVIDIA i2c adapter 9 at 1:00.0 I2C adapter
i2c-1 smbus SMBus PIIX4 adapter port 0 at ff00 SMBus adapter
i2c-8 i2c NVIDIA i2c adapter 7 at 1:00.0 I2C adapter
i2c-6 i2c NVIDIA i2c adapter 4 at 1:00.0 I2C adapter
i2c-4 i2c NVIDIA i2c adapter 1 at 1:00.0 I2C adapter
i2c-2 smbus SMBus PIIX4 adapter port 2 at ff00 SMBus adapter
i2c-0 i2c Synopsys DesignWare I2C adapter I2C adapter
i2c-9 i2c NVIDIA i2c adapter 8 at 1:00.0 I2C adapter
i2c-7 i2c NVIDIA i2c adapter 6 at 1:00.0 I2C adapter
i2c-5 i2c NVIDIA i2c adapter 2 at 1:00.0 I2C adapter
$ sudo dmidecode -t 17
# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 3.3.0 present.
# SMBIOS implementations newer than version 3.2.0 are not
# fully supported by this version of dmidecode.
Handle 0x0036, DMI type 17, 92 bytes
Memory Device
Array Handle: 0x002F
Error Information Handle: 0x0035
Total Width: 64 bits
Data Width: 64 bits
Size: 8192 MB
Form Factor: DIMM
Set: None
Locator: DIMM_A1
Bank Locator: BANK 0
Type: DDR4
Type Detail: Synchronous Unbuffered (Unregistered)
Speed: 3200 MT/s
Manufacturer: CRUCIAL
Serial Number: E6491FF2
Asset Tag: Not Specified
Part Number: BL8G32C16U4BL.8FE
Rank: 1
Configured Memory Speed: 3200 MT/s
Minimum Voltage: 1.2 V
Maximum Voltage: 1.2 V
Configured Voltage: 1.2 V
Memory Technology: DRAM
Memory Operating Mode Capability: Volatile memory
Firmware Version: Unknown
Module Manufacturer ID: Bank 6, Hex 0x9B
Module Product ID: Unknown
Memory Subsystem Controller Manufacturer ID: Unknown
Memory Subsystem Controller Product ID: Unknown
Non-Volatile Size: None
Volatile Size: 8 GB
Cache Size: None
Logical Size: None
Handle 0x0039, DMI type 17, 92 bytes
Memory Device
Array Handle: 0x002F
Error Information Handle: 0x0038
Total Width: 64 bits
Data Width: 64 bits
Size: 8192 MB
Form Factor: DIMM
Set: None
Locator: DIMM_A2
Bank Locator: BANK 1
Type: DDR4
Type Detail: Synchronous Unbuffered (Unregistered)
Speed: 3200 MT/s
Manufacturer: CRUCIAL
Serial Number: E6491FDA
Asset Tag: Not Specified
Part Number: BL8G32C16U4BL.8FE
Rank: 1
Configured Memory Speed: 3200 MT/s
Minimum Voltage: 1.2 V
Maximum Voltage: 1.2 V
Configured Voltage: 1.2 V
Memory Technology: DRAM
Memory Operating Mode Capability: Volatile memory
Firmware Version: Unknown
Module Manufacturer ID: Bank 6, Hex 0x9B
Module Product ID: Unknown
Memory Subsystem Controller Manufacturer ID: Unknown
Memory Subsystem Controller Product ID: Unknown
Non-Volatile Size: None
Volatile Size: 8 GB
Cache Size: None
Logical Size: None
Handle 0x003C, DMI type 17, 92 bytes
Memory Device
Array Handle: 0x002F
Error Information Handle: 0x003B
Total Width: 64 bits
Data Width: 64 bits
Size: 8192 MB
Form Factor: DIMM
Set: None
Locator: DIMM_B1
Bank Locator: BANK 2
Type: DDR4
Type Detail: Synchronous Unbuffered (Unregistered)
Speed: 3200 MT/s
Manufacturer: CRUCIAL
Serial Number: E6491FEE
Asset Tag: Not Specified
Part Number: BL8G32C16U4BL.8FE
Rank: 1
Configured Memory Speed: 3200 MT/s
Minimum Voltage: 1.2 V
Maximum Voltage: 1.2 V
Configured Voltage: 1.2 V
Memory Technology: DRAM
Memory Operating Mode Capability: Volatile memory
Firmware Version: Unknown
Module Manufacturer ID: Bank 6, Hex 0x9B
Module Product ID: Unknown
Memory Subsystem Controller Manufacturer ID: Unknown
Memory Subsystem Controller Product ID: Unknown
Non-Volatile Size: None
Volatile Size: 8 GB
Cache Size: None
Logical Size: None
Handle 0x003F, DMI type 17, 92 bytes
Memory Device
Array Handle: 0x002F
Error Information Handle: 0x003E
Total Width: 64 bits
Data Width: 64 bits
Size: 8192 MB
Form Factor: DIMM
Set: None
Locator: DIMM_B2
Bank Locator: BANK 3
Type: DDR4
Type Detail: Synchronous Unbuffered (Unregistered)
Speed: 3200 MT/s
Manufacturer: CRUCIAL
Serial Number: E6491F65
Asset Tag: Not Specified
Part Number: BL8G32C16U4BL.8FE
Rank: 1
Configured Memory Speed: 3200 MT/s
Minimum Voltage: 1.2 V
Maximum Voltage: 1.2 V
Configured Voltage: 1.2 V
Memory Technology: DRAM
Memory Operating Mode Capability: Volatile memory
Firmware Version: Unknown
Module Manufacturer ID: Bank 6, Hex 0x9B
Module Product ID: Unknown
Memory Subsystem Controller Manufacturer ID: Unknown
Memory Subsystem Controller Product ID: Unknown
Non-Volatile Size: None
Volatile Size: 8 GB
Cache Size: None
Logical Size: None
MSI GeForce GTX 1070 Ti GAMING 8G
https://www.msi.com/Graphics-Card/geforce-gtx-1070-ti-gaming-8g
Name PNPDeviceID
NVIDIA GeForce GTX 1070 Ti PCI\VEN_10DE&DEV_1B82&SUBSYS_C3031462&REV_A1\4&7D659FE&0&0009
Mystic light control version: v3.0.0.06 (MSI Center install: v1.0.38.0)
I did a device capture using the https://gitlab.com/OpenRGBDevelopers/NvAPISpy tool. During this capture, I send 4 RGB control commands to the MSI GPU.
Captures before sending the RGB signal
The following captures were received before I send any RGB control commands:
These are likely coming from startup actions from several device RGB software utilities (i.e. Asus armoury crate, MSI tools).
Captures received during command send
I used the colours given by @Dr_No in https://discord.com/channels/699861463375937578/702322217622700052/784264315900657664 for my captures (i.e. #2faced, #dedca7, #b00b1e, #bad801, #da7a11, #bec001, #5ead13, #7aff1e - converted using https://www.rapidtables.com/convert/color/hex-to-rgb.html). When executing these control commands in the MSI mystic light utility the following captures were received:
From these, only the last file seems to be changed compared to the captures that were taken before I send the control commands.
#2faced
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x18
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x01
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0xFA
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x18
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x01
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0xFA
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x15
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x06
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x16
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x1E
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x06
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x16
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x1E
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
#dedca7
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x18
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x01
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0xFA
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x15
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x1C
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x1C
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x15
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x1C
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x1C
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x15
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
#b00b1e
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x18
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x01
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0xFA
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x15
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x17
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x02
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x04
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x17
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x02
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x04
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
#bad801
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x18
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x01
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0xFA
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x15
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x18
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x1C
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x01
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x18
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x1C
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x01
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
#da7a11
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x18
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x01
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0xFA
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x15
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x1C
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x10
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x03
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x1C
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x10
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x03
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
#bec001
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x18
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x01
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0xFA
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x15
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x18
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x19
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x01
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x18
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x19
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x01
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
#5ead13
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x18
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x01
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0xFA
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x15
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x0C
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x16
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x03
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x0C
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x16
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x03
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
#7aff1e
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x18
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x01
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0xFA
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x15
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x10
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x04
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x10
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x04
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
nvapi_576406.txt: Commands run when I start up the MSI utility.
nvapi_586390.txt: The last commands in this file are for controlling the RGB logo LED.
Commands received when setting the RGB to 82, 255, 27:
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x18
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x01
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0xFA
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x15
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x0B
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x04
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x0B
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x04
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
Commands received when setting the RGB to 255, 37, 71:
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x18
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x01
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0xFA
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x15
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x05
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x09
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x05
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x09
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
Commands received when setting the RGB to 3, 0, 255:
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x18
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x01
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0xFA
NvAPI_I2CReadEx: Dev: 0x38 RegSize: 0x01 Reg: 0x31 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x15
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x01
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x01
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x20 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x21 Size: 0x01 Data: 0x07
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x22 Size: 0x01 Data: 0x00
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x23 Size: 0x01 Data: 0x01
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x24 Size: 0x01 Data: 0x01
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x25 Size: 0x01 Data: 0x20
NvAPI_I2CWriteEx: Dev: 0x38 RegSize: 0x01 Reg: 0x26 Size: 0x01 Data: 0xFA
Rick Staa (4c13289c) at 05 Nov 08:40
I will keep this open so that somebody else can review it.