I have a general question to ask instead of a specific problem. I am looking to write code/create a very basic application to interface with the keyboard lights built into my laptop (an Alienware m18 r2). From my understanding, the keyboard acts as an internal USB/HID device that I can interface with by sending byte patterns to its controller.
My question is where can I go to reliably learn more about how to do this, or is it too hard to even consider? I am skeptical to trust AI to help me create this, but I could be wrong. Does anyone have any opinions on using AI for this purpose?
For background the reason I am looking into this is because the official Alienware software doesn't support linux, and OpenRGB plus all the other lighting control projects I've seen don't appear to support my computer. I am a novice programmer with experience with Python, PHP, and JavaScript. I am not afraid to learn new things, but I have little experience working with hardware. Therefore, I looking for advice on where to get started. I'd appreciate any opinions on the matter.
I agree with this sentiment. The reason why is because this would require reverse building your drivers - probably by running them on Windows while scanning for the values.
A.I. might be able to give pointers about what to try - how to approach - but It cannot supply working code or values you could trust.
@Aravisian 's response made me remember something else, whether relevant is a different matter. I seem to remember that there is a program called .dll walker which shows what .dll's are used when executing a program in Windows.
Found its proper name, Dependency Walker:
" Dependency Walker (also known as depends.exe ) is a free utility for Microsoft Windows that scans any 32-bit or 64-bit module (such as .exe , .dll , .ocx , or .sys files) to build a hierarchical tree diagram of all dependent modules required for execution. It lists all imported and exported functions, detects missing or invalid files, identifies import/export mismatches, and helps troubleshoot issues like circular dependencies, mismatched CPU types, and module initialization failures.
While originally included in Microsoft Visual Studio until version 2005 and Windows XP SP2 support tools, the latest official version (v2.2.10011) is now distributed via the Windows Driver Kit v10 rather than the standalone website. Modern alternatives like Dependencies (a C# rewrite on GitHub) address limitations in newer Windows versions, such as the lack of support for Windows API-sets introduced in Windows 7, which can cause Dependency Walker to display false errors on updated systems.
Key capabilities include:
Static and Dynamic Analysis : It detects implicit, explicit (dynamic), forwarded, delay-loaded, and injected dependencies, and can profile running applications to find dynamically loaded modules.
Security and Debugging : It is used to uncover hidden or suspicious dependencies in malware analysis and to diagnose application crashes by comparing imports against actual loaded DLLs via tools like Process Explorer.
Detailed Reporting : The tool provides detailed file information including full paths, base addresses, version numbers, machine types, and debug information, with export options for text, CSV, and image formats.
Good question—this isn’t “too hard,” but it’s definitely deeper than typical app development. The key point is that you’re not just coding—you’re dealing with hardware protocols and drivers. As discussed in the thread, your keyboard likely exposes a HID interface, so you’ll need to understand how Linux interacts with such devices rather than just sending random byte patterns.
A practical path is: start with existing tools (like OpenRGB or HID libraries), inspect device communication, then gradually build your own logic. AI can help with concepts, but relying on it blindly for low-level hardware work can mislead you.
Thanks for the advice! It appears my gut was right about AI. Do you think it would make more sense to try to contribute and add my device to an open-source project like OpenRGB instead of starting from scratch? Would that be easier?