This repo is for keeping track of the changes I make to the firmware running on my Massdrop CTRL keyboard as well as all other aspects of the keyboard.
An approximate rendering of my keyboard is below:
Drop CTRL V1 High-Profile TKL Mechanical Keyboard
- Case: Bronze Replacement Case
- PCB: Stock CTRL V1
- LED Diffuser: Stock CTRL LED Diffuser
- Switches: Halo Clear
- Stabilizers: Stock Plate-mounted Cherry-style
- Keycaps: KeyGeak Rome PBT - SA profile
- Foam: StupidFish Designs
The keyboard contains both a Windows mode and a Linux mode. The default mode is Windows. To ensure that all keyboard functions work property, make sure the keyboard is in the correct mode for the current OS.
To toggle modes, press fn+Win. While holding down the fn key (i.e., the Function
layer is active), the Win key will be backlit turquoise
if Windows mode is active and purple
if Linux mode is active.
After switching modes, the Win key will remain backlight for 3 seconds on all layers (in addition to always
being backlit on the Function layer).
The base, or default, layer is a pretty standard QWERTY layout. A few of the key caps are different, as shown in the render above, but the layout works as one would expect.
Holding down the fn key activates the function layer, which features hardware functions brought in from the default keymap as well as an additional OS toggle function:
| Key | Function |
|---|---|
| B | Put the keyboard into DFU (Device Firmware Update) mode after hold timeout (500ms) |
| I | USB Toggle Automatic GCR control |
| N | Toggle keyboard 6KRO/NKRO (Default state 6KRO) |
| U | USB Extra Port Toggle Auto Detect |
| Win | Toggle OS mode between Windows and Linus (Default state Windows) |
A numpad layer can be turned on and off by double tapping the grave mark (tilde) key (which is using the Num Lock key cap on my keyboard) while on any other layer. The numpad is located on the upper right of the keyboard like so:
While the numpad layer is active, the numpad keys are backlit with copper
LEDs. All other keys are transparent.
The Spanish layer can be turned on and off by double tapping Left Alt while on any other layer. While the
Spanish layer is active, the Left Alt key will be backlit with a cyan
LED. The Spanish layer is automatically turned off after typing a
Spanish letter or punctuation mark. All keys other than A, E, I, O,
U, N, ?, and ! are transparent.
While the Spanish layer is active, type the corresponding letter to get an accented letter. For example, pressing a will produce á, e will produce é, n will produce ñ and so on. To get capital letters, either use Caps Lock or hold Shift at the same time as pressing the corresponding letter.
For ¡ and ¿, use Shift+1 and Shift+/, respectively.
Note that Shift+1 is normally ! and Shift+/ is normally ?. So effectively, you could also think of these as just pressing ! and ?, while the Spanish layer is active.
| OS | Shortcut | Function | Macro |
|---|---|---|---|
| Windows | Win+a | Toggle audio output device | Win+Ctrl+v, Down×n, Enter, Esc |
| Windows | Win+c | Calculator | Win+r, "CALC", Enter |
| Linux | Win+c | Calculator | Alt+F4, "gnome-calculator", Enter |
| Windows | Win+s | Snipping Tool | Win+r, "SnippingTool", Enter |
Win+a
This shortcut is available in Windows mode, and it causes the system to switch to the next audio output device in the list. In particular, it works by opening the sound output page of quick settings (Win+Ctrl+v). Pressing the Down key until the next device is highlighted, pressing Enter to select the device, and finally pressing Esc to close the menu. This behavior overrides the default Win+a shortcut which opens Action Center.
The selected device is indicated for one second after switching devices. If the first device is selected,
the 1 key will be backlit. If the second device is selected, the 2 key will be backlit. And so
on. The keys are backlit in copper .
This feature is limited in that the keyboard has no way of knowing which audio device is selected at boot, but it assumes the first device is selected. The first time this shortcut is used, it will toggle to the second device. At which point, Windows and the keyboard will be in sync. If you manually change the output device, they will become out of sync again.
To function correctly, the NUMBER_OF_AUDIO_OUTPUT_DEVICES needs to be set appropriately in config.h. This field is
not dynamic. If you add or remove an audio output device, you'll need to update config.h and reflash the keyboard.
Win+c
This shortcut is available in both Linux and Windows modes.
In Windows mode, this shortcut opens the run dialog (Win+r), types CALC, and presses
Enter. This opens the Windows calculator app. This behavior overrides the default
Win+c shortcut which launches Cortana (Windows 10) or Copilot (Windows 11). I have these AI
assistants disabled, so a calculator shortcut is much more useful.
In Linux mode, this shortcut opens the run dialog (Alt+F4), types gnome-calculator, and presses
Enter. This opens the Gnome calculator app.
Win+s
This shortcut is available in Windows mode, and it opens the Snipping Tool. In particular, it works by opening the run
dialog (Win+r), typing SnippingTool, and pressing Enter. This behavior overrides the
default Win+s shortcut which opens search. Pressing the Win key followed by typing
anything will open search already, so using Win+s to open search has always seemed like a waste
of a shortcut. And on top of that, it's redundant with Win+q which is also search.
This shortcut is not available in Linux mode because the Print Scrn key is already sufficient.
After 5 minutes of inactivity, the LEDs will turn off. Pressing any key will turn them back on.
The LED configuration on each layer features transparency. That is to say, if an LED is off/transparent at a given
layer n, it will be set to the value of the first active layer checking from n-1 to 0. For example, if LED[6]
is off on layer[3], but it's red on
layer[2], then if both layers 2
and 3 are active, LED[6] will be red .
Since the Massdrop CTRL doesn't have dedicated indicator LEDs for the lock keys, the LEDs in the lock keys themselves
serve as indicator LEDs. Specifically, the Caps Lock and the Scrl Lock keys are backlit with
copper LEDs when Caps Lock and Scroll Lock are on, respectively.
This firmware cannot be compiled with the official qmk_firmware, but instead needs to be compiled using Massdrop's fork of the QMK repo. Specifically, using the feature/riot_xap branch.
Tested using Windows 10 through version 4.1.0, and with Windows 11 for all later versions.
I wasn't able to compile this using QMK MSYS. When I tried, I got an error stating that Massdrop's fork of qmk_firmware "exists but is not a qmk_firmware clone!"
So instead, I used MSYS2 and followed the instructions for "Building a keyboard firmware" on Matt3o.com. Specifically, the instructions for setting up MSYS2 and downloading QMK.
Notes:
- The git clone will be
git clone -b feature/riot_xap https://github.com/Massdrop/qmk_firmwareinstead ofgit clone https://github.com/qmk/qmk_firmware. - I had to run
pacman -S $MINGW_PACKAGE_PREFIX-python-pipbefore I could runmake git-submodule.
Next copy all the files from the qmk_firmware/keyboards/massdrop/ctrl/jgmortim directory in this repo and place
them into the qmk_firmware/keyboards/massdrop/ctrl/jgmortim directory of the repo you cloned.
You can then use MSYS2 MINGW64 to compile this keymap using qmk compile -kb massdrop/ctrl -km jgmortim.
Tested using Ubuntu.
As with Windows, I relied on the instructions for "Building a keyboard firmware" on Matt3o.com.
Notes:
- The git clone will be
git clone -b feature/riot_xap https://github.com/Massdrop/qmk_firmwareinstead ofgit clone https://github.com/qmk/qmk_firmware.
Next copy all the files from the qmk_firmware/keyboards/massdrop/ctrl/jgmortim directory in this repo and place
them into the qmk_firmware/keyboards/massdrop/ctrl/jgmortim directory of the repo you cloned.
You can then compile this keymap using make massdrop/ctrl:jgmortim.
Once you have your .bin, you can flash it using mdloader.
Use the command mdloader --first --download massdrop_ctrl_jgmortim.bin --restart.
If the LEDs are not turning on or if they turn off after being on for a second, it most likely means your keyboard is not getting enough power. This is especially common if you're using a USB hub as they can struggle to deliver enough power to all connected devices.
- LED config code was mostly transferred from matthewrobo keymap.
- RGB timeout code is based on the implementation in endgame keymap.
- The images in this README were created using Keyboard Layout Editor v0.15.
The specific JSON needed to recreate these images can be found under
/resources/json/. - Each time this README mentions the color of an LED, a colored square is displayed. These image ares sourced from
Placehold.
- Note: The color codes used in this README are different from the codes actually driving the LEDs. This is because the LEDs on the keyboard are not very color accurate. The color codes in this README are approximations of the actual output on the keyboard.


