From: Richard M. Stallman Date: Mon, 2 Jan 2012 23:18:48 +0000 (-0500) Subject: Handle battery capacity on Lemote Yeeloong. X-Git-Tag: emacs-pretest-24.0.93~97^2~55^2~59 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=30710442b4725af9f45e9a9b6013f4a3f4e4706b;p=emacs.git Handle battery capacity on Lemote Yeeloong. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d5c10373546..459eea2a3ec 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2012-01-02 Richard Stallman + + * battery.el (battery-status-function): + Detect when to use battery-yeeloong-sysfs. + (battery-echo-area-format): Add string for Yeeloong. + (battery-linux-proc-apm, battery-linux-proc-acpi): Doc fixes. + (battery-yeeloong-sysfs): New function. + 2012-01-02 Chong Yidong * dirtrack.el (dirtrack-list): Eliminate unused third element. diff --git a/lisp/battery.el b/lisp/battery.el index bb899f2beae..396423d9dea 100644 --- a/lisp/battery.el +++ b/lisp/battery.el @@ -50,6 +50,10 @@ (file-directory-p "/sys/class/power_supply/") (directory-files "/sys/class/power_supply/" nil "BAT[0-9]$")) 'battery-linux-sysfs) + ((and (eq system-type 'gnu/linux) + (file-directory-p "/sys/class/power_supply/yeeloong-bat/") + (directory-files "/sys/class/power_supply/yeeloong-bat/" nil "charge_")) + 'battery-yeeloong-sysfs) ((and (eq system-type 'darwin) (condition-case nil (with-temp-buffer @@ -77,6 +81,8 @@ introduced by a `%' character in a control string." "Power %L, battery %B (%p%% load)") ((eq battery-status-function 'battery-pmset) "%L power, battery %B (%p%% load, remaining time %t)") + ((eq battery-status-function 'battery-yeeloong-sysfs) + "%L power, battery %B (%p%% load, remaining time %t)") (battery-status-function "Power %L, battery %B (%p%% load, remaining time %t)")) "Control string formatting the string to display in the echo area. @@ -226,7 +232,7 @@ seconds." "Regular expression matching contents of `/proc/apm'.") (defun battery-linux-proc-apm () - "Get APM status information from Linux kernel. + "Get APM status information from Linux (the kernel). This function works only with the new `/proc/apm' format introduced in Linux version 1.3.58. @@ -297,7 +303,7 @@ The following %-sequences are provided: ;;; `/proc/acpi/' interface for Linux. (defun battery-linux-proc-acpi () - "Get ACPI status information from Linux kernel. + "Get ACPI status information from Linux (the kernel). This function works only with the `/proc/acpi/' format introduced in Linux version 2.4.20 and 2.6.0. @@ -518,7 +524,90 @@ The following %-sequences are provided: "BAT") "N/A"))))) +(defun battery-yeeloong-sysfs () + "Get ACPI status information from Linux (the kernel). +This function works only on the Lemote Yeeloong. + +The following %-sequences are provided: +%c Current capacity (mAh) +%r Current rate +%B Battery status (verbose) +%b Battery status, empty means high, `-' means low, + `!' means critical, and `+' means charging +%L AC line status (verbose) +%p Battery load percentage +%m Remaining time (to charge or discharge) in minutes +%h Remaining time (to charge or discharge) in hours +%t Remaining time (to charge or discharge) in the form `h:min'" + + (let (capacity + capacity-level + status + ac-online + hours + current-now + charge-full + charge-now) + (with-temp-buffer + (ignore-errors + (insert-file-contents "/sys/class/power_supply/yeeloong-bat/uevent") + (goto-char 1) + (search-forward "POWER_SUPPLY_CHARGE_NOW=") + (setq charge-now (read (current-buffer))) + (goto-char 1) + (search-forward "POWER_SUPPLY_CHARGE_FULL=") + (setq charge-full (read (current-buffer))) + (goto-char 1) + (search-forward "POWER_SUPPLY_CURRENT_NOW=") + (setq current-now (read (current-buffer))) + (goto-char 1) + (search-forward "POWER_SUPPLY_CAPACITY_LEVEL=") + (setq capacity-level (buffer-substring (point) (line-end-position))) + (goto-char 1) + (search-forward "POWER_SUPPLY_STATUS=") + (setq status (buffer-substring (point) (line-end-position)))) + + (erase-buffer) + (ignore-errors + (insert-file-contents + "/sys/class/power_supply/yeeloong-ac/online") + (goto-char 1) + (setq ac-online (read (current-buffer))) + (erase-buffer))) + + + (setq capacity (round (/ (* charge-now 100.0) charge-full))) + (when (and current-now (not (= current-now 0))) + (if (< current-now 0) + ;; Charging + (setq hours (/ (- charge-now charge-full) (+ 0.0 current-now))) + ;; Discharging + (setq hours (/ charge-now (+ 0.0 current-now))))) + + (list (cons ?c (if charge-now + (number-to-string charge-now) + "N/A")) + (cons ?r current-now) + (cons ?B (cond ((equal capacity-level "Full") "full") + ((equal status "Charging") "charging") + ((equal capacity-level "Low") "low") + ((equal capacity-level "Critical") "critical") + (t "high"))) + (cons ?b (cond ((equal capacity-level "Full") " ") + ((equal status "Charging") "+") + ((equal capacity-level "Low") "-") + ((equal capacity-level "Critical") "!") + (t " "))) + (cons ?h (if hours (number-to-string hours) "N/A")) + (cons ?m (if hours (number-to-string (* 60 hours)) "N/A")) + (cons ?t (if hours + (format "%d:%d" + (/ (round (* 60 hours)) 60) + (% (round (* 60 hours)) 60)) + "N/A")) + (cons ?p (if capacity (number-to-string capacity) "N/A")) + (cons ?L (if (eq ac-online 1) "AC" "BAT"))))) ;;; `pmset' interface for Darwin (OS X).