parent
370da9f700
commit
27383a5d40
@ -0,0 +1,15 @@
|
|||||||
|
|
||||||
|
|
||||||
|
(asdf:defsystem :cl-battery
|
||||||
|
:description
|
||||||
|
"Battery stats"
|
||||||
|
:author
|
||||||
|
"Z.Shang"
|
||||||
|
:license
|
||||||
|
"copyleft"
|
||||||
|
:version
|
||||||
|
"0.0.2"
|
||||||
|
:serial
|
||||||
|
t
|
||||||
|
:components ( (:file "package")
|
||||||
|
(:file "cl-battery")))
|
@ -0,0 +1,52 @@
|
|||||||
|
|
||||||
|
(in-package :cl-battery)
|
||||||
|
|
||||||
|
(defparameter *battery-device* "BAT0")
|
||||||
|
(defparameter *ac-device* "AC")
|
||||||
|
|
||||||
|
(defun %path (device name)
|
||||||
|
(pathname (format nil "/sys/class/power_supply/~a/~a" device name)))
|
||||||
|
|
||||||
|
(defun stat ()
|
||||||
|
(let* ((bat-stat (open (%path *battery-device* "status")))
|
||||||
|
(bat-now (open (%path *battery-device* "current_now")))
|
||||||
|
(bat-full (open (%path *battery-device* "charge_full")))
|
||||||
|
(ac-online (open (%path *ac-device* "online")))
|
||||||
|
(bat-cap (open (%path *battery-device* "capacity")))
|
||||||
|
(-now (read bat-now))
|
||||||
|
(-full (read bat-full))
|
||||||
|
(-cap (read bat-cap)))
|
||||||
|
(let ((r (list (read-line bat-stat)
|
||||||
|
(float (/ -now -full))
|
||||||
|
(= 1 (read ac-online))
|
||||||
|
-now
|
||||||
|
-full)))
|
||||||
|
(mapc #'close (list bat-stat bat-now bat-full ac-online bat-cap))
|
||||||
|
(values r -cap))))
|
||||||
|
|
||||||
|
(defun status ()
|
||||||
|
"Get current charging status"
|
||||||
|
(car (stat)))
|
||||||
|
|
||||||
|
(defun capacity ()
|
||||||
|
"Capacity"
|
||||||
|
(cadr (multiple-value-list (stat))))
|
||||||
|
|
||||||
|
(defun level ()
|
||||||
|
"Current level / max level. Also returns (current max) as second value"
|
||||||
|
(let ((st (stat)))
|
||||||
|
(values (cadr st)
|
||||||
|
(cdddr st))))
|
||||||
|
|
||||||
|
(defun charging? ()
|
||||||
|
"Is the battery charging"
|
||||||
|
(caddr (stat)))
|
||||||
|
|
||||||
|
(mapc #'export
|
||||||
|
'(stat
|
||||||
|
status
|
||||||
|
level
|
||||||
|
charging?
|
||||||
|
capacity
|
||||||
|
*battery-device*
|
||||||
|
*ac-device*))
|
@ -1,24 +0,0 @@
|
|||||||
(defpackage :cl-battery
|
|
||||||
(:use :cl)
|
|
||||||
(:export
|
|
||||||
show-bat
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(in-package #:cl-battery)
|
|
||||||
|
|
||||||
(defun show-bat ()
|
|
||||||
(let ((bat_stat (open #P"/sys/class/power_supply/BAT0/status"))
|
|
||||||
(bat_now (open #P"/sys/class/power_supply/BAT0/current_now"))
|
|
||||||
(bat_full (open #P"/sys/class/power_supply/BAT0/charge_full"))
|
|
||||||
(ac_online (open #P"/sys/class/power_supply/ADP0/online"))
|
|
||||||
)
|
|
||||||
(format *standard-output* "~A ~$% ~A~%" (read-line bat_stat) (* (float (/ (read bat_now) (read bat_full))) 100)
|
|
||||||
(if (equal (read ac_online) 1)
|
|
||||||
"To Be Fully Charged"
|
|
||||||
"Left"))
|
|
||||||
(close bat_stat)
|
|
||||||
(close bat_now)
|
|
||||||
(close bat_full)))
|
|
||||||
|
|
||||||
(sb-ext:save-lisp-and-die #P"bat" :toplevel #'cl-battery:show-bat :executable t)
|
|
@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
|
||||||
|
(defpackage #:cl-battery
|
||||||
|
(:use #:cl)
|
||||||
|
(:nicknames :battery ))
|
Loading…
Reference in new issue