/* Main function */ int main() { Machine mach; double A, k; init(&mach); k = (log(mach.fan.max_speed) - log(mach.fan.min_speed)) / (mach.high_temp - mach.low_temp); A = mach.fan.max_speed * exp(-(mach.high_temp * k)); while(1) { mach.temp = get_temp(mach.cores); mach.fan.speed = calc_fan_speed(mach, A, k); if(mach.fan.old_speed != mach.fan.speed) { set_fan_speed(mach.fan.speed); log_fan_speed(mach.fan.speed, mach.temp); mach.fan.old_speed = mach.fan.speed; mach.old_temp = mach.temp; } sleep(mach.polling_interval); } return SUCCESS; }
int main(int argc, char * const argv[]){ /* Parse the command line arguments */ MFC.fork = TRUE; parse_options(argc, argv); signal(SIGHUP,Signal_Handler); /* hangup signal */ signal(SIGTERM,Signal_Handler); /* software termination signal from kill */ struct timespec timx,tim1; openlog("mfc-daemon", LOG_PID, LOG_DAEMON); MFC.syslog = TRUE; /* check machine and pidfile*/ MFC.total_cpus = check_cpu(); MFC.total_fans = check_fan(); check_pidfile(); write_pidfile(); MFC.pidfile = TRUE; if (MFC.fork) { start_daemon(); } int fan; for (fan = 1; fan <= MFC.total_fans; ++fan) { write_fan_manual(fan, 1); } tim1.tv_sec = TV_SEC; tim1.tv_nsec = TV_NSEC; //init int wr_manual=0; int change_number=0; int old_fan_speed=-1; INFO("Start"); int temp = get_cpu_temperature(); int old_temp_change = 0; int fan_speed=GET_FAN_SPEED(temp); fan_speed=set_min_max_fan_speed(fan_speed); for (fan = 1; fan <= MFC.total_fans; ++fan) { write_fan_speed(fan, fan_speed); } while (1){ wr_manual++; if (wr_manual==9){ for (fan = 1; fan <= MFC.total_fans; ++fan) { write_fan_manual(fan, 1); } wr_manual=0; } temp = get_cpu_temperature(); int diff = abs(temp - old_temp_change); if (diff >= 2){ // temp = average of both cpu's fan_speed=GET_FAN_SPEED(temp); fan_speed=set_min_max_fan_speed(fan_speed); if (fan_speed!=old_fan_speed){ for (fan = 1; fan <= MFC.total_fans; ++fan) { write_fan_speed(fan, fan_speed); } change_number=log_fan_speed(fan_speed,change_number,temp); old_fan_speed=fan_speed; } old_temp_change = temp; } if (nanosleep(&tim1,&timx) == -1){ QUIT_DAEMON("Error nanosleep"); } } }