- added patch from peter tarjan for ibm acpi\
authorBrenden Matthews <brenden1@rty.ca>
Sat, 15 Apr 2006 18:00:39 +0000 (18:00 +0000)
committerBrenden Matthews <brenden1@rty.ca>
Sat, 15 Apr 2006 18:00:39 +0000 (18:00 +0000)
- updated xft docs

git-svn-id: https://conky.svn.sourceforge.net/svnroot/conky/trunk/conky1@620 7f574dfc-610e-0410-a909-a81674777703

AUTHORS
ChangeLog
README
doc/config_settings.xml
doc/conky.1
doc/docs.xml
doc/variables.xml
src/conky.c
src/conky.h
src/linux.c

diff --git a/AUTHORS b/AUTHORS
index 7935438..c4d0472 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -125,6 +125,9 @@ nathanj439 <nathanj439 at users dot sourceforge dot net>
 
 Pascal Eberhard <pascal dor eberhard at gmail dot com>
   graph and bar fix for right alignment
+
+Peter Tarjan <ptarjan at citromail dot hu>
+  IBM acpi support patch
   
 Petr Holub <hopet@users.sourceforge.net>  
   fix autotools on FreeBSD in autogen.sh
index 3e4b59a..b404f94 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 # $Id$
 
+2006-04-15
+       * Added patch from Peter Tarjan to add support for IBM ACPI
+
 2006-04-11
        * Removed sa_restorer crap (may fix some compile errors for some
        people)
diff --git a/README b/README
index 6a6c962..a955a22 100644 (file)
--- a/README
+++ b/README
@@ -346,6 +346,14 @@ CONFIGURATION SETTINGS
              Manually set the WM_CLASS name. Defaults to "conky".
 
 
+       xftalpha
+             Alpha of Xft font. Must be a value at or between 1 and 0.
+
+
+       xftfont
+             Xft font to use.
+
+
        xmms_player
              Use specified player/plugin for the xmms status variables. Valid
              items are: none, xmms, bmp, audacious and infopipe. (default  is
@@ -1020,6 +1028,26 @@ VARIABLES
              xmms / bmp / audacious / infopipe: title of current tune
 
 
+       ibm_fan
+             If running the IBM ACPI, displays the fan speed.
+
+
+       ibm_temps N
+             If  running the IBM ACPI, displays the temperatures from the IBM
+             temperature sensors (N=0..7) Sensor 0 is on the CPU, 3 is on the
+             GPU.
+
+
+       ibm_volume
+             If  running  the  IBM  ACPI,  displays the "master" volume, con-
+             trolled by the volume keys (0-14).
+
+
+       ibm_brightness
+             If running the IBM ACPI, displays the brigtness of the laptops's
+             LCD (0-7).
+
+
 EXAMPLES
        conky -t '${time %D %H:%m}' -o -u 30
              Start Conky in its own window with date and clock as text and 30
@@ -1054,4 +1082,4 @@ AUTHORS
 
 
 
-                                 2006-03-12                          conky(1)
+                                 2006-04-15                          conky(1)
index 883529d..6cd01c8 100644 (file)
 </varlistentry>
 
 <varlistentry>
+       <term><command><option>xftalpha</option></command></term>
+       <listitem>
+               Alpha of Xft font.  Must be a value at or between 1 and 0.
+       <para></para></listitem>
+</varlistentry>
+
+<varlistentry>
+       <term><command><option>xftfont</option></command></term>
+       <listitem>
+               Xft font to use.
+       <para></para></listitem>
+</varlistentry>
+
+<varlistentry>
        <term><command><option>xmms_player</option></command></term>
        <listitem>
                Use specified player/plugin for the xmms status variables.  Valid items are: none, xmms, bmp, audacious and infopipe. (default is none).  Note that bmpx is currently handled separately.
index 2494cdc..db14570 100644 (file)
@@ -1,5 +1,5 @@
 .\" -*- coding: us-ascii -*-
-.TH conky 1 2006-03-12  
+.TH conky 1 2006-04-15  
 .SH NAME
 conky \- A system monitor for X originally based on the torsmo code, but more kickass. It just keeps on given'er. Yeah.
 .SH SYNOPSIS
@@ -317,6 +317,14 @@ Use Xft (anti-aliased font and stuff)
 Manually set the WM_CLASS name. Defaults to "conky".
 
 .TP 
+\fBxftalpha\fR
+Alpha of Xft font. Must be a value at or between 1 and 0.
+
+.TP 
+\fBxftfont\fR
+Xft font to use.
+
+.TP 
 \fBxmms_player\fR
 Use specified player/plugin for the xmms status variables. Valid items are: none, xmms, bmp, audacious and infopipe. (default is none). Note that bmpx is currently handled separately.
 
@@ -909,6 +917,26 @@ xmms / bmp / audacious / infopipe: player status (Playing/Paused/Stopped/Not run
 \fBxmms_title\fR 
 xmms / bmp / audacious / infopipe: title of current tune
 
+.TP 
+\fBibm_fan\fR 
+If running the IBM ACPI, displays the fan speed.
+
+.TP 
+\fBibm_temps\fR \fBN\fR 
+If running the IBM ACPI, displays the temperatures
+from the IBM temperature sensors (N=0..7) Sensor 0 is
+on the CPU, 3 is on the GPU.
+
+.TP 
+\fBibm_volume\fR 
+If running the IBM ACPI, displays the "master" volume,
+controlled by the volume keys (0-14).
+
+.TP 
+\fBibm_brightness\fR 
+If running the IBM ACPI, displays the brigtness of the
+laptops's LCD (0-7).
+
 .SH EXAMPLES
 .TP 
 conky \fB\-t '${time %D %H:%m}' \-o \-u 30\fR
index 39eef6a..23c8daf 100644 (file)
@@ -16,7 +16,7 @@
       <firstname>Brenden</firstname>
       <surname>Matthews</surname>
     </author>
-    <date>2006-03-12</date>
+    <date>2006-04-15</date>
   </refentryinfo>
 
   <refmeta>
index 6aed052..490d4ee 100644 (file)
        <para></para></listitem>
 </varlistentry>
 
+<varlistentry>
+       <term>
+               <command><option>ibm_fan</option></command>
+       </term>
+       <listitem>
+               If running the IBM ACPI, displays the fan speed.
+       <para></para></listitem>
+</varlistentry>
+
+<varlistentry>
+       <term>
+               <command><option>ibm_temps</option></command>
+               <option>N</option>
+       </term>
+       <listitem>
+               If running the IBM ACPI, displays the temperatures
+               from the IBM temperature sensors (N=0..7) Sensor 0 is
+               on the CPU, 3 is on the GPU.
+       <para></para></listitem>
+</varlistentry>
+
+<varlistentry>
+       <term>
+               <command><option>ibm_volume</option></command>
+       </term>
+       <listitem>
+               If running the IBM ACPI, displays the "master" volume,
+       controlled by the volume keys (0-14).
+       <para></para></listitem>
+</varlistentry>
+
+<varlistentry>
+       <term>
+               <command><option>ibm_brightness</option></command>
+       </term>
+       <listitem>
+               If running the IBM ACPI, displays the brigtness of the
+       laptops's LCD (0-7).
+       <para></para></listitem>
+</varlistentry>
 
 </variablelist>
index 6b8652e..e01faeb 100644 (file)
@@ -804,6 +804,10 @@ enum text_object_type {
        OBJ_i8k_right_fan_rpm,
        OBJ_i8k_ac_status,      
        OBJ_i8k_buttons_status,
+       OBJ_ibm_fan,
+       OBJ_ibm_temps,
+       OBJ_ibm_volume,
+       OBJ_ibm_brightness,
 #endif /* __linux__ */
        OBJ_if_existing,
        OBJ_if_mounted,
@@ -955,7 +959,8 @@ struct text_object {
                char *s;        /* some string */
                int i;          /* some integer */
                long l;         /* some other integer */
-               struct net_stat *net;
+           unsigned int sensor;
+               struct net_stat *net;
                struct fs_stat *fs;
                unsigned char loadavg[3];
                unsigned int cpu_index;
@@ -1370,6 +1375,19 @@ static struct text_object *construct_text_object(const char *s, const char *arg,
                END OBJ(i8k_right_fan_rpm, INFO_I8K)
                END OBJ(i8k_ac_status, INFO_I8K)
                END OBJ(i8k_buttons_status, INFO_I8K)
+       END OBJ(ibm_fan, 0)
+       END OBJ(ibm_temps, 0)
+           if (!isdigit(arg[0])
+                        || strlen(arg) >=2
+                        || atoi(&arg[0]) >=8)
+           {
+               obj->data.sensor=0;
+               ERR("Invalid temperature sensor! Sensor number must be 0 to 7. Using 0 (CPU temp sensor).");
+           }
+               obj->data.sensor = atoi(&arg[0]);
+       END OBJ(ibm_volume, 0)
+       END OBJ(ibm_brightness, 0)
+               
 #endif /* __linux__ */
                END OBJ(buffers, INFO_BUFFERS)
                END OBJ(cached, INFO_BUFFERS)
@@ -2481,6 +2499,20 @@ static void generate_text_internal(char *p, int p_max_size, struct text_object *
                                        snprintf(p, p_max_size, "%s", i8k.buttons_status); 
 
                                }
+                                OBJ(ibm_fan) {
+                                    get_ibm_acpi_fan(p, p_max_size);
+                                }
+                               OBJ(ibm_temps) {
+                                    get_ibm_acpi_temps();
+                                    snprintf(p, p_max_size, "%d",
+                                             ibm_acpi.temps[obj->data.sensor]);
+                                }
+                                OBJ(ibm_volume) {
+                                    get_ibm_acpi_volume(p, p_max_size);
+                                }
+                                OBJ(ibm_brightness) {
+                                    get_ibm_acpi_brightness(p, p_max_size);
+                                }
 #endif /* __linux__ */
 
 #ifdef X11
index 8b6551e..d2c6f90 100644 (file)
@@ -448,6 +448,16 @@ double get_acpi_temperature(int fd);
 void get_acpi_ac_adapter( char *, size_t ); /* pk */
 void get_acpi_fan( char *, size_t ); /* pk */
 void get_battery_stuff(char *buf, unsigned int n, const char *bat);
+void get_ibm_acpi_fan(char *buf, size_t client_buffer_size);
+void get_ibm_acpi_temps(void);
+void get_ibm_acpi_volume(char *buf, size_t client_buffer_size);
+void get_ibm_acpi_brightness(char *buf, size_t client_buffer_size);
+
+struct ibm_acpi_struct {
+    unsigned int temps[8];
+};
+
+struct ibm_acpi_struct ibm_acpi;
 
 struct process {
        struct process *next;
@@ -560,7 +570,6 @@ int get_mldonkey_status(mldonkey_config * config, mldonkey_info * info);
 /* nothing to see here */
 
 /* in cairo.c */
-
 extern int do_it(void);
 
 #endif
index 29488bc..3c27da0 100644 (file)
@@ -1317,3 +1317,227 @@ void update_diskio()
        diskio_value = tot;
 }
 
+/* Here come the IBM ACPI-specific things. For reference, see
+ http://ibm-acpi.sourceforge.net/README
+If IBM ACPI is installed, /proc/acpi/ibm contains the following files:
+bay
+beep
+bluetooth
+brightness
+cmos
+dock
+driver
+ecdump
+fan
+hotkey
+led
+light
+thermal
+video
+volume
+The content of these files is described in detail in the aforementioned
+README - some of them also in the following functions accessing them.
+Peter Tarjan (ptarjan@citromail.hu)
+*/
+
+#define IBM_ACPI_DIR "/proc/acpi/ibm"
+
+void get_ibm_acpi_fan( char * p_client_buffer, size_t client_buffer_size )
+{
+/* get fan speed on IBM/Lenovo laptops running the ibm acpi.
+   /proc/acpi/ibm/fan looks like this (3 lines):
+status:         disabled
+speed:          2944
+commands:       enable, disable
+Peter Tarjan (ptarjan@citromail.hu)
+*/
+
+    if ( !p_client_buffer || client_buffer_size <= 0 )
+       return;
+    
+    FILE *fp;
+    unsigned int speed=0;
+    char fan[128];
+    snprintf(fan, 127, "%s/fan",IBM_ACPI_DIR);    
+
+    fp = fopen(fan, "r");
+    if (fp != NULL)
+    {
+       while (!feof(fp))
+       {
+           char line[256];
+           if (fgets(line, 255, fp) == NULL) break;
+           if (sscanf(line, "speed: %d", &speed)) break;       
+       }
+    }
+    else 
+    {
+       CRIT_ERR("can't open '%s': %s\nYou are not using the IBM ACPI. Remove ibm* from your Conky config file.", fan, strerror(errno));
+    }
+
+    fclose(fp);
+    snprintf( p_client_buffer, client_buffer_size, "%d", speed );
+    return;
+    
+}    
+
+static double last_ibm_acpi_temp_time;
+void get_ibm_acpi_temps()
+{
+/* get the measured temperatures from the temperature sensors 
+   on IBM/Lenovo laptops running the ibm acpi.
+   There are 8 values in /proc/acpi/ibm/thermal, and according to 
+   http://ibm-acpi.sourceforge.net/README
+   these mean the following (at least on an IBM R51...)
+0:  CPU (also on the T series laptops)
+1:  Mini PCI Module (?)
+2:  HDD (?)
+3:  GPU (also on the T series laptops)
+4:  Battery (?)
+5:  N/A
+6:  Battery (?)
+7:  N/A 
+   I'm not too sure about those with the question mark, but the values I'm 
+   reading from *my* thermal file (on a T42p) look realistic for the 
+   hdd and the battery. 
+   #5 and #7 are always -128. 
+   /proc/acpi/ibm/thermal looks like this (1 line):
+temperatures:   41 43 31 46 33 -128 29 -128
+Peter Tarjan (ptarjan@citromail.hu)
+*/
+
+/*    don't update too often */
+    if (current_update_time - last_ibm_acpi_temp_time < 10.00) 
+    {
+       return;
+    }
+    last_ibm_acpi_temp_time = current_update_time; 
+    
+/*    if ( !p_client_buffer || client_buffer_size <= 0 )
+      return; */
+
+    FILE *fp;
+
+    char thermal[128];
+    snprintf(thermal, 127, "%s/thermal",IBM_ACPI_DIR);    
+    fp = fopen(thermal, "r");
+
+    if (fp != NULL)
+    {
+       while (!feof(fp))
+       {
+           char line[256];
+           if (fgets(line, 255, fp) == NULL) break;
+           if (sscanf(line, "temperatures: %d %d %d %d %d %d %d %d",
+                      &ibm_acpi.temps[0], &ibm_acpi.temps[1],
+                      &ibm_acpi.temps[2], &ibm_acpi.temps[3],
+                      &ibm_acpi.temps[4], &ibm_acpi.temps[5], 
+                      &ibm_acpi.temps[6], &ibm_acpi.temps[7])) break;
+       }
+    }
+    else 
+    {
+       CRIT_ERR("can't open '%s': %s\nYou are not using the IBM ACPI. Remove ibm* from your Conky config file.", thermal, strerror(errno));
+    }
+
+    fclose(fp);
+
+}             
+
+
+void get_ibm_acpi_volume( char * p_client_buffer, size_t client_buffer_size )
+{
+
+/* get volume (0-14) on IBM/Lenovo laptops running the ibm acpi.
+   "Volume" here is none of the mixer volumes, but a "master of masters"
+   volume adjusted by the IBM volume keys.
+   /proc/acpi/ibm/fan looks like this (4 lines):
+level:          4
+mute:           off
+commands:       up, down, mute
+commands:       level <level> (<level> is 0-15)
+Peter Tarjan (ptarjan@citromail.hu)
+*/
+    
+    if ( !p_client_buffer || client_buffer_size <= 0 )
+       return;
+    
+    FILE *fp;
+
+    char volume[128];
+    snprintf(volume, 127, "%s/volume",IBM_ACPI_DIR);    
+    unsigned int vol=-1;
+    char mute[3]="";
+
+    fp = fopen(volume, "r");
+    if (fp != NULL)
+    {
+       while (!feof(fp))
+       {
+           char line[256];
+           if (fgets(line, 255, fp) == NULL) break;
+           if (sscanf(line, "level: %d", &vol)) continue;
+           if (sscanf(line, "mute: %s", mute)) break;
+       }
+    }
+    else 
+    {
+       CRIT_ERR("can't open '%s': %s\nYou are not using the IBM ACPI. Remove ibm* from your Conky config file.", volume, strerror(errno));
+    }
+
+    fclose(fp);
+
+    if (strcmp(mute, "on")==0)
+    {
+       snprintf( p_client_buffer, client_buffer_size, "%s", "mute" );
+       return;
+    }
+    else
+    {
+       snprintf( p_client_buffer, client_buffer_size, "%d", vol );
+       return;
+    }
+
+}
+
+/*static FILE *fp=NULL;*/
+
+void get_ibm_acpi_brightness(char * p_client_buffer, size_t client_buffer_size)
+{
+/* get LCD brightness on IBM/Lenovo laptops running the ibm acpi.
+   /proc/acpi/ibm/brightness looks like this (3 lines):
+level:          7
+commands:       up, down
+commands:       level <level> (<level> is 0-7)
+Peter Tarjan (ptarjan@citromail.hu)
+*/
+
+    if ( !p_client_buffer || client_buffer_size <= 0 )
+       return;
+
+    FILE *fp;
+    unsigned int brightness=0;
+    char filename[128];
+    snprintf(filename, 127, "%s/brightness",IBM_ACPI_DIR);    
+
+    fp = fopen(filename, "r");
+    if (fp != NULL)
+    {
+       while (!feof(fp))
+       {
+           char line[256];
+           if (fgets(line, 255, fp) == NULL) break;
+           if (sscanf(line, "level: %d", &brightness)) break;  
+       }
+    }
+    else 
+    {
+       CRIT_ERR("can't open '%s': %s\nYou are not using the IBM ACPI. Remove ibm* from your Conky config file.", filename, strerror(errno));
+    }
+
+    fclose(fp);
+
+    snprintf( p_client_buffer, client_buffer_size, "%d", brightness );
+    return;
+    
+}