私はバッテリーの充電の有無に応じて、残りのバッテリー寿命や充電時間を計算するCプログラムを書いています。私がする方法は、以下を/sys/class/power_supply/BAT0
読んで残りのバッテリ寿命を計算することです。
battery life = charge_now / current_now
充電時間の計算:
charge time = (charge_full - charge_now) / current_now
上記の2つの式は、コマンドの出力とまったく同じ結果を生成しますacpi
。ただし、時には何らかの理由でファイルcharge_now
とcharge_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
[...]
したがって、プロジェクト名はacpiclient
Sourceforgeにあります。Code
Gitリポジトリに移動するには、プロジェクト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
(マイクロワット単位で測定)
これらのいずれかを使用すると、適切な単位変換を適用した後にバッテリの残りのランタイム(現在の消費レベルで)を計算できます。