Getting your X10 CM19A Module Working in Linux
A short time ago, I wrote on how to get your X10 CM17A Firecracker module working in Linux. Since then, I have migrated to a new home server, and I am left with no serial ports. That means that I have to get a USB module working. I already have the CM19A here at home, so I went on a task to find a driver to work for this one. I did succeed, so read on to find out how you can get it working yourself.
I will show you how to do this using Ubuntu 7.10 using the Generic desktop kernel. This tutorial can probably be adapted to other Linux/Unix distros. I tried it with the Ubuntu server kernel, but had no success. If you can get it, please post how you did it.
Setting it Up
- Plug in your USB CM19a Module. Then fire up a terminal and type:
dmesg
The last several lines should look like this:
[ 4037.694734] usb 1-2.2: new low speed USB device using uhci_hcd and address 6
[ 4037.834968] usb 1-2.2: configuration #1 chosen from 1 choice
[ 4038.121493] input: X10 Wireless Technology Inc USB Transceiver as /class/input/input7
[ 4038.123803] usbcore: registered new interface driver ati_remote
[ 4038.124444] /build/buildd/linux-source-2.6.22-2.6.22/drivers/input/misc/ati_remote.c: Registered USB driver ATI/X10 RF USB Remote Control v. 2.2.1
[ 4038.128544] /build/buildd/linux-source-2.6.22-2.6.22/drivers/input/misc/ati_remote.c: Weird data, len=1 ff 00 00 00 00 00 …
[ 4038.212107] lirc_dev: IR Remote Control driver registered, at major 61
[ 4038.235359]
[ 4038.235365] lirc_atiusb: USB remote driver for LIRC $Revision: 1.61 $
[ 4038.235379] lirc_atiusb: Paul Miller <pmiller9@users.sourceforge.net>
[ 4038.276958] usbcore: registered new interface driver lirc_atiusbThe important thing to note is that it is using the “lirc_atiusb” driver. This doesn’t work with this device. We need to find a better one.
- Download X10MMS and extract it.
- Go back to your terminal, and cd into that extracted directory.
- As per the instructions in the software’s readme file, run the following commands:
sudo make
sudo make install
sudo modprobe x10-cm19aWe’re not done yet. If you were to plug in your device, and run dmesg again, you would notice that it’s still running that pesky lirc_atiusb driver, so let’s blacklist it.
- Type in a terminal:
sudo gedit /etc/modprobe.d/blacklist
- Then add to the end of the file:
# causes the custom cm19a driver to fail
blacklist lirc_atiusb
blacklist ati_remote - Type in a terminal:
sudo rmmod lirc_atiusb
sudo rmmod ait_remote - One last thing…this step allows all users to access the device. Some may say this is a security risk, but I don’t want to be root to use it.Type in the following command to open the udev rules file:
sudo gedit /etc/udev/rules.d/40-permissions.rules
- Add the following to the end of the file:
KERNEL==”cm19a0″, MODE=”0666″
- One last commad to run:
sudo chmod 0666 /dev/cm19a0
- You’re done, yay! Now it’s time to test it out. Remember, this driver only provides an interface to the module. You will have to write your own software / scripts / cron jobs to make it useful.The interface works by sending strings to it. To turn on A1, we send +A1 to it. To turn off C4, we send -C5 to it. In practice, type in the following command to turn on A1:
echo +A1 > /dev/cm19a0
Hopefully, your transeiver module will turn on.
Update (9/14/2008)
I just went back and used this post to reconfigure this device on the new kernel. Turns out that for Ubuntu Hardy Heron (8.04), an additional kernel module needs to be blacklisted: ati_remote. That module has been added to the previous steps.
Troubleshooting
If your test commands are not working, make sure that the driver is being loaded properly. Disconnect the module, wait a few seconds, and reconnect the device. Then type this in a terminal:
dmesg
The last several lines should look like this:
[ 7110.487961] usb 1-2.2: new low speed USB device using uhci_hcd and address 12
[ 7110.629155] usb 1-2.2: configuration #1 chosen from 1 choice
[ 7110.632117] x10-cm19a: Probing x10-cm19a…
[ 7110.632136] x10-cm19a: Found input endpoint: 81, and output endpoint: 2
[ 7110.637872] x10-cm19a: freeing buffer in callback (0xd78eb0c0/0x178eb0c0)
[ 7111.197615] x10-cm19a: freeing buffer in callback (0xd78eb0c0/0x178eb0c0)
[ 7111.197863] x10-cm19a: X10 CM19A USB RF Transceiver connected.
[ 7111.197870] x10-cm19a: X10 CM19A USB RF Transceiver initialized to listen for remote controls.
[ 7111.205631] x10-cm19a: freeing buffer in callback (0xd78eb0c0/0x178eb0c0)
If they don’t, make sure you followed all the steps. If you didn’t understand one of them, please post a question.
More Information
A couple of tips were taken from Dan at Zenlike.ca -> Another homebrew Linux X10 Dawn simulator
The software driver mentioned in this entry can be found here -> X10MMS
This entry was posted on Thursday, December 27th, 2007 at 12:08 pm and is filed under Linux. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
minesh September 6th, 2008 at 9:29 pm
after I rebooted my system, I am able to see /dev/cm19a0
and echo +A1 > /dev/cm19a0 works.