O que significam as partes de um evento acpi?

1

Tenho um laptop ThinkPad com duas baterias e quero escrever um aplicativo de indicador para o GNOME que execute uma ação quando a bateria externa estiver conectada / desconectada. Para ler esses eventos, eu me conecto ao soquete do Google AdWords, da seguinte forma:

#!/usr/bin/env python3
import socket

ACPID_SOCKETFILE = "/var/run/acpid.socket"
RECV_SIZE = 4096

s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect(ACPID_SOCKETFILE)

try:
    while True:
        data = s.recv(RECV_SIZE)
        print(repr(data))
except:
    s.close()
    raise

E recebo uma saída como a seguinte:

b'battery PNP0C0A:01 00000080 00000001\n'
b'battery PNP0C0A:01 00000080 00000001\n'
b'battery PNP0C0A:01 00000003 00000000\n'
b'battery PNP0C0A:01 00000003 00000000\n'
b'battery PNP0C0A:01 00000080 00000001\n'
b'battery PNP0C0A:01 00000080 00000001\n'
b'battery PNP0C0A:01 00000003 00000000\n'
b'battery PNP0C0A:01 00000003 00000000\n'
b'battery PNP0C0A:01 00000001 00000001\n'
b'battery PNP0C0A:01 00000001 00000001\n'
b'battery PNP0C0A:01 00000080 00000001\n'
b'battery PNP0C0A:01 00000080 00000001\n'
b'battery PNP0C0A:01 00000003 00000000\n'
b'battery PNP0C0A:01 00000003 00000000\n'

Eu concluí que a quarta coluna é 1 se a bateria estiver conectada e 0 se estiver desconectada. Mas o que exatamente as segunda e terceira colunas significam? Eu tentei man acpid , mas não encontrei nenhuma informação útil.

    
por Andrew Sun 27.07.2015 / 04:30

1 resposta

1

A primeira coluna é a classe de dispositivo. Os valores vêm dos drivers do kernel que manipulam os respectivos dispositivos ACPI. Eles têm o formato "classe" (por exemplo, "bateria") ou "classe / subclasse" (por exemplo, "botão / energia").

A segunda coluna é o nome que o kernel usa para o dispositivo. Há pastas correspondentes em /sys/bus/acpi/devices/ para cada dispositivo ACPI. A regra geral para esses nomes é tipo de dispositivo : número da instância . Conforme descrito na documentação do kernel , o tipo de dispositivo é

  1. um nome atribuído pelo kernel, começando com LNX , para dispositivos especiais descritos nas tabelas da ACPI do seu BIOS.
  2. um PnP HID (ID do hardware do plug-and-play; alguns são definidos na seção 5.6.7 da especificação da ACPI e há alguns lista na internet) para outros dispositivos que tenham um HID atribuído na tabela DSDT da ACPI.
  3. device para qualquer outro dispositivo ACPI.

O número da instância é um contador incremental para diferenciar dispositivos diferentes do mesmo tipo. Por exemplo, sua bateria principal é PNP0C0A:00 e sua secundária é PNP0C0A:01 .

A terceira coluna é o código do evento ou "Valor da notificação". Eles estão definidos na seção 5.6.6 da especificação da ACPI . 00000001 significa "Verificação de Dispositivo" (o dispositivo apareceu ou desapareceu), 00000003 "Pedido de Ejeção" e 00000080 "Estado da Bateria Alterado".

A quarta coluna é um valor suplementar gerado pelo driver do kernel. O significado desta coluna varia para qualquer combinação de código de evento, driver e tipo de dispositivo. O driver da bateria Linux ACPI define o valor no evento "Battery Status Changed" como 1 para "presente" e 0 para "não presente".

    
por 19.12.2015 / 02:35