Debian 6 GPIO MC PCIDIO24
From Rivendell Wiki
- Debian 6 Minimal Gnome Install
- Installing Pulse Audio
- Installing JACK2
- Setup JACK2 with Pulse Audio
- Install Rivendell 2.1.1 from Source
- Getting Rivendell, JACK2 and Pulse Audio working together
- Connecting to JACK via Rivendell Macros
- Connecting to JACK via JACK Patch Bay
- Configuring GPIO with Rivendell
- Summary Install Process
- Links to scripts and other files used
So you've followed the guide and all is well but you'd like to have some Fader activated play back (or any other combination of GPIO support). As usual if you're working with JACK as set up in this guide, it does introduce one major problem.
GPIO can't be accessed unless you run the Rivendell daemons as the root user. You can make JACK run as root but then you have all sorts of other problems as every program needs to be run as root in order to access JACK.
So this guide will do the basics of installing the Rivendell GPIO driver for the Measurement Computing PCI-DIO24 Card. Unless you are handy with C++ I don't recommend trying to get other cards to work with Rivendell as you'll need to write a custom driver.
Installing the GPIO pre-reqs:
sudo apt-get install build-essential linux-headers-`uname -r`
If you've followed the guide, you will already have build-essential so all you'll be installing are the kernel headers for your current kernel (substituted by uname -r).
Once thats complete you'll need to download the GPIO source from the Rivendell website (for the sake of the guide I'll assume you've downloaded it to your home directory):
tar -zxvf gpio-1.1.0.tar.gz
cd ~/gpio-1.1.0.tar.gz ./configure --prefix=/usr
Before installing, the make install script expects the following directory to be available: /lib/modules/`uname-r`/extra. If you don't make this directory the make install step will fail complaining that the directory doesn't exist so lets make that now:
sudo mkdir /lib/modules/`uname -r`/extra
sudo make install
With everything in place, we need to update the module database so that the kernel recognises the new gpio driver module:
sudo depmod -a
Finally we can manually activate the gpio module for testing (in theory a reboot should also detect this on start up and load the module automatically):
sudo /sbin/modprobe gpio
With that done you should find you have a new device under /dev/gpio0. If this isn't there check your dmesg and other system logs to try and hunt for clues to why theres an error.
Please note that Under Ubuntu 10.04 I had an error here that said the resource was busy and could not be added. I believe this is some sort of conflict with the comedi libraries supplied with Ubuntu. I could never figure out how to stop this happening and was a large part of the reason why I switched to Debian.
Time for some testing:
NB: The Measurement Computing PCI-DIO24 card has several modes of operation. You can usually specify how you want this configured at the point of sale however being in the UK I wasn't given this option so I just received a board without any of the extra options.
By default, you don't have any pull down resistors soldered to the board which means you'll have lots of spurious IO signals lighting up. You can solve this by either purchasing SIPs for the board or making your own mini circuits (More info including circuit diagrams...).
Correcting the permissions
As previously mentioned when using JACK the Rivendell daemons run as the local user. Unfortunately by default /dev/gpio0 is owned and accessed only by root. So we need to change the permissions so that other users can access the device, all we have to do is run:
sudo chmod a+rw /dev/gpio0
Unfortunately this gets reset upon a reboot so we'll need to append some changes to /etc/rc.local so that these permissions get applied at boot up.
sudo vi /etc/rc.local
Inside this file add the following before the exit 0 line:
#Rivendell GPIO needs a+rw permissions #Test for the existence of /dev/gpio0 logger Rivendell GPIO: Amending gpio0 permissions if [ -e "/dev/gpio0" ] then chmod a+rw /dev/gpio0 logger Rivendell GPIO: Permissions changed on /dev/gpio0 to a+rw fi
Its a good idea to invoke rc.local now to check for typos:
If you get no errors run
sudo tail /var/log/messages
You should see the two logger lines in the system logs at which point all you need to do is restart the Rivendell services (or reboot) and you're done.
Great so you now have a working card and you can see things happening in gpitest and/or gpotest (if you want outputs). We still have to add this to the host in Rivendell so lets do that. Open up rdadmin --> Manage Hosts and edit the host with the GPIO card. Click on Switchers GPIO.
Please note that on most GPIO cards I've come across you have GPIO blocks that are grouped. The MC PCI-DIO24 card is no different as there are 3 sets of 8 GPIO pins (marked A, B and C). You may find that on some cards you have to have entire blocks as either input or output. I'm not sure if this card also works this way but its something to remember if you have issues trying to get 3 GPOs and 21 GPIs.
With this decided, click on Configure GPIs and assign macro carts to the inputs so that Riv will actually do something. Repeat for the GPOs and you've successfully setup GPIO under Rivendell in Debian 6.
For testing of the GPIs I simply made a whole bunch of macro carts that changed the rdairplay label. E.g. LB GPIO1! all the way to LB GPIO24!. That way I could see things happening in airplay to confirm everything was moving along nicely.
Opening up gpio0 to all users might not be a good idea. Consider changing the group of the device to Rivendell and adding just the group permissions of rw to the device. That way you're not opening things up to other users that might not be authenticated.