Anatiferous blog | Move every zig.

Meta-Site

Welcome to Anatiferous: Using barnacles to make geese since 1689!

Howdy! This is my (William Reading's) webpage. At the moment, I only have this blog script and my gallery up, but I hope to get more stuff on this page at some point, or so I thought when I created this site years ago. Updates and shiny new copy to eventually go here. If you'd like to contact me to point out that I've done something to break XHTML/CSS standards or heaven forbid--look at my Vita--drop me a line at my e-mail address bill +spam @ [ELEPHANT] aggienerds.org. Simply remove "+spam", the spaces and the pachyderm along with its brackets and that address will reach me. I'm also available on Jabber/GChat/AIM/MSN with the same address above.

2/11/2011

Using Ekiga with a Polycom CX200 on Linux

Filed under: — bill @ 2:07 am

I happened to have a half broken Polycom CX200 lying around, and I discovered that it mostly works aside from the LED on the front. The other thing I noticed was that if I plug it in on linux, the hiddev driver captures it and pulseaudio hooks up the microphone and speakers. It occurred to me that this could be really handy for use with something like Ekiga as a softphone.

I unloaded the hiddev driver and did an lsusb -vvv, to find that the device actually uses a telephony hid page and a standard on/off hook data field:

Report Descriptor: (length is 151)
Item(Global): Usage Page, data= [ 0x0b ] 11
Telephony
Item(Local ): Usage, data= [ 0x01 ] 1
Phone
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Main ): Collection, data= [ 0x02 ] 2
Logical
Item(Global): Report ID, data= [ 0x01 ] 1
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0x01 ] 1
Item(Global): Report Count, data= [ 0x01 ] 1
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Global): Usage Page, data= [ 0x08 ] 8
LEDs
Item(Local ): Usage, data= [ 0x17 ] 23
Off-Hook
Item(Main ): Output, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Report Count, data= [ 0x07 ] 7
Item(Main ): Output, data= [ 0x03 ] 3
Constant Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Main ): Collection, data= [ 0x02 ] 2
Logical
Item(Global): Report ID, data= [ 0x02 ] 2
Item(Global): Report Count, data= [ 0x01 ] 1
Item(Local ): Usage, data= [ 0x09 ] 9
Mute

(some bits snipped)

Fiddling with accessing the hiddev device note, I found that it was pretty easy to read off hid events coming off the device. The next part was to try to hook it up to Ekiga’s dbus interface. Unfortunately, Ekiga’s dbus interface has been a bit stale since the 3.0 release, so I had to patch it up to add the hangup/answer events that would be useful to wire up to the buttons. It’s a bit hacky because it uses the reuses the private data that the call window is holding onto for itself, but it’s a lot more convenient than going through the call manager.

I hooked up a dbus perl script that I wrote to test my dbus changes to the hiddev script and voila, my CX200 device works properly with ekiga on linux, at least as far as answering and hanging up go. Patch to Ekiga and perl script here.

 

Google
 
Web anatifero.us
aggienerds.org

Powered by WordPress