Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static void wacom_i4_parse_pen_report(struct wacom_data *wdata,
- struct input_dev *input, unsigned char *data)
- {
- __u16 x, y, pressure;
- /*printk(KERN_INFO "data[1,2,3,4,5]: %x, %x, %x, %x, %x\n", data[1], data[2], data[3], data[4], data[5]);
- */
- switch (data[1]) {
- case 0x80: /* Out of proximity report */
- //wdata->tool = 0;
- input_report_key(input, BTN_TOUCH, 0);
- input_report_key(input, BTN_STYLUS, 0);
- input_report_key(input, BTN_STYLUS2, 0);
- input_report_abs(input, ABS_PRESSURE, 0);
- input_report_key(input, wdata->tool, 0);
- input_report_abs(input, ABS_MISC, 0);
- input_event(input, EV_MSC, MSC_SERIAL, wdata->serial);
- input_sync(input);
- wdata->tool = 0;
- printk(KERN_INFO "out prox serial:%X, ", wdata->serial);
- printk(KERN_INFO "tool:%X, ", wdata->tool);
- printk(KERN_INFO "id:%X\n", wdata->id);
- break;
- case 0xC2: /* Tool report */
- /* tool number */
- /*to be verified*/
- wdata->id = ((data[2] << 4) | (data[3] >> 4) |
- ((data[7] & 0x0f) << 20) |
- ((data[8] & 0xf0) << 12));
- /*copy z usb - to be verified*/
- wdata->serial = ((data[3] & 0x0f) << 28) +
- (data[4] << 20) + (data[5] << 12) +
- (data[6] << 4) + (data[7] >> 4);
- switch (wdata->id & 0xfffff) {
- case 0x802:
- wdata->tool = BTN_TOOL_PEN;
- break;
- case 0x80A:
- wdata->tool = BTN_TOOL_RUBBER;
- break;
- }
- printk(KERN_INFO "inprox serial:%X, ", wdata->serial);
- printk(KERN_INFO "tool:%X, ", wdata->tool);
- printk(KERN_INFO "id:%X\n", wdata->id);
- break;
- default: /* Position/pressure report */
- x = data[2] << 9 | data[3] << 1 | ((data[9] & 0x02) >> 1);
- y = data[4] << 9 | data[5] << 1 | (data[9] & 0x01);
- pressure = (data[6] << 3) | ((data[7] & 0xC0) >> 5)
- | (data[1] & 0x01);
- input_report_key(input, BTN_TOUCH, pressure > 1);
- input_report_key(input, BTN_STYLUS, data[1] & 0x02);
- input_report_key(input, BTN_STYLUS2, data[1] & 0x04);
- input_report_abs(input, ABS_X, x);
- input_report_abs(input, ABS_Y, y);
- input_report_abs(input, ABS_PRESSURE, pressure);
- input_report_abs(input, ABS_MISC, wdata->id);
- input_event(input, EV_MSC, MSC_SERIAL, wdata->serial);
- input_report_key(input, wdata->tool, 1);
- input_sync(input);
- printk(KERN_INFO "repo pos serial:%X, ", wdata->serial);
- printk(KERN_INFO "tool:%X, ", wdata->tool);
- printk(KERN_INFO "id:%X\n", wdata->id);
- break;
- }
Advertisement
Add Comment
Please, Sign In to add comment