"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

위의 두 공식은 명령의 출력과 정확히 동일한 결과를 생성합니다 acpi. 그러나 때로는 어떤 이유로 파일 charge_nowcharge_fullcurrent_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 저장소를 탐색하려면 프로젝트 웹 페이지의 탭을 클릭하세요 .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(마이크로와트 단위로 측정)

이들 중 하나를 사용하면 적절한 단위 변환을 적용한 후 배터리의 남은 런타임(현재 소비 수준에서)을 계산할 수 있습니다.

관련 정보