emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r106761: Handle battery capacity on L


From: Richard Stallman
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r106761: Handle battery capacity on Lemote Yeeloong.
Date: Mon, 02 Jan 2012 18:18:48 -0500
User-agent: Bazaar (2.3.1)

------------------------------------------------------------
revno: 106761
committer: Richard Stallman <address@hidden>
branch nick: trunk
timestamp: Mon 2012-01-02 18:18:48 -0500
message:
  Handle battery capacity on Lemote Yeeloong.
modified:
  lisp/ChangeLog
  lisp/battery.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2012-01-02 09:27:32 +0000
+++ b/lisp/ChangeLog    2012-01-02 23:18:48 +0000
@@ -1,3 +1,11 @@
+2012-01-02  Richard Stallman  <address@hidden>
+
+       * 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  <address@hidden>
 
        * dirtrack.el (dirtrack-list): Eliminate unused third element.

=== modified file 'lisp/battery.el'
--- a/lisp/battery.el   2011-12-21 12:20:40 +0000
+++ b/lisp/battery.el   2012-01-02 23:18:48 +0000
@@ -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 @@
         "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 @@
   "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 @@
 ;;; `/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 @@
                         "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).
 


reply via email to

[Prev in Thread] Current Thread [Next in Thread]