Chinaunix首页 | 论坛 | 博客
  • 博客访问: 187463
  • 博文数量: 40
  • 博客积分: 1900
  • 博客等级: 上尉
  • 技术积分: 450
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-06 21:31
文章分类
文章存档

2009年(16)

2008年(24)

我的朋友

分类: LINUX

2008-12-19 09:44:50

很久之前作一个客户项目的时候就遇到类似的问题。当时实现了一个类似桌面面板一样的东西,有网络状态,输入法,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) |
给主人留下些什么吧!~~