Bépo hardware layout remapper

Some of you may know alternate keyboard layouts as Dvorak. Those layouts are design to improve typing speed and accuracy while reducing finger motion and bépo layout is the French variant of the Dvorak one. Once you learn and practive a such layout, you can hardly get back to the default qwerty layout (in fact, you and your fingers will be able to use both layouts without difficulty but it is so painful to use qwerty when you had tried Dvorak). So you will try to have your layout with you on any computer you use.

Dvorak layout
The Dvorak layout
Bépo layout
The bépo layout

Hopelessly, those alternate layouts are not build-in on Windows platforms and you will need administrator rights to install it (rights you might not have on any computer you use!). This is why a tried a new electronic project: a Bépo hardware layout remapper, aka BHLR. Behind a so barbaric name, there is a small device which converts Bépo inputs to default layout inputs (Azerty in my case, French variant of Qwerty). You plug it between your computer and you keyboard and it is seen as a standard keyboard, playing translated inputs read from your keyboard. The main advantage is you can enjoy your layout without installing anything on your computer (even driver as BHLR is seen as standard keyboard device).

The Bépo hardware layout remapper consists of two hardware parts: a Teensy 2.0 board and a USB host shield. The Teensy board is an Arduino compatible programmable board which will behave as an USB slave with HID keyboard profile (there is a keyboard library to do that). The USB host shield is used to read the inputs from the keyboard. The Teensy board gets it, converts it at HID input code level (lots of readings about USB HID specifications) then play its as keyboard.

Teensy 2 card
The Teensy 2 card. May it look you familiar if you “played with” your PlayStation ?
USB host shield
The USB host shield (bigger card than Teensy !)

To get things working, I soldered boards together according the following pictures. A special note to the power lines: the Teensy board should run on the 3.3v mode due to the USB shield. But as I use the shield as host, I must also supply a 5v power line, line I found on the Teensy card.

USB host shield wiring
The USB host wiring (EAGLE is not so bad, right?)

The software is really simple (you may find the code on my Github). It keeps reading the USB HID inputs from the USB host shield. Those inputs are translated with static conversion tables and played with the keyboard library by the Teensy card. I also add it a one-more-feature: a key binding to switch off and on the input conversion. It allows me to let others type on the keyboard as if there is no BHLR (so I could kept it hidden). But you could also think about more funny features as a type speed counter, counting the number of words typed by minutes, or a key logger with a key binding to start recording and an other to replay inputs (to use when administrator comes to type his password).

The main drawback of this device is some keys on Bépo could not be done with Azerty layout (as É or œ, yes we use such characters in French…) so I could not convert it (É becomes E for example).

In conclusion, here is the final integration in its (cute Kinder) box:

Sources and greetings: Layout images, Teensy card, USB card and soldering,