firmware

Agent 4: Module configuration and advanced typing settings

Hi there, and welcome to this UHK update!

We've released Agent 4, which features dedicated module configuration pages, a new "typing behavior" page, and additional settings on the "mouse key speed" page.

I think it’s a huge release because even though the newly exposed settings were available via smart macros, I’m sure many of you didn’t use them due to their complexity. Now, they’re super easy to use.

If you use smart macros that already set the newly exposed settings, they’ll overwrite these settings, so make sure to delete the related smart macro commands.

Now, let me show you the settings pages.

Module configuration

Notice the puzzle icons just above the modules. You'll be taken to the relevant module configuration page if you click on one of them. Alternatively, you can click on the desired module under the Modules menu in the side menu.

A lot is going on, but fear not; hovering over the little question mark icons reveals tooltips that explain the settings.

You can adjust the speed and acceleration of modules and fine-tune axis locking settings to prevent unintended movements on the non-dominant axis while scrolling or using the caret mode. There are also some module-specific settings. Most notably, you can tweak the touchpad's pinch-to-zoom and drag-and-drop behavior.

On the right side of the screen, you can assign per-layer navigation modes. The navigation mode describes what the module does when moving its pointer device. For example, the cursor mode moves the mouse cursor. The scroll mode scrolls, just like the scroll wheel of a mouse. The caret mode moves the text cursor, which is useful in editors.

Typing behavior

The advanced secondary role resolution strategy is useful if you want to use secondary roles on alphanumeric keys, in which case the simple resolution strategy tends to interfere with writing.

With the keystroke delay setting, you can add artificial delay to keystrokes, which can be useful for some applications, especially for RDP clients that have problems accepting fast input.

Mouse key speed settings

The newly added axis skew settings allow you to move/scroll faster horizontally than vertically or vice versa, which can be useful for ultrawide monitors or moving through multiple workspaces.

When moving diagonally with mouse keys, vertical and horizontal speeds add up. However, when checking the "compensate diagonal speed" option, the diagonal speed will match the horizontal/vertical speed.

Further improvements

In addition to the above, the firmware keeps evolving. It now automatically recovers from occasional trackpoint drifts after a few seconds, and we've improved compatibility with some KVM switches.

I hope you're as excited about these developments as we are and that they'll make your UHK even more useful. Speaking of the UHK, we have stock of every product and ship in a week, so don't delay; buy today.

Talk to you later!

Setting LED fade timeout

Update 2023-08-19: Now the "LED settings" page contains the "LED fade timeout" setting, so you don't have to use smart macros to use it.

Some of you want your UHK to automatically turn off its LEDs after some idle time, which can be configured by setting the leds.fadeTimeout smart macro variable in the $onInit macro as follows.

You can learn more about smart macros.

We realize that this setting is not as accessible as it should be, and we'll make it easier to adjust it in later Agent versions.

Agent 2: Next-level UHK and module configuration

TL;DR: Say hi to 12 layers per keymap, module speed and acceleration settings, and loads of advanced features, mostly enabled by the new smart macros functionality of the latest UHK Agent and firmware releases.

I don’t usually write dedicated posts about new releases, but this is a major one, we’ve been working on it for a year, and it delivers a huge punch that can elevate your UHK experience to the next level, so it mustn’t go unnoticed.

A summary of new features to whet your appetite:

  • Extended the original four layers per keymap with four regular layers (Fn2, Fn3, Fn4, Fn5) and four modifier layers (Shift, Ctrl, Alt, Super).
  • All modules: speed and acceleration settings, axis locking settings, per-layer navigation modes
  • Key cluster module: Added the ability to fine-tune or disable the behavior of the mini trackball.
  • Trackpoint module: Fixed occasional trackpoint pointer jumps and made it easy to stop drifting if it occurred.
  • Touchpad module: Implemented pinch-to-zoom, two-finger scrolling, doubletap-to-drag, and made the tap action configurable.
  • Advanced configuration scenarios via smart macros, such as configurable modifier layer triggers, mouse key axis skew, and LED fade timeout
  • Super-advanced configuration scenarios via extended macro commands, such as variables, loops, double tap actions, and runtime macro recording.
  • Implemented N-key rollover.
  • Made accelerate and decelerate actions work with modules.
  • Fixed USB descriptors which caused high CPU load on Macintosh computers.

Let’s go over the main features, but first, install the new Agent. Then it’ll upgrade your UHK to the new firmware.

12 layers per keymap

Instead of 4 layers, you can now have 12 layers per keymap.

You can enable/disable any of the above layers per keymap except for the base layer, which is mandatory.

The Fn2, Fn3, Fn4, and Fn5 layers work just like the existing layers, but Shift, Ctrl, Alt, and Super are modifier layers.

On modifier layers, you can map alternative actions per key, which trigger when the key is pressed with the relevant modifier. For example, now you can implement the Programmer Dvorak layout solely on the UHK.

Credit: “The Case for the Programmers’ Keyboard Layout” by Zachary Johnson

Smart macros introduction

You’re probably already familiar with regular macros, which are a sequence of macro actions, such as keypresses and mouse movements.

Smart macros, however, enable the advanced customization of your UHK and its modules. See the following screenshot, which shows a macro named $onInit containing a command macro action that contains multiple macro commands:

$onInit is a special macro name. It's a macro event that executes each time your UHK gets powered and when you save its configuration.

"set module.trackball.baseSpeed 1" is a macro command that sets the base speed of the trackball module to 1.

Macro commands work in any macros, not only in macro events, and you can bind them to any key. This way, you can make Fn+1 set your trackball base speed to 1, and make Fn+2 set it to 2, for example.

Interactive smart macro editing

Adjusting values by editing text is tedious. This is why we created a smart macro sidebar that can be opened on macro pages. This sidebar contains easy-to-read documentation and provides interactive widgets that make configuration a breeze.

When clicking on a macro command action, the widgets of the smart macro sidebar display the actual values of the commands, and module-specific widgets appear. You just have to interact with these widgets, hit the usual “Save to keyboard” button, and your settings will be applied immediately.

I strongly recommend you delve into these settings, as they can make a huge difference. The default sensitivity settings of the modules are reasonable, but by tweaking them to your needs, you can make them so much more usable. Maybe, just maybe, you can finally get rid of your mouse.

Advanced configuration scenarios

Besides $onInit, there’s also the “$onKeymapChange {keymapId}” macro event, such as $onKeymapChange QWR, which is executed when the QWR keymap is activated.

This event enables you to have keymap-specific settings, which allows for many advanced use cases. For example, different operating systems have different mouse sensitivity. This feature allows you to have different speed and acceleration settings for your mouse keys and modules via different operating system-specific keymaps.

Believe it or not, I’m still scratching the surface. If you really want to go crazy, you can use the set "macroEngine.extendedCommands 1" command to enable the extended macro engine, allowing for variables, loops, and countless advanced commands. If you’re comfortable with delving into manual pages, check out the extended macro engine user guide and reference manual.

Smart macros history and credit

Smart macros have an interesting history, starting out as Karel Tuček’s UHK firmware fork on GitHub.

Karel wanted special firmware features, and he originally (ab)used the text macro actions of Agent by making the firmware interpret the lines starting with the $ character as special commands. He’s essentially implemented a command interpreter in the UHK firmware that allowed for his advanced use cases.

I saw his efforts early on, and I was impressed, but I considered his work quite niche and wasn’t too interested. (In retrospect, I can see that his advanced commands are used and loved by many.)

Then it struck me that smart macros could enable the configuration of many UHK and module features without developing Agent, which is a huge win, as adding new features both to Agent and the firmware takes a ton of work. Exposing new features only via the macro engine of the firmware is so much easier. 

I came up with the idea of macro events and making smart macros a first-class citizen in Agent, then implemented the smart macro sidebar. Karel has implemented the acceleration driver of the modules, macro events, and, nowadays, pretty much everything that has to be done with firmware logic. His work is hard to overstate.

As an interesting trivia, the macro command editor of Agent might feel familiar. This is because we use Monaco editor, which also powers Visual Studio Code. In a way, Agent became an integrated development environment, supporting a special keyboard language whose interpreter runs in the UHK firmware.

The future of smart macros

I eventually want to expose basic smart macro settings, such as module settings or the LED fade timeout, not only via the smart macro sidebar but dedicated Agent widgets for better usability.

Nonetheless, we’ll keep and extend the currently available smart macro commands and settings because they allow for advanced configuration scenarios.

I plan to gradually move the extended macro commands from the current markdown macro documentation into the smart macro sidebar of Agent to make them easier to digest and not hide them behind the set "macroEngine.extendedCommands 1" command.

Closing words

To this day, we’ve released 60 Agent versions and 66 firmware versions, and we’re still going strong. I’m excited about our progress and grateful to our wonderful customers for their support. We keep moving forward because of you.

Thank you for reading this update! As usual, we plan to publish a manufacturing update around the end of the month. Stay safe!

Right-side module mold progress, part two

Hi there, and welcome to the monthly status update of the UHK!

TL; DR: Machining of the right-side module molds is still underway, and it's taking longer than expected; hence, we’re now estimating that modules will begin shipping closer to the end of November In the meantime, we keep testing the modules, making small refinements, and improving their firmware.

Our contractor has been making further progress with the right-side module molds.

I spoke to our contractor yesterday. Unfortunately, the production of the molds is taking more time than originally anticipated, so we now expect to begin shipping the modules towards the end of November.

Understandably, production delays are always unwelcome. However, I know that the molds take so long because our contractor is doing his best in terms of quality. If you have been following us for a while, you know that the UHK was also delayed, and the reception was overwhelmingly positive. I’m firmly convinced that the modules will receive the same reception as the UHK with the care we give them.

We use the extra time available to us wisely and spend these days obsessing over the details of the modules. For example, we noticed that the mini trackball PCB of the key cluster module interfered a bit with the lower right keycap when pressed at certain angles, so we slightly modified the PCB. We also saw that the FPCs are very sensitive to sharp bends, so we redesigned the affected parts mechanically to minimize the bending.

The extra time allows me to polish the firmware and add more features. Recently, I implemented two-finger tapping and scrolling for the touchpad, and zooming is now also recognized. As for the trackball, I've just noticed that it's possible to double the resolution of the trackball sensor IC, which allows a higher sensitivity. These developments will improve the overall experience of the modules.

Speaking of the trackball, some of you have asked whether it's possible to clean the ball quickly. I'm happy to say that it only takes seconds to rotate the outer ring around the ball, which releases the ball.

As for the modules, some of you asked if the modules will remain firmly attached to the keyboard when it’s tented. The answer is a resounding “yes” because the precision-milled steel guides of the UHK keep very stable under all circumstances.

We’ll keep you informed about the development of the modules every month. They may take a while, but we work very hard to make them worth the wait.

Your tweets

You guys keep sending your awesome tweets, and we're always eager to read and feature them! If you got your UHK, please share your love!

We’ll be keeping you updated on all things UHK, and are looking forward to talking to you around the end of October.

Right-side module mold progress

Hi there, and welcome to the monthly UHK status update!

TL;DR: Machining of the right-side module molds is well underway, and we should have plastic parts by the end of August. We keep developing the UHK firmware and Agent, and it’s worth updating - not just because of module support.

Our contractor has been making solid progress with the right-side module molds.

If everything goes as planned, we’ll have injection-molded right-side module plastic pieces by the end of August, and we’ll start shipping the modules in September.

We’ll be keeping you updated on a monthly basis, and feel free to change your shipping address any time.

Agent and firmware progress

We’ve been publishing about one Agent and one firmware release per month over the past couple years. These releases contain numerous improvements, so feel free to check out recent Agent releases and recent firmware releases to see them along with their changelog. Also make sure to star these projects to get notifications about their activity on GitHub.

Regarding the firmware, it’s worth mentioning a recent fix which made the UHK play nicely with Ryzen PCs. Previously, in some cases, the UHK only worked via USB hubs when connected to Ryzen PCs. Strictly speaking, the UHK firmware was actually bug-free in this respect. The Ryzen platform just happens to be unreasonably picky regarding USB descriptors.

Speaking of Agent, a new feature makes key swapping extremely easy. You just have to drag a key to another key to swap them.

Now we’re working on making Agent handle the modules. Agent will display the actual state of the UHK just as previously demonstrated, but with the modules included. This will result in a very seamless and intuitive experience.

Your tweets

You guys keep sending your awesome tweets, and we're always eager to read and feature them! If you got your UHK, please share your love!

We’ll be keeping you updated on all things UHK, and are looking forward to talking to you on 2020-09-15.

Every module prototype is functional

Hi there, and welcome to the monthly UHK status update!

TL;DR: The trackpoint and touchpad modules are functional, and we’ve got demo videos. The mouse mode of the UHK is usable to create digital art. Agent had a Linux security bug, so it’s worth upgrading.

Module demos

This update is quite late, but I think it’s the coolest one so far. I’ve been knee-deep in the firmware of the modules recently which bore some delicious fruits… I mean functional modules.

The trackpoint turned out great, and it’s very precise. Thanks to the dexterity of the thumb, I find the usability of the trackpoint module to be excellent despite the unusual trackpoint nib position compared to other trackpoint implementations.

The touchpad is also finally usable now. It’s excellent for swift, long distance movements, but it has to be optimized a bit more for precision movements. The touchpad IC has numerous parameters, so my hopes are high that precision control can be sufficiently improved purely on the firmware side.

For the sake of completeness and comparison, see the trackball module demo, too. This demo was featured in our previous update.

As you can see, all of the four module prototypes are functional. This is a huge milestone as far as the modules are concerned. Now that we have functional prototypes, it’s time to mass produce them.

Mass production will take a number of steps such as creating tooling, procuring parts, doing EMC tests, and minor manufacturing optimizations - just to name a few. Luckily, many of these steps can be done in parallel, but they’ll still take months. We’ll announce an ETA in our next monthly update.

Creating digital art with the UHK

Speaking of mouse control, although not as capable as the modules, let’s not forget about the venerable mouse layer of the UHK, as it’s very powerful for what it is. So much so that apparently it’s possible to create digital art with it. Give it up for Brandon Yu, who’s about to demonstrate the seemingly impossible.

I don’t know about you, but I’m officially blown away by Brandon’s skills and talent. Brandon also happens to be a game developer, so feel free to get in touch with him on Twitter.

New Agent features and security fix

Bill Gates used to say that 640K ought to be enough for everybody. I’m here to say that 32K is enough for every UHK user. Well, as far as the on-board memory of the UHK goes.

Now that Agent shows the allocation of the on-board EEPROM memory of the UHK, it’s easy to see that about 4K is used by the default configuration of the total 32K. Even if you have dozens of keymaps and macros, it should still be enough.

If you take another look at the above picture, you can notice the newly added configuration history section. Every time you save your configuration, a new entry gets created here, and you can restore any previous configuration with a click of a button.

Last, but not least, we’ve fixed a major security bug which affected the Linux versions of Agent. We suggest installing the latest Agent version which will fix the affected udev file upon starting it. Mad props go to Joel Eriksson of ClevCode for spotting this one!

Your tweets

You guys keep sending your awesome tweets, and we’re always eager to read and feature them! If you got your UHK, please share your love!

We’ll be keeping you updated on all things UHK, and are looking forward to talking to you on 2020-03-10.

The trackball module is fully functional

Hi there, and welcome to the monthly UHK status update!

TL;DR: The trackball module is now fully functional. Modules will be more portable than expected. Some great UHK reviews have been published.

Trackball module demo

I really wanted to show up the trackball module in the previous UHK newsletter, but couldn’t because the pointer moved in a very erratic fashion. I’m happy to report that I’ve managed to fix the problem, so here comes the obligatory demo.

We’re very pleased with the usability of both the trackball and key cluster modules. They allow for fine-grained mouse control without leaving the home row, and work just as envisioned. The mini trackball of the key cluster is very handy for scrolling, and the trackball module is a great tool for moving the pointer.

Although the schematic of the trackball prototype contained minor errors, the fix mostly involved changing a couple of lines of the trackball module firmware. This was followed by the refactoring of the trackball module firmware, specifically, and then a massive refactoring of the module firmware codebase in general. As a result, the source code of the modules shrunk to merely 100-200 lines per module, allowing me to develop the firmwares of the remaining modules with minimum effort.

I’ve already started to develop the firmware of the trackpoint module, and the new touchpad PCB has just arrived, ready to be assembled. I’m looking forward to making these modules work, too. We’ll be keeping you updated.

Module portability

The modules make the UHK less portable in the sense that one can’t just merge the halves and pick them up with one hand, but as it turns out, even with the modules, portability is exceptionally good for a modular keyboard.

It spontaneously occurred to us when playing with the modules that the left and right modules merge, just as the keyboard halves. This isn’t surprising given that the keyboard halves merge, and the shape of the modules is the inverse of the keyboard halves.

Then it also occurred to us that, given that the back of the modules feature magnets and magnet counterparts just as the UHK does, the modules and the UHK can be stuck together.

This allows for great portability despite the modular nature of the UHK, and as a bonus, it’s quite a conversation piece.

UHK reviews

LearnCode.academy has made an outstanding video review of the UHK, which we were quite flattered by. Will has praised many facets of the UHK, including its build quality, feature set, and ease of configurability.

Another spectacular review has been made by TechPowerUp. This one is extremely in-depth, contains tons of high quality pictures, and doesn’t only explore the outside of the UHK but its inside, too.

Your tweets

You guys keep sending your awesome tweets, and we’re always eager to read and feature them! If you got your UHK, please share your love!

We’ll be keeping you updated on all things UHK, and are looking forward to talking to you on 2020-02-10.

Trackball and touchpad module progress

Hi there, and welcome to the monthly UHK status update!

TL;DR: We’ve made progress with the trackball and touchpad modules. Some outstanding UHK reviews have been published.

Trackball and touchpad module progress

I recently thought I’d finished the firmware for the trackball module and it would be ready to demonstrate for all of you. I can give you a demonstration, but it’s not what I was hoping for.

As you can see, the pointer moves in highly erratic fashion, and it heavily drifts toward the top right corner. I can affect the pointer by moving the trackball toward the bottom left corner, but the erratic movement usually overpowers my movements. I believe that this is a side-effect of insufficient filtering on the PCB, but it’s really just a wild guess on my part, and I’ve contacted PixArt, the manufacturer of the optical sensor who will help.

As for the touchpad, we’ve increased its resolution and sensing area.

The big footprint is for an optionally solderable 2x20 pin 0.1" connector that directly mates with the Azoteq CT210A-S dongle for configuration and diagnostics purposes.

The new design is a clear improvement over the old one, but we still have some work to do based Azoteq’s new feedback. The ground must be routed in a very specific way to maximize sensor performance. It’s not rocket science, just finicky. István is working on the next PCB version.

Next up, I’ll be working on the firmware for the trackpoint module, and will implement the suggestions of PixArt to make the trackball module work flawlessly. I hope that I’ll be able to showcase at least one, but hopefully both of these modules in our next monthly update. The key cluster module prototype is already fully functional, and the touchpad module will come last.

UHK reviews

Quite a few UHK reviews have been made recently. Let’s take a look at them!

ShopzadaPH has made an extremely thorough review featuring an unboxing, the keycaps, layout, switches, and configuration of the UHK. He really left no stone unturned, and the production quality is great. This one is highly recommended if you’re considering purchasing a UHK.

Thomas Ran is the king of the hill when it comes to mechanical keyboard reviews on YouTube, and he’s just reviewed the UHK. In his review, he emphasizes that he’s not an ergo guy, and yet, he’s done a great job of explaining the fundamentals of ergo boards and reviewing the UHK.

I met Christian Bäuerlein in 2018, as he's the organizer of Mechanicon, the meetup for mechanical keyboard enthusiasts in Germany. He recently offered to review the UHK, and given his formidable experience with mechanical keyboards, I gladly said yes. I think he’s done a great job of capturing the essence of the UHK in his review, including unboxing, assembly, layout, configuration, switches and keycaps.

Hardware.Info may well be the largest testing lab for computer hardware, peripherals and consumer electronics in the Benelux, which shows in their UHK review, as it’s so detailed, it’s almost like a mad science experiment. Thanks to the magic of Google Translate, English readers can read the translated English review, or read the original Dutch review.

Your tweets

You guys keep sending your awesome tweets, and we’re always eager to read and feature them! If you got your UHK, please share your love!

We’ll be keeping you updated on all things UHK, and are looking forward to talking to you on 2020-01-10.

Key cluster and trackpoint module progress

TL;DR: We’ve been making progress with the key cluster and trackpoint modules. New orders ship in a week, except non-black UHK cases.

Hi there, and welcome to our monthly status update! Let’s get right to it!

Production status

If you want your UHK shipped in a week, you should pick the black UHK case option. Otherwise your order will take longer due to temporary parts shortages. This shortage was mentioned in our previous monthly update, and we’ve been working on resolving it, but it’s taking more time than anticipated.

If you have any questions about the ETA of your order, please do read the delivery status page. We keep this page up-to-date, and we’re unable to provide more accurate information, not even if you email us.

Module progress

In our previous monthly update, I included a picture of the development board for the key cluster module. In the meantime, I’ve also written firmware to drive it, so here comes its obligatory demonstration:

From a technical standpoint, the BlackBerry trackball is an interesting little beast. The ball itself is not even electrically connected to the PCB. Instead, its four spindles rotate when pushed in the four directions. The spindles contain magnets which alter their magnetic fields about 9 times during a 360 degree rotation, and the alternating magnetic field is detected by the hall-effect sensors on the PCB.

Given its limited resolution, the BlackBerry trackball is hardly an ideal device for controlling the mouse pointer (right-sided modules will perform far better in that department), but it’s very well suited for scrolling in every direction. I’m actually surprised how well it’s already working, even though it’s the first working prototype. Over time, we’ll make the acceleration and speed of the mini trackball configurable, which will make it even more useful.

As far as the firmware goes, firstly, I slightly extended the UHK module protocol responsible for the keyboard halves and modules to communicate with each other. This allowed for the transmission of not only key states, but also pointer movement information. Then I wrote a driver for the BlackBerry trackball purely using interrupt handlers, which is the most efficient approach there is. Finally, I made the key cluster transmit the pointer movement information of the BlackBerry trackball to the right keyboard half which is the brain of the UHK.

The above pictures feature our most recent mechanical key cluster prototype. The creation of a working PCB is underway.

We’ve also made a mechanical prototype of the inside of the trackpoint module:

We may change the trackpoint component depending on various design constraints, but the overall mechanical design is expected to be close to final.

We’ve actually made progress with every one of the modules, but haven’t yet prototyped the others. We’ll be sharing all their juicy details in our upcoming newsletters.

Your feedback

You keep sending your nice tweets which we’re grateful for! Please keep them coming!

We’ll be keeping you updated on all things UHK, and we’re looking forward to talking to you on 2019-07-10.

New orders ship in a week

TL;DR: We caught up with pre-orders, and new orders ship in a week! Our customers made some awesome carrying cases for their UHKs. The UHK mouse mode is surprisingly useful, and viable for creating digital art. We’re making progress with the key cluster module.

Hi there, and welcome to our monthly status update! Ready for warp? Let’s punch it!

Production status

We’re thrilled to say that we’ve finally caught up with pre-orders, and incoming orders now ship in a week!

There are two exceptions regarding order parameters, though. If you want your UHK shipped in a week, you should pick the black UHK case option and a non-blank keycap printing option. Otherwise your order will take a bit longer due to temporary parts shortages. Feel free to check out the delivery status page for more information.

Please note that the order numbers have been removed from the delivery page. If your order hasn’t shipped yet, it’s because of the above exceptions. According to the delivery status page, you can shoot us a mail to change your order parameters to expedite delivery.

DIY UHK carrying cases

Some of you shared your DIY UHK cases, and they’re so awesome that I ended up writing a dedicated blog post about DIY UHK cases. I’m very impressed by these cases, and I’m sure they’re of interest of many UHK owners.

Creating digital art with the UHK

There are few keyboards with a dedicated mouse mode, and the UHK might just have the best implementation of all. Brandon Yu’s drawing is a testament to this.

I’m super impressed by Brandon’s work, and wouldn’t have ever thought that anyone would create such a beautiful drawing purely with the UHK.

The UHK mouse mode will never be as good as a dedicated mouse, but it’s surprisingly capable in the right hands. This is due to the implementation of the mouse pointer acceleration and its number of configuration options.

Key cluster module progress

We’ve been making progress with the key cluster module. András got the latest CAD model 3D printed, and we’re glad to say it’s more robust than ever.

In the meantime, I’ve been doing some electronics prototyping.

On the right side, you can see a breakout board designed by SparkFun, featuring a BlackBerry trackball - the kind of mini trackball that will be put into the key cluster. It’s wired to an old hand-soldered UHK left half. The left half of the UHK is just like a module from an electrical, firmware, and protocol standpoint, so it’s a great development board for modules. The design of the key cluster PCBs is in progress, and this is the whole Frankenstein keyboard on my desk:

(Yes, my UHK is backlit. We’ll release a backlight upgrade kit eventually.)

I also started to extend the firmware, and created a dedicated project for the key cluster module based on the firmware of the left keyboard half. The two projects contain a lot of duplicate code right now, so I’ll be gradually extracting the shared code to a module API which will be consumed by all the modules.

Your feedback

You’ve been sharing more than your fair share of tweets over the last month. Thanks so much, and as always, please keep them coming!

We’ll be keeping you updated on all things UHK, and we’re looking forward to talking to you on 2019-06-13.

Title