Jump to content
Beliyaal

Whats coming in the next version and feature requests

47 posts in this topic

Recommended Posts

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

Share this post


Link to post
Share on other sites
Advertisement

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 :)

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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.. ;)

Share this post


Link to post
Share on other sites

Also wondering if the new version is coming. The current latest version does not work on the new (late 2008) Macbooks.

Share this post


Link to post
Share on other sites

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!

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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 3000

Manual Mode

Is NT

Driver Status: 0

 

C:\Users\X\Desktop\FanControl\Debug>

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites

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).

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×