"charge_now"やその他のファイルがない場合、"acpi"コマンドはバッテリ寿命をどのように計算しますか?

"charge_now"やその他のファイルがない場合、"acpi"コマンドはバッテリ寿命をどのように計算しますか?

私はバッテリーの充電の有無に応じて、残りのバッテリー寿命や充電時間を計算するCプログラムを書いています。私がする方法は、以下を/sys/class/power_supply/BAT0読んで残りのバッテリ寿命を計算することです。

battery life = charge_now / current_now

充電時間の計算:

charge time = (charge_full - charge_now) / current_now

上記の2つの式は、コマンドの出力とまったく同じ結果を生成しますacpi。ただし、時には何らかの理由でファイルcharge_nowcharge_fullディレクトリcurrent_nowが存在しませんが、他のファイル(およびcapacity)がstatusまだ存在することがあります。このような場合、バッテリ寿命や充電時間を計算することはできません。しかし、acpiそれでも計算できます。これらのファイルが時々消えるのはなぜですか?このような場合でも、acpiバッテリ寿命と充電時間をどのように計算できますか?

答え1

waltinatorがコメントで述べたように、acpiこの質問に対する答えはコマンドのソースコードを読むのが最善です。しかし、どこで見つけることができますか?

Debian と関連ディストリビューションでは、「このコマンドを所有しているパッケージは何ですか?」という質問をすることができます。

dpkg-query -S /usr/bin/acpi
acpi: /usr/bin/acpi

パッケージ名を知ると、そのソースコードパッケージの名前と、通常、そのパッケージが提供されているプロジェクトのURLを見つけることができます。

apt info acpi
[...]
Homepage: http://sourceforge.net/projects/acpiclient
[...]

したがって、プロジェクト名はacpiclientSourceforgeにあります。CodeGitリポジトリに移動するには、プロジェクトWebページのタブをクリックします。https://sourceforge.net/p/acpiclient/code/

コマンドのデフォルトヘッダファイル、acpi.h、プログラム構造の良い概要を提供します。 64行目では、関数のプロトタイプを見つけましたがprint_battery_information()、これは有望です。

.. この機能は以下にあります。ファイルライン 251acpi.c

これは、使用可能なダミーファイルと一致するように、それぞれ名前付きの複数のフィールドを解析します/sys/class/power_supply/BAT0(コードをより詳細に読めばそれを確認できます)。残りのバッテリー容量に関する情報は、複数のファイルで見つけることができるようです。

  • remaining capacity(ミリアンペア時間単位)
  • またはcharge_now(マイクロアンペア時間単位)
  • またはenergy_now(マイクロワット時単位)。

同様に、消費電力は次のように計算できます。

  • present rate(ミリアンペア単位)
  • current_now(マイクロアンペア単位)
  • power_now(マイクロワット単位で測定)

これらのいずれかを使用すると、適切な単位変換を適用した後にバッテリの残りのランタイム(現在の消費レベルで)を計算できます。

関連情報