mirror of
https://github.com/hholtmann/smcFanControl.git
synced 2025-11-04 19:49:16 +01:00
Compare commits
69 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e1bd672bcd | |||
| 21db698f1f | |||
| 4df0a0577e | |||
| c065120eee | |||
| 8ff458b441 | |||
| 8a68395f96 | |||
| 23b6083523 | |||
| 346eceb501 | |||
| a38133947f | |||
| 569b18b9d3 | |||
| 71c252571f | |||
| 53b337f15f | |||
| 618c22ea89 | |||
| ae318d4bd7 | |||
| ad374ffb1d | |||
| 442cc1e588 | |||
| 939f86584f | |||
| 244413718d | |||
| 5b78c6f462 | |||
| 0edcda181a | |||
| 407b7ecaa6 | |||
| d10498f2b3 | |||
| 875c68b0d3 | |||
| 78b25bc3d4 | |||
| 065dc3bdcd | |||
| 1a09635c80 | |||
| 8f64f2c8a8 | |||
| c6de965292 | |||
| 4962df7488 | |||
| 3373ab1ab0 | |||
| a2e290859e | |||
| de3988463a | |||
| 6d6a6e8df5 | |||
| 8dd7096e96 | |||
| 65071b3bda | |||
| df1fdde5a1 | |||
| d1dff0106f | |||
| 2c8c9ce9b0 | |||
| e4257f547f | |||
| 37d3f97221 | |||
| 8bac767ee2 | |||
| ebe1cb6db6 | |||
| e35ada4887 | |||
| c37ad48839 | |||
| cbe7057bb2 | |||
| 757dd0083f | |||
| 679e6c659c | |||
| 11c0565924 | |||
| 2308d9b194 | |||
| 6f41bb6552 | |||
| 2d69dcc399 | |||
| b5103c8f64 | |||
| df287a7bf4 | |||
| 96aecc00f2 | |||
| 59ba7232fe | |||
| 9536827e73 | |||
| a37e18d227 | |||
| 3109288146 | |||
| 97683b91b7 | |||
| 6d2a6ed863 | |||
| 3c84277cef | |||
| 411ba5a485 | |||
| 2804ac0c85 | |||
| 252fc40328 | |||
| 3e00b8e79a | |||
| b956d0efe0 | |||
| 825feeebfc | |||
| b01a8cd165 | |||
| 2075ad0793 |
29
Classes/Constants.h
Normal file
29
Classes/Constants.h
Normal file
@ -0,0 +1,29 @@
|
||||
//
|
||||
// Constants.h
|
||||
// smcFanControl
|
||||
//
|
||||
// Created by Hendrik Holtmann on 16/10/16.
|
||||
//
|
||||
//
|
||||
|
||||
#define PREF_TEMP_UNIT @"Unit"
|
||||
#define PREF_SELECTION_DEFAULT @"SelDefault"
|
||||
#define PREF_AUTOSTART_ENABLED @"AutoStart"
|
||||
#define PREF_AUTOMATIC_CHANGE @"AutomaticChange"
|
||||
#define PREF_BATTERY_SELECTION @"selbatt"
|
||||
#define PREF_AC_SELECTION @"selac"
|
||||
#define PREF_CHARGING_SELECTION @"selload"
|
||||
#define PREF_MENU_DISPLAYMODE @"MenuBar"
|
||||
#define PREF_TEMPERATURE_SENSOR @"TSensor"
|
||||
#define PREF_NUMBEROF_LAUNCHES @"NumLaunches"
|
||||
#define PREF_DONATIONMESSAGE_DISPLAY @"DonationMessageDisplay"
|
||||
#define PREF_MENU_TEXTCOLOR @"MenuColor"
|
||||
#define PREF_FAVORITES_ARRAY @"Favorites"
|
||||
|
||||
#define PREF_FAN_ARRAY @"FanData"
|
||||
#define PREF_FAN_TITLE @"Title"
|
||||
#define PREF_FAN_MINSPEED @"Minspeed"
|
||||
#define PREF_FAN_SELSPEED @"selspeed"
|
||||
#define PREF_FAN_SYNC @"sync"
|
||||
#define PREF_FAN_SHOWMENU @"menu"
|
||||
#define PREF_FAN_AUTO @"auto"
|
||||
@ -23,17 +23,19 @@
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import "NSFileManager+DirectoryLocations.h"
|
||||
#import <smc.h>
|
||||
#import <smcWrapper.h>
|
||||
#import <MachineDefaults.h>
|
||||
#import "smc.h"
|
||||
#import "smcWrapper.h"
|
||||
#import "IOHIDSensor.h"
|
||||
#import "MachineDefaults.h"
|
||||
|
||||
#import <Power.h>
|
||||
#import "Power.h"
|
||||
#include <mach/mach_port.h>
|
||||
#include <mach/mach_interface.h>
|
||||
#include <mach/mach_init.h>
|
||||
|
||||
#include <IOKit/pwr_mgt/IOPMLib.h>
|
||||
#include <IOKit/IOMessage.h>
|
||||
#import "Constants.h"
|
||||
|
||||
|
||||
#define kMenuBarHeight 22
|
||||
|
||||
@ -42,6 +42,7 @@
|
||||
// Number of fans reported by the hardware.
|
||||
int g_numFans = 0;
|
||||
|
||||
|
||||
NSUserDefaults *defaults;
|
||||
|
||||
#pragma mark **Init-Methods**
|
||||
@ -80,14 +81,14 @@ NSUserDefaults *defaults;
|
||||
for (i=0;i<[rfavorites count];i++)
|
||||
{
|
||||
BOOL selected = NO;
|
||||
NSArray *fans = rfavorites[i][@"FanData"];
|
||||
NSArray *fans = rfavorites[i][PREF_FAN_ARRAY];
|
||||
for (j=0;j<[fans count];j++) {
|
||||
if ([fans[j][@"menu"] boolValue] == YES ) {
|
||||
if ([fans[j][PREF_FAN_SHOWMENU] boolValue] == YES ) {
|
||||
selected = YES;
|
||||
}
|
||||
}
|
||||
if (selected==NO) {
|
||||
rfavorites[i][@"FanData"][0][@"menu"] = @YES;
|
||||
rfavorites[i][PREF_FAN_ARRAY][0][PREF_FAN_SHOWMENU] = @YES;
|
||||
}
|
||||
}
|
||||
|
||||
@ -111,8 +112,8 @@ NSUserDefaults *defaults;
|
||||
|
||||
NSMutableArray *favorites = [[NSMutableArray alloc] init];
|
||||
|
||||
NSMutableDictionary *defaultFav = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"Default", @"Title",
|
||||
[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:[[mdefaults get_machine_defaults] objectForKey:@"Fans"]]], @"FanData",nil];
|
||||
NSMutableDictionary *defaultFav = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"Default", PREF_FAN_TITLE,
|
||||
[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:[[mdefaults get_machine_defaults] objectForKey:@"Fans"]]], PREF_FAN_ARRAY,nil];
|
||||
|
||||
[favorites addObject:defaultFav];
|
||||
|
||||
@ -120,12 +121,12 @@ NSUserDefaults *defaults;
|
||||
NSRange range=[[MachineDefaults computerModel] rangeOfString:@"MacBook"];
|
||||
if (range.length>0) {
|
||||
//for macbooks add a second default
|
||||
NSMutableDictionary *higherFav=[[NSMutableDictionary alloc] initWithObjectsAndKeys:@"Higher RPM", @"Title",
|
||||
[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:[[mdefaults get_machine_defaults] objectForKey:@"Fans"]]], @"FanData",nil];
|
||||
NSMutableDictionary *higherFav=[[NSMutableDictionary alloc] initWithObjectsAndKeys:@"Higher RPM", PREF_FAN_TITLE,
|
||||
[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:[[mdefaults get_machine_defaults] objectForKey:@"Fans"]]], PREF_FAN_ARRAY,nil];
|
||||
for (NSUInteger i=0;i<[_machineDefaultsDict[@"Fans"] count];i++) {
|
||||
|
||||
int min_value=([[[[_machineDefaultsDict objectForKey:@"Fans"] objectAtIndex:i] objectForKey:@"Minspeed"] intValue])*2;
|
||||
[[[higherFav objectForKey:@"FanData"] objectAtIndex:i] setObject:[NSNumber numberWithInt:min_value] forKey:@"selspeed"];
|
||||
int min_value=([[[[_machineDefaultsDict objectForKey:@"Fans"] objectAtIndex:i] objectForKey:PREF_FAN_MINSPEED] intValue])*2;
|
||||
[[[higherFav objectForKey:PREF_FAN_ARRAY] objectAtIndex:i] setObject:[NSNumber numberWithInt:min_value] forKey:PREF_FAN_SELSPEED];
|
||||
}
|
||||
[favorites addObject:higherFav];
|
||||
|
||||
@ -141,19 +142,23 @@ NSUserDefaults *defaults;
|
||||
defaults = [NSUserDefaults standardUserDefaults];
|
||||
[defaults registerDefaults:
|
||||
[NSMutableDictionary dictionaryWithObjectsAndKeys:
|
||||
@0, @"Unit",
|
||||
@0, @"SelDefault",
|
||||
@NO, @"AutoStart",
|
||||
@NO,@"AutomaticChange",
|
||||
@0,@"selbatt",
|
||||
@0,@"selac",
|
||||
@0,@"selload",
|
||||
@0,@"MenuBar",
|
||||
@"TC0D",@"TSensor",
|
||||
@0,@"NumLaunches",
|
||||
@NO,@"DonationMessageShown",
|
||||
[NSArchiver archivedDataWithRootObject:[NSColor blackColor]],@"MenuColor",
|
||||
favorites,@"Favorites",
|
||||
@0, PREF_TEMP_UNIT,
|
||||
@0, PREF_SELECTION_DEFAULT,
|
||||
@NO,PREF_AUTOSTART_ENABLED,
|
||||
@NO,PREF_AUTOMATIC_CHANGE,
|
||||
@0, PREF_BATTERY_SELECTION,
|
||||
@0, PREF_AC_SELECTION,
|
||||
@0, PREF_CHARGING_SELECTION,
|
||||
@0, PREF_MENU_DISPLAYMODE,
|
||||
#if TARGET_CPU_ARM64
|
||||
@"Tp0D",PREF_TEMPERATURE_SENSOR,
|
||||
#else
|
||||
@"TC0D",PREF_TEMPERATURE_SENSOR,
|
||||
#endif
|
||||
@0, PREF_NUMBEROF_LAUNCHES,
|
||||
@NO,PREF_DONATIONMESSAGE_DISPLAY,
|
||||
[NSArchiver archivedDataWithRootObject:[NSColor blackColor]],PREF_MENU_TEXTCOLOR,
|
||||
favorites,PREF_FAVORITES_ARRAY,
|
||||
nil]];
|
||||
|
||||
|
||||
@ -169,15 +174,15 @@ NSUserDefaults *defaults;
|
||||
|
||||
[FavoritesController bind:@"content"
|
||||
toObject:[NSUserDefaultsController sharedUserDefaultsController]
|
||||
withKeyPath:@"values.Favorites"
|
||||
withKeyPath:[@"values." stringByAppendingString:PREF_FAVORITES_ARRAY]
|
||||
options:nil];
|
||||
[FavoritesController setEditable:YES];
|
||||
|
||||
// set slider sync - only for MBP
|
||||
for (i=0;i<[[FavoritesController arrangedObjects] count];i++) {
|
||||
if([[FavoritesController arrangedObjects][i][@"sync"] boolValue]==YES) {
|
||||
if([[FavoritesController arrangedObjects][i][PREF_FAN_SYNC] boolValue]==YES) {
|
||||
[FavoritesController setSelectionIndex:i];
|
||||
[self syncBinder:[[FavoritesController arrangedObjects][i][@"sync"] boolValue]];
|
||||
[self syncBinder:[[FavoritesController arrangedObjects][i][PREF_FAN_SYNC] boolValue]];
|
||||
}
|
||||
}
|
||||
|
||||
@ -198,8 +203,8 @@ NSUserDefaults *defaults;
|
||||
[autochange setEnabled:false];
|
||||
}
|
||||
[faqText replaceCharactersInRange:NSMakeRange(0,0) withRTF: [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"F.A.Q" ofType:@"rtf"]]];
|
||||
[self apply_settings:nil controllerindex:[[defaults objectForKey:@"SelDefault"] intValue]];
|
||||
[[[[theMenu itemWithTag:1] submenu] itemAtIndex:[[defaults objectForKey:@"SelDefault"] intValue]] setState:NSOnState];
|
||||
[self apply_settings:nil controllerindex:[[defaults objectForKey:PREF_SELECTION_DEFAULT] intValue]];
|
||||
[[[[theMenu itemWithTag:1] submenu] itemAtIndex:[[defaults objectForKey:PREF_SELECTION_DEFAULT] intValue]] setState:NSOnState];
|
||||
[[sliderCell dataCell] setControlSize:NSSmallControlSize];
|
||||
[self changeMenu:nil];
|
||||
|
||||
@ -222,12 +227,15 @@ NSUserDefaults *defaults;
|
||||
[self upgradeFavorites];
|
||||
|
||||
//autostart
|
||||
[[NSUserDefaults standardUserDefaults] setValue:@([self isInAutoStart]) forKey:@"AutoStart"];
|
||||
NSUInteger numLaunches = [[[NSUserDefaults standardUserDefaults] objectForKey:@"NumLaunches"] integerValue];
|
||||
[[NSUserDefaults standardUserDefaults] setObject:@(numLaunches+1) forKey:@"NumLaunches"];
|
||||
if (numLaunches != 0 && (numLaunches % 5 == 0) && ![[[NSUserDefaults standardUserDefaults] objectForKey:@"DonationMessageShown"] boolValue]) {
|
||||
[[NSUserDefaults standardUserDefaults] setValue:@([self isInAutoStart]) forKey:PREF_AUTOSTART_ENABLED];
|
||||
NSUInteger numLaunches = [[[NSUserDefaults standardUserDefaults] objectForKey:PREF_NUMBEROF_LAUNCHES] integerValue];
|
||||
[[NSUserDefaults standardUserDefaults] setObject:@(numLaunches+1) forKey:PREF_NUMBEROF_LAUNCHES];
|
||||
if (numLaunches != 0 && (numLaunches % 3 == 0) && ![[[NSUserDefaults standardUserDefaults] objectForKey:PREF_DONATIONMESSAGE_DISPLAY] boolValue]) {
|
||||
[self displayDonationMessage];
|
||||
}
|
||||
|
||||
[[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(readFanData:) name:@"AppleInterfaceThemeChangedNotification" object:nil];
|
||||
|
||||
}
|
||||
|
||||
-(void)displayDonationMessage
|
||||
@ -238,9 +246,9 @@ NSUserDefaults *defaults;
|
||||
NSModalResponse code=[alert runModal];
|
||||
if (code == NSAlertDefaultReturn) {
|
||||
[self paypal:nil];
|
||||
[[NSUserDefaults standardUserDefaults] setObject:@(YES) forKey:@"DonationMessageShown"];
|
||||
[[NSUserDefaults standardUserDefaults] setObject:@(YES) forKey:PREF_DONATIONMESSAGE_DISPLAY];
|
||||
} else if (code == NSAlertAlternateReturn) {
|
||||
[[NSUserDefaults standardUserDefaults] setObject:@(YES) forKey:@"DonationMessageShown"];
|
||||
[[NSUserDefaults standardUserDefaults] setObject:@(YES) forKey:PREF_DONATIONMESSAGE_DISPLAY];
|
||||
}
|
||||
}
|
||||
|
||||
@ -293,7 +301,7 @@ NSUserDefaults *defaults;
|
||||
- (IBAction)save_favorite:(id)sender{
|
||||
MachineDefaults *msdefaults=[[MachineDefaults alloc] init:nil];
|
||||
if ([[newfavorite_title stringValue] length]>0) {
|
||||
NSMutableDictionary *toinsert=[[NSMutableDictionary alloc] initWithObjectsAndKeys:[newfavorite_title stringValue],@"Title",[msdefaults get_machine_defaults][@"Fans"],@"FanData",nil]; //default as template
|
||||
NSMutableDictionary *toinsert=[[NSMutableDictionary alloc] initWithObjectsAndKeys:[newfavorite_title stringValue],@"Title",[msdefaults get_machine_defaults][@"Fans"],PREF_FAN_ARRAY,nil]; //default as template
|
||||
[toinsert setValue:@0 forKey:@"Standard"];
|
||||
[FavoritesController addObject:toinsert];
|
||||
[newfavoritewindow close];
|
||||
@ -315,9 +323,9 @@ NSUserDefaults *defaults;
|
||||
{
|
||||
if (returnCode==0) {
|
||||
//delete favorite, but resets presets before
|
||||
[self check_deletion:@"selbatt"];
|
||||
[self check_deletion:@"selac"];
|
||||
[self check_deletion:@"selload"];
|
||||
[self check_deletion:PREF_BATTERY_SELECTION];
|
||||
[self check_deletion:PREF_AC_SELECTION];
|
||||
[self check_deletion:PREF_CHARGING_SELECTION];
|
||||
[FavoritesController removeObjects:[FavoritesController selectedObjects]];
|
||||
}
|
||||
}
|
||||
@ -330,6 +338,13 @@ NSUserDefaults *defaults;
|
||||
}
|
||||
|
||||
|
||||
- (BOOL)usesIOHIDForTemperature {
|
||||
#if TARGET_CPU_ARM64
|
||||
return [[MachineDefaults computerModel] rangeOfString:@"MacBookPro17"].length > 0;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
// Called via a timer mechanism. This is where all the temp / RPM reading is done.
|
||||
//reads fan data and updates the gui
|
||||
@ -346,7 +361,7 @@ NSUserDefaults *defaults;
|
||||
// as low as possible.
|
||||
bool bNeedTemp = false;
|
||||
bool bNeedRpm = false;
|
||||
const int menuBarSetting = [[defaults objectForKey:@"MenuBar"] intValue];
|
||||
const int menuBarSetting = [[defaults objectForKey:PREF_MENU_DISPLAYMODE] intValue];
|
||||
switch (menuBarSetting) {
|
||||
default:
|
||||
case 1:
|
||||
@ -377,10 +392,10 @@ NSUserDefaults *defaults;
|
||||
|
||||
if (bNeedRpm == true) {
|
||||
// Read the current fan speed for the desired fan and format text for display in the menubar.
|
||||
NSArray *fans = [FavoritesController arrangedObjects][[FavoritesController selectionIndex]][@"FanData"];
|
||||
NSArray *fans = [FavoritesController arrangedObjects][[FavoritesController selectionIndex]][PREF_FAN_ARRAY];
|
||||
for (i=0; i<g_numFans && i<[fans count]; i++)
|
||||
{
|
||||
if ([fans[i][@"menu"] boolValue]==YES) {
|
||||
if ([fans[i][PREF_FAN_SHOWMENU] boolValue]==YES) {
|
||||
selectedRpm = [smcWrapper get_fan_rpm:i];
|
||||
break;
|
||||
}
|
||||
@ -395,9 +410,13 @@ NSUserDefaults *defaults;
|
||||
|
||||
if (bNeedTemp == true) {
|
||||
// Read current temperature and format text for the menubar.
|
||||
c_temp = [smcWrapper get_maintemp];
|
||||
if ([self usesIOHIDForTemperature]) {
|
||||
c_temp = [IOHIDSensor getSOCTemperature];
|
||||
} else {
|
||||
c_temp = [smcWrapper get_maintemp];
|
||||
}
|
||||
|
||||
if ([[defaults objectForKey:@"Unit"] intValue]==0) {
|
||||
if ([[defaults objectForKey:PREF_TEMP_UNIT] intValue]==0) {
|
||||
temp = [NSString stringWithFormat:@"%@%CC",@(c_temp),(unsigned short)0xb0];
|
||||
} else {
|
||||
NSNumberFormatter *ncf=[[NSNumberFormatter alloc] init];
|
||||
@ -410,11 +429,19 @@ NSUserDefaults *defaults;
|
||||
NSMutableAttributedString *s_status = nil;
|
||||
NSMutableParagraphStyle *paragraphStyle = nil;
|
||||
|
||||
NSColor *menuColor = (NSColor*)[NSUnarchiver unarchiveObjectWithData:[defaults objectForKey:@"MenuColor"]];
|
||||
NSColor *menuColor = (NSColor*)[NSUnarchiver unarchiveObjectWithData:[defaults objectForKey:PREF_MENU_TEXTCOLOR]];
|
||||
BOOL setColor = NO;
|
||||
if (!([[menuColor colorUsingColorSpaceName:
|
||||
NSCalibratedWhiteColorSpace] whiteComponent] == 0.0) || ![statusItem respondsToSelector:@selector(button)]) setColor = YES;
|
||||
|
||||
|
||||
NSString *osxMode = [[NSUserDefaults standardUserDefaults] stringForKey:@"AppleInterfaceStyle"];
|
||||
|
||||
if (osxMode && !setColor) {
|
||||
menuColor = [NSColor whiteColor];
|
||||
setColor = YES;
|
||||
}
|
||||
|
||||
switch (menuBarSetting) {
|
||||
default:
|
||||
case 1: {
|
||||
@ -435,9 +462,12 @@ NSUserDefaults *defaults;
|
||||
[paragraphStyle setAlignment:NSLeftTextAlignment];
|
||||
[s_status addAttribute:NSFontAttributeName value:[NSFont fontWithName:@"Lucida Grande" size:fsize] range:NSMakeRange(0,[s_status length])];
|
||||
[s_status addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0,[s_status length])];
|
||||
if (menuBarSetting == 0)
|
||||
[s_status addAttribute:NSBaselineOffsetAttributeName value:[NSNumber numberWithFloat: -6] range:NSMakeRange(0, [s_status length])];
|
||||
|
||||
if (setColor) [s_status addAttribute:NSForegroundColorAttributeName value:menuColor range:NSMakeRange(0,[s_status length])];
|
||||
|
||||
|
||||
if ([statusItem respondsToSelector:@selector(button)]) {
|
||||
[statusItem.button setAttributedTitle:s_status];
|
||||
[statusItem.button setImage:nil];
|
||||
@ -505,7 +535,7 @@ NSUserDefaults *defaults;
|
||||
|
||||
- (IBAction)savePreferences:(id)sender{
|
||||
[(NSUserDefaultsController *)DefaultsController save:sender];
|
||||
[defaults setValue:[FavoritesController content] forKey:@"Favorites"];
|
||||
[defaults setValue:[FavoritesController content] forKey:PREF_FAVORITES_ARRAY];
|
||||
[defaults synchronize];
|
||||
[mainwindow close];
|
||||
[self apply_settings:sender controllerindex:[FavoritesController selectionIndex]];
|
||||
@ -519,6 +549,15 @@ NSUserDefaults *defaults;
|
||||
[DefaultsController revert:sender];
|
||||
}
|
||||
|
||||
-(void)setFansToAuto:(bool)is_auto {
|
||||
for (int fan_index=0;fan_index<[[FavoritesController arrangedObjects][0][PREF_FAN_ARRAY] count];fan_index++) {
|
||||
[self setFanToAuto:fan_index is_auto:is_auto];
|
||||
}
|
||||
}
|
||||
|
||||
-(void)setFanToAuto:(int)fan_index is_auto:(bool)is_auto {
|
||||
[smcWrapper setKey_external:[NSString stringWithFormat:@"F%dMd",fan_index] value:is_auto ? @"00" : @"01"];
|
||||
}
|
||||
|
||||
//set the new fan settings
|
||||
|
||||
@ -526,9 +565,22 @@ NSUserDefaults *defaults;
|
||||
int i;
|
||||
[FanControl setRights];
|
||||
[FavoritesController setSelectionIndex:cIndex];
|
||||
for (i=0;i<[[FavoritesController arrangedObjects][cIndex][@"FanData"] count];i++) {
|
||||
[smcWrapper setKey_external:[NSString stringWithFormat:@"F%dMn",i] value:[[FanController arrangedObjects][i][@"selspeed"] tohex]];
|
||||
}
|
||||
|
||||
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];
|
||||
[self setFanToAuto:i is_auto:is_auto];
|
||||
float f_val = [[FanController arrangedObjects][i][PREF_FAN_SELSPEED] floatValue];
|
||||
uint8 *vals = (uint8*)&f_val;
|
||||
//NSString str_val = ;
|
||||
[smcWrapper setKey_external:[NSString stringWithFormat:@"F%dTg",i] value:[NSString stringWithFormat:@"%02x%02x%02x%02x",vals[0],vals[1],vals[2],vals[3]]];
|
||||
}
|
||||
}
|
||||
|
||||
NSMenu *submenu = [[NSMenu alloc] init];
|
||||
|
||||
for(i=0;i<[[FavoritesController arrangedObjects] count];i++){
|
||||
@ -545,9 +597,9 @@ NSUserDefaults *defaults;
|
||||
[[[[theMenu itemWithTag:1] submenu] itemAtIndex:i] setState:NSOffState];
|
||||
}
|
||||
[[[[theMenu itemWithTag:1] submenu] itemAtIndex:cIndex] setState:NSOnState];
|
||||
[defaults setObject:@(cIndex) forKey:@"SelDefault"];
|
||||
[defaults setObject:@(cIndex) forKey:PREF_SELECTION_DEFAULT];
|
||||
//change active setting display
|
||||
[[theMenu itemWithTag:1] setTitle:[NSString stringWithFormat:@"%@: %@",NSLocalizedString(@"Active Setting",nil),[FavoritesController arrangedObjects][[FavoritesController selectionIndex]][@"Title"] ]];
|
||||
[[theMenu itemWithTag:1] setTitle:[NSString stringWithFormat:@"%@: %@",NSLocalizedString(@"Active Setting",nil),[FavoritesController arrangedObjects][[FavoritesController selectionIndex]][PREF_FAN_TITLE] ]];
|
||||
}
|
||||
|
||||
|
||||
@ -587,7 +639,7 @@ NSUserDefaults *defaults;
|
||||
|
||||
|
||||
- (IBAction) changeMenu:(id)sender{
|
||||
if ([[[[NSUserDefaultsController sharedUserDefaultsController] values] valueForKey:@"MenuBar"] intValue]==2) {
|
||||
if ([[[[NSUserDefaultsController sharedUserDefaultsController] values] valueForKey:PREF_MENU_DISPLAYMODE] intValue]==2) {
|
||||
[colorSelector setEnabled:NO];
|
||||
} else {
|
||||
[colorSelector setEnabled:YES];
|
||||
@ -600,7 +652,7 @@ NSUserDefaults *defaults;
|
||||
int i;
|
||||
for (i=0;i<[[FanController arrangedObjects] count];i++) {
|
||||
if (i!=[sender selectedRow]) {
|
||||
[[FanController arrangedObjects][i] setValue:@NO forKey:@"menu"];
|
||||
[[FanController arrangedObjects][i] setValue:@NO forKey:PREF_FAN_SHOWMENU];
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -647,7 +699,10 @@ NSUserDefaults *defaults;
|
||||
NSLog(@"Error deleting %@",machinesPath);
|
||||
}
|
||||
error = nil;
|
||||
|
||||
if ([[MachineDefaults computerModel] rangeOfString:@"MacBookPro15"].location != NSNotFound) {
|
||||
[self setFansToAuto:true];
|
||||
}
|
||||
|
||||
NSString *domainName = [[NSBundle mainBundle] bundleIdentifier];
|
||||
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:domainName];
|
||||
|
||||
@ -676,7 +731,7 @@ NSUserDefaults *defaults;
|
||||
}
|
||||
|
||||
- (IBAction)visitHomepage:(id)sender{
|
||||
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"http://www.eidac.de/products"]];
|
||||
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"https://www.eidac.de/products"]];
|
||||
}
|
||||
|
||||
|
||||
@ -688,11 +743,11 @@ NSUserDefaults *defaults;
|
||||
//in case plist is corrupt, don't bind
|
||||
if ([[FanController arrangedObjects] count]>1 ) {
|
||||
if (bind==YES) {
|
||||
[[FanController arrangedObjects][1] bind:@"selspeed" toObject:[FanController arrangedObjects][0] withKeyPath:@"selspeed" options:nil];
|
||||
[[FanController arrangedObjects][0] bind:@"selspeed" toObject:[FanController arrangedObjects][1] withKeyPath:@"selspeed" options:nil];
|
||||
[[FanController arrangedObjects][1] bind:PREF_FAN_SELSPEED toObject:[FanController arrangedObjects][0] withKeyPath:PREF_FAN_SELSPEED options:nil];
|
||||
[[FanController arrangedObjects][0] bind:PREF_FAN_SELSPEED toObject:[FanController arrangedObjects][1] withKeyPath:PREF_FAN_SELSPEED options:nil];
|
||||
} else {
|
||||
[[FanController arrangedObjects][1] unbind:@"selspeed"];
|
||||
[[FanController arrangedObjects][0] unbind:@"selspeed"];
|
||||
[[FanController arrangedObjects][1] unbind:PREF_FAN_SELSPEED];
|
||||
[[FanController arrangedObjects][0] unbind:PREF_FAN_SELSPEED];
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -700,28 +755,35 @@ NSUserDefaults *defaults;
|
||||
|
||||
#pragma mark **Power Watchdog-Methods**
|
||||
|
||||
- (void)systemWillSleep:(id)sender{
|
||||
#if TARGET_CPU_ARM64
|
||||
[FanControl setRights];
|
||||
[self setFansToAuto:true];
|
||||
#endif
|
||||
}
|
||||
|
||||
- (void)systemDidWakeFromSleep:(id)sender{
|
||||
[self apply_settings:nil controllerindex:[[defaults objectForKey:@"SelDefault"] intValue]];
|
||||
[self apply_settings:nil controllerindex:[[defaults objectForKey:PREF_SELECTION_DEFAULT] intValue]];
|
||||
}
|
||||
|
||||
|
||||
- (void)powerChangeToBattery:(id)sender{
|
||||
|
||||
if ([[defaults objectForKey:@"AutomaticChange"] boolValue]==YES) {
|
||||
[self apply_settings:nil controllerindex:[[defaults objectForKey:@"selbatt"] intValue]];
|
||||
[self apply_settings:nil controllerindex:[[defaults objectForKey:PREF_BATTERY_SELECTION] intValue]];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)powerChangeToAC:(id)sender{
|
||||
if ([[defaults objectForKey:@"AutomaticChange"] boolValue]==YES) {
|
||||
[self apply_settings:nil controllerindex:[[defaults objectForKey:@"selac"] intValue]];
|
||||
[self apply_settings:nil controllerindex:[[defaults objectForKey:PREF_AC_SELECTION] intValue]];
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
- (void)powerChangeToACLoading:(id)sender{
|
||||
if ([[defaults objectForKey:@"AutomaticChange"] boolValue]==YES) {
|
||||
[self apply_settings:nil controllerindex:[[defaults objectForKey:@"selload"] intValue]];
|
||||
[self apply_settings:nil controllerindex:[[defaults objectForKey:PREF_CHARGING_SELECTION] intValue]];
|
||||
|
||||
}
|
||||
}
|
||||
@ -873,6 +935,11 @@ NSUserDefaults *defaults;
|
||||
}
|
||||
|
||||
|
||||
-(void)dealloc
|
||||
{
|
||||
[[NSDistributedNotificationCenter defaultCenter] removeObserver:self];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
|
||||
57
Classes/IOHIDSensor.h
Normal file
57
Classes/IOHIDSensor.h
Normal file
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* FanControl
|
||||
*
|
||||
* Copyright (c) 2006-2012 Hendrik Holtmann
|
||||
*
|
||||
* IOHIDSensor.h - MacBook(Pro) FanControl application
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import <IOKit/hidsystem/IOHIDEventSystemClient.h>
|
||||
#import <IOKit/hidsystem/IOHIDServiceClient.h>
|
||||
|
||||
// https://opensource.apple.com/source/IOHIDFamily/IOHIDFamily-1035.70.7/IOHIDFamily/AppleHIDUsageTables.h.auto.html
|
||||
#define kHIDPage_AppleVendor 0xff00
|
||||
#define kHIDUsage_AppleVendor_TemperatureSensor 0x0005
|
||||
|
||||
// https://opensource.apple.com/source/IOHIDFamily/IOHIDFamily-1035.70.7/IOHIDFamily/IOHIDEventTypes.h.auto.html
|
||||
#ifdef __LP64__
|
||||
typedef double IOHIDFloat;
|
||||
#else
|
||||
typedef float IOHIDFloat;
|
||||
#endif
|
||||
|
||||
// https://opensource.apple.com/source/IOHIDFamily/IOHIDFamily-1035.70.7/IOHIDFamily/IOHIDEventTypes.h.auto.html
|
||||
#define IOHIDEventFieldBase(type) (type << 16)
|
||||
#define kIOHIDEventTypeTemperature 15
|
||||
|
||||
|
||||
typedef struct __IOHIDEvent *IOHIDEventRef;
|
||||
typedef struct __IOHIDServiceClient *IOHIDServiceClientRef;
|
||||
|
||||
IOHIDEventSystemClientRef IOHIDEventSystemClientCreate(CFAllocatorRef);
|
||||
void IOHIDEventSystemClientSetMatching(IOHIDEventSystemClientRef, CFDictionaryRef);
|
||||
IOHIDEventRef IOHIDServiceClientCopyEvent(IOHIDServiceClientRef, int64_t, int32_t, int64_t);
|
||||
IOHIDFloat IOHIDEventGetFloatValue(IOHIDEventRef event, uint32_t field);
|
||||
|
||||
@interface IOHIDSensor : NSObject {
|
||||
}
|
||||
|
||||
+ (float) getSOCTemperature;
|
||||
|
||||
@end
|
||||
70
Classes/IOHIDSensor.m
Normal file
70
Classes/IOHIDSensor.m
Normal file
@ -0,0 +1,70 @@
|
||||
/*
|
||||
* FanControl
|
||||
*
|
||||
* Copyright (c) 2006-2012 Hendrik Holtmann
|
||||
*
|
||||
* IOHIDSensor.m - MacBook(Pro) FanControl application
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#import "IOHIDSensor.h"
|
||||
|
||||
@implementation IOHIDSensor
|
||||
|
||||
static BOOL isSOCSensor(CFStringRef sensorName) {
|
||||
return CFStringFind(sensorName, CFSTR("SOC"), kCFCompareCaseInsensitive).location != kCFNotFound;
|
||||
}
|
||||
|
||||
static float toOneDecimalPlace(float value) {
|
||||
return roundf(10.0f * value) / 10.0f;
|
||||
}
|
||||
|
||||
+ (float) getSOCTemperature {
|
||||
IOHIDEventSystemClientRef eventSystemClient = IOHIDEventSystemClientCreate(kCFAllocatorDefault);
|
||||
CFArrayRef services = IOHIDEventSystemClientCopyServices(eventSystemClient);
|
||||
if (services) {
|
||||
|
||||
float socSensorSum = 0.0f;
|
||||
int socSensorCount = 0;
|
||||
|
||||
for (int i = 0; i < CFArrayGetCount(services); i++) {
|
||||
IOHIDServiceClientRef serviceClientRef = (IOHIDServiceClientRef)CFArrayGetValueAtIndex(services, i);
|
||||
CFStringRef sensorName = IOHIDServiceClientCopyProperty(serviceClientRef, CFSTR("Product"));
|
||||
if (sensorName) {
|
||||
if (isSOCSensor(sensorName)) {
|
||||
IOHIDEventRef event = IOHIDServiceClientCopyEvent(serviceClientRef, kIOHIDEventTypeTemperature, 0, 0);
|
||||
if (event) {
|
||||
IOHIDFloat sensorTemperature = IOHIDEventGetFloatValue(event, IOHIDEventFieldBase(kIOHIDEventTypeTemperature));
|
||||
CFRelease(event);
|
||||
socSensorSum += sensorTemperature;
|
||||
socSensorCount++;
|
||||
}
|
||||
}
|
||||
CFRelease(sensorName);
|
||||
}
|
||||
}
|
||||
|
||||
CFRelease(services);
|
||||
CFRelease(eventSystemClient);
|
||||
|
||||
float avgSOCTemp = socSensorCount > 0 ? socSensorSum / socSensorCount : 0.0f;
|
||||
return toOneDecimalPlace(avgSOCTemp);
|
||||
}
|
||||
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
@end
|
||||
@ -20,7 +20,7 @@
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import <smcWrapper.h>
|
||||
#import "smcWrapper.h"
|
||||
|
||||
|
||||
@interface MachineDefaults : NSObject {
|
||||
|
||||
@ -75,8 +75,15 @@
|
||||
[fans addObject:[[NSMutableDictionary alloc] initWithDictionary:@{@"Description": desc,@"Minspeed": min,@"Maxspeed": max,@"selspeed": min}]];
|
||||
}
|
||||
//save to plist for future
|
||||
NSMutableArray *supported_m=[[NSMutableArray alloc] initWithContentsOfFile:[[[NSFileManager defaultManager] applicationSupportDirectory] stringByAppendingPathComponent:@"Machines.plist"]];
|
||||
NSMutableDictionary *new_machine= [[NSMutableDictionary alloc] initWithDictionary:@{@"Fans": fans,@"NumFans": @(num_fans),@"Machine": machine,@"Comment": @"Autogenerated",@"Minspeed": min,@"Maxspeed": max}];
|
||||
NSMutableArray *supported_m=[[NSMutableArray alloc] initWithContentsOfFile:[[[NSFileManager defaultManager] applicationSupportDirectory] stringByAppendingPathComponent:@"Machines.plist"]];
|
||||
NSMutableDictionary *new_machine;
|
||||
if (fans == nil)
|
||||
{
|
||||
new_machine= [[NSMutableDictionary alloc] initWithDictionary:@{@"Fans": [NSNull null],@"NumFans": @(0),@"Machine": machine,@"Comment": @"Autogenerated",@"Minspeed": min,@"Maxspeed": max}];
|
||||
|
||||
} else {
|
||||
new_machine= [[NSMutableDictionary alloc] initWithDictionary:@{@"Fans": fans,@"NumFans": @(num_fans),@"Machine": machine,@"Comment": @"Autogenerated",@"Minspeed": min,@"Maxspeed": max}];
|
||||
}
|
||||
[supported_m addObject:new_machine];
|
||||
|
||||
//save to plist
|
||||
@ -94,7 +101,7 @@
|
||||
if (!supported) {
|
||||
NSAlert *alert = [NSAlert alertWithMessageText:NSLocalizedString(@"Alert!",nil)
|
||||
defaultButton:NSLocalizedString(@"Continue",nil) alternateButton:NSLocalizedString(@"Quit",nil) otherButton:nil
|
||||
informativeTextWithFormat:NSLocalizedString(@"smcFanControl has not been tested on this machine yet, but it should run if you follow the instructions. \n\nIf you choose to continue, please make you have no other FanControl-software running. Otherwise please quit, deinstall the other software, restart your machine and rerun smcFanControl!",nil)];
|
||||
informativeTextWithFormat:NSLocalizedString(@"smcFanControl has not been tested on this machine yet, but it should run if you follow the instructions. \n\nIf you choose to continue, please make sure you have no other FanControl-software running. Otherwise please quit, deinstall the other software, restart your machine and rerun smcFanControl!",nil)];
|
||||
NSModalResponse code=[alert runModal];
|
||||
if (code == NSAlertDefaultReturn) {
|
||||
[self readFromSMC];
|
||||
|
||||
@ -58,6 +58,8 @@
|
||||
//delegate Prototypes
|
||||
@interface NSObject (PowerDelegate)
|
||||
|
||||
- (void)systemWillSleep:(id)sender;
|
||||
|
||||
- (void)systemDidWakeFromSleep:(id)sender;
|
||||
|
||||
- (void)powerChangeToBattery:(id)sender;
|
||||
|
||||
@ -101,6 +101,7 @@ static void powerSourceChanged(void * refCon)
|
||||
switch (messageType)
|
||||
{
|
||||
case kIOMessageSystemWillSleep:
|
||||
[_delegate systemWillSleep:self];
|
||||
IOAllowPowerChange(root_port, (long)messageArgument);
|
||||
break;
|
||||
case kIOMessageCanSystemSleep:
|
||||
|
||||
@ -21,10 +21,10 @@
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <openssl/evp.h>
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import <smc.h>
|
||||
#import <MachineDefaults.h>
|
||||
#import "smc.h"
|
||||
#import "MachineDefaults.h"
|
||||
#import "Constants.h"
|
||||
|
||||
@interface smcWrapper : NSObject {
|
||||
}
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
|
||||
#import "smcWrapper.h"
|
||||
#import <CommonCrypto/CommonDigest.h>
|
||||
NSString * const smc_checksum=@"4c9919172e1111c660f12015a7324767";
|
||||
NSString * const smc_checksum=@"4fc00a0979970ee8b55f078a0c793c4d";
|
||||
|
||||
NSArray *allSensors;
|
||||
|
||||
@ -37,20 +37,50 @@ NSArray *allSensors;
|
||||
SMCClose(conn);
|
||||
}
|
||||
|
||||
+(int)convertToNumber:(SMCVal_t) val
|
||||
{
|
||||
float fval = -1.0f;
|
||||
|
||||
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);
|
||||
}
|
||||
else if (strcmp(val.dataType, DATATYPE_UINT8) == 0 && val.dataSize == 1) {
|
||||
fval = (float)val.bytes[0];
|
||||
}
|
||||
else if (strcmp(val.dataType, DATATYPE_SP78) == 0 && val.dataSize == 2) {
|
||||
fval = ((val.bytes[0] * 256 + val.bytes[1]) >> 2)/64;
|
||||
}
|
||||
else {
|
||||
NSLog(@"%@", [NSString stringWithFormat:@"Unknown val:%s size-%d",val.dataType,val.dataSize]);
|
||||
}
|
||||
|
||||
return (int)fval;
|
||||
}
|
||||
|
||||
+(float)readTempSensors
|
||||
{
|
||||
float retValue;
|
||||
SMCVal_t val;
|
||||
NSString *sensor = [[NSUserDefaults standardUserDefaults] objectForKey:@"TSensor"];
|
||||
NSString *sensor = [[NSUserDefaults standardUserDefaults] objectForKey:PREF_TEMPERATURE_SENSOR];
|
||||
SMCReadKey2((char*)[sensor UTF8String], &val,conn);
|
||||
retValue= ((val.bytes[0] * 256 + val.bytes[1]) >> 2)/64;
|
||||
retValue = [self convertToNumber:val];
|
||||
#if TARGET_CPU_ARM64
|
||||
allSensors = [NSArray arrayWithObjects:@"Tp01",@"Tp05",@"Tp09",@"Tp0b",@"Tp0D",@"Tp0H",@"Tp0L",@"Tp0P",@"Tp0T",@"Tp0X",nil];
|
||||
#else
|
||||
allSensors = [NSArray arrayWithObjects:@"TC0D",@"TC0P",@"TCAD",@"TC0H",@"TC0F",@"TCAH",@"TCBH",nil];
|
||||
#endif
|
||||
if (retValue<=0 || floor(retValue) == 129 ) { //workaround for some iMac Models
|
||||
for (NSString *sensor in allSensors) {
|
||||
SMCReadKey2((char*)[sensor UTF8String], &val,conn);
|
||||
retValue= ((val.bytes[0] * 256 + val.bytes[1]) >> 2)/64;
|
||||
retValue= [self convertToNumber:val];
|
||||
if (retValue>0 && floor(retValue) != 129 ) {
|
||||
[[NSUserDefaults standardUserDefaults] setObject:sensor forKey:@"TSensor"];
|
||||
[[NSUserDefaults standardUserDefaults] setObject:sensor forKey:PREF_TEMPERATURE_SENSOR];
|
||||
[[NSUserDefaults standardUserDefaults] synchronize];
|
||||
break;
|
||||
}
|
||||
@ -86,8 +116,8 @@ NSArray *allSensors;
|
||||
SMCReadKey2(keyA, &valA,conn);
|
||||
sprintf(keyB, "TCBH");
|
||||
SMCReadKey2(keyB, &valB,conn);
|
||||
float c_tempA= ((valA.bytes[0] * 256 + valA.bytes[1]) >> 2)/64.0;
|
||||
float c_tempB= ((valB.bytes[0] * 256 + valB.bytes[1]) >> 2)/64.0;
|
||||
float c_tempA= [self convertToNumber:valA];
|
||||
float c_tempB= [self convertToNumber:valB];
|
||||
int i_tempA, i_tempB;
|
||||
if (c_tempA < c_tempB)
|
||||
{
|
||||
@ -105,9 +135,9 @@ NSArray *allSensors;
|
||||
UInt32Char_t key;
|
||||
SMCVal_t val;
|
||||
//kern_return_t result;
|
||||
sprintf(key, "F%dAc", fan_number);
|
||||
sprintf(key, "F%cAc", fannum[fan_number]);
|
||||
SMCReadKey2(key, &val,conn);
|
||||
int running= _strtof(val.bytes, val.dataSize, 2);
|
||||
int running= [self convertToNumber:val];
|
||||
return running;
|
||||
}
|
||||
|
||||
@ -116,7 +146,7 @@ NSArray *allSensors;
|
||||
SMCVal_t val;
|
||||
int totalFans;
|
||||
SMCReadKey2("FNum", &val,conn);
|
||||
totalFans = _strtoul((char *)val.bytes, val.dataSize, 10);
|
||||
totalFans = [self convertToNumber:val];
|
||||
return totalFans;
|
||||
}
|
||||
|
||||
@ -126,17 +156,24 @@ NSArray *allSensors;
|
||||
SMCVal_t val;
|
||||
//kern_return_t result;
|
||||
NSMutableString *desc;
|
||||
// desc=[[NSMutableString alloc] initWithFormat:@"Fan #%d: ",fan_number+1];
|
||||
desc=[[NSMutableString alloc]init];
|
||||
sprintf(key, "F%dID", fan_number);
|
||||
SMCReadKey2(key, &val,conn);
|
||||
int i;
|
||||
for (i = 0; i < val.dataSize; i++) {
|
||||
if ((int)val.bytes[i]>32) {
|
||||
temp=(unsigned char)val.bytes[i];
|
||||
[desc appendFormat:@"%c",temp];
|
||||
}
|
||||
}
|
||||
|
||||
sprintf(key, "F%cID", fannum[fan_number]);
|
||||
SMCReadKey2(key, &val,conn);
|
||||
|
||||
if(val.dataSize>0){
|
||||
desc=[[NSMutableString alloc]init];
|
||||
int i;
|
||||
for (i = 0; i < val.dataSize; i++) {
|
||||
if ((int)val.bytes[i]>32) {
|
||||
temp=(unsigned char)val.bytes[i];
|
||||
[desc appendFormat:@"%c",temp];
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
//On MacBookPro 15.1 descriptions aren't available
|
||||
desc=[[NSMutableString alloc] initWithFormat:@"Fan #%d: ",fan_number+1];
|
||||
}
|
||||
return desc;
|
||||
}
|
||||
|
||||
@ -145,9 +182,9 @@ NSArray *allSensors;
|
||||
UInt32Char_t key;
|
||||
SMCVal_t val;
|
||||
//kern_return_t result;
|
||||
sprintf(key, "F%dMn", fan_number);
|
||||
sprintf(key, "F%cMn", fannum[fan_number]);
|
||||
SMCReadKey2(key, &val,conn);
|
||||
int min= _strtof(val.bytes, val.dataSize, 2);
|
||||
int min= [self convertToNumber:val];
|
||||
return min;
|
||||
}
|
||||
|
||||
@ -155,11 +192,26 @@ NSArray *allSensors;
|
||||
UInt32Char_t key;
|
||||
SMCVal_t val;
|
||||
//kern_return_t result;
|
||||
sprintf(key, "F%dMx", fan_number);
|
||||
sprintf(key, "F%cMx", fannum[fan_number]);
|
||||
SMCReadKey2(key, &val,conn);
|
||||
int max= _strtof(val.bytes, val.dataSize, 2);
|
||||
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
|
||||
@ -209,11 +261,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];
|
||||
|
||||
12
Info.plist
12
Info.plist
@ -7,11 +7,11 @@
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>smcFanControl</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>smcFanControl 2.5.2, Hendrik Holtmann (GPL)</string>
|
||||
<string>smcFanControl 2.6, Hendrik Holtmann (GPL)</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>smcfancontrol_v2</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.eidac.smcFanControl2</string>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
@ -19,11 +19,13 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>2.5.2</string>
|
||||
<string>2.6.1</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2.5.2</string>
|
||||
<string>2.6.1</string>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string>public.app-category.utilities</string>
|
||||
<key>LSUIElement</key>
|
||||
<string>1</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
@ -33,6 +35,6 @@
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
<key>SUFeedURL</key>
|
||||
<string>http://www.eidac.de/smcfancontrol/smcfancontrol.xml</string>
|
||||
<string>https://www.eidac.de/smcfancontrol/smcfancontrol.xml</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
24
Readme.md
24
Readme.md
@ -1,13 +1,27 @@
|
||||
smcFanControl
|
||||
=============
|
||||
# smcFanControl
|
||||
|
||||
smcFanControl lets the user set a minimum speed for built-in fans. It allows you to increase your minimum fan speed to make your Intel Mac run cooler. In order to not damage your machine, smcFanControl does not let you set a minimum speed to a value below Apple's defaults.
|
||||
|
||||

|
||||

|
||||
|
||||
Requirements: Intel Mac / OS X 10.5 or higher
|
||||
|
||||
Compiled version: http://www.eidac.de/smcfancontrol/smcfancontrol_2_4.zip
|
||||
## Installing it using Homebrew & Cask
|
||||
|
||||
Make sure you have both [Homebrew](http://brew.sh/) and [Cask](https://caskroom.github.io/) installed. You'll find intructions to install both tools on their respective websites.
|
||||
|
||||
After installing Homebrew and Cask, run:
|
||||
|
||||
```
|
||||
$ brew install --cask smcfancontrol
|
||||
```
|
||||
|
||||
After that you'll be able to use Spotlight to launch smcFanControl normally. :-)
|
||||
|
||||
|
||||
Requirements: Apple Silicon or Intel Mac / OS X 10.7 or higher
|
||||
|
||||
|
||||
Compiled version: https://www.eidac.de/smcfancontrol/smcfancontrol_2_6.zip
|
||||
|
||||
FAQ / More info: Found in project under "Ressources/*.lproj/F.A.Q.rtf" or included in above .zip
|
||||
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
{\rtf1\ansi\ansicpg1252\cocoartf1187
|
||||
{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340
|
||||
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
|
||||
{\colortbl;\red255\green255\blue255;}
|
||||
{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}
|
||||
{\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid101\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid2}}
|
||||
{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}}
|
||||
\paperw12240\paperh15840\viewkind0
|
||||
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural
|
||||
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0
|
||||
|
||||
\f0\fs62 \cf0 F.A.Q for smcFanControl 2.4\
|
||||
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural
|
||||
\f0\fs62 \cf0 F.A.Q for smcFanControl 2.6\
|
||||
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0
|
||||
|
||||
\fs24 \cf0 \
|
||||
|
||||
@ -30,7 +30,7 @@ All changes smcFanControl does to the fan controlling get lost after you shutdow
|
||||
|
||||
\b I get a "smcFanControl has not been tested on this machine" warning. What does that mean?\
|
||||
|
||||
\b0 Technically smcFanControl supports every intel mac, but it does not come with defaults for every machine. If you get the warning, smcFanControl tries to read out the fan-details directly from the System Management Controller. If you follow the instructions (no other fan control software is running etc.) you should have no problem running smcFanControl on a machine it has not been tested on.\
|
||||
\b0 Technically smcFanControl supports every Apple Silicon & Intel Mac, but it does not come with defaults for every machine. If you get the warning, smcFanControl tries to read out the fan-details directly from the System Management Controller. If you follow the instructions (no other fan control software is running etc.) you should have no problem running smcFanControl on a machine it has not been tested on.\
|
||||
\
|
||||
|
||||
\b How can I restore the Apple defaults for fanspeed?\
|
||||
@ -74,7 +74,7 @@ Will there be a version of smcFanControl for Powerbooks or other PPC based Macs?
|
||||
|
||||
\b Wouldn't it be even better to read out the temperature and set the fan speeds depending on the readout than just set the minimum fan speed and let automatic fan control as defined by apple do the rest?\
|
||||
|
||||
\b0 Yes, that approach is even better and could make your machine running cooler, when you are at higher loads. BUT: I did not take this route for smcFanControl, cause it has some risks. Adjusting the fan speed to CPU temperature requires you have a program running in the background (e.g. a daemon) that adjust fan speed continuously . If that program ever crashes or becomes incompatible cause of a System Update (or the readouts of the temperature sensor get inappropriate) , the fans could get set to a wrong (too low) speed and this could probably damage the machine. In addition to that the fan-control-logic is quite complicate. An intel mac has about 10 temperature sensors, that are continuously read out and are used for monitoring and setting the right fan speeds. So it would be "not so great" to read out just the CPU temperature as a foundation for the fan-controlling.\
|
||||
\b0 Yes, that approach is even better and could make your machine running cooler, when you are at higher loads. BUT: I did not take this route for smcFanControl, cause it has some risks. Adjusting the fan speed to CPU temperature requires you have a program running in the background (e.g. a daemon) that adjust fan speed continuously . If that program ever crashes or becomes incompatible cause of a System Update (or the readouts of the temperature sensor get inappropriate) , the fans could get set to a wrong (too low) speed and this could probably damage the machine. In addition to that the fan-control-logic is quite complicate. A Mac has about 10 temperature sensors, that are continuously read out and are used for monitoring and setting the right fan speeds. So it would be "not so great" to read out just the CPU temperature as a foundation for the fan-controlling.\
|
||||
\
|
||||
|
||||
\b I have got a MBP and smcFanControl is reporting 0rpm for one of my fans?\
|
||||
@ -87,7 +87,7 @@ Will there be a version of smcFanControl for Powerbooks or other PPC based Macs?
|
||||
\
|
||||
|
||||
\b What are the main-differences between Version 1.2x and Version 2.x of smcFanControl?\
|
||||
\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural
|
||||
\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0
|
||||
\ls1\ilvl0
|
||||
\b0 \cf0 {\listtext \'95 }Version 2.x is a completely rewritten application.\
|
||||
{\listtext \'95 }Version 1.x was a "regular" application located in the dock. Version 2.x sits in the menubar for quicker access to the fan settings, easier monitoring and a better overall user-experience\
|
||||
@ -97,16 +97,16 @@ Will there be a version of smcFanControl for Powerbooks or other PPC based Macs?
|
||||
{\listtext \'95 }Version 2.x has got an "add to login-items option" now\
|
||||
{\listtext \'95 }Version 2.x uses standard OS X authentication now\
|
||||
{\listtext \'95 }Version 2.x uses the Sparkle-Framework to automatically check for updates\
|
||||
\pard\tx560\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural
|
||||
\pard\tx560\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0
|
||||
|
||||
\b \cf0 \
|
||||
Sourcecode: https://github.com/hholtmann/smcFanControl
|
||||
\b0 \
|
||||
|
||||
\b \
|
||||
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural
|
||||
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0
|
||||
|
||||
\b0 \cf0 \
|
||||
\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural
|
||||
\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0
|
||||
\ls2\ilvl0\cf0 \
|
||||
}
|
||||
@ -12,7 +12,7 @@
|
||||
|
||||
"Right Fan" = "Rechter Fan";
|
||||
|
||||
"smcFanControl has not been tested on this machine yet, but it should run if you follow the instructions. \n\nIf you choose to continue, please make you have no other FanControl-software running. Otherwise please quit, deinstall the other software, restart your machine and rerun smcFanControl!" = "smcFanControl is nog niet getest op deze machine, maar het zou moeten werken als je de instructies volgt. \n\nAls je doorgaat, zorg dan dat er geen andere FanControl-software draait. Als dat wel zo is, de-installeer deze software dan, stop smcFanControl en restart je computer voor je smcFanControl installeert!";
|
||||
"smcFanControl has not been tested on this machine yet, but it should run if you follow the instructions. \n\nIf you choose to continue, please make sure you have no other FanControl-software running. Otherwise please quit, deinstall the other software, restart your machine and rerun smcFanControl!" = "smcFanControl is nog niet getest op deze machine, maar het zou moeten werken als je de instructies volgt. \n\nAls je doorgaat, zorg dan dat er geen andere FanControl-software draait. Als dat wel zo is, de-installeer deze software dan, stop smcFanControl en restart je computer voor je smcFanControl installeert!";
|
||||
|
||||
"Continue" = "Doorgaan";
|
||||
|
||||
|
||||
5967
Ressources/Dutch.lproj/MainMenu.nib/designable.nib
generated
5967
Ressources/Dutch.lproj/MainMenu.nib/designable.nib
generated
File diff suppressed because it is too large
Load Diff
BIN
Ressources/Dutch.lproj/MainMenu.nib/keyedobjects.nib
generated
BIN
Ressources/Dutch.lproj/MainMenu.nib/keyedobjects.nib
generated
Binary file not shown.
@ -1,13 +1,13 @@
|
||||
{\rtf1\ansi\ansicpg1252\cocoartf1187
|
||||
{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340
|
||||
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
|
||||
{\colortbl;\red255\green255\blue255;}
|
||||
{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}}
|
||||
{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}}
|
||||
\paperw12240\paperh15840\vieww10800\viewh8400\viewkind0
|
||||
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural
|
||||
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0
|
||||
|
||||
\f0\fs62 \cf0 F.A.Q for smcFanControl 2.4\
|
||||
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural
|
||||
\f0\fs62 \cf0 F.A.Q for smcFanControl 2.6\
|
||||
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0
|
||||
|
||||
\fs24 \cf0 \
|
||||
|
||||
@ -29,7 +29,7 @@ All changes smcFanControl does to the fan controlling get lost after you shutdow
|
||||
|
||||
\b I get a "smcFanControl has not been tested on this machine" warning. What does that mean?\
|
||||
|
||||
\b0 Technically smcFanControl supports every intel mac, but it does not come with defaults for every machine. If you get the warning, smcFanControl tries to read out the fan-details directly from the System Management Controller. If you follow the instructions (no other fan control software is running etc.) you should have no problem running smcFanControl on a machine it has not been tested on.\
|
||||
\b0 Technically smcFanControl supports every Apple Silicon & Intel Mac, but it does not come with defaults for every machine. If you get the warning, smcFanControl tries to read out the fan-details directly from the System Management Controller. If you follow the instructions (no other fan control software is running etc.) you should have no problem running smcFanControl on a machine it has not been tested on.\
|
||||
\
|
||||
|
||||
\b How can I restore the Apple defaults for fanspeed?\
|
||||
@ -73,7 +73,7 @@ Will there be a version of smcFanControl for Powerbooks or other PPC based Macs?
|
||||
|
||||
\b Wouldn't it be even better to read out the temperature and set the fan speeds depending on the readout than just set the minimum fan speed and let automatic fan control as defined by apple do the rest?\
|
||||
|
||||
\b0 Yes, that approach is even better and could make your machine running cooler, when you are at higher loads. BUT: I did not take this route for smcFanControl, cause it has some risks. Adjusting the fan speed to CPU temperature requires you have a program running in the background (e.g. a daemon) that adjust fan speed continuously . If that program ever crashes or becomes incompatible cause of a System Update (or the readouts of the temperature sensor get inappropriate) , the fans could get set to a wrong (too low) speed and this could probably damage the machine. In addition to that the fan-control-logic is quite complicate. An intel mac has about 10 temperature sensors, that are continuously read out and are used for monitoring and setting the right fan speeds. So it would be "not so great" to read out just the CPU temperature as a foundation for the fan-controlling.\
|
||||
\b0 Yes, that approach is even better and could make your machine running cooler, when you are at higher loads. BUT: I did not take this route for smcFanControl, cause it has some risks. Adjusting the fan speed to CPU temperature requires you have a program running in the background (e.g. a daemon) that adjust fan speed continuously . If that program ever crashes or becomes incompatible cause of a System Update (or the readouts of the temperature sensor get inappropriate) , the fans could get set to a wrong (too low) speed and this could probably damage the machine. In addition to that the fan-control-logic is quite complicate. A Mac has about 10 temperature sensors, that are continuously read out and are used for monitoring and setting the right fan speeds. So it would be "not so great" to read out just the CPU temperature as a foundation for the fan-controlling.\
|
||||
\
|
||||
|
||||
\b I have got a MBP and smcFanControl is reporting 0rpm for one of my fans?\
|
||||
@ -86,10 +86,10 @@ Will there be a version of smcFanControl for Powerbooks or other PPC based Macs?
|
||||
\b \
|
||||
|
||||
\b0 \
|
||||
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural
|
||||
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0
|
||||
\ls1\ilvl0
|
||||
\b \cf0 {\listtext \'95 }What are the main-differences between Version 1.2x and Version 2.x of smcFanControl?\
|
||||
\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural
|
||||
\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0
|
||||
\ls1\ilvl0
|
||||
\b0 \cf0 {\listtext \'95 }Version 2.x is a completely rewritten application.\
|
||||
{\listtext \'95 }Version 1.x was a "regular" application located in the dock. Version 2.x sits in the menubar for quicker access to the fan settings, easier monitoring and a better overall user-experience\
|
||||
@ -100,7 +100,7 @@ Will there be a version of smcFanControl for Powerbooks or other PPC based Macs?
|
||||
{\listtext \'95 }Version 2.x uses standard OS X authentication now\
|
||||
{\listtext \'95 }Version 2.x uses the Sparkle-Framework to automatically check for updates\
|
||||
{\listtext \'95 }\
|
||||
\pard\tx560\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural
|
||||
\pard\tx560\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0
|
||||
\cf0 \
|
||||
|
||||
\b Sourcecode: https://github.com/hholtmann/smcFanControl
|
||||
|
||||
Binary file not shown.
Binary file not shown.
5809
Ressources/English.lproj/MainMenu.nib/designable.nib
generated
5809
Ressources/English.lproj/MainMenu.nib/designable.nib
generated
File diff suppressed because it is too large
Load Diff
BIN
Ressources/English.lproj/MainMenu.nib/keyedobjects.nib
generated
BIN
Ressources/English.lproj/MainMenu.nib/keyedobjects.nib
generated
Binary file not shown.
95
Ressources/French.lproj/F.A.Q.rtf
Normal file
95
Ressources/French.lproj/F.A.Q.rtf
Normal file
@ -0,0 +1,95 @@
|
||||
{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340
|
||||
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
|
||||
{\colortbl;\red255\green255\blue255;}
|
||||
{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}}
|
||||
{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}}
|
||||
\paperw12240\paperh15840\vieww10800\viewh8400\viewkind0
|
||||
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0
|
||||
|
||||
\f0\fs62 \cf0 F.A.Q smcFanControl 2.6\
|
||||
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0
|
||||
|
||||
\fs24 \cf0 \
|
||||
|
||||
\b Comment installer ou d\'e9sinstaller smcFanControl?\
|
||||
|
||||
\b0 smcFanControl est une simple application. Ainsi apr\'e8s son t\'e9l\'e9chargement, d\'e9placez-le o\'f9 vous le souhaitez (ex. le dossier Applications). Pour le d\'e9sinstaller, il suffit de le d\'e9placer dans la corbeille. smcFanControl n'installer aucun d\'e9mon ou processus en arri\'e8re plan. \
|
||||
To les changements op\'e9r\'e9s par smcFanControl sur le contr\'f4leur de ventilation sont perdus \'e0 l'extinction de la machine (pas lors d'un red\'e9marrage) ou lorsque la machine entre veille (si smcFanControl n'est plus en cours d'ex\'e9cution \'e0 la reprise d'activit\'e9). La vitesse minimum de rotation revient alors \'e0 la valeur par d\'e9faut d\'e9finie par le syst\'e8me.\
|
||||
\
|
||||
|
||||
\b Lorsque j'utilise smcFanControl et d\'e9finis une vitesse minimum, la vitesse augmente-t-elle tout de m\'eame lorsque la temp\'e9rature du CPU augmente ?\
|
||||
Oui
|
||||
\b0 , la vitesse augmentera comme d\'e9fini par Apple. smcFanControl laissera toujours vos ventilateur en mode automatique et ne modifiera \ul que la vitesse minimum\ulnone du ventilateur. Ainsi, plus la vitesse minimum d\'e9finie est \'e9lev\'e9e, plus le contr\'f4leur de ventilation mettra du temps \'e0 juger n\'e9c\'e9ssaire l'augmentation de vitesse \'e0 mesure que la temp\'e9rature augmente.\
|
||||
\
|
||||
|
||||
\b Pourquoi smcFanControl me demande un identifiant et un mot de passe et quels identifiants dois-je utiliser ?\
|
||||
|
||||
\b0 smcFanControl a besoin des identifiants d'un compte administrateur afin de pouvoir modifier la vitesse de rotation des ventilateurs. Vous n'aurez \'e0 les rentrer qu'une seuls fois. Pour autant, ces identifiants ne sont pas sauvegard\'e9s par smcFanControl. Ils sont justes utilis\'e9s pour voir d\'e9finir correctement les droits d'ex\'e9cution du programme.\
|
||||
\
|
||||
|
||||
\b J'obtiens le message d'avertissement "smcFanControl n'a pas encore \'e9t\'e9 test\'e9 sur cette machine". Qu'est ce que cela signifie?\
|
||||
|
||||
\b0 Techniquement, smcFanControl fonctionne avec tous les Mac Apple Silicon et Intel, mais ces machines ont des valeurs par d\'e9faut diff\'e9rente. Si vous obtenez ce message, smcFanControl tente de lire la valeur par d\'e9faut directement du System Management Controller. Si vous suivez les instructions (ne pas lancer d'autres logiciels de gestion de ventilation, etc.) vous devriez pouvoir utiliser smcFanControl sur une machine que n'a pas encore \'e9t\'e9 test\'e9e par nos soins.\
|
||||
\
|
||||
|
||||
\b Comment revenir au valeur par d\'e9fauts d\'e9finies par Apple ?\
|
||||
|
||||
\b0 Placer les curseurs \'e0 gaucher et cliquer "enregistrer". Les valeurs minimales autoris\'e9es sont celles d\'e9finies par d\'e9faut par Apple. Depuis la derni\'e8re mise \'e0 jour Apple du contr\'f4leur SMC les valeurs minimum par d\'e9faut sont de 1000rpm pour les MBP 15,4", 1500rpm pour le MB 13,3". 2000rpm les MBP Core2Duo et 1800rpm pour les MB Core2Duo.\
|
||||
|
||||
\b \
|
||||
Pourquoi ne puis-je pas d\'e9finir 0 rpm?\
|
||||
|
||||
\b0 smcFanControl ne vous permet que de d\'e9finir une valeur comprise entre les minimum et maximum d'Apple. D\'e9finir une valeur \'e0 0 est possible sur le plan technique mais provoquerait probablement des dommages \'e0 votre mat\'e9riel.\
|
||||
\
|
||||
|
||||
\b Quand les r\'e9glages smcFanControl sont-ils perdus ?\
|
||||
|
||||
\b0 Les r\'e9glages de vitesse minimum de rotation des ventilateurs sont perdus dans deux sc\'e9narios :\
|
||||
a) L'ordinateur est entr\'e9 en veille et smcFanControl n'est plus en cours d'ex\'e9cution (dans le cas contraire, smcFanControl v\'e9rifie l'\'e9tat de veille et applique \'e0 nouveau les r\'e9glages au r\'e9veil de la machine).\
|
||||
b) \'c9teindre votre machine.\
|
||||
\
|
||||
|
||||
\b Quelle sonde est utilis\'e9e pour lire la temp\'e9rature affich\'e9e?\
|
||||
|
||||
\b0 Ce n'est pas directement la sonde du CPU CoreDuo. Cela permet en outre de ne pas charg\'e9 une extension Kernel afin de lire la temp\'e9rature. La sonde utilis\'e9e est tr\'e8s proche de celle du CoreDuo, mais n'est effectivement pas exactement pareil.\
|
||||
\
|
||||
|
||||
\b Qu'en est il de Windows avec Bootcamp?\
|
||||
\
|
||||
|
||||
\b0 smcFanControl \'e9tant une application native OSX, vous ne pouvez d\'e9finir la valeur minimum des rotation lorsque vous \'eates sous windows.\
|
||||
Toutefois, vous pouvez d\'e9finir une vitesse minimale sous OSX puis red\'e9marrer sous windows, vos r\'e9glages n'\'e9tant pas perdu lors du red\'e9marrage. Certes personnes ont report\'e9s que cette m\'e9thode permettait de se pr\'e9venir de certain crash de jeux sous Windows.\
|
||||
\
|
||||
|
||||
\b Ne serait-il pas mieux de d\'e9finir la vitesse de rotation en fonction de la temp\'e9rature plut\'f4t que de choisir une vitesse minimale et laisse Apple faire le reste ?\
|
||||
|
||||
\b0 Oui, cette approche serait probablement plus int\'e9ressante. MAIS : cette m\'e9thode n'a pas \'e9t\'e9 retenue car elle comporte des risques. D\'e9finir la vitesse en fonction de la temp\'e9rature requiert un programme qui tourne en continue. Si ce programme crash ou devient incompatible \'e0 la suite d'une mise \'e0 jour, le ventilateur pourrait \'eatre d\'e9fini \'e0 une valeur trop basse qui pourrait endommager votre machine. D'autre part, cette logique est complexe \'e0 mettre en oeuvre. Un Mac poss\'e8de une dizaine de sondes de temp\'e9rature, lues continuellement afin de d\'e9finir la vitesse ad\'e9quate de rotation des ventilateurs. Ainsi il ne serait pas judicieux de se reposer sur la lecture d'une seule sonde pour le contr\'f4le de la ventilation.\
|
||||
\
|
||||
|
||||
\b Je poss\'e8de un MBP et smcFanControl m'indique 0 rpm pour l'un des ventilateurs\
|
||||
|
||||
\b0 Dans ce cas, le ventilateur n'a remont\'e9 aucune information \'e0 smcFanControl.
|
||||
\b
|
||||
\b0 Il est possible que le ventilateur subisse un disfonctionnement. Vous pouvez diagnostiquer vitre Mac \'e0 l'aide du Test Hardware d'Apple (cette outils est livr\'e9 avec le DVD d'installation de votre machine).
|
||||
\b \
|
||||
|
||||
\b0 \
|
||||
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0
|
||||
\ls1\ilvl0
|
||||
\b \cf0 Quelles sont les principales diff\'e9rence entre les versions 1.2x et 2.x de smcFanControl ?\
|
||||
\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0
|
||||
\ls1\ilvl0
|
||||
\b0 \cf0 {\listtext \'95 }La version 2.x a \'e9t\'e9 enti\'e8rement r\'e9\'e9crites.\
|
||||
{\listtext \'95 }La version 1.x \'e9tait une application "normale" plac\'e9e dans le dock. La version 2.x se trouve d\'e9sormais dans la bar des menus, permettant un acc\'e8s rapide ainsi qu'un contr\'f4le plus simple de la temp\'e9rature et vitesse de rotation.\
|
||||
{\listtext \'95 }La version 2.x supporte tous les Macs intel.\
|
||||
{\listtext \'95 }Dans la version 2.x vous pouvez d\'e9finir plusieurs r\'e9glages favoris et les activer en un clic.\
|
||||
{\listtext \'95 }Sur les Macs portables, vous pouvez activer automatiquement un r\'e9glage favoris en fonction de la source d'alimentation. Ainsi vous pouvez choisir de rafraichir automatique votre mac lorsque que celui-ci est branch\'e9 ou en charge (et que typiquement dans ces conditions il chauffe davantage).\
|
||||
{\listtext \'95 }La version 2.x poss\'e8de d\'e9sormais une option de d\'e9marrage automatique avec la session.\
|
||||
{\listtext \'95 }La version 2.x utilise la fen\'eatre standard d'authentification d'OSX\
|
||||
{\listtext \'95 }La version 2.x uses the Framework Sparkle pour v\'e9rifier automatiquement les mises \'e0 jour\
|
||||
\pard\tx560\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0
|
||||
\cf0 \
|
||||
|
||||
\b Code source : https://github.com/hholtmann/smcFanControl
|
||||
\b0 \
|
||||
}
|
||||
BIN
Ressources/French.lproj/Localizable.strings
Normal file
BIN
Ressources/French.lproj/Localizable.strings
Normal file
Binary file not shown.
1097
Ressources/French.lproj/MainMenu.nib/designable.nib
generated
Normal file
1097
Ressources/French.lproj/MainMenu.nib/designable.nib
generated
Normal file
File diff suppressed because it is too large
Load Diff
BIN
Ressources/French.lproj/MainMenu.nib/keyedobjects.nib
generated
Normal file
BIN
Ressources/French.lproj/MainMenu.nib/keyedobjects.nib
generated
Normal file
Binary file not shown.
@ -1,14 +1,14 @@
|
||||
{\rtf1\ansi\ansicpg1252\cocoartf1187
|
||||
{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340
|
||||
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
|
||||
{\colortbl;\red255\green255\blue255;}
|
||||
{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}
|
||||
{\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid101\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid2}}
|
||||
{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}}
|
||||
\paperw12240\paperh15840\viewkind0
|
||||
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural
|
||||
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0
|
||||
|
||||
\f0\fs62 \cf0 F.A.Q for smcFanControl 2.4\
|
||||
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural
|
||||
\f0\fs62 \cf0 F.A.Q for smcFanControl 2.6\
|
||||
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0
|
||||
|
||||
\fs24 \cf0 \
|
||||
|
||||
@ -30,7 +30,7 @@ All changes smcFanControl does to the fan controlling get lost after you shutdow
|
||||
|
||||
\b I get a "smcFanControl has not been tested on this machine" warning. What does that mean?\
|
||||
|
||||
\b0 Technically smcFanControl supports every intel mac, but it does not come with defaults for every machine. If you get the warning, smcFanControl tries to read out the fan-details directly from the System Management Controller. If you follow the instructions (no other fan control software is running etc.) you should have no problem running smcFanControl on a machine it has not been tested on.\
|
||||
\b0 Technically smcFanControl supports every Apple Silicon & Intel Mac, but it does not come with defaults for every machine. If you get the warning, smcFanControl tries to read out the fan-details directly from the System Management Controller. If you follow the instructions (no other fan control software is running etc.) you should have no problem running smcFanControl on a machine it has not been tested on.\
|
||||
\
|
||||
|
||||
\b How can I restore the Apple defaults for fanspeed?\
|
||||
@ -74,7 +74,7 @@ Will there be a version of smcFanControl for Powerbooks or other PPC based Macs?
|
||||
|
||||
\b Wouldn't it be even better to read out the temperature and set the fan speeds depending on the readout than just set the minimum fan speed and let automatic fan control as defined by apple do the rest?\
|
||||
|
||||
\b0 Yes, that approach is even better and could make your machine running cooler, when you are at higher loads. BUT: I did not take this route for smcFanControl, cause it has some risks. Adjusting the fan speed to CPU temperature requires you have a program running in the background (e.g. a daemon) that adjust fan speed continuously . If that program ever crashes or becomes incompatible cause of a System Update (or the readouts of the temperature sensor get inappropriate) , the fans could get set to a wrong (too low) speed and this could probably damage the machine. In addition to that the fan-control-logic is quite complicate. An intel mac has about 10 temperature sensors, that are continuously read out and are used for monitoring and setting the right fan speeds. So it would be "not so great" to read out just the CPU temperature as a foundation for the fan-controlling.\
|
||||
\b0 Yes, that approach is even better and could make your machine running cooler, when you are at higher loads. BUT: I did not take this route for smcFanControl, cause it has some risks. Adjusting the fan speed to CPU temperature requires you have a program running in the background (e.g. a daemon) that adjust fan speed continuously . If that program ever crashes or becomes incompatible cause of a System Update (or the readouts of the temperature sensor get inappropriate) , the fans could get set to a wrong (too low) speed and this could probably damage the machine. In addition to that the fan-control-logic is quite complicate. A Mac has about 10 temperature sensors, that are continuously read out and are used for monitoring and setting the right fan speeds. So it would be "not so great" to read out just the CPU temperature as a foundation for the fan-controlling.\
|
||||
\
|
||||
|
||||
\b I have got a MBP and smcFanControl is reporting 0rpm for one of my fans?\
|
||||
@ -89,7 +89,7 @@ Will there be a version of smcFanControl for Powerbooks or other PPC based Macs?
|
||||
\b0 \
|
||||
|
||||
\b What are the main-differences between Version 1.2x and Version 2.x of smcFanControl?\
|
||||
\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural
|
||||
\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0
|
||||
\ls1\ilvl0
|
||||
\b0 \cf0 {\listtext \'95 }Version 2.x is a completely rewritten application.\
|
||||
{\listtext \'95 }Version 1.x was a "regular" application located in the dock. Version 2.x sits in the menubar for quicker access to the fan settings, easier monitoring and a better overall user-experience\
|
||||
@ -99,12 +99,12 @@ Will there be a version of smcFanControl for Powerbooks or other PPC based Macs?
|
||||
{\listtext \'95 }Version 2.x has got an "add to login-items option" now\
|
||||
{\listtext \'95 }Version 2.x uses standard OS X authentication now\
|
||||
{\listtext \'95 }Version 2.x uses the Sparkle-Framework to automatically check for updates\
|
||||
\pard\tx560\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural
|
||||
\pard\tx560\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0
|
||||
|
||||
\b \cf0 \
|
||||
Sourcecode: https://github.com/hholtmann/smcFanControl
|
||||
\b0 \
|
||||
\
|
||||
\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural
|
||||
\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0
|
||||
\ls2\ilvl0\cf0 \
|
||||
}
|
||||
@ -12,7 +12,7 @@
|
||||
|
||||
"Right Fan" = "Rechter Lüfter";
|
||||
|
||||
"smcFanControl has not been tested on this machine yet, but it should run if you follow the instructions. \n\nIf you choose to continue, please make you have no other FanControl-software running. Otherwise please quit, deinstall the other software, restart your machine and rerun smcFanControl!" = "smcFanControl wurde auf Ihrem Computermodel noch nicht getestet! Es sollte jedoch problemlos funktionieren, wenn Sie die Hinweise beachten.\n\nBevor Sie auf Weiter klicken, stellen Sie sicher das keine andere FanControl-Software läuft. Sollte dies noch der Fall sein, wählen Sie Abbrechen, deinstallieren Sie die andere Software, starten Sie Ihren Rechner neu und rufen Sie smcFanControl erneut auf!";
|
||||
"smcFanControl has not been tested on this machine yet, but it should run if you follow the instructions. \n\nIf you choose to continue, please make sure you have no other FanControl-software running. Otherwise please quit, deinstall the other software, restart your machine and rerun smcFanControl!" = "smcFanControl wurde auf Ihrem Computermodel noch nicht getestet! Es sollte jedoch problemlos funktionieren, wenn Sie die Hinweise beachten.\n\nBevor Sie auf Weiter klicken, stellen Sie sicher das keine andere FanControl-Software läuft. Sollte dies noch der Fall sein, wählen Sie Abbrechen, deinstallieren Sie die andere Software, starten Sie Ihren Rechner neu und rufen Sie smcFanControl erneut auf!";
|
||||
|
||||
"Continue" = "Weiter";
|
||||
|
||||
|
||||
5806
Ressources/German.lproj/MainMenu.nib/designable.nib
generated
5806
Ressources/German.lproj/MainMenu.nib/designable.nib
generated
File diff suppressed because it is too large
Load Diff
BIN
Ressources/German.lproj/MainMenu.nib/keyedobjects.nib
generated
BIN
Ressources/German.lproj/MainMenu.nib/keyedobjects.nib
generated
Binary file not shown.
@ -572,5 +572,104 @@
|
||||
<key>NumFans</key>
|
||||
<integer>4</integer>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Fans</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Description</key>
|
||||
<string>Left Fan</string>
|
||||
<key>Maxspeed</key>
|
||||
<integer>5927</integer>
|
||||
<key>Minspeed</key>
|
||||
<real>2160</real>
|
||||
<key>selspeed</key>
|
||||
<integer>2160</integer>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Description</key>
|
||||
<string>Right Fan</string>
|
||||
<key>Maxspeed</key>
|
||||
<integer>5489</integer>
|
||||
<key>Minspeed</key>
|
||||
<real>2000</real>
|
||||
<key>selspeed</key>
|
||||
<integer>2000</integer>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Machine</key>
|
||||
<string>MacBookPro15,1</string>
|
||||
<key>Maxspeed</key>
|
||||
<integer>5927</integer>
|
||||
<key>Minspeed</key>
|
||||
<integer>2000</integer>
|
||||
<key>NumFans</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Fans</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Description</key>
|
||||
<string>Left Fan</string>
|
||||
<key>Maxspeed</key>
|
||||
<integer>5616</integer>
|
||||
<key>Minspeed</key>
|
||||
<real>1836</real>
|
||||
<key>selspeed</key>
|
||||
<integer>1836</integer>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Description</key>
|
||||
<string>Right Fan</string>
|
||||
<key>Maxspeed</key>
|
||||
<integer>5200</integer>
|
||||
<key>Minspeed</key>
|
||||
<real>1700</real>
|
||||
<key>selspeed</key>
|
||||
<integer>1700</integer>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Machine</key>
|
||||
<string>MacBookPro16,1</string>
|
||||
<key>Maxspeed</key>
|
||||
<integer>5927</integer>
|
||||
<key>Minspeed</key>
|
||||
<integer>1700</integer>
|
||||
<key>NumFans</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Fans</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Description</key>
|
||||
<string>Left Fan</string>
|
||||
<key>Maxspeed</key>
|
||||
<integer>4296</integer>
|
||||
<key>Minspeed</key>
|
||||
<integer>1499</integer>
|
||||
<key>selspeed</key>
|
||||
<integer>1499</integer>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Description</key>
|
||||
<string>Right Fan</string>
|
||||
<key>Maxspeed</key>
|
||||
<integer>4744</integer>
|
||||
<key>Minspeed</key>
|
||||
<integer>1499</integer>
|
||||
<key>selspeed</key>
|
||||
<integer>1499</integer>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Machine</key>
|
||||
<string>MacBookPro18,1</string>
|
||||
<key>Maxspeed</key>
|
||||
<integer>4744</integer>
|
||||
<key>Minspeed</key>
|
||||
<integer>1499</integer>
|
||||
<key>NumFans</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</array>
|
||||
</plist>
|
||||
|
||||
@ -1,13 +1,13 @@
|
||||
{\rtf1\ansi\ansicpg1252\cocoartf1187
|
||||
{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340
|
||||
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
|
||||
{\colortbl;\red255\green255\blue255;}
|
||||
{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}}
|
||||
{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}}
|
||||
\paperw12240\paperh15840\viewkind0
|
||||
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural
|
||||
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0
|
||||
|
||||
\f0\fs62 \cf0 F.A.Q para smcFanControl 2.4\
|
||||
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural
|
||||
\f0\fs62 \cf0 F.A.Q para smcFanControl 2.6\
|
||||
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0
|
||||
|
||||
\fs24 \cf0 \
|
||||
|
||||
@ -29,7 +29,7 @@ Todos los cambios realizados por smcFanControl se pierden al apagar el ordenador
|
||||
|
||||
\b Me sale el aviso "smcFanControl no ha sido probado en esta m\'e1quina". \'bfQu\'e9 significa?\
|
||||
|
||||
\b0 T\'e9cnicamente smcFanControl funciona en todos los mac Intel, pero no trae los valores por defecto para todos los modelos. Si sale este aviso smcFanControl tratar\'e1 de leer los valores por defecto del SMC (System Management Controller) Si sigue las instrucciones (no hay otro controlador de ventiladoes, etc) no deber\'eda de tener ning\'fan problema en usarlo en un modelo en el que no haya sido probado a\'fan.\
|
||||
\b0 T\'e9cnicamente smcFanControl funciona en todos los Mac Apple Silicon o Intel, pero no trae los valores por defecto para todos los modelos. Si sale este aviso smcFanControl tratar\'e1 de leer los valores por defecto del SMC (System Management Controller) Si sigue las instrucciones (no hay otro controlador de ventiladoes, etc) no deber\'eda de tener ning\'fan problema en usarlo en un modelo en el que no haya sido probado a\'fan.\
|
||||
\
|
||||
|
||||
\b \'bfComo puedo recobrar los valores por defecto de Apple para la velocidad de los ventiladores?\
|
||||
@ -73,7 +73,7 @@ b) La m\'e1quina se apaga.\
|
||||
|
||||
\b \'bfNo ser\'eda mejor leer los valores de temperaura y ajustar la velocidad que limitarse a cambiar el valor m\'ednimo y dejar que el control autom\'e1tico de ventiladores de Apple haga el resto?\
|
||||
|
||||
\b0 Si, ese camino es mejor y puede que haga que la m\'e1quina funcione m\'e1s fresca cuando la carga es alta... PERO: No eleg\'ed este camino por los los riesgos que tiene. Requiere un programa en segundo plano (un daemon) ajustando constantemente la velocidad. Si este programa es incompatible con una fuura actualiaci\'f3n del sistema o se cuelga puede fijar la velocidad a un valor demasiado bajo y estropear la m\'e1quina. Adem\'e1s la l\'f3gica que hay que a\'f1adir es muy complicada, un mac intel tiene en torno a 10 sensores de temperatura, con lo que simplemente "leer la temperatura de la CPU y ajustar el ventilador" no es tan buena idea.\
|
||||
\b0 Si, ese camino es mejor y puede que haga que la m\'e1quina funcione m\'e1s fresca cuando la carga es alta... PERO: No eleg\'ed este camino por los los riesgos que tiene. Requiere un programa en segundo plano (un daemon) ajustando constantemente la velocidad. Si este programa es incompatible con una fuura actualiaci\'f3n del sistema o se cuelga puede fijar la velocidad a un valor demasiado bajo y estropear la m\'e1quina. Adem\'e1s la l\'f3gica que hay que a\'f1adir es muy complicada, un Mac tiene en torno a 10 sensores de temperatura, con lo que simplemente "leer la temperatura de la CPU y ajustar el ventilador" no es tan buena idea.\
|
||||
\
|
||||
|
||||
\b \'bfTengo un MBP y smcFanControl dice que un ventilador gira a 0rpm?\
|
||||
@ -84,7 +84,7 @@ b) La m\'e1quina se apaga.\
|
||||
\
|
||||
|
||||
\b \'bfCuales son las principales diferencias entre las versiones 1.2.x y 2.x de smcFanControl?\
|
||||
\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural
|
||||
\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0
|
||||
\ls1\ilvl0
|
||||
\b0 \cf0 {\listtext \'95 }La versi\'f3n 2.x est\'e1 completamente rescrita.\
|
||||
{\listtext \'95 }La versi\'f3n 1.x era una aplicaci\'f3n "regular" en el dock. La versi\'f3n 2.x se coloca en la barra de menu, por lo que se accede r\'e1pidamente a los ajustes de los ventiladores, al control de temperatura y en general un uso m\'e1s agradable\
|
||||
@ -94,11 +94,10 @@ b) La m\'e1quina se apaga.\
|
||||
{\listtext \'95 }La versi\'f3n 2.x tiene la opci\'f3n de "a\'f1adir a los elementos de inicio"\
|
||||
{\listtext \'95 }La versi\'f3n 2.x usa la autenticaci\'f3n est\'e1ndard de OS X\
|
||||
{\listtext \'95 }La versi\'f3n 2.x usa el "Sparkle-Framework" para busca autom\'e1ticamente actualizaciones\
|
||||
\pard\tx560\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural
|
||||
\pard\tx560\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0
|
||||
\cf0 \
|
||||
\pard\tx560\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural
|
||||
|
||||
\b \cf0 Sourcecode: https://github.com/hholtmann/smcFanControl
|
||||
\b Sourcecode: https://github.com/hholtmann/smcFanControl
|
||||
\b0 \
|
||||
\
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
"Do you really want to delete the favorite %@?" = "¿Seguro qu desea eliminar el favorito: %@?";
|
||||
"Do you really want to delete the favorite %@?" = "¿Seguro que desea eliminar el favorito: %@?";
|
||||
|
||||
"Yes" = "Si";
|
||||
"Yes" = "Sí";
|
||||
|
||||
"No" = "No";
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
|
||||
"Right Fan" = "Ventilador derecho";
|
||||
|
||||
"smcFanControl has not been tested on this machine yet, but it should run if you follow the instructions. \n\nIf you choose to continue, please make you have no other FanControl-software running. Otherwise please quit, deinstall the other software, restart your machine and rerun smcFanControl!" = "smcFanControl no ha sido probado en esta máquina, pero debería de funcionar si sigue esta insrucciones. \n\nSi decide continuar aseguresé de que no hay otro programa de control de ventiladores; si no salga, desinstale los otros programas, reinicie y lance otra vez smcFanControl";
|
||||
"smcFanControl has not been tested on this machine yet, but it should run if you follow the instructions. \n\nIf you choose to continue, please make sure you have no other FanControl-software running. Otherwise please quit, deinstall the other software, restart your machine and rerun smcFanControl!" = "smcFanControl no ha sido probado en esta máquina, pero debería de funcionar si sigue esta insrucciones. \n\nSi decide continuar asegúrese de que no hay otro programa de control de ventiladores; si es así salga, desinstale los otros programas, reinicie y lance otra vez smcFanControl";
|
||||
|
||||
"Continue" = "Continuar";
|
||||
|
||||
@ -22,20 +22,20 @@
|
||||
|
||||
"Active Setting" = "Configuración activa";
|
||||
|
||||
"Remind me later" = "Remind me later";
|
||||
"Remind me later" = "Recuérdame luego";
|
||||
|
||||
"Consider a donation" = "Consider a donation";
|
||||
"Consider a donation" = "Considera una donación";
|
||||
|
||||
"Never ask me again" = "Never ask me again";
|
||||
"Never ask me again" = "No volver a preguntar";
|
||||
|
||||
"Donate over Paypal" = "Donate over Paypal";
|
||||
"Donate over Paypal" = "Dona mediante Paypal";
|
||||
|
||||
"smcFanControl keeps your Mac cool since 2006.\n\nIf smcFanControl is helfpul for you and you want to support further development, a small donation over Paypal is much appreciated." = "smcFanControl keeps your Mac cool since 2006.\n\nIf smcFanControl is helfpul for you and you want to support further development, a small donation over Paypal is much appreciated.";
|
||||
"smcFanControl keeps your Mac cool since 2006.\n\nIf smcFanControl is helfpul for you and you want to support further development, a small donation over Paypal is much appreciated." = "smcFanControl mantiene tu Mac fresco desde 2006.\nSi smcFanControl es útil para ti y quieres apoyar su desarrollo, apreciamos que nos aportes una pequeña donación a través de Paypal.";
|
||||
|
||||
"Do you want to reset smcFanControl to default settings? Favorites will be deleted and fans will return to default speed." = "Do you want to reset smcFanControl to default settings?\nFavorites will be deleted and fans will return to default speed.";
|
||||
"Do you want to reset smcFanControl to default settings? Favorites will be deleted and fans will return to default speed." = "¿Desea restablecer la configuración predeterminada de smcFanControl?\n- Los favoritos se eliminarán y los ventiladores volverán a la velocidad predeterminada.";
|
||||
|
||||
"Please shutdown your computer now to return to default fan settings." = "Please shutdown your computer now to return to default fan settings.";
|
||||
"Please shutdown your computer now to return to default fan settings." = "Por favor, apaga el ordenador ahora para restaurar la configuración de los ventiladores";
|
||||
|
||||
"Reset Settings" = "Reset Settings";
|
||||
"Reset Settings" = "Ajustes de fábrica";
|
||||
|
||||
"Shutdown required" = "Shutdown required";
|
||||
"Shutdown required" = "Se necesita apagar";
|
||||
|
||||
5763
Ressources/Spanish.lproj/MainMenu.nib/designable.nib
generated
5763
Ressources/Spanish.lproj/MainMenu.nib/designable.nib
generated
File diff suppressed because it is too large
Load Diff
BIN
Ressources/Spanish.lproj/MainMenu.nib/keyedobjects.nib
generated
BIN
Ressources/Spanish.lproj/MainMenu.nib/keyedobjects.nib
generated
Binary file not shown.
1
Sparkle.framework/Autoupdate
Symbolic link
1
Sparkle.framework/Autoupdate
Symbolic link
@ -0,0 +1 @@
|
||||
Versions/Current/Autoupdate
|
||||
1
Sparkle.framework/Modules
Symbolic link
1
Sparkle.framework/Modules
Symbolic link
@ -0,0 +1 @@
|
||||
Versions/Current/Modules
|
||||
1
Sparkle.framework/PrivateHeaders
Symbolic link
1
Sparkle.framework/PrivateHeaders
Symbolic link
@ -0,0 +1 @@
|
||||
Versions/Current/PrivateHeaders
|
||||
1
Sparkle.framework/Updater.app
Symbolic link
1
Sparkle.framework/Updater.app
Symbolic link
@ -0,0 +1 @@
|
||||
Versions/Current/Updater.app
|
||||
@ -1,37 +0,0 @@
|
||||
//
|
||||
// SUAppcast.h
|
||||
// Sparkle
|
||||
//
|
||||
// Created by Andy Matuschak on 3/12/06.
|
||||
// Copyright 2006 Andy Matuschak. All rights reserved.
|
||||
//
|
||||
|
||||
#ifndef SUAPPCAST_H
|
||||
#define SUAPPCAST_H
|
||||
|
||||
@protocol SUAppcastDelegate;
|
||||
|
||||
@class SUAppcastItem;
|
||||
@interface SUAppcast : NSObject<NSURLDownloadDelegate>
|
||||
{
|
||||
@private
|
||||
NSArray *items;
|
||||
NSString *userAgentString;
|
||||
id<SUAppcastDelegate> delegate;
|
||||
NSString *downloadFilename;
|
||||
NSURLDownload *download;
|
||||
}
|
||||
@property (assign) id<SUAppcastDelegate> delegate;
|
||||
@property (copy) NSString *userAgentString;
|
||||
|
||||
- (void)fetchAppcastFromURL:(NSURL *)url;
|
||||
|
||||
- (NSArray *)items;
|
||||
@end
|
||||
|
||||
@protocol SUAppcastDelegate <NSObject>
|
||||
- (void)appcastDidFinishLoading:(SUAppcast *)appcast;
|
||||
- (void)appcast:(SUAppcast *)appcast failedToLoadWithError:(NSError *)error;
|
||||
@end
|
||||
|
||||
#endif
|
||||
@ -1,62 +0,0 @@
|
||||
//
|
||||
// SUAppcastItem.h
|
||||
// Sparkle
|
||||
//
|
||||
// Created by Andy Matuschak on 3/12/06.
|
||||
// Copyright 2006 Andy Matuschak. All rights reserved.
|
||||
//
|
||||
|
||||
#ifndef SUAPPCASTITEM_H
|
||||
#define SUAPPCASTITEM_H
|
||||
|
||||
@interface SUAppcastItem : NSObject
|
||||
{
|
||||
@private
|
||||
NSString *title;
|
||||
NSDate *date;
|
||||
NSString *itemDescription;
|
||||
|
||||
NSURL *releaseNotesURL;
|
||||
|
||||
NSString *DSASignature;
|
||||
NSString *minimumSystemVersion;
|
||||
NSString *maximumSystemVersion;
|
||||
|
||||
NSURL *fileURL;
|
||||
NSString *versionString;
|
||||
NSString *displayVersionString;
|
||||
|
||||
NSDictionary *deltaUpdates;
|
||||
|
||||
NSDictionary *propertiesDictionary;
|
||||
|
||||
NSURL *infoURL; // UK 2007-08-31
|
||||
}
|
||||
@property (copy, readonly) NSString *title;
|
||||
@property (copy, readonly) NSDate *date;
|
||||
@property (copy, readonly) NSString *itemDescription;
|
||||
@property (retain, readonly) NSURL *releaseNotesURL;
|
||||
@property (copy, readonly) NSString *DSASignature;
|
||||
@property (copy, readonly) NSString *minimumSystemVersion;
|
||||
@property (copy, readonly) NSString *maximumSystemVersion;
|
||||
@property (retain, readonly) NSURL *fileURL;
|
||||
@property (copy, readonly) NSString *versionString;
|
||||
@property (copy, readonly) NSString *displayVersionString;
|
||||
@property (copy, readonly) NSDictionary *deltaUpdates;
|
||||
@property (retain, readonly) NSURL *infoURL;
|
||||
|
||||
// Initializes with data from a dictionary provided by the RSS class.
|
||||
- (id)initWithDictionary:(NSDictionary *)dict;
|
||||
- (id)initWithDictionary:(NSDictionary *)dict failureReason:(NSString**)error;
|
||||
|
||||
- (BOOL)isDeltaUpdate;
|
||||
- (BOOL)isCriticalUpdate;
|
||||
|
||||
// Returns the dictionary provided in initWithDictionary; this might be useful later for extensions.
|
||||
- (NSDictionary *)propertiesDictionary;
|
||||
|
||||
- (NSURL *)infoURL; // UK 2007-08-31
|
||||
|
||||
@end
|
||||
|
||||
#endif
|
||||
@ -1,182 +0,0 @@
|
||||
//
|
||||
// SUUpdater.h
|
||||
// Sparkle
|
||||
//
|
||||
// Created by Andy Matuschak on 1/4/06.
|
||||
// Copyright 2006 Andy Matuschak. All rights reserved.
|
||||
//
|
||||
|
||||
#ifndef SUUPDATER_H
|
||||
#define SUUPDATER_H
|
||||
|
||||
#import "SUVersionComparisonProtocol.h"
|
||||
#import "SUVersionDisplayProtocol.h"
|
||||
|
||||
@class SUUpdateDriver, SUAppcastItem, SUHost, SUAppcast;
|
||||
|
||||
@interface SUUpdater : NSObject
|
||||
{
|
||||
@private
|
||||
NSTimer *checkTimer;
|
||||
SUUpdateDriver *driver;
|
||||
|
||||
NSString *customUserAgentString;
|
||||
SUHost *host;
|
||||
IBOutlet id delegate;
|
||||
}
|
||||
@property (assign) id delegate;
|
||||
|
||||
+ (SUUpdater *)sharedUpdater;
|
||||
+ (SUUpdater *)updaterForBundle:(NSBundle *)bundle;
|
||||
- (id)initForBundle:(NSBundle *)bundle;
|
||||
|
||||
- (NSBundle *)hostBundle;
|
||||
|
||||
- (void)setAutomaticallyChecksForUpdates:(BOOL)automaticallyChecks;
|
||||
- (BOOL)automaticallyChecksForUpdates;
|
||||
|
||||
- (void)setUpdateCheckInterval:(NSTimeInterval)interval;
|
||||
- (NSTimeInterval)updateCheckInterval;
|
||||
|
||||
- (void)setFeedURL:(NSURL *)feedURL;
|
||||
- (NSURL *)feedURL; // *** MUST BE CALLED ON MAIN THREAD ***
|
||||
|
||||
- (void)setUserAgentString:(NSString *)userAgent;
|
||||
- (NSString *)userAgentString;
|
||||
|
||||
- (void)setSendsSystemProfile:(BOOL)sendsSystemProfile;
|
||||
- (BOOL)sendsSystemProfile;
|
||||
|
||||
- (void)setAutomaticallyDownloadsUpdates:(BOOL)automaticallyDownloadsUpdates;
|
||||
- (BOOL)automaticallyDownloadsUpdates;
|
||||
|
||||
// This IBAction is meant for a main menu item. Hook up any menu item to this action,
|
||||
// and Sparkle will check for updates and report back its findings verbosely.
|
||||
- (IBAction)checkForUpdates:(id)sender;
|
||||
|
||||
// This kicks off an update meant to be programmatically initiated. That is, it will display no UI unless it actually finds an update,
|
||||
// in which case it proceeds as usual. If the fully automated updating is turned on, however, this will invoke that behavior, and if an
|
||||
// update is found, it will be downloaded and prepped for installation.
|
||||
- (void)checkForUpdatesInBackground;
|
||||
|
||||
// Date of last update check. Returns nil if no check has been performed.
|
||||
- (NSDate*)lastUpdateCheckDate;
|
||||
|
||||
// This begins a "probing" check for updates which will not actually offer to update to that version. The delegate methods, though,
|
||||
// (up to updater:didFindValidUpdate: and updaterDidNotFindUpdate:), are called, so you can use that information in your UI.
|
||||
- (void)checkForUpdateInformation;
|
||||
|
||||
// Call this to appropriately schedule or cancel the update checking timer according to the preferences for time interval and automatic checks. This call does not change the date of the next check, but only the internal NSTimer.
|
||||
- (void)resetUpdateCycle;
|
||||
|
||||
- (BOOL)updateInProgress;
|
||||
|
||||
@end
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// SUUpdater Notifications for events that might be interesting to more than just the delegate
|
||||
// The updater will be the notification object
|
||||
// -----------------------------------------------------------------------------
|
||||
extern NSString *const SUUpdaterDidFinishLoadingAppCastNotification;
|
||||
extern NSString *const SUUpdaterDidFindValidUpdateNotification;
|
||||
extern NSString *const SUUpdaterDidNotFindUpdateNotification;
|
||||
extern NSString *const SUUpdaterWillInstallUpdateNotification;
|
||||
extern NSString *const SUUpdaterWillRelaunchApplicationNotification;
|
||||
|
||||
// Key for the SUAppcastItem object in the SUUpdaterDidFindValidUpdateNotification & SUUpdaterWillInstallUpdateNotification userInfos
|
||||
extern NSString *const SUUpdaterAppcastItemNotificationKey;
|
||||
// Key for the SUAppcast object in the SUUpdaterDidFinishLoadingAppCastNotification userInfo
|
||||
extern NSString *const SUUpdaterAppcastNotificationKey;
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// SUUpdater Delegate:
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
@interface NSObject (SUUpdaterDelegateInformalProtocol)
|
||||
|
||||
// Use this to keep Sparkle from popping up e.g. while your setup assistant is showing:
|
||||
- (BOOL)updaterMayCheckForUpdates:(SUUpdater *)bundle;
|
||||
|
||||
// This method allows you to add extra parameters to the appcast URL, potentially based on whether or not Sparkle will also be sending along the system profile. This method should return an array of dictionaries with keys: "key", "value", "displayKey", "displayValue", the latter two being specifically for display to the user.
|
||||
- (NSArray *)feedParametersForUpdater:(SUUpdater *)updater sendingSystemProfile:(BOOL)sendingProfile;
|
||||
|
||||
// Override this to dynamically specify the entire URL.
|
||||
- (NSString*)feedURLStringForUpdater:(SUUpdater*)updater;
|
||||
|
||||
// Use this to override the default behavior for Sparkle prompting the user about automatic update checks.
|
||||
- (BOOL)updaterShouldPromptForPermissionToCheckForUpdates:(SUUpdater *)bundle;
|
||||
|
||||
// Implement this if you want to do some special handling with the appcast once it finishes loading.
|
||||
- (void)updater:(SUUpdater *)updater didFinishLoadingAppcast:(SUAppcast *)appcast;
|
||||
|
||||
// If you're using special logic or extensions in your appcast, implement this to use your own logic for finding
|
||||
// a valid update, if any, in the given appcast.
|
||||
- (SUAppcastItem *)bestValidUpdateInAppcast:(SUAppcast *)appcast forUpdater:(SUUpdater *)bundle;
|
||||
|
||||
// Sent when a valid update is found by the update driver.
|
||||
- (void)updater:(SUUpdater *)updater didFindValidUpdate:(SUAppcastItem *)update;
|
||||
|
||||
// Sent when a valid update is not found.
|
||||
- (void)updaterDidNotFindUpdate:(SUUpdater *)update;
|
||||
|
||||
// Sent immediately before installing the specified update.
|
||||
- (void)updater:(SUUpdater *)updater willInstallUpdate:(SUAppcastItem *)update;
|
||||
|
||||
// Return YES to delay the relaunch until you do some processing; invoke the given NSInvocation to continue.
|
||||
// This is not called if the user didn't relaunch on the previous update, in that case it will immediately
|
||||
// restart.
|
||||
- (BOOL)updater:(SUUpdater *)updater shouldPostponeRelaunchForUpdate:(SUAppcastItem *)update untilInvoking:(NSInvocation *)invocation;
|
||||
|
||||
// Some apps *can not* be relaunched in certain circumstances. They can use this method
|
||||
// to prevent a relaunch "hard":
|
||||
- (BOOL)updaterShouldRelaunchApplication:(SUUpdater *)updater;
|
||||
|
||||
// Called immediately before relaunching.
|
||||
- (void)updaterWillRelaunchApplication:(SUUpdater *)updater;
|
||||
|
||||
// This method allows you to provide a custom version comparator.
|
||||
// If you don't implement this method or return nil, the standard version comparator will be used.
|
||||
- (id <SUVersionComparison>)versionComparatorForUpdater:(SUUpdater *)updater;
|
||||
|
||||
// This method allows you to provide a custom version comparator.
|
||||
// If you don't implement this method or return nil, the standard version displayer will be used.
|
||||
- (id <SUVersionDisplay>)versionDisplayerForUpdater:(SUUpdater *)updater;
|
||||
|
||||
// Returns the path which is used to relaunch the client after the update is installed. By default, the path of the host bundle.
|
||||
- (NSString *)pathToRelaunchForUpdater:(SUUpdater *)updater;
|
||||
|
||||
// Called before and after, respectively, an updater shows a modal alert window, to give the host
|
||||
// the opportunity to hide attached windows etc. that may get in the way:
|
||||
-(void) updaterWillShowModalAlert:(SUUpdater *)updater;
|
||||
-(void) updaterDidShowModalAlert:(SUUpdater *)updater;
|
||||
|
||||
// Called when an update is scheduled to be silently installed on quit.
|
||||
// The invocation can be used to trigger an immediate silent install and relaunch.
|
||||
- (void)updater:(SUUpdater *)updater willInstallUpdateOnQuit:(SUAppcastItem *)update immediateInstallationInvocation:(NSInvocation *)invocation;
|
||||
- (void)updater:(SUUpdater *)updater didCancelInstallUpdateOnQuit:(SUAppcastItem *)update;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Constants:
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
#ifndef DEBUG
|
||||
#define DEBUG 0
|
||||
#endif
|
||||
|
||||
// Define some minimum intervals to avoid DOS-like checking attacks. These are in seconds.
|
||||
#if defined(DEBUG) && DEBUG && 0
|
||||
#define SU_MIN_CHECK_INTERVAL 60
|
||||
#else
|
||||
#define SU_MIN_CHECK_INTERVAL 60*60
|
||||
#endif
|
||||
|
||||
#if defined(DEBUG) && DEBUG && 0
|
||||
#define SU_DEFAULT_CHECK_INTERVAL 60
|
||||
#else
|
||||
#define SU_DEFAULT_CHECK_INTERVAL 60*60*24
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@ -1,29 +0,0 @@
|
||||
//
|
||||
// SUVersionComparisonProtocol.h
|
||||
// Sparkle
|
||||
//
|
||||
// Created by Andy Matuschak on 12/21/07.
|
||||
// Copyright 2007 Andy Matuschak. All rights reserved.
|
||||
//
|
||||
|
||||
#ifndef SUVERSIONCOMPARISONPROTOCOL_H
|
||||
#define SUVERSIONCOMPARISONPROTOCOL_H
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
/*!
|
||||
@protocol
|
||||
@abstract Implement this protocol to provide version comparison facilities for Sparkle.
|
||||
*/
|
||||
@protocol SUVersionComparison
|
||||
|
||||
/*!
|
||||
@method
|
||||
@abstract An abstract method to compare two version strings.
|
||||
@discussion Should return NSOrderedAscending if b > a, NSOrderedDescending if b < a, and NSOrderedSame if they are equivalent.
|
||||
*/
|
||||
- (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)versionB; // *** MAY BE CALLED ON NON-MAIN THREAD!
|
||||
|
||||
@end
|
||||
|
||||
#endif
|
||||
@ -1,27 +0,0 @@
|
||||
//
|
||||
// SUVersionDisplayProtocol.h
|
||||
// EyeTV
|
||||
//
|
||||
// Created by Uli Kusterer on 08.12.09.
|
||||
// Copyright 2009 Elgato Systems GmbH. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
|
||||
/*!
|
||||
@protocol
|
||||
@abstract Implement this protocol to apply special formatting to the two
|
||||
version numbers.
|
||||
*/
|
||||
@protocol SUVersionDisplay
|
||||
|
||||
/*!
|
||||
@method
|
||||
@abstract An abstract method to format two version strings.
|
||||
@discussion You get both so you can display important distinguishing
|
||||
information, but leave out unnecessary/confusing parts.
|
||||
*/
|
||||
-(void) formatVersion: (NSString**)inOutVersionA andVersion: (NSString**)inOutVersionB;
|
||||
|
||||
@end
|
||||
@ -1,21 +0,0 @@
|
||||
//
|
||||
// Sparkle.h
|
||||
// Sparkle
|
||||
//
|
||||
// Created by Andy Matuschak on 3/16/06. (Modified by CDHW on 23/12/07)
|
||||
// Copyright 2006 Andy Matuschak. All rights reserved.
|
||||
//
|
||||
|
||||
#ifndef SPARKLE_H
|
||||
#define SPARKLE_H
|
||||
|
||||
// This list should include the shared headers. It doesn't matter if some of them aren't shared (unless
|
||||
// there are name-space collisions) so we can list all of them to start with:
|
||||
|
||||
#import <Sparkle/SUUpdater.h>
|
||||
|
||||
#import <Sparkle/SUAppcast.h>
|
||||
#import <Sparkle/SUAppcastItem.h>
|
||||
#import <Sparkle/SUVersionComparisonProtocol.h>
|
||||
|
||||
#endif
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,38 +0,0 @@
|
||||
Copyright (c) 2006 Andy Matuschak
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
=================
|
||||
EXTERNAL LICENSES
|
||||
=================
|
||||
|
||||
License for bspatch.c and bsdiff.c, from bsdiff 4.3 (<http://www.daemonology.net/bsdiff/>:
|
||||
/*-
|
||||
* Copyright 2003-2005 Colin Percival
|
||||
* All rights reserved
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted providing that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
@ -1,182 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>ADP2,1</key>
|
||||
<string>Developer Transition Kit</string>
|
||||
<key>iMac1,1</key>
|
||||
<string>iMac G3 (Rev A-D)</string>
|
||||
<key>iMac4,1</key>
|
||||
<string>iMac (Core Duo)</string>
|
||||
<key>iMac4,2</key>
|
||||
<string>iMac for Education (17-inch, Core Duo)</string>
|
||||
<key>iMac5,1</key>
|
||||
<string>iMac (Core 2 Duo, 17 or 20 inch, SuperDrive)</string>
|
||||
<key>iMac5,2</key>
|
||||
<string>iMac (Core 2 Duo, 17 inch, Combo Drive)</string>
|
||||
<key>iMac6,1</key>
|
||||
<string>iMac (Core 2 Duo, 24 inch, SuperDrive)</string>
|
||||
<key>iMac8,1</key>
|
||||
<string>iMac (April 2008)</string>
|
||||
<key>MacBook1,1</key>
|
||||
<string>MacBook (Core Duo)</string>
|
||||
<key>MacBook2,1</key>
|
||||
<string>MacBook (Core 2 Duo)</string>
|
||||
<key>MacBook4,1</key>
|
||||
<string>MacBook (Core 2 Duo Feb 2008)</string>
|
||||
<key>MacBookAir1,1</key>
|
||||
<string>MacBook Air (January 2008)</string>
|
||||
<key>MacBookAir2,1</key>
|
||||
<string>MacBook Air (June 2009)</string>
|
||||
<key>MacBookAir3,1</key>
|
||||
<string>MacBook Air (October 2010)</string>
|
||||
<key>MacBookPro1,1</key>
|
||||
<string>MacBook Pro Core Duo (15-inch)</string>
|
||||
<key>MacBookPro1,2</key>
|
||||
<string>MacBook Pro Core Duo (17-inch)</string>
|
||||
<key>MacBookPro2,1</key>
|
||||
<string>MacBook Pro Core 2 Duo (17-inch)</string>
|
||||
<key>MacBookPro2,2</key>
|
||||
<string>MacBook Pro Core 2 Duo (15-inch)</string>
|
||||
<key>MacBookPro3,1</key>
|
||||
<string>MacBook Pro Core 2 Duo (15-inch LED, Core 2 Duo)</string>
|
||||
<key>MacBookPro3,2</key>
|
||||
<string>MacBook Pro Core 2 Duo (17-inch HD, Core 2 Duo)</string>
|
||||
<key>MacBookPro4,1</key>
|
||||
<string>MacBook Pro (Core 2 Duo Feb 2008)</string>
|
||||
<key>Macmini1,1</key>
|
||||
<string>Mac Mini (Core Solo/Duo)</string>
|
||||
<key>MacPro1,1</key>
|
||||
<string>Mac Pro (four-core)</string>
|
||||
<key>MacPro2,1</key>
|
||||
<string>Mac Pro (eight-core)</string>
|
||||
<key>MacPro3,1</key>
|
||||
<string>Mac Pro (January 2008 4- or 8- core "Harpertown")</string>
|
||||
<key>MacPro4,1</key>
|
||||
<string>Mac Pro (March 2009)</string>
|
||||
<key>MacPro5,1</key>
|
||||
<string>Mac Pro (August 2010)</string>
|
||||
<key>PowerBook1,1</key>
|
||||
<string>PowerBook G3</string>
|
||||
<key>PowerBook2,1</key>
|
||||
<string>iBook G3</string>
|
||||
<key>PowerBook2,2</key>
|
||||
<string>iBook G3 (FireWire)</string>
|
||||
<key>PowerBook2,3</key>
|
||||
<string>iBook G3</string>
|
||||
<key>PowerBook2,4</key>
|
||||
<string>iBook G3</string>
|
||||
<key>PowerBook3,1</key>
|
||||
<string>PowerBook G3 (FireWire)</string>
|
||||
<key>PowerBook3,2</key>
|
||||
<string>PowerBook G4</string>
|
||||
<key>PowerBook3,3</key>
|
||||
<string>PowerBook G4 (Gigabit Ethernet)</string>
|
||||
<key>PowerBook3,4</key>
|
||||
<string>PowerBook G4 (DVI)</string>
|
||||
<key>PowerBook3,5</key>
|
||||
<string>PowerBook G4 (1GHz / 867MHz)</string>
|
||||
<key>PowerBook4,1</key>
|
||||
<string>iBook G3 (Dual USB, Late 2001)</string>
|
||||
<key>PowerBook4,2</key>
|
||||
<string>iBook G3 (16MB VRAM)</string>
|
||||
<key>PowerBook4,3</key>
|
||||
<string>iBook G3 Opaque 16MB VRAM, 32MB VRAM, Early 2003)</string>
|
||||
<key>PowerBook5,1</key>
|
||||
<string>PowerBook G4 (17 inch)</string>
|
||||
<key>PowerBook5,2</key>
|
||||
<string>PowerBook G4 (15 inch FW 800)</string>
|
||||
<key>PowerBook5,3</key>
|
||||
<string>PowerBook G4 (17-inch 1.33GHz)</string>
|
||||
<key>PowerBook5,4</key>
|
||||
<string>PowerBook G4 (15 inch 1.5/1.33GHz)</string>
|
||||
<key>PowerBook5,5</key>
|
||||
<string>PowerBook G4 (17-inch 1.5GHz)</string>
|
||||
<key>PowerBook5,6</key>
|
||||
<string>PowerBook G4 (15 inch 1.67GHz/1.5GHz)</string>
|
||||
<key>PowerBook5,7</key>
|
||||
<string>PowerBook G4 (17-inch 1.67GHz)</string>
|
||||
<key>PowerBook5,8</key>
|
||||
<string>PowerBook G4 (Double layer SD, 15 inch)</string>
|
||||
<key>PowerBook5,9</key>
|
||||
<string>PowerBook G4 (Double layer SD, 17 inch)</string>
|
||||
<key>PowerBook6,1</key>
|
||||
<string>PowerBook G4 (12 inch)</string>
|
||||
<key>PowerBook6,2</key>
|
||||
<string>PowerBook G4 (12 inch, DVI)</string>
|
||||
<key>PowerBook6,3</key>
|
||||
<string>iBook G4</string>
|
||||
<key>PowerBook6,4</key>
|
||||
<string>PowerBook G4 (12 inch 1.33GHz)</string>
|
||||
<key>PowerBook6,5</key>
|
||||
<string>iBook G4 (Early-Late 2004)</string>
|
||||
<key>PowerBook6,7</key>
|
||||
<string>iBook G4 (Mid 2005)</string>
|
||||
<key>PowerBook6,8</key>
|
||||
<string>PowerBook G4 (12 inch 1.5GHz)</string>
|
||||
<key>PowerMac1,1</key>
|
||||
<string>Power Macintosh G3 (Blue & White)</string>
|
||||
<key>PowerMac1,2</key>
|
||||
<string>Power Macintosh G4 (PCI Graphics)</string>
|
||||
<key>PowerMac10,1</key>
|
||||
<string>Mac Mini G4</string>
|
||||
<key>PowerMac10,2</key>
|
||||
<string>Mac Mini (Late 2005)</string>
|
||||
<key>PowerMac11,2</key>
|
||||
<string>Power Macintosh G5 (Late 2005)</string>
|
||||
<key>PowerMac12,1</key>
|
||||
<string>iMac G5 (iSight)</string>
|
||||
<key>PowerMac2,1</key>
|
||||
<string>iMac G3 (Slot-loading CD-ROM)</string>
|
||||
<key>PowerMac2,2</key>
|
||||
<string>iMac G3 (Summer 2000)</string>
|
||||
<key>PowerMac3,1</key>
|
||||
<string>Power Macintosh G4 (AGP Graphics)</string>
|
||||
<key>PowerMac3,2</key>
|
||||
<string>Power Macintosh G4 (AGP Graphics)</string>
|
||||
<key>PowerMac3,3</key>
|
||||
<string>Power Macintosh G4 (Gigabit Ethernet)</string>
|
||||
<key>PowerMac3,4</key>
|
||||
<string>Power Macintosh G4 (Digital Audio)</string>
|
||||
<key>PowerMac3,5</key>
|
||||
<string>Power Macintosh G4 (Quick Silver)</string>
|
||||
<key>PowerMac3,6</key>
|
||||
<string>Power Macintosh G4 (Mirrored Drive Door)</string>
|
||||
<key>PowerMac4,1</key>
|
||||
<string>iMac G3 (Early/Summer 2001)</string>
|
||||
<key>PowerMac4,2</key>
|
||||
<string>iMac G4 (Flat Panel)</string>
|
||||
<key>PowerMac4,4</key>
|
||||
<string>eMac</string>
|
||||
<key>PowerMac4,5</key>
|
||||
<string>iMac G4 (17-inch Flat Panel)</string>
|
||||
<key>PowerMac5,1</key>
|
||||
<string>Power Macintosh G4 Cube</string>
|
||||
<key>PowerMac6,1</key>
|
||||
<string>iMac G4 (USB 2.0)</string>
|
||||
<key>PowerMac6,3</key>
|
||||
<string>iMac G4 (20-inch Flat Panel)</string>
|
||||
<key>PowerMac6,4</key>
|
||||
<string>eMac (USB 2.0, 2005)</string>
|
||||
<key>PowerMac7,2</key>
|
||||
<string>Power Macintosh G5</string>
|
||||
<key>PowerMac7,3</key>
|
||||
<string>Power Macintosh G5</string>
|
||||
<key>PowerMac8,1</key>
|
||||
<string>iMac G5</string>
|
||||
<key>PowerMac8,2</key>
|
||||
<string>iMac G5 (Ambient Light Sensor)</string>
|
||||
<key>PowerMac9,1</key>
|
||||
<string>Power Macintosh G5 (Late 2005)</string>
|
||||
<key>RackMac1,1</key>
|
||||
<string>Xserve G4</string>
|
||||
<key>RackMac1,2</key>
|
||||
<string>Xserve G4 (slot-loading, cluster node)</string>
|
||||
<key>RackMac3,1</key>
|
||||
<string>Xserve G5</string>
|
||||
<key>Xserve1,1</key>
|
||||
<string>Xserve (Intel Xeon)</string>
|
||||
<key>Xserve2,1</key>
|
||||
<string>Xserve (January 2008 quad-core)</string>
|
||||
</dict>
|
||||
</plist>
|
||||
BIN
Sparkle.framework/Versions/A/Resources/SUStatus.nib
generated
BIN
Sparkle.framework/Versions/A/Resources/SUStatus.nib
generated
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user