Port battery_remaining to Linux
Additionally unify the format of battery_state and uptime
This commit is contained in:
		
							
								
								
									
										2
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								README
									
									
									
									
									
								
							@@ -6,7 +6,7 @@ slstatus is a suckless status monitor for window managers that use WM_NAME
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Features
 | 
					Features
 | 
				
			||||||
--------
 | 
					--------
 | 
				
			||||||
- Battery percentage/state
 | 
					- Battery percentage/state/time left
 | 
				
			||||||
- CPU usage
 | 
					- CPU usage
 | 
				
			||||||
- CPU frequency
 | 
					- CPU frequency
 | 
				
			||||||
- Custom shell commands
 | 
					- Custom shell commands
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -49,8 +49,36 @@
 | 
				
			|||||||
	const char *
 | 
						const char *
 | 
				
			||||||
	battery_remaining(const char *bat)
 | 
						battery_remaining(const char *bat)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		/* TODO: Implement */
 | 
							int charge_now, current_now, m, h;
 | 
				
			||||||
		return NULL;
 | 
							float timeleft;
 | 
				
			||||||
 | 
							char path[PATH_MAX], state[12];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/",
 | 
				
			||||||
 | 
							         bat, "/status");
 | 
				
			||||||
 | 
							if (pscanf(path, "%12s", state) != 1) {
 | 
				
			||||||
 | 
								return NULL;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (!strcmp(state, "Discharging")) {
 | 
				
			||||||
 | 
								snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/",
 | 
				
			||||||
 | 
										 bat, "/charge_now");
 | 
				
			||||||
 | 
								if (pscanf(path, "%i", &charge_now) != 1) {
 | 
				
			||||||
 | 
									return NULL;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/",
 | 
				
			||||||
 | 
										 bat, "/current_now");
 | 
				
			||||||
 | 
								if (pscanf(path, "%i", ¤t_now) != 1) {
 | 
				
			||||||
 | 
									return NULL;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								timeleft = (float)charge_now / (float)current_now;
 | 
				
			||||||
 | 
								h = timeleft;
 | 
				
			||||||
 | 
								m = (timeleft - (float)h) * 60;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								return bprintf("%dh %dm", h, m);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return "";
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#elif defined(__OpenBSD__)
 | 
					#elif defined(__OpenBSD__)
 | 
				
			||||||
	#include <fcntl.h>
 | 
						#include <fcntl.h>
 | 
				
			||||||
@@ -122,7 +150,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		if (load_apm_power_info(&apm_info)) {
 | 
							if (load_apm_power_info(&apm_info)) {
 | 
				
			||||||
			if (apm_info.ac_state != APM_AC_ON) {
 | 
								if (apm_info.ac_state != APM_AC_ON) {
 | 
				
			||||||
				return bprintf("%u:%02u", apm_info.minutes_left / 60,
 | 
									return bprintf("%uh %02um", apm_info.minutes_left / 60,
 | 
				
			||||||
				               apm_info.minutes_left % 60);
 | 
									               apm_info.minutes_left % 60);
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				return "";
 | 
									return "";
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user