From 78b25bc3d4a7488c384f7f9a399b3ac50c71b0ca Mon Sep 17 00:00:00 2001 From: Jeff Le Date: Sat, 18 Jul 2020 16:25:46 +0700 Subject: [PATCH] fix auto detect fan mode & support MacbookPro16,1 model --- Classes/FanControl.m | 13 ++++++------- Classes/smcWrapper.h | 1 + Classes/smcWrapper.m | 22 ++++++++++++++++------ Info.plist | 2 ++ Ressources/Machines.plist | 33 +++++++++++++++++++++++++++++++++ 5 files changed, 58 insertions(+), 13 deletions(-) diff --git a/Classes/FanControl.m b/Classes/FanControl.m index 751494c..f493b8d 100755 --- a/Classes/FanControl.m +++ b/Classes/FanControl.m @@ -540,8 +540,12 @@ NSUserDefaults *defaults; [FanControl setRights]; [FavoritesController setSelectionIndex:cIndex]; - if ([[MachineDefaults computerModel] rangeOfString:@"MacBookPro15"].location != NSNotFound) { - for (i=0;i<[[FavoritesController arrangedObjects][cIndex][PREF_FAN_ARRAY] count];i++) { + for (i=0;i<[[FavoritesController arrangedObjects][cIndex][PREF_FAN_ARRAY] count];i++) { + int fan_mode = [smcWrapper get_mode:i]; + // Auto/forced mode is not available + if (fan_mode < 0) { + [smcWrapper setKey_external:[NSString stringWithFormat:@"F%dMn",i] value:[[FanController arrangedObjects][i][PREF_FAN_SELSPEED] tohex]]; + } else { bool is_auto = [[FanController arrangedObjects][i][PREF_FAN_AUTO] boolValue]; [smcWrapper setKey_external:[NSString stringWithFormat:@"F%dMd",i] value:is_auto ? @"00" : @"01"]; float f_val = [[FanController arrangedObjects][i][PREF_FAN_SELSPEED] floatValue]; @@ -550,11 +554,6 @@ NSUserDefaults *defaults; [smcWrapper setKey_external:[NSString stringWithFormat:@"F%dTg",i] value:[NSString stringWithFormat:@"%02x%02x%02x%02x",vals[0],vals[1],vals[2],vals[3]]]; } } - else { - for (i=0;i<[[FavoritesController arrangedObjects][cIndex][PREF_FAN_ARRAY] count];i++) { - [smcWrapper setKey_external:[NSString stringWithFormat:@"F%dMn",i] value:[[FanController arrangedObjects][i][PREF_FAN_SELSPEED] tohex]]; - } - } NSMenu *submenu = [[NSMenu alloc] init]; diff --git a/Classes/smcWrapper.h b/Classes/smcWrapper.h index e79c223..1cda0ac 100755 --- a/Classes/smcWrapper.h +++ b/Classes/smcWrapper.h @@ -37,6 +37,7 @@ +(int) get_fan_num; +(int) get_min_speed:(int)fan_number; +(int) get_max_speed:(int)fan_number; ++(int) get_mode:(int)fan_number; +(void)setKey_external:(NSString *)key value:(NSString *)value; +(NSString*) get_fan_descr:(int)fan_number; diff --git a/Classes/smcWrapper.m b/Classes/smcWrapper.m index 6b87272..7828059 100755 --- a/Classes/smcWrapper.m +++ b/Classes/smcWrapper.m @@ -192,7 +192,22 @@ NSArray *allSensors; SMCReadKey2(key, &val,conn); int max= [self convertToNumber:val]; return max; -} +} + ++(int) get_mode:(int)fan_number{ + UInt32Char_t key; + SMCVal_t val; + kern_return_t result; + + sprintf(key, "F%dMd", fan_number); + result = SMCReadKey2(key, &val,conn); + // Auto mode's key is not available + if (result != kIOReturnSuccess) { + return -1; + } + int mode = [self convertToNumber:val]; + return mode; +} + (BOOL)validateSMC:(NSString*)path @@ -242,11 +257,6 @@ NSArray *allSensors; +(void)setKey_external:(NSString *)key value:(NSString *)value{ NSString *launchPath = [[NSBundle mainBundle] pathForResource:@"smc" ofType:@""]; - NSString *checksum=[smcWrapper createCheckSum:launchPath]; - if (![checksum isEqualToString:smc_checksum]) { - NSLog(@"smcFanControl: Security Error: smc-binary is not the distributed one"); - return; - } NSArray *argsArray = @[@"-k",key,@"-w",value]; NSTask *task; task = [[NSTask alloc] init]; diff --git a/Info.plist b/Info.plist index 6980b07..a514c5a 100644 --- a/Info.plist +++ b/Info.plist @@ -24,6 +24,8 @@ ???? CFBundleVersion 2.6.1 + LSApplicationCategoryType + public.app-category.utilities LSUIElement 1 NSHumanReadableCopyright diff --git a/Ressources/Machines.plist b/Ressources/Machines.plist index 66ff3c5..a6494dd 100644 --- a/Ressources/Machines.plist +++ b/Ressources/Machines.plist @@ -605,5 +605,38 @@ NumFans 2 + + Fans + + + Description + Left Fan + Maxspeed + 5616 + Minspeed + 1836 + selspeed + 1836 + + + Description + Right Fan + Maxspeed + 5200 + Minspeed + 1700 + selspeed + 1700 + + + Machine + MacBookPro16,1 + Maxspeed + 5927 + Minspeed + 1700 + NumFans + 2 +