mirror of
https://github.com/hholtmann/smcFanControl.git
synced 2025-11-04 19:49:16 +01:00
Merge pull request #6 from denis2342/master
fixes the decoding of int values. this is important for the correct readout of the number of keys
This commit is contained in:
@ -37,7 +37,7 @@ UInt32 _strtoul(char *str, int size, int base)
|
|||||||
if (base == 16)
|
if (base == 16)
|
||||||
total += str[i] << (size - 1 - i) * 8;
|
total += str[i] << (size - 1 - i) * 8;
|
||||||
else
|
else
|
||||||
total += (unsigned char) (str[i] << (size - 1 - i) * 8);
|
total += ((unsigned char) (str[i]) << (size - 1 - i) * 8);
|
||||||
}
|
}
|
||||||
return total;
|
return total;
|
||||||
}
|
}
|
||||||
@ -52,7 +52,7 @@ void _ultostr(char *str, UInt32 val)
|
|||||||
(unsigned int) val);
|
(unsigned int) val);
|
||||||
}
|
}
|
||||||
|
|
||||||
float _strtof(char *str, int size, int e)
|
float _strtof(unsigned char *str, int size, int e)
|
||||||
{
|
{
|
||||||
float total = 0;
|
float total = 0;
|
||||||
int i;
|
int i;
|
||||||
@ -65,6 +65,8 @@ float _strtof(char *str, int size, int e)
|
|||||||
total += str[i] << (size - 1 - i) * (8 - e);
|
total += str[i] << (size - 1 - i) * (8 - e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
total += (str[size-1] & 0x03) * 0.25;
|
||||||
|
|
||||||
return total;
|
return total;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,11 +77,50 @@ void smc_init(){
|
|||||||
void smc_close(){
|
void smc_close(){
|
||||||
SMCClose(conn);
|
SMCClose(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void printFP1F(SMCVal_t val)
|
||||||
|
{
|
||||||
|
printf("%.5f ", ntohs(*(UInt16*)val.bytes) / 32768.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void printFP4C(SMCVal_t val)
|
||||||
|
{
|
||||||
|
printf("%.5f ", ntohs(*(UInt16*)val.bytes) / 4096.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void printFP5B(SMCVal_t val)
|
||||||
|
{
|
||||||
|
printf("%.5f ", ntohs(*(UInt16*)val.bytes) / 2048.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void printFP6A(SMCVal_t val)
|
||||||
|
{
|
||||||
|
printf("%.4f ", ntohs(*(UInt16*)val.bytes) / 1024.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void printFP79(SMCVal_t val)
|
||||||
|
{
|
||||||
|
printf("%.4f ", ntohs(*(UInt16*)val.bytes) / 512.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void printFP88(SMCVal_t val)
|
||||||
|
{
|
||||||
|
printf("%.3f ", ntohs(*(UInt16*)val.bytes) / 256.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void printFPA6(SMCVal_t val)
|
||||||
|
{
|
||||||
|
printf("%.2f ", ntohs(*(UInt16*)val.bytes) / 64.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void printFPC4(SMCVal_t val)
|
||||||
|
{
|
||||||
|
printf("%.2f ", ntohs(*(UInt16*)val.bytes) / 16.0);
|
||||||
|
}
|
||||||
|
|
||||||
void printFPE2(SMCVal_t val)
|
void printFPE2(SMCVal_t val)
|
||||||
{
|
{
|
||||||
/* FIXME: This decode is incomplete, last 2 bits are dropped */
|
printf("%.2f ", ntohs(*(UInt16*)val.bytes) / 4.0);
|
||||||
|
|
||||||
printf("%.0f ", _strtof(val.bytes, val.dataSize, 2));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void printUInt(SMCVal_t val)
|
void printUInt(SMCVal_t val)
|
||||||
@ -87,6 +128,71 @@ void printUInt(SMCVal_t val)
|
|||||||
printf("%u ", (unsigned int) _strtoul(val.bytes, val.dataSize, 10));
|
printf("%u ", (unsigned int) _strtoul(val.bytes, val.dataSize, 10));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void printSP1E(SMCVal_t val)
|
||||||
|
{
|
||||||
|
printf("%.5f ", ((SInt16)ntohs(*(UInt16*)val.bytes)) / 16384.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void printSP3C(SMCVal_t val)
|
||||||
|
{
|
||||||
|
printf("%.5f ", ((SInt16)ntohs(*(UInt16*)val.bytes)) / 4096.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void printSP4B(SMCVal_t val)
|
||||||
|
{
|
||||||
|
printf("%.4f ", ((SInt16)ntohs(*(UInt16*)val.bytes)) / 2048.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void printSP5A(SMCVal_t val)
|
||||||
|
{
|
||||||
|
printf("%.4f ", ((SInt16)ntohs(*(UInt16*)val.bytes)) / 1024.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void printSP69(SMCVal_t val)
|
||||||
|
{
|
||||||
|
printf("%.3f ", ((SInt16)ntohs(*(UInt16*)val.bytes)) / 512.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void printSP78(SMCVal_t val)
|
||||||
|
{
|
||||||
|
printf("%.3f ", ((SInt16)ntohs(*(UInt16*)val.bytes)) / 256.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void printSP87(SMCVal_t val)
|
||||||
|
{
|
||||||
|
printf("%.3f ", ((SInt16)ntohs(*(UInt16*)val.bytes)) / 128.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void printSP96(SMCVal_t val)
|
||||||
|
{
|
||||||
|
printf("%.2f ", ((SInt16)ntohs(*(UInt16*)val.bytes)) / 64.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void printSPB4(SMCVal_t val)
|
||||||
|
{
|
||||||
|
printf("%.2f ", ((SInt16)ntohs(*(UInt16*)val.bytes)) / 16.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void printSPF0(SMCVal_t val)
|
||||||
|
{
|
||||||
|
printf("%.0f ", (float)ntohs(*(UInt16*)val.bytes));
|
||||||
|
}
|
||||||
|
|
||||||
|
void printSI8(SMCVal_t val)
|
||||||
|
{
|
||||||
|
printf("%d ", (signed char)*val.bytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
void printSI16(SMCVal_t val)
|
||||||
|
{
|
||||||
|
printf("%d ", ntohs(*(SInt16*)val.bytes));
|
||||||
|
}
|
||||||
|
|
||||||
|
void printPWM(SMCVal_t val)
|
||||||
|
{
|
||||||
|
printf("%.1f%% ", ntohs(*(UInt16*)val.bytes) * 100 / 65536.0);
|
||||||
|
}
|
||||||
|
|
||||||
void printBytesHex(SMCVal_t val)
|
void printBytesHex(SMCVal_t val)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@ -106,8 +212,50 @@ void printVal(SMCVal_t val)
|
|||||||
(strcmp(val.dataType, DATATYPE_UINT16) == 0) ||
|
(strcmp(val.dataType, DATATYPE_UINT16) == 0) ||
|
||||||
(strcmp(val.dataType, DATATYPE_UINT32) == 0))
|
(strcmp(val.dataType, DATATYPE_UINT32) == 0))
|
||||||
printUInt(val);
|
printUInt(val);
|
||||||
else if (strcmp(val.dataType, DATATYPE_FPE2) == 0)
|
else if (strcmp(val.dataType, DATATYPE_FP1F) == 0 && val.dataSize == 2)
|
||||||
|
printFP1F(val);
|
||||||
|
else if (strcmp(val.dataType, DATATYPE_FP4C) == 0 && val.dataSize == 2)
|
||||||
|
printFP4C(val);
|
||||||
|
else if (strcmp(val.dataType, DATATYPE_FP5B) == 0 && val.dataSize == 2)
|
||||||
|
printFP5B(val);
|
||||||
|
else if (strcmp(val.dataType, DATATYPE_FP6A) == 0 && val.dataSize == 2)
|
||||||
|
printFP6A(val);
|
||||||
|
else if (strcmp(val.dataType, DATATYPE_FP79) == 0 && val.dataSize == 2)
|
||||||
|
printFP79(val);
|
||||||
|
else if (strcmp(val.dataType, DATATYPE_FP88) == 0 && val.dataSize == 2)
|
||||||
|
printFP88(val);
|
||||||
|
else if (strcmp(val.dataType, DATATYPE_FPA6) == 0 && val.dataSize == 2)
|
||||||
|
printFPA6(val);
|
||||||
|
else if (strcmp(val.dataType, DATATYPE_FPC4) == 0 && val.dataSize == 2)
|
||||||
|
printFPC4(val);
|
||||||
|
else if (strcmp(val.dataType, DATATYPE_FPE2) == 0 && val.dataSize == 2)
|
||||||
printFPE2(val);
|
printFPE2(val);
|
||||||
|
else if (strcmp(val.dataType, DATATYPE_SP1E) == 0 && val.dataSize == 2)
|
||||||
|
printSP1E(val);
|
||||||
|
else if (strcmp(val.dataType, DATATYPE_SP3C) == 0 && val.dataSize == 2)
|
||||||
|
printSP3C(val);
|
||||||
|
else if (strcmp(val.dataType, DATATYPE_SP4B) == 0 && val.dataSize == 2)
|
||||||
|
printSP4B(val);
|
||||||
|
else if (strcmp(val.dataType, DATATYPE_SP5A) == 0 && val.dataSize == 2)
|
||||||
|
printSP5A(val);
|
||||||
|
else if (strcmp(val.dataType, DATATYPE_SP69) == 0 && val.dataSize == 2)
|
||||||
|
printSP69(val);
|
||||||
|
else if (strcmp(val.dataType, DATATYPE_SP78) == 0 && val.dataSize == 2)
|
||||||
|
printSP78(val);
|
||||||
|
else if (strcmp(val.dataType, DATATYPE_SP87) == 0 && val.dataSize == 2)
|
||||||
|
printSP87(val);
|
||||||
|
else if (strcmp(val.dataType, DATATYPE_SP96) == 0 && val.dataSize == 2)
|
||||||
|
printSP96(val);
|
||||||
|
else if (strcmp(val.dataType, DATATYPE_SPB4) == 0 && val.dataSize == 2)
|
||||||
|
printSPB4(val);
|
||||||
|
else if (strcmp(val.dataType, DATATYPE_SPF0) == 0 && val.dataSize == 2)
|
||||||
|
printSPF0(val);
|
||||||
|
else if (strcmp(val.dataType, DATATYPE_SI8) == 0 && val.dataSize == 1)
|
||||||
|
printSI8(val);
|
||||||
|
else if (strcmp(val.dataType, DATATYPE_SI16) == 0 && val.dataSize == 2)
|
||||||
|
printSI16(val);
|
||||||
|
else if (strcmp(val.dataType, DATATYPE_PWM) == 0 && val.dataSize == 2)
|
||||||
|
printPWM(val);
|
||||||
|
|
||||||
printBytesHex(val);
|
printBytesHex(val);
|
||||||
}
|
}
|
||||||
@ -381,6 +529,9 @@ kern_return_t SMCPrintFans(void)
|
|||||||
for (i = 0; i < totalFans; i++)
|
for (i = 0; i < totalFans; i++)
|
||||||
{
|
{
|
||||||
printf("\nFan #%d:\n", i);
|
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);
|
sprintf(key, "F%dAc", i);
|
||||||
SMCReadKey(key, &val);
|
SMCReadKey(key, &val);
|
||||||
printf(" Actual speed : %.0f\n", _strtof(val.bytes, val.dataSize, 2));
|
printf(" Actual speed : %.0f\n", _strtof(val.bytes, val.dataSize, 2));
|
||||||
|
|||||||
@ -38,11 +38,36 @@
|
|||||||
#define SMC_CMD_READ_PLIMIT 11
|
#define SMC_CMD_READ_PLIMIT 11
|
||||||
#define SMC_CMD_READ_VERS 12
|
#define SMC_CMD_READ_VERS 12
|
||||||
|
|
||||||
|
#define DATATYPE_FP1F "fp1f"
|
||||||
|
#define DATATYPE_FP4C "fp4c"
|
||||||
|
#define DATATYPE_FP5B "fp5b"
|
||||||
|
#define DATATYPE_FP6A "fp6a"
|
||||||
|
#define DATATYPE_FP79 "fp79"
|
||||||
|
#define DATATYPE_FP88 "fp88"
|
||||||
|
#define DATATYPE_FPA6 "fpa6"
|
||||||
|
#define DATATYPE_FPC4 "fpc4"
|
||||||
#define DATATYPE_FPE2 "fpe2"
|
#define DATATYPE_FPE2 "fpe2"
|
||||||
|
|
||||||
|
#define DATATYPE_SP1E "sp1e"
|
||||||
|
#define DATATYPE_SP3C "sp3c"
|
||||||
|
#define DATATYPE_SP4B "sp4b"
|
||||||
|
#define DATATYPE_SP5A "sp5a"
|
||||||
|
#define DATATYPE_SP69 "sp69"
|
||||||
|
#define DATATYPE_SP78 "sp78"
|
||||||
|
#define DATATYPE_SP87 "sp87"
|
||||||
|
#define DATATYPE_SP96 "sp96"
|
||||||
|
#define DATATYPE_SPB4 "spb4"
|
||||||
|
#define DATATYPE_SPF0 "spf0"
|
||||||
|
|
||||||
#define DATATYPE_UINT8 "ui8 "
|
#define DATATYPE_UINT8 "ui8 "
|
||||||
#define DATATYPE_UINT16 "ui16"
|
#define DATATYPE_UINT16 "ui16"
|
||||||
#define DATATYPE_UINT32 "ui32"
|
#define DATATYPE_UINT32 "ui32"
|
||||||
|
|
||||||
|
#define DATATYPE_SI8 "si8 "
|
||||||
|
#define DATATYPE_SI16 "si16"
|
||||||
|
|
||||||
|
#define DATATYPE_PWM "{pwm"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char major;
|
char major;
|
||||||
char minor;
|
char minor;
|
||||||
@ -65,7 +90,7 @@ typedef struct {
|
|||||||
char dataAttributes;
|
char dataAttributes;
|
||||||
} SMCKeyData_keyInfo_t;
|
} SMCKeyData_keyInfo_t;
|
||||||
|
|
||||||
typedef char SMCBytes_t[32];
|
typedef unsigned char SMCBytes_t[32];
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
UInt32 key;
|
UInt32 key;
|
||||||
@ -97,5 +122,4 @@ kern_return_t SMCClose(io_connect_t conn);
|
|||||||
void smc_init();
|
void smc_init();
|
||||||
void smc_close();
|
void smc_close();
|
||||||
|
|
||||||
float _strtof(char *str, int size, int e);
|
float _strtof(unsigned char *str, int size, int e);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user