On Wed, Oct 5, 2016 at 8:29 AM, Simon Wood <simon@xxxxxxxxxxxxx> wrote: > On Wed, October 5, 2016 2:35 am, Benjamin Tissoires wrote: >> On Oct 04 2016 or thereabouts, Roderick Colenbrander wrote: > >>> + /* >>> + * The first 7 bits of the first byte is a counter and bit 8 is >>> + * a touch indicator that is 0 when pressed and 1 when not >>> + * pressed. >>> + * The next 3 bytes are two 12 bit touch coordinates, X and Y. >>> + * The data for the second touch is in the same format and >>> + * immediately follows the data for the first. >>> + */ >>> + for (n = 0; n < 2; n++) { >>> + u16 x, y; >>> + bool active; >>> + >>> + x = rd[offset+1] | ((rd[offset+2] & 0xF) << 8); >>> + y = ((rd[offset+2] & 0xF0) >> 4) | (rd[offset+3] << 4); >>> + >>> + active = !(rd[offset] >> 7); >>> + input_mt_slot(input_dev, n); >>> >> >> Just to be sure, the device reports 2 touches only, and the >> "num_touch_data" chunks are just the history of these 2 touches, the >> last chunk being the last known touches? > > FYI - Community knowledge/understanding... > http://www.psdevwiki.com/ps4/DS4-BT#HID_INPUT_reports > > Simon > Hi Ben and Simon, Correct, the DS4 sends a touch history. The last element is the latest. An input report can contain multiple touch samples, because the device internally samples at a rate which is higher than at which it generates HID reports. On USB you can easily see multiple touch events and it is even easier on Bluetooth (especially if it is set to a low frequency). The extra history is important for gestures. Thanks, Roderick -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html