Custom QMK for GMMK 2 96% - by Skitzo2000

As promised, I’ve finished porting my 65% QMK layout into a 96% version!

I’ve also enhanced the template to make it a little easier to work with, I would love your FeedBack!

Here’s my keymap:

I built this to help out the GMMK community get a jump start on their QMK Builds for the GMMK 2 96% ANSI Keyboard

* Most default Glorious shortcuts enabled
* Custom Colors For default Glorious shortcuts
* N-key Rollover (NKRO) enabled 
* Fn-\ or Fn-ESC for Bootloader mode
* Four Layers, 3 To customize and a function layer
* Macro's included via the macro.h
* Custom Glorious Sides Function to set side Colors
* Sample layers to copy and paste, etc

Notes:

You have to use the QMK Tools that glorious has provided as the standard qmk_tools doesn’t have support for the WB32 yet.

If you have QMK_MSYS already installed you will need to delete the existing qmk_firmware directory to make sure you’ve got the right qmk fork and branch with the right glorious firmware. Just follow the guide instructions for QMK_MSYS after you’ve backed up moved/deleted/renamed the existing folder.

If your on Windows 11, libusb doesn’t pickup the board in bootloader mode. You will need to use zadig to install the right driver. I’ve already posted instructions on the original QMK announcement thread over here.

I’ve tried to improve the documentation a little, and I’m working on some custom side animations for both keyboards! Again feedback is helpful!

4 Likes

This is great! Thank you very much for setting this up! Makes my life a bit easier that’s for sure.
I’ve built a keyboard layout to attempt to get this to work with VIA but when I build your keymap, I’m met with an error about not enough endpoints:

" error: #error There are not enough available endpoints to support all functions. Please disable one or more of the following: Mouse Keys, Extra Keys, Console, NKRO, MIDI, Serial, Steno"

Any suggestions on how I can go about that? I’ll never use MIDI, Mouse Keys, Serial, or Steno.

1 Like

Thanks, I built it to help the community, glad it’s doing its job, well sort of…

On your rules.mk just disable those modules. Check the qmk documentation for the specifics on how. Did you post an issue on GitHub? If you thinks it’s my code we should continue discussion over there so the convo is more visible to others who may have grabbed it.

1 Like

Not sure what I am doing wrong, hoping someone could shed some light.

First, I am having trouble compiling and keep getting this error:

Compiling: quantum/keymap_introspection.c In file included from ./keyboards/gmmk/gmmk2/p96/ansi/keymaps/Dig-pestroyer/keymap.c:17,
from quantum/keymap_introspection.c:5:
./keyboards/gmmk/gmmk2/p96/ansi/keymaps/Dig-pestroyer/keymap.c:105:12: error: ‘UC_M_WI’ undeclared here (not in a function)
105 | _______, UC_M_WI, _______, _______, _______, _______, _______, RGB_RMOD, RGB_VAD, RGB_MOD, TO(_BL), _______)
| ^~~~~~~
./.build/obj_gmmk_gmmk2_p96_ansi/src/default_keyboard.h:33:31: note: in definition of macro ‘LAYOUT’
33 | {k1A, k1B, k1C, k1D, KC_NO, k1F, k1G, k1H},
| ^~~
In file included from quantum/keymap_introspection.c:5:
./keyboards/gmmk/gmmk2/p96/ansi/keymaps/Dig-pestroyer/keymap.c: In function ‘rgb_matrix_indicators_advanced_user’:
./keyboards/gmmk/gmmk2/p96/ansi/keymaps/Dig-pestroyer/keymap.c:175:9: error: implicit declaration of function ‘IS_HOST_LED_ON’; did you mean ‘IS_LED_ON’? [-Werror=implicit-function-declaration]
175 | if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK)) {
| ^~~~~~~~~~~~~~
| IS_LED_ON
cc1.exe: all warnings being treated as errors
[ERRORS]
|
|
|
make[1]: *** [builddefs/common_rules.mk:361: .build/obj_gmmk_gmmk2_p96_ansi_Dig-pestroyer/quantum/keymap_introspection.o] Error 1
Make finished with errors
make: *** [Makefile:392: gmmk/gmmk2/p96/ansi:Dig-pestroyer] Error 1

Second, I am not sure I am placing the files you provided in the correct places either.

Fantastic work here and thanks in advance.

It looks like you probably have done some customization to the files. Do you have a github account? I would recommend posting your issue on the github page, it will get more visibility over there, and will force me to fix my code if there’s something wrong with it!

Feel free to fork to your own account to share the code with me if you would like additional help!

1 Like

Thanks for the reply

I managed to get the first error cleared up, I was trying to compile using the latest qmk firmware and not the one provided by Glorious.

However, I’m still getting the error regarding the rgb matrix. I noticed someone had the same issue for your 65% keymap and that a solution had been found and pushed but I did not find anything documenting what the fix was or that if that it had only been fixed for the 65% or for both.

Per your suggestion I will submit an issue on your git.

Thanks again!

Thanks again for helping get that fixed.

I absolutely will and will be looking to expand upon the great foundation you have set here. While doing research I put off for almost a year :sweat_smile: I found a pretty extensive build for the gmmk pro that I would hope I might be able to use to import some features over to this board.

I’ve merged the branch into main as it was a bug, so no need to pull a special branch now. Its merged to main now, so no one else has a problem! Thanks for the bug report!

Thank you for doing this. How do I disable NKRO? I need to disable it fora KVM and cannot find how you are controlling it in your scripts. FORCE_NKRO isn’t in the config.h file and there ins’t a rules.mk. I’m a QMK noob, so maybe I’m missing something?

Qmk documentation says this function would be enabled by a rules.mk file. By default it is off. Since I don’t even define a rules.mk, this layout should use default NKRO_ENABLE = false.

NKRO_ENABLE

This allows the keyboard to tell the host OS that up to 248 keys are held down at once (default without NKRO is 6). NKRO is off by default, even if NKRO_ENABLE is set. NKRO can be forced by adding #define FORCE_NKRO to your config.h or by binding MAGIC_TOGGLE_NKRO to a key and then hitting the key.

1 Like

Thank you for the confirmation. I thought I was missing something. Apparently, you can also use LeftShift+RightShift+N to toggle it on/off.

is it possible to use the Caps lock LED code from your 65% on the 96%? That has got to be my biggest gripe about this board.

@MetalGeek I just double checked and it seems that the 96% code includes a capslock option:

      if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK)) {
        RGB_MATRIX_INDICATOR_SET_COLOR(54, 255, 255, 255); //capslock key
    }

However I believe that code isn’t working at the moment. But, another github user very recently submitted an issue and a fix, but didn’t make a pull request. I just integrated that code into a new branch → DreamingLambsUpdate on github.

Can you pull the new branch and give it a test? Currently the code is statically setting the color to red I believe. I would like to clean that up to just be variables at the top before merging to main. I can compile the code, but I don’t have the board at hand to test with, so I could use an assist there.

Awesome. I haven’t flash QMK yet, I’ll do that tonight. I’ll check out that code and give you feedback. In the next day or three.

1 Like

After a crash course in github and all the tools, I have a working Firmware loaded. Took a bit and I found out that the GloriousThrall code base has a bug as it’s using the Product_ID of the GMMK Pro. It also has two layout issues. I also didn’t need to change my USB driver. During so didn’t remove the unknown device message in QMK Toolbox and flashing works as expected using the device WinUSB

This Reddit thread discuss the issue in the GloriousThrall codebase and has the correct steps to get a working Firmware with VIA support as well as SignalRGB. I tested both and they work as expected. Here are the steps that worked for me for QMK with and without VIA.

  1. Download the QMK Toolbox from the Glorious page.
  2. Open QMK MSYS
  3. Run mkdir /c/qmk_firmware
  4. Change directory to C:\qmk_firmware (or whatever other path you cloned to)
    cd /c/qmk_firmware
  5. Run git clone https://github.com/qmk/qmk_firmware.git /c/qmk_firmware/
    wait until completed
  6. Run make git-submodule
    wait until completed
  7. Run qmk compile -kb gmmk/gmmk2/p96/ansi -km via for Via support or qmk compile -kb gmmk/gmmk2/p96/ansi -km default for default layout.
    wait until completed
  8. Open QMK Toolbox from Glorious (link from above)
  • Navigate to C:\qmk_firmware.build<buildname>.bin

  • Put keyboard in DFU Mode (unplug keyboard and hold key combination while plugging in)

    If you have a VIA firmware, use Escape [ESC].
    Could be Space + B - default for stock Glorious firmware for me
    Could be Fn + /

  1. With QMK Toolbox, flash firmware

I then used VIA to fix two layout issues common to all QMK firmware I tested.

  1. The Escape key is bound to ` and Escape. This breaks Ctrl+Shift+Escape to open task manager, which I use all the time. I rebound Escape to just Escape to correct.
  2. Fn+F6 was not bound to Next for media control. I corrected this by changing F6 to Next on Layer1.

SO I will need help trying out your code. Not sure how to get out of GitHub and into a working codebase

Log into github and navigate to my keyboard page. In the right corner is a button to create your own fork! That will make a duplicate of my repo under your user. But it’s still tied to my repo so if you make changes or improvements you can make a pull request, and I can pull it into my repo( and give you credit on the work!)

Once forked you clone the repo to your machine make changes and push the Code back into your fork.

My repo is just a keymap that you bury inside qmk/keyboards/glorious…

Also since I wrote the og guide, you should be able to use standard qmk_tools. When it first came out, the chip in the keyboard hadn’t been merged into qmk_tools Main branch. It’s def been merged since then and may solve some issues automatically

1 Like

Thank you, I created the fork. Does this include DreamingLambsUpdate? If not, how do I get a hold of that? Good to know regarding the qmk_tools, I’ll give them a try. I had to flash back to the default firmware, so it will be a bit before I start fiddling again. The SignalRGB version (or the standard qmk) doesn’t play nice with my current KVM. Ctrl+V and Ctrl+C will cause the keyboard to keep typing c or v endlessly until I hit another key. Not every time but I use those shortcuts all day long so it’s really annoying while I’m working. I’ll test again with your fork + stock qmk to rule out some oddities in the SignalRGB code. I’m really interested in seeing that caplock work. even if I cannot keep it running, I’ll test the code and makea pull request so you can merge it into your base. Least I can do for the help. :handshake:

I applied dreaming lambs code on the DreamingLambs_update branch. On cli in the directory where you did your initial pull:

git switch DreamingLambs_update

1 Like

Deleted my last reply. Turns out in order to use GloriousPanda’s repository which looks like your code is based on, I had to revert to an older version of QMK, specifically I went back to 1.7.0, release mid 2022. That cleared up lots of odd errors I was getting with GloriousPanda’s code and your keypa.c compiled. I also manually updated the keymap.c to include the CAPslock and Numlock code. They are two new if/else statements and your single if statement I commented out. Here is what that section looks like. I’ll give this a try later on tonight to see if it works.

void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
//   if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK)) 
//       RGB_MATRIX_INDICATOR_SET_COLOR(54, 255, 255, 255); //capslock key
//Thanks Sheep!!!!!
//Caps Lock Indicator
    if (host_keyboard_led_state().caps_lock) {
        RGB_MATRIX_INDICATOR_SET_COLOR(54, 255, 0, 0); // Assuming Caps Lock is at LED #54
    } else {
        RGB_MATRIX_INDICATOR_SET_COLOR(54, 0, 0, 0);
    }
//Num Key Inidicator
    if (host_keyboard_led_state().num_lock) {
        RGB_MATRIX_INDICATOR_SET_COLOR(32, 255, 0, 0); // Assuming Num Lock is at LED #32
    } else {
        RGB_MATRIX_INDICATOR_SET_COLOR(32, 0, 0, 0);
    }
	
//	}