This commit is contained in:
2026-05-10 21:17:36 +02:00
parent f28cd4c31a
commit 9bd2357b96
7 changed files with 118 additions and 33 deletions

View File

@@ -16,15 +16,6 @@
static constexpr uint16_t refresh_interval_ms = 500;
/* move to utils */
static void timespec_add_ms(struct timespec *ts, const uint16_t ms) {
ts->tv_nsec += ms * 1000000L;
if (ts->tv_nsec >= 1000000000L) {
ts->tv_sec++;
ts->tv_nsec -= 1000000000L;
}
}
struct control_t {
pthread_mutex_t sensors_mtx;
pthread_cond_t sensors_ready;
@@ -36,8 +27,8 @@ struct sensors_t {
double loadavg[3];
struct memory_t ram;
struct disk_t home;
// sys::Network net;
// sys::sysSensors sys;
struct network_t net;
struct syssensors_t sys;
struct cpu_sensors_t cpu;
// gpu::gpuSensors gpu;
double hass_state;
@@ -52,7 +43,9 @@ static void *sensors_thread(void *arg) {
// set up paths for the sensors
strcpy(sensors->home.mountpoint, "/home/drath");
strcpy(sensors->net.device, "enp7s0");
cpu_detect(&sensors->cpu, "0000:00:18.3");
sys_detect(&sensors->sys, "nct6775.656");
while (control.g_running) { // NOLINT
pthread_mutex_lock(&control.sensors_mtx);
@@ -61,11 +54,13 @@ static void *sensors_thread(void *arg) {
sys_get_time(&sensors->td);
sys_get_ram(&sensors->ram);
sys_get_disk(&sensors->home);
sys_get_network(&sensors->net);
sys_update_sensors(&sensors->sys);
cpu_update(&sensors->cpu);
pthread_cond_signal(&control.sensors_ready);
pthread_mutex_unlock(&control.sensors_mtx);
pthread_cond_signal(&control.sensors_ready);
timespec_add_ms(&next, refresh_interval_ms);
clock_nanosleep(CLOCK_REALTIME, TIMER_ABSTIME, &next, nullptr);
@@ -108,9 +103,22 @@ static void *display_thread(void *arg) {
pthread_mutex_lock(&control.sensors_mtx); // lock sensor struct
pthread_cond_timedwait(&control.sensors_ready, &control.sensors_mtx, &ts); // wait until data ready
const uint16_t avg_fan_speed = (sensors->sys.fan_speed[0] + sensors->sys.fan_speed[1]) / 2;
lcd_writef(&lcd, 0, 0, "%s %s", sensors->td.date, sensors->td.time);
lcd_writef(&lcd, 26, 0, "%.2f %.2f %.2f", sensors->loadavg[0], sensors->loadavg[1], sensors->loadavg[2]);
lcd_writef(&lcd, 0, 1, "%d/%d%c", sensors->cpu.tctl, sensors->cpu.tccd1, 0);
lcd_writef(&lcd, 7, 1, "%s", P_BYTES(sensors->ram.used, 0));
lcd_writef(&lcd, 20, 1, "%d%c", sensors->sys.t_sensor, 0);
lcd_writef(&lcd, 0, 2, "%.0fW", sensors->cpu.ptotal);
lcd_writef(&lcd, 5, 2, "%dR", avg_fan_speed);
lcd_writef(&lcd, 12, 2, "%c%s %c%s", 3, P_BYTES(sensors->net.upload, 1), 4, P_BYTES(sensors->net.download, 1));
lcd_writef(&lcd, 0, 3, "%dMHz", sensors->cpu.avg_freq);
lcd_writef(&lcd, 14, 3, "%c%s", 2, P_BYTES(sensors->home.usage.free, 1));
pthread_mutex_unlock(&control.sensors_mtx); // unlock sensor struct
lcd_flush_buf(&lcd);