← Back to team overview

multi-touch-dev team mailing list archive

script to detect MT devices

 

Marc Tardif was kind enough to write the script in Python (which will
make integration with apport much easier).

Can you guys try it with your hardware, please?

Thanks!
Ara.

El 18/08/10 07:48, Rafi Rubin escribió:
> Not present on 2.6.35-{14,15,16} for x86_64 on my xt.
> 
> $ cat /sys/class/input/event*/dev*/cap*/abs                     ~  1:14AM 
> holly
> 0
> 0
> 0
> 0
> 0
> 0
> 1000003
> 73010000000003
> 30000000003
> 0
> 0
> 0
> $ uname -a                                                      ~  1:15AM 
> holly
> Linux holly 2.6.35-15-generic #21-Ubuntu SMP Wed Aug 11 17:06:48 UTC 2010 
> x86_64 GNU/Linux
> 
> 
> I will start a 32b image download and will have to figure out a way to 
> test multiple kernels.  I guess I can blow away swap or something for 
> another install.
> 
> Nothing terribly obvious in the delta of the source for -13 -> -15 
> (assuming I grabbed the correct git tree).
> 
> Anyway the functions in questions are input_bits_to_string 
> (input.c:814ish) and input_print_bitmap (1218) or maybe 
> input_seq_print_bitmap.
> 
> Anyway should be easy enough to figure out, and we probably should do to 
> increase consistency.  However, it might also make sense to adjust the 
> script to account for buggy kernels which might not get fixed before 
> people start testing and asking questions.
> 
> Rafi
> 
> On Wed, Aug 18, 2010 at 12:58:20AM +0200, Mohamed Ikbel Boulabiar wrote:
>> I have exactly the same cat output and the same kernel as Duncan with my hp tx2.
>>
>> ik.
>>
>> On Wed, Aug 18, 2010 at 12:56 AM, Duncan McGreggor
>> <duncan.mcgreggor@xxxxxxxxxxxxx> wrote:
>>>>> Henrik and Rafi,
>>>>>
>>>>> I've tried to use this script with the Lenovo T410s, and it fails. It
>>>>> seems that the following N-trig device returns two integers instead of
>>>>> the expected one integer:
>>>>>
>>>>> ? ?/sys/class/input/event10/device/capabilities/abs
>>>>>
>>>>> cat'ing it gives the following:
>>>>>
>>>>> ? ?730100 3
>>>>
>>>> That is a bit strange. ?What kernel version were you using at the time
>>>> and do you have another kernel version installed?
>>>>
>>>> (wondering if its just a broken sprintf)
>>>
>>> ?$ uname -a
>>> ?Linux bree 2.6.35-15-generic #21-Ubuntu SMP Wed Aug 11 16:41:40 UTC
>>> 2010 i686 GNU/Linux
>>
>> _______________________________________________
>> Mailing list: https://launchpad.net/~multi-touch-dev
>> Post to     : multi-touch-dev@xxxxxxxxxxxxxxxxxxx
>> Unsubscribe : https://launchpad.net/~multi-touch-dev
>> More help   : https://help.launchpad.net/ListHelp
>>
> 
> _______________________________________________
> Mailing list: https://launchpad.net/~multi-touch-dev
> Post to     : multi-touch-dev@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~multi-touch-dev
> More help   : https://help.launchpad.net/ListHelp
#!/usr/bin/env python

import os
import sys

from glob import glob
from optparse import OptionParser


class Event(object):

    def __init__(self, path):
        self.path = path

    @property
    def capabilities(self):
        path = os.path.join(self.path, "device", "capabilities", "abs")
        line = read_line(path)
        capabilities = 0
        for i, word in enumerate(line.split(" ")):
            capabilities += int(word, 16) * 2^(i*4)
        return capabilities

    @property
    def device(self):
        base = os.path.basename(self.path)
        return os.path.join("/dev", "input", base)

    @property
    def name(self):
        path = os.path.join(self.path, "device", "name")
        return read_line(path)


def get_events(input):
    event_glob = os.path.join(input, "event*")
    for event_path in glob(event_glob):
        yield Event(event_path)

def read_line(path):
    f = open(path)
    try:
        return f.readline().strip()
    finally:
        f.close()

def main(args):
    usage = "Usage: %prog [OPTIONS]"
    parser = OptionParser(usage=usage)
    parser.add_option("-i", "--input",
        metavar="FILE",
        default="/sys/class/input",
        help="Input sysfs directory")
    (options, args) = parser.parse_args(args)

    detected = False
    for event in get_events(options.input):
        if event.capabilities & 0x35:
            if not detected:
                detected = True
                print "Found device(s):"
            print "%s: %s" % (event.name, event.device)

    if not detected:
        print "No MT-capable device found..."
        return 1

    else:
        return 0

if __name__ == "__main__":
    sys.exit(main(sys.argv[1:]))

Follow ups

References