Skip to content

This repo is for keeping track of the changes I make to the firmware running on my Massdrop CTRL keyboard.

License

Notifications You must be signed in to change notification settings

jgmortim/massdrop-ctrl-keymap

Repository files navigation

massdrop-ctrl-keymap

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:

Click to expand image

keyboard render

Hardware

Drop CTRL V1 High-Profile TKL Mechanical Keyboard

OS Modes

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 #11CAC4 if Windows mode is active and purple #C913DD 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).

Layers

L0 \ Base

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.

L1 \ Function

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)

L2 \ Numpad

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:

Click to expand image

numpad layout

While the numpad layer is active, the numpad keys are backlit with copper #DC614D LEDs. All other keys are transparent.

L3 \ Spanish

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 #1194CA 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.

Click to expand image

Spanish layout

Letters with Accents

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.

Inverted Punctuation Marks

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.

Custom Shortcuts

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

Toggle Audio Output Device

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 #DC614D.

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.

Calculator

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.

Snipping Tool

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.

Other Features

LED Timeout

After 5 minutes of inactivity, the LEDs will turn off. Pressing any key will turn them back on.

LED Layer Transparency

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 red on layer[2], then if both layers 2 and 3 are active, LED[6] will be red red.

Lock key Indicator LEDs

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 #DC614D LEDs when Caps Lock and Scroll Lock are on, respectively.

Compiling

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.

Windows

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_firmware instead of git clone https://github.com/qmk/qmk_firmware.
  • I had to run pacman -S $MINGW_PACKAGE_PREFIX-python-pip before I could run make 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.

Linux

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_firmware instead of git 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.

Flashing

Once you have your .bin, you can flash it using mdloader. Use the command mdloader --first --download massdrop_ctrl_jgmortim.bin --restart.

See Also

Troubleshooting

LEDs not turning on

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.

Credits

Code

Resources

  • 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.

About

This repo is for keeping track of the changes I make to the firmware running on my Massdrop CTRL keyboard.

Topics

Resources

License

Stars

Watchers

Forks