summaryrefslogtreecommitdiffstats
path: root/oncology/dpfhack_display/lcd4linux/.svn/text-base/plugin_i2c_sensors.c.svn-base
diff options
context:
space:
mode:
Diffstat (limited to 'oncology/dpfhack_display/lcd4linux/.svn/text-base/plugin_i2c_sensors.c.svn-base')
-rw-r--r--oncology/dpfhack_display/lcd4linux/.svn/text-base/plugin_i2c_sensors.c.svn-base361
1 files changed, 0 insertions, 361 deletions
diff --git a/oncology/dpfhack_display/lcd4linux/.svn/text-base/plugin_i2c_sensors.c.svn-base b/oncology/dpfhack_display/lcd4linux/.svn/text-base/plugin_i2c_sensors.c.svn-base
deleted file mode 100644
index 989f97c2..00000000
--- a/oncology/dpfhack_display/lcd4linux/.svn/text-base/plugin_i2c_sensors.c.svn-base
+++ /dev/null
@@ -1,361 +0,0 @@
-/* $Id$
- * $URL$
- *
- * I2C sensors plugin
- *
- * Copyright (C) 2003, 2004 Xavier Vello <xavier66@free.fr>
- * Copyright (C) 2004 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net>
- *
- * This file is part of LCD4Linux.
- *
- * LCD4Linux is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * LCD4Linux is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- */
-
-/*
- * exported functions:
- *
- * int plugin_init_i2c_sensors (void)
- * adds function i2c_sensors() to retrieve informations from
- * the i2c sensors via sysfs or procfs interface
- *
- * -- WARNING --
- * This plugin should detect where your sensors are at startup.
- * If you can't get any token to work, ensure you don't get
- * an error message with "lcd4linux -Fvvv".
- *
- * If so, try to force the path to your sensors in the conf like this :
- * for sysfs: i2c_sensors-path '/sys/bus/i2c/devices/0-6000/'
- * for procfs: i2c_sensors-path '/proc/sys/dev/sensors/via686a-isa-6000'
- * /!\ these path are for my system, change the last dir according to yours
- */
-
-/*
- * Available tokens : # represents an int from 1 to 3 (or more)
- * temp_input# -> temperature of sensor # (in ∞C)
- * temp_max# and temp_hyst# -> max and min of sensor #
- * in_input#, in_min# and in_max# -> voltages
- * fan_input# -> speed (in RPM) of fan #
- * fan_min# and fan_div#
- *
- * Tokens avaible only via sysfs if suported by your sensors:
- * curr_input#, curr_min# and curr_max# -> value of current (in amps)
- * pwm#
- * temp_crit# -> critical value of sensor #
- * vid -> cpu core voltage
- * and maybe others
- * (see /usr/src/linux/Documentation/i2c/sysfs-interface on linux 2.6)
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <dirent.h>
-
-#include "debug.h"
-#include "plugin.h"
-#include "cfg.h"
-#include "hash.h"
-#include "qprintf.h"
-#include "evaluator.h" // if strndup() is not available
-
-#ifdef WITH_DMALLOC
-#include <dmalloc.h>
-#endif
-
-static char *path = NULL;
-static HASH I2Csensors;
-
-static const char *procfs_tokens[4][3] = {
- {"temp_hyst", "temp_max", "temp_input"}, /* for temp# */
- {"in_min", "in_max", "in_input"}, /* for in# */
- {"fan_div1", "fan_div2", "fan_div3"}, /* for fan_div */
- {"fan_min", "fan_input", ""} /* for fan# */
-};
-
-static int (*parse_i2c_sensors) (const char *key);
-
- /***********************************************\
- * Parsing for new 2.6 kernels 'sysfs' interface *
- \***********************************************/
-
-static int parse_i2c_sensors_sysfs(const char *key)
-{
- char val[32];
- char buffer[32];
- char file[64];
- FILE *stream;
-
- strcpy(file, path);
- strcat(file, key);
-
- stream = fopen(file, "r");
- if (stream == NULL) {
- error("i2c_sensors: fopen(%s) failed: %s", file, strerror(errno));
- return -1;
- }
- fgets(buffer, sizeof(buffer), stream);
- fclose(stream);
-
- if (buffer[0] == '\0') {
- error("i2c_sensors: %s empty ?!", file);
- return -1;
- }
-
- /* now the formating stuff, depending on the file : */
- /* Some values must be divided by 1000, the others */
- /* are parsed directly (we just remove the \n). */
- if (!strncmp(key, "temp", 4) || !strncmp(key, "curr", 4) || !strncmp(key, "in", 2) || !strncmp(key, "vid", 3)) {
- snprintf(val, sizeof(val), "%f", strtod(buffer, NULL) / 1000.0);
- } else {
- qprintf(val, sizeof(val), "%s", buffer);
- /* we supress this nasty \n at the end */
- val[strlen(val) - 1] = '\0';
- }
-
- hash_put(&I2Csensors, key, val);
-
- return 0;
-
-}
-
- /************************************************\
- * Parsing for old 2.4 kernels 'procfs' interface *
- \************************************************/
-
-static int parse_i2c_sensors_procfs(const char *key)
-{
- char file[64];
- FILE *stream;
- char buffer[32];
-
- char *value;
- char *running;
- int pos = 0;
- const char delim[3] = " \n";
- char final_key[32];
- const char *number = &key[strlen(key) - 1];
- int tokens_index;
- /* debug("%s -> %s", key, number); */
- strcpy(file, path);
-
- if (!strncmp(key, "temp_", 5)) {
- tokens_index = 0;
- strcat(file, "temp");
- strcat(file, number);
- } else if (!strncmp(key, "in_", 3)) {
- tokens_index = 1;
- strcat(file, "in");
- strcat(file, number);
- } else if (!strncmp(key, "fan_div", 7)) {
- tokens_index = 2;
- strcat(file, "fan_div");
- number = "";
- } else if (!strncmp(key, "fan_", 4)) {
- tokens_index = 3;
- strcat(file, "fan");
- strcat(file, number);
- } else {
- return -1;
- }
-
- stream = fopen(file, "r");
- if (stream == NULL) {
- error("i2c_sensors: fopen(%s) failed: %s", file, strerror(errno));
- return -1;
- }
- fgets(buffer, sizeof(buffer), stream);
- fclose(stream);
-
- if (buffer[0] == '\0') {
- error("i2c_sensors: %s empty ?!", file);
- return -1;
- }
-
- running = strndup(buffer, sizeof(buffer));
- while (1) {
- value = strsep(&running, delim);
- /* debug("%s pos %i -> %s", file, pos , value); */
- if (!value || !strcmp(value, "")) {
- /* debug("%s pos %i -> BREAK", file, pos); */
- break;
- } else {
- qprintf(final_key, sizeof(final_key), "%s%s", procfs_tokens[tokens_index][pos], number);
- /* debug ("%s -> %s", final_key, value); */
- hash_put(&I2Csensors, final_key, value);
- pos++;
- }
- }
- free(running);
- return 0;
-}
-
- /*****************************************\
- * Common functions (path search and init) *
- \*****************************************/
-
-
-static void my_i2c_sensors_path(const char *method)
-{
- struct dirent *dir;
- struct dirent *file;
- const char *base;
- char dname[64];
- DIR *fd1;
- DIR *fd2;
- int done;
-
- if (!strcmp(method, "sysfs")) {
- base = "/sys/bus/i2c/devices/";
- } else if (!strcmp(method, "procfs")) {
- base = "/proc/sys/dev/sensors/";
- /*base="/sensors_2.4/"; // fake dir to test without rebooting 2.4 ;) */
- } else {
- return;
- }
-
- fd1 = opendir(base);
- if (!fd1) {
- return;
- }
-
- while ((dir = readdir(fd1))) {
- /* Skip non-directories and '.' and '..' */
- if ((dir->d_type != DT_DIR && dir->d_type != DT_LNK) || strcmp(dir->d_name, ".") == 0
- || strcmp(dir->d_name, "..") == 0) {
- continue;
- }
-
- /* dname is the absolute path */
- strcpy(dname, base);
- strcat(dname, dir->d_name);
- strcat(dname, "/");
-
- fd2 = opendir(dname);
- done = 0;
- while ((file = readdir(fd2))) {
- /* FIXME : do all sensors have a temp_input1 ? */
- if (!strcmp(file->d_name, "temp_input1") || !strcmp(file->d_name, "temp1_input")
- || !strcmp(file->d_name, "temp1")) {
- path = realloc(path, strlen(dname) + 1);
- strcpy(path, dname);
- done = 1;
- break;
- }
- }
- closedir(fd2);
- if (done)
- break;
- }
- closedir(fd1);
-}
-
-
-static int configure_i2c_sensors(void)
-{
- static int configured = 0;
- char *path_cfg;
-
- if (configured != 0)
- return configured;
-
- path_cfg = cfg_get(NULL, "i2c_sensors-path", "");
- if (path_cfg == NULL || *path_cfg == '\0') {
- /* debug("No path to i2c sensors found in the conf, calling my_i2c_sensors_path()"); */
- my_i2c_sensors_path("sysfs");
- if (!path)
- my_i2c_sensors_path("procfs");
-
- if (!path) {
- error("i2c_sensors: unable to autodetect i2c sensors!");
- configured = -1;
- return configured;
- }
-
- debug("using i2c sensors at %s (autodetected)", path);
-
- } else {
- if (path_cfg[strlen(path_cfg) - 1] != '/') {
- /* the headless user forgot the trailing slash :/ */
- error("i2c_sensors: please add a trailing slash to %s from %s", path_cfg, cfg_source());
- path_cfg = realloc(path_cfg, strlen(path_cfg) + 2);
- strcat(path_cfg, "/");
- }
- debug("using i2c sensors at %s (from %s)", path_cfg, cfg_source());
- path = realloc(path, strlen(path_cfg) + 1);
- strcpy(path, path_cfg);
- }
- if (path_cfg)
- free(path_cfg);
-
- /* we activate the function only if there's a possibly path found */
- if (strncmp(path, "/sys", 4) == 0) {
- parse_i2c_sensors = parse_i2c_sensors_sysfs;
- } else if (strncmp(path, "/proc", 5) == 0) {
- parse_i2c_sensors = parse_i2c_sensors_procfs;
- } else {
- error("i2c_sensors: unknown path %s, should start with /sys or /proc", path);
- configured = -1;
- return configured;
- }
-
- hash_create(&I2Csensors);
-
- configured = 1;
- return configured;
-}
-
-
-void my_i2c_sensors(RESULT * result, RESULT * arg)
-{
- int age;
- char *key;
- char *val;
-
- if (configure_i2c_sensors() < 0) {
- SetResult(&result, R_STRING, "??");
- return;
- }
-
- key = R2S(arg);
- age = hash_age(&I2Csensors, key);
- if (age < 0 || age > 250) {
- parse_i2c_sensors(key);
- }
- val = hash_get(&I2Csensors, key, NULL);
- if (val) {
- SetResult(&result, R_STRING, val);
- } else {
- SetResult(&result, R_STRING, "??");
- }
-}
-
-
-int plugin_init_i2c_sensors(void)
-{
- AddFunction("i2c_sensors", 1, my_i2c_sensors);
- return 0;
-}
-
-
-void plugin_exit_i2c_sensors(void)
-{
- hash_destroy(&I2Csensors);
-}
[cgit] Unable to lock slot /tmp/cgit/34200000.lock: No such file or directory (2)