Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/stormerider/htop-osx
Browse files Browse the repository at this point in the history
  • Loading branch information
max-horvath committed Nov 21, 2013
2 parents bc6ae6d + e53e058 commit 0574fb5
Show file tree
Hide file tree
Showing 19 changed files with 823 additions and 42 deletions.
117 changes: 117 additions & 0 deletions CPUTemperatureMeter.c
@@ -0,0 +1,117 @@
/*
htop
(C) 2004-2006 Hisham H. Muhammad
(c) 2013 Morgan Blackthorne
Released under the GNU GPL, see the COPYING file
in the source distribution for its full text.
*/

#include "CPUTemperatureMeter.h"
#include "Meter.h"

#include <time.h>

#include "debug.h"
#include "smc.h"

#define KELVIN 0
#define CELSIUS 1
#define FAHRENHEIT 2

int CPUTemperatureMeter_attributes[] = {
CPU_TEMP
};

static void CPUTemperatureMeter_setValues(Meter* this, char* buffer, int size) {
double temp[5];

temp[0] = SMCGetTemperature("TCAH"); // Some Mac Pros have two sensors, since they are SMP
temp[1] = SMCGetTemperature("TCBH"); // Second CPU sensor for Mac Pro
temp[2] = SMCGetTemperature("TC0D"); // Older MBPs
temp[3] = SMCGetTemperature("TC0F"); // Newer MBPs
temp[4] = SMCGetTemperature("TC0H"); // Some iMacs

if (temp[0] != 0 && temp[1] != 0) {
this->values[0] = temp[0];
this->values[1] = temp[1];
} else if (temp[2] != 0) {
this->values[0] = temp[2];
this->values[1] = 0;
} else if (temp[3] != 0) {
this->values[0] = temp[3];
this->values[1] = 0;
} else if (temp[4] != 0) {
this->values[0] = temp[4];
this->values[1] = 0;
} else {
// Couldn't retrieve sensor information...
this->values[0] = 0;
this->values[1] = 0;
}
}

static const char * scale_markers = "KCF";

static const double scales[][2] = {
{1.0, 273.15}, /* K */
{1.0, 0.0}, /* C */
{1.8, 32.0} /* F */
};

double celcius_to_scale(double temp, int scale) {
return temp * scales[scale][0] + scales[scale][1];
}

static void CPUTemperatureMeter_display(Object* cast, RichString* out) {
Meter* this = (Meter*)cast;
char buffer[20];
int scale = CELSIUS; /* change this to your favourite scale */
double hot_threshold = 70.0; /* *C */
double warm_threshold = 59.0; /* *C */
double raw_temp, converted_temp;
double raw_temp_2, converted_temp_2;

RichString_init(out);

raw_temp = this->values[0];
raw_temp_2 = this->values[1];

if (raw_temp > 0 && raw_temp < 900) {
converted_temp = celcius_to_scale(raw_temp, scale);
snprintf(buffer, 20, "%.1f %c", converted_temp, scale_markers[scale]);
if (raw_temp > hot_threshold) {
RichString_append(out, CRT_colors[CPU_TEMP_HOT], buffer);
} else if (raw_temp > warm_threshold) {
RichString_append(out, CRT_colors[CPU_TEMP_WARM], buffer);
} else {
RichString_append(out, CRT_colors[CPU_TEMP_NORMAL], buffer);
}
} else {
snprintf(buffer, 20, "-.- %c", scale_markers[scale]);
RichString_append(out, CRT_colors[CPU_TEMP_NORMAL], buffer);
}

if (raw_temp_2 > 0 && raw_temp_2 < 900) {
converted_temp_2 = celcius_to_scale(raw_temp_2, scale);
snprintf(buffer, 20, ", %.1f %c", converted_temp_2, scale_markers[scale]);
if (raw_temp_2 > hot_threshold) {
RichString_append(out, CRT_colors[CPU_TEMP_HOT], buffer);
} else if (raw_temp_2 > warm_threshold) {
RichString_append(out, CRT_colors[CPU_TEMP_WARM], buffer);
} else {
RichString_append(out, CRT_colors[CPU_TEMP_NORMAL], buffer);
}
}
}

MeterType CPUTemperatureMeter = {
.setValues = CPUTemperatureMeter_setValues,
.display = CPUTemperatureMeter_display,
.mode = TEXT_METERMODE,
.total = 100.0,
.items = 2,
.attributes = CPUTemperatureMeter_attributes,
.name = "CPUTemp",
.uiName = "CPU Temp",
.caption = "CPU Temp: ",
};
22 changes: 22 additions & 0 deletions CPUTemperatureMeter.h
@@ -0,0 +1,22 @@
/* Do not edit this file. It was automatically generated. */

#ifndef HEADER_CPUTemperatureMeter
#define HEADER_CPUTemperatureMeter
/*
htop
(C) 2004-2006 Hisham H. Muhammad
Released under the GNU GPL, see the COPYING file
in the source distribution for its full text.
*/

#include "Meter.h"

#include <time.h>

#include "debug.h"

extern int CPUTemperatureMeter_attributes[];

extern MeterType CPUTemperatureMeter;

#endif
56 changes: 56 additions & 0 deletions CRT.c
Expand Up @@ -100,7 +100,15 @@ typedef enum ColorElements_ {
CPU_IOWAIT,
CPU_IRQ,
CPU_SOFTIRQ,
CPU_TEMP,
CPU_TEMP_HOT,
CPU_TEMP_WARM,
CPU_TEMP_NORMAL,
HOSTNAME,
FAN_RPM,
FAN_RPM_HOT,
FAN_RPM_WARM,
FAN_RPM_NORMAL,
LAST_COLORELEMENT
} ColorElements;
Expand Down Expand Up @@ -265,6 +273,14 @@ void CRT_setColors(int colorScheme) {
CRT_colors[CPU_IOWAIT] = A_NORMAL;
CRT_colors[CPU_IRQ] = A_BOLD;
CRT_colors[CPU_SOFTIRQ] = A_BOLD;
CRT_colors[CPU_TEMP] = A_BOLD;
CRT_colors[CPU_TEMP_HOT] = A_BOLD;
CRT_colors[CPU_TEMP_WARM] = A_BOLD;
CRT_colors[CPU_TEMP_NORMAL] = A_NORMAL;
CRT_colors[FAN_RPM] = A_BOLD;
CRT_colors[FAN_RPM_HOT] = A_BOLD;
CRT_colors[FAN_RPM_WARM] = A_BOLD;
CRT_colors[FAN_RPM_NORMAL] = A_NORMAL;
CRT_colors[HOSTNAME] = A_BOLD;
} else if (CRT_colorScheme == COLORSCHEME_BLACKONWHITE) {
CRT_colors[RESET_COLOR] = ColorPair(Black,White);
Expand Down Expand Up @@ -324,6 +340,14 @@ void CRT_setColors(int colorScheme) {
CRT_colors[CPU_IOWAIT] = A_BOLD | ColorPair(Black, Black);
CRT_colors[CPU_IRQ] = ColorPair(Blue,White);
CRT_colors[CPU_SOFTIRQ] = ColorPair(Blue,White);
CRT_colors[CPU_TEMP] = ColorPair(Blue,White);
CRT_colors[CPU_TEMP_HOT] = ColorPair(Red,White);
CRT_colors[CPU_TEMP_WARM] = ColorPair(Black,Yellow);
CRT_colors[CPU_TEMP_NORMAL] = ColorPair(Black,Green);
CRT_colors[FAN_RPM] = ColorPair(Blue,White);
CRT_colors[FAN_RPM_HOT] = ColorPair(Red,White);
CRT_colors[FAN_RPM_WARM] = ColorPair(Black,Yellow);
CRT_colors[FAN_RPM_NORMAL] = ColorPair(Black,Green);
CRT_colors[HOSTNAME] = ColorPair(Black,White);
} else if (CRT_colorScheme == COLORSCHEME_BLACKONWHITE2) {
CRT_colors[RESET_COLOR] = ColorPair(Black,Black);
Expand Down Expand Up @@ -383,6 +407,14 @@ void CRT_setColors(int colorScheme) {
CRT_colors[CPU_IOWAIT] = A_BOLD | ColorPair(Black, Black);
CRT_colors[CPU_IRQ] = A_BOLD | ColorPair(Blue,Black);
CRT_colors[CPU_SOFTIRQ] = ColorPair(Blue,Black);
CRT_colors[CPU_TEMP] = ColorPair(Blue,Black);
CRT_colors[CPU_TEMP_HOT] = ColorPair(Red,White);
CRT_colors[CPU_TEMP_WARM] = ColorPair(Blue,Yellow);
CRT_colors[CPU_TEMP_NORMAL] = ColorPair(Blue,Green);
CRT_colors[FAN_RPM] = ColorPair(Blue,Black);
CRT_colors[FAN_RPM_HOT] = ColorPair(Red,White);
CRT_colors[FAN_RPM_WARM] = ColorPair(Blue,Yellow);
CRT_colors[FAN_RPM_NORMAL] = ColorPair(Blue,Green);
CRT_colors[HOSTNAME] = ColorPair(White,Black);
} else if (CRT_colorScheme == COLORSCHEME_MIDNIGHT) {
CRT_colors[RESET_COLOR] = ColorPair(White,Blue);
Expand Down Expand Up @@ -442,6 +474,14 @@ void CRT_setColors(int colorScheme) {
CRT_colors[CPU_IOWAIT] = ColorPair(Yellow,Blue);
CRT_colors[CPU_IRQ] = A_BOLD | ColorPair(Black,Blue);
CRT_colors[CPU_SOFTIRQ] = ColorPair(Black,Blue);
CRT_colors[CPU_TEMP] = ColorPair(Black,Blue);
CRT_colors[CPU_TEMP_HOT] = ColorPair(Red,White);
CRT_colors[CPU_TEMP_WARM] = ColorPair(Black,Yellow);
CRT_colors[CPU_TEMP_NORMAL] = ColorPair(Black,Green);
CRT_colors[FAN_RPM] = ColorPair(Black,Blue);
CRT_colors[FAN_RPM_HOT] = ColorPair(Red,White);
CRT_colors[FAN_RPM_WARM] = ColorPair(Black,Yellow);
CRT_colors[FAN_RPM_NORMAL] = ColorPair(Black,Green);
CRT_colors[HOSTNAME] = ColorPair(White,Blue);
} else if (CRT_colorScheme == COLORSCHEME_BLACKNIGHT) {
CRT_colors[RESET_COLOR] = ColorPair(Cyan,Black);
Expand Down Expand Up @@ -501,6 +541,14 @@ void CRT_setColors(int colorScheme) {
CRT_colors[CPU_IOWAIT] = ColorPair(Yellow,Black);
CRT_colors[CPU_IRQ] = A_BOLD | ColorPair(Blue,Black);
CRT_colors[CPU_SOFTIRQ] = ColorPair(Blue,Black);
CRT_colors[CPU_TEMP] = ColorPair(Blue,Black);
CRT_colors[CPU_TEMP_HOT] = ColorPair(Red,White);
CRT_colors[CPU_TEMP_WARM] = ColorPair(Blue,Yellow);
CRT_colors[CPU_TEMP_NORMAL] = ColorPair(Blue,Green);
CRT_colors[FAN_RPM] = ColorPair(Blue,Black);
CRT_colors[FAN_RPM_HOT] = ColorPair(Red,White);
CRT_colors[FAN_RPM_WARM] = ColorPair(Blue,Yellow);
CRT_colors[FAN_RPM_NORMAL] = ColorPair(Blue,Green);
CRT_colors[HOSTNAME] = ColorPair(Green,Black);
} else {
/* Default */
Expand Down Expand Up @@ -561,6 +609,14 @@ void CRT_setColors(int colorScheme) {
CRT_colors[CPU_IOWAIT] = A_BOLD | ColorPair(Black, Black);
CRT_colors[CPU_IRQ] = ColorPair(Yellow,Black);
CRT_colors[CPU_SOFTIRQ] = ColorPair(Magenta,Black);
CRT_colors[CPU_TEMP] = ColorPair(Red,Black);
CRT_colors[CPU_TEMP_HOT] = ColorPair(Red,White);
CRT_colors[CPU_TEMP_WARM] = ColorPair(Yellow,Black);
CRT_colors[CPU_TEMP_NORMAL] = ColorPair(Green,Black);
CRT_colors[FAN_RPM] = ColorPair(Red,Black);
CRT_colors[FAN_RPM_HOT] = ColorPair(Red,White);
CRT_colors[FAN_RPM_WARM] = ColorPair(Yellow,Black);
CRT_colors[FAN_RPM_NORMAL] = ColorPair(Green,Black);
CRT_colors[HOSTNAME] = A_BOLD;
}
}
8 changes: 8 additions & 0 deletions CRT.h
Expand Up @@ -102,7 +102,15 @@ typedef enum ColorElements_ {
CPU_IOWAIT,
CPU_IRQ,
CPU_SOFTIRQ,
CPU_TEMP,
CPU_TEMP_HOT,
CPU_TEMP_WARM,
CPU_TEMP_NORMAL,
HOSTNAME,
FAN_RPM,
FAN_RPM_HOT,
FAN_RPM_WARM,
FAN_RPM_NORMAL,
LAST_COLORELEMENT
} ColorElements;

Expand Down
119 changes: 119 additions & 0 deletions FanRPMMeter.c
@@ -0,0 +1,119 @@
/*
htop
(c) 2013 Morgan Blackthorne
Released under the GNU GPL, see the COPYING file
in the source distribution for its full text.
*/

#include "FanRPMMeter.h"
#include "Meter.h"

#include <time.h>

#include "debug.h"
#include "smc.h"

int FanRPMMeter_attributes[] = {
FAN_RPM
};

static void FanRPMMeter_setValues(Meter* this, char* buffer, int size) {
float rpm[8];

rpm[0] = SMCGetFanRPM("F0Ac");
rpm[1] = SMCGetFanRPM("F0Mx");
rpm[2] = SMCGetFanRPM("F1Ac");
rpm[3] = SMCGetFanRPM("F1Mx");
rpm[4] = SMCGetFanRPM("F2Ac");
rpm[5] = SMCGetFanRPM("F2Mx");
rpm[6] = SMCGetFanRPM("F3Ac");
rpm[7] = SMCGetFanRPM("F3Mx");

//printf("0 = %.0f, 2 = %.0f, 4 = %.0f\n", rpm[0], rpm[2], rpm[4]);
//printf("1 = %.0f, 3 = %.0f, 5 = %.0f\n", rpm[1], rpm[3], rpm[5]);

this->values[0] = rpm[0];
this->values[1] = rpm[1];
this->values[2] = rpm[2];
this->values[3] = rpm[3];
this->values[4] = rpm[4];
this->values[5] = rpm[5];
this->values[6] = rpm[6];
this->values[7] = rpm[7];
}

static void FanRPMMeter_display(Object* cast, RichString* out) {
Meter* this = (Meter*)cast;
char buffer[20];
double hot_threshold = 4000.0; /* RPM */
double warm_threshold = 3000.0; /* RPM */
double cold_threshold = 1000.0; /* RPM */
double raw_rpm_1, raw_rpm_2, raw_rpm_3, raw_rpm_4;
double max_rpm_1, max_rpm_2, max_rpm_3, max_rpm_4;

RichString_init(out);

raw_rpm_1 = this->values[0]; max_rpm_1 = this->values[1];
raw_rpm_2 = this->values[2]; max_rpm_2 = this->values[3];
raw_rpm_3 = this->values[4]; max_rpm_3 = this->values[5];
raw_rpm_4 = this->values[6]; max_rpm_4 = this->values[7];

if (raw_rpm_1 > 0) {
snprintf(buffer, 20, "%.0f RPM", raw_rpm_1);
if (raw_rpm_1 > hot_threshold) {
RichString_append(out, CRT_colors[FAN_RPM_HOT], buffer);
} else if (raw_rpm_1 > warm_threshold) {
RichString_append(out, CRT_colors[FAN_RPM_WARM], buffer);
} else {
RichString_append(out, CRT_colors[FAN_RPM_NORMAL], buffer);
}
} else {
snprintf(buffer, 20, "-.- RPM");
RichString_append(out, CRT_colors[FAN_RPM_NORMAL], buffer);
}

if (raw_rpm_2 > 0) {
snprintf(buffer, 20, ", %.0f RPM", raw_rpm_2);
if (raw_rpm_2 > hot_threshold) {
RichString_append(out, CRT_colors[FAN_RPM_HOT], buffer);
} else if (raw_rpm_2 > warm_threshold) {
RichString_append(out, CRT_colors[FAN_RPM_WARM], buffer);
} else {
RichString_append(out, CRT_colors[FAN_RPM_NORMAL], buffer);
}
}

if (raw_rpm_3 > 0) {
snprintf(buffer, 20, ", %.0f RPM", raw_rpm_3);
if (raw_rpm_3 > hot_threshold) {
RichString_append(out, CRT_colors[FAN_RPM_HOT], buffer);
} else if (raw_rpm_3 > warm_threshold) {
RichString_append(out, CRT_colors[FAN_RPM_WARM], buffer);
} else {
RichString_append(out, CRT_colors[FAN_RPM_NORMAL], buffer);
}
}

if (raw_rpm_4 > 0) {
snprintf(buffer, 20, ", %.0f RPM", raw_rpm_4);
if (raw_rpm_4 > hot_threshold) {
RichString_append(out, CRT_colors[FAN_RPM_HOT], buffer);
} else if (raw_rpm_4 > warm_threshold) {
RichString_append(out, CRT_colors[FAN_RPM_WARM], buffer);
} else {
RichString_append(out, CRT_colors[FAN_RPM_NORMAL], buffer);
}
}
}

MeterType FanRPMMeter = {
.setValues = FanRPMMeter_setValues,
.display = FanRPMMeter_display,
.mode = TEXT_METERMODE,
.total = 100.0,
.items = 8,
.attributes = FanRPMMeter_attributes,
.name = "FanRPM",
.uiName = "Fan RPM",
.caption = "Fan RPM: ",
};

0 comments on commit 0574fb5

Please sign in to comment.