Fixing sound on the PhidgetSBC3

When I got my PhidgetSBC3 I was really excited because I was going to try to get go running on it ([which I did](/2013/03/go-on-the-phidgetsbc3-part-1/)) but while it recognized my [Logitech Z205 speakers](http://www.amazon.com/Logitech-984-000108-Laptop-Speaker-Z205/dp/B0036VO6IC), playing any audio file resulted in a lot of crackling ([hear for yourself](http://f.cl.ly/items/2H0B2Y450Q2I1U1Z2d13/Memo.m4a)). After searching until my eyes bled months ago, I gave up. But recently I took another stab (because I want our foosball table horn back at Shopify) and finally found a solution then I figured out the actual problem.

I’ve tried solution after solution hoping it would work because none of the regular troubleshooting would work as the device was being recognized and was able to be used. It just sounded horrible. I did find [this wiki entry for archlinux for crackling sound with USB devices](https://wiki.archlinux.org/index.php/Advanced_Linux_Sound_Architecture#Crackling_sound_with_USB_devices) but that solution didn’t help. But did make me try restarting the PhidgetSBC3 which then lead some actual errors when trying to use alsa.

“`
root@phidgetsbc:~# alsamixer
cannot open mixer: No such file or directory
root@phidgetsbc:~# aplay /usr/share/sounds/alsa/Front_Center.wav
ALSA lib confmisc.c:768:(parse_card) cannot find card ‘0’
ALSA lib conf.c:4241:(_snd_config_evaluate) function snd_func_card_driver returned error: No such file or directory
ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings
ALSA lib conf.c:4241:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
ALSA lib confmisc.c:1251:(snd_func_refer) error evaluating name
ALSA lib conf.c:4241:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:4720:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM default
aplay: main:682: audio open error: No such file or directory
“`

Searching for this lead me to [this forum post about a usb speaker not being detected](http://forum.doozan.com/read.php?2,2449) and suggested creating a `/etc/asound.conf` file and restarting alsa. This solved the problem of not finding the device and the crackling. The `card 1` in the file suggested an ID of some sort and then I checked the ID of the device and found it matched.

“`
root@phidgetsbc:~# cat /proc/asound/modules
1 snd_usb_audio
“`

I wanted to confirm this was the device missing issue so I restored to factory and plugged the Z205 in and looked again.

“`
root@phidgetsbc:~# cat /proc/asound/modules
0 snd_usb_audio
“`

And suddenly it makes sense. For whatever reason, before installing `alsa-base` the PhidgetSBC3 will use ID 0 for the Z205 but after that it will use ID 1. I have no idea why the crackling went away but it might have something to do with setting `type hw` or maybe it just doesn’t like ID 0.

**TL;DR**

If you’re trying to get sound on the PhidgetSBC3 to work. Try this and restart.

“`
root@phidgetsbc:~# apt-get install alsa-base alsa-utils -y
root@phidgetsbc:~# cat > /etc/asound.conf
pcm.!default {
type hw
card 1
}

ctl.!default {
type hw
card 1
}
root@phidgetsbc:~# /etc/init.d/alsa-utils restart
[ ok ] Shutting down ALSA…done.
[ ok ] Setting up ALSA…done.
“`

Go on the PhidgetSBC3 Part 2

Now that go is installed ([see Part 1](/2013/03/go-on-the-phidgetsbc3-part-1/)), you can get down to business and start using phidgets. I’ve written a go phidgets library (currently only `InterfaceKit` and `IR` phidgets are implemented, open an issue or pull request if you want more) at [github.com/samuelkadolph/go/phidgets](https://github.com/samuelkadolph/go/tree/master/phidgets).

Continue reading “Go on the PhidgetSBC3 Part 2”

Go on the PhidgetSBC3 Part 1

The latest version of the [PhidgetSBC line](http://www.phidgets.com/products.php?category=21) includes an ARMv5 processor which means it now has support for go. Unfortunately the current golang package in the debian repository does not work but I was able to [compile golang from source](http://golang.org/doc/install/source) on the PhidgetSBC3 and it worked (including [`cgo`](http://golang.org/cmd/cgo/)). Thanks to the [
“The Go Language Gophers” team](https://launchpad.net/~gophers/+archive/go) I downloaded the `golang-tip` package and built it on my PhidgetSBC3. I’ve made this `deb` available in my apt repository so you can easily install go and get rocking.

Continue reading “Go on the PhidgetSBC3 Part 1”

Fix locales on the PhidgetSBC3

If you are using a PhidgetSBC3 you might see this a lot:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = “en_CA.UTF-8”
are supported and installed on your system.
perl: warning: Falling back to the standard locale (“C”).
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

This is because perl is very vocal when you are missing the locales that your environment specifies. The fix is easy, just generate the locales that you want to use (`en_CA.UTF-8` is the default). This assumes you have already set up SSH on your PhidgetSBC3.

1. Enable full Debian Package Repository
Enable the full Debian Package Repository
2. Update apt
* `apt-get update`
3. Install the locales package
* `apt-get install locales -y`
4. Add the `en_CA.UTF-8` locale
* `echo “en_CA.UTF-8 UTF-8” >> /etc/locale.gen`
5. Generate the locale
* `locale-gen`

You should see it generating the locale you specified and once it’s done, you will no longer see the locale error messages.

PhidgetSBC3 and D-Link DWA-160

> There’s actually a much easier way of doing this. Just `apt-get install firmware-linux-free` and boom! You get the carl9170 firmware and the DWA-160 is recognized.

I recently got my hands on a [PhidgetSBC3](http://www.phidgets.com/products.php?product_id=1073_0) and plugged a [D-Link DWA-160](http://www.dlink.com/ca/en/home-solutions/connect/adapters/dwa-160-xtreme-n-dual-band-usb-adapter) into and found that it already had support built into the kernel but it had an error. So I went searching in the `/lib/firmware` directory and saw there was no `carl9170-1.fw` file. So I downloaded and when I plugged the DWA-160 back in it worked and correctly showed up in the web interface. Installing it is very easy:

apt-get install curl -y
curl -L http://linuxwireless.org/en/users/Drivers/carl9170/fw1.9.7?action=AttachFile&do=get&target=carl9170-1.fw > /lib/firmware/carl9170-1.fw