Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 190438 | Differences between
and this patch

Collapse All | Expand All

(-)conky-1.4.6.orig/src/conky.c (+38 lines)
Lines 983-988 enum text_object_type { Link Here
983
	OBJ_alignc,
983
	OBJ_alignc,
984
	OBJ_i2c,
984
	OBJ_i2c,
985
#if defined(__linux__)
985
#if defined(__linux__)
986
	OBJ_hwmon,
986
	OBJ_i8k_version,
987
	OBJ_i8k_version,
987
	OBJ_i8k_bios,
988
	OBJ_i8k_bios,
988
	OBJ_i8k_serial,
989
	OBJ_i8k_serial,
Lines 1182-1187 struct text_object { Link Here
1182
			char *fmt;   /* time display formatting */
1183
			char *fmt;   /* time display formatting */
1183
		} tztime;
1184
		} tztime;
1184
1185
1186
#if defined(__linux__)
1187
		struct {
1188
			enum hwmon_sensor_type type;
1189
			char *fname; /* filename in /sys/class/hwmon/hwmonX/device/ */
1190
		} hwmon;
1191
#endif
1192
1185
		struct {
1193
		struct {
1186
			struct fs_stat *fs;
1194
			struct fs_stat *fs;
1187
			int w, h;
1195
			int w, h;
Lines 1780-1785 static void free_text_objects(unsigned i Link Here
1780
			case OBJ_acpitempf:
1788
			case OBJ_acpitempf:
1781
				close(objs[i].data.i);
1789
				close(objs[i].data.i);
1782
				break;
1790
				break;
1791
#if defined(__linux__)
1792
			case OBJ_hwmon:
1793
				free(objs[i].data.hwmon.fname);
1794
				break;
1795
#endif
1783
			case OBJ_i2c:
1796
			case OBJ_i2c:
1784
				close(objs[i].data.i2c.fd);
1797
				close(objs[i].data.i2c.fd);
1785
				break;
1798
				break;
Lines 2199-2204 static struct text_object *construct_tex Link Here
2199
		strcpy(bat, "BAT0");
2212
		strcpy(bat, "BAT0");
2200
	}
2213
	}
2201
#if defined(__linux__)
2214
#if defined(__linux__)
2215
	END OBJ(hwmon, 0)
2216
		if (!arg) {
2217
			CRIT_ERR("hwmon: needs arguments (hwmon-number, sensor type, sensor number, sensor subtype)");
2218
		} else {
2219
			unsigned int monidx, sensidx;
2220
			char sensor[10], senssub[32];
2221
			if (sscanf(arg, "%u %9s %u %31s", &monidx, sensor, &sensidx, senssub) != 4) {
2222
				CRIT_ERR("hwmon: invalid (number of) arguments");
2223
			} else {
2224
				unsigned int maxlen = strlen(arg)+29+1+1; /* 29=strlen("/sys/class/hwmon/hwmon/device") */
2225
				char fname[maxlen];
2226
				snprintf(fname, maxlen, "/sys/class/hwmon/hwmon%u/device/%s%u_%s", monidx, sensor, sensidx, senssub);
2227
				obj->data.hwmon.fname = strdup(fname);
2228
				if (strncmp(sensor, "temp", 5) == 0) {
2229
					obj->data.hwmon.type = HWMON_temp;
2230
				} else if (strncmp(sensor, "fan", 4) == 0) {
2231
					obj->data.hwmon.type = HWMON_fan;
2232
				} else {
2233
					obj->data.hwmon.type = HWMON_other;
2234
				}
2235
			}
2236
		}
2202
	END OBJ(i8k_version, INFO_I8K)
2237
	END OBJ(i8k_version, INFO_I8K)
2203
		END OBJ(i8k_bios, INFO_I8K)
2238
		END OBJ(i8k_bios, INFO_I8K)
2204
		END OBJ(i8k_serial, INFO_I8K)
2239
		END OBJ(i8k_serial, INFO_I8K)
Lines 3586-3591 static void generate_text_internal(char Link Here
3586
					new_fg(p, color9);
3621
					new_fg(p, color9);
3587
				}
3622
				}
3588
#if defined(__linux__)
3623
#if defined(__linux__)
3624
				OBJ(hwmon) {
3625
					get_hwmon_value(p, p_max_size, obj->data.hwmon.fname, obj->data.hwmon.type); 
3626
				}
3589
				OBJ(i8k_version) {
3627
				OBJ(i8k_version) {
3590
					snprintf(p, p_max_size, "%s", i8k.version);
3628
					snprintf(p, p_max_size, "%s", i8k.version);
3591
				}
3629
				}
(-)conky-1.4.6.orig/src/conky.h (+7 lines)
Lines 253-258 enum { Link Here
253
#endif
253
#endif
254
};
254
};
255
255
256
enum hwmon_sensor_type {
257
	HWMON_temp,
258
	HWMON_fan,
259
	HWMON_other
260
};
256
261
257
/* get_battery_stuff() item selector */
262
/* get_battery_stuff() item selector */
258
enum {
263
enum {
Lines 482-487 int open_i2c_sensor(const char *dev, con Link Here
482
		    char *devtype);
487
		    char *devtype);
483
double get_i2c_info(int *fd, int arg, char *devtype, char *type);
488
double get_i2c_info(int *fd, int arg, char *devtype, char *type);
484
489
490
void get_hwmon_value( char * p_client_buffer, size_t client_buffer_size, char * fname, enum hwmon_sensor_type type );
491
485
void get_adt746x_cpu( char *, size_t ); 
492
void get_adt746x_cpu( char *, size_t ); 
486
void get_adt746x_fan( char *, size_t ); 
493
void get_adt746x_fan( char *, size_t ); 
487
unsigned int get_diskio(void);
494
unsigned int get_diskio(void);
(-)conky-1.4.6.orig/src/linux.c (+31 lines)
Lines 750-755 double get_i2c_info(int *fd, int div, ch Link Here
750
	}
750
	}
751
}
751
}
752
752
753
void get_hwmon_value( char * p_client_buffer, size_t client_buffer_size, char * fname, enum hwmon_sensor_type type )
754
{
755
	static int rep;
756
	int sensor_value;
757
	FILE *fp;
758
759
	if ( !p_client_buffer || client_buffer_size <= 0 || !fname )
760
		return;
761
762
	if ((fp = open_file(fname, &rep)) == NULL) {
763
		snprintf( p_client_buffer, client_buffer_size, "hwmon: file '%s' not found", fname ); 
764
	} else {
765
		fscanf(fp, "%d", &sensor_value);
766
		fclose(fp);
767
		/* do type-dependent stuff like conversion to more "readable" units.
768
		 * See Documentation/hwmon/sysfs-interface in the kernel sources for
769
		 * more information.
770
		 */
771
		switch (type) { 
772
			case HWMON_temp:
773
				sensor_value /= 1000; /* temperatures from milli-degree to degree (celsius) */
774
				break;
775
			case HWMON_fan: /* fans are in RPM - should be ok */
776
			case HWMON_other: /* keep the unit by default */
777
			default:
778
				break;
779
		}
780
		snprintf( p_client_buffer, client_buffer_size, "%d", sensor_value );
781
	}
782
}
783
753
/* Prior to kernel version 2.6.12, the CPU fan speed was available
784
/* Prior to kernel version 2.6.12, the CPU fan speed was available
754
 * in ADT746X_FAN_OLD, whereas later kernel versions provide this
785
 * in ADT746X_FAN_OLD, whereas later kernel versions provide this
755
 * information in ADT746X_FAN.
786
 * information in ADT746X_FAN.

Return to bug 190438