diff options
Diffstat (limited to 'tools/mpi2hwdb.py')
-rwxr-xr-x | tools/mpi2hwdb.py | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/tools/mpi2hwdb.py b/tools/mpi2hwdb.py new file mode 100755 index 0000000..64942e6 --- /dev/null +++ b/tools/mpi2hwdb.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python2 +# Generate hwdb file from music player identification (.mpi) files +# +# (C) 2009 Canonical Ltd. +# (C) 2013 Tom Gundersen <teg@jklm.no> +# Author: Tom Gundersen <teg@jklm.no> +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + +import sys, ConfigParser, os.path + +def parse_mpi(mpi): + '''Print hwdb file for given ConfigParser object.''' + + cp = ConfigParser.RawConfigParser() + assert cp.read(mpi) + + # if we have more info than just idVendor+idProduct we need to use an udev rule, + # so don't write an hwdb entry + for name in ['usbvendor', 'usbproduct', 'usbmodel', 'usbmanufacturer']: + try: + cp.get('Device', name) + return + except ConfigParser.NoOptionError: + continue + + try: + m = cp.get('Device', 'product') + print '#', m + except ConfigParser.NoOptionError: + pass + + try: + usbids = {} + for usbid in cp.get('Device', 'devicematch').split(';'): + if len(usbid.split(':')) != 3: + continue + (subsystem, vid, pid) = usbid.split(':') + if subsystem != "usb": + continue + if usbids.has_key(vid): + usbids[vid].append(pid) + else: + usbids[vid] = [ pid ] + + for vid, pids in usbids.iteritems(): + for pid in pids: + print 'usb:v%sp%s*\n'% (vid.upper(), pid.upper()), + print ' ID_MEDIA_PLAYER=%s\n' % os.path.splitext(os.path.basename(mpi))[0], + + # do we have an icon? + try: + icon = cp.get('Device', 'icon') + # breaks media player detection : https://bugs.launchpad.net/ubuntu/+source/gvfs/+bug/657609 + #print ' UDISKS_PRESENTATION_ICON_NAME=%s\n' % icon, + except ConfigParser.NoOptionError: + pass + + # terminate line + print + + except ConfigParser.NoOptionError: + pass + +# +# main +# + +# parse MPI files +for f in sys.argv[1:]: + parse_mpi(f) |