;;; linux-coretemp.el --- retrieve processor core temperatures ;; Author: Noah Friedman ;; Created: 2011-05-04 ;; Public domain ;; $Id: linux-coretemp.el,v 1.3 2011/08/15 20:49:09 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-directory "/sys/devices/platform/") (defvar coretemp-directory-re "^coretemp\\.[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 () (mapcar (lambda (dir) (format "%s%s/" coretemp-sys-directory dir)) (directory-files coretemp-sys-directory nil coretemp-directory-re))) (defsubst coretemp-dir-inputs (dir) (mapcar (lambda (input) (concat 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-int (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