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 <[email protected]> wrote:
> On Mon, Jan 2, 2012 at 3:13 AM, Mike Rolland <[email protected]> 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel