Here are the different signals that the Steam Controller will send for the different buttons, and what you need in your .emulationstation/es_input.cfg for EmulationStation to react to them.
Left D-PAD The left D-PAD will send "hat" signals when you just touch it, and "button" signals when you press hard enough to actually click. Use this for touch-sensitive up/down/left/right:
<input name="up" type="hat" id="0" value="1"/>
<input name="down" type="hat" id="0" value="4"/>
<input name="left" type="hat" id="0" value="8"/>
<input name="right" type="hat" id="0" value="2"/>
And use this if you want to have to click for up/down/left/right:
<input name="up" type="button" id="17" value="-1"/>
<input name="down" type="button" id="18" value="1"/>
<input name="left" type="button" id="19" value="-1"/>
<input name="right" type="button" id="20" value="1"/>
The left directional pad on the Steam Controller is SUPER sensitive, and I don't think there's a way to configure this sensitivity yet.
Left Analog Stick The left analog stick sends two "axis" signals, one for up/down the other for left/right, and a "button" signal when you click it. The configuration is:
<input name="leftthumb" type="button" id="13" value="1"/>
<input name="leftanalogup" type="axis" id="1" value="-1"/>
<input name="leftanalogdown" type="axis" id="1" value="1"/>
<input name="leftanalogleft" type="axis" id="0" value="-1"/>
<input name="leftanalogright" type="axis" id="0" value="1"/>
Right Analog Stick (The mouse-like touchpad) EmulationStation doesn't use a mouse, but it'll happily respond to the "axis" and "button" signals you can send from the pad:
<input name="rightthumb" type="button" id="1" value="1"/>
<input name="rightanalogup" type="axis" id="3" value="-1"/>
<input name="rightanalogdown" type="axis" id="3" value="1"/>
<input name="rightanalogleft" type="axis" id="2" value="-1"/>
<input name="rightanalogright" type="axis" id="2" value="1"/>
A, B, X, Y, Start, Select, Hotkey, Shoulders, Triggers, and Guards Set these as follows:
<input name="a" type="button" id="2" value="1"/>
<input name="b" type="button" id="3" value="1"/>
<input name="x" type="button" id="4" value="1"/>
<input name="y" type="button" id="5" value="1"/>
<input name="start" type="button" id="11" value="1"/>
<input name="select" type="button" id="10" value="1"/>
<input name="hotkeyenable" type="button" id="12" value="1"/>
<input name="leftshoulder" type="button" id="6" value="1"/>
<input name="rightshoulder" type="button" id="7" value="1"/>
<input name="lefttrigger" type="hat" id="0" value="4"/>
<input name="righttrigger" type="hat" id="0" value="2"/>
The "Guards" are the buttons on the back of the Steam Controller that no other controllers seem to have (if there's another name, I'll correct this post). They don't map to anything in EmulationStation, but they have button id's of 15 and 16.
As mentioned before, the Triggers also send an analog signal before you click the button at the end of travel. I don't know that there's a use for this signal in EmulationStation yet, and there isn't a use for me specifically, so I didn't try very hard to figure out if it's a "hat" or an "axis" signal, or what the signal identifiers are.
Gyroscopic input I couldn't find a way to receive these signals in EmulationStation.
Putting it all together
You might need to find your own deviceGUID, I'm not sure. Use EmulationStation to configure your controller once, map a button or two, then exit EmulationStation, and then and modify your .emulationstation/es_input.cfg
config file by hand.
<inputConfig type="joystick" deviceName="Wireless Steam Controller" deviceGUID="03000000de2800004211000011010000">
<input name="up" type="button" id="17" value="-1"/>
<input name="down" type="button" id="18" value="1"/>
<input name="left" type="button" id="19" value="-1"/>
<input name="right" type="button" id="20" value="1"/>
<input name="a" type="button" id="2" value="1"/>
<input name="b" type="button" id="3" value="1"/>
<input name="x" type="button" id="4" value="1"/>
<input name="y" type="button" id="5" value="1"/>
<input name="hotkeyenable" type="button" id="12" value="1"/>
<input name="leftshoulder" type="button" id="6" value="1"/>
<input name="rightshoulder" type="button" id="7" value="1"/>
<input name="leftthumb" type="button" id="13" value="1"/>
<input name="rightthumb" type="button" id="1" value="1"/>
<input name="leftanalogup" type="axis" id="1" value="-1"/>
<input name="leftanalogdown" type="axis" id="1" value="1"/>
<input name="leftanalogleft" type="axis" id="0" value="-1"/>
<input name="leftanalogright" type="axis" id="0" value="1"/>
<input name="rightanalogup" type="axis" id="3" value="-1"/>
<input name="rightanalogdown" type="axis" id="3" value="1"/>
<input name="rightanalogleft" type="axis" id="2" value="-1"/>
<input name="rightanalogright" type="axis" id="2" value="1"/>
<input name="lefttrigger" type="button" id="8" value="4"/>
<input name="righttrigger" type="button" id="9" value="1"/>
<input name="select" type="button" id="10" value="1"/>
<input name="start" type="button" id="11" value="1"/>
<input name="pageup" type="button" id="6" value="1"/>
<input name="pagedown" type="button" id="7" value="1"/>
</inputConfig>
Thanks to wmarler! https://retropie.org.uk/forum/post/222838