ACPIイベントのさまざまな部分はどういう意味ですか?

ACPIイベントのさまざまな部分はどういう意味ですか?

私はデュアルバッテリーを搭載したThinkPadノートブックを持っており、外部バッテリーを接続/解除するときに動作するGNOME用インジケーターアプリケーションを作成したいと思います。これらのイベントを読むには、次のようにacpidソケットに接続します。

#!/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

次の結果が表示されます。

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'

14番目の列は、バッテリーが差し込まれているのか、0抜けているのかということです。しかし、2番目と3番目の列は実際に何を意味しますか?私はこれを試しましたが、man acpid有用な情報が見つかりませんでした。

ベストアンサー1

これ列1端末カテゴリです。この値は、対応するACPIデバイスを処理するカーネルドライバから来ます。これは、「クラス」(例:「バッテリー」)または「クラス/サブクラス」(例:「ボタン/電源」)の形式です。

これ2列カーネルがデバイスに使用する名前です。/sys/bus/acpi/devices/各ACPIデバイスには一致するフォルダがあります。この名前の一般的な規則は次のとおりです。機器タイプ:インスタンス番号。で述べたようにカーネル文書、デバイスの種類は次のとおりです。

  1. LNXBIOSのACPIテーブルに記載されている特殊デバイスにカーネルが割り当てた名前。
  2. PnP HID(プラグアンドプレイハードウェアID、一部はセクション5.6.7で定義されています)ACPI仕様そして持って一部 リストACPI DSDTテーブルにHIDが割り当てられている他のデバイスの場合。
  3. device他のACPIデバイスの場合。

インスタンス番号は、同じタイプの複数のデバイスを区別するために使用される増分カウンタです。たとえば、プライマリバッテリーはPNP0C0A:00、セカンダリバッテリーはですPNP0C0A:01

これ3列イベントコードまたは「通知値」です。これはセクション5.6.6で定義されています。ACPI仕様00000001「デバイスの確認」(デバイスの表示または消去)、00000003「取り出し要求」、00000080「バッテリーの状態が変更されました」を示します.

これ4列カーネルドライバによって生成された補足値。この列の意味は、イベントコード、ドライバ、デバイスタイプの組み合わせによって異なります。 Linux ACPIバッテリードライバーは、「バッテリー状態の変更」イベント値を「1あり」と0「なし」に設定します。

おすすめ記事