OBJ_upspeedgraph,
OBJ_uptime,
OBJ_uptime_short,
+#ifdef __FreeBSD__
+ OBJ_apm_adapter,
+ OBJ_apm_battery_time,
+ OBJ_apm_battery_life,
+#endif /* __FreeBSD__ */
#ifdef SETI
OBJ_seti_prog,
OBJ_seti_progbar,
}
END OBJ(uptime_short, INFO_UPTIME) END OBJ(uptime, INFO_UPTIME) END
OBJ(adt746xcpu, 0) END OBJ(adt746xfan, 0) END
+#ifdef __FreeBSD__
+ OBJ(apm_adapter, 0) END
+ OBJ(apm_battery_life, 0) END
+ OBJ(apm_battery_time, 0) END
+#endif /* __FreeBSD__ */
#ifdef SETI
OBJ(seti_prog, INFO_SETI) END OBJ(seti_progbar, INFO_SETI)
(void) scan_bar(arg, &obj->data.pair.a, &obj->data.pair.b);
format_seconds(p, n, (int) cur->uptime);
}
+#ifdef __FreeBSD__
+ OBJ(apm_adapter) {
+ snprintf(p, n, "%s", get_apm_adapter());
+ }
+ OBJ(apm_battery_life) {
+ char *msg;
+ msg = get_apm_battery_life();
+ snprintf(p, n, "%s", msg);
+ free(msg);
+ }
+ OBJ(apm_battery_time) {
+ char *msg;
+ msg = get_apm_battery_time();
+ snprintf(p, n, "%s", msg);
+ free(msg);
+ }
+#endif /* __FreeBSD__ */
#ifdef SETI
OBJ(seti_prog) {
snprintf(p, n, "%.2f",
#endif
#endif /* X11 */
+#if defined(__FreeBSD__)
+#include <machine/apm_bios.h>
+#endif /* __FreeBSD__ */
+
#define TOP_CPU 1
#define TOP_NAME 2
#define TOP_PID 3
void update_seti();
#endif
+/* in freebsd.c */
+#ifdef __FreeBSD__
+int apm_getinfo(int fd, apm_info_t aip);
+char *get_apm_adapter(void);
+char *get_apm_battery_life(void);
+char *get_apm_battery_time(void);
+#endif
/* in mpd.c */
#ifdef MPD
} else
return;
}
+
+#define APMDEV "/dev/apm"
+#define APM_UNKNOWN 255
+
+int apm_getinfo(int fd, apm_info_t aip)
+{
+ if (ioctl(fd, APMIO_GETINFO, aip) == -1)
+ return -1;
+
+ return 0;
+}
+
+char *get_apm_adapter()
+{
+ int fd;
+ struct apm_info info;
+
+ fd = open(APMDEV, O_RDONLY);
+ if(fd < 0)
+ return "ERR";
+
+ if(apm_getinfo(fd, &info) != 0 ) {
+ close(fd);
+ return "ERR";
+ }
+ close(fd);
+
+ switch(info.ai_acline) {
+ case 0:
+ return "off-line";
+ break;
+ case 1:
+ if(info.ai_batt_stat == 3)
+ return "charging";
+ else
+ return "on-line";
+ break;
+ default:
+ return "unknown";
+ break;
+ }
+}
+
+char *get_apm_battery_life()
+{
+ int fd;
+ u_int batt_life;
+ struct apm_info info;
+ char *out;
+
+ out = (char *)calloc(16, sizeof(char));
+
+
+ fd = open(APMDEV, O_RDONLY);
+ if(fd < 0) {
+ strncpy(out, "ERR", 16);
+ return out;
+ }
+
+ if(apm_getinfo(fd, &info) != 0 ) {
+ close(fd);
+ strncpy(out, "ERR", 16);
+ return out;
+ }
+ close(fd);
+
+ batt_life = info.ai_batt_life;
+ if (batt_life == APM_UNKNOWN)
+ strncpy(out, "unknown", 16);
+ else if (batt_life <= 100) {
+ snprintf(out, 20,"%d%%", batt_life);
+ return out;
+ }
+ else
+ strncpy(out, "ERR", 16);
+
+ return out;
+}
+
+char *get_apm_battery_time()
+{
+ int fd;
+ int batt_time;
+ int h, m, s;
+ struct apm_info info;
+ char *out;
+
+ out = (char *)calloc(16, sizeof(char));
+
+ fd = open(APMDEV, O_RDONLY);
+ if(fd < 0) {
+ strncpy(out, "ERR", 16);
+ return out;
+ }
+
+ if(apm_getinfo(fd, &info) != 0 ) {
+ close(fd);
+ strncpy(out, "ERR", 16);
+ return out;
+ }
+ close(fd);
+
+ batt_time = info.ai_batt_time;
+
+ if (batt_time == -1)
+ strncpy(out, "unknown", 16);
+ else {
+ h = batt_time;
+ s = h % 60;
+ h /= 60;
+ m = h % 60;
+ h /= 60;
+ snprintf(out, 16, "%2d:%02d:%02d", h, m, s);
+ }
+
+ return out;
+}