Lines 1-144
Link Here
|
1 |
Index: src/battery/battery.c |
|
|
2 |
=================================================================== |
3 |
--- src/battery/battery.c (Revision 514) |
4 |
+++ src/battery/battery.c (Revision 515) |
5 |
@@ -24,13 +24,18 @@ |
6 |
#include <cairo-xlib.h> |
7 |
#include <pango/pangocairo.h> |
8 |
|
9 |
-#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__) |
10 |
+#if defined(__OpenBSD__) || defined(__NetBSD__) |
11 |
#include <machine/apmvar.h> |
12 |
#include <err.h> |
13 |
#include <sys/ioctl.h> |
14 |
#include <unistd.h> |
15 |
#endif |
16 |
|
17 |
+#if defined(__FreeBSD__) |
18 |
+#include <sys/types.h> |
19 |
+#include <sys/sysctl.h> |
20 |
+#endif |
21 |
+ |
22 |
#include "window.h" |
23 |
#include "server.h" |
24 |
#include "area.h" |
25 |
@@ -59,11 +64,10 @@ |
26 |
char *path_current_now; |
27 |
char *path_status; |
28 |
|
29 |
-#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__) |
30 |
+#if defined(__OpenBSD__) || defined(__NetBSD__) |
31 |
int apm_fd; |
32 |
#endif |
33 |
|
34 |
- |
35 |
void update_batterys(void* arg) |
36 |
{ |
37 |
int i; |
38 |
@@ -103,7 +107,7 @@ |
39 |
path_energy_full = 0; |
40 |
path_current_now = 0; |
41 |
path_status = 0; |
42 |
-#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__) |
43 |
+#if defined(__OpenBSD__) || defined(__NetBSD__) |
44 |
apm_fd = -1; |
45 |
#endif |
46 |
} |
47 |
@@ -118,7 +122,7 @@ |
48 |
if (path_status) g_free(path_status); |
49 |
if (battery_low_cmd) g_free(battery_low_cmd); |
50 |
|
51 |
-#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__) |
52 |
+#if defined(__OpenBSD__) || defined(__NetBSD__) |
53 |
if ((apm_fd != -1) && (close(apm_fd) == -1)) |
54 |
warn("cannot close /dev/apm"); |
55 |
#endif |
56 |
@@ -129,7 +133,7 @@ |
57 |
{ |
58 |
if (!battery_enabled) return; |
59 |
|
60 |
-#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__) |
61 |
+#if defined(__OpenBSD__) || defined(__NetBSD__) |
62 |
apm_fd = open("/dev/apm", O_RDONLY); |
63 |
if (apm_fd < 0) { |
64 |
warn("init_battery: failed to open /dev/apm."); |
65 |
@@ -137,7 +141,7 @@ |
66 |
return; |
67 |
} |
68 |
|
69 |
-#else |
70 |
+#elif !defined(__FreeBSD__) |
71 |
// check battery |
72 |
GDir *directory = 0; |
73 |
GError *error = NULL; |
74 |
@@ -258,17 +262,21 @@ |
75 |
|
76 |
|
77 |
void update_battery() { |
78 |
-#if !defined(__OpenBSD__) && !defined(__FreeBSD__) && !defined(__NetBSD__) |
79 |
+#if !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(__FreeBSD__) |
80 |
// unused on OpenBSD, silence compiler warnings |
81 |
FILE *fp; |
82 |
char tmp[25]; |
83 |
int64_t current_now = 0; |
84 |
#endif |
85 |
+#if defined(__FreeBSD__) |
86 |
+ int sysctl_out = 0; |
87 |
+ size_t len = 0; |
88 |
+#endif |
89 |
int64_t energy_now = 0, energy_full = 0; |
90 |
int seconds = 0; |
91 |
int8_t new_percentage = 0; |
92 |
|
93 |
-#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__) |
94 |
+#if defined(__OpenBSD__) || defined(__NetBSD__) |
95 |
struct apm_power_info info; |
96 |
if (ioctl(apm_fd, APM_IOC_GETPOWER, &(info)) < 0) |
97 |
warn("power update: APM_IOC_GETPOWER"); |
98 |
@@ -298,6 +306,45 @@ |
99 |
|
100 |
new_percentage = info.battery_life; |
101 |
|
102 |
+#elif defined(__FreeBSD__) |
103 |
+ len = sizeof(sysctl_out); |
104 |
+ |
105 |
+ if (sysctlbyname("hw.acpi.battery.state", &sysctl_out, &len, NULL, 0) != 0) |
106 |
+ fprintf(stderr, "power update: no such sysctl"); |
107 |
+ |
108 |
+ // attemp to map the battery state to linux |
109 |
+ battery_state.state = BATTERY_UNKNOWN; |
110 |
+ |
111 |
+ switch(sysctl_out) { |
112 |
+ case 1: |
113 |
+ battery_state.state = BATTERY_DISCHARGING; |
114 |
+ break; |
115 |
+ case 2: |
116 |
+ battery_state.state = BATTERY_CHARGING; |
117 |
+ break; |
118 |
+ default: |
119 |
+ battery_state.state = BATTERY_FULL; |
120 |
+ break; |
121 |
+ } |
122 |
+ |
123 |
+ // no mapping for freebsd |
124 |
+ energy_full = 0; |
125 |
+ energy_now = 0; |
126 |
+ |
127 |
+ if (sysctlbyname("hw.acpi.battery.time", &sysctl_out, &len, NULL, 0) != 0) |
128 |
+ seconds = -1; |
129 |
+ else |
130 |
+ seconds = sysctl_out * 60; |
131 |
+ |
132 |
+ // charging or error |
133 |
+ if (seconds < 0) |
134 |
+ seconds = 0; |
135 |
+ |
136 |
+ if (sysctlbyname("hw.acpi.battery.life", &sysctl_out, &len, NULL, 0) != 0) |
137 |
+ new_percentage = -1; |
138 |
+ else |
139 |
+ new_percentage = sysctl_out; |
140 |
+ |
141 |
#else |
142 |
fp = fopen(path_status, "r"); |
143 |
if(fp != NULL) { |
144 |
|