From: arandamandi <mes...@ti...> - 2007-01-21 12:06:05
|
Vassilis Virvilis wrote: > > arandamandi wrote: >> > > >>> I tried latest cvs and 0.8.1 >>> but nothing to do..:( >>> Please help >>> >> Solved,i have create a patch >> for driver lirc_atiusb,on my pc works >> on others..i don't know >> :) >> http://www.nabble.com/file/5594/lirc_atiusb.diff.gz lirc_atiusb.diff.gz > > Hi, > > Since you are a lirc_atiusb user and I don't own a ATI remote, would you > care to test this patch and report back. The patch adds support for XBOX > and I had to reorganize atiusb code. I would like to make sure there are > no ill effects for the already supported models. > > http://sourceforge.net/mailarchive/forum.php?thread_id=31318758&forum_id=5339 > > I am attaching also to make it easier if you decide to test it. > > Best regards > > .bill > --- ../../lirc-modules.orig/lirc/drivers/lirc_atiusb/lirc_atiusb.c > 2006-09-18 16:39:16.000000000 +0300 > +++ drivers/lirc_atiusb/lirc_atiusb.c 2006-12-16 20:46:04.000000000 +0200 > @@ -11,6 +11,10 @@ > * "USB StreamZap remote driver" (LIRC) > * Artur Lipowski <ali...@kk...>'s 2002 > * "lirc_dev" and "lirc_gpio" LIRC modules > + * Michael Wojciechowski > + * initial xbox support > + * Vassilis Virvilis <va...@ii...> 2006 > + * reworked the patch for lirc submission > * > * $Id: lirc_atiusb.c,v 1.53 2006/03/04 22:36:38 lirc Exp $ > */ > @@ -64,9 +68,9 @@ > #define DRIVER_DESC "USB remote driver for LIRC" > #define DRIVER_NAME "lirc_atiusb" > > -#define CODE_LENGTH 5 > -#define CODE_LENGTH_ATI2 3 > -#define CODE_MIN_LENGTH 3 > +#define CODE_LENGTH code_length[ir->remote_type] > +#define CODE_MIN_LENGTH code_min_length[ir->remote_type] > +#define DECODE_LENGTH decode_length[ir->remote_type] > > #define RW2_MODENAV_KEYCODE 0x3F > #define RW2_NULL_MODE 0xFF > @@ -89,6 +93,14 @@ > if(debug) printk(KERN_DEBUG fmt, ## args); \ > }while(0) > > +// ATI, ATI2, XBOX > +static const int code_length[] = {5, 3, 6}; > +static const int code_min_length[] = {3, 3, 6}; > +static const int decode_length[] = {5, 3, 1}; > +// USB_BUFF_LEN must be the maximum value of the code_length array. > +// It is used for static arrays. > +#define USB_BUFF_LEN 6 > + > static int mask = 0xFFFF; // channel acceptance bit mask > static int unique = 0; // enable channel-specific codes > static int repeat = 10; // repeat time in 1/100 sec > @@ -120,6 +132,8 @@ > > #define VENDOR_ATI1 0x0bc7 > #define VENDOR_ATI2 0x0471 > +#define VENDOR_MS1 0x040b > +#define VENDOR_MS2 0x045e > > static struct usb_device_id usb_remote_table [] = { > { USB_DEVICE(VENDOR_ATI1, 0x0002) }, /* X10 USB Firecracker Interface */ > @@ -140,6 +154,8 @@ > { USB_DEVICE(VENDOR_ATI2, 0x0602) }, /* ATI Remote Wonder 2: Input > Device */ > { USB_DEVICE(VENDOR_ATI2, 0x0603) }, /* ATI Remote Wonder 2: Controller > (???) */ > > + { USB_DEVICE(VENDOR_MS1, 0x6521) }, /* Gamester Xbox DVD Movie Playback > Kit IR */ > + { USB_DEVICE(VENDOR_MS2, 0x0284) }, /* Microsoft Xbox DVD Movie Playback > Kit IR */ > { } /* Terminating entry */ > }; > > @@ -168,7 +184,7 @@ > #endif > > /* handle repeats */ > - unsigned char old[CODE_LENGTH]; > + unsigned char old[USB_BUFF_LEN]; > unsigned long old_jiffies; > }; > > @@ -206,7 +222,8 @@ > /* remote type based on usb_device_id tables */ > enum { > ATI1_COMPATIBLE, > - ATI2_COMPATIBLE > + ATI2_COMPATIBLE, > + XBOX_COMPATIBLE > } remote_type; > > /* rw2 current mode (mirror's remote's state) */ > @@ -369,13 +386,14 @@ > > static void print_data(struct in_endpt *iep, char *buf, int len) > { > - char codes[CODE_LENGTH*3 + 1]; > + const int clen = code_length[iep->ir->remote_type]; > + char codes[clen * 3 + 1]; > int i; > > if (len <= 0) > return; > > - for (i = 0; i < len && i < CODE_LENGTH; i++) { > + for (i = 0; i < len && i < clen; i++) { > snprintf(codes+i*3, 4, "%02x ", buf[i] & 0xFF); > } > printk(DRIVER_NAME "[%d]: data received %s (ep=0x%x length=%d)\n", > @@ -506,7 +524,7 @@ > int mode, i; > char *buf = iep->buf; > > - if (len != CODE_LENGTH_ATI2) { > + if (len != CODE_LENGTH) { > dprintk(DRIVER_NAME > "[%d]: Huh? Abnormal length (%d) buffer recieved.\n", > ir->devnum, len); > @@ -598,6 +616,37 @@ > return SUCCESS; > } > > +static int code_check_xbox(struct in_endpt *iep, int len) > +{ > + struct irctl *ir = iep->ir; > + const int clen = CODE_LENGTH; > + > + if (len != clen) > + { > + dprintk(DRIVER_NAME ": We got %d instead of %d bytes from xbox ir.. > ?\n", len, clen); > + return -1; > + } > + > + /* check for repeats */ > + if (memcmp(iep->old, iep->buf, len) == 0) > + { > + if (iep->old_jiffies + repeat_jiffies > jiffies) > + { > + return -1; > + } > + } > + else > + { > + // the third byte of xbox ir packet seems to contain key info > + // the last two bytes are.. some kind of clock? > + iep->buf[0] = iep->buf[2]; > + memset(iep->buf + 1, 0, len - 1); > + memcpy(iep->old, iep->buf, len); > + } > + iep->old_jiffies = jiffies; > + > + return SUCCESS; > +} > > #ifdef KERNEL_2_5 > static void usb_remote_recv(struct urb *urb, struct pt_regs *regs) > @@ -606,7 +655,7 @@ > #endif > { > struct in_endpt *iep; > - int len, result; > + int len, result = -1; > > if (!urb) > return; > @@ -630,6 +679,9 @@ > case SUCCESS: > > switch (iep->ir->remote_type) { > + case XBOX_COMPATIBLE: > + result = code_check_xbox(iep, len); > + break; > case ATI2_COMPATIBLE: > result = code_check_ati2(iep, len); > break; > @@ -946,6 +998,10 @@ > case VENDOR_ATI2: > type = ATI2_COMPATIBLE; > break; > + case VENDOR_MS1: > + case VENDOR_MS2: > + type = XBOX_COMPATIBLE; > + break; > default: > dprintk(DRIVER_NAME "[%d]: unknown type\n", devnum); > return NULL; > @@ -957,6 +1013,8 @@ > if ( !(ir = kmalloc(sizeof(*ir), GFP_KERNEL)) ) { > mem_failure = 1; > } else { > + // at this stage we cannot use the macro [DE]CODE_LENGTH: ir is > not yet setup > + const int dclen = decode_length[type]; > memset(ir, 0, sizeof(*ir)); > /* add this infrared remote struct to remote_list, keeping track of > * the number of drivers registered. */ > @@ -968,13 +1026,13 @@ > mem_failure = 2; > } else if (!(rbuf = kmalloc(sizeof(*rbuf), GFP_KERNEL))) { > mem_failure = 3; > - } else if (lirc_buffer_init(rbuf, CODE_LENGTH, 1)) { > + } else if (lirc_buffer_init(rbuf, dclen, 1)) { > mem_failure = 4; > } else { > memset(plugin, 0, sizeof(*plugin)); > strcpy(plugin->name, DRIVER_NAME " "); > plugin->minor = -1; > - plugin->code_length = CODE_LENGTH*8; > + plugin->code_length = dclen * 8; > plugin->features = LIRC_CAN_REC_LIRCCODE; > plugin->data = ir; > plugin->rbuf = rbuf; > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share > your > opinions on IT & business topics through brief surveys - and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > I try but... File to patch: drivers/lirc_atiusb/lirc_atiusb.c patching file drivers/lirc_atiusb/lirc_atiusb.c Hunk #1 FAILED at 11. Hunk #2 FAILED at 68. Hunk #3 FAILED at 93. Hunk #4 FAILED at 132. Hunk #5 FAILED at 154. Hunk #6 FAILED at 184. Hunk #7 FAILED at 222. Hunk #8 FAILED at 386. Hunk #9 FAILED at 524. Hunk #10 FAILED at 616. Hunk #11 FAILED at 655. Hunk #12 FAILED at 679. Hunk #13 FAILED at 998. Hunk #14 FAILED at 1013. patch unexpectedly ends in middle of line Hunk #15 FAILED at 1026. 15 out of 15 hunks FAILED -- saving rejects to file drivers/lirc_atiusb/lirc_atiusb.c.rej -- View this message in context: http://www.nabble.com/Lirc-won%27t-compile-with-2.6.20-rc4-tf2958589.html#a8474457 Sent from the LIRC mailing list archive at Nabble.com. |