KGRKJGETMRETU895U-589TY5MIGM5JGB5SDFESFREWTGR54TY
Server : Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e-fips-rhel5 DAV/2 PHP/5.2.17
System : Linux localhost 2.6.18-419.el5 #1 SMP Fri Feb 24 22:47:42 UTC 2017 x86_64
User : nobody ( 99)
PHP Version : 5.2.17
Disable Function : NONE
Directory :  /proc/21571/root/usr/share/system-config-soundcard/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //proc/21571/root/usr/share/system-config-soundcard/soundcardBackendHal.py
## soundcardBackendKudzu.py - Contains the backend code needed for system-config-soundcard
## Copyright (C) 2002, 2003 Red Hat, Inc.
## Copyright (C) 2002, 2003 Brent Fox <bfox@redhat.com>
## Copyright (C) 2004, 2005 Bastien Nocera <hadess@hadess.net>

## Based on code by Dan Williams <dcbw@redhat.com>

## 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., 675 Mass Ave, Cambridge, MA 02139, USA.


import string
import os
import sys
import dbus

##
## I18N
## 
from rhpl.translate import _, N_
import rhpl.translate as translate
translate.textdomain ("system-config-soundcard")

HAL_DEVICE_IFACE = "org.freedesktop.Hal.Device"
ALLOWED_TYPE = "playback"

import soundcardBackendSoundCard

class soundcardBackendHal:
    def __init__(self):
    
        self.doDebug = True

        self._dbusBus = dbus.SystemBus()
        self.halManagerObj = self._dbusBus.get_object("org.freedesktop.Hal", "/org/freedesktop/Hal/Manager")
        self.halManager = dbus.Interface(self.halManagerObj, "org.freedesktop.Hal.Manager")
        
        self.driverList = self.read_driver_list()
                
        self.cards = {}

    def destroy(self, args):
        return

    # ------------------------------------------------------------------------
    # Probe routines - drivers
    # ------------------------------------------------------------------------
    def read_driver_list(self):
        try:
            fd = open('/proc/asound/modules', 'r')
            list = fd.readlines()
            fd.close()
        except:
            return []

        drivers = []
        for line in list:
            tmp = line.split()
            drivers.append([int(tmp[0]), string.replace(tmp[1],'_','-')])
    
        return drivers

    def find_driver(self, list, position):
        for rec in list:
            if rec[0] == position:
                return rec[1]

        return _("Unknown")

    # ------------------------------------------------------------------------
    # Probe routines - HAL
    # ------------------------------------------------------------------------

    def getProperty(self, obj, prop):
        if not obj.PropertyExists(prop, dbus_interface=HAL_DEVICE_IFACE):
            return None
        return obj.GetProperty(prop, dbus_interface=HAL_DEVICE_IFACE)

    def getVendor(self, udi):
        parentUdi = udi
        while parentUdi and len(parentUdi):
            obj = self._dbusBus.get_object("org.freedesktop.Hal", parentUdi)
            
            vendor = self.getProperty(obj, "info.vendor")
            if vendor != None:
                return vendor, self.getProperty(obj, "info.product")
                
            new_parentUdi = self.getProperty(obj, "info.parent")
            if new_parentUdi == None:
                break
            parentUdi = new_parentUdi
        
    def getBus(self, udi):
        parentUdi = udi
        while parentUdi and len(parentUdi):
            obj = self._dbusBus.get_object("org.freedesktop.Hal", parentUdi)
            
            bus = self.getProperty(obj, "info.bus")
            if bus != None:
                return bus
                
            new_parentUdi = self.getProperty(obj, "info.parent")
            if new_parentUdi == None:
                break
            parentUdi = new_parentUdi

    def getDriver(self, udi):
        parentUdi = udi
        while parentUdi and len(parentUdi):
            obj = self._dbusBus.get_object("org.freedesktop.Hal", parentUdi)
            
            driver = self.getProperty(obj, "info.linux.driver")
            if driver != None:
                return driver
                
            new_parentUdi = self.getProperty(obj, "info.parent")
            if new_parentUdi == None:
                break
            parentUdi = new_parentUdi

    def getDevices(self, udi):
        # Search for other devices
        #children = self.halManager.FindDeviceStringMatch("info.parent", udi)
        #for childUdi in children:
        #    self.getChildDevices(childUdi)
    
        # Add ourselves if we're an alsa device
        obj = self._dbusBus.get_object("org.freedesktop.Hal", udi)
        category = self.getProperty(obj, "info.category")
        
        if category == "alsa" and self.getProperty(obj, "alsa.type") == ALLOWED_TYPE:
            index = self.getProperty(obj, "alsa.card")
            if index != None and not self.cards.has_key(index):
                card = soundcardBackendSoundCard.soundCard(index)
                card.active = True                
                card.maker, card.model = self.getVendor(udi)
                card.type = string.split(card.maker)[0]
                card.bus = self.getBus(udi)
                card.driver = self.find_driver(self.driverList, card.index)
                #card.driver = self.getDriver(udi)
                card.device_list = card.loadCardDevices()
                self.cards[index] = card

    # TODO?
    # Only add USB audio devices that have snd-usb-audio as the driver
    #if card.bus() == "usb" and card.driver() != "snd-usb-audio":
    #    continue
    # Same with Mac sound devices
    #if card.bus() == "macio" and card.driver() != "snd-powermac":
    def probeCards(self, default_card, default_device, card_list, card_max):

        udiList = self.halManager.FindDeviceByCapability("alsa")        
        for udi in udiList:
            self.getDevices(udi)
        
        for index in self.cards:
            if index < card_max :
                card_list[index] = self.cards[index]
                
        card_list[default_card].default_device = default_device

        return card_list

Anon7 - 2021