From 33943bda7c5fc2138ddc2146d8a5fe119a280b3e Mon Sep 17 00:00:00 2001 From: Philip Kovacs Date: Mon, 13 Aug 2007 00:28:48 +0000 Subject: [PATCH] * Added var $platform which is similar to $i2c and accommodates the conversion of many devices from /sys/bus/i2c/devices to /sys/bus/platform/devices. * Removed config item post_21_kernel since it forced all i2c device lookups to go to /sys/bus/platform/devices and some people may need a mix of both i2c and platform devices. git-svn-id: https://conky.svn.sourceforge.net/svnroot/conky/trunk/conky1@917 7f574dfc-610e-0410-a909-a81674777703 --- ChangeLog | 7 +++++ README | 12 ++++++--- doc/config_settings.xml | 7 ----- doc/conky.1 | 10 ++++--- doc/variables.xml | 12 +++++++++ src/conky.c | 67 ++++++++++++++++++++++++++++++++--------------- src/conky.h | 19 ++++++++------ src/freebsd.c | 5 ++-- src/linux.c | 20 +++++--------- src/netbsd.c | 5 ++-- 10 files changed, 101 insertions(+), 63 deletions(-) diff --git a/ChangeLog b/ChangeLog index fa47296..6052ec1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ # $Id$ +2007-08-12 + * Added var $platform which is similar to $i2c and accommodates the conversion + of many devices from /sys/bus/i2c/devices to /sys/bus/platform/devices. + * Removed config item post_21_kernel since it forced all i2c device lookups + to go to /sys/bus/platform/devices and some people may need a mix of both + i2c and platform devices. + 2007-08-10 * Clarifying licensing diff --git a/README b/README index 0711dbf..15feb9d 100644 --- a/README +++ b/README @@ -345,10 +345,6 @@ CONFIGURATION SETTINGS Print text to stdout. - post_21_kernel - Set to yes if you have Linux kernel 2.6.22 or newer - - pad_percents Pad percentages to this many decimals (0 = no padding) @@ -1047,6 +1043,14 @@ VARIABLES discharging. + platform (dev) type n + Platform sensor from sysfs (Linux 2.6). dev may be omitted if + you have only one platform device. type is either in (or vol) + meaning voltage, fan meaning fan or temp/tempf (first in C, sec- + ond in F) meaning temperature. n is number of the sensor. See + /sys/bus/platform/devices/ on your local computer. + + pop3_unseen (args) Displays the number of unseen messages in your global POP3 inbox by default. You can define individual POP3 inboxes seperately by diff --git a/doc/config_settings.xml b/doc/config_settings.xml index 5e920e6..5c61c9a 100644 --- a/doc/config_settings.xml +++ b/doc/config_settings.xml @@ -358,13 +358,6 @@ - - - - Set to yes if you have Linux kernel 2.6.22 or newer - - - Pad percentages to this many decimals (0 = no padding) diff --git a/doc/conky.1 b/doc/conky.1 index 95ae9cf..c1a4e29 100644 --- a/doc/conky.1 +++ b/doc/conky.1 @@ -337,10 +337,6 @@ of window can be useful for certain situations. Print text to stdout. .TP -\fB\*(T<\fBpost_21_kernel\fR\*(T>\fR -Set to yes if you have Linux kernel 2.6.22 or newer - -.TP \fB\*(T<\fBpad_percents\fR\*(T>\fR Pad percentages to this many decimals (0 = no padding) @@ -973,6 +969,12 @@ absent or if it's present but fully charged and not discharging. .TP +\fB\*(T<\fBplatform\fR\*(T>\fR \*(T<\fB(dev) type n\fR\*(T> +Platform sensor from sysfs (Linux 2.6). dev may be omitted if you have only one platform device. type is +either in (or vol) meaning voltage, fan meaning fan or temp/tempf (first in C, second in F) meaning temperature. n is number +of the sensor. See /sys/bus/platform/devices/ on your local computer. + +.TP \fB\*(T<\fBpop3_unseen\fR\*(T>\fR \*(T<\fB(args)\fR\*(T> Displays the number of unseen messages in your global POP3 inbox by default. You can define individual POP3 inboxes seperately by passing arguments to this object. Arguments are: "host user pass [-i interval] [-p port] [-e command]". Default port is 110, default interval is 5 minutes. If the password is supplied as '*', you will be prompted to enter the password when Conky starts. diff --git a/doc/variables.xml b/doc/variables.xml index 1d92e25..a49fc18 100644 --- a/doc/variables.xml +++ b/doc/variables.xml @@ -1340,6 +1340,18 @@ + + + + + + Platform sensor from sysfs (Linux 2.6). dev may be omitted if you have only one platform device. type is +either in (or vol) meaning voltage, fan meaning fan or temp/tempf (first in C, second in F) meaning temperature. n is number +of the sensor. See /sys/bus/platform/devices/ on your local computer. + + + + diff --git a/src/conky.c b/src/conky.c index d380119..170f7b7 100644 --- a/src/conky.c +++ b/src/conky.c @@ -124,10 +124,6 @@ static void print_version() exit(0); } -#if defined(__linux__) -int post_21_kernel; -#endif /* __linux__ */ - #ifdef X11 /* @@ -1060,6 +1056,7 @@ enum text_object_type { OBJ_mixerrbar, OBJ_new_mails, OBJ_nodename, + OBJ_platform, OBJ_pre_exec, OBJ_processes, OBJ_running_processes, @@ -1229,7 +1226,7 @@ struct text_object { int arg; char devtype[256]; char type[64]; - } i2c; /* 2 */ + } i2c, platform; /* 2 */ struct { int pos; @@ -1816,6 +1813,9 @@ static void free_text_objects(unsigned int count, struct text_object *objs) case OBJ_i2c: close(objs[i].data.i2c.fd); break; + case OBJ_platform: + close(objs[i].data.platform.fd); + break; #endif /* !__OpenBSD__ */ case OBJ_time: free(objs[i].data.s); @@ -2596,7 +2596,8 @@ static struct text_object *construct_text_object(const char *s, const char *arg, obj->data.pair.b = b; #ifndef __OpenBSD__ - END OBJ(i2c, INFO_I2C) char buf1[64], buf2[64]; + END OBJ(i2c, INFO_I2C) + char buf1[64], buf2[64]; int n; if (!arg) { @@ -2607,19 +2608,38 @@ static struct text_object *construct_text_object(const char *s, const char *arg, } if (sscanf(arg, "%63s %63s %d", buf1, buf2, &n) != 3) { - /* if scanf couldn't read three values, read type and num and use - * default device */ + /* if scanf couldn't read three values, read type and num and use default device */ sscanf(arg, "%63s %d", buf2, &n); obj->data.i2c.fd = - open_i2c_sensor(0, buf2, n, &obj->data.i2c.arg, - obj->data.i2c.devtype); + open_i2c_sensor(0, buf2, n, &obj->data.i2c.arg, obj->data.i2c.devtype); strncpy(obj->data.i2c.type, buf2, 63); } else { obj->data.i2c.fd = - open_i2c_sensor(buf1, buf2, n, &obj->data.i2c.arg, - obj->data.i2c.devtype); + open_i2c_sensor(buf1, buf2, n, &obj->data.i2c.arg, obj->data.i2c.devtype); strncpy(obj->data.i2c.type, buf2, 63); } + + END OBJ(i2c, INFO_PLATFORM) + char buf1[64], buf2[64]; + int n; + + if (!arg) { + ERR("platform needs arguments"); + obj->type = OBJ_text; + return NULL; + } + + if (sscanf(arg, "%63s %63s %d", buf1, buf2, &n) != 3) { + /* if scanf couldn't read three values, read type and num and use default device */ + sscanf(arg, "%63s %d", buf2, &n); + obj->data.platform.fd = + open_platform_sensor(0, buf2, n, &obj->data.platform.arg, obj->data.platform.devtype); + strncpy(obj->data.platform.type, buf2, 63); + } else { + obj->data.platform.fd = + open_platform_sensor(buf1, buf2, n, &obj->data.platform.arg, obj->data.platform.devtype); + strncpy(obj->data.platform.type, buf2, 63); + } #endif /* !__OpenBSD__ */ END OBJ(top, INFO_TOP) @@ -4471,7 +4491,7 @@ static void generate_text_internal(char *p, int p_max_size, struct text_object * OBJ(i2c) { double r; - r = get_i2c_info(&obj->data.i2c.fd, + r = get_sysbus_info(&obj->data.i2c.fd, obj->data.i2c.arg, obj->data.i2c.devtype, obj->data.i2c.type); @@ -4481,6 +4501,19 @@ static void generate_text_internal(char *p, int p_max_size, struct text_object * else snprintf(p, p_max_size, "%.1f", r); } + OBJ(platform) { + double r; + + r = get_sysbus_info(&obj->data.platform.fd, + obj->data.platform.arg, + obj->data.platform.devtype, + obj->data.platform.type); + + if (r >= 100.0 || r == 0) + snprintf(p, p_max_size, "%d", (int) r); + else + snprintf(p, p_max_size, "%.1f", r); + } #endif /* !__OpenBSD__ */ OBJ(alignr) { new_alignr(p, obj->data.i); @@ -6711,9 +6744,6 @@ static void set_default_configurations(void) info.xmms2.status = NULL; #endif use_spacer = 0; -#if defined(__linux__) - post_21_kernel = 0; -#endif /* __linux__ */ #ifdef X11 out_to_console = 0; #else @@ -7046,11 +7076,6 @@ else if (strcasecmp(name, a) == 0 || strcasecmp(name, b) == 0) CONF("draw_outline") { draw_outline = string_to_bool(value); } -#if defined(__linux__) - CONF("post_21_kernel") { - post_21_kernel = string_to_bool(value); - } -#endif /* __linux__ */ #endif /* X11 */ CONF("out_to_console") { out_to_console = string_to_bool(value); diff --git a/src/conky.h b/src/conky.h index ba95cab..d0e4f73 100644 --- a/src/conky.h +++ b/src/conky.h @@ -262,7 +262,7 @@ enum { INFO_DISKIO = 17, INFO_I8K = 18, #ifdef TCP_PORT_MONITOR - INFO_TCP_PORT_MONITOR = 19, + INFO_TCP_PORT_MONITOR = 19, #endif #ifdef AUDACIOUS INFO_AUDACIOUS = 20, @@ -277,6 +277,7 @@ enum { #ifdef RSS INFO_RSS = 24, #endif + INFO_PLATFORM = 25 }; @@ -503,9 +504,15 @@ char get_freq( char *, size_t, char *, int, unsigned int ); void get_freq_dynamic( char *, size_t, char *, int ); char get_voltage(char *, size_t, char *, int, unsigned int ); /* ptarjan */ void update_load_average(); -int open_i2c_sensor(const char *dev, const char *type, int n, int *div, - char *devtype); -double get_i2c_info(int *fd, int arg, char *devtype, char *type); + +int open_sysbus_sensor(const char *dir, const char *dev, const char *type, int n, int *div, char *devtype); +#define open_i2c_sensor(dev,type,n,div,devtype) \ + open_sysbus_sensor("/sys/bus/i2c/devices/",dev,type,n,div,devtype) + +#define open_platform_sensor(dev,type,n,div,devtype) \ + open_sysbus_sensor("/sys/bus/platform/devices/",dev,type,n,div,devtype) + +double get_sysbus_info(int *fd, int arg, char *devtype, char *type); void get_adt746x_cpu( char *, size_t ); void get_adt746x_fan( char *, size_t ); @@ -630,10 +637,6 @@ void init_rss_info(); void free_rss_info(); #endif /* RSS */ -#if defined(__linux__) -extern int post_21_kernel; -#endif /* __linux__ */ - /* in linux.c */ #endif diff --git a/src/freebsd.c b/src/freebsd.c index 888d663..c99dc9e 100644 --- a/src/freebsd.c +++ b/src/freebsd.c @@ -352,7 +352,7 @@ update_cpu_usage() } double -get_i2c_info(int *fd, int arg, char *devtype, char *type) +get_sysbus_info(int *fd, int arg, char *devtype, char *type) { return (0); } @@ -469,8 +469,7 @@ get_battery_perct_bar(const char *bar) } int -open_i2c_sensor(const char *dev, const char *type, int n, int *div, - char *devtype) +open_sysbus_sensor(const char *dir, const char *dev, const char *type, int n, int *div, char *devtype) { return (0); } diff --git a/src/linux.c b/src/linux.c index 42cf43d..3a9456d 100644 --- a/src/linux.c +++ b/src/linux.c @@ -659,14 +659,8 @@ get_first_file_in_a_directory(const char *dir, char *s, int *rep) } } -int open_i2c_sensor(const char *dev, const char *type, int n, int *div, char *devtype) +int open_sysbus_sensor(const char *dir, const char *dev, const char *type, int n, int *div, char *devtype) { - char i2c_dir[64]; - if (post_21_kernel) { - strncpy(i2c_dir, "/sys/bus/platform/devices/", 64); - } else { - strncpy(i2c_dir, "/sys/bus/i2c/devices/", 64); - } char path[256]; char buf[256]; int fd; @@ -675,7 +669,7 @@ int open_i2c_sensor(const char *dev, const char *type, int n, int *div, char *de /* if i2c device is NULL or *, get first */ if (dev == NULL || strcmp(dev, "*") == 0) { static int rep = 0; - if (!get_first_file_in_a_directory(i2c_dir, buf, &rep)) + if (!get_first_file_in_a_directory(dir, buf, &rep)) return -1; dev = buf; } @@ -685,9 +679,9 @@ int open_i2c_sensor(const char *dev, const char *type, int n, int *div, char *de type = "in"; if (strcmp(type, "tempf") == 0) { - snprintf(path, 255, "%s%s/%s%d_input", i2c_dir, dev, "temp", n); + snprintf(path, 255, "%s%s/%s%d_input", dir, dev, "temp", n); } else { - snprintf(path, 255, "%s%s/%s%d_input", i2c_dir, dev, type, n); + snprintf(path, 255, "%s%s/%s%d_input", dir, dev, type, n); } strncpy(devtype, path, 255); @@ -708,10 +702,10 @@ int open_i2c_sensor(const char *dev, const char *type, int n, int *div, char *de /* test if *_div file exist, open it and use it as divisor */ if (strcmp(type, "tempf") == 0) { - snprintf(path, 255, "%s%s/%s%d_div", i2c_dir, "one", "two", + snprintf(path, 255, "%s%s/%s%d_div", dir, "one", "two", n); } else { - snprintf(path, 255, "%s%s/%s%d_div", i2c_dir, dev, type, n); + snprintf(path, 255, "%s%s/%s%d_div", dir, dev, type, n); } divfd = open(path, O_RDONLY); @@ -731,7 +725,7 @@ int open_i2c_sensor(const char *dev, const char *type, int n, int *div, char *de return fd; } -double get_i2c_info(int *fd, int div, char *devtype, char *type) +double get_sysbus_info(int *fd, int div, char *devtype, char *type) { int val = 0; diff --git a/src/netbsd.c b/src/netbsd.c index bc07703..ff8efe0 100644 --- a/src/netbsd.c +++ b/src/netbsd.c @@ -339,7 +339,7 @@ void update_cpu_usage() } -double get_i2c_info(int *fd, int div, char *devtype) +double get_sysbus_info(int *fd, int div, char *devtype) { return -1; } @@ -364,8 +364,7 @@ void get_battery_stuff(char *buf, unsigned int n, const char *bat, int item) } int -open_i2c_sensor(const char *dev, const char *type, int n, int *div, - char *devtype) +open_sysbus_sensor(const char *dir, const char *dev, const char *type, int n, int *div, char *devtype) { return -1; } -- 1.7.9.5