;;; linux-coretemp.el --- retrieve processor core temperatures ;; Author: Noah Friedman ;; Created: 2011-05-04 ;; Public domain ;; $Id: linux-coretemp.el,v 1.6 2016/11/24 20:24:53 friedman Exp $ ;;; Commentary: ;; Sometime between linux 2.6.35 and 2.6.38, the kernel stopped exporting ;; /proc/acpi/thermal_zone. The more detailed replacement is coretemp. ;;; Code: (defvar coretemp-buffer-name " *coretemp*") (defvar coretemp-sys-dir "/sys/devices/platform") (defvar coretemp-dir-re "^coretemp\\.[0-9]+$") (defvar coretemp-hwmon-dir-re "^hwmon[0-9]+$") (defvar coretemp-temp-input-re "^temp[0-9]+_input$") (defun coretemp-file-contents (file-name) (let ((buffer (get-buffer-create coretemp-buffer-name))) (save-excursion (set-buffer buffer) (buffer-disable-undo buffer) (erase-buffer) (insert-file-contents-literally file-name) (prog1 (buffer-substring (point-min) (1- (point-max))) (kill-buffer buffer))))) (defsubst coretemp-dirs () (let ((ctdl (directory-files coretemp-sys-dir t coretemp-dir-re)) (hwmd)) (mapc (lambda (d) (setq d (format "%s/hwmon/" d)) (when (file-exists-p d) (setq hwmd (nconc hwmd (directory-files d t coretemp-hwmon-dir-re))))) ctdl) (nconc hwmd ctdl))) (defsubst coretemp-dir-inputs (dir) (mapcar (lambda (input) (concat (file-name-as-directory dir) input)) (directory-files dir nil coretemp-temp-input-re))) (defsubst coretemp-inputs () (save-match-data (apply 'nconc (mapcar 'coretemp-dir-inputs (coretemp-dirs))))) ;;;###autoload (defun coretemp-values () (mapcar 'string-to-number (mapcar 'coretemp-file-contents (coretemp-inputs)))) ;;;###autoload (defun coretemp-average () (let ((temps (coretemp-values))) (if temps (* .001 (/ (apply '+ temps) (length temps)))))) ;;;###autoload (defun coretemp-ctof (c) "Convert degrees Celsius to degrees Fahrenheit." (+ (* 1.8 c) 32)) (provide 'linux-coretemp) ;; eof