2008-09-16 5 views
4

J'appelle GetProperty sur un org.freedesktop.Hal.Device depuis mon gestionnaire pendant un signal PropertyNotified. J'appelle seulement GetProperty sur les propriétés qui ont été ajoutées ou modifiées.Quand les propriétés hal sont-elles mises à jour?

Lorsque j'appelle GetProperty lors de l'ajout de propriétés, j'obtiens une exception org.freedesktop.Hal.NoSuchProperty. Je suis également inquiet que pendant les changements, je reçois les anciennes valeurs.

Quand dois-je appeler GetProperty? Quelles sont les conditions de course?

Répondre

1

Que diriez-vous DeviceExists méthode (comme here):

if device.PropertyExists('info.product'): 
     return device.GetProperty('info.product') 
    return "unknown" 

Et PropertyModified signaux, (ex from real world):

# 
# _CBHalDeviceConnected 
# 
# INTERNAL 
# 
# Callback triggered when a device is connected through Hal. 
# 

def _CBHalDeviceConnected(self, obj_path): 
... 
self.device.connect_to_signal("PropertyModified", 
    self._CBHalDeviceAuthStateChanged) 
... 

# 
# _CBHalDeviceAuthStateChanged 
# 
# INTERNAL 
# 
# Callback triggered when a Hal device property is changed, 
# for checking authorization state changes 
# 

def _CBHalDeviceAuthStateChanged(self,num_changes,properties): 
for property in properties: 
property_name, added, removed = property 
if property_name == "pda.pocketpc.password": 
self.logger.info("_CBHalDeviceAuthStateChanged: 
    device authorization state changed: reauthorizing") 
self._ProcessAuth() 

HAL 0.5.10 Specification
D-Bus Specification
D-Bus Tutorial

Questions connexes