devellison Posted July 7, 2008 Share Posted July 7, 2008 I'm using IR just for the fan control - apparently I've got one of the thermal-paste-caked MacBook Pros and was having constant crashes under Windows XP due to overheating. Lifting the back of the MBP off the table, removing aftermarket covers I had put on to prevent scratches, and setting the fans to run high with IR appears to have solved the problem. As far as future requests - I'd love to see more in the fan control / temperature readout department. Maybe splitting it into it's own tab or app and cleaning up the controls/displays (e.g. showing requested fan speed next to actual by the control rather than in a values window, adding units (RPM), adding a more easily readable temperature gauge with a history - maybe like nTune's TaskManager ripoff display, allowing a curve map to be set between temperature and fan speed, etc.). Anyway, thanks much for IR! Cheers, Mike Link to comment Share on other sites More sharing options...
RoninXI Posted September 6, 2008 Share Posted September 6, 2008 I know others are requesting this as well but I would really like fan control as a separate app. I have all kinds of problems with IR Link to comment Share on other sites More sharing options...
Jo Shmo Posted October 1, 2008 Share Posted October 1, 2008 Hi there. Just to add to the requests above, **please please please** release just a standalone Fan Control app. I have no need for the other functions of Input Remapper, leaving the rest to Boot Camp 2.1. I actually tried IR just for Fan Control but uninstalled it due to its other functions. Link to comment Share on other sites More sharing options...
Andrewiski Posted October 11, 2008 Share Posted October 11, 2008 Please add CPU temps to the systray Icon on roll over or optionaly overlay the icon with the cpu temp. This would allow the adjustment of the fan speed to get it dialed in. If you need or want any help in the development of this app I would be happy to contribute. I am an experinced windows developer in C, C++, C#, and VB. You donated this app so I will donate my time. This is my first Apple since the Apple II days and I only bought it to write an Iphone app so most of the time it will be running XP. Great app. Keep up the good work. Andy Link to comment Share on other sites More sharing options...
defz Posted October 14, 2008 Share Posted October 14, 2008 Just a fan control (like most others). edit: A working download? The site has been down for days Link to comment Share on other sites More sharing options...
Thunder82 Posted October 16, 2008 Share Posted October 16, 2008 Not sure if updates are still being pushed out.. but i would love to have just the fan control as well. I don't use the remapping function at all, it just causes keyboard issues for me. Hopefully your still working on this software.. Link to comment Share on other sites More sharing options...
och Posted December 1, 2008 Share Posted December 1, 2008 Also wondering if the new version is coming. The current latest version does not work on the new (late 2008) Macbooks. Link to comment Share on other sites More sharing options...
peterjwhite Posted December 22, 2008 Share Posted December 22, 2008 Hi, one more request for fan control on the late 2008 aluminum unibody MacBooks. I'll be the first to make a donation via PayPal when you have this working, thanks in advance! Link to comment Share on other sites More sharing options...
Brian Huynh Posted January 23, 2009 Share Posted January 23, 2009 If program can be made to work with Macbook Air 1st Generation and also fan control. I would interested in donating $20 - $30 for a working version. Link to comment Share on other sites More sharing options...
NeverLegal Posted March 16, 2009 Share Posted March 16, 2009 Has anyone found out if it is possible to turn-ON autodim. Working with 10.5.6 on a Latitude D620 Core 2 Duo. Sleep not enabled. Sound almost working (minus mic). 2 Finger-scrolling. The works... AUTODIM!!!!! Can't move on with my life until I figure out if this is possible. Help? NL Link to comment Share on other sites More sharing options...
campliu Posted April 30, 2009 Share Posted April 30, 2009 Hi, friends: I got my own program which a dedicated fan controller. It been tested on my new Mac Mini early 2009 (Windows XP). And my source code is open. Everybody should use this to build up a nice GUI program. NOTE: The program is only a proof of concept. So it only works but lack of functionalities. 1. The program need GIVEIO device driver support. You can get it by install speedfan. Or you can download the standalone package from anywhere. 2. It is a console command line program. Not easy to use, but easy for script. You can add temperature sensor detect function in it. 3. How to get the 'key' definitions of Apple SMC. Please install smcFanControl under OSX. There is a console program in /Application/smcFanControl.app/Contents/Resource/Source. It named 'smc'. Use the command line 'smc -l' to get all 'Key' definitions. 4. For the Apple SMC programming, please refer to Linux Kernel applesmc.c which a kernel extension. It is nice program to communicate with SMC under Linux. The code should help you and me. BTW: Sorry for my poor English. I am from China. If you got better idea, please email me: iam.liuzhong@gmail.com #include "stdlib.h" #include "windows.h" //Console inp and out functions #include "conio.h" #define APPLESMC_DATA_PORT 0x300 /* command/status port used by Apple SMC */ #define APPLESMC_CMD_PORT 0x304 #define APPLESMC_STATUS_MASK 0x0f #define APPLESMC_READ_CMD 0x10 #define APPLESMC_WRITE_CMD 0x11 #define APPLESMC_GET_KEY_BY_INDEX_CMD 0x12 #define APPLESMC_GET_KEY_TYPE_CMD 0x13 SC_HANDLE hSCMan = NULL; BOOL IsWinNT = FALSE; BOOL IsDriverLoaded = FALSE; // Return Value // Meaning enum { DRIVER_ALREADY_INSTALLED=100, //100 Driver is already Installed DRIVER_INSTALL_SUCCESS, //101 DRIVER_INSTALL_FAILURE, //102 DRIVER_ALREADY_UNINSTALLED, //103 DRIVER_UNINSTALL_SUCCESS, //104 DRIVER_UNINSTALL_FAILURE, //105 DRIVER_NOT_INSTALLED, //106 DRIVER_ALREADY_STARTED, //107 DRIVER_IN_USE }; // SCM & GIVEIO control BOOL InitSCM() { if ((hSCMan = OpenSCManager(NULL, NULL,SC_MANAGER_ALL_ACCESS)) == NULL) { printf("ERROR: Can't connect to Service Control Manager.\n"); return FALSE; } return TRUE; } BOOL ShutDownSCM(SC_HANDLE hSCMan) { return CloseServiceHandle(hSCMan); } DWORD DriverInstall(LPSTR lpPath, LPSTR lpDriver) { BOOL dwStatus = 0; SC_HANDLE hService = NULL; // add to service control manager's database if ((hService = CreateService(hSCMan, lpDriver, lpDriver, SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, lpPath, NULL, NULL, NULL, NULL, NULL)) == NULL) dwStatus = GetLastError(); else CloseServiceHandle(hService); return dwStatus; } DWORD DriverRemove(LPSTR lpDriver) { BOOL dwStatus = 0; SC_HANDLE hService = NULL; // get a handle to the service if ((hService = OpenService(hSCMan, lpDriver, SERVICE_ALL_ACCESS)) != NULL) { // remove the driver if (!DeleteService(hService)) dwStatus = GetLastError(); } else dwStatus = GetLastError(); if (hService != NULL) CloseServiceHandle(hService); return dwStatus; } /////////////////////////////////////////////////////////////// // FUNC: GetDriverStatus // DESC: Returns a Bool; 0 -> GiveIO Driver NOT loaded // 1 -> GiveIO Driver LOADED /////////////////////////////////////////////////////////////// int GetDriverStatus() { return IsDriverLoaded; } BOOL AttachDrv() { HANDLE h; h = CreateFile("\\\\.\\giveio", GENERIC_READ, 0, NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL); if(h == INVALID_HANDLE_VALUE) { printf("ERROR: Couldn't access giveio device.\n"); return FALSE; } CloseHandle(h); return TRUE; } BOOL AttachDIO() { OSVERSIONINFO osvi; osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&osvi); IsWinNT = osvi.dwMajorVersion == 3 || osvi.dwMajorVersion == 4 || osvi.dwMajorVersion == 5 || osvi.dwMajorVersion == 6; if(IsWinNT) { //Load the DirectIO Driver and attach it to this process //try opening SCM ; if failed Bail out if(!InitSCM()) return FALSE; //Install the Driver char szDrvPath[MAX_PATH]; GetSystemDirectory(szDrvPath,MAX_PATH); lstrcat(szDrvPath,"\\Drivers\\GiveIO.sys"); DWORD dwRet = DriverInstall(szDrvPath,"giveio"); if(dwRet != 0 && dwRet != 0x00000431) //Success or already installed { printf("ERROR: Could not initialize GiveIO.sys Driver.\n"); return FALSE; } if(AttachDrv()) { IsDriverLoaded = TRUE ; return TRUE ; // Successful PROCESS_ATTACH } else { DriverRemove("giveio"); return FALSE; } } return TRUE; } BOOL DetachDIO() { // Perform any necessary cleanup. //if it is WinNT unload the giveIO driver if(IsWinNT) { DriverRemove("giveio"); IsDriverLoaded = FALSE ; return ShutDownSCM(hSCMan); //No Error Check :-P } return FALSE; } short OutPort( int PortAddress, int PortData ) { short Dummy; Dummy = (short)(_outp( PortAddress, PortData )); return(Dummy); } short InPort( int PortAddress ) { short PortData; PortData = (short)(_inp( PortAddress )); return( PortData ); } int wait_status(short val) { unsigned int i; val = val & APPLESMC_STATUS_MASK; for (i = 0; i < 200; i++) { if ((InPort(APPLESMC_CMD_PORT) & APPLESMC_STATUS_MASK) == val) return 0; Sleep(10); } return -1; } static int applesmc_read_key(const char* key, short* buffer, short len) { int i; OutPort(APPLESMC_CMD_PORT, APPLESMC_READ_CMD); if (wait_status(0x0c)) return -1; for (i = 0; i < 4; i++) { OutPort(APPLESMC_DATA_PORT, key[i]); if (wait_status(0x04)) return -1; } OutPort(APPLESMC_DATA_PORT, len); for (i = 0; i < len; i++) { if (wait_status(0x05)) return -1; buffer[i] = InPort(APPLESMC_DATA_PORT); } return 0; } static int applesmc_write_key(const char* key, short* buffer, short len) { int i; OutPort(APPLESMC_CMD_PORT, APPLESMC_WRITE_CMD); if (wait_status(0x0c)) return -1; for (i = 0; i < 4; i++) { OutPort(APPLESMC_DATA_PORT, key[i]); if (wait_status(0x04)) return -1; } OutPort(APPLESMC_DATA_PORT, len); for (i = 0; i < len; i++) { if (wait_status(0x04)) return -1; OutPort(APPLESMC_DATA_PORT, buffer[i]); } return 0; } int main(int argc, char* argv[]) { short speed[2]; char MINSPEED[5] = "F0Mn"; int st = 0; AttachDIO(); st = GetDriverStatus(); printf("Driver Status: %d\n", st); if (st != 1) return 1; if (argc == 2) { printf("Set the Minimal speed: %s\n", argv[1]); st = atoi(argv[1]); st = st * 4; speed[0] = st >> 8; speed[1] = st & 0x00FF; for (int i = 0; i < 120; i++) { if (applesmc_write_key(MINSPEED, speed, 2) == 0) break; Sleep(1000); } if (i == 120) { printf("Failed, retry again!\n"); return 1; } printf("Update Successful\n"); } for (int i = 0; i < 120; i++) { memset(speed, 0, sizeof(speed)); if (applesmc_read_key(MINSPEED, speed, 2) == 0) break; Sleep(1000); } if (i == 120) { printf("Failed, retry again!\n"); return 1; } st = (speed[0] * 0xFF + speed[1]) / 4; printf("Current Minimal speed: %d\n", st); printf("All OK!\n"); return 0; } Usage: smc [Target minimal fan speed you like] smc.exe Link to comment Share on other sites More sharing options...
lubbbo Posted June 15, 2009 Share Posted June 15, 2009 Hi all, I'm working on campliu project and I've modified his code, following his suggestions, to add some other features. Actually I've also merged some code from the "Extended Fan Control" OSx program to implement these features: 1) Speed setting for 2 MBP unibody fans (CPU and GPU) 2) Speeds fans dinamically updated on the basis of the CPU and GPU temperatures independently. 3) Three working modality: a - Only system information retrieval (fans speeds and temperatures, nothing is set) b - Only minimum speeds fans settings (one shot) c - Fans speeds updated every 3,5 seconds on the basis of CPU and GPU temperature (linear calculation specifying min and max temp and min fan speed. Like Extended Fan Control program.) The program is in a very draft state, it works (WinXP prof 32bit) but there are some problems with temperatures calculations (not aligned with SpeedFan results) and it haven't a GUI to control settings (but I'm working on). The big problem is still present: it is incompatible with BootCamp driver, KbdMgr.exe process must be killed before running this program. It seems that BootCamp driver polls temperatures and fans speeds causing something like hardware deadlocks that freeze the PC for 1 or 2 seconds. The workaround is to kill the KbdMgr.exe setup minumum fan speed and restart KbdMgr.exe (the command from console to kill the process is "TASKKILL /F /IM Kbdmgr.exe"). But dinamically adjusted fans speeds requires the KbdMgr.exe not running at all: so no keyboard special keys mapping :-( Unfortunately InputRemapper doesn't work on my MBP Unibody (April 2009) so I can't use it for keyboard special keys mapping. My main objective is gaming ... so special keys are not necessary, but I desire the perfection ... ;-) I need some help on this issues: 1) Correctly decode CPU and GPU temps 2) Adding keyboard special key mapping to cover BootCamp functionalities 3) GUI making 4) Hardware port timeout settings (probably could be a way to making BootCamp working at the same time) Any suggestion will be very appreciated. Thanks campliu! Contact me at: lubboster@gmail.com Source code and executable in attachment. USAGE: FAN <MinTemp> <MaxTemp> <CPU_RPM> <GPU_RPM> <Debug=0/1/2> or FAN <CPU_RPM> <GPU_RPM> or FAN -i P.S. Damned Visual Studio Express 2008 (more than 1Gb to build a piece of code) ... use MingW gcc instead it works and it's very light (some changes to "conio.h" are required ... if someone needs help I'm here). FAN.exe FanControl.txt Link to comment Share on other sites More sharing options...
someone16 Posted June 18, 2009 Share Posted June 18, 2009 Hi, I have a problem with FAN.exe on Windows Vista x86. It doesn't do anything. I even compiled it by myself and I got the same result. Command line: C:\Users\X\Desktop\FanControl\Debug>FanControl 3000 3000Manual Mode Is NT Driver Status: 0 C:\Users\X\Desktop\FanControl\Debug> Link to comment Share on other sites More sharing options...
Marco Gessler Posted June 19, 2009 Share Posted June 19, 2009 I can work on the GUI... I'll do it and I hope to have it in a couple of days.. Link to comment Share on other sites More sharing options...
lubbbo Posted June 24, 2009 Share Posted June 24, 2009 Hi, I have a problem with FAN.exe on Windows Vista x86. It doesn't do anything. I even compiled it by myself and I got the same result. Command line: Driver Status: 0 means that the program cannot load the GIVEIO.sys Have you installed SpeedFan? You must! It install the GIVEIO.sys needed to comunicate with Apple SMC I/O ports. Hi all, if you are interested in FanControl future evolutions stay tuned here: https://sites.google.com/site/lubbbo/ Thanks to all that would help me with suggestions and testing. My contact: lubboster@gmail.com Link to comment Share on other sites More sharing options...
someone16 Posted June 26, 2009 Share Posted June 26, 2009 Yes, I have Input Remapper installed. I tried LubbosFanControl and when I run it, Windows says "LubbosFanControl.exe doesn't work anymore". And only option I have is to close application. Link to comment Share on other sites More sharing options...
lubbbo Posted June 26, 2009 Share Posted June 26, 2009 if you are interested in FanControl future evolutions stay tuned here: https://sites.google.com/site/lubbbo/ The project has been moved here: https://sourceforge.net/projects/lubbofancontrol/ I need help! Yes, I have Input Remapper installed. I tried LubbosFanControl and when I run it, Windows says "LubbosFanControl.exe doesn't work anymore". And only option I have is to close application. LubbosFanControl is not compatible with InputRemapper and Apple kbdmgr.exe process. They access to the same I/O port causing resource deadlock (or something similar). Try to remove Input Remapper and kill the kbdmgr.exe process manually or with this command: TASKKILL /F /IM kbdmgr,exe For next problems/suggestions/support/help offering please post in new site's forum or in the mailing list here: https://sourceforge.net/projects/lubbofancontrol/ Thanks Link to comment Share on other sites More sharing options...
someone16 Posted June 27, 2009 Share Posted June 27, 2009 I tried this too and I got the same result. Problem details: Problem Event Name: APPCRASH Application Name: LubbosFanControl.exe Application Version: 0.0.0.0 Application Timestamp: 4a436f8b Fault Module Name: MSVCR90.dll Fault Module Version: 9.0.30729.1 Fault Module Timestamp: 488ef6c5 Exception Code: c0000096 Exception Offset: 0006c53b OS Version: 6.0.6000.2.0.0.256.6 Link to comment Share on other sites More sharing options...
lubbbo Posted June 29, 2009 Share Posted June 29, 2009 I tried this too and I got the same result. Download the new 0.0.3 version from https://sourceforge.net/projects/lubbofancontrol/ And please, next time ask me there, in the forum section. I won't be able to check every forums where I posted. Thanks Link to comment Share on other sites More sharing options...
Tazzy Posted September 10, 2009 Share Posted September 10, 2009 Any word on compatibility/support for: - Unibody platform - Snow Leopard's Boot Camp 3.0 - Win7 x64 Thanks! Link to comment Share on other sites More sharing options...
trebuin Posted September 25, 2009 Share Posted September 25, 2009 Any word on compatibility/support for: - Unibody platform - Snow Leopard's Boot Camp 3.0 - Win7 x64 Thanks! I don't have snow leopard installed, but it works in the old bootcamp without any drivers installed yet. I need iMac support please. It currently reads the CPU as 129C, which is not correct. Link to comment Share on other sites More sharing options...
subatomic Posted May 4, 2010 Share Posted May 4, 2010 only feature(s) I care about is - auto temperature sensing fan control - kb/screen light control to save power - the existing KB remapping functionality I'm currently using MBP13 recently bought 2 wks ago, and InputRemapper works for KB key remapping, Fan minimum speed (no auto temp sesnsing), however the KB/screen light is flickery. I have winxpSP3 and Bootcamp 3.1 I most want an auto fan control based on CPU/GPU temperature. Lubbos doesn't seem to work for me (lubbo, I posted in your forum about this). Link to comment Share on other sites More sharing options...
Recommended Posts