diff options
| author | David <dbphillipsnz@gmail.com> | 2014-02-14 19:19:01 +1300 | 
|---|---|---|
| committer | David <dbphillipsnz@gmail.com> | 2014-02-14 19:19:01 +1300 | 
| commit | d9732f1e3f32ffbca61260146235bd11b0d26610 (patch) | |
| tree | 2a4a4626df6fd81c7e2b172c9ad58628046bf678 | |
| parent | ee5f4bcd9c2098d9011e4d8424428ee3dca953b3 (diff) | |
| download | paramano-d9732f1e3f32ffbca61260146235bd11b0d26610.tar.xz | |
Battery information working
| -rw-r--r-- | src/bat_tray.c | 26 | ||||
| -rw-r--r-- | src/getbat.c | 92 | 
2 files changed, 58 insertions, 60 deletions
diff --git a/src/bat_tray.c b/src/bat_tray.c index 98c49b1..4a9de89 100644 --- a/src/bat_tray.c +++ b/src/bat_tray.c @@ -38,29 +38,22 @@ static gboolean update_tooltip(GtkStatusIcon* status_icon,gint x,gint y,gboolean  	gchar msg[500];  	memset(msg, '\0', 500); -	//  printf("%i, %i, %i\n", gb_discharging(), gb_charging(), gb_charged()); +	//printf("dis: %i, char: %i, full: %i\n", gb_discharging(), gb_charging(), gb_charged());  	if(gb_discharging())  	{  		gchar time[50];  		memset(time, '\0', 50); -		gb_discharge_time(time); -		sprintf(msg, "Percent Remaining: %i\%\nTime Remaining: %s", gb_percent(), time); -	} - -	else if(gb_charging()) -	{ +		sprintf(msg, "Discharging (%i%% left)", gb_percent()); +	} else if(gb_charging()) {  		gchar time[50];  		memset(time, '\0', 50); -		gb_charge_time(time); -		sprintf(msg, "Percent Charged: %i\%\nTime Remaining: %s", gb_percent(), time); -	} - -	else if(gb_charged()) +		sprintf(msg, "Charging (%i%%)", gb_percent()); +	} else if(gb_charged()) {  		sprintf(msg, "Fully Charged\nAC Plugged In"); - -	else -		sprintf(msg, "Error"); +	} else { +		sprintf(msg, "Unknown Status"); +	}  	bat_tray_set_tooltip(msg);  	gtk_tooltip_set_text(tooltip, tooltip_text); @@ -100,10 +93,11 @@ void bat_tray_update_icon_percent()  		file = g_strconcat(util_get_prefix(), "/share/trayfreq/traybat-", adjusted_percent_string, "-charging.png", NULL);  	}  	else +	{  		file = g_strconcat(util_get_prefix(), "/share/trayfreq/traybat-charged.png", NULL); +	}  	gtk_status_icon_set_from_file(tray, file); -	g_free(file);  }  static gboolean update_icon(gpointer user_data) diff --git a/src/getbat.c b/src/getbat.c index 2e08cd3..ac6a7dd 100644 --- a/src/getbat.c +++ b/src/getbat.c @@ -27,20 +27,29 @@ gint MAX_CAPACITY;  gint WARN_CAPACITY;  gint LOW_CAPACITY; -gchar INFO_PATH[30]; -gchar STATE_PATH[30]; +//gchar INFO_PATH[30]; +gchar CHARGE_VALUE_PATH[40]; +gchar CHARGE_STATE_PATH[40]; +gchar CURRENT_PATH[40];  static gint get_bat_num()  {  	FILE* fd; -	gchar file[30]; +	gchar file[40];  	gint i; -	for(i = 0; i < 3; ++i) +	for(i = 0; i < 3; i++)  	{ -		memset(file, '\0', 30); -		sprintf(file, "/proc/acpi/battery/BAT%i/info", i); +		memset(file, '\0', 40); +		sprintf(file, "/sys/class/power_supply/BAT%i/present", i); +  		if((fd = fopen(file, "r")) != NULL) -		return i; +		{ +			if (fgetc(fd) == '1') +			{ +				fclose(fd); +				return i; +			} +		}  	}  	return -1;  } @@ -56,7 +65,7 @@ static gint get_int(char* line)  	return 1;  } -static gint get_int_value_from_file(const gchar* path, const gchar* label, int label_size) +static gint get_int_value_from_file(const gchar* path)  {  	FILE* fd;  	gchar buff[100]; @@ -65,14 +74,9 @@ static gint get_int_value_from_file(const gchar* path, const gchar* label, int l  	if(!(fd = fopen(path, "r")))  		return -1; -	while(fgets(buff, 100, fd)!= NULL) -	{ -		if(strncmp(label, buff, label_size) == 0) -		{ -			value = get_int(buff); -			break; -		} -	} +	if (fgets(buff, 100, fd)) +		value = get_int(buff); +  	fclose(fd);  	return value;  } @@ -100,13 +104,15 @@ static gboolean file_has_line(const gchar* path, const gchar* line)  gboolean gb_init()  {  	BAT_NUM = get_bat_num(); -	sprintf(INFO_PATH, "/proc/acpi/battery/BAT%i/info", gb_number()); -	sprintf(STATE_PATH, "/proc/acpi/battery/BAT%i/state", gb_number()); +	//sprintf(INFO_PATH, "/proc/acpi/battery/BAT%i/info", gb_number()); +	sprintf(CHARGE_VALUE_PATH, "/sys/class/power_supply/BAT%i/capacity", gb_number()); +	sprintf(CHARGE_STATE_PATH, "/sys/class/power_supply/BAT%i/status", gb_number()); +	sprintf(CURRENT_PATH, "/sys/class/power_supply/BAT%i/charge_now", gb_number());  	FILE* fd;  	gchar buff[100]; -	if(!(fd = fopen(INFO_PATH, "r"))) +	/*if(!(fd = fopen(INFO_PATH, "r")))  		return FALSE;  	while(fgets(buff, 100, fd)!= NULL) @@ -120,44 +126,38 @@ gboolean gb_init()  		else if(strncmp("present:                 no",buff, 27) == 0)  			return FALSE;  	} -	fclose(fd); +	fclose(fd);*/  	return TRUE;  }  /* To do: replace with '#define's */ -gint gb_current_capacity() -{ -	return get_int_value_from_file(STATE_PATH, "remaining capacity:", 19); -} -  gint gb_current_rate()  { -	return get_int_value_from_file(STATE_PATH, "present rate:", 13); +	return get_int_value_from_file(CURRENT_PATH); +	return 0;  }  gboolean gb_discharging()  { -	return file_has_line(STATE_PATH, "discharging"); +	return file_has_line(CHARGE_STATE_PATH, "Discharging");  }  gboolean gb_charged()  { -	return file_has_line(STATE_PATH, "charged"); +	return file_has_line(CHARGE_STATE_PATH, "Full");  }  gboolean gb_charging()  { -	if(!file_has_line(STATE_PATH, "discharging") && !file_has_line(STATE_PATH, "charged")) -		return TRUE; -	return FALSE; +	return file_has_line(CHARGE_STATE_PATH, "Charging");  }  gint gb_number()  {  	return BAT_NUM;  } - +/*  gint gb_max_capacity()  {  	return MAX_CAPACITY; @@ -171,35 +171,39 @@ gint gb_warn_capacity()  gint gb_low_capacity()  {  	return LOW_CAPACITY; -} +}*/  gint gb_percent()  { +	return get_int_value_from_file(CHARGE_VALUE_PATH); +	/*  	int percent, max_capacity;  	if ( (max_capacity = gb_max_capacity()) == 0 )  		return 0;  	percent = (gb_current_capacity() * 100) /  max_capacity;  	if (percent > 100)  		percent = 100; -	return percent; +	return percent;*/  } - -void gb_discharge_time(gchar* time) +/* +void gb_time(gchar* time)  { -	float ftime = (float)gb_current_capacity() / (float)gb_current_rate(); -	float minutes = ((float)ftime - (int)ftime) * (float)60; -	if(minutes < 10) -		sprintf(time, "%i:0%i", (int)ftime, (int)minutes); -	else -		sprintf(time, "%i:%i", (int)ftime, (int)minutes); +	float minutes = (float)gb_current_rate()/1000; + +	//float minutes = ftime/60; + +	//if(minutes < 10) +		sprintf(time, "%i", (int)minutes); +	//else +	//	sprintf(time, "%i:%i", (int)ftime, (int)minutes);  }  void gb_charge_time(gchar* time)  { -	float ftime = ((float)gb_max_capacity() - (float)gb_current_capacity()) / (float)gb_current_rate(); +	float ftime = ((float)gb_max_capacity() - (float)gb_percent()) / (float)gb_current_rate();  	float minutes = ((float)ftime - (int)ftime) * (float)60;  	if(minutes < 10)  		sprintf(time, "%i:0%i", (int)ftime, (int)minutes);  	else  		sprintf(time, "%i:%i", (int)ftime, (int)minutes); -}
\ No newline at end of file +}*/
\ No newline at end of file  | 
