diff options
| -rw-r--r-- | debian/changelog | 6 | ||||
| -rw-r--r-- | i3status.1 | 10 | ||||
| -rw-r--r-- | i3status.c | 46 | ||||
| -rw-r--r-- | i3status.conf | 3 | ||||
| -rw-r--r-- | i3status.h | 2 | 
5 files changed, 64 insertions, 3 deletions
| diff --git a/debian/changelog b/debian/changelog index f7a0b05..dbdaf9b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +i3status (1.1-1) unstable; urgency=low + +  * Implement getting temperature from thermal zones (Thanks atsutane) + + -- Michael Stapelberg <michael@stapelberg.de>  Fri, 22 May 2009 21:23:44 +0200 +  i3status (1.0-1) unstable; urgency=low    * Initial release @@ -91,6 +91,11 @@ Get current speed of the ethernet interface using the same mechanism as  ethtool. You need to start i3status with root privileges to use this.  .TP +.B get_cpu_temperature +Gets the temperature of the first thermal zone or the specified thermal zone +(if any). Use it to display your CPU temperature. + +.TP  .B normcolors  Specifies the colors for background/border in the same format (html colorcodes)  as wmii's configuration (just the last two values), that is #222222 #333333 for @@ -122,6 +127,7 @@ System-wide configuration file.  \&order run,wlan,eth,battery,load,time  \&normcolors #000000 #333333  \&color +\&get_cpu_temperature  .Ve  .SH MOUNTING WMII'S PSEUDO FILESYSTEM @@ -143,8 +149,10 @@ this, please fix it and send me a patch.  .BR date (1),  .BR glob (3) -.SH AUTHOR +.SH AUTHORS  Michael Stapelberg <michael+i3status at stapelberg dot de> +Thorsten Toepper <atsutane at freethoughts dot de> +  .SH WEBSITE  See http://i3.zekjur.net/i3status for the newest release. @@ -5,6 +5,7 @@   *   *   * Copyright © 2008-2009 Michael Stapelberg and contributors + * Copyright © 2009 Thorsten Toepper <atsutane at freethoughts dot de>   * All rights reserved.   *   * Redistribution and use in source and binary forms, with or without modification, @@ -88,6 +89,8 @@ static char *wmii_path;  static const char *time_format;  static bool use_colors;  static bool get_ethspeed; +static bool get_cpu_temperature; +static char *thermal_zone;  static const char *wmii_normcolors = "#222222 #333333";  static char order[MAX_ORDER][2];  static const char **run_watches; @@ -200,6 +203,8 @@ static void setup(void) {                  create_file(concat(order[ORDER_WLAN],"wlan"));          if (eth_interface)                  create_file(concat(order[ORDER_ETH],"eth")); +        if (get_cpu_temperature) +                create_file(concat(order[ORDER_CPU_TEMPERATURE], "cpu_temperature"));          create_file(concat(order[ORDER_LOAD],"load"));          if (time_format)                  create_file(concat(order[ORDER_TIME],"time")); @@ -480,6 +485,33 @@ static char *get_eth_info() {  }  /* + * Reads the CPU temperature from /sys/class/thermal/thermal_zone0/temp and + * returns the temperature in degree celcius. + * + */ +static char *get_cpu_temperature_info() { +        static char part[16]; +        char buf[16]; +        int temp; +        int fd; + +        memset(buf, 0, sizeof(buf)); +        memset(part, 0, sizeof(part)); + +        if ((fd = open(thermal_zone, O_RDONLY)) == -1) +                die("Could not open %s\n", thermal_zone); +        (void)read(fd, buf, sizeof(buf)); +        (void)close(fd); + +        if (sscanf(buf, "%d", &temp) != 1) +                (void)snprintf(part, sizeof(part), "T: ? C"); +        else +                (void)snprintf(part, sizeof(part), "T: %d C", (temp/1000)); + +        return part; +} + +/*   * Checks if the PID in path is still valid by checking:   *  (Linux) if /proc/<pid> exists   *  (NetBSD) if sysctl returns process infos for this pid @@ -572,7 +604,16 @@ static int load_configuration(const char *configfile) {                          use_colors = true;                  OPT("get_ethspeed")                          get_ethspeed = true; -                OPT("normcolors") +                OPT("get_cpu_temperature") { +                        get_cpu_temperature = true; +                        if (strlen(dest_value) > 0) { +                                if (asprintf(&thermal_zone, "/sys/class/thermal/thermal_zone%d/temp", atoi(dest_value)) == -1) +                                        die("Could not build thermal_zone path\n"); +                        } else { +                                 if (asprintf(&thermal_zone, "/sys/class/thermal/thermal_zone0/temp") == -1) +                                        die("Could not build thermal_zone path\n"); +                        } +                } OPT("normcolors")                          wmii_normcolors = strdup(dest_value);                  OPT("interval")                          interval = atoi(dest_value); @@ -621,6 +662,7 @@ static int load_configuration(const char *configfile) {                                  SET_ORDER("wlan", ORDER_WLAN);                                  SET_ORDER("eth", ORDER_ETH);                                  SET_ORDER("battery", ORDER_BATTERY); +                                SET_ORDER("cpu_temperature", ORDER_CPU_TEMPERATURE);                                  SET_ORDER("load", ORDER_LOAD);                                  SET_ORDER("time", ORDER_TIME);                                  token = walk; @@ -697,6 +739,8 @@ int main(int argc, char *argv[]) {                  SIMPLEQ_FOREACH(current_battery, &batteries, batteries) {                          write_to_statusbar(concat(order[ORDER_BATTERY], "battery"), get_battery_info(current_battery), false);                  } +                if (get_cpu_temperature) +                        write_to_statusbar(concat(order[ORDER_CPU_TEMPERATURE], "cpu_temperature"), get_cpu_temperature_info(), false);                  /* Get load */  #ifdef LINUX diff --git a/i3status.conf b/i3status.conf index 4b204b0..7410d1a 100644 --- a/i3status.conf +++ b/i3status.conf @@ -25,3 +25,6 @@ color  # Checks ethernet interface speed (this needs root privileges)  get_ethspeed + +# Checks core temperature +get_cpu_temperature @@ -1,4 +1,4 @@  #define BEGINS_WITH(haystack, needle) (strncmp(haystack, needle, strlen(needle)) == 0)  typedef enum { CS_DISCHARGING, CS_CHARGING, CS_FULL } charging_status_t; -enum { ORDER_RUN, ORDER_WLAN, ORDER_ETH, ORDER_BATTERY, ORDER_LOAD, ORDER_TIME, MAX_ORDER }; +enum { ORDER_RUN, ORDER_WLAN, ORDER_ETH, ORDER_BATTERY, ORDER_CPU_TEMPERATURE, ORDER_LOAD, ORDER_TIME, MAX_ORDER }; | 
