From: giwoong.kim Date: Thu, 8 Dec 2011 05:16:36 +0000 (+0900) Subject: [Title] Emulator multitouch supporting X-Git-Tag: 2.2.1_release^2~206^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=90a36bcd96cadd779f4f3ef37106c4f9ae59fb64;p=sdk%2Femulator%2Femulator-kernel.git [Title] Emulator multitouch supporting [Type] Feature [Module] Dirver / wacom [Priority] Major [CQ#] n/a [Redmine#] 2184 [Problem] no support for multitouch [Cause] wacom driver is tablet type [Solution] convert to touchscreen type [TestCase] Ctrl key + mouse click --- diff --git a/drivers/input/tablet/wacom.h b/drivers/input/tablet/wacom.h old mode 100644 new mode 100755 index 9114ae1c7488..2c092246e6c4 --- a/drivers/input/tablet/wacom.h +++ b/drivers/input/tablet/wacom.h @@ -123,6 +123,7 @@ extern void wacom_report_rel(void *wcombo, unsigned int rel_type, int rel_data); extern void wacom_report_key(void *wcombo, unsigned int key_type, int key_data); extern void wacom_input_event(void *wcombo, unsigned int type, unsigned int code, int value); extern void wacom_input_sync(void *wcombo); +extern void wacom_input_mt_sync(void *wcombo); extern void wacom_init_input_dev(struct input_dev *input_dev, struct wacom_wac *wacom_wac); extern void input_dev_g4(struct input_dev *input_dev, struct wacom_wac *wacom_wac); extern void input_dev_g(struct input_dev *input_dev, struct wacom_wac *wacom_wac); diff --git a/drivers/input/tablet/wacom_sys.c b/drivers/input/tablet/wacom_sys.c old mode 100644 new mode 100755 index ea30c983a33e..b9cbd166d21f --- a/drivers/input/tablet/wacom_sys.c +++ b/drivers/input/tablet/wacom_sys.c @@ -149,6 +149,11 @@ void wacom_input_sync(void *wcombo) input_sync(get_input_dev((struct wacom_combo *)wcombo)); } +void wacom_input_mt_sync(void *wcombo) +{ + input_mt_sync(get_input_dev((struct wacom_combo *)wcombo)); +} + static int wacom_open(struct input_dev *dev) { struct wacom *wacom = input_get_drvdata(dev); @@ -487,8 +492,12 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i } input_dev->evbit[0] |= BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); + input_dev->keybit[BIT_WORD(BTN_TOUCH)] |= BIT_MASK(BTN_TOUCH); +#if 0 //convert device type for emulator input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_PEN) | BIT_MASK(BTN_TOUCH) | BIT_MASK(BTN_STYLUS); +#endif + input_set_abs_params(input_dev, ABS_X, 0, features->x_max, 4, 0); input_set_abs_params(input_dev, ABS_Y, 0, features->y_max, 4, 0); input_set_abs_params(input_dev, ABS_PRESSURE, 0, features->pressure_max, 0, 0); @@ -499,6 +508,12 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i } input_dev->absbit[BIT_WORD(ABS_MISC)] |= BIT_MASK(ABS_MISC); + /* for multitouch */ + input_set_abs_params(input_dev, ABS_MT_TRACKING_ID, 0, 1, 0, 0); + input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR, 0, features->pressure_max, 0, 0); + input_set_abs_params(input_dev, ABS_MT_POSITION_X, 0, features->touch_x_max, 0, 0); + input_set_abs_params(input_dev, ABS_MT_POSITION_Y, 0, features->touch_y_max, 0, 0); + wacom_init_input_dev(input_dev, wacom_wac); usb_fill_int_urb(wacom->irq, dev, diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c old mode 100644 new mode 100755 index c896d6a21b7e..8d6f23913543 --- a/drivers/input/tablet/wacom_wac.c +++ b/drivers/input/tablet/wacom_wac.c @@ -38,6 +38,7 @@ static int wacom_penpartner_irq(struct wacom_wac *wacom, void *wcombo) } break; case 2: +#if 0 wacom_report_key(wcombo, BTN_TOOL_PEN, 1); wacom_report_abs(wcombo, ABS_MISC, STYLUS_DEVICE_ID); /* report tool id */ wacom_report_abs(wcombo, ABS_X, wacom_le16_to_cpu(&data[1])); @@ -45,6 +46,24 @@ static int wacom_penpartner_irq(struct wacom_wac *wacom, void *wcombo) wacom_report_abs(wcombo, ABS_PRESSURE, (signed char)data[6] + 127); wacom_report_key(wcombo, BTN_TOUCH, ((signed char)data[6] > -80) && !(data[5] & 0x20)); wacom_report_key(wcombo, BTN_STYLUS, (data[5] & 0x40)); +#else + if ((signed char)data[6] > -127) { //pressed + wacom_report_abs(wcombo, ABS_MT_TRACKING_ID, data[5]); + wacom_report_abs(wcombo, ABS_MT_TOUCH_MAJOR, 5); + wacom_report_abs(wcombo, ABS_MT_POSITION_X, wacom_le16_to_cpu(&data[1])); + wacom_report_abs(wcombo, ABS_MT_POSITION_Y, wacom_le16_to_cpu(&data[3])); + wacom_input_mt_sync(wcombo); + } else { //release + if (data[5] == 1) { + wacom_report_abs(wcombo, ABS_MT_TRACKING_ID, 1); + wacom_report_abs(wcombo, ABS_MT_TOUCH_MAJOR, 0); + wacom_input_mt_sync(wcombo); + } + wacom_report_abs(wcombo, ABS_MT_TRACKING_ID, 0); + wacom_report_abs(wcombo, ABS_MT_TOUCH_MAJOR, 0); + wacom_input_mt_sync(wcombo); + } +#endif break; default: printk(KERN_INFO "wacom_penpartner_irq: received unknown report #%d\n", data[0]); @@ -797,7 +816,7 @@ void wacom_init_input_dev(struct input_dev *input_dev, struct wacom_wac *wacom_w input_dev_pl(input_dev, wacom_wac); /* fall through */ case PENPARTNER: - input_dev_pt(input_dev, wacom_wac); + //input_dev_pt(input_dev, wacom_wac); break; } return; diff --git a/drivers/input/tablet/wacom_wac.h b/drivers/input/tablet/wacom_wac.h old mode 100644 new mode 100755