Thoughts about the Steam Controller so far.

I got my pre-ordered Steam Controller about this time yesterday. Naturally I spent a lot of time playing with it. Here, in no particular order, are my thoughts.

The good:

  • The precision of the right pad is incredible. It lives up to its hype well. It’s not as nice as a keyboard and mouse, but it’s worlds better than a console controller.
  • It’s a lot more customizable than I was originally led to believe. Any button, trigger, stick, or pad can be assigned to any action from a mouse, keyboard, or gamepad. Literally anything.
  • Profile recommendation works pretty well. Users can create and share their mappings for a given game, and others can download and use these mappings. The default profiles are pretty nice as well.
  • The haptic feedback is spot on. “Trackball mode,” as it’s called, emulates the physics on a trackball on either of the thumb pads. The movement combined with the haptics makes it almost feel like a real trackball.
  • The setup was astonishingly easy. I unboxed it, plugged in the dongle, put in the batteries, and was playing Portal 2 with it in under 5 minutes.
  • You can connect the controller to your PC wirelessly using their funny little RF dongle, which works fine, or plug in to the PC using the supplied MicroUSB cable. If you plug in the USB cable, the batteries don’t discharge. If you use both connections, it will work much like a 360 controller with the Charge & Play kit. Seamless switching between wireless and wired.
  • It can emulate a gamepad, a keyboard and mouse, or both, as advertised. It does an excellent job of this.
  • It has gyroscopic sensors in it, kind of like a Wii controller, which I wasn’t expecting. It’s very accurate, and very cool. It also has two grip buttons which I used in Borderlands 2 last night for Sprint on the left and Reload on the right. This means less taking your thumb off the right pad during combat which I think helps gameplay a bit.

The bad:

  • There doesn’t seem to be any way to copy button mapping profiles to other computers. I often take a MacBook downstairs and stream games to it using Steam In Home Streaming. Seems I have to make another profile manually even for games I’m streaming. Stupid.
  • I can’t say I’m terribly amused that in order to use the controller, the game must be started by Steam. I’m not surprised that Valve chose to do it this way but it’s irritating nonetheless. I was able to add Minecraft as a “non-steam app” and was able to use my controller from there, but it’s extra work and certainly not as seamless as it could be.
  • Additionally, in order to change any mappings or controller settings, the game must be launched through Steam, in Big Picture mode. It kind of feels like Valve is forcing us to use Big Picture. I think Big Picture is nice enough, but I don’t game on a TV, so I really don’t need it. I just want to start a Steam game sit back in my chair, and play with my controller. Also, Big Picture doesn’t handle Alt-Tab switching well. So if you want to Alt-Tab between your game and a guide on the web, prepare for annoyance.
  • I think that the left pad is WAY too sensitive. It sometimes causes in game actions to happen when my thumb is hovering above it. This might be a problem with all Steam Controllers, or it could just be mine.
  • Not really a problem, but this device is radically different from any gaming input I’ve ever used. It’s kind of tricky to get used to.
  • I intensely dislike the location of the ABXY buttons. When playing Borderlands 2 last night, I finally hit Y so many times when trying to hit X accidentally, causing a weapon switch, that I had to unbind that button completely. I might get used to that, but if you’re used to an Xbox 360 or Xbox One controller, it’s maddening.

So, as you can see, most of the things I like about the controller are hardware related, and most things I dislike are software related. Seems like Valve has a heck of a device here, but Steam needs to catch up. All in all, I’m happy with it, and it really seems like a step in the right direction. It’s not the perfect device to make console gamers switch to PC, but it definitely helps the idea of a PC powering a TV-centric entertainment center. But, me, I like sitting at a desk. I like leaning back in my chair, with a controller, and having some good old fashioned fun. And this can help.

Update! I have managed to make it work with Diablo III. It’s a little sketchy, since Steam must launch the Battle.net client, which in turn launches Diablo III, but it does work, and it the input is actually pretty comfortable.

My experience with Asterisk/FreePBX and Broadvoice

Several months ago, a client approached me with questions about phone services. She was interested in upgrading from a Time Warner Cable 2-line phone system which as I recall cost around $50 a month. I had actually wired up most of the system myself. It was about as basic as it gets. With five employees and more possibly on the way, two lines was just not enough. On top of this, a number of small issues (echo, noise and call drops) began to crop up. It was time to upgrade, but to what?

I shopped around and received a number of quotes from several local and not-so-local organizations for PBX services and other multi-line solutions, but the prices were absurd. At one point I was told I would have to get a T1 line pulled ($550 a month!) and install a hardware PBX ($50,000! are you serious?) but for a small business in Maine this was unrealistic, at best. I had heard of Asterisk but I didn’t really know what it could do, besides somehow integrate with existing PSTN phone systems, somehow. After some research I realized that my impression of Asterisk, while somewhat accurate, was very incomplete. I was unaware that SIP trunking existed, or that it was possible to use an open-source Linux based PBX to create an all-digital phone system. Asterisk was the obvious choice.

Very early on, I happened upon this guide, which pointed me in the right direction. The guide is fairly outdated now, but I knew there was someone out there who had gone through a project like mine and lived to tell the tale. I started building the PBX, first in a virtual machine, to get a feel of the OS, software and configuration. This is where my first issue crept up: I could not get AsteriskNow, Digium’s own Asterisk CentOS distro, to boot correctly in a VM, and this was unacceptable as I had initially hoped to run it in a VM in a production environment. I tested out PBX in a Flash, which also would not boot in my VirtualBox VM, and finally FreePBX Distro, which installed and booted fine. Since AsteriskNow and FreePBX Distro, and possibly PBX in a Flash (don’t quote me on that one) are more or less the same thing (a Linux distro with Asterisk pre-installed and FreePBX as a web interface), I forged on.

Initially, my client and I opted to order one SIP phone, so that if things didn’t work out, we wouldn’t have invested a lot of money in phones. We opted for a Mitel 5224, per the CypressNorth guide above. After some tinkering, I was able to connect it to the server after making a matching extension in the FreePBX GUI >> Applications >> Extensions section. Oh, and since this temporarily stumped me, the default login details for the Mitel 5224 web interface are admin/5224. Screenshots of the configuration are in the gallery.

Things began moving a lot faster. I tracked down a couple SIP trunk providers, but the only one that really had a plan I liked was Broadvoice. They offered a business plan, at the time of this writing, for $55 a month, which included 5 ports (think of these as phone lines, or concurrent calls) and 1 DID (Direct Inward Dialing number, a phone number accessible from the PSTN). For a mere $2 more a month each, we could transfer the existing business phone numbers, so we opted to. We ordered four more phones, but by the time we decided to, the Mitel 5224 phones were no longer available on Amazon, so we instead ordered four Cisco SPA303 phones for about half the cost per phone as the Mitel! I had read that these phones are notoriously hard to configure as they’re designed to pull a configuration from a TFTP server, meaning that your DHCP server has to support Option 66. I really wanted to find an alternative because it’s ridiculous to set up a dedicated DHCP and TFTP server to provision four phones. I just started blindly adding configuration details in boxes in their web interfaces until I found the right combination. Here are some simple instructions. Browse to your SPA303’s web interface, and click on Admin Login in the upper right. Click on the Ext1 tab. Screenshots of the configuration are in the gallery.

Here’s where I ran into a bunch of problems, and I hope I am able to help a little if you have the same. I used Broadvoice, as mentioned before. My first problem is that I set this system up in my office initially, as a test bed. No reason to disrupt someone else’s business with my testing. Broadvoice wanted a static IP address, since they seem to use the IP as the only form of authentication. There really isn’t any authentication at all; they just send raw SIP data to the IP they have on file and there isn’t any support for dynamic IPs. I had to talk to someone in their “engineering” department to get them to agree to use my IP, which is dynamic, temporarily while I got everything configured. Meanwhile I asked my client to contact her ISP (Time Warner Business Class) and request a static IP. It was $23 a month for this static IP, which I find ridiculous, as my VPS provider will hand out additional static IPs for, I believe, $2 a month. She also increased her bandwidth caps from 7Mbps / 768kbps to 15Mbps / 2Mbps. Not a massive increase, but plenty of headroom. Anyone considering using SIP trunking should consider this. According to Broadvoice, the codec they use consumes 81kbps both ways per active call so I knew we’d need 405kbps for the phone system alone, which doesn’t leave a lot of headroom when the cap is 768kbps.

My next problem was the biggest one. Broadvoice sent me a PDF with the details I would need to register with their system. It did not work at all. I googled and found a page on their site with completely different details. These also failed. I spent over an hour on the phone with one of their technicians, who evidently teamed up with a co-worker, made their own Asterisk VM and made me a configuration that mostly worked. I truly appreciate the time they put into this, especially after I had read that Broadvoice is notoriously cold and unhelpful when it comes to BYOD PBX setups. Finally we nailed down a configuration that works. A screenshot of the settings is in the gallery, but I’ll post it here too. In FreePBX GUI >> Connectivity >> Trunks >> Add SIP Trunk:
Trunk name: Broadvoice
Maximum channels: 5 (your number of ports)
-- Outgoing Settings --
Trunk name: Broadvoice
-- PEER Details --
host=208.64.8.13&206.15.130.13
bindport=5060
type=peer
disallow=all
allow=ulaw&g729
dtmf=rfc2833

The Incoming settings and Registration are intentionally left blank. Go to FreePBX GUI >> Settings >> Asterisk SIP Settings and make the following changes:

  • NAT – yes if you’re behind a NAT which more than likely you are. If you don’t know this, Asterisk is NOT for you.
  • IP Configuration – Static IP
  • Try and have it auto configure. If it won’t, fill out the appropriate boxes.
  • Allow Anonymous SIP Calls – YES – I know it’s a security issue but we’ll set up a firewall. It’s all good.

Next I had to configure the Routes, so I’ll start with Incoming Routes. This is actually a lot easier than a lot of literature makes it seem. Fill in Description with something like “all” and set the Destination with wherever you want it to go. I set up an IVR and pointed my Incoming route to that. For Outbound Routes, it’s a little less simple, but it’s not terrible. Make a new outbound route, named “All” and use the Dial patterns wizard to put in dial patterns for “Local 7/10 digit” and “Toll free.” MAKE SURE you put your local area code in the prepend section for the rule that only matches NXXXXXX. This enables local 7-digit numbers. Set the sequence 0 to Broadvoice and you’re done.

For my IVR (Interactive Voice Receptionist, I think), it’s configured so that when a caller hits the PBX, it’s transferred to the IVR immediately. The caller heard something to the effect of “You’re reached [business]. Please dial an extension or remain on the line.” They have 3 seconds to dial an extension, and after that 3 seconds the call is transferred to a Ring Group that rings all the phones in the office until one picks up. If no one does, the call is sent directly to my client’s voicemail on extension 100. Ring Groups are very straightforward, so I won’t explain it here. Screenshots are in the gallery.

Extensions seem extremely confusing but they’re really not; there are just a lot of options that aren’t really needed for anything normally. To add an extension, choose Generic SIP Device, and fill out the following boxes:

  • User Extension – something like 100
  • Display name – the user’s name, usually
  • secret – under Device Options, this should be a strong password.
  • Assign to a Default user – Create new user
  • Password – same thing you set your secret to
  • Voicemail status – Enabled (if you want voicemail on the extension)
  • Voicemail Password – PIN. I set it to 1234 then let the users choose their own from the menu

Done.

By now you should have a mostly working PBX, but there are a few things that need attention. I forgot to mention it before, but ports 5060 and 10000-20000, UDP, need to be forwarded to the PBX. This setup is behind a DD-WRT router and I had no issues with it, but I had a lot of problems at my test site with my pfSense box mangling the SIP headers and replacing the Public IP in it with the PBX’s internal network IP. This prevented inbound audio, and I did end up fixing it but it’s not worth writing here. I’ll make a separate post about it.

Now, this is enormously important. Set up iptables on the PBX. Seriously. We have Anonymous SIP Calls enabled, and this means ANYONE can place calls on your PBX, or at least make the phones ring, crash it, etc. Secure your box! I’m using Broadvoice business, so I called and found what IPs they’re going to send SIP data from, and I configured the iptables appropriately. I decided not to use fail2ban and rely solely on my DD-WRT firewall and my secondary iptables. Here is my /etc/sysconfig/iptables on the PBX:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1:148]
:WHITELIST - [0:0]
-A INPUT -p udp -m multiport --dports 4569,5000:5082 -j WHITELIST
-A INPUT -s 10.0.0.0/8 -j ACCEPT
-A INPUT -s 127.0.0.0/8 -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p udp -m udp -s 208.64.8.13 --dport 5060 -j ACCEPT
-A INPUT -p udp -m udp -s 206.15.130.13 --dport 5060 -j ACCEPT
-A INPUT -p udp -m udp -s 208.64.8.13 --dport 10000:20000 -j ACCEPT
-A INPUT -p udp -m udp -s 206.15.130.13 --dport 10000:20000 -j ACCEPT
-A INPUT -j DROP
COMMIT

This allows all localnet traffic and restricts all SIP and RTP UDP traffic to those two IPs. It drops all other traffic. Read up on iptables if you don’t understand it.

That’s all that I can think of that went into this, really. Everything else was extremely minor. If you have any questions, I guess, leave a comment.

EDIT 6/12/2014 – UPDATE

Everything is live and working perfectly now. I had no issues at all with the dd-wrt firewall, but my client opted to but a SonicWall TZ205 firewall for VPN purposes. I ran into a very interesting and inconsistent issue with this. I could dial in to the office, and use DISA to dial out, but if someone in the office tried to dial out the SonicWall would deny UDP SIP traffic. I ended up having to disable NAT in Asterisk’s SIP settings and then check the “Enable Consistent NAT” option in the SonicWall’s VoIP settings. When I said “inconsistent,” I meant that the rules didn’t always apply. When I first installed the SonicWall, I was able to dial out. Strange. Must by why the option is called “Consistent NAT.”

Oh, by the way, now would be a good time to add this tidbit about Time Warner Cable. They were the old phone provider my client had. It took two months for them to approve the port of the two phone numbers to the new carrier. Two months. During this time I was contacted numerous times by TWC claiming that I had given them the wrong phone number, the wrong address, the wrong ZIP code, or the wrong account number. Finally I asked my client for a copy of their TWC contract with all the information on it, which I scanned and sent to TWC. The claims from them of course continued. It was truly unbelievable. So, if you’re on Time Warner and planning a project like this, you might want to start the number transfer process first.

How to fix controller issues in Saints Row: The Third and Saints Row IV

Can’t promise this will work for you but it did work for me. My issue was that SR4 would not detect my official wireless 360 controller but I did not have a Nostromo or any other peripheral connected, rendering other advice useless.

Exact terms of my issue:
– Controller not detected in SR4 AT ALL
– worked fine in all other games but SR franchise
– Windows 8.1
– Used to work fine, stopped working suddenly
– No wacky gamer peripherals to interfere with 360 controller

Here’s what I did:
– Verified game cache, rebooted (no effect)
– delete game and reinstall from backup, reboot (no effect)
– reinstall 360 controller drivers, reboot (no effect)
– delete game, reinstall from internet, reboot (no effect)

Here’s what worked:
– Followed this guide to be able to view unused drivers in devmgr
– opened devmgr and deleted greyed out drivers in the following areas
– – Xbox 360 Peripherals
– – Sound, video and game controllers
– – Mice and other pointing devices
– – Human Interface Devices
– rebooted
– massive win! It’s working!

Seems to me that an old Bluetooth driver or something was interfering with SR4 only for reasons I can’t explain but it’s gone and I fixed it.

Quote from the link in the website (in case it goes away):

To remove old and unused drivers from your Windows computer, first open Start Menu and right click on Computer and select Properties. From the left side panel, click on Advanced system settings and click on Environment Variables. Alternatively, simply open Control Panel and type Environment Variables.

Now under the User variables box, click on New and type

devmgr_show_nonpresent_devices
in the Variable Name text box & 1 in the Variable Value box. This will set a flag to allow you to now view unused devices.

Now type devmgmt.msc in start search and hit Enter to open the Device Manager.

device manager uninstall 400×296 How to remove old device drivers in Windows 7 | 8

Click View tab and select Show hidden devices. Expand the branches in the device tree & look for the faded icons. These indicate unused device drivers.

Right click on it and select Uninstall.