In part for my own documentation, and in part for others' benefit, I wanted to document how I got everything working. In short, it's actually rather easy.
The first step is to simply plug in the Keene FM Transmitter into a USB port. The device is automatically detected as a USB sound device. If you start PulseAudio Volume Control (from terminal, run pavucontrol
), you will now see a new Output Device called B-LINK USB Audio. However, this will not give you any controls for the FM Transmitter. Getting access to that differs depending on which kernel version you have.(don't know minimum, but 3.2.18 works) <= Kernel Version < 3.4.x
3.4.x<= Kernel Version < 3.7.1
- In Synaptic, make sure you have libusb-compat-devel (the appropriate version).
- Get the Keene Controls program from http://mister-muffin.de/keene/ (all you need is Makefile and keenectl.c)
- Compile Keene Control program by running make. Compilation is very fast. When done, you should have a keenectl executable. This is a command line only tool. Unfortunately, the only documentation for how to use this tool is only the developer's webpage (http://blog.mister-muffin.de/2011/03/14/keene-fm-transmitter/). I used the default settings to transmit on 88.1 FM using ./keenectl 0 50us stereo 88.1f 120 enable unmute
3.7.1 <= Kernel Version < (when will the patch be incorporated)?
- The kernel source code comes with a proper v4l2 based driver for Keene FM Transmitter. It is located in drivers/media/radio/radio-keene.c and can be enabled in the kernel build as a module using CONFIG_USB_KEENE which can be accessed from Device Drivers --> Multimedia Support --> AM/FM Radio receivers/transmitters support and then enabling the Radio Adapters --> Keene FM transmitter.
- Plug in the Keene FM Transmitter into a USB port. From a terminal, run lsmod | grep keene and you should see the presence of the radio_keene module.
- At this point, you can run dmesg | grep keene to confirm that v4l2 has indeed create a device for you. In my case, I get radio-keene 3-1:1.2: V4L2 device registered as radio0 and therefore, I also see /dev/radio0.
- Knowing this, I can now control the FM transmitter settings using the standard v4l2-ctl program
- To set the transmitter frequency, simply run v4l2-ctl -d /dev/radio0 --set-freq=88.1
- To be able to control other settings, you first have to find out their names. Do this by running v4l2-ctl -d /dev/radio0 --all -L. Then to change the desired control, run v4l2-ctl -d /dev/radio0 -c controlName=controlValue, where controlName and controlValue correspond to whatever control you are trying to tweak (i.e. mute=1)
It turns out that 3.7.1 changed its V4L2 interface just a bit. Unfortunately, the Keene driver still compiles, but you cannot change the transmitter frequency without first applying a patch. (see http://thread.gmane.org/gmane.linux.drivers.video-input-infrastructure/58934
for more detail, see below for actual patch).
diff --git a/drivers/media/radio/radio-keene.c b/drivers/media/radio/radio-keene.c
index e10e525..296941a 100644
@@ -374,6 +374,7 @@ static int usb_keene_probe(struct usb_interface *intf,
radio->vdev.ioctl_ops = &usb_keene_ioctl_ops;
radio->vdev.lock = &radio->lock;
radio->vdev.release = video_device_release_empty;
+ radio->vdev.vfl_dir = VFL_DIR_TX;
radio->usbdev = interface_to_usbdev(intf);
radio->intf = intf;
After applying this patch, the rest of the process is identical to the 3.4.x kernel flow.