def METHOD_NAME(self):
    data = self.rxbuffer[5:]
    tstamp2 = data[4] | (data[5] << 8) | (data[6] << 16)
    tx = [f"TS1 {hex(data[1])} TS2 {tstamp2} UNK1: {mxformat(data[7:16])} UNK2: {mxformat(data[17:24])}"]
    if len(data) >= 16:
        ntouch = data[16]
        for i in range(ntouch):
            ptr = 24 + 30 * i
            finger = data[ptr]
            state = data[ptr + 1]
            x = data[ptr + 4] | (data[ptr + 5] << 8) 
            y = data[ptr + 6] | (data[ptr + 7] << 8)
            wj = data[ptr + 12] | (data[ptr + 13] << 8)
            wn = data[ptr + 14] | (data[ptr + 15] << 8)
            dg = data[ptr + 16] | (data[ptr + 17] << 8)
            prs = data[ptr + 18] | (data[ptr + 19] << 8)
            tx.append(f"F: {hex(finger)} S: {hex(state)} X: {x} Y: {y} MAJ: {wj} MIN: {wn} ANG: {dg} PRS: {prs} UNK1: {mxformat(data[ptr + 2:ptr+4])} UNK2: {mxformat(data[ptr + 8:ptr+12])} UNK3: {mxformat(data[ptr + 20:ptr+30])}")
        self.log(';'.join(tx))
    else:
        self.log(f"??? {mxformat(data)}")
    self.consume_bytes(self.want_bytes)
    self.want_bytes = 16
    self.state = Z2Tracer.main_z2