Conversation
…edator sense features.
|
Hi PHN16-73 owner here, with your commits I can control fan power profile and even turn rgb off but cannot set it to static as its stuck on multicolor wave, what I do notice is when module is loaded keyboard flashes teal 3 times and the speed of the multicolor wave slows down, but cant change pattern or colors, "ls /sys/devices/platform/acer-wmi/" shows me "driver driver_override four_zoned_kb hwmon modalias platform-profile power predator_sense subsystem uevent" inside "four_zoned_kb" there is four_zone_mode and per_zone_mode files but any changes to them do not reflect on keyboard rgb same goes to "/sys/module/linuwu_sense/drivers/platform:acer-wmi/acer-wmi/four_zoned_kb/". |
|
Similar with PHN17S-71. I've tested battery limiter, fan speed, performance modes and keyboard settings. Among which all but keyboard settings work. I can only change the brightness of the keyboard, but color, animation, speed, direction and zones do not respond to changes. |
Got it, I will look into it shortly. Thanks for the detailed reply, I'll hopefully have something sometime soon. |
|
I may be wrong but I think the keyboard and lid logo on PHN16S-71 do not use WMI. When changing their states from Predator Sense on Windows I could not trace any WMI calls and they do not respond to ones which are supposed to work (and do on previous models). This needs proper reverse engineering and I have yet to figure out the new mechanism. |
|
I have a PHN16-73 dual booting windows 11 and cachyos. How can I help reverse engineer the WMI calls for my system? |
|
@fcrespo82 I'm trying to figure out PHN16S-71 and it's a tough one. Figured out a few interesting things things on the way so far. Another discovery is that you can enable logging built-in into the services by creating the following registry values: The logs are stored in these locations, some really useful information there: To explore WMI I have used WMI Explorer and WMIMon to monitor calls. Use them at your own judgement, I have not looked through the code. |
|
I would like to have access to that scripts to help debug and add support for my laptop. I'm open to help in anyway you can think of. I'm a developer but never did anything lower level like this, but willing to learn. I've enabled all Logs that you have pointed in earlier message. I've attached my LightingProfile. It would be awesome if the driver could control the outer led logo too. Do you think it is possible? I found some other files that may be of interest in "C:\Windows\System32\DriverStore\FileRepository\predatorservice.inf_amd64_c634eb8e856fb962" I found some strings in the dlls mentioning OpenRGB, searching I found https://openrgb.org/ |
Yes it absolutely is once we figure out the keyboard, it uses the same control mechanism.
Thank you very much, I will compare the this to PHN16S-73 shortly and post the results.
I have already seen this file, it is bundled with Predator Sense, and sadly does not include our models. Gets copied to the location you found it in on installation.
Yep, AcerLightingService ships with OpenRGB client and interfaces with it using Also currently I'm working on enabling logging for all the Acer services, not just the 'agent' one. Can confirm all of them are capable of it, I will post a full list of registry values once done. |
Can confirm it is identical. This is the important part, they are internal device names. Edit: oops, didn't notice they are also the names in OpenRGB. |
|
This whole change seems to be very recent. I have found references to classes named There is also a report that RGB works via WMI on BIOS v1.02 but not v1.05 (on PHN16S-71). @arrayreduction if you see this, I'd like to see the |
Here's one of them, should list all of Acer's WMI classes with methods (relies on the fact they all have Another one brute-forces methods for output values and can be really unsafe. It did not yield useful results on my machine so I don't think publishing it out and about is a good idea. |
Here is my output to the script you sent. |
|
@fcrespo82 However, WMI is somewhat irrelevant now, while RGB methods still exist - they do nothing. Can you please run this script that will list all the devices on your machine? |
|
I also need |
|
Here is the output of the new script second.txt I could not find the logs on My BIOS version is 1.21 After some thinkering I found that the Maybe this one have something interesting too. |
|
@fcrespo82 I have used asl.exe from EWDK (19 GB download) to dump mine but there is probably a better way. Located in Now I need to locate it under Linux and figure out the exact data to send. |
It looks to me there is a space after AcerLightingService which should not be there. If I'm mistaken this is very odd, this registry key should enable logging no matter what. My BIOS version is the same but this also should not matter. |
|
Here's the data structure but it might be wrapped in something, I have not tried sending it yet: It can actually be found in the log discussed above, I'd appreciate any ideas on unknown/skipped values and what the unused mode values do. |
|
Here are all rgb device ids present in code, is useful for other models: If there is no exact match it will use generic device name (lighbar, logo, ...) as a fallback. |
|
Another funny thing - custom boot logo never worked for me from Predator Sense. Not sure thoougt what will happen if you place an incompatible/huge image there... Worst case scenario - disassembling laptop to remove the file from NVMe drive manually. |
|
I have done a little bit of work on this and have created a simple C++ program which can control RGB. It works on my PHN16S-71 with BIOS v1.21. It uses hidraw, so all it really does is write the structure figured by 0x189D7997 to /dev/hidrawX (additonally, I have figured out that 0xFF is the mode for shifting, but I'm unsure of the rest.)
However, you must add 0xA4 at the beginning (PredatorSense also has a function with 0xA2, but I haven't looked into what that does.) This program is just to show how it is done, and isn't good code but it works. By default it uses /dev/hidraw2, but it might be different for you so you can put the correct hidraw file as an argument to the program (./rgb /dev/hidrawX) and the correct file should show the device name when running the program as something like "ENEK5130:00 0CF2:5130" The program is here (compile with "clang++ -std=c++23 ./rgb.cpp -o ./rgb" or "g++ -std=c++23 ./rgb.cpp -o ./rgb") It seems to work fine on my laptop, so it should be fine? Let me know if it works. |
|
Just tested the program and it works... 🎉 Thanks a lot for putting the effort in making this!!!! I know it still has a lot to do before it comes to the linux module, but it is awesome to have it working. I wish I was able to do that... |
|
@ZoeBattleSand Wooow, amazing work!
Oops, missed this one because it is defined in a different place, me dumb.
If you know what
It does! Again, amazing job, I'm very impressed! Now we need to figure out the power profile switching and the button for that. WMI still works for switching but not the button. However Predator Sense no longer uses WMI for switching either. Here are my very old notes on which services are required for what: |
Actually I'd really appreciate help with enabling logging for this one. It is done via registry too but using a different mechanism and my disassembler fd up so I have trouble determining the exact |
I'll try my best, no experience with this but it's never too late. |
|
I wonder if this might need a new project. Since we can use hidraw, we can do everything from userspace, and the kernel module seems to deal with WMI which means the new hid api stuff doesn't make sense here. I think we could make a PredatorSense like application for linux instead? At least that's what I'm gathering from the RGB, but the power profiles might be different. Additionally, have you figured out a way to get events from the turbo/power profile button? I can't see a way to get any from my quick experimenting. I'll keep looking into it and share any findings. Great to see the program working! It wouldn't have been possible without all of your research. |
|
Connecting the DC charger produces following sequence on DC Disconnecting (from laptop): DC Disconnecting (charger from outlet, different behavior likely caused by gradually decreasing voltage): USB-C charger: USB-C charger disconnecting (does not matter how): The remaining bytes are always padded with |
I think support for USB rgb devices would be an important feature too, so we should figure this out too beforehand. Currently waiting on a response from owner of PH18-73 in #81, should resolve a lot of unknowns. |
|
I am still trying to figure out how to set the power profile (since I don't have a windows install, and therefore cannot look at what PredatorSense is sending, it is proving quite the challenge), but in my attempts I did figure out how to enable the keyboard lighting timeout. (not sure if this has already been figured out, but hopefully this info is useful) It uses feature id The sequence is This comes from Here is a testing script (use the same as the other ones) |
|
@ZoeBattleSand amazing work again! Doing this without running PS is a next-level impossible challenge and you're crushing it! I believe I will play around with the timeout, custom values are really interesting, in PS it either |
Look for Also
These services also include a lot of useful debug info like actual method signatures. |
I will look into it as well, though it seems you are making good progress. It would be great if we can get a solution for sleep not working correctly.
Maybe I'm going crazy, but it seems sending the hid features in this does something with the fans. I'll keep looking into it. When setting the power profile in PredatorSense, does the keyboard flash like it does when setting it using WMI in linux?
Yes! You can set a custom upper and lower charging limit. The sequence is: As usual, a script for testing Edit: to clarify, here is the behavior I have seen: (note that this might be different with a USB-C charger) |
Yes, however the signal to flash (effect Nvidia 'Whisper' mode seems to be applied separately with I think we can replicate that on Linux too.
It absolutely does in when doing that with Predator Sense. To my eye
Lower limit?? I've only seen this tech on f-ing solar power stations. This may be the best discovery so far. I'm gonna test it with more values. Amazing progress! AcerQAAgent is a platinum mine, worth looking at every single method there. |
|
Actually your question about keyboard flashing tells me you figured this one out already too :)
Especially |
|
Here are my findings from The sequence is I'm not sure exactly what the actual modes are, as the ones in the JSON you mentioned don't seem to match. From what I can tell based on CPU power draw they are as follows: You are right, the RGB doesn't flash on its own doing it this way, so I guess it has to be manually implemented. Doing it this way does not update Again, I have no idea how correct this information is. I am going to keep seeing what I can find. I'll look into edit: here is a script |
And WMI does? Odd, I will look into this. I assume
|
No, if you load |
|
Give me an hour so I can boot Linux on PHN16S-71, got confused because there is no |
Actually this makes me think |
|
Try invoking I.e. Set the profile with HID, query (get) with WMI. |
|
WMI always reports the profile last set with WMI. Setting it with HID makes no difference. There is definitely something missing here.
It is called everytime I think we should get the output of There is definitely something changing, but I'm not sure if everything is being changed. |
Should be |
|
Here are the HID2025 methods I've looked at: There may be inaccuracies and more methods likely exist, I'll try to fill in the question marks later. Wonder what Sorted by binary to avoid confusion: Edit: I see no more references to HID reports in both AcerQAAgent and AcerCCAgent. Maybe this is all? |
|
Seems like 4th byte is a category: |
|
I still need to figure out logging to see exactly which methods Predator Sense calls on mode change. If you want to help feel free to look at |
|
Figured out logging, I was looking the the wrong place: Located in: |
|
@ZoeBattleSand mode change done by Predator Sense is just
and for all other modes meaning no OC. Mode ids from log, confirms your observation: |
Hmm, if that's it then I wonder why WMI doesn't update.
That's good, although I still wonder about mode 0x05, it might be a hidden eco+? I am working on a new project similar to the one made by fcrespo82, but adding all the newly discovered non-rgb features like battery charge limiting and the keyboard backlight timeout (and some other enhancements.) I'll create a repo in the coming days. I know you want to get USB RGB working as well, so that's something we can work on once this is done. Also, have you gotten any closer to figuring out s2idle? I might try to install windows and do some work myself because it is really starting to annoy me. |
I am looking into that, will share the results if anything comes up. Needs custom kernel level logic so that will take some time.
I was going to look into this too, ideally figure out the color for it.
Yep, and we have some data now, might even be enough for full support.
Yes, this is an Intel issue, observed on Acer, Lenovo and Framework running Arrow Lake-HX and and Meteor Lake-H (very likely many others). Currently I'm understanding kernel code responsible for this (
I don't think there is a need to because we already know the exact driver responsible for proper sleep ( |
|
Also if you need anything specific from Windows - I'm ready to do whatever is needed and provide info/files. Worth avoiding at all costs. If you connect it to the internet, Update will automatically install When done with all the actually useful stuff I will look into what they do. |


Tested functionality of thermal profiles, backlight timeout, battery calibration, battery limiter, boot animation sound, fan speed, usb charging, and four zoned keyboard support.