I’m posting this devlog a little early for the “Lock-in” challenge. I’m still experimenting with the IPC; it’s a bit of a struggle, but I’m getting there!
Log in to leave a comment
I’m posting this devlog a little early for the “Lock-in” challenge. I’m still experimenting with the IPC; it’s a bit of a struggle, but I’m getting there!
Log in to leave a comment
Hi, this devlog will be a short one, as I’m saving the next one for the release of a rather handy but time-consuming feature that requires the implementation of a brand-new Inter-Process Communication system to stream analogue values to the UI at 120Hz. See you in the next devlog to find out why. Otherwise, I’ve also reworked the in-memory persistence of settings on the Rust side of my app for a small addition: an info notification about the app running in the background.
Log in to leave a comment
After all this time talking about it, I’ve finally released the source code for keyboard-sim! I’ll be working on the documentation and the binary soon.
So soon, anyone will be able to test UAI with or without the specialised hardware that analogue keyboards provide. This tool isn’t intended for use in-game; it’s just for testing my application or any applications that use the Wooting Analog SDK in general. I’m publishing it in UAI as a tool for now, but it might become a standalone application in the future.
There are two ways to use it. Either with the keyboard and the scroll wheel: hold down the keyboard keys you want to adjust and, at the same time, adjust their virtual analogue values using the mouse scroll wheel.
Or use it in mouse mode, where it’s actually the movement of the mouse on the desktop that adjusts the configured keys in the up, down, left and right directions.
This time, for the UI (for the sake of simplicity, rather than building a WinUI 3 interface using named pipes, events, mutexes, etc. to communicate with the Rust backend), I used and discovered Iced, which is really powerful for quickly creating a beautiful interface.
That’s all for this devlog – see you soon for the next update!
A little nod to VSCode for the green logo ;)
Commit c1b61f7
https://github.com/Ritonton/UniversalAnalogInput
Log in to leave a comment
I built Universal Analog Input - a system that brings true analog control to standard keyboards.
The goal is simple: break the limitation of binary input and let keyboards behave more like controllers, unlocking smoother movement and more precise control in games.
The hardest part wasn’t just the concept, but making everything work reliably at a low level. Handling input in a consistent way across the stack, dealing with OS constraints, and fixing tricky issues like Windows mutex permissions (“Global\” vs “Local\”) pushed me deeper into system-level behavior than I expected.
Another challenge was credibility. Analog keyboards are still niche, so I needed a way to prove the app actually works. I built a testing mode using the Wooting SDK so anyone can validate the behavior - not for playing, but to make the system tangible and verifiable.
Along the way, I also improved the architecture, added crash reporting, refined the installer, and started building a proper UI with Iced.
What I’m most proud of is that this is no longer just a technical experiment. It’s becoming a real, usable piece of software with a purpose: bringing analog input to everyone, not just people with specialized hardware.
Hi, I’m posting this devlog a bit late, so it covers several recent stages of my project:
Firstly, I’ve created a nice welcome screen for my app.
And next, I’m working on a tool that allows those without access to a physical keyboard to test all the features of my app by using the Wooting Analog SDK in conjunction with the SDK’s test plugin. I’m experimenting with Iced for the UI, and it looks set to be a very good tool.
Right then, see you soon for the next update.
Log in to leave a comment
Hello, everyone!
It’s been a while, but because of my studies, I took a break from this project. However, I am back to add lots of great ideas that I have had.
I’ve been absent from the devlogs and activity on Flavortown, but I’ve still been working on the project here and there, mainly on bug reports and maintenance, and I’ve had my first GitHub issues! I also made a pull request on Analog Sense’s Universal Analog Plugin and tinkered with magnetic keyboards from other brands.
So this devlog ultimately summarises lots of little tasks on the project over almost two months, and it feels strange how quickly time flies.
I’ve attached lots of screenshots of some of the things I’ve been able to do.
I’m back for at least two weeks!
Log in to leave a comment
I went in a completely different direction to avoid reading when the mouse is inactive and improve my reading performance, because previously, with battery readings every 300 seconds, the probability of this reading occurring while the mouse is active (moved less than 15 seconds before) is quite low during office work (mouse often on the side to access the keyboard). Now the app tracks mouse activity in a highly optimised way so that it only reads when there is movement or waits for movement to read.
It took a long time to find the right way to do this, because there are many ways and each has its advantages and disadvantages. In the end, I went with this option: We track activity with the WM_INPUT hook. WM_INPUT cannot read activity if the foreground app is running as an administrator, which is why I also use cursor position variation as a fallback.
In short, it’s coming together nicely in an app that will soon be finished. I’m going to start working on the release repo. I prefer to work with release repos and publish in one big commit because it’s cleaner during POC and testing periods… and I have my personal repo for developing version 1 of the product!
Log in to leave a comment
It now supports when the mouse is sleeping and it is now integrated with the windows notification system to alert the user also when the battery drop below 20% it starts notifying at 10%, 5%, and when near shutdown.
Log in to leave a comment
I finally have a working dynamic icon ! This was so much work just to transform the SVGs from https://github.com/microsoft/fluentui-system-icons to multi-res .ico files. I had to use inkscape CLI to automate everything with a very complicated powershell file (thanks IA :) ) but I am very happy with the result
Log in to leave a comment
The tray app is now operational and displays the battery status in the tooltip. I exported the Fluent icons for the battery indicator from the Microsoft repository, and in the next devlog, I will ensure that the status bar icon changes dynamically based on the battery level and mouse status (normal, inactive, and charging).
WIP
Log in to leave a comment
Experimented with mermaid diagrams in the readme file. The result looks great.
It is located in the Component Overview in the Architecture Details dropdown menu.
Commit 086480b
https://github.com/Ritonton/UniversalAnalogInput
Log in to leave a comment
First devlog!
So far, I’ve finished the part that connects the mouse with hidapi. I reverse-engineered the Scyrox web configurator by unminifying their main js file and transposed the battery percentage calculation logic into Rust using smoothed voltage interpolation. It handles the mouse’s sleep state and issues alerts when it is asleep, charging, or below 20%. What I have left to do now is call the Windows notification system to display them before moving on to integration into the windows’s system tray.
Log in to leave a comment
Merge of UniversalAnalogInput release repo time with universa-analog-input private repo time.
I didn’t know how to do this, so I’m only doing it now, but you can select multiple Wakatime projects in a single Flavortown project. I needed this because I couldn’t record the time I spent on my release repository.
Log in to leave a comment
I am spending some time on the Rust core of my application in order to implement a way for users who do not have an analogue keyboard to test the analogue capabilities of the UAI. All they will need to do is press a key on the keyboard while scrolling with the mouse. The application will need to be launched in a special mode. This will enable shipwrights to easily test my application for future ship.
WIP
mouse icon by flaticon
Log in to leave a comment
I finaly fixed the critical tray instance check failure (0x80070005 - Access Denied) that appeared on my Sentry dashboard in a previous devlog. The issue was caused by using “Global\” namespace for Windows mutexes, which requires admin privileges on Windows 10/11. Fixed by switching to “Local\” namespace in both Rust tray and C# UI and it now works perfectly with normal user permissions.
As always, three simple constants to change for hours of debugging and a significant problem fixed.
I will incorporate this fix into the next version 1.0.2 of my application, along with other bug fixes. For now, it will still be present in release version 1.0.1. You simply will not be able to open the application twice in two different user sessions on Windows for now.
Commit 2b16a61
https://github.com/Ritonton/UniversalAnalogInput
Log in to leave a comment
Here it is!
I’m not a graphic designer, but I did my best. It doesn’t look very good in this post, but take a look at it in the readme file :
https://github.com/Ritonton/UniversalAnalogInput
Log in to leave a comment
Debugging critical tray instance check failure (0x80070005 - Access Denied) that appeared on my sentry dashboard.
Exploring the Global namespace mutex permissions seems to be the culprit since CreateMutexW fails with global scope.
Haven’t found the fix yet, but narrowed it down to Windows API security context !
In the meantime, I am working on a nice animation in Rive with Figma models I made for my readme file to better show the purpose of my application in games.
WIP :)
Log in to leave a comment
I’ve improved the README’s readability by grouping technical details into collapsible sections.
I also added a “Video Demo’ section right after the overview to show the application in action.
Log in to leave a comment
v1.0.1 - Sentry integration
I’ve added Sentry for automatic crash reporting to help catch bugs faster.
Reports are on by default but you can easily disable them in the .env file if you prefer.
I’ve also added proper legal docs: Privacy Policy, Terms of Service, and a Data Processing Agreement.
Everything’s in the installer and on GitHub. GDPR compliant.
Commit 2ab7600
https://github.com/Ritonton/UniversalAnalogInput
Log in to leave a comment
I added my Inno Setup installer build and preparation scripts to release repo.
Commit 5aec508
https://github.com/Ritonton/UniversalAnalogInput
Log in to leave a comment
I finished the v1 of my app
Log in to leave a comment
This project is awesome! I had an idea to bring back the retro feel of consoles like the PS2. We could build an adapter that takes the original data output from the console and converts it to USB for a laptop. Then, we create an app that translates that data so we can play classic games using the actual vintage setup. It’s basically a bridge between old-school hardware and modern screens, so we get that nostalgic ‘retro’ vibe without needing an old TV!
ur idea is very good but unfortunately i cant use ur app coz i don;t have a analog keyboard .
This project is very original and addresses that feeling of playing on a keyboard in a unique way. I’ll try it out in my games :D
Cool project, i think i’ve seen something like this before but gotta say this is a better implementation and overall a better experience, keep it up!
great ui!