3.7 KiB
story
I like to write a short story of a repository's development sometimes.
Sketching and Testing
Right now, I have a rough sketch of what my software is going to need, and what it's going to do.
- I might use this Tokio framework for idling and receiving notices while processing events. It seems like overkill, but if I plan to use an automatic configuration reader, than it'd be useful.
- I am unsure at this time how to process and log events.
- Currently, creating a Windows service might be fast, but it also seems to make development slow.
- Would supporting a separate stage Windows process be difficult? It seems like creating a service is just a bunch of boilerplate for running a process.
- The process shows up in Task Manager like normal anyways.
- I'm unsure right now how to properly abstract the sleep/lock/idle states in both Windows and Linux. This might be really hard and annoying. Uggg.
Resources:
- Minosse - Windows Service in Rust for setting Process Affinities automatically
- windows_service Crates.io Docs
- windows_rs/samples
- Service Control Handler Function
- Event Logging using Rust in Windows
- daemonize Crates.io
- SO - How to Programatically Detect When the OS Windows Is Waking Up or Going to Sleep
- Tauri Discussion - Power Monitor api or plugin like in electron
- Using WinAPI in Rust to Manage Windows Services
Service vs Window
So initial studies were pretty confusing as most of the solutions for detecting changes in lock screen or sleep mode used Wndproc, which is a callback installed when creating a Window; a solution that I really wasn't interested in.
On top of being complex as hell, it required hiding the window manually using special SW_HIDE magic, and it sounded wrong. Also, I don't think services should have windows at all.
Zone Size Testing
Once I looked into the actual openrgb-rs crate, I realized it was kind of old, and wanted to also see if I could fix another issue I'm having: Zone Sizing.
The zone sizes I save are never remembered, and I have no idea if they're the appropriate sizes. I thought it would be cool to create a little utility to try and size them up and down, testing the LEDs one by one until I was certain of the required size.
Unfortunately, zone resizing doesn't work for me at all, so the project idea was a bust.
I tried connecting with the OpenRGB community, but despite activity in the Discord, no one has responded to me as of now. Yikes.
Profile Loading
Luckily though, profile loading works fine and it was easy enough to get the channels setup for loading two different profiles.
When I lock, my service quickly sends a TCP message to the OpenRGB server running, loading the Off profile. Then, once I unlock, it sends the profile load command for the On profile. Yay.