mirror of
https://github.com/hholtmann/smcFanControl.git
synced 2025-11-04 19:49:16 +01:00
Added support for MacBookPro15,1 ( Mid 2018 )
Modified they way fans are controlled ( via FxTg instead of FxMn ) Added reset to auto mode on exit
This commit is contained in:
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Apple System Management Control (SMC) Tool
|
||||
* Copyright (C) 2006 devnull
|
||||
* Apple System Management Control (SMC) Tool
|
||||
* Copyright (C) 2006 devnull
|
||||
* Portions Copyright (C) 2013 Michael Wilber
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
@ -58,7 +58,7 @@ UInt32 _strtoul(char *str, int size, int base)
|
||||
void _ultostr(char *str, UInt32 val)
|
||||
{
|
||||
str[0] = '\0';
|
||||
sprintf(str, "%c%c%c%c",
|
||||
sprintf(str, "%c%c%c%c",
|
||||
(unsigned int) val >> 24,
|
||||
(unsigned int) val >> 16,
|
||||
(unsigned int) val >> 8,
|
||||
@ -83,6 +83,12 @@ float _strtof(unsigned char *str, int size, int e)
|
||||
return total;
|
||||
}
|
||||
|
||||
void printFLT(SMCVal_t val)
|
||||
{
|
||||
float fval;
|
||||
memcpy(&fval,val.bytes,sizeof(float));
|
||||
printf("%.0f ", fval);
|
||||
}
|
||||
|
||||
void printFP1F(SMCVal_t val)
|
||||
{
|
||||
@ -218,6 +224,8 @@ void printVal(SMCVal_t val)
|
||||
(strcmp(val.dataType, DATATYPE_UINT16) == 0) ||
|
||||
(strcmp(val.dataType, DATATYPE_UINT32) == 0))
|
||||
printUInt(val);
|
||||
else if (strcmp(val.dataType, DATATYPE_FLT) == 0 && val.dataSize == 4)
|
||||
printFLT(val);
|
||||
else if (strcmp(val.dataType, DATATYPE_FP1F) == 0 && val.dataSize == 2)
|
||||
printFP1F(val);
|
||||
else if (strcmp(val.dataType, DATATYPE_FP4C) == 0 && val.dataSize == 2)
|
||||
@ -504,6 +512,28 @@ kern_return_t SMCPrintAll(void)
|
||||
return kIOReturnSuccess;
|
||||
}
|
||||
|
||||
|
||||
//Fix me with other types
|
||||
float getFloatFromVal(SMCVal_t val)
|
||||
{
|
||||
float fval = -1.0f;
|
||||
|
||||
if (val.dataSize > 0)
|
||||
{
|
||||
if (strcmp(val.dataType, DATATYPE_FLT) == 0 && val.dataSize == 4) {
|
||||
memcpy(&fval,val.bytes,sizeof(float));
|
||||
}
|
||||
else if (strcmp(val.dataType, DATATYPE_FPE2) == 0 && val.dataSize == 2) {
|
||||
fval = _strtof(val.bytes, val.dataSize, 2);
|
||||
}
|
||||
else if (strcmp(val.dataType, DATATYPE_UINT16) == 0 && val.dataSize == 2) {
|
||||
fval = (float)_strtoul((char *)val.bytes, val.dataSize, 10);
|
||||
}
|
||||
}
|
||||
|
||||
return fval;
|
||||
}
|
||||
|
||||
kern_return_t SMCPrintFans(void)
|
||||
{
|
||||
kern_return_t result;
|
||||
@ -523,22 +553,24 @@ kern_return_t SMCPrintFans(void)
|
||||
printf("\nFan #%d:\n", i);
|
||||
sprintf(key, "F%dID", i);
|
||||
SMCReadKey(key, &val);
|
||||
printf(" Fan ID : %s\n", val.bytes+4);
|
||||
sprintf(key, "F%dAc", i);
|
||||
SMCReadKey(key, &val);
|
||||
printf(" Actual speed : %.0f\n", _strtof(val.bytes, val.dataSize, 2));
|
||||
if(val.dataSize > 0) {
|
||||
printf(" Fan ID : %s\n", val.bytes+4);
|
||||
}
|
||||
sprintf(key, "F%dAc", i);
|
||||
SMCReadKey(key, &val);
|
||||
printf(" Actual speed : %.0f\n", getFloatFromVal(val));
|
||||
sprintf(key, "F%dMn", i);
|
||||
SMCReadKey(key, &val);
|
||||
printf(" Minimum speed: %.0f\n", _strtof(val.bytes, val.dataSize, 2));
|
||||
printf(" Minimum speed: %.0f\n", getFloatFromVal(val));
|
||||
sprintf(key, "F%dMx", i);
|
||||
SMCReadKey(key, &val);
|
||||
printf(" Maximum speed: %.0f\n", _strtof(val.bytes, val.dataSize, 2));
|
||||
printf(" Maximum speed: %.0f\n", getFloatFromVal(val));
|
||||
sprintf(key, "F%dSf", i);
|
||||
SMCReadKey(key, &val);
|
||||
printf(" Safe speed : %.0f\n", _strtof(val.bytes, val.dataSize, 2));
|
||||
printf(" Safe speed : %.0f\n", getFloatFromVal(val));
|
||||
sprintf(key, "F%dTg", i);
|
||||
SMCReadKey(key, &val);
|
||||
printf(" Target speed : %.0f\n", _strtof(val.bytes, val.dataSize, 2));
|
||||
printf(" Target speed : %.0f\n", getFloatFromVal(val));
|
||||
SMCReadKey("FS! ", &val);
|
||||
if ((_strtoul((char *)val.bytes, 2, 16) & (1 << i)) == 0)
|
||||
printf(" Mode : auto\n");
|
||||
|
||||
@ -40,6 +40,7 @@
|
||||
#define SMC_CMD_READ_PLIMIT 11
|
||||
#define SMC_CMD_READ_VERS 12
|
||||
|
||||
#define DATATYPE_FLT "flt "
|
||||
#define DATATYPE_FP1F "fp1f"
|
||||
#define DATATYPE_FP4C "fp4c"
|
||||
#define DATATYPE_FP5B "fp5b"
|
||||
|
||||
Reference in New Issue
Block a user