我正在 Ubuntu 机器上编写一个小型 C 程序,用于libudev
监视电源的变化。在此阶段,我只想成功检测交流适配器何时处于活动状态以及电池何时处于活动状态。我正在调整此处找到的代码以处理libudev
:http://www.signal11.us/oss/udev/
链接的代码示例适用于 USB 设备,并且有问题的函数 ( udev_device_get_parent_with_subsystem_devtype(dev, "usb", "usb_device");
) 是我当前正在尝试更改的函数。从外壳运行udevadm info /sys/class/power_supply/BAT0
(电池)后,我得到以下输出:
P: /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:18/PNP0C09:00/PNP0C0A:00/power_supply/BAT0
E: DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:18/PNP0C09:00/PNP0C0A:00/power_supply/BAT0
E: POWER_SUPPLY_CAPACITY=61
E: POWER_SUPPLY_CAPACITY_LEVEL=Normal
E: POWER_SUPPLY_CHARGE_FULL=3850000
E: POWER_SUPPLY_CHARGE_FULL_DESIGN=3950000
E: POWER_SUPPLY_CHARGE_NOW=2365000
E: POWER_SUPPLY_CURRENT_NOW=916000
E: POWER_SUPPLY_CYCLE_COUNT=0
E: POWER_SUPPLY_MANUFACTURER=LGC-LGC3.95
E: POWER_SUPPLY_MODEL_NAME=DELL 92NCT556
E: POWER_SUPPLY_NAME=BAT0
E: POWER_SUPPLY_PRESENT=1
E: POWER_SUPPLY_SERIAL_NUMBER= 5359
E: POWER_SUPPLY_STATUS=Discharging
E: POWER_SUPPLY_TECHNOLOGY=Li-ion
E: POWER_SUPPLY_VOLTAGE_MIN_DESIGN=11100000
E: POWER_SUPPLY_VOLTAGE_NOW=11339000
E: SUBSYSTEM=power_supply
所以我可以看出子系统的参数应该是“power_supply”,但我不确定应该为“devtype”输入什么。我尝试了“BAT0”和“电源”,但没有成功。
代码吐出:
Device Node Path: (null)
Unable to find parent power supply device.
这就是在尝试使用上面列出的函数(!dev)
进行设置后评估为 true时它将执行的操作。dev
有人可以指出我正确的方向来找出开发类型吗?引用链接的代码会很有帮助,但我发现有关该库的文档......有限。
答案1
该subsystem
行列出了:
E: SUBSYSTEM=power_supply
然而,电池和交流适配器似乎没有 a devtype
,因此完全可以接受将NULL
a 作为参数传递给函数devtype
。
在这种情况下,函数调用如下所示:
udev_device_get_parent_with_subsystem_devtype(dev, "power_supply", NULL);
如果udev_monitor*
使用了这些功能,则可以更轻松地power_supply
使用以下方式过滤事件:
udev_monitor_filter_add_match_subsystem_devtype(mon, "power_supply", NULL);