The ATI Remote Wonder Plus is the newest remote made/branded by ATI. The remote is much slimmer than prior remotes, has a better shape that fits the hand, and has much nicer rubber buttons. The new remote uses 2 AAA batteries which contributes to the small size and low weight.
Unfortunately, the RWP is not supported by Linux. Neither the kernel module nor the LIRC lirc_atiusb module support the remote. After snooping the USB interface in Windows, I made a few changes to the lirc_atiusb.c file. These changes are details below and the format is the standard diff format. See patch at bottom of this page.
Now the remotely works 100% except the button presses alternate codes. My temporary solution is to simply add both codes to the lircd.conf. This works very well but is of course less than ideal. But this can be fixed later. I want to use my fancy remote that is so much nicer than the old ATI remotes.
Here is how to put this all together if you're a bit uncertain:
1) Get LIRC source.
2) Apply patch (cd src/drivers/lirc_atiusb, patch -p1 < patchfile.txt).
3) Compile, install.
4) Put in lircd.conf in /etc.
5) Start smiling!
LIRC configuration file:
lircd.conf
(note: I've been lazy so not every key has the alernate yet but the important ones for MythTV do)
Patch:
lirc_atiusb.c-diff.txt
--- lirc_atiusb.c 2006-01-29 12:25:57.000000000 -0600
+++ ../../../lirc-good/drivers/lirc_atiusb/lirc_atiusb.c
2006-02-07 19:07:03.362306424 -0600
@@ -147,9 +147,9 @@ static struct usb_device_id usb_remote_t
/* init strings */
#define USB_OUTLEN 7
-static char init1[] = {0x01, 0x00, 0x20, 0x14};
-static char init2[] = {0x01, 0x00, 0x20, 0x14, 0x20, 0x20, 0x20};
-
+static char init1[] = {0x80, 0x05, 0x1b, 0x15, 0x14, 0x20, 0x24, 0x15};
+static char init2[] = {0x83, 0x03};
+static char init3[] = {0x84, 0xd7, 0x020};
struct in_endpt {
@@ -1034,8 +1034,9 @@ static void send_outbound_init(struct ir
usb_sndintpipe(ir->usbdev,
oep->ep->bEndpointAddress), oep->buf,
USB_OUTLEN, usb_remote_send, oep, oep->ep->bInterval);
- send_packet(oep, 0x8004, init1);
- send_packet(oep, 0x8007, init2);
+ send_packet(oep, 0x8007, init1);
+ send_packet(oep, 0x8002, init2);
+ send_packet(oep, 0x8003, init3);
}
}