James Courtier-Dutton wrote: > Adam Kropelin wrote: >> We already do deliver all events to hiddev, as of 2.6.12-rc1. I remember >> specifically because the change broke userspace. >> >> <http://linux.bkbits.net:8080/linux-2.6/diffs/drivers/usb/input/[EMAIL >> PROTECTED]|src/.|src/drivers|src/drivers/usb|src/drivers/usb/input|hist/drivers/usb/input/hid-core.c> >> >> --Adam >> > > I was using Linux 2.6.17.7 > > See below for a full extract of the 2.6.17.7 code. > Notice where I have commented out lines with +// > and inserted an +#if 0...+#endif to comment out a larger section. > This code (before my changes) is definitely doing filtering on events > destined for the hiddev device. This code acts before it has decided > which device to send the event to. My changes do not seem to adversely > affect the usb mouse usage. > > /* > * Analyse a received field, and fetch the data from it. The field > * content is stored for next report processing (we do differential > * reporting to the layer). > */ > > static void hid_input_field(struct hid_device *hid, struct hid_field > *field, __u8 *data, int interrupt, struct pt_regs *regs) > { > unsigned n; > unsigned count = field->report_count; > unsigned offset = field->report_offset; > unsigned size = field->report_size; > __s32 min = field->logical_minimum; > __s32 max = field->logical_maximum; > __s32 *value; > > if (!(value = kmalloc(sizeof(__s32) * count, GFP_ATOMIC))) > return; > > for (n = 0; n < count; n++) { > > value[n] = min < 0 ? snto32(extract(data, offset > + n * size, size), size) : > extract(data, offset > + n * size, size); > > if (!(field->flags & HID_MAIN_ITEM_VARIABLE) /* > Ignore report if ErrorRollOver */ > && value[n] >= min && value[n] <= max > && field->usage[value[n] - min].hid == > HID_UP_KEYBOARD + 1) > goto exit; > } > > for (n = 0; n < count; n++) { > > +// if (HID_MAIN_ITEM_VARIABLE & field->flags) { > hid_process_event(hid, field, &field->usage[n], > value[n], interrupt, regs); > continue; > +// } > +#if 0 > if (field->value[n] >= min && field->value[n] <= max > && field->usage[field->value[n] - min].hid > && search(value, field->value[n], count)) > hid_process_event(hid, field, > &field->usage[field->value[n] - min], 0, interrupt, regs); > > if (value[n] >= min && value[n] <= max > && field->usage[value[n] - min].hid > && search(field->value, value[n], count)) > hid_process_event(hid, field, > &field->usage[value[n] - min], 1, interrupt, regs); > +#endif > } > > memcpy(field->value, value, count * sizeof(__s32)); > exit: > kfree(value); > } >
Anyone willing to provide feedback on this. Is this the correct fix for my problem? James ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ [email protected] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel
