Hi there, and welcome to our monthly status update!
TL;DR: We’re making rapid progress with the assembly process. The firmware and Agent have matured significantly and become truly cross-platform. We have to make a minor design change on the PCB that will set us back by 2 weeks. Batch 1 has sold out and batch 2 will ship starting December.
You can always check out the expected delivery date and update your shipping address on your Crowd Supply account page.
Batch 1 has sold out
Given the uninterrupted pre-sales period since the end of our campaign, the first batch of 2,000 UHKs has just sold out. That means that going forward, new orders will fall into batch 2 which can be expected to ship in December.
Your orders will still be served on a first-come, first-served basis, but this delay between batch 1 and batch 2 is inevitable as we ramp up production.
Starting from batch 3 we expect to have a decent stock, so we’ll be able to provide you UHKs without any delay.
The inner assemblies are coming together
The inner assembly is comprised of a number of parts that reside inside the UHK case.
16,000 metal guides are already made. We'll have to press-fit the pins into half of them. Speaking of the pins, we’ve further optimized them. We’ve switched to using pins with spherical ends and a hardened surface, resulting in a heavenly smooth, yet solid merge-split experience. Perfecting these guides was an art unto itself.
600 pairs of plates have been manufactured and zinc-plated.
We’ve learned that seemingly mundane parts like keycap stabilizers can take surprisingly long time to assemble. There are two identical left and two right parts that slip together, then a metal wire is inserted into them. Thankfully, we’ve already finished assembling 5,500 of these.
The above results in assembled plates like these.
So far, we’ve assembled 150 pairs of plates, and 50 pairs of those will be used for the pilot run. These plates will travel to our PCBA contract manufacturer who will solder them together with the PCBs. Afterwards, the guides will be screwed to the plates, completing the inner assemblies.
Outer assemblies and miscellaneous parts
As you can imagine, one of the most complicated parts are the plastic cases. So far, we’ve manufactured 150 pairs of bottom cases, and 2,000 pairs of case buttons.
The molds for the upper cases are being tweaked and we expect them to be perfected within 1-2 weeks, at which point we’ll put them to good use and manufacture 150 pairs of top cases.
Apart from the above, there are still a fair number of parts that go with the outer assemblies including the magnets, magnet-counter parts, rubber feet, inserts, back stickers, and a couple of screws.
Since our last update, we’ve also ordered 2,000 USB cables and bridge cables. Fun fact: the total length of these USB cables is 3.6 kilometers, or 2.23 miles.
Firmware progress
The firmware already works pretty well, but the configuration parser was very basic a month ago, only capable of parsing layers. It was clearly incomplete because it should parse not only a single layer, and not even a single keymap, but the fully-fledged binary configuration containing a set of layers, macros, and various items.
To my surprise, I received an email about a month ago from Eric Tang. Given his passion for keycaps, we’ve already exchanged numerous emails with Eric, but this email was different.
Eric asked me whether we have an internship program. He caught me by surprise and even though we’ve never had an internship program, I asked him what was on his mind exactly. As it turned out, Eric has written his own keyboard firmware based on AVRs and LUFA, making him the perfect candidate to develop the configuration parser of the UHK.
Since then, Eric has made tons of progress and now the firmware is able to parse almost the whole UHK configuration except macros. He’s now working on making the LED display show the abbreviation of the actual keymap, and then he’ll finish off macros, and develop the macro engine.
I feel very fortunate to have been contacted by Eric, and am having a great time working with him. The configuration parser shall be implemented soon!
Agent progress
Quite a few things have happened with Agent.
Right after Eric started working on the configuration parser, he couldn’t make Agent work on his Mac. I originally believed that it’s a privilege escalation issue, but Robi investigated further and realized that it’s a much deeper problem.
As it turned out, libusb, the library we used to make Agent talk to the UHK via USB isn’t supported on the Mac anymore. Apparently, recent OSX versions implement a new version of the USB subsystem which broke libusb.
Luckily, Robi found hidapi, the perfect alternative for libusb. In his true fashion, he didn’t waste his time, and ported Agent to use from libusb to hidapi. As a result Agent now runs perfectly on all the three major OSes.
Now, there’s only portability problem to be solved. blhost, the command line utility that updates the firmware of the UHK also utilizes libusb and it segfaults on OSX now that libusb is broken on Mac. Unfortunately, NXP doesn’t seem to care but fortunately, Santiago made me aware of pyKBoot, a python command line application that speaks the kboot protocol just like blhost, but which uses hidapi instead of libusb. I’ve toyed with pyKBoot a bit, and looks like it’s a viable alternative to blhost.
I think we can use pyKBoot but I’m not fond of it because we’ll have to package it as a standalone, self-contained executable, possibly using PyInstaller which will likely make the bundle size of Agent considerably larger than optimal. I’d really like to replace pyKBoot eventually with something more native to Agent. I think the best way forward is to port pyKBoot from Python to TypeScript later down the line.
Speaking of other parts of Agent, Robi has also implemented an auto-update mechanism. We have yet to refine it, but it seems to be already working.
Józsi also implemented a more general rendering mechanism for Agent, enabling it to render both ANSI and ISO keymaps according to your UHK version.
Electronics issues
Few days ago, I started to heavily test my backlit UHK prototype and found a serious issue. For some reason, the communication between the keyboard halves interrupted from time to time and eventually died.
Frustrated but determined, I delved into the issue and figured that it was caused by the LED drivers. When I disabled the LEDs, the prototype was rock stable. I further narrowed the cause, and found that the issue only surfaced when I enabled one of two LEDs, the LED of the right Alt key or the LED of the comma key.
I couldn’t make sense of this, so I got in touch with Integrated Silicon Solution Inc., the manufacturer of the LED driver ICs that we use. As it turned out, we didn’t place the bypass capacitor of the LED driver close enough to the IC. I soldered a through-hole capacitor as close as I could to the LED driver on my prototype and it solved the issue in no time.
Even though we don’t provide a backlit UHK version yet, many of you have expressed your desire to solder LEDs to your UHKs, so this is a big deal. Even more importantly, we already utilize the left side LED driver to drive the LED display and even though it didn’t produce such issues in itself, I fear that such issues could surface on a quite a few UHKs out of 2,000 UHKs, so this issue must be resolved.
Admittedly, this sucks, but thankfully, it’s a very minor PCB redesign which I’ll implement in about a day. We will, however, have to get new prototype PCBs made, assembled, and tested, so it will translate to a 2 week delay.
If there’s someone to blame, I surely am. I should have tested this way earlier. I’m sorry about this, but I’m also thankful because TUV hasn’t started testing our prototypes for the certification process and our PCBA contractor hasn’t started to manufacture the PCBs for the pilot run yet. I sent them notice just at the last minute. If I didn’t, we would have lost a lot of money due to this issue.
All things considered, even despite the PCB redesign, we’re getting very close. Pilot run notification emails will be sent out soon, followed by 50 UHKs, and followed by the rest of the 1,950 UHKs of batch 1. We cannot wait to finally ship!
Thank you for reading this update! As always, we’ll be keeping you updated on a monthly basis via our blog and newsletter.
Talk to you on 2017-08-17!
10 Comments
This is awsome! 16000 pins and keycap stabilizers to build, I will become crazy when I have to do that, I'm impressed to see the progress. And it's better to delay the UHK by two weeks to fix the LED-problem then just ship the UHK
But please do not delay any futher because my keyboard is starting to come apart and I don't want to buy another one.
So keep up the work, there is light at the end of the tunnel and it becomes brighter and brighter.
On linux, there's a generic update mechanism for updating firmware - fwupd - https://github.com/hughsie/fwupd
Would it be possible to add UHK support in it? It already works with at least some HID-class devices (like Logitech wireless receivers).
This would allow OOTB support on major distributions without installing any extra software.
Thanks for making me aware of fwupd. I didn't know about it.
Unfortunately, it seems to me that fwupd is not an option for the UHK because in our case the firmware implements the USB protocol that will be changing from time to time. The USB protocol is used between the UHK and Agent, so Agent and the firmware must always be in sync. According to my knowledge, it's not achievable with fwupd.
I was playing a few minutes with Agent editing the fn layer to add a numpad on the right half of the keyboard and the media controls on the zxcvb keys and I found two noticeable things.
I miss a choice to split visually both halves: a simple coloured line can do the job or adding a small space (1/4 or 1/3 of a key should be enough) between both sides is even better ;)
The other thing I found can't know if it's a bug or a deliberated choice, but I found very useful.
As my english is so bad, I write the steps:
1. Click on an unassigned key. Appears the floating menu that has the "None" selected.
2. Remap to any action you like (for example keypress > "Previous").
3. Click on another unassigned key. Appears the floating menu with the previous action selected (until the user don't click on remap, the function won't be assigned).
I found it useful because once you set an action for the first key, is very likely that the second key will have a similar function as the first one (in my example another key for media) and prevent to change the tab and scrolling down again.
Hey IzK,
We might add a separator line later, although chances are it won't be necessary because the UHK on the screen will split if you actually split your keyboard and merge if you merge it. You can now try this with Alt+s.
I consider your second point a bug according to our specification. :) The tab of the current key action should always be active by default. This is convenient in your situation but I'm not sure that it's universally a good thing. By the way, try clicking on a key with the middle mouse button. You'll be assign a regular scancode to it very quickly.
It's great the ALT+s. That's the missing feature ;-)
The middle click to record a keymap isn't working on firefox. It shows the record symbol but when I press any other key, does nothing. Until I middle click the key again, that the record symbol disappears.
It works fine on Vivaldi (chromium based).
Remapping through the floating menu works fine on FF.
I'm sorry to hear about the Firefox related bug. Can you please open an issue in the issue tracker of the Agent repo?
Hi,
is there a way I could buy UHK from someone who preordered in first batch? I am of course willing to pay premium to that good soul.
My wrist really needs your keyboard, you seem to be the only keyboard with tent+negative tilt+palm rest+mouse option in between :)
Cheers
Hi Urza,
Sorry that we can't make it happen. You're welcome to comment in our upcoming update, though. If you're quick your comment will be one of the first and maybe someone will be willing to sell his/her UHK.
Thanks for your interest and have a nice day!
You might have some luck in the reddit mechmarket:
reddit.com/r/mechmarket/new
Once a drop like this happens there are usually people that sell their's because they either moved on or just didn't like it after all.
Comments are closed.