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