From 110c01258756125b74123b17cb52f09ba275c0f6 Mon Sep 17 00:00:00 2001 From: Drath Date: Tue, 5 May 2026 17:49:37 +0200 Subject: [PATCH] doing sth --- include/cpu.h | 27 +++++++++++++++++++++++++++ include/utils.h | 9 +++++++++ src/cpu.c | 8 ++++++++ src/utils.c | 37 +++++++++++++++++++++++++++++++++++++ 4 files changed, 81 insertions(+) create mode 100644 include/cpu.h create mode 100644 include/utils.h create mode 100644 src/cpu.c create mode 100644 src/utils.c diff --git a/include/cpu.h b/include/cpu.h new file mode 100644 index 0000000..f7ad5b6 --- /dev/null +++ b/include/cpu.h @@ -0,0 +1,27 @@ +#ifndef CPU_H +#define CPU_H + +#include + +enum cpu_module_t : uint8_t { + unknown, + k10temp, + zenpower +}; + +struct cpu_sensors_t { + enum cpu_module_t module; + uint8_t num_cores; + int16_t tdie; + int16_t tctl; + int16_t tccd1; + // double pcore; + // double psoc; + float ptotal; + // double vcore; + // double vsoc; + uint32_t avg_freq; + char hwmon[128]; +}; + +#endif diff --git a/include/utils.h b/include/utils.h new file mode 100644 index 0000000..15b634c --- /dev/null +++ b/include/utils.h @@ -0,0 +1,9 @@ +#ifndef UTILS_H +#define UTILS_H + +#define fastReadNum(path, buf, result_ptr, div) \ +_Generic((result_ptr), \ +uint64_t*: _fRN_u64, \ +)(path, buf, sizeof(buf), result_ptr, div) + +#endif diff --git a/src/cpu.c b/src/cpu.c new file mode 100644 index 0000000..087385a --- /dev/null +++ b/src/cpu.c @@ -0,0 +1,8 @@ +#include "cpu.h" + +#include + +void cpu_detect(struct cpu_sensors_t* t, const char* pci_dev) { + char path[128]; + snprintf(path, sizeof(path), "/sys/bus/pci/devices/%s/hwmon", pci_dev); +} \ No newline at end of file diff --git a/src/utils.c b/src/utils.c new file mode 100644 index 0000000..e995251 --- /dev/null +++ b/src/utils.c @@ -0,0 +1,37 @@ +#include +#include +#include +#include +#include "log.h" +#include + +#include "utils.h" + +inline bool file_exists(const char* path) { + return access(path, F_OK) == 0; +} + +int get_hwmon_dir(char* path) { + glob_t g; + if (glob(path, 0, NULL, &g) == 0) { + + } +} + +/* read n bytes from path into buffer */ +inline ssize_t read_file(const char* path, char* buffer, const ssize_t n) { + const int fd = open(path, O_RDONLY | O_CLOEXEC); + if (fd < 0) { + applog(LOG_ERR, "Error reading %s", path); + return 0; + } + const ssize_t len = read(fd, buffer, n); + if (len >= 0) buffer[len] = '\0'; + close(fd); + return len; +} + +inline void _fRN_u64(const char* path, char* buf, uint64_t* result, const uint16_t divider) { + read_file(path, buf, 24); // wont ever be longer than 24 chars right? potential bug + *result = strtoull(buf, NULL, 10) / divider; +} \ No newline at end of file