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.