저는 Ubuntu 시스템에서 libudev
전원 공급 장치 변경을 모니터링하는 작은 C 프로그램을 작성하고 있습니다. 이 단계에서는 AC 어댑터가 활성화된 시기와 배터리가 활성화된 시기를 성공적으로 감지하고 싶습니다. 다음을 처리하기 위해 여기에 있는 코드를 적용하고 있습니다 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"과 "Power"를 시도했지만 성공하지 못했습니다.
코드는 다음과 같습니다.
Device Node Path: (null)
Unable to find parent power supply device.
위에 나열된 함수를 사용하여 설정을 시도한 (!dev)
후 true로 평가될 때 수행할 작업은 다음과 같습니다 .dev
누군가 개발 유형을 알아내기 위해 올바른 방향을 알려줄 수 있습니까? 링크된 코드를 인용하면 도움이 되지만 이 라이브러리에 대한 문서는...제한적이라는 것을 알았습니다.
답변1
이 subsystem
줄에는 다음이 나열됩니다.
E: SUBSYSTEM=power_supply
그러나 배터리와 AC 어댑터에는 이 없는 것 같으 므로 a를 함수에 매개변수로 전달하는 devtype
것이 완벽하게 허용됩니다 .NULL
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);