To speed your testing out, here is an alternative to try.

In case this is a non-wacom digitizer or even if is a wacom digitizer
but you'd like to use it in HID-compliant mode they sometimes have,
you can try to get HID core to work with it in correct mode.

As I mentioned in earlier email, the issue is that a mouse and a
digitizer is being combined into a single input device.  You can add a
"quirk" to hid-core for your device that will break them into 2
devices.

To do this, revert all your wacom_wac changes and your hid-core changes.

Instead edit the file linux/drivers/hid/usbhid/hid-quirks.c.
Copy&paste a line that has the HID_QUIRK_MULTI_INPUT and replace its
VID/PID with your digitizer values.  Here is an example of such lines.

        { USB_VENDOR_ID_PLAYDOTCOM,
USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII, HID_QUIRK_MULTI_INPUT },

This HID-compliant device will not work with xf86-input-wacom though.
You will also need to revert and xorg.conf files so that the device is
correctly matched to xf86-input-evdev.

Chris

On Mon, Jan 2, 2012 at 11:10 AM, Chris Bagwell <ch...@cnpbagwell.com> wrote:
> On Mon, Jan 2, 2012 at 3:13 AM, Mike Rolland <none...@gmail.com> wrote:
>> Ok, let's dance for all your demands.
>> Nevertheless, there's no pen click or move events on screen in normal mode.
>>
>> ### kernel diff :
>>
>> Index: drivers/input/tablet/wacom.h
>> ===================================================================
>> --- drivers/input/tablet/wacom.h
>> +++ drivers/input/tablet/wacom.h 2011-12-31 19:19:08.452177869 +0400
>>
>> @@ -104,6 +104,7 @@
>>
>> #define USB_VENDOR_ID_WACOM 0x056a
>> #define USB_VENDOR_ID_LENOVO 0x17ef
>> +#define USB_VENDOR_ID_ASUSTEK 0x0b05
>>
>>
>>
>> struct wacom {
>> Index: drivers/input/tablet/wacom_wac.c
>> ===================================================================
>> --- drivers/input/tablet/wacom_wac.c
>> +++ drivers/input/tablet/wacom_wac.c 2011-12-31 12:31:10.224185924 +0400
>> @@ -1503,6 +1503,9 @@
>> static const struct wacom_features wacom_features_0x6004 =
>> { "ISD-V4",               WACOM_PKGLEN_GRAPHIRE,  12800,  8000,  255,
>>   0, TABLETPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
>> +static const struct wacom_features wacom_features_0x179F =
>> + { "ISD-V4",               WACOM_PKGLEN_GRAPHIRE,  12800,  8000,  255,
>>
>> +   0, TABLETPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
>>
>> #define USB_DEVICE_WACOM(prod) \
>> USB_DEVICE(USB_VENDOR_ID_WACOM, prod), \
>> @@ -1517,6 +1520,10 @@
>> USB_DEVICE(USB_VENDOR_ID_LENOVO, prod), \
>> .driver_info = (kernel_ulong_t)&wacom_features_##prod
>>
>> +#define USB_DEVICE_ASUSTEK(prod) \
>> + USB_DEVICE(USB_VENDOR_ID_ASUSTEK, prod), \
>>
>> + .driver_info = (kernel_ulong_t)&wacom_features_##prod
>> +
>> const struct usb_device_id wacom_ids[] = {
>> { USB_DEVICE_WACOM(0x00) },
>> { USB_DEVICE_WACOM(0x10) },
>> @@ -1607,6 +1614,7 @@
>> { USB_DEVICE_WACOM(0xE6) },
>> { USB_DEVICE_WACOM(0x47) },
>> { USB_DEVICE_LENOVO(0x6004) },
>> + { USB_DEVICE_ASUSTEK(0x179F) },
>> { }
>> };
>> MODULE_DEVICE_TABLE(usb, wacom_ids);
>>
>> ### xf86 diff : (I place back in wcwUSB to 2450, 2540 )
>
> All of your X changes are not needed and could cause harm; especially
> if you mismark it as a Protocol 5 device. I would remove them to be
> safe.
>
> More info in case your interested on "protocol":
>
> http://sourceforge.net/apps/mediawiki/linuxwacom/index.php?title=Wacom_Protocol_Overview
>
>
>>
>> Index: wcmUSB.c
>> ===================================================================
>> --- wcmUSB.c
>> +++ wcmUSB.c 2012-01-02 01:03:03.050073315 +0400
>> @@ -284,7 +284,10 @@
>> { WALTOP_VENDOR_ID, 0x27,  80000,  80000, &usbGraphire3  },
>> { WALTOP_VENDOR_ID, 0x28,  80000,  80000, &usbGraphire3  },
>> { WALTOP_VENDOR_ID, 0x30,  80000,  80000, &usbGraphire4  },
>> - { WALTOP_VENDOR_ID, 0x31,  80000,  80000, &usbGraphire4  },
>> + /* WALTOP original strings */
>> + /*{ WALTOP_VENDOR_ID, 0x31,  80000,  80000, &usbGraphire4  }, */
>> + /* WALTOP exprimental strings (medio 85837) */
>> + { WALTOP_VENDOR_ID, 0x31, 200000, 200000, &usbIntuos4  },
>> { WALTOP_VENDOR_ID, 0x32, 100000, 100000, &usbBambooFun  },
>> { WALTOP_VENDOR_ID, 0x33, 100000, 100000, &usbBambooFun  },
>> { WALTOP_VENDOR_ID, 0x34,  80000,  80000, &usbBamboo1    },
>> @@ -308,10 +311,12 @@
>> { WALTOP_VENDOR_ID, 0x503, 200000, 200000, &usbIntuos4   },
>>
>> /* N-Trig devices */
>> - { NTRIG_VENDOR_ID,  0x01, 44173, 36772, &usbTabletPC    },
>> + { NTRIG_VENDOR_ID,  0x01, 44173, 36772, &usbTabletPC     },
>>
>> /* Add in Lenovo W700 Palmrest digitizer */
>> - { LENOVO_VENDOR_ID, 0x6004, 2540, 2540, &usbTabletPC   } /* Pen-only */
>> + { LENOVO_VENDOR_ID, 0x6004, 2540, 2540, &usbTabletPC     }, /* Pen-only */
>> + /* ASUSTek EeeNote digitizer (experimental) */
>> + { ASUSTEK_VENDOR_ID, 0x179f, 2540, 2540, &usbTabletPC }
>> };
>>
>> static Bool usbWcmInit(InputInfoPtr pInfo, char* id, float *version)
>> Index: xf86Wacom.c
>> ===================================================================
>> --- xf86Wacom.c
>> +++ xf86Wacom.c 2011-12-30 12:31:02.932275049 +0400
>> @@ -494,6 +494,7 @@
>> case WALTOP_VENDOR_ID:
>> case HANWANG_VENDOR_ID:
>> case LENOVO_VENDOR_ID:
>> + case ASUSTEK_VENDOR_ID:
>> return TRUE;
>> default:
>> break;
>> Index: xf86WacomDefs.h
>> ===================================================================
>> --- xf86WacomDefs.h
>> +++ xf86WacomDefs.h 2011-12-30 12:43:22.773258878 +0400
>> @@ -34,6 +34,7 @@
>> #define NTRIG_VENDOR_ID 0x1b96
>> #define HANWANG_VENDOR_ID 0x0b57
>> #define LENOVO_VENDOR_ID 0x17ef
>> +#define ASUSTEK_VENDOR_ID 0x0b05
>>
>> #define DEFAULT_SUPPRESS 2      /* default suppress */
>> #define MAX_SUPPRESS 100        /* max value of suppress */
>>
>> ### evtest log :
>>
>> [root@hpm mike]# evtest /dev/input/event14
>> Input driver version is 1.0.1
>> Input device ID: bus 0x3 vendor 0xb05 product 0x179f version 0x129
>> Input device name: "ISD-V4 Pen"
>> Supported events:
>>   Event type 0 (Sync)
>>   Event type 1 (Key)
>>     Event code 320 (ToolPen)
>>     Event code 321 (ToolRubber)
>>     Event code 330 (Touch)
>>     Event code 331 (Stylus)
>>     Event code 332 (Stylus2)
>>   Event type 3 (Absolute)
>>     Event code 0 (X)
>>       Value      0
>>       Min        0
>>       Max    12800
>>       Fuzz       4
>>     Event code 1 (Y)
>>       Value      0
>>       Min        0
>>       Max     8000
>>       Fuzz       4
>>     Event code 24 (Pressure)
>>       Value      0
>>       Min        0
>>       Max      255
>> Testing ... (interrupt to exit)
>>
>> Effectively, evtest doesn't report nothing when moving pen on tablet, but it
>> does on console only mode.
>
> Can you send the output from console mode?  Do the X/Y values seem to
> make sense?  For example, drawing from top of screen to bottom of
> screen do you see mostly only Y axis change values linearly?
>
>>
>
>>
>> ### lsusb with module unload :
>>
>> [root@hpm mike]# lsusb -vvv -d 0b05:179f
>>
>
> OK.  Good info in this lsusb.  I'm not positive yet if this is a Wacom.
>
> Pros: It does use a Report ID of 2 for pen packets and has a Feature
> Report #2 as well that wacom driver likes to control on "tablet PC's".
>
> Cons: My math comes up with only 5 bytes declared for pen packet while
> wacom driver expects it to be size 8.
>
> Additional Pros: Sometimes thats what the Feature Report #2 is.  It
> turns on a more advanced Pen Packet mode which I guess could cause it
> to become bigger than size reported by HID report... but I'm not sure
> of this for Tablet PC's.
>
> Chris
>
>>
>> Bus 002 Device 008: ID 0b05:179f ASUSTek Computer, Inc.
>> Device Descriptor:
>>   bLength                18
>>   bDescriptorType         1
>>   bcdUSB               1.10
>>   bDeviceClass            0 (Defined at Interface level)
>>   bDeviceSubClass         0
>>   bDeviceProtocol         0
>>   bMaxPacketSize0        16
>>   idVendor           0x0b05 ASUSTek Computer, Inc.
>>   idProduct          0x179f
>>   bcdDevice            1.29
>>   iManufacturer           1 ASUSTek Computer, Inc.
>>   iProduct                2 Eee Note Digitizer
>>   iSerial                 3 1
>>   bNumConfigurations      1
>>   Configuration Descriptor:
>>     bLength                 9
>>     bDescriptorType         2
>>     wTotalLength           34
>>     bNumInterfaces          1
>>     bConfigurationValue     1
>>     iConfiguration          4 pen report data
>>     bmAttributes         0xc0
>>       Self Powered
>>     MaxPower                2mA
>>     Interface Descriptor:
>>       bLength                 9
>>       bDescriptorType         4
>>       bInterfaceNumber        0
>>       bAlternateSetting       0
>>       bNumEndpoints           1
>>       bInterfaceClass         3 Human Interface Device
>>       bInterfaceSubClass      0 No Subclass
>>       bInterfaceProtocol      2 Mouse
>>       iInterface              4 pen report data
>>         HID Device Descriptor:
>>           bLength                 9
>>           bDescriptorType        33
>>           bcdHID               1.10
>>           bCountryCode           33 US
>>           bNumDescriptors         1
>>           bDescriptorType        34 Report
>>           wDescriptorLength     201
>>           Report Descriptor: (length is 201)
>>             Item(Global): Usage Page, data= [ 0x01 ] 1
>>                             Generic Desktop Controls
>>             Item(Local ): Usage, data= [ 0x02 ] 2
>>                             Mouse
>>             Item(Main  ): Collection, data= [ 0x01 ] 1
>>                             Application
>>             Item(Global): Report ID, data= [ 0x01 ] 1
>>             Item(Local ): Usage, data= [ 0x01 ] 1
>>                             Pointer
>>             Item(Main  ): Collection, data= [ 0x00 ] 0
>>                             Physical
>>             Item(Global): Usage Page, data= [ 0x09 ] 9
>>                             Buttons
>>             Item(Local ): Usage Minimum, data= [ 0x01 ] 1
>>                             Button 1 (Primary)
>>             Item(Local ): Usage Maximum, data= [ 0x03 ] 3
>>                             Button 3 (Tertiary)
>>             Item(Global): Logical Minimum, data= [ 0x00 ] 0
>>             Item(Global): Logical Maximum, data= [ 0x01 ] 1
>>             Item(Global): Report Count, data= [ 0x03 ] 3
>>             Item(Global): Report Size, data= [ 0x01 ] 1
>>             Item(Main  ): Input, data= [ 0x02 ] 2
>>                             Data Variable Absolute No_Wrap Linear
>>                             Preferred_State No_Null_Position Non_Volatile
>> Bitfield
>>             Item(Global): Report Count, data= [ 0x01 ] 1
>>             Item(Global): Report Size, data= [ 0x05 ] 5
>>             Item(Main  ): Input, data= [ 0x01 ] 1
>>                             Constant Array Absolute No_Wrap Linear
>>                             Preferred_State No_Null_Position Non_Volatile
>> Bitfield
>>             Item(Global): Usage Page, data= [ 0x01 ] 1
>>                             Generic Desktop Controls
>>             Item(Local ): Usage, data= [ 0x30 ] 48
>>                             Direction-X
>>             Item(Local ): Usage, data= [ 0x31 ] 49
>>                             Direction-Y
>>             Item(Local ): Usage, data= [ 0x38 ] 56
>>                             Wheel
>>             Item(Global): Logical Minimum, data= [ 0x81 ] 129
>>             Item(Global): Logical Maximum, data= [ 0x7f ] 127
>>             Item(Global): Report Size, data= [ 0x08 ] 8
>>             Item(Global): Report Count, data= [ 0x03 ] 3
>>             Item(Main  ): Input, data= [ 0x06 ] 6
>>                             Data Variable Relative No_Wrap Linear
>>                             Preferred_State No_Null_Position Non_Volatile
>> Bitfield
>>             Item(Main  ): End Collection, data=none
>>             Item(Main  ): End Collection, data=none
>>             Item(Global): Usage Page, data= [ 0x0d ] 13
>>                             Digitizer
>>             Item(Local ): Usage, data= [ 0x01 ] 1
>>                             Digitizer
>>             Item(Main  ): Collection, data= [ 0x01 ] 1
>>                             Application
>>             Item(Global): Report ID, data= [ 0x02 ] 2
>>             Item(Main  ): Collection, data= [ 0x00 ] 0
>>                             Physical
>>             Item(Global): Usage Page, data= [ 0x00 0xff ] 65280
>>                             (null)
>>             Item(Local ): Usage, data= [ 0x01 ] 1
>>                             (null)
>>             Item(Global): Logical Minimum, data= [ 0x00 ] 0
>>             Item(Global): Logical Maximum, data= [ 0xff ] 255
>>             Item(Global): Report Size, data= [ 0x08 ] 8
>>             Item(Global): Report Count, data= [ 0x01 ] 1
>>             Item(Main  ): Input, data= [ 0x02 ] 2
>>                             Data Variable Absolute No_Wrap Linear
>>                             Preferred_State No_Null_Position Non_Volatile
>> Bitfield
>>             Item(Global): Usage Page, data= [ 0x01 ] 1
>>                             Generic Desktop Controls
>>             Item(Local ): Usage, data= [ 0x30 ] 48
>>                             Direction-X
>>             Item(Global): Report Size, data= [ 0x10 ] 16
>>             Item(Global): Report Count, data= [ 0x01 ] 1
>>             Item(Global): Push, data=none
>>             Item(Global): Unit Exponent, data= [ 0x0d ] 13
>>                             Unit Exponent: 13
>>             Item(Global): Unit, data= [ 0x33 ] 51
>>                             System: English Linear, Unit: Inch^3
>>             Item(Global): Physical Minimum, data= [ 0x00 ] 0
>>             Item(Global): Physical Maximum, data= [ 0x58 0x19 ] 6488
>>             Item(Global): Logical Maximum, data= [ 0x60 0x40 ] 16480
>>             Item(Main  ): Input, data= [ 0x02 ] 2
>>                             Data Variable Absolute No_Wrap Linear
>>                             Preferred_State No_Null_Position Non_Volatile
>> Bitfield
>>             Item(Local ): Usage, data= [ 0x31 ] 49
>>                             Direction-Y
>>             Item(Global): Physical Maximum, data= [ 0x15 0x13 ] 4885
>>             Item(Global): Logical Maximum, data= [ 0x7a 0x30 ] 12410
>>             Item(Main  ): Input, data= [ 0x02 ] 2
>>                             Data Variable Absolute No_Wrap Linear
>>                             Preferred_State No_Null_Position Non_Volatile
>> Bitfield
>>             Item(Global): Pop, data=none
>>             Item(Global): Usage Page, data= [ 0x0d ] 13
>>                             Digitizer
>>             Item(Local ): Usage, data= [ 0x30 ] 48
>>                             Tip Pressure
>>             Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
>>             Item(Main  ): Input, data= [ 0x02 ] 2
>>                             Data Variable Absolute No_Wrap Linear
>>                             Preferred_State No_Null_Position Non_Volatile
>> Bitfield
>>             Item(Global): Usage Page, data= [ 0x00 0xff ] 65280
>>                             (null)
>>             Item(Local ): Usage, data= [ 0x01 ] 1
>>                             (null)
>>             Item(Global): Logical Maximum, data= [ 0xff ] 255
>>             Item(Global): Report Size, data= [ 0x08 ] 8
>>             Item(Global): Report Count, data= [ 0x01 ] 1
>>             Item(Main  ): Input, data= [ 0x02 ] 2
>>                             Data Variable Absolute No_Wrap Linear
>>                             Preferred_State No_Null_Position Non_Volatile
>> Bitfield
>>             Item(Main  ): End Collection, data=none
>>             Item(Local ): Usage, data= [ 0x01 ] 1
>>                             (null)
>>             Item(Global): Report ID, data= [ 0x02 ] 2
>>             Item(Global): Report Count, data= [ 0x01 ] 1
>>             Item(Main  ): Feature, data= [ 0x02 ] 2
>>                             Data Variable Absolute No_Wrap Linear
>>                             Preferred_State No_Null_Position Non_Volatile
>> Bitfield
>>             Item(Local ): Usage, data= [ 0x01 ] 1
>>                             (null)
>>             Item(Global): Report ID, data= [ 0x03 ] 3
>>             Item(Global): Report Count, data= [ 0x01 ] 1
>>             Item(Main  ): Feature, data= [ 0x02 ] 2
>>                             Data Variable Absolute No_Wrap Linear
>>                             Preferred_State No_Null_Position Non_Volatile
>> Bitfield
>>             Item(Local ): Usage, data= [ 0x01 ] 1
>>                             (null)
>>             Item(Global): Report ID, data= [ 0x04 ] 4
>>             Item(Global): Report Count, data= [ 0x01 ] 1
>>             Item(Main  ): Feature, data= [ 0x02 ] 2
>>                             Data Variable Absolute No_Wrap Linear
>>                             Preferred_State No_Null_Position Non_Volatile
>> Bitfield
>>             Item(Local ): Usage, data= [ 0x01 ] 1
>>                             (null)
>>             Item(Global): Report ID, data= [ 0x10 ] 16
>>             Item(Global): Report Count, data= [ 0x02 ] 2
>>             Item(Main  ): Feature, data= [ 0x02 ] 2
>>                             Data Variable Absolute No_Wrap Linear
>>                             Preferred_State No_Null_Position Non_Volatile
>> Bitfield
>>             Item(Local ): Usage, data= [ 0x01 ] 1
>>                             (null)
>>             Item(Global): Report ID, data= [ 0x11 ] 17
>>             Item(Global): Report Count, data= [ 0x10 ] 16
>>             Item(Main  ): Feature, data= [ 0x02 ] 2
>>                             Data Variable Absolute No_Wrap Linear
>>                             Preferred_State No_Null_Position Non_Volatile
>> Bitfield
>>             Item(Local ): Usage, data= [ 0x01 ] 1
>>                             (null)
>>             Item(Global): Report ID, data= [ 0x13 ] 19
>>             Item(Global): Report Count, data= [ 0x01 ] 1
>>             Item(Main  ): Feature, data= [ 0x02 ] 2
>>                             Data Variable Absolute No_Wrap Linear
>>                             Preferred_State No_Null_Position Non_Volatile
>> Bitfield
>>             Item(Local ): Usage, data= [ 0x01 ] 1
>>                             (null)
>>             Item(Global): Report ID, data= [ 0x20 ] 32
>>             Item(Global): Report Count, data= [ 0x01 ] 1
>>             Item(Main  ): Feature, data= [ 0x02 ] 2
>>                             Data Variable Absolute No_Wrap Linear
>>                             Preferred_State No_Null_Position Non_Volatile
>> Bitfield
>>             Item(Local ): Usage, data= [ 0x01 ] 1
>>                             (null)
>>             Item(Global): Report ID, data= [ 0x21 ] 33
>>             Item(Global): Report Count, data= [ 0x01 ] 1
>>             Item(Main  ): Feature, data= [ 0x02 ] 2
>>                             Data Variable Absolute No_Wrap Linear
>>                             Preferred_State No_Null_Position Non_Volatile
>> Bitfield
>>             Item(Main  ): End Collection, data=none
>>
>>       Endpoint Descriptor:
>>         bLength                 7
>>         bDescriptorType         5
>>         bEndpointAddress     0x81  EP 1 IN
>>         bmAttributes            3
>>           Transfer Type            Interrupt
>>           Synch Type               None
>>           Usage Type               Data
>>         wMaxPacketSize     0x0009  1x 9 bytes
>>         bInterval               4
>> Device Status:     0x0001
>>   Self Powered
>>
------------------------------------------------------------------------------
Ridiculously easy VDI. With Citrix VDI-in-a-Box, you don't need a complex
infrastructure or vast IT resources to deliver seamless, secure access to
virtual desktops. With this all-in-one solution, easily deploy virtual 
desktops for less than the cost of PCs and save 60% on VDI infrastructure 
costs. Try it free! http://p.sf.net/sfu/Citrix-VDIinabox
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to