I really got excited about the Steam Controller and the kind of gaming it could enable, when Valve first announced it and stated that this thing should be as hackable as possible.

My excitement didn’t change through all the revisions it went trough, but I’m still disappointed that the touchscreen was scrapped, for better or for worse.

I recently received mine, and no doubt, it’s an amazing piece of hardware Valve has put together.
And I’m pretty sure the lack of a touchscreen is for the better.

In this blog post i will give a general review in terms of gaming, address some issues, also regarding emulators, and finally touch on the more technical developing side of things and the inner workings of this piece of hardware.

Going to be a lot to read, so make yourself comfortable and maybe grab some coffee.

To clarify: computer science student means, I am currently getting a degree in computer science at a university of applied sciences.
The title is meant to indicate that I’m not afraid of tinkering and that I will also touch on a bit more technical side of the Steam Controller.
As it stands right now, there isn’t all that much to say about this, though.

Overview

IMG_7051In the box there is the controller itself, a Micro-USB cable, a wireless dongle, a little Micro-USB to USB piece, and two AA batteries.
The wrap around the box also features an explosion view of the controller on the inside.

 

The build quality of the Steam Controller feels perfectly good to me, but I don’t own a Xbox one elite controller to which it is often compared to feel cheap against.
The glossy plastic on the front is a bit of a piss off, but then again, do you really look at your controller while gaming?IMG_7045

The controller features two pedals on the back, a left an right shoulder button and two stage analog triggers. Two stage meaning there is a button at the end of the analog trigger, just like in the old GameCube controller.

On the face-side you can find the standard ABXY button setup, a single analog stick, a start and select button, a steam button and of course the big feature: Two round, clickable touchpads with haptic feedback.

The ABXY setup is in a rather odd location, and the buttons are also a bit smaller than the ones on an XBox or Playstation controller. But that hasn’t been an issue for me.

Also one of the lesser known features is an accelerometer / gyroscope chip in the controller, which can be used for motion controls.

The controller also features a speaker, that only seems to be used when turning the controller on / off or give feedback on double pressing one of the touchpads (if configured).
Edit: Turns out, the on/off sounds are not from a Speaker, they are actually from the haptic feedback engines!
Also the Steam button has a white LED backlight.

The back pedals can be popped out, so you can insert one AA battery, in each of the grips.

The two batteries will last you for weeks up to a month of usage.
Also two, what seems to be contact pads for a yet to be announced extra battery pack or play and charge kit, get revealed with the pedals popped off.

The controller connects (afaik) via a custom Bluetooth stack or via a Micro-USB cable.
Over the cable, the controller works without any batteries whatsoever, but you can’t get power via USB and connect wirelessly without batteries.

Configuration and Features

config_mainYou can configure everything (except for the Steam button) on this controller, every button, the analog stick, triggers, motion controls and the touchpads, to be anything you want it to be.
Every keyboard / mouse action, even key combinations, and every action from an XInput (Xbox 360 / XBone) controller.
trackpad_bindingsstick_advanced

 

You can even have alternative modes to have the motion control or the touchpads do something completely different when being clicked in, or a grip, or button is being pressed.

One of the more neat and also lesser known features are touch menus.touch_menu
You can put up to 16 functions on a single trackpad, and if you use alternative modes, you can double that up to 32.
That totals up to over 64 buttons on the touchpads alone and just over 70 buttons on a single controller, completely comfortable to access? That’s nuts!touch_menu_config

You can even get publicly available community setup profiles for every steam game.

controller_personalizationSteam beta users can as of right now (16. December 2015) also change the backlight LED of the Steam button, and change the controllers on / off sounds.

With all that however, there are some issues, but more on that later.

Gaming

In terms of gaming, the Steam controller may not be for everyone, it may not be for every game.
But the Steam Controller definitely allows for games to be played at the couch, that just weren’t possible to play before, unless you used some rather quirky solutions.

I personally like to play with a controller, even at a desk, for almost all games that wouldn’t benefit from a keyboard and mouse setup, like racing games, rougelikes, some spectacle fighters, etc.
Most of them don’t require a second analog stick.
For all games with native controller support, which don’t need a second analog stick, the controller works great, just like you would expect it to.

For other games i found that you have to take your time and configure the controller for that specific game first. And let me tell you, this, especially in the beginning, takes a lot of time.
Sure you can also grab one of the popular community profiles, it helps, but I still need to configure the controller most of the time anyway.

community_bindingsYou can configure either one of the touchpads to work just like a regular analog stick, in case the game you want to play would heavily benefit from having two analog sticks instead of a keyboard and mouse setup.
This however will take you, again, a lot of time, and depend on your personal preference and / or the games you want to play. Except for twin stick shooters like Geometry Wars, out of the box the touchpads are a dream for this genre.

If you’re playing strategy games, i guess there wouldn’t need to be much of configuration, as the controllers touchpad(s) can function perfectly fine for mousing like on a laptop. Even better so, because you can emulate a trackball.

In case of racing games you can even use motion controlled steering.
Motion controlled steering is not a racing wheel, and in most cases, even despite the gyro being really fine, it’s nothing more than a gimmick, but in case of “Project Cars” that’s a different story…

For “Project Cars” I like to set my steering to motion control, and the right touchpad as camera control. In cockpit view in this game this is amazing!
Granted i don’t own a racing wheel and i don’t feel the need to get one, so your mileage may vary.

For third person / first person shooters, you’ll only get the best results if the game you want to play supports controller and mouse input simultaneously, but most games do.config_bindings
And if it doesn’t, you can simulate any keyboard / mouse input, even key combinations, from everything on the controller. So you really just loose out on analog movement.

While it works surprisingly great, it still takes time to configure it to your liking, and the touchpads, while being able to be super fast, really fine aim isn’t possible when you also want to rotate 180° in a split second.
A popular workaround for this issue is to have motion controls for really fine aim, and the touchpad for bigger rotations.
Once you get used to this, will you pwn like you never did before in competitive FPS games?
No. A mouse and keyboard setup will still be superior to a controller.
However you can finally lay on your couch, or just lean back in your chair and play more relaxed than with keyboard / mouse and still get a better experience than with any other controller.

That being said I really enjoyed playing “Just Cause 3” with my Steam Controller, and I actually preferred it over a keyboard / mouse setup in this game. But Just Cause doesn’t need you to be super precise while being super fast at aiming.
It’s a single player game, and not a competitive FPS, and isn’t heavily focused on fast paced gameplay after all.

Issues

There are a lot of Issues bugging the Steam Controller right now.

Steam Controller on screen keyboard
Steam Controller on screen keyboard

First off, you need Steam up and running to be able to use it, also you need Steam Big Picture mode to be able to configure it.
The controller only represents itself as such to a game if you launched it through steam. More specifically Steam represents the controller as a controller. The Controller itself only sends manufacturer defined HID-messages.
You have to run your games through Steam, you can add non-Steam games, or even desktop Programs like emulators to Steam and launch them flawlessly though, so it’s not that big of an issue I would guess.
Also, if you want to configure the controller while being in game, you also have to launch the game in Big Picture mode.
That was kind of expected tough, since the store page, as well as the box state:

"Requires a computer running the Steam Client and a free Steam user account."

If you want to hook up your Steam Controller to an Android box or your Android phone though, you are (currently?) out of luck.

The second issue I have with the Steam controller is that you have to bloody configure it for every game that you want to play with.
Even if you have a general profile that should work out of the box for most games of a particular genre, you can’t use profile X from game Y for game Z.
Why Valve? Why?

I believe that the configuration need will also turn off most of the more casual users.
You will either take the time to configure the controller before you can finally start to play a game, or just say “Screw it!” and go back to a regular controller or keyboard and mouse setup.
The configuration needs will also get even bigger once you would just like to have a second analog stick.
Sure you can get community profiles.
But even the most popular game profiles still aren’t perfect for everyone.

Another issue is that, while there are alternative modes for touchpads, you can’t currently have every button mapped to toggle an alternative mode.
And for the ones that you can, there is not even tap and hold or toggle functionality, no you have to keep the bloody button pressed to be in alternative mode. In fact you can’t get any tap and hold functionality.
But fast fire, which is obviously way more useful…

One big issue occurs first when you want to play with emulators like Dolphin for GameCube / Wii games. Maybe also for space-games and / or flight simulators.
Since you can only map keyboard / mouse and an XInput (Xbox 360 / Xbone) controller, the extra button on the end of a dual stage trigger can’t be mapped to an extra button, except for a keyboard-key.
In fact, you can’t get any more buttons that a standard XInput controller would have without falling back to keyboard / mouse actions.

Luckily for the GameCube dual stage trigger issue, Dolphin supports

Optional controller hud showing the dual stage trigger "fix" in Dolphin
Optional controller hud showing the dual stage trigger “fix” in Dolphin

simultaneous controller / keyboard / mouse input, and in case you need it, there is an excellent guide over in the Steam Controller Community-hub 

Also you are limited to analog axes of the 2 sticks, and the triggers an XInput controller would have + mouse X and Y.
With the Steam controller you could in total have analog axes for triggers, X and Y for every touchpad, X and Y from the analog stick, and all of the axes the motion control would offer.
Alright, alright sure, all of them together would be overkill. But a bit more analog axes than what you can get out of the box, would be useful for emulation of Wii games and could be useful for space-games and flight simulators.

And yet another issue I have is the controller doesn’t support any rumble functionality, while clearly being able to due to it’s haptic feedback.

The last thing worth mentioning would be, the lack of touch menus on the desktop.
While being configurable, there is no way to currently access them. Touch menus would be incredibly useful when browsing the Web on your couch, or making the steam controller a hot-key device.

Overall the software for the Steam Controller seems rather like a beta, it’s not even complete yet!
soon_availible

That being said, Valve is rather quick on the update side.
But you may never know when Valve-Time strikes.

Developing and the inner workings

explosion_view
Explosion view of the controller on the inside of the packaging sleeve

Along with the controller only sending manufacturer defined HID-messages, and the only API for fully interfacing with the controller is through Steamworks you won’t be going to develop the easy route for this thing right now.
However there is a standalone user-land driver for Linux over at github.

Also someone apparently would like to create an open API for interfacing with the Steam controller, and did some work reversing the protocol.
The project is also available on github.

From what I’ve seen the protocol is rather simple and consists of 128 byte long messages.

I would like to work on an open API for this thing right now, too. Unfortunately though I just don’t have the time to do so.
But with the work that’s already been done, I’m sure someone will do it sooner rather than later.

An open API for this beast of controller would address some issues rather elegantly, like native support for emulators. Or a driver that presents the controller to the PC as a real controller, with more capabilities than what Valve / Steam allows.
Or a driver that makes this thing work properly on Android.
The hope of course is that Valve releases an official API outside of Steamworks eventually.

Software wise an open API would be all i could wish for, since it would probably enable all the rest of the cool things you could do with the Steam Controller.

On the hardware side, according to HACKADAY, and iFixit there are JTAG or strictly speaking SWD pads availible.
The controller sports a NXP LPC11U37F ARM Cortex-M0 SoC and a Nordic Semiconductor nRF51822 Bluetooth Smart and 2.4GHz proprietary SoC.

For motion controls the controller uses a Invensense MPU-6500 Six-Axis (Gyro + Accelerometer) MEMS MotionTracking device.

The MPU-6500 is popular within the Arduino community and in fact, I have an MPU-6500 on a breakout board here somewhere.

The touchpads are a solution from Cirque, likely the GlidePoint TM040040.

Of course, there are those two, what seem to be contact pads for power, on the PCB of the Steam Controller, but I didn’t find any confirmation on this as of yet.

flashmode
In case of the NXP LPC11U37F ARM SoC, Valve has let open the flash-mode that this SoC has (CRP disabled mode)
If you plug in the controller via USB while holding the right trigger all the way in, you can see it as a USB-flash-drive.

Without any documentation and sources from Valve, I doubt we will see anything neat with this anytime soon.
But it’s nice to know that you can’t just brick your controller via a failed firmware or bootloader update.

Conclusion

The Steam Controller is different, and it has is quirks, but still, it’s the best game controller you can get right now if you are a PC gamer.
It is an amazing piece of hardware.
It’s a beast, currently held back by its software, waiting to be unleashed completely.
As said before, Valve is rather quick on the updates and with APIs being developed, and a standalone-driver already being available for Linux, just after a month after release, it can only get better.

Even for HTPC use, which i haven’t even touched on in this blog post, its a really useful device.
When touch menus for the desktop are available, maybe in addition to some AutoHotkey / AutoIt macros, you could even use it to enhance your productivity work.

It’ll be interesting to see how the Steam Controller develops through its lifespan.
Also it’ll be interesting to see what Valves statement way back from the announcement means, and if it comes true, and if it does, in which form.

"The Steam Controller was designed from the ground up to be hackable… We plan to make tools available that will enable users to participate in all aspects of the experience, from industrial design to electrical engineering."