Re: the kludgy turn off/turn on thing to change profiles - I fully agree and it will be the first thing I change if I ever find out how. I use a library from another developer to handle reading the HID devices and this is frightfully complicated, runs on separate threads and uses callbacks to get data to the parent process, so it’s incredibly easy to get threading race conditions, lockups etc.
The way I have implemented it is the only safe way of doing it that I could come up with given my limited understanding of how that HID library works.
Edit: re the single event button - I understand what you want and will have a think about how to implement it - more complicated state handling in the event handler I think.