Determine o devtype e o subsistema para fontes de alimentação de laptops

3

Estou escrevendo um pequeno programa em C em uma máquina Ubuntu usando libudev para monitorar as alterações na fonte de alimentação. Nesta fase, eu só quero detectar com sucesso quando o adaptador AC está ativo vs. quando a bateria está ativa. Estou adaptando o código encontrado aqui para trabalhar com libudev : link

O exemplo de código vinculado está funcionando com dispositivos USB e a função em questão ( udev_device_get_parent_with_subsystem_devtype(dev, "usb", "usb_device"); ) é o que eu estou tentando alterar no momento. Depois de executar udevadm info /sys/class/power_supply/BAT0 (a bateria) do shell, recebo a seguinte saída:

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

Então eu posso dizer que o argumento para o subsistema deve ser "power_supply", mas não tenho certeza do que colocar para "devtype". Eu tentei "BAT0" e "poder" sem sucesso.

O código é lançado:

Device Node Path: (null)
Unable to find parent power supply device.

Isso é o que fará se (!dev) avaliar true depois de tentar definir dev usando a função que listei acima.

Alguém pode me apontar na direção certa para descobrir o devtype para isso? Fazer referência ao código vinculado será útil, mas estou achando a documentação dessa biblioteca limitada ...

    
por armadadrive 07.09.2015 / 15:17

1 resposta

0

O subsystem está listado nesta linha:

E: SUBSYSTEM=power_supply

No entanto, parece que a bateria e o adaptador CA não têm devtype e, portanto, é perfeitamente aceitável passar NULL para a função como um argumento no lugar de devtype .

Nesse caso, a chamada de função é assim:

udev_device_get_parent_with_subsystem_devtype(dev, "power_supply", NULL);

Se as funções udev_monitor* estiverem ativadas, poderá ser mais fácil filtrar por power_supply eventos usando:

udev_monitor_filter_add_match_subsystem_devtype(mon, "power_supply", NULL);
    
por 08.09.2015 / 01:11