From e6c49319e1b84287f8fa07559b820cdf4cb5bc7b Mon Sep 17 00:00:00 2001 From: Tim Blechmann Date: Fri, 9 Dec 2005 12:50:06 +0000 Subject: improved find_hid searching capabilities svn path=/trunk/abstractions/tb/; revision=4179 --- find_hid.py | 56 ++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 44 insertions(+), 12 deletions(-) (limited to 'find_hid.py') diff --git a/find_hid.py b/find_hid.py index 15b56ff..99f474e 100644 --- a/find_hid.py +++ b/find_hid.py @@ -16,28 +16,60 @@ # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # -# $Id: find_hid.py,v 1.1 2005-12-04 18:11:08 timblech Exp $ +# $Id: find_hid.py,v 1.2 2005-12-09 12:50:06 timblech Exp $ # from os import popen, listdir +def parse_device(event, rules): + pipe = popen('udevinfo -a -p /sys/class/input/%s' % event) + + line = pipe.readline() + while line: + line.strip() + if '==' in line: + setting, value = line.split('==') + setting = setting.strip() + if '{' in setting: + setting = setting.split('{')[1].split('}')[0] + value = value.strip().strip('"') + + if setting in rules: + if rules [setting] == value: + # we matched one rule, so we remove it from the pending rules + del rules[setting] + + line = pipe.readline() + + if len(rules) == 0: + pipe.close() + print event + return float(event.strip("event")) + + pipe.close() + return -1 + def find (*args): name = "" for token in args: name+=" " + str(token) + name = name.strip() + rules = name.split('" "') + rules = map (lambda x: x.strip('"'), rules) - events = filter(lambda x: "event" in x, listdir('/sys/class/input/')) - - for event in events: - pipe = popen('udevinfo -a -p /sys/class/input/%s' % event) + ruledict = dict() - line = pipe.readline() - while line: - if name in line: - print event - return float(event.strip("event")) + for rule in rules: + setting, value = rule.split('=',1) + ruledict[setting] = value + rules = ruledict - line = pipe.readline() - pipe.close() + events = filter(lambda x: "event" in x, listdir('/sys/class/input/')) + + for event in events: + ret = parse_device(event, dict(rules)) + if ret != -1: + return int(ret) + return -1 -- cgit v1.2.1