Feature Request: Num Lock on boot, Schematics for Keyboards (to build vial support)

Hey together,

I recently got my Framework 16 and I love it. However I have found 2 minor grievances with it.

Firstly, why is there no Num-Lock LED on the Numpad? If there is ever a second version of it being made, please add an indicator for the Num-Lock state.

And the second point ties in to that. Please add an option in the firmware to automatically enable Num-Lock on Boot. It’s a small thing and I can understand if the priorities for development lay otherwise. But when working with a TPM it can be annoying to miss this feature, especially as there is no indicator LED.

Also as an additional wish, it would be great if you guys could release the schematics for the keyboards. I’m currently experimenting with building my own qmk firmware for them and trying to build in support for vial. However it would be really helpful if I could understand how the matrix is layed out.

5 Likes

I’d love to see a Vial port! Unfortunately, Framework added some things to their QMK fork, so you’d ideally want to port those over to the Vial QMK fork. I’m not sure how many are really necessary. I have a vial layout .json which I made that I could post. It’s the easy part compared to porting over Framework’s, but it still is something one needs. Which keyboard layout are you looking to do, ansi or iso?

The matrix can be found in the QMK files. Also, Via (keyboard.frame.work) has an option to show a visualization of matrix wiring.

Is the information you need not included in the published schematics at
GitHub - FrameworkComputer/InputModules: Reference designs and documentation for the Input Module system in the Framework Laptop 16 ?

I second a numlock indicator light on the keypad.
I’d also very much like to see a space key on number pads.

The keyboards aren’t there.
But the matrix is laid out in the QMK files. It’s necessary for QMK to work.

I have some experience with microcontroller development, so I’m confident I can manage a full port. However I’m seeing some functions in the code where the schematics would be really helpful to understand what exactly is going on. Your layout file could be helpful with this so I’d be happy if you can provide it as I’m still new to customizable keyboards.

Sure. I was just finding it. Plus taking a screenshot of it loaded into Vial.

vial.json

{
  "name": "Framework Laptop 16 Keyboard - ANSI",
  "vendorId": "0x32AC",
  "productId": "0x0012",
  "customKeycodes": [
	{"name": "FN_LOCK",
	 "title": "Toggles Fn Lock.  FN_LOCK",
	 "shortName": "fn lock"
	},
	{"name": "KC_SCRN",
	 "title": "Simulates WIN+P, which toggles video source.  KC_SCRN",
	 "shortName": "Display"
	},
	{"name": "KC_AIRP",
	 "title": "Toggles Airplane Mode.  KC_AIRP",
	 "shortName": "Airp"
	}
],
    "lighting": "none",
  "matrix": {
    "rows": 8,
    "cols": 16
  },  
  "layouts": {
    "keymap": [
  [
    {
      "w": 1.25,
      "h": 0.5
    },
    "7,5",
    {
      "x": 0.25,
      "h": 0.5
    },
    "3,5",
    {
      "x": 0.25,
      "h": 0.5
    },
    "2,5",
    {
      "x": 0.25,
      "h": 0.5
    },
    "6,4",
    {
      "x": 0.25,
      "h": 0.5
    },
    "3,4",
    {
      "x": 0.25,
      "h": 0.5
    },
    "4,10",
    {
      "x": 0.25,
      "h": 0.5
    },
    "3,10",
    {
      "x": 0.25,
      "h": 0.5
    },
    "2,10",
    {
      "x": 0.25,
      "h": 0.5
    },
    "1,15",
    {
      "x": 0.25,
      "h": 0.5
    },
    "3,11",
    {
      "x": 0.25,
      "h": 0.5
    },
    "4,8",
    {
      "x": 0.25,
      "h": 0.5
    },
    "6,8",
    {
      "x": 0.25,
      "h": 0.5
    },
    "3,15",
    {
      "x": 0.25,
      "w": 1.75,
      "h": 0.5
    },
    "0,1"
  ],
  [
    {
      "y": -0.25
    },
    "4,2",
    {
      "x": 0.25
    },
    "5,2",
    {
      "x": 0.25
    },
    "5,5",
    {
      "x": 0.25
    },
    "5,4",
    {
      "x": 0.25
    },
    "5,6",
    {
      "x": 0.25
    },
    "4,6",
    {
      "x": 0.25
    },
    "4,7",
    {
      "x": 0.25
    },
    "5,7",
    {
      "x": 0.25
    },
    "5,10",
    {
      "x": 0.25
    },
    "5,8",
    {
      "x": 0.25
    },
    "4,13",
    {
      "x": 0.25
    },
    "2,13",
    {
      "x": 0.25
    },
    "4,14",
    {
      "x": 0.25,
      "w": 2
    },
    "5,14"
  ],
  [
    {
      "y": 0.25,
      "w": 1.5
    },
    "3,2",
    {
      "x": 0.25
    },
    "0,2",
    {
      "x": 0.25
    },
    "6,5",
    {
      "x": 0.25
    },
    "2,4",
    {
      "x": 0.25
    },
    "6,6",
    {
      "x": 0.25
    },
    "3,6",
    {
      "x": 0.25
    },
    "3,7",
    {
      "x": 0.25
    },
    "6,7",
    {
      "x": 0.25
    },
    "6,10",
    {
      "x": 0.25
    },
    "3,8",
    {
      "x": 0.25
    },
    "5,13",
    {
      "x": 0.25
    },
    "6,13",
    {
      "x": 0.25
    },
    "6,14",
    {
      "x": 0.25,
      "w": 1.5
    },
    "2,8"
  ],
  [
    {
      "y": 0.25,
      "w": 1.75
    },
    "4,4",
    {
      "x": 0.25
    },
    "7,2",
    {
      "x": 0.25
    },
    "4,5",
    {
      "x": 0.25
    },
    "7,14",
    {
      "x": 0.25
    },
    "7,6",
    {
      "x": 0.25
    },
    "2,6",
    {
      "x": 0.25
    },
    "2,7",
    {
      "x": 0.25
    },
    "7,7",
    {
      "x": 0.25
    },
    "7,10",
    {
      "x": 0.25
    },
    "7,8",
    {
      "x": 0.25
    },
    "7,13",
    {
      "x": 0.25
    },
    "0,14",
    {
      "x": 0.25,
      "w": 2.5
    },
    "1,14"
  ],
  [
    {
      "y": 0.25,
      "w": 2.5
    },
    "1,9",
    {
      "x": 0.25
    },
    "1,5",
    {
      "x": 0.25
    },
    "0,5",
    {
      "x": 0.25
    },
    "0,0",
    {
      "x": 0.25
    },
    "0,6",
    {
      "x": 0.25
    },
    "1,6",
    {
      "x": 0.25
    },
    "1,7",
    {
      "x": 0.25
    },
    "0,7",
    {
      "x": 0.25
    },
    "0,10",
    {
      "x": 0.25
    },
    "0,8",
    {
      "x": 0.25
    },
    "0,13",
    {
      "x": 0.25,
      "w": 3
    },
    "0,9"
  ],
  [
    {
      "y": 0.25,
      "w": 1.25
    },
    "1,12",
    {
      "x": 0.25
    },
    "2,2",
    {
      "x": 0.25
    },
    "3,1",
    {
      "x": 0.25
    },
    "1,3",
    {
      "x": 0.25,
      "w": 6
    },
    "1,4",
    {
      "x": 0.25
    },
    "0,3",
    {
      "x": 0.25
    },
    "0,12",
    {
      "x": 0.25,
      "w": 1.25
    },
    "6,11",
    {
      "x": 0.25,
      "w": 1.25,
      "h": 0.5
    },
    "1,13",
    {
      "x": 0.25,
      "w": 1.25
    },
    "2,15"
  ],
  [
    {
      "y": -0.5,
      "x": 15.5,
      "w": 1.25,
      "h": 0.5
    },
    "1,8"
  ]
]
  }
}

A nice visual bonus with Vial is that it can show actual names (and descriptions) for the 3 custom keys Framework has. Fn lock, Display, and Airplane mode.

Versus Via showing CUSTOM, CUST, 0xe8 which just looks unfinished. And will be downright confusing to many people.

Which keyboard layout are you looking to do? Ansi, iso?

I’ll start with the numpad as I don’t want to kill the main keyboard. Next will be ISO as I have the german keyboard. However once it works and I have figured out how it all functions I plan to port all Framework 16 Keyboards. (Though I’ll need someone to test the other layouts as I don’t plan on buying a bunch of keyboards just to test the port. Also I don’t have any of the RGB parts, so that might have to wait till the end)

Framework’s github has no separate builds for white backlight and RGB. I haven’t looked into how they handle it in the firmware, using the same for both.

Yes, I’m aware of that. However as I have no prior experience with vial or QMK and have no hardware to test it, this will be the last thing I’ll focus on. I fully plan to port it and it might “just work”. I’m just saying that this feature will come last.

Also again: This is something where access to the schematics would be quite helpful to really understand how it is implemented.

Just wanted to mention, the Vial porting guide, for creating the matrix layout for Vial, at get.vial.today/docs/porting-to-via.html#1-prepare-keyboard-layout just says

There are two ways to prepare this data: either from the keyboard PCB and schematic files, or from the QMK layout macro.

It’s fails to mention that you can pull it from Via layout files if you have them. And we do, github.com/FrameworkComputer/qmk_firmware/blob/v0.2.9/keyboards/framework/kle/via_numpad_design.json
So at least for that part of the porting, you can copy that over, the matrix row and columns with key w & h, width & height. This skips most of the skips on that Vial porting page.

Batch 12 here, but on Linux Mint I use the applet “Lock keys indicator with notifications”

works great.

1 Like

Yes, I also have an indicator like this installed. However this does not work on all environments like a raw tty or for pin entry during boot.

2 Likes

Any progress on getting Vial up and running?

Tried tinkering with it myself, but the vial app keeps spitting nonsensical python errors at me.

1 Like

I played with trying to get Vial to work, but I ran into the issue that the current Framework QMK code is based off an older fork of QMK and has some changes that will not merge cleanly with the Vial fork based off a newer QMK version. I’m not a git expert by any stretch, so I gave up. I think I still have the JSON file for the ANSI keyboard if someone wants to work on the merge issues.

+1 for numpad indicator and BIOS toggle

  • another 1 for numpad indicator and BIOS toggle.

In addition, I would like to see a change (in the BIOS, one presumes) such that the numpad in “Numlock OFF” mode has a working enter key!

Maybe make “Keyboard Fn + Numpad Enter” cycle the lighting, and leave the enter key working.

I find this current situation of “No Enter key on the numpad if you’re using the arrow keys” quite annoying.

Additionally, I note that both the keyboard remapper at https://keyboard.frame.work and the one in Windows Powertoys running on Win 11 cannot see the Numpad Enter keypress, if numlock is off.

1 Like

Welcome to the forum

You can change this in Via (keyboard.frame.work).
When NumLock is off, the Enter key is mapped to BLCyc / BL Cycle (aka BL_STEP). BL Cycle is an internal function, so nothing is sent to the OS when the key is pressed.

To change it, go to Layer 1 by clicking “1” from the numbers in the top left, click the enter key (which will say BLCyc in layer 1), then map it by clicking the Enter keycode, which is found in the Basic section of the keycode editor area.

You can remap the BL Cycle key the same way. It’s found in the Lighting section.

5 Likes

Thanks a lot, @MJ1 !

That’s exactly the level of instruction I needed to succeed with Via - an application that is brand new to me!

And now I know I need to read up and experiment and understand it more!

Merci, again!

2 Likes