ForbesGRyan / HWiNFO-SteelSeries

Connects HWiNFO shared memory support to display certain system statistics on the OLED of Steel Series products (Arctis Pro Wireless, Apex Pro)
0 stars 0 forks source link

Error at launch and Request for new feature #3

Closed SebVig closed 6 months ago

SebVig commented 7 months ago

Hello,

I am interested by this plugin, but I did not manage to make it works. Other plugins work fine.

As new feature could you allow the user with simple config file to choose which sensor to display. Is it feasible? My goal is to show the FPS and timeframe from RTSS (need Afterburner with RTSS running) or PresentMon. Both RTSS and PresentMon are available in HWiNFO.

Regarding the error, when I launch the plugin I get this error from the terminal: E:\HWiNFO>hwinfo-steelseries-oled-v0.1.1.exe thread 'main' panicked at src\main.rs:137:49: called Option::unwrap() on a None value note: run with RUST_BACKTRACE=1 environment variable to display a backtrace

It is well detected by GG software for few seconds: " This device's OLED is being controlled by: HWiNFO_Stats"

Some information of my config: hwinfo-steelseries-oled-v0.1.1 SteelSeries GG v58.1.0 SteelSeries Apex Pro (full size) Firmware v4.9.1 HWiNFO v7.72.5355 (Shared memory is enabled) Windows 10 23H2

Let me know if you need other information.

Thank you.

[Edit: Keyboard FW version added]

ForbesGRyan commented 7 months ago

I have updated the latest release with a few features that weren't in the previous one, including more detailed instructions. Try that and see if if works while I work on adding different sensors. https://github.com/ForbesGRyan/HWiNFO-SteelSeries/releases/tag/v0.1.2

SebVig commented 7 months ago

Thanks a lot for this fast support!

I am still not able to make it works, with v0.1.2 I get this: Connected to SteelSeries GG Connected to HWiNFO

Then the process "hwinfo-steelseries-oled.exe" close itself.

Note 1: At the first launch it asked to choose the style then creates the config file successfully: "config.ini"

Note 2 [slightly edited]: If I delete the file "config.ini" manually, it asks for the style but it will not create the config file.

Note 3: Even if it says "Connected to SteelSeries GG", I do not have the banner in GG saying "This device's OLED is being controlled...") like it was the case for v0.1.1.

Hope this will help.

SebVig commented 7 months ago

This is just an idea, but there is an other way to read the sensors from HWiNFO using the registry. I am using it with Rainmeter and it works well. It is explained in details in this guide: https://docs.rainmeter.net/tips/hwinfo/

With the index number it make it easy to choose which sensor to display and there is no limitation of which sensor to choose and it does not have the 12 hours limitation from HWiNFO shared memory.

ForbesGRyan commented 7 months ago

Thanks for that info. I was unaware of that method of pulling from hwinfo. For right now I'm going to stick with Shared Memory, but I can add it further down the road. On another note, I just received the Apex Pro from Amazon and tested out the software and it is showing the info that I'm sending it (only 2 lines instead of 3). Can you confirm that you see the sensors in hwinfo (the whole list of sensors and readings current/low/high/average)?

SebVig commented 7 months ago

Yes I confirm that I can see all the sensors and readings in hwinfo, I am using some in Rainmeter. I even tried to reset hwinfo settings with no success. I am using a default config profile in SteelSeries GG with the default logo on the OLED screen. But your plugin close itself before anything get displayed.

Is there any runtime libraries, I should install?

SebVig commented 7 months ago

The Apex pro OLED screen is 128x40.

I have seen 128x52 in your code.

ForbesGRyan commented 7 months ago

I was experimenting with the screen sizes before, but it's not in use.

in the terminal window can you run and copy the output so I can trace the problem

$env:RUST_BACKTRACE="full"
.\hwinfo-steelseries-oled.exe

or

set RUST_BACKTRACE=full
hwinfo-steelseries-oled.exe

I'm almost finished with a prototype of choosing the sensor, will update when it's ready

SebVig commented 7 months ago

With v0.1.2 I am not able to get any backtrace, it closes instantly just after this (without any other output): E:\HWiNFO>set RUST_BACKTRACE=full

E:\HWiNFO>hwinfo-steelseries-oled.exe Connected to SteelSeries GG Connected to HWiNFO

With v0.1.1 I get some backtrace: E:\HWiNFO>set RUST_BACKTRACE=full

E:\HWiNFO>hwinfo-steelseries-oled-v0.1.1.exe thread 'main' panicked at src\main.rs:136:39: called Option::unwrap() on a None value stack backtrace: 0: 0x7ff6da8698ca - 1: 0x7ff6da8816eb - 2: 0x7ff6da866b91 - 3: 0x7ff6da86964a - 4: 0x7ff6da86bd1a - 5: 0x7ff6da86b988 - 6: 0x7ff6da86c3c8 - 7: 0x7ff6da86c262 - 8: 0x7ff6da86a2b9 - 9: 0x7ff6da86bfc0 - 10: 0x7ff6da891e47 - 11: 0x7ff6da891f02 - 12: 0x7ff6da6a4c2c - 13: 0x7ff6da6b0596 - 14: 0x7ff6da6ae430 - 15: 0x7ff6da8629a8 - 16: 0x7ff6da6a624c - 17: 0x7ff6da887cf4 - 18: 0x7ffa02417614 - BaseThreadInitThunk 19: 0x7ffa02b026b1 - RtlUserThreadStart

ForbesGRyan commented 7 months ago

Please try the new version just posted in releases.

Thank you

SebVig commented 7 months ago

Thank you, v0.1.3 is an improvement but I still encounter some crashes.

Option 1 ans 2 still crash instantly. I will provide the backtrace.

Option 3 : Custom, let me choose 3 sensors from hwinfo, then it crash. But when I rerun it, it show the sensors (2 as expected) on the OLED screen, but the sensor labels are too long and the actual values of the sensors are outside of the screen on the right. I tried to reduce the sensor labels directly in the ini file but I guess it is not allow as it crash when doing so.

ForbesGRyan commented 7 months ago

I added the ability to add a label into the conf.ini (still need to add it to the setup process) in the new version v0.1.3a.

[Sensors]
sensor_0="RTSS;Framerate"
label_0="FPS"
sensor_1="RTSS;Frame Time"
label_1="Time"
sensor_2="GPU [#0]: NVIDIA GeForce RTX 3090;GPU Hot Spot Temperature"
label_2="GPU"
SebVig commented 7 months ago

This is awesome! Thanks!

Most of the values are displayed with a decimal by default, is it possible to have no decimal by default?

Same as the label, is it possible to manually choose the unit in the ini file (e.g.: °C, Mhz, MB, W...) ?

I really like the new icon which merge Steelseries and hwinfo! Later one, could you had a "right click menu" on that icon to close it or to customize the sensors.

I don't know if it make a difference for the crashes, but I am using the default windows 10 terminal and not the Powershell.

Regarding the backtrace, i get this if I select 1 or 2:

config created. thread 'main' panicked at src\main.rs:151:64: called Option::unwrap() on a None value stack backtrace: 0: 0x7ff7493ffbd3 - 1: 0x7ff7494173ed - 2: 0x7ff7493fd211 - 3: 0x7ff7493ff9da - 4: 0x7ff749401cc9 - 5: 0x7ff74940198b - 6: 0x7ff7494021b4 - 7: 0x7ff74940204b - 8: 0x7ff749400269 - 9: 0x7ff749401d94 - 10: 0x7ff74942b167 - 11: 0x7ff74942b222 - 12: 0x7ff74922c2dd - 13: 0x7ff74923cff6 - 14: 0x7ff749236f4a - 15: 0x7ff7493f7b88 - 16: 0x7ff749236f28 - 17: 0x7ff74941d440 - 18: 0x7ffd24237614 - BaseThreadInitThunk 19: 0x7ffd256e26b1 - RtlUserThreadStart

I get this when I select 3 "custom" after the 3 sensors are selected (If I rerun the program it works fine):

config created. thread 'main' panicked at src\main.rs:282:66: called Option::unwrap() on a None value stack backtrace: 0: 0x7ff7493ffbd3 - 1: 0x7ff7494173ed - 2: 0x7ff7493fd211 - 3: 0x7ff7493ff9da - 4: 0x7ff749401cc9 - 5: 0x7ff74940198b - 6: 0x7ff7494021b4 - 7: 0x7ff74940204b - 8: 0x7ff749400269 - 9: 0x7ff749401d94 - 10: 0x7ff74942b167 - 11: 0x7ff74942b222 - 12: 0x7ff74922bf10 - 13: 0x7ff74923cff6 - 14: 0x7ff749236f4a - 15: 0x7ff7493f7b88 - 16: 0x7ff749236f28 - 17: 0x7ff74941d440 - 18: 0x7ffd24237614 - BaseThreadInitThunk 19: 0x7ffd256e26b1 - RtlUserThreadStart

ForbesGRyan commented 7 months ago

That stack trace was helpful, thanks. I was able to figure out the issue.

As for unit and decimal I was able to add that in. Decimal defaults to off but the option is there in the main section

[Main]
decimal="true"

[Sensors]
sensor_0="RTSS;Framerate"
label_0="FPS"
unit_0=""
sensor_1="RTSS;Frame Time"
label_1="Frame"
unit_1="ms"
sensor_2="GPU [#0]: NVIDIA GeForce RTX 3090;GPU Hot Spot Temperature"
label_2="GPU"
unit_2="°C"
SebVig commented 7 months ago

This is it, it is doing exactly what I was looking for! Thanks!

With short labels their is enough room for 2 sensors per row, This would be icing on the cake!

Their is still some errors when I select 1 or 2: config created. Error: Not found

Stack backtrace: 0: 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: BaseThreadInitThunk 11: RtlUserThreadStart

I also get tyhis error if I select 3 "custom" after the sensors configuration: config created. thread 'main' panicked at src\main.rs:343:66: called Option::unwrap() on a None value stack backtrace: 0: 0x7ff6879a3223 - 1: 0x7ff6879baa3d - 2: 0x7ff6879a0861 - 3: 0x7ff6879a302a - 4: 0x7ff6879a5319 - 5: 0x7ff6879a4fdb - 6: 0x7ff6879a5804 - 7: 0x7ff6879a569b - 8: 0x7ff6879a38b9 - 9: 0x7ff6879a53e4 - 10: 0x7ff6879ce7b7 - 11: 0x7ff6879ce872 - 12: 0x7ff6877c86b7 - 13: 0x7ff6877e06b6 - 14: 0x7ff6877da50a - 15: 0x7ff68799b1d8 - 16: 0x7ff6877da4e8 - 17: 0x7ff6879c0a90 - 18: 0x7ffeea7b7614 - BaseThreadInitThunk 19: 0x7ffeeb0826b1 - RtlUserThreadStart

ForbesGRyan commented 7 months ago

I have added 2 sensors per row in the latest update. I've also updated the "create config" part to include these new features, but it still fails immediately after creating the config and I don't know why. However running it again seems to work. Add:

[Main]
two_sensors_per_line=true

I have also updated so you can add any number of custom sensors (up to 6) and it will not fail.

SebVig commented 7 months ago

It is even better than I expected, thanks! Apart from the initial crash, it works great!

I build something like this:

FPS: 140 / 7ms GPU: 250W / 35°C

Up to 6 sensors, is it only for the nova screen or we can fit 3 sensors per line on the Apex Pro? It could fit if labels are very short, like 1 character.

ForbesGRyan commented 7 months ago

I have added the option of 3 sensors per row, change two_sensors_per_row to sensors_per_row with a number 1-3.

[Main]
sensors_per_row=3

I also added the options for a BLANK sensor since it might be hard to fit something into the 3rd slot. Also with the option of CLOCK as a sensor now. Below is my current setup

FPS 0 10:39am 
GPU 33° 25% 34W
CPU 56° 6% 61W

conf.ini

[Main]
style=Custom
sensors_per_line=3

[Sensors]
sensor_0="RTSS;Framerate"
label_0="FPS"
unit_0=""

sensor_1="CLOCK"
label_1=""
unit_1=""

sensor_2="BLANK"

sensor_3="GPU [#0]: NVIDIA GeForce RTX 3090;GPU Temperature"
label_3="GPU"
unit_3="°"

sensor_4="GPU [#0]: NVIDIA GeForce RTX 3090;GPU Core Load"
label_4=""
unit_4="%"

sensor_5="GPU [#0]: NVIDIA GeForce RTX 3090;GPU Power"
label_5=""
unit_5="W"

sensor_6="CPU [#0]: AMD Ryzen 9 7950X3D: Enhanced;CPU (Tctl/Tdie)"
label_6="CPU"
unit_6="°"

sensor_7="CPU [#0]: AMD Ryzen 9 7950X3D;Total CPU Usage"
label_7=""
unit_7="%"

sensor_8="CPU [#0]: AMD Ryzen 9 7950X3D: Enhanced;CPU Package Power"
label_8=""
unit_8="W"

As for that bug that crashes after creating config, I have no idea what it is or how to fix it but the main part actually works so that's what's important.

SebVig commented 7 months ago

Thanks, it works very well with 6 sensors on this tiny screen!

Minor detail, there is the ":" twice

How many lines? (2-3): : 2
How many sensors per line? (1-3): : 3

Due to the oled technology is it possible to invert the screen every few seconds? It could be a parameter from 10s to 1000s for example.

Another awesome feature would be to swap the config file by pressing the large button next to the oled display. We can imagine several config files, at the end of each file it give the next config file to use if the button is pressed.

config.ini
config2.ini
config3.ini
...

next_conf_file=config2

Of course the last config file should revert back to the main one next_conf_file=config

The possibility to change automatically the config file every few seconds (from 5s to 30s) would be nice, though it can still be changed with the button.

Some of those features could be advanced options, only accessible by modifying the config file manually, unless you could find an easy way to do it with the console.

This would exceed by far the possibilities of the native System Monitor App from Steelseries.

ForbesGRyan commented 7 months ago

the idea of sending multiple pages of data has been something I wanted since I started this project. I'll have to dive back in to the documentation from SteelSeries to figure this out soon. I have a couple ideas of how to do it, but will need to experiment. Thank you for the feedback!

ForbesGRyan commented 7 months ago

@SebVig I have added multiple pages support. It works by adding

[Main]
pages=2

And by changing [Sensors] to [PAGE1.Sensors] or [PAGE2.Sensors]. I updated the main README on to reflect my current config. It also support some emojis. Gotta test it out.

If this is all good with you I'm gonna close the issue. Thanks!

SebVig commented 6 months ago

Thanks, the multiple pages are working great!

I would love to leave this running all the time, but due to OLED burning issue, it would be a game changer to be able to invert the screen every few seconds. Is it possible?

Also changing the pages with a key press on the screen button would be nice.

Of course you can close this issue, you have already been much more than helpful to enhanced this plugin with all my requests. Huge thanks for that!