1
0
Fork 0
dockapps/wmpower/src/power_management/compal/compal_lib.c
Alexey I. Froloff 792a5d290a Mass update FSF address
Signed-off-by: Alexey I. Froloff <raorn@raorn.name>
2012-06-05 20:50:13 +01:00

182 lines
4.6 KiB
C

/***************************************************************************
compal_lib.c - description
-------------------
begin : Oct 01 2003
copyright : (C) 2003 by Francisco Rodrigo Escobedo Robles
e-mail : frer@pepix.net
***************************************************************************/
/***************************************************************************
* *
* 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., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. *
* *
***************************************************************************/
/***************************************************************************
Many thanks to Soós Péter <sp@osb.hu> and the omke project team
I could never have done this otherwise
***************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <ctype.h>
#include "compal_lib.h"
#include "lib_utils.h"
#include "power_management.h"
/* gets a value from a strtok-ed buffer; for reading from /proc */
char *getvaluefromhash (char *key, char *hash)
{
char *value;
char *lastchar;
for ( ;
NULL != hash && strcmp (key, hash) ;
hash = strtok (NULL, ":\n"))
;
value = strtok (NULL, ":\n");
while (*value == ' ') ++value;
for (lastchar = value + strlen (value) ;
*--lastchar == ' ' ;
*lastchar = '\0')
;
return value;
}
int machine_is_compal (void)
{
FILE *fp = fopen(COMPAL_PROC_FILE_DMI, "r");
char buf [COMPAL_MAX_DMI_INFO + 1];
char *ptr;
char *vendor;
char *prodname;
if (!fp) return 0;
fread (&buf, 1, COMPAL_MAX_DMI_INFO, fp);
fclose (fp);
/* always get the values in order! */
ptr = strtok (buf, ":\n");
vendor = getvaluefromhash ("System Vendor", ptr);
prodname = getvaluefromhash ("Product Name", ptr);
sprintf (compal_model, "%s %s", vendor, prodname);
return 1;
}
int compal_get_fan_status (void)
{
FILE *fp = fopen (COMPAL_PROC_FILE_FAN, "r");
char fan_status[3];
if (!fp) return PM_Error;
if (fscanf (fp, "%*s%*s%2s", fan_status) != 1)
{
fclose (fp);
return PM_Error;
}
fclose (fp);
if (!strcmp (fan_status, "on")) return 1;
return 0;
}
int compal_get_temperature (void)
{
FILE *fp = fopen (COMPAL_PROC_FILE_TEMP, "r");
int result;
if (!fp) return PM_Error;
if (fscanf(fp, "%*s%*s%d", &result) == 1)
{
fclose(fp);
return result;
}
fclose(fp);
return PM_Error;
}
int compal_get_lcd_brightness (void)
{
FILE *fp = fopen (COMPAL_PROC_FILE_LCD, "r");
int brightness;
if (!fp) return PM_Error;
if (fscanf (fp, "%*s%*s%d", &brightness) == 1)
{
fclose (fp);
return brightness;
}
fclose (fp);
return PM_Error;
}
int compal_set_lcd_brightness (int brightness)
{
FILE *fp = fopen (COMPAL_PROC_FILE_LCD, "w");
if (!fp) return PM_Error;
if (brightness < COMPAL_LCD_MIN) brightness = COMPAL_LCD_MIN;
if (brightness > COMPAL_LCD_MAX) brightness = COMPAL_LCD_MAX;
if (maxBrightness != -1 && brightness > maxBrightness) brightness = maxBrightness;
if (minBrightness != -1 && brightness < minBrightness) brightness = minBrightness;
fprintf (fp, "%i", brightness);
fclose (fp);
return 0;
}
void Compal_lcdBrightness_UpOneStep (void)
{
compal_set_lcd_brightness (compal_get_lcd_brightness () + 1);
}
void Compal_lcdBrightness_DownOneStep (void)
{
compal_set_lcd_brightness (compal_get_lcd_brightness () - 1);
}