Lines Matching refs:data

128 	unsigned char *data = wacom->data;
131 switch (data[0]) {
133 if (data[5] & 0x80) {
134 wacom->tool[0] = (data[5] & 0x20) ? BTN_TOOL_RUBBER : BTN_TOOL_PEN;
135 wacom->id[0] = (data[5] & 0x20) ? ERASER_DEVICE_ID : STYLUS_DEVICE_ID;
138 input_report_abs(input, ABS_X, get_unaligned_le16(&data[1]));
139 input_report_abs(input, ABS_Y, get_unaligned_le16(&data[3]));
140 input_report_abs(input, ABS_PRESSURE, (signed char)data[6] + 127);
141 input_report_key(input, BTN_TOUCH, ((signed char)data[6] > -127));
142 input_report_key(input, BTN_STYLUS, (data[5] & 0x40));
154 input_report_abs(input, ABS_X, get_unaligned_le16(&data[1]));
155 input_report_abs(input, ABS_Y, get_unaligned_le16(&data[3]));
156 input_report_abs(input, ABS_PRESSURE, (signed char)data[6] + 127);
157 input_report_key(input, BTN_TOUCH, ((signed char)data[6] > -80) && !(data[5] & 0x20));
158 input_report_key(input, BTN_STYLUS, (data[5] & 0x40));
163 "%s: received unknown report #%d\n", __func__, data[0]);
173 unsigned char *data = wacom->data;
177 if (data[0] != WACOM_REPORT_PENABLED) {
179 "%s: received unknown report #%d\n", __func__, data[0]);
183 prox = data[1] & 0x40;
186 if ((data[0] & 0x10) || (data[4] & 0x20)) {
200 if (wacom->tool[0] == BTN_TOOL_RUBBER && !(data[4] & 0x20)) {
209 pressure = (signed char)((data[7] << 1) | ((data[4] >> 2) & 1));
211 pressure = (pressure << 1) | ((data[4] >> 6) & 1);
214 input_report_abs(input, ABS_X, data[3] | (data[2] << 7) | ((data[1] & 0x03) << 14));
215 input_report_abs(input, ABS_Y, data[6] | (data[5] << 7) | ((data[4] & 0x03) << 14));
218 input_report_key(input, BTN_TOUCH, data[4] & 0x08);
219 input_report_key(input, BTN_STYLUS, data[4] & 0x10);
221 input_report_key(input, BTN_STYLUS2, (wacom->tool[0] == BTN_TOOL_PEN) && (data[4] & 0x20));
233 unsigned char *data = wacom->data;
236 if (data[0] != WACOM_REPORT_PENABLED) {
238 "%s: received unknown report #%d\n", __func__, data[0]);
242 if (data[1] & 0x04) {
243 input_report_key(input, BTN_TOOL_RUBBER, data[1] & 0x20);
244 input_report_key(input, BTN_TOUCH, data[1] & 0x08);
247 input_report_key(input, BTN_TOOL_PEN, data[1] & 0x20);
248 input_report_key(input, BTN_TOUCH, data[1] & 0x01);
252 input_report_abs(input, ABS_X, le16_to_cpup((__le16 *)&data[2]));
253 input_report_abs(input, ABS_Y, le16_to_cpup((__le16 *)&data[4]));
254 input_report_abs(input, ABS_PRESSURE, le16_to_cpup((__le16 *)&data[6]));
255 input_report_key(input, BTN_STYLUS, data[1] & 0x02);
256 input_report_key(input, BTN_STYLUS2, data[1] & 0x10);
262 unsigned char *data = wacom->data;
264 int prox = data[1] & 0x20;
267 "%s: received report #%d", __func__, data[0]);
271 wacom->tool[0] = (data[1] & 0x0c) ? BTN_TOOL_RUBBER : BTN_TOOL_PEN;
277 input_report_key(input, BTN_STYLUS, data[1] & 0x02);
278 input_report_key(input, BTN_STYLUS2, data[1] & 0x10);
279 input_report_abs(input, ABS_X, le16_to_cpup((__le16 *)&data[2]));
280 input_report_abs(input, ABS_Y, le16_to_cpup((__le16 *)&data[4]));
281 input_report_abs(input, ABS_PRESSURE, ((data[7] & 0x01) << 8) | data[6]);
282 input_report_key(input, BTN_TOUCH, data[1] & 0x05);
292 unsigned char *data = wacom->data;
296 if (data[0] != WACOM_REPORT_DTUS && data[0] != WACOM_REPORT_DTUSPAD) {
298 "%s: received unknown report #%d", __func__, data[0]);
300 } else if (data[0] == WACOM_REPORT_DTUSPAD) {
302 input_report_key(input, BTN_0, (data[1] & 0x01));
303 input_report_key(input, BTN_1, (data[1] & 0x02));
304 input_report_key(input, BTN_2, (data[1] & 0x04));
305 input_report_key(input, BTN_3, (data[1] & 0x08));
307 data[1] & 0x0f ? PAD_DEVICE_ID : 0);
310 prox = data[1] & 0x80;
312 switch ((data[1] >> 3) & 3) {
325 input_report_key(input, BTN_STYLUS, data[1] & 0x20);
326 input_report_key(input, BTN_STYLUS2, data[1] & 0x40);
327 input_report_abs(input, ABS_X, get_unaligned_be16(&data[3]));
328 input_report_abs(input, ABS_Y, get_unaligned_be16(&data[5]));
329 pressure = ((data[1] & 0x03) << 8) | (data[2] & 0xff);
344 unsigned char *data = wacom->data;
353 if (data[0] != WACOM_REPORT_PENABLED_BT) {
356 data[0]);
359 } else if (data[0] != WACOM_REPORT_PENABLED) {
361 "%s: received unknown report #%d\n", __func__, data[0]);
365 prox = data[1] & 0x80;
368 switch ((data[1] >> 5) & 3) {
381 input_report_key(input, BTN_MIDDLE, data[1] & 0x04);
390 input_report_abs(input, ABS_X, le16_to_cpup((__le16 *)&data[2]));
391 input_report_abs(input, ABS_Y, le16_to_cpup((__le16 *)&data[4]));
394 input_report_abs(input, ABS_PRESSURE, data[6] |
395 (((__u16) (data[1] & 0x08)) << 5));
397 input_report_abs(input, ABS_PRESSURE, data[6] |
398 ((data[7] & 0x03) << 8));
399 input_report_key(input, BTN_TOUCH, data[1] & 0x01);
400 input_report_key(input, BTN_STYLUS, data[1] & 0x02);
401 input_report_key(input, BTN_STYLUS2, data[1] & 0x04);
403 input_report_key(input, BTN_LEFT, data[1] & 0x01);
404 input_report_key(input, BTN_RIGHT, data[1] & 0x02);
407 input_report_abs(input, ABS_DISTANCE, data[6] & 0x3f);
408 rw = (data[7] & 0x04) - (data[7] & 0x03);
411 rw = 44 - (data[6] >> 2);
414 if (((data[1] >> 5) & 3) == 2) {
417 data[1] & 0x04);
418 rw = (data[6] & 0x01) ? -1 :
419 (data[6] & 0x02) ? 1 : 0;
424 input_report_abs(input, ABS_DISTANCE, data[7] & 0x3f);
425 rw = -(signed char)data[6];
437 /* send pad data */
440 prox = data[7] & 0xf8;
443 input_report_key(pad_input, BTN_BACK, (data[7] & 0x40));
444 input_report_key(pad_input, BTN_FORWARD, (data[7] & 0x80));
445 rw = ((data[7] & 0x18) >> 3) - ((data[7] & 0x20) >> 3);
455 prox = (data[7] & 0xf8) || data[8];
458 input_report_key(pad_input, BTN_BACK, (data[7] & 0x08));
459 input_report_key(pad_input, BTN_LEFT, (data[7] & 0x20));
460 input_report_key(pad_input, BTN_FORWARD, (data[7] & 0x10));
461 input_report_key(pad_input, BTN_RIGHT, (data[7] & 0x40));
462 input_report_abs(pad_input, ABS_WHEEL, (data[8] & 0x7f));
470 prox = data[7] & 0x03;
473 input_report_key(pad_input, BTN_0, (data[7] & 0x02));
474 input_report_key(pad_input, BTN_1, (data[7] & 0x01));
485 rw = (data[7] >> 2 & 0x07);
516 unsigned char *data = wacom->data;
528 if (!(data[0] == WACOM_REPORT_INTUOSPAD || data[0] == WACOM_REPORT_INTUOS5PAD ||
529 data[0] == WACOM_REPORT_CINTIQPAD))
533 buttons = (data[3] << 1) | (data[2] & 0x01);
534 ring1 = data[1];
536 buttons = data[6];
538 buttons = (data[4] << 1) | (data[3] & 0x01);
540 buttons = (data[8] << 8) | data[6];
541 ring1 = data[1];
542 ring2 = data[2];
549 * ((data[3] & 0x1f) << 8) | data[4])
552 keys = ((data[3] & 0x1C) ? 1<<2 : 0) |
553 ((data[4] & 0xE0) ? 1<<1 : 0) |
554 ((data[4] & 0x07) ? 1<<0 : 0);
555 keyboard = !!(data[4] & 0xE0);
556 info = !!(data[3] & 0x1C);
559 mute_touch = !!(data[4] & 0x07);
564 wrench = !!(data[4] & 0x07);
568 keys = data[2] & 0x07;
570 wrench = !!(data[2] & 0x01);
571 keyboard = !!(data[2] & 0x02);
574 mute_touch = !!(data[2] & 0x04);
579 menu = !!(data[2] & 0x04);
581 input_report_abs(input, ABS_X, be16_to_cpup((__be16 *)&data[4]));
582 input_report_abs(input, ABS_Y, be16_to_cpup((__be16 *)&data[6]));
583 input_report_abs(input, ABS_Z, be16_to_cpup((__be16 *)&data[8]));
590 * d-pad right -> data[4] & 0x10
591 * d-pad up -> data[4] & 0x20
592 * d-pad left -> data[4] & 0x40
593 * d-pad down -> data[4] & 0x80
594 * d-pad center -> data[3] & 0x01
596 buttons = (data[4] << 1) | (data[3] & 0x01);
598 /* d-pad right -> data[2] & 0x10
599 * d-pad up -> data[2] & 0x20
600 * d-pad left -> data[2] & 0x40
601 * d-pad down -> data[2] & 0x80
602 * d-pad center -> data[1] & 0x01
604 buttons = ((data[2] >> 4) << 7) |
605 ((data[1] & 0x04) << 4) |
606 ((data[2] & 0x0F) << 2) |
607 (data[1] & 0x03);
611 * addition to the mechanical switch. Switch data is
612 * stored in data[4], capacitive data in data[5].
614 * Touch ring mode switch (data[3]) has no capacitive sensor
616 buttons = (data[4] << 1) | (data[3] & 0x01);
617 ring1 = data[2];
620 buttons = (data[8] << 10) | ((data[7] & 0x01) << 9) |
621 (data[6] << 1) | (data[5] & 0x01);
625 keys = data[9] & 0x07;
627 info = !!(data[9] & 0x01);
628 wrench = !!(data[9] & 0x02);
631 buttons = ((data[6] & 0x10) << 5) |
632 ((data[5] & 0x10) << 4) |
633 ((data[6] & 0x0F) << 4) |
634 (data[5] & 0x0F);
636 strip1 = ((data[1] & 0x1f) << 8) | data[2];
637 strip2 = ((data[3] & 0x1f) << 8) | data[4];
784 unsigned char *data = wacom->data;
785 int idx = (features->type == INTUOS) ? (data[1] & 0x01) : 0;
822 unsigned char *data = wacom->data;
824 int idx = (features->type == INTUOS) ? (data[1] & 0x01) : 0;
826 if (!(((data[1] & 0xfc) == 0xc0) || /* in prox */
827 ((data[1] & 0xfe) == 0x20) || /* in range */
828 ((data[1] & 0xfe) == 0x80))) /* out prox */
832 if ((data[1] & 0xfc) == 0xc0) {
834 wacom->serial[idx] = ((__u64)(data[3] & 0x0f) << 28) +
835 (data[4] << 20) + (data[5] << 12) +
836 (data[6] << 4) + (data[7] >> 4);
838 wacom->id[idx] = (data[2] << 4) | (data[3] >> 4) |
839 ((data[7] & 0x0f) << 16) | ((data[8] & 0xf0) << 8);
848 if ((data[1] & 0xfe) == 0x20) {
863 if ((data[1] & 0xfe) == 0x80) {
898 unsigned char *data = wacom->data;
900 int idx = (features->type == INTUOS) ? (data[1] & 0x01) : 0;
901 unsigned char type = (data[1] >> 1) & 0x0F;
904 if (data[0] != WACOM_REPORT_PENABLED && data[0] != WACOM_REPORT_CINTIQ &&
905 data[0] != WACOM_REPORT_INTUOS_PEN)
919 * don't report events for invalid data
934 /* Cintiq doesn't send data when RDY bit isn't set */
935 (features->type == CINTIQ && !(data[1] & 0x40)))
938 x = (be16_to_cpup((__be16 *)&data[2]) << 1) | ((data[9] >> 1) & 1);
939 y = (be16_to_cpup((__be16 *)&data[4]) << 1) | (data[9] & 1);
940 distance = data[9] >> 2;
958 t = (data[6] << 3) | ((data[7] & 0xC0) >> 5) | (data[1] & 1);
964 (((data[7] << 1) & 0x7e) | (data[8] >> 7)) - 64);
965 input_report_abs(input, ABS_TILT_Y, (data[8] & 0x7f) - 64);
967 input_report_key(input, BTN_STYLUS, data[1] & 2);
968 input_report_key(input, BTN_STYLUS2, data[1] & 4);
975 (data[6] << 2) | ((data[7] >> 6) & 3));
977 (((data[7] << 1) & 0x7e) | (data[8] >> 7)) - 64);
978 input_report_abs(input, ABS_TILT_Y, (data[8] & 0x7f) - 64);
985 t = (data[6] << 3) | ((data[7] >> 5) & 7);
986 t = (data[7] & 0x20) ? ((t > 900) ? ((t-1) / 2 - 1350) :
991 t = (data[6] << 3) | ((data[7] >> 5) & 7);
992 input_report_abs(input, ABS_RZ, (data[7] & 0x20) ?
999 input_report_key(input, BTN_LEFT, data[8] & 0x01);
1000 input_report_key(input, BTN_MIDDLE, data[8] & 0x02);
1001 input_report_key(input, BTN_RIGHT, data[8] & 0x04);
1003 input_report_key(input, BTN_SIDE, data[8] & 0x20);
1004 input_report_key(input, BTN_EXTRA, data[8] & 0x10);
1005 t = (data[6] << 2) | ((data[7] >> 6) & 3);
1006 input_report_abs(input, ABS_THROTTLE, (data[8] & 0x08) ? -t : t);
1011 input_report_key(input, BTN_LEFT, data[6] & 0x01);
1012 input_report_key(input, BTN_MIDDLE, data[6] & 0x02);
1013 input_report_key(input, BTN_RIGHT, data[6] & 0x04);
1014 input_report_rel(input, REL_WHEEL, ((data[7] & 0x80) >> 7)
1015 - ((data[7] & 0x40) >> 6));
1016 input_report_key(input, BTN_SIDE, data[6] & 0x08);
1017 input_report_key(input, BTN_EXTRA, data[6] & 0x10);
1020 (((data[7] << 1) & 0x7e) | (data[8] >> 7)) - 64);
1021 input_report_abs(input, ABS_TILT_Y, (data[8] & 0x7f) - 64);
1027 input_report_key(input, BTN_LEFT, data[8] & 0x04);
1028 input_report_key(input, BTN_MIDDLE, data[8] & 0x08);
1029 input_report_key(input, BTN_RIGHT, data[8] & 0x10);
1030 input_report_rel(input, REL_WHEEL, (data[8] & 0x01)
1031 - ((data[8] & 0x02) >> 1));
1035 input_report_key(input, BTN_SIDE, data[8] & 0x40);
1036 input_report_key(input, BTN_EXTRA, data[8] & 0x20);
1041 input_report_key(input, BTN_LEFT, data[8] & 0x01);
1042 input_report_key(input, BTN_MIDDLE, data[8] & 0x02);
1043 input_report_key(input, BTN_RIGHT, data[8] & 0x04);
1044 input_report_key(input, BTN_SIDE, data[8] & 0x10);
1045 input_report_key(input, BTN_EXTRA, data[8] & 0x08);
1070 unsigned char *data = wacom->data;
1074 if (data[0] != WACOM_REPORT_PENABLED &&
1075 data[0] != WACOM_REPORT_INTUOS_ID1 &&
1076 data[0] != WACOM_REPORT_INTUOS_ID2 &&
1077 data[0] != WACOM_REPORT_INTUOSPAD &&
1078 data[0] != WACOM_REPORT_INTUOS_PEN &&
1079 data[0] != WACOM_REPORT_CINTIQ &&
1080 data[0] != WACOM_REPORT_CINTIQPAD &&
1081 data[0] != WACOM_REPORT_INTUOS5PAD) {
1083 "%s: received unknown report #%d\n", __func__, data[0]);
1107 unsigned char *data = wacom_wac->data;
1116 if (data[0] != WACOM_REPORT_REMOTE) {
1118 __func__, data[0]);
1122 serial = data[3] + (data[4] << 8) + (data[5] << 16);
1140 input_report_key(input, BTN_0, (data[9] & 0x01));
1141 input_report_key(input, BTN_1, (data[9] & 0x02));
1142 input_report_key(input, BTN_2, (data[9] & 0x04));
1143 input_report_key(input, BTN_3, (data[9] & 0x08));
1144 input_report_key(input, BTN_4, (data[9] & 0x10));
1145 input_report_key(input, BTN_5, (data[9] & 0x20));
1146 input_report_key(input, BTN_6, (data[9] & 0x40));
1147 input_report_key(input, BTN_7, (data[9] & 0x80));
1149 input_report_key(input, BTN_8, (data[10] & 0x01));
1150 input_report_key(input, BTN_9, (data[10] & 0x02));
1151 input_report_key(input, BTN_A, (data[10] & 0x04));
1152 input_report_key(input, BTN_B, (data[10] & 0x08));
1153 input_report_key(input, BTN_C, (data[10] & 0x10));
1154 input_report_key(input, BTN_X, (data[10] & 0x20));
1155 input_report_key(input, BTN_Y, (data[10] & 0x40));
1156 input_report_key(input, BTN_Z, (data[10] & 0x80));
1158 input_report_key(input, BTN_BASE, (data[11] & 0x01));
1159 input_report_key(input, BTN_BASE2, (data[11] & 0x02));
1161 if (data[12] & 0x80)
1162 input_report_abs(input, ABS_WHEEL, (data[12] & 0x7f) - 1);
1166 bat_percent = data[7] & 0x7f;
1167 bat_charging = !!(data[7] & 0x80);
1169 if (data[9] | data[10] | (data[11] & 0x03) | data[12])
1179 touch_ring_mode = (data[11] & 0xC0) >> 6;
1198 unsigned char *data = wacom_wac->data;
1204 if (data[0] != WACOM_REPORT_DEVICE_LIST)
1211 int serial = (data[j+6] << 16) + (data[j+5] << 8) + data[j+4];
1239 unsigned char *data)
1241 memcpy(wacom->data, data, 10);
1251 unsigned char data[WACOM_PKGLEN_MAX];
1255 memcpy(data, wacom->data, len);
1257 switch (data[0]) {
1259 wacom_intuos_bt_process_data(wacom, data + i);
1263 wacom_intuos_bt_process_data(wacom, data + i);
1265 wacom_intuos_bt_process_data(wacom, data + i);
1267 power_raw = data[i];
1279 data[0], data[1], len);
1314 unsigned char *data = wacom->data;
1322 wacom->serial[0] = get_unaligned_le64(&data[99]);
1323 wacom->id[0] = get_unaligned_le16(&data[107]);
1327 wacom->serial[0] = get_unaligned_le64(&data[33]);
1328 wacom->id[0] = get_unaligned_le16(&data[41]);
1340 unsigned char *frame = &data[i*pen_frame_len + 1];
1355 unsigned char *frame = &data[i*pen_frame_len + 1];
1449 unsigned char *data = wacom->data;
1454 unsigned char *frame = &data[i*finger_frame_len + 109];
1503 input_report_switch(touch_input, SW_MUTE_DEVICE, !(data[281] >> 7));
1512 unsigned char *data = wacom->data;
1515 int expresskeys = data[282];
1516 int center = (data[281] & 0x40) >> 6;
1517 int ring = data[285] & 0x7F;
1518 bool ringstatus = data[285] & 0x80;
1521 /* Fix touchring data: userspace expects 0 at left and increasing clockwise */
1541 unsigned char *data = wacom->data;
1543 bool chg = data[284] & 0x80;
1544 int battery_status = data[284] & 0x7F;
1553 unsigned char *data = wacom->data;
1555 int buttons = data[44];
1568 unsigned char *data = wacom->data;
1570 bool chg = data[45] & 0x80;
1571 int battery_status = data[45] & 0x7F;
1579 unsigned char *data = wacom->data;
1581 if (data[0] != 0x80 && data[0] != 0x81) {
1583 "%s: received unknown report #%d\n", __func__, data[0]);
1603 unsigned char *data = wacom->data;
1605 int current_num_contacts = data[61];
1615 current_num_contacts = data[63];
1632 bool touch = (data[offset] & 0x1) && report_touch_events(wacom);
1633 int slot = input_mt_get_slot_by_key(input, data[offset + 1]);
1641 int t_x = get_unaligned_le16(&data[offset + 2]);
1642 int t_y = get_unaligned_le16(&data[offset + 4 + y_offset]);
1648 int c_x = get_unaligned_le16(&data[offset + 4]);
1649 int c_y = get_unaligned_le16(&data[offset + 8]);
1650 int w = get_unaligned_le16(&data[offset + 10]);
1651 int h = get_unaligned_le16(&data[offset + 12]);
1674 unsigned char *data = wacom->data;
1676 int current_num_contacts = data[2];
1696 bool touch = (data[offset] & 0x1) && report_touch_events(wacom);
1697 int id = get_unaligned_le16(&data[offset + 1]);
1706 int x = get_unaligned_le16(&data[offset + x_offset + 7]);
1707 int y = get_unaligned_le16(&data[offset + x_offset + 9]);
1725 unsigned char *data = wacom->data;
1729 int p = data[1] & (1 << i);
1735 int x = le16_to_cpup((__le16 *)&data[i * 2 + 2]) & 0x7fff;
1736 int y = le16_to_cpup((__le16 *)&data[i * 2 + 6]) & 0x7fff;
1752 unsigned char *data = wacom->data;
1761 prox = prox && (data[0] & 0x01);
1762 x = get_unaligned_le16(&data[1]);
1763 y = get_unaligned_le16(&data[3]);
1765 prox = prox && (data[2] & 0x01);
1766 x = get_unaligned_le16(&data[3]);
1767 y = get_unaligned_le16(&data[5]);
1769 prox = prox && (data[1] & 0x01);
1770 x = le16_to_cpup((__le16 *)&data[2]);
1771 y = le16_to_cpup((__le16 *)&data[4]);
1788 unsigned char *data = wacom->data;
1790 bool prox = data[1] & 0x20;
1794 wacom->tool[0] = (data[1] & 0x0c) ? BTN_TOOL_RUBBER : BTN_TOOL_PEN;
1803 input_report_key(input, BTN_STYLUS, data[1] & 0x02);
1804 input_report_key(input, BTN_STYLUS2, data[1] & 0x10);
1805 input_report_abs(input, ABS_X, le16_to_cpup((__le16 *)&data[2]));
1806 input_report_abs(input, ABS_Y, le16_to_cpup((__le16 *)&data[4]));
1807 input_report_abs(input, ABS_PRESSURE, ((data[7] & 0x07) << 8) | data[6]);
1808 input_report_key(input, BTN_TOUCH, data[1] & 0x05);
1818 unsigned char *data = wacom->data;
1822 "%s: received report #%d\n", __func__, data[0]);
1825 data[0] == WACOM_REPORT_PENABLED)
1830 "%s: received report #%d\n", __func__, data[0]);
1840 switch (data[0]) {
2121 /* do not overwrite previous data */
2683 // No data to send for this slot; short-circuit
2840 /* If more packets of data are expected, give us a chance to
3012 unsigned char *data = wacom->data;
3015 if (data[0] != 0x02)
3019 int offset = (data[1] & 0x80) ? (8 * i) : (9 * i);
3021 && (data[offset + 3] & 0x80);
3026 int x = get_unaligned_be16(&data[offset + 3]) & 0x7ff;
3027 int y = get_unaligned_be16(&data[offset + 5]) & 0x7ff;
3039 input_report_key(pad_input, BTN_LEFT, (data[1] & 0x08) != 0);
3040 input_report_key(pad_input, BTN_FORWARD, (data[1] & 0x04) != 0);
3041 input_report_key(pad_input, BTN_BACK, (data[1] & 0x02) != 0);
3042 input_report_key(pad_input, BTN_RIGHT, (data[1] & 0x01) != 0);
3048 static void wacom_bpt3_touch_msg(struct wacom_wac *wacom, unsigned char *data)
3052 bool touch = data[1] & 0x80;
3053 int slot = input_mt_get_slot_by_key(input, data[0]);
3064 int x = (data[2] << 4) | (data[4] >> 4);
3065 int y = (data[3] << 4) | (data[4] & 0x0f);
3069 width = data[5] * 100;
3070 height = data[6] * 100;
3077 int a = data[5];
3091 static void wacom_bpt3_button_msg(struct wacom_wac *wacom, unsigned char *data)
3097 input_report_key(input, BTN_LEFT, (data[1] & 0x02) != 0);
3098 input_report_key(input, BTN_BACK, (data[1] & 0x08) != 0);
3100 input_report_key(input, BTN_BACK, (data[1] & 0x02) != 0);
3101 input_report_key(input, BTN_LEFT, (data[1] & 0x08) != 0);
3103 input_report_key(input, BTN_FORWARD, (data[1] & 0x04) != 0);
3104 input_report_key(input, BTN_RIGHT, (data[1] & 0x01) != 0);
3109 unsigned char *data = wacom->data;
3110 int count = data[1] & 0x07;
3113 if (data[0] != 0x02)
3116 /* data has up to 7 fixed sized 8-byte messages starting at data[2] */
3119 int msg_id = data[offset];
3122 wacom_bpt3_touch_msg(wacom, data + offset);
3125 wacom_bpt3_button_msg(wacom, data + offset);
3129 /* only update touch if we actually have a touchpad and touch data changed */
3142 unsigned char *data = wacom->data;
3147 if (data[0] != WACOM_REPORT_PENABLED)
3150 range = (data[1] & 0x80) == 0x80;
3151 prox = (data[1] & 0x40) == 0x40;
3152 rdy = (data[1] & 0x20) == 0x20;
3159 p = le16_to_cpup((__le16 *)&data[6]);
3160 pen = data[1] & 0x01;
3161 btn1 = data[1] & 0x02;
3162 btn2 = data[1] & 0x04;
3165 x = le16_to_cpup((__le16 *)&data[2]);
3166 y = le16_to_cpup((__le16 *)&data[4]);
3168 if (data[1] & 0x08) {
3184 if (data[8] <= features->distance_max)
3185 d = features->distance_max - data[8];
3231 unsigned char *data)
3242 prefix = data[0];
3243 data[0] = WACOM_REPORT_BPAD_PEN;
3250 hid_input_report(wacom->shared->pen, HID_INPUT_REPORT, data,
3253 data[0] = prefix;
3257 unsigned char *data)
3265 prefix = data[0];
3277 finger_data = data + 1 + id * 3;
3298 unsigned char *data = wacom->data;
3302 (data[0] != WACOM_REPORT_BPAD_TOUCH))
3305 if (data[1] & 0x01)
3306 wacom_bamboo_pad_pen_event(wacom, &data[1]);
3308 if (data[1] & 0x02)
3309 return wacom_bamboo_pad_touch_event(wacom, &data[9]);
3316 unsigned char *data = wacom->data;
3319 if (len != WACOM_PKGLEN_WIRELESS || data[0] != WACOM_REPORT_WL)
3322 connected = data[1] & 0x01;
3331 SW_MUTE_DEVICE, data[5] & 0x40);
3335 pid = get_unaligned_be16(&data[6]);
3336 battery = (data[5] & 0x3f) * 100 / 31;
3337 charging = !!(data[5] & 0x80);
3360 unsigned char *data = wacom_wac->data;
3362 if (data[0] != WACOM_REPORT_USB)
3370 SW_MUTE_DEVICE, data[8] & 0x40);
3374 if (data[9] & 0x02) { /* wireless module is attached */
3375 int battery = (data[8] & 0x3f) * 100 / 31;
3376 bool charging = !!(data[8] & 0x80);
3460 else if (wacom_wac->data[0] == WACOM_REPORT_USB)
3486 if (wacom_wac->data[0] == WACOM_REPORT_USB)
3502 if (wacom_wac->data[0] == WACOM_REPORT_DEVICE_LIST)
3597 * Intuos5/Pro and Bamboo 3rd gen have no useful data about its
3627 * sends ghosts PAD data on it. However, later, we must disable this