Have you ever wondered, on a cool summer night, what would happen if you had another human input device (HID) on your desk, in addition to the old keyboard and mouse? Do you feel technologically trapped by the measly aloof functions of a QWERTY keyboard? Are you a tech anarchist?
Well, that is totally what has been happening in the past week over here on the land of the Coast Salish people. This is duckyPad, the “Do-It-All Mechanical Macropad” created with lots of love by @dekuNukem - a Kickstarter-backed project that is now in production sale on Tindie.com
Currently, I am using the duckyPad for:
- Window management (launching applications, moving windows, …)
- Switching monitor inputs, setting display brightness
- Zoom, pan, and rotation in 3D modeling software (Fusion 360)
- Debug tools in VSCode (compiling, launching, and uploading the ducky firmware)
- Editing images in Photoshop and CaptureOne
- Controlling foobar2000 (saving to playlist, browsing the library, …)
- Reading PDFs and browsing the web
What more could you ask for?!
Hacking the firmware to fine-tune my workflow
- 7aa747e3 Hide profile name when display LCD legend
- a8adadf4 Reduce long-press duration (long-press goes home)
- 6ee52f04 Define home menu, apps menu, and profiles menu
- 1c8babfe Re-assign previous button to go to profile 1
- f9b547a4 Create vscode launch.json
- 72145bba Simple changes
- aa9788f8 Clean up and setup working environment for my fork
Compiling the firmware
Dependencies
This was not an easy feat, not having been anywhere near the EE/Embedded world for a number of years since graduation, but with a lot of perseverance, research, and a few pushes by @dekuNukem on the (great) Discord community, I was able to meet all dependencies and compile a new lul.hex
The list of dependencies is as follows:
- ARM Keil uVision - use the free license code provided for Keil MDK for STM32
- Legacy Arm Compiler 5 (ACOMP5) - this link requires a free account
- dFuse Tools - to work with DFU files/protocol of the duckyPad
- (Optional) STM32Cube - only required for advanced changes like pin reassignment
The steps I followed were:
- Open the project file in uVision
- Verify build parameters (see Appendix)
- Compile (ensure you’re using ARM Compiler V5 - you might need to provide a full path)
- Convert HEX to DFU (see this helper script)
- Upload using
DfuSe v3.0.6\Bin\DfuSeCommand.exe
- (Optional) automate the upload process with this Powershell script (bound to a VSCode launch.json is working very well for me)