This is how Wooting analog keyboard Magic works

Amazing, amazing, amazing feedback we’ve received over the last weeks. We’ve been scavenging over the interwebs and read nearly all the comments, in so many languages, people had posted about the Wooting one. There was one recurring theme, people wanted to know more about the analog magic that happens in games.

As you know, we can’t tell you yet what technology we’re using to read analog values. But what we can tell you, is how things work on a software side and just a little tiny bit on the hardware side. I’ll do my best to make things as easy as possible, so you don’t need to be an engineer to decipher what I’m talking about. coughimnotanengineercough

Hardware – The Wooting one is natively analog

To start with, let’s clear one thing straight away; it’s not force sensitive. Meaning that you don’t have to bottom out the key and start applying an increasing amount of force to accelerate your car for example. The keyboard works and feels exact like any beloved mechanical keyboard with those sweet mechanical switches and you don’t notice anything strange or different about it.

There are different methods to read analog values from a mechanical keyboard but, usually, this means you’ll need to add extra hardware or devices to read this input. The Wooting one doesn’t have this problem because it’s entirely analog.

Meaning that it inherently sends an analog signal but it depends on other factors if it outputs an analog or digital signal. So, you can still use the keyboard as any mechanical keyboard reading an on/off signal even though it has analog inside, you won’t notice it.

Note: Remember from this blog, analog can send different input values ranging, for example, from 0 to 100 and digital can only send either 0 or 1, or also known as an on/off signal.

The current prototype only has 16 analog keys because we haven’t found the most efficient method yet to read all 87/88 keys (ANSI/ISO layout) analog signal without making the keyboard monster size and/or too expensive. But, we have a very good lead that will make the entire keyboard read analog signals without the costly downsides. We’ll let you know as soon as we know!

Update 01-may-2016: We made it work without the extra costs… All keys analog!

Software – Where the magic happens

This is the truth, a PC doesn’t understand or support an analog keyboard. It has no idea what to do with it but, thankfully, we have a way to make it understand everything without you installing all different kinds of software.

To understand how things work, you first need to understand the basics of how the hell a PC knows what to do when you press a key on any input device. I’ll talk in “Jip en Janneke” Language. Education time!

Let’s see if you can find out what language we used here 😉

All input devices talk with their own language or better known as a “protocol”. When you press a button, the device starts talking to the computer in its own language. Unfortunately, the computer doesn’t understand any of these device languages! Because it only understands bleep-bloops.

That’s where “drivers” on the computer jumps in. A driver translates this device language into bleep-bloops that the computer understands but for each different language you need a different driver.

That’s also why, especially in the past, you always had to download or install additional software (drivers) on your computer to support different devices. Thankfully, in this kind-of-modern age, we have standard drivers already installed on your computer.

These standard drivers can already translate keyboard, mouse, and gamepad language. When a game developer implements controls in a game, it will use these drivers to help connect the dots between input from a device and output in a game.

Not so crazy long ago, Microsoft made the gamepad language even easier on the PC and invented “Xinput”. Basically, Xinput is like an API, it takes the gamepad language and simplifies it into a language with far less vocabulary and grammar so that it’s easier to implement in games!

Another way looking at it is that Xinput is exactly like a Xbox controller in the amount of buttons or “input”. But, if a game support Xinput, it doesn’t mean it supports the regular gamepad language. It’s up to the game developer to support a certain gamepad, the gamepad to support Xinput or a software emulator in between to include Xinput support.

OK, take a breather, make some notes and draw some doodles.

To put it in another way, let’s say you have this weird 4 buttons gamepad with the unique names U, I, O and P printed on them but when you plug in the gamepad and want to start playing, let’s say Burnout: Paradise, then you won’t even be able to start your engine because it’s not compatible with such a weird 4 button device and you can’t even map the keys in the menu!

That’s because the game developer didn’t support gamepad language in the game. This is where Xinput jumps in. Basically, Xinput can read the U, I, O and P buttons and simplify it into Xbox controller buttons, like A, X, Y, B. Buttons that a car understands and knows what to do with, or well that the developer basically used as mappable buttons.

So, why don’t all game developer just support gamepad language? Because it cost more work and time to implement, while Xinput has a limited amount of buttons, is much easier to implement and is used by the majority of people.

Woeh! great! Hoerah-Hoerah for gaming but wait, what about the analog input?

Basically, the only analog input that Xinput (Xbox controller) can send comes from the left- and right analog stick, and the left- and right trigger keys. It’s up to the game developer if and how they make use of it. In nearly all games you’ll see that it will use the left joystick for analog movement. Great.

How the Wooting one magic works

The Wooting one keyboard is recognized by the computer as a keyboard and gamepad at the same time. So it can not only send keyboard language but also gamepad language with Xinput support! We’ve made two modes, Gaming and Typing, that you can switch in between for its specific use.

Basically, in typing mode, the keyboard will work exactly like any mechanical keyboard and in gaming mode, it will work as a (Xinput) gamepad.

The reality, in gaming mode, the left analog stick is mapped on the WASD but this also means that you can’t use WASD for typing anymore. So in Typing mode, the layout is like a regular keyboard without any gamepad buttons mapped.

For now, you need to switch in between the two but with more development time it will be possible to type and use it as a gamepad in games, so even when you’ve mapped left analog stick on WASD, you can still type like a regular keyboard.

Like this

So, to recap how gaming mode works.

For gaming mode, you can map the “keyboard” and the “Xinput” keys (remember, Xinput is basically the same as a Xbox controller) anywhere you like. Meaning that you can, for instance, map the left analog stick on the WASD and keep the rest as regular keyboard keys. But you can also choose to map the other Xinput (Xbox controller) buttons (ABYX, triggers etc.) on any key you like. You could also choose to map the left analog stick on both the WASD and the arrow keys at the same time for whatever reason you see fit.

Or this

Before going to the next chapter, let’s talk a little about how you exactly control an analog stick with 4 keys. An example, you mapped the left analog stick to WASD. W analog stick forward, A analog stick left, S analog stick backward, D analog stick right. The further down you press a key, the further you press the analog stick towards that direction. So when you press W all the way down and the D half way, you’ve effectively moved the analog stick forward at a ~22-degree angle.

Or whatever

In a game applies the same idea. The further down you press a key, the faster your character starts moving towards that direction. We’ll show this in detail in another video when we’re not hacking, slashing and testing the prototype.

Let’s not forget, even though you use Xinput for analog movement etc. on the keyboard, you’re still using a mouse for superior aiming!

Some limitations

Unfortunately, life is not easy. To use analog movement in a PC game, the game needs to have gamepad or Xinput support. Thankfully, nearly all games have Xinput support, so you can basically plug in a (Xbox) controller and start playing the game with it.

The real problem arises when a game developer decides to turn off the mouse and keyboard when you activate gamepad in the menu or when you plug in or use a gamepad in the game. In the latter case, the game keeps swapping between devices, possible turning your mouse on and off, causing laggy mouse movements.

That’s why you won’t be able to use analog movement in all games yet.

A real party pooping situation, because it’s not too difficult for a game developer to add support. We’ve learned that we’re not the only one struggling with this problem. The recently released Steam controller from Valve, in essence, uses the same technique as we do. They use the keyboards, mouse and Xinput language at the same time to support their analog triggers and touch sensitive (mouse) movements.

We’re still in the process of finding alternatives and hackarounds as a temporary solution but as we progress we’re building a permanent solution. More about this in the next chapter. Furthermore, with the introduction of the Wooting one and the further development of the steam controllers, game developers will increasingly recognize this issue and start providing more support.

There’s already a great amount of games in which it works smoothly, like Battlefield and GTA5. Note: GTA5 is a special topic, we will cover and talk about specifically another time.

Now, for the not-gaming side of all this, you can use the keyboard for so many other things too. In the end, it’s an analog device that can run on existing platforms, just like how we used Xinput for games, other device languages can be used for other things!

The Wooting goal

Of course, we’re not planning to give you a one-time solution. We’ve made an analog mechanical keyboard and we don’t want it to end up as a gimmick, hell what a waste that would be! This is the part for which we need sincerely need your support to help us get further. In some cases, it means providing us feedback/input, in other cases it’s making something awesome for it, anything that increases the chance for people to start using analog input is a win for everybody.

Our goals are as followed:

We’re focused on releasing the Wooting one – All analog keys – and building as much as possible support for the current solution, working on existing platforms. Including, custom mapping of controller and keyboard buttons etc., tweaking analog experience for different games, fund mods for triple A and cool games that don’t support the use of simultaneous devices.

Meanwhile, start developing an open-source analog keyboard driver, which will allow you to gain full access to the keyboard’s potential. Enabling native support and custom applications.

Create an easy platform, API in mind, for people with less or no coding knowledge to make their own custom applications.

Let creative freedom flow, pushing for an industry standard.

Why you want this too

The keyboard is an extremely old input device that ages from before the computer (typewriter, you can spell it on the first row of a QWERTY keyboard). It’s layout, functionality and application have barely changed over the multitude of years, even more ironic, we’ve gone from membrane keyboards back to the older technology of mechanical keyboards. In the meanwhile, your smartphone is using a mind bottling amount of input methods and its applications are ever so increasing.

So why are we not increasing the input methods of the keyboard? Even if it’s not a leap into the future, you’d, at least, want to see some kind of increments.

Or you can just drop the above and realize that Finally you have analog movement in games and the capability to play around with analog input on a keyboard. Especially with the entrance of VR, you can still use your keyboard and mouse and experience complete immersion. Awesome.

Feed us Back ~ Thank you!

When we just started this project, we told ourselves that we should always seek out for feedback, stay true to ourselves and everybody around us. That’s why our communication channels are always open for everybody and when we get the chance, we answer as many people as we can.

So, don’t feel like you missed out and share your opinion, concerns, thoughts, ideas, questions, critical thinking or anything that pops into your mind with us by:

Cancelled my order for a Varmilo VA87MR once I saw this. The keyboard is beautiful, AND we can change the top plate for some customization. I don’t care much for the analog features, though it’s great. Will you guys give us the option of Cherry MX instead of analog keys? I can imagine the resulting cost from having all analog keys to be high

HI Brent,
I’m really stoked you’d choose our keyboard over the Varmilo without taking analog into consideration. All the keys are analog keys and soon we’ll be able to read the analog values of them all.

So, you can’t install CherryMX switches on the board but you can use CherryMX compatible keycaps. We’re not allowed to talk too much about the switch yet but when we do (soon) you’ll understand why.

I think everybody will be happily surprised with the price we’re aiming at.

Because then the mouse would have to emulate an analog stick, and that just doesn’t work very well. When you use an analog stick, it’s basically telling your computer how much and in which way the stick is being pushed. But when you move a mouse, it tells your computer where it has moved in relation to the previous location. That’s why you can do super fast movements with a mouse, but not with an analog stick. When you move your mouse super fast and you see the cursor on the screen basically teleport from one location to the other, it’s because the mouse is telling your computer where it has been moved from its previous location. But if you move a mouse cursor using a gamepad, the cursor just steadily moves along on your display towards the direction you’re pushing the analog stick.
Because of this difference it’s extremely hard to emulate an analog stick using a mouse, and no one has ever been able to make it work very well. There are some keyboard/mouse -combos available for consoles, but the mouse movement you get with those isn’t nearly the same you get with a real mouse on a PC.
I’m pretty sure it would also require additional hardware within the keyboard, because the keyboard would have to be able to take the input from the mouse and translate that into movement of a virtual analog stick, and then send that to the computer.