Write information in separate files, define order
wmii will show them with little border between, better than the previous method, where an ascii bar was shown
This commit is contained in:
parent
e94e252089
commit
7fa8c4b9a9
9
config.h
9
config.h
@ -1,7 +1,14 @@
|
||||
const char *wlan_interface = "wlan0";
|
||||
const char *eth_interface = "eth0";
|
||||
const char *wmii_path = "/mnt/wmii/rbar/status";
|
||||
/* wmii_path has to be terminated by slash */
|
||||
const char *wmii_path = "/mnt/wmii/rbar/";
|
||||
const char *time_format = "%d.%m.%Y %H:%M:%S";
|
||||
const char *battery = "/sys/class/power_supply/BAT0/uevent";
|
||||
const char *run_watches[] = {"DHCP", "/var/run/dhclient.pid",
|
||||
"VPN", "/var/run/vpnc*.pid"};
|
||||
|
||||
#define ORDER_WLAN "0"
|
||||
#define ORDER_ETH "1"
|
||||
#define ORDER_BATTERY "2"
|
||||
#define ORDER_LOAD "3"
|
||||
#define ORDER_TIME "4"
|
||||
|
63
wmiistatus.c
63
wmiistatus.c
@ -48,18 +48,55 @@
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <glob.h>
|
||||
#include <dirent.h>
|
||||
|
||||
#include "wmiistatus.h"
|
||||
#include "config.h"
|
||||
|
||||
static void write_to_statusbar(const char *message) {
|
||||
int fd = open(wmii_path, O_RDWR);
|
||||
static void cleanup_rbar_dir() {
|
||||
struct dirent *ent;
|
||||
DIR *dir;
|
||||
char pathbuf[strlen(wmii_path)+256+1];
|
||||
|
||||
if ((dir = opendir(wmii_path)) == NULL)
|
||||
exit(-3);
|
||||
|
||||
while ((ent = readdir(dir)) != NULL) {
|
||||
if (ent->d_type == DT_REG) {
|
||||
sprintf(pathbuf, "%s%s", wmii_path, ent->d_name);
|
||||
unlink(pathbuf);
|
||||
}
|
||||
}
|
||||
|
||||
closedir(dir);
|
||||
}
|
||||
|
||||
static void create_file(const char *name) {
|
||||
char pathbuf[strlen(wmii_path)+256+1];
|
||||
|
||||
sprintf(pathbuf, "%s%s", wmii_path, name);
|
||||
int fd = creat(pathbuf, S_IRUSR | S_IWUSR);
|
||||
if (fd < 0)
|
||||
exit(-4);
|
||||
close(fd);
|
||||
}
|
||||
|
||||
static void write_to_statusbar(const char *name, const char *message) {
|
||||
char pathbuf[strlen(wmii_path)+256+1];
|
||||
|
||||
sprintf(pathbuf, "%s%s", wmii_path, name);
|
||||
int fd = open(pathbuf, O_RDWR);
|
||||
if (fd == -1)
|
||||
exit(-2);
|
||||
write(fd, message, strlen(message));
|
||||
close(fd);
|
||||
}
|
||||
|
||||
static void write_error_to_statusbar(const char *message) {
|
||||
cleanup_rbar_dir();
|
||||
write_to_statusbar("error", message);
|
||||
}
|
||||
|
||||
/*
|
||||
* Write errormessage to statusbar and exit
|
||||
*
|
||||
@ -71,7 +108,7 @@ static void die(const char *fmt, ...) {
|
||||
vsprintf(buffer, fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
write_to_statusbar(buffer);
|
||||
write_error_to_statusbar(buffer);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
@ -277,6 +314,13 @@ int main(void) {
|
||||
*end;
|
||||
unsigned int i;
|
||||
|
||||
cleanup_rbar_dir();
|
||||
create_file(ORDER_WLAN "wlan");
|
||||
create_file(ORDER_ETH "eth");
|
||||
create_file(ORDER_BATTERY "battery");
|
||||
create_file(ORDER_LOAD "load");
|
||||
create_file(ORDER_TIME "time");
|
||||
|
||||
while (1) {
|
||||
memset(output, '\0', sizeof(output));
|
||||
first_push = true;
|
||||
@ -287,13 +331,13 @@ int main(void) {
|
||||
}
|
||||
|
||||
char *wireless_info = get_wireless_info();
|
||||
push_part(wireless_info, strlen(wireless_info));
|
||||
write_to_statusbar(ORDER_WLAN "wlan", wireless_info);
|
||||
|
||||
char *eth_info = get_eth_info();
|
||||
push_part(eth_info, strlen(eth_info));
|
||||
write_to_statusbar(ORDER_ETH "eth", eth_info);
|
||||
|
||||
char *battery_info = get_battery_info();
|
||||
push_part(battery_info, strlen(battery_info));
|
||||
write_to_statusbar(ORDER_BATTERY "battery", battery_info);
|
||||
|
||||
/* Get load */
|
||||
int load_avg = open("/proc/loadavg", O_RDONLY);
|
||||
@ -302,15 +346,14 @@ int main(void) {
|
||||
read(load_avg, part, sizeof(part));
|
||||
close(load_avg);
|
||||
end = skip_character(part, ' ', 3);
|
||||
push_part(part, (end-part));
|
||||
*end = '\0';
|
||||
write_to_statusbar(ORDER_LOAD "load", part);
|
||||
|
||||
/* Get date & time */
|
||||
time_t current_time = time(NULL);
|
||||
struct tm *current_tm = localtime(¤t_time);
|
||||
strftime(part, sizeof(part), time_format, current_tm);
|
||||
push_part(part, strlen(part));
|
||||
|
||||
write_to_statusbar(output);
|
||||
write_to_statusbar(ORDER_TIME "time", part);
|
||||
|
||||
sleep(1);
|
||||
}
|
||||
|
@ -5,7 +5,9 @@ static bool first_push = true;
|
||||
|
||||
typedef enum { CS_DISCHARGING, CS_CHARGING, CS_FULL } charging_status_t;
|
||||
|
||||
static void write_to_statusbar(const char *message);
|
||||
static void cleanup_rbar_dir(void);
|
||||
static void write_to_statusbar(const char *name, const char *message);
|
||||
static void write_error_to_statusbar(const char *message);
|
||||
static void die(const char *fmt, ...);
|
||||
static char *skip_character(char *input, char character, int amount);
|
||||
static void push_part(const char *input, const int n);
|
||||
|
Loading…
Reference in New Issue
Block a user