You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							278 lines
						
					
					
						
							6.4 KiB
						
					
					
				
			
		
		
	
	
							278 lines
						
					
					
						
							6.4 KiB
						
					
					
				| # --- SDE-COPYRIGHT-NOTE-BEGIN --- | |
| # This copyright note is auto-generated by ./scripts/Create-CopyPatch. | |
| # | |
| # Filename: package/.../epplets16/epower-acpi.patch | |
| # Copyright (C) 2004 - 2006 The T2 SDE Project | |
| # | |
| # More information can be found in the files COPYING and README. | |
| # | |
| # This patch file is dual-licensed. It is available under the license the | |
| # patched project is licensed under, as long as it is an OpenSource license | |
| # as defined at http://www.opensource.org/ (e.g. BSD, X11) or 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. | |
| # --- SDE-COPYRIGHT-NOTE-END --- | |
| --- epplets-0.7/epplets/E-Power.c	2001-10-13 20:32:19.000000000 +0200 | |
| +++ epplets-0.7-jsaw/epplets/E-Power.c	2005-07-26 00:05:04.000000000 +0200 | |
| @@ -1,22 +1,40 @@ | |
|  #include "epplet.h" | |
|   | |
| +int                use_acpi = 0; | |
| +#define MAX_ACPI_BAT 4 | |
| +struct __acpibat { | |
| +  /* info */ | |
| +  int present[MAX_ACPI_BAT]; | |
| +  int design_capacity[MAX_ACPI_BAT]; | |
| + | |
| +  int last_full_capacity[MAX_ACPI_BAT]; | |
| +  int design_capacity_warning[MAX_ACPI_BAT]; | |
| +  int design_capacity_low[MAX_ACPI_BAT];   | |
| +} acpibat; | |
| + | |
|  int                prev_bat_val = 110; | |
| -int                bat_val = 0; | |
| -int                time_val = 0; | |
| +int                bat_num = 0; | |
| +int                bat_val = 0, ac_stat, bat_stat, bat_flags; | |
| + | |
| +int                up2, time_val = 0; | |
|  int                prev_up[16] =  | |
|  {0, 0, 0, 0, 0, 0, 0, 0,  | |
|     0, 0, 0, 0, 0, 0, 0, 0}; | |
|  int                prev_count = 0; | |
|  Epplet_gadget      b_close, b_suspend, b_sleep,  b_help, image, label; | |
|   | |
| +static void power_setup(void); | |
| + | |
|  static void cb_timer(void *data); | |
|  static void cb_close(void *data); | |
|  static void cb_in(void *data, Window w); | |
|  static void cb_out(void *data, Window w); | |
|  static void cb_help(void *data); | |
|   | |
| -static void | |
| -cb_timer(void *data) | |
| +static int cb_apm(); | |
| +static int cb_acpi(); | |
| + | |
| +static int cb_apm() | |
|  { | |
|     static FILE *f; | |
|   | |
| @@ -24,8 +42,8 @@ | |
|     if (f) | |
|       { | |
|  	char s[256], s1[32], s2[32], s3[32]; | |
| -	int apm_flags, ac_stat, bat_stat, bat_flags; | |
| -	int  i, hours, minutes, up, up2; | |
| +	int apm_flags; | |
| +	int  i, up; | |
|  	char *s_ptr; | |
|  	 | |
|  	fgets(s, 255, f); | |
| @@ -49,13 +67,111 @@ | |
|  	prev_count++; | |
|  	if (prev_count >= 16) | |
|  	   prev_count = 0; | |
| +     } | |
| +} | |
| + | |
| +#define TAG(tag) !strncmp(tag, s, strlen(tag)) | |
| +static int cb_acpi() | |
| +{ | |
| +  FILE *f; | |
| +  char s[256], *s_val; | |
| +  int rate = 0, remain = 0; | |
| + | |
| +  bat_num++; | |
| +  while ((bat_num < MAX_ACPI_BAT) && (acpibat.present[bat_num] < 0)) bat_num++; | |
| +  if (bat_num >= MAX_ACPI_BAT)  | |
| +    bat_num = 0; | |
| + | |
| +  if (acpibat.present[bat_num] <= 0) { | |
| +    bat_flags = 0x80; | |
| +    return 0; | |
| +  }  | |
| + | |
| +  bat_flags = 0x00; | |
| + | |
| +  /* parse state */ | |
| +  snprintf(s, 256, "/proc/acpi/battery/BAT%d/state", bat_num); | |
| +  f = fopen(s, "r"); | |
| +  if (!f) { | |
| +    bat_flags = 0x80; | |
| +    return 0; | |
| +  } | |
| + | |
| +  while (!feof(f)) { | |
| +    if (fgets(s, 256, f)) | |
| +      { | |
| +	s_val = s; | |
| +	while(*s_val != ':') s_val++; s_val++; | |
| +	while((*s_val == ' ')||(*s_val == '\t')) s_val++; | |
|  	 | |
| -        s_ptr = s; | |
| +	/* FIXME "capacity state:" ??? */ | |
| +	if (TAG("charging state:"))  | |
| +	  { | |
| +	    if (!strncmp(s_val, "char", 4)) { | |
| +	      ac_stat = 1; | |
| +	      bat_stat = 3; /* CHARGING */ | |
| +	    } | |
| +	    else { | |
| +	      ac_stat = 0; | |
| +	      bat_stat = 0; | |
| +	    } | |
| +	  } | |
| +	else if (TAG("present rate:")) { | |
| +	  rate = strtol(s_val, NULL, 10); | |
| +	} | |
| +	else if (TAG("remaining capacity:")) { | |
| +	  remain = strtol(s_val, NULL, 10); | |
| +	} | |
| +	else if (TAG("present rate:")) { | |
| +	  rate = strtol(s_val, NULL, 10); | |
| +	} | |
| +      } | |
| +  } | |
| +  fclose(f); | |
| + | |
| +  bat_val = (remain * 100) / acpibat.last_full_capacity[bat_num]; | |
| +  if (bat_stat != 3) { | |
| +    if (remain < acpibat.design_capacity_low[bat_num]) | |
| +      bat_stat = 2; | |
| +    else if (remain < acpibat.design_capacity_warning[bat_num]) | |
| +      bat_stat = 1; | |
| +    else | |
| +      bat_stat = 0; | |
| + | |
| +    time_val = (remain * 3600)/rate; | |
| +  } | |
| +  else { | |
| +    time_val = ((acpibat.last_full_capacity[bat_num]-remain) * 3600)/rate; | |
| +  } | |
| + | |
| +  /*  | |
| +     up2 ???? | |
| +  */ | |
| + | |
| +  return 0; | |
| +} | |
|   | |
| +static void | |
| +cb_timer(void *data) | |
| +{ | |
| +  int fail; | |
| +  char s[256]; | |
| +  char *s_ptr = s; | |
| +  int hours, minutes; | |
| + | |
| +  if (use_acpi) fail = cb_acpi(); | |
| +  else fail = cb_apm(); | |
| + | |
| +  if (!fail)  | |
| +    { | |
| +	/* convert to display */ | |
|          if( bat_flags != 0xff | |
|  	    && bat_flags & 0x80 ) | |
|  	  { | |
| -	    s_ptr += sprintf( s_ptr, "no battery" ); | |
| +	    if (use_acpi) | |
| +	      s_ptr += sprintf( s_ptr, "no bat. [%d]", bat_num ); | |
| +	    else | |
| +	      s_ptr += sprintf( s_ptr, "no battery" ); | |
|  	  } | |
|  	else | |
|  	  { | |
| @@ -97,9 +213,10 @@ | |
|  	    else | |
|  	       s_ptr += sprintf(s_ptr, "%i:%02i", hours, minutes); | |
|            } | |
| +	s_ptr += sprintf( s_ptr, " [%d]", bat_num ); | |
|  	Epplet_change_label(label, s); | |
|   | |
| -	sprintf(s, EROOT"/epplet_data/E-Power//E-Power-Bat-%i.png",  | |
| +	sprintf(s, EROOT"/epplet_data/E-Power/E-Power-Bat-%i.png",  | |
|  		((bat_val + 5) / 10) * 10); | |
|  	Epplet_change_image(image, 44, 24, s); | |
|  	Epplet_timer(cb_timer, NULL, 30.0, "TIMER");    | |
| @@ -170,6 +287,8 @@ | |
|  int | |
|  main(int argc, char **argv) | |
|  { | |
| +  power_setup(); | |
| + | |
|     Epplet_Init("E-Power", "0.1", "Enlightenment Laptop Power Epplet", | |
|  	       3, 3, argc, argv, 0); | |
|     atexit(Epplet_cleanup); | |
| @@ -200,3 +319,69 @@ | |
|     Epplet_Loop(); | |
|     return 0; | |
|  } | |
| + | |
| +static void power_setup(void) | |
| +{ | |
| +  FILE *f; | |
| + | |
| +  f = fopen("/proc/apm", "r"); | |
| +  if (f)  | |
| +    { | |
| +      fclose(f); | |
| +    } | |
| +  else | |
| +    { /* try acpi */ | |
| +      int i; | |
| +      char s[256]; | |
| +      char *s_val; | |
| + | |
| +      memset(&acpibat, 0, sizeof(struct __acpibat)); | |
| +       | |
| +      for(i=0; i<MAX_ACPI_BAT; i++) { | |
| +	snprintf(s, 256, "/proc/acpi/battery/BAT%d/info", i); | |
| +	acpibat.present[i] = -1; | |
| + | |
| +	f = fopen(s, "r"); | |
| +	if (f) | |
| +	  { | |
| +	    use_acpi++; | |
| +			 | |
| +	    while (!feof(f)) { | |
| +	      if (fgets(s, 256, f)) | |
| +		{ | |
| +		  s_val = s; | |
| +		  while(*s_val != ':') s_val++; s_val++; | |
| +		  while((*s_val == ' ')||(*s_val == '\t')) s_val++; | |
| +		   | |
| +		  if (TAG("present:"))  | |
| +		    { | |
| +		      if (!strncmp(s_val, "yes", 3))  | |
| +			acpibat.present[i] = 1; | |
| +		      else | |
| +			acpibat.present[i] = 0; | |
| +		    } | |
| +		  else if (TAG("design capacity:"))  | |
| +		    { | |
| +		      acpibat.design_capacity[i] = strtol(s_val, NULL, 10); | |
| +		    } | |
| +		  else if (TAG("last full capacity:"))  | |
| +		    { | |
| +		      acpibat.last_full_capacity[i] = strtol(s_val, NULL, 10); | |
| +		    } | |
| +		  else if (TAG("design capacity warning:"))  | |
| +		    { | |
| +		      acpibat.design_capacity_warning[i] = strtol(s_val, NULL, 10); | |
| +		    } | |
| +		  else if (TAG("design capacity low:"))  | |
| +		    { | |
| +		      acpibat.design_capacity_low[i] = strtol(s_val, NULL, 10); | |
| +		    } | |
| +		} | |
| + | |
| +	    } | |
| + | |
| +	    fclose(f); | |
| +	  } | |
| +      } | |
| +    } | |
| +}
 | |
| 
 |