Skip to content

Commit

Permalink
Merge pull request #599 from joske/main
Browse files Browse the repository at this point in the history
[macos] fix temp sensor on system with many cores
  • Loading branch information
aristocratos authored Aug 26, 2023
2 parents 1b126f5 + d17e1a2 commit 1556388
Showing 1 changed file with 10 additions and 6 deletions.
16 changes: 10 additions & 6 deletions src/osx/smc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ tab-size = 4

#include "smc.hpp"

static constexpr size_t MaxIndexCount = sizeof("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ") - 1;
static constexpr const char *KeyIndexes = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

static UInt32 _strtoul(char *str, int size, int base) {
UInt32 total = 0;
int i;
Expand All @@ -34,7 +37,7 @@ static UInt32 _strtoul(char *str, int size, int base) {

static void _ultostr(char *str, UInt32 val) {
str[0] = '\0';
sprintf(str, "%c%c%c%c",
snprintf(str, 5, "%c%c%c%c",
(unsigned int)val >> 24,
(unsigned int)val >> 16,
(unsigned int)val >> 8,
Expand All @@ -44,10 +47,8 @@ static void _ultostr(char *str, UInt32 val) {
namespace Cpu {

SMCConnection::SMCConnection() {
IOMasterPort(kIOMasterPortDefault, &masterPort);

CFMutableDictionaryRef matchingDictionary = IOServiceMatching("AppleSMC");
result = IOServiceGetMatchingServices(masterPort, matchingDictionary, &iterator);
result = IOServiceGetMatchingServices(0, matchingDictionary, &iterator);
if (result != kIOReturnSuccess) {
throw std::runtime_error("failed to get AppleSMC");
}
Expand Down Expand Up @@ -92,12 +93,15 @@ namespace Cpu {
long long SMCConnection::getTemp(int core) {
char key[] = SMC_KEY_CPU_TEMP;
if (core >= 0) {
snprintf(key, 5, "TC%1dc", core);
if ((size_t)core > MaxIndexCount) {
return -1;
}
snprintf(key, 5, "TC%1cc", KeyIndexes[core]);
}
long long result = getSMCTemp(key);
if (result == -1) {
// try again with C
snprintf(key, 5, "TC%1dC", core);
snprintf(key, 5, "TC%1dC", KeyIndexes[core]);
result = getSMCTemp(key);
}
return result;
Expand Down

0 comments on commit 1556388

Please sign in to comment.