很久之前作一个客户项目的时候就遇到类似的问题。当时实现了一个类似桌面面板一样的东西,有网络状态,输入法,VolumeManager,Clock,电池等插件。
当时遇到的一个问题就是,通过hal/dbus取电池的charging/discharging的时候总是会延迟很严重。
hal的信息看起来大概是这个样子:
udi = '/org/freedesktop/Hal/devices/computer_power_supply_battery_BAT0'
battery.charge_level.current = 29248 (0x7240) (int)
battery.charge_level.design = 53280 (0xd020) (int)
battery.charge_level.last_full = 37640 (0x9308) (int)
battery.charge_level.percentage = 77 (0x4d) (int)
battery.charge_level.rate = 16061 (0x3ebd) (int)
battery.is_rechargeable = true (bool)
battery.model = 'Dell NF3436' (string)
battery.present = true (bool)
battery.rechargeable.is_charging = true (bool) battery.rechargeable.is_discharging = false (bool)当时取的就是上面加粗的两条信息,问题就是很慢,拔掉之后要很长时间(数秒)才能改变状态,从hal来看也确实是这样,因为他的信息就没有变,当然我们取到的也没变了。
昨天闲着无聊,又翻了以前的代码,看了以下lshal输出,发现还有这个东西:
udi = '/org/freedesktop/Hal/devices/computer_power_supply_ac_adapter_AC'
ac_adapter.present = true (bool) info.capabilities = {'ac_adapter'} (string list)
info.category = 'ac_adapter' (string)
info.parent = '/org/freedesktop/Hal/devices/computer' (string)
info.product = 'Generic AC Adapter Device' (string)
info.udi = '/org/freedesktop/Hal/devices/computer_power_supply_ac_adapter_AC' (string)
linux.hotplug_type = 2 (0x2) (int)
linux.subsystem = 'power_supply' (string)
linux.sysfs_path = '/sys/class/power_supply/AC' (string)
而这条property的更新是相当迅速的,到今天为止,问题才算得到了解决。
看来写电源管理工具的通知,尤其是kpowersave,修为颇深啊。
至于为什么这条快,那条慢,感兴趣的要自己看了。
放张图吧,没有代码:-
阅读(1102) | 评论(0) | 转发(0) |