Add FreeBSD support for temperature and battery components
This commit is contained in:
		
				
					committed by
					
						
						Aaron Marcher
					
				
			
			
				
	
			
			
			
						parent
						
							dd7f1896aa
						
					
				
				
					commit
					ec306623df
				
			@@ -195,4 +195,57 @@
 | 
			
		||||
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
#elif defined(__FreeBSD__)
 | 
			
		||||
	#include <sys/sysctl.h>
 | 
			
		||||
 | 
			
		||||
	const char *
 | 
			
		||||
	battery_perc(const char *unused)
 | 
			
		||||
	{
 | 
			
		||||
		int cap;
 | 
			
		||||
		size_t len;
 | 
			
		||||
 | 
			
		||||
		len = sizeof(cap);
 | 
			
		||||
		if (sysctlbyname("hw.acpi.battery.life", &cap, &len, NULL, 0) == -1
 | 
			
		||||
				|| !len)
 | 
			
		||||
			return NULL;
 | 
			
		||||
 | 
			
		||||
		return bprintf("%d", cap);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const char *
 | 
			
		||||
	battery_state(const char *unused)
 | 
			
		||||
	{
 | 
			
		||||
		int state;
 | 
			
		||||
		size_t len;
 | 
			
		||||
 | 
			
		||||
		len = sizeof(state);
 | 
			
		||||
		if (sysctlbyname("hw.acpi.battery.state", &state, &len, NULL, 0) == -1
 | 
			
		||||
				|| !len)
 | 
			
		||||
			return NULL;
 | 
			
		||||
 | 
			
		||||
		switch(state) {
 | 
			
		||||
			case 0:
 | 
			
		||||
			case 2:
 | 
			
		||||
				return "+";
 | 
			
		||||
			case 1:
 | 
			
		||||
				return "-";
 | 
			
		||||
			default:
 | 
			
		||||
				return "?";
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const char *
 | 
			
		||||
	battery_remaining(const char *unused)
 | 
			
		||||
	{
 | 
			
		||||
		int rem;
 | 
			
		||||
		size_t len;
 | 
			
		||||
 | 
			
		||||
		len = sizeof(rem);
 | 
			
		||||
		if (sysctlbyname("hw.acpi.battery.time", &rem, &len, NULL, 0) == -1
 | 
			
		||||
				|| !len
 | 
			
		||||
				|| rem == -1)
 | 
			
		||||
			return NULL;
 | 
			
		||||
 | 
			
		||||
		return bprintf("%uh %02um", rem / 60, rem % 60);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@
 | 
			
		||||
 | 
			
		||||
#include "../util.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#if defined(__linux__)
 | 
			
		||||
	#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
@@ -46,4 +47,25 @@
 | 
			
		||||
		/* kelvin to celsius */
 | 
			
		||||
		return bprintf("%d", (temp.value - 273150000) / 1E6);
 | 
			
		||||
	}
 | 
			
		||||
#elif defined(__FreeBSD__)
 | 
			
		||||
	#include <stdio.h>
 | 
			
		||||
	#include <stdlib.h>
 | 
			
		||||
	#include <sys/sysctl.h>
 | 
			
		||||
 | 
			
		||||
	const char *
 | 
			
		||||
	temp(const char *zone)
 | 
			
		||||
	{
 | 
			
		||||
		char buf[256];
 | 
			
		||||
		int temp;
 | 
			
		||||
		size_t len;
 | 
			
		||||
 | 
			
		||||
		len = sizeof(temp);
 | 
			
		||||
		snprintf(buf, sizeof(buf), "hw.acpi.thermal.%s.temperature", zone);
 | 
			
		||||
		if (sysctlbyname(buf, &temp, &len, NULL, 0) == -1
 | 
			
		||||
				|| !len)
 | 
			
		||||
			return NULL;
 | 
			
		||||
 | 
			
		||||
		/* kelvin to decimal celcius */
 | 
			
		||||
		return bprintf("%d.%d", (temp - 2731) / 10, abs((temp - 2731) % 10));
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user