aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorRichard M. Stallman <[email protected]>2012-01-02 18:18:48 -0500
committerRichard M. Stallman <[email protected]>2012-01-02 18:18:48 -0500
commit30710442b4725af9f45e9a9b6013f4a3f4e4706b (patch)
tree5c966ac0b04cfefe6108b621463ead521f285ed0 /lisp
parentf75bfc33d63f5087993e9954a71663287ff6ea5c (diff)
Handle battery capacity on Lemote Yeeloong.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ChangeLog8
-rw-r--r--lisp/battery.el93
2 files changed, 99 insertions, 2 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index d5c1037354..459eea2a3e 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,11 @@
+2012-01-02 Richard Stallman <[email protected]>
+
+ * 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 <[email protected]>
* dirtrack.el (dirtrack-list): Eliminate unused third element.
diff --git a/lisp/battery.el b/lisp/battery.el
index bb899f2bea..396423d9de 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).