diff --git a/tests/gpu_metrics.cpp b/tests/gpu_metrics.cpp deleted file mode 100644 index 2acfc89..0000000 --- a/tests/gpu_metrics.cpp +++ /dev/null @@ -1,162 +0,0 @@ -#include -#include -#include -#include - -struct GpuMetricsHeader_t { - uint16_t structure_size; - uint8_t format_revision; - uint8_t content_revision; -}; - -struct GpuMetrics_v1_1_t { - uint16_t temperature_edge; - uint16_t temperature_hotspot; - uint16_t temperature_mem; - uint16_t temperature_vrgfx; - uint16_t temperature_vrsoc; - uint16_t temperature_vrmem; - uint16_t average_gfx_activity; - uint16_t average_umc_activity; - uint16_t average_mm_activity; - uint16_t average_socket_power; - uint64_t energy_accumulator; - uint64_t system_clock_counter; - uint16_t average_gfxclk_frequency; - uint16_t average_socclk_frequency; - uint16_t average_uclk_frequency; - uint16_t average_vclk0_frequency; - uint16_t average_dclk0_frequency; - uint16_t average_vclk1_frequency; - uint16_t average_dclk1_frequency; - uint16_t current_gfxclk; - uint16_t current_socclk; - uint16_t current_uclk; - uint16_t current_vclk0; - uint16_t current_dclk0; - uint16_t current_vclk1; - uint16_t current_dclk1; - uint32_t throttle_status; - uint16_t current_fan_speed; - uint16_t pcie_link_width; - uint16_t pcie_link_speed; - uint16_t padding; - uint32_t gfx_activity_acc; - uint32_t mem_activity_acc; - uint16_t temperature_hbm; -}; - -struct GpuMetrics_v1_3_t { - uint16_t temperature_edge; - uint16_t temperature_hotspot; - uint16_t temperature_mem; - uint16_t temperature_vrgfx; - uint16_t temperature_vrsoc; - uint16_t temperature_vrmem; - uint16_t average_gfx_activity; - uint16_t average_umc_activity; - uint16_t average_mm_activity; - uint16_t average_socket_power; - uint64_t energy_accumulator; - uint64_t system_clock_counter; - uint16_t average_gfxclk_frequency; - uint16_t average_socclk_frequency; - uint16_t average_uclk_frequency; - uint16_t average_vclk0_frequency; - uint16_t average_dclk0_frequency; - uint16_t average_vclk1_frequency; - uint16_t average_dclk1_frequency; - uint16_t current_gfxclk; - uint16_t current_socclk; - uint16_t current_uclk; - uint16_t current_vclk0; - uint16_t current_dclk0; - uint16_t current_vclk1; - uint16_t current_dclk1; - uint32_t throttle_status; - uint16_t current_fan_speed; - uint16_t pcie_link_width; - uint16_t pcie_link_speed; - uint16_t padding; - uint32_t gfx_activity_acc; - uint32_t mem_activity_acc; - uint16_t temperature_hbm; - uint64_t firmware_timestamp; - uint16_t voltage_soc; - uint16_t voltage_gfx; - uint16_t voltage_mem; - uint8_t padding1; -}; - -GpuMetricsHeader_t getGpuMetricsRev(std::string path) { - GpuMetricsHeader_t header; - std::ifstream f(path, std::ios::binary); - if (f.good()) { - f.read(reinterpret_cast(&header), sizeof(header)); - std::cout << "[GpuMetrics] Read GpuMetrics format v" << std::to_string(header.format_revision) << "_" << std::to_string(header.content_revision) << std::endl; - } else { - std::cerr << "[GpuMetrics] Error reading gpu metrics header" << std::endl; - header.structure_size = 0; - } - return header; -} - -auto getGpuMetrics(GpuMetricsHeader_t h, std::string path) { - GpuMetrics_v1_3_t gpu; - if (h.format_revision == 1 && h.content_revision == 3) { - std::ifstream f(path, std::ios::binary); - if (f.good()) { - f.ignore(sizeof(h)); // skip header - f.read(reinterpret_cast(&gpu), sizeof(gpu)); - } - } else { - std::cout << "[GpuMetrics] read failed, unsupported format" << std::endl; - } - return gpu; -} - -int main(int argc, char *argv[]) { - std::string m = "/sys/devices/pci0000:00/0000:00:03.1/0000:08:00.0/0000:09:00.0/0000:0a:00.0/gpu_metrics"; - GpuMetricsHeader_t h = getGpuMetricsRev(m); - auto gpu = getGpuMetrics(h, m); - - std::cout << "temperature_edge: " << std::to_string(gpu.temperature_edge) << std::endl; - std::cout << "temperature_hotspot: " << std::to_string(gpu.temperature_hotspot) << std::endl; - std::cout << "temperature_mem: " << std::to_string(gpu.temperature_mem) << std::endl; - std::cout << "temperature_vrgfx: " << std::to_string(gpu.temperature_vrgfx) << std::endl; - std::cout << "temperature_vrsoc: " << std::to_string(gpu.temperature_vrsoc) << std::endl; - std::cout << "temperature_vrmem: " << std::to_string(gpu.temperature_vrmem) << std::endl; - std::cout << "average_gfx_activity: " << std::to_string(gpu.average_gfx_activity) << std::endl; - std::cout << "average_umc_activity: " << std::to_string(gpu.average_umc_activity) << std::endl; - std::cout << "average_mm_activity: " << std::to_string(gpu.average_mm_activity) << std::endl; - std::cout << "average_socket_power: " << std::to_string(gpu.average_socket_power) << std::endl; - std::cout << "energy_accumulator: " << std::to_string(gpu.energy_accumulator) << std::endl; - std::cout << "system_clock_counter: " << std::to_string(gpu.system_clock_counter) << std::endl; - std::cout << "average_gfxclk_frequency: " << std::to_string(gpu.average_gfxclk_frequency) << std::endl; - std::cout << "average_socclk_frequency: " << std::to_string(gpu.average_socclk_frequency) << std::endl; - std::cout << "average_uclk_frequency: " << std::to_string(gpu.average_uclk_frequency) << std::endl; - std::cout << "average_vclk0_frequency: " << std::to_string(gpu.average_vclk0_frequency) << std::endl; - std::cout << "average_dclk0_frequency: " << std::to_string(gpu.average_dclk0_frequency) << std::endl; - std::cout << "average_vclk1_frequency: " << std::to_string(gpu.average_vclk1_frequency) << std::endl; - std::cout << "average_dclk1_frequency: " << std::to_string(gpu.average_dclk1_frequency) << std::endl; - std::cout << "current_gfxclk: " << std::to_string(gpu.current_gfxclk) << std::endl; - std::cout << "current_socclk: " << std::to_string(gpu.current_socclk) << std::endl; - std::cout << "current_uclk: " << std::to_string(gpu.current_uclk) << std::endl; - std::cout << "current_vclk0: " << std::to_string(gpu.current_vclk0) << std::endl; - std::cout << "current_dclk0: " << std::to_string(gpu.current_dclk0) << std::endl; - std::cout << "current_vclk1: " << std::to_string(gpu.current_vclk1) << std::endl; - std::cout << "current_dclk1: " << std::to_string(gpu.current_dclk1) << std::endl; - std::cout << "throttle_status: " << std::to_string(gpu.throttle_status) << std::endl; - std::cout << "current_fan_speed: " << std::to_string(gpu.current_fan_speed) << std::endl; - std::cout << "pcie_link_width: " << std::to_string(gpu.pcie_link_width) << std::endl; - std::cout << "pcie_link_speed: " << std::to_string(gpu.pcie_link_speed) << std::endl; - std::cout << "gfx_activity_acc: " << std::to_string(gpu.gfx_activity_acc) << std::endl; - std::cout << "mem_activity_acc: " << std::to_string(gpu.mem_activity_acc) << std::endl; - std::cout << "temperature_hbm: " << std::to_string(gpu.temperature_hbm) << std::endl; - std::cout << "firmware_timestamp: " << std::to_string(gpu.firmware_timestamp) << std::endl; - std::cout << "voltage_soc: " << std::to_string(gpu.voltage_soc) << std::endl; - std::cout << "voltage_gfx: " << std::to_string(gpu.voltage_gfx) << std::endl; - std::cout << "voltage_mem: " << std::to_string(gpu.voltage_mem) << std::endl; - - return 0; -} \ No newline at end of file diff --git a/tests/wstest.cpp b/tests/wstest.cpp deleted file mode 100644 index ecc8b2c..0000000 --- a/tests/wstest.cpp +++ /dev/null @@ -1,177 +0,0 @@ -#include - -#include -#include -#include -#include - -#define HASS_ADDRESS "home.drath.win" -#define HASS_TOKEN "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI0MzUxMTZiY2VjNTg0MTI3OGI4YmU0NTY4ZGQ5MzIyYiIsImlhdCI6MTc1NzQzMDI0MCwiZXhwIjoyMDcyNzkwMjQwfQ.6wKTlxEA0FLWfv-qW35vewUSvTxdVrZWqFwHT5Khu6E" - -static bool bExit; -std::string tx; -struct lws_context *context = NULL; -lws *websock = NULL; - -uint16_t id = 2; - -static int callback(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len); - -static const struct lws_protocols protocols[] = { - {"lws-minimal-client", callback, 0, 0, 0, NULL, 0}, - LWS_PROTOCOL_LIST_TERM}; - -static const struct lws_extension extensions[] = { - {"permessage-deflate", - lws_extension_callback_pm_deflate, - "permessage-deflate" - "; client_no_context_takeover" - "; client_max_window_bits"}, - {NULL, NULL, NULL}}; - - -static int callback(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { - ArduinoJson::JsonDocument json; - std::string entity = "sensor.listwa_moc"; - - switch (reason) { - case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: { - std::println("[HomeAssistant] websocket conn error: {}", in ? (char *)in : "(null)"); - return -1; - } - - case LWS_CALLBACK_CLIENT_RECEIVE: { - ArduinoJson::deserializeJson(json, (char *)in); - std::string ha_type = json["type"].as(); - // std::println("[HomeAssistant] got event type: {} ", ha_type); - - if (ha_type == "auth_required") { - json.clear(); - json["type"] = "auth"; - json["access_token"] = HASS_TOKEN; - ArduinoJson::serializeJson(json, tx); - break; - } - - if (ha_type == "auth_ok") { - std::println("[HomeAssistant] subscribing to entity \"{}\"", entity); - json.clear(); - json["id"] = id++; - json["type"] = "subscribe_entities"; - json["entity_ids"][0] = entity; - ArduinoJson::serializeJson(json, tx); - break; - } - - if (ha_type == "result") { - if (json["success"].as() == "false") - std::println("[HomeAssistant] api said success was \"false\" on message id {}", id - 1); - break; - } - - if (ha_type == "event") { - float state = json["event"]["c"][entity]["+"]["s"].as(); - std::println("{}", state); - break; - } - - std::println("[HomeAssistant] unhandled event: {}", (char *)in); - break; - } - - case LWS_CALLBACK_CLIENT_ESTABLISHED: { - std::println("[HomeAssistant] Websocket connected"); - break; - } - - case LWS_CALLBACK_CLIENT_CLOSED: { - std::println("[HomeAssistant] Websocket closed"); - return -1; - } - - case LWS_CALLBACK_CLIENT_WRITEABLE: { - /* skip whole callback if there's no tx to send */ - if (tx.size() > 0) { - // std::println("[HomeAssistant] sending {}", tx); - size_t msgLen = LWS_PRE + tx.size(); - unsigned char *buf = (unsigned char *)malloc(msgLen); - if (buf) { - memcpy(&buf[LWS_PRE], tx.c_str(), tx.size()); - if(!lws_write(wsi, &buf[LWS_PRE], tx.size(), LWS_WRITE_TEXT)); - tx = ""; - free(buf); - } - } - break; - } - - default: - break; - } - - return 0; -} - -static void handle_sigint(int sig) { - bExit = true; -} - -int hass_connect() { - struct lws_client_connect_info i; - struct lws_context_creation_info info; - - lws_set_log_level(LLL_ERR | LLL_WARN, lwsl_emit_syslog); - - memset(&i, 0, sizeof(i)); - memset(&info, 0, sizeof info); - - info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; - info.port = CONTEXT_PORT_NO_LISTEN; - info.protocols = protocols; - info.fd_limit_per_thread = 1 + 1 + 1; - info.extensions = extensions; - - context = lws_create_context(&info); - if (!context) { - std::println("[HomeAssistant] error creating context"); - return -1; - } - - i.context = context; - i.port = 443; - i.address = HASS_ADDRESS; - i.path = "/api/websocket"; - i.host = i.address; - i.origin = i.address; - i.ssl_connection = LCCSCF_USE_SSL | LCCSCF_PRIORITIZE_READS; - i.protocol = NULL; - i.local_protocol_name = "lws-minimal-client"; - - websock = lws_client_connect_via_info(&i); - if (!websock) { - std::println("[HomeAssistant] error creating lws client"); - return -1; - } - return 0; -} - -void hass_poll() { - lws_service(context, 0); - lws_callback_on_writable(websock); -} - -void hass_disconnect() { - lws_context_destroy(context); -} - -int main(int argc, const char **argv) { - signal(SIGINT, handle_sigint); - hass_connect(); - - while (!bExit) - hass_poll(); - - hass_disconnect(); - - return 0; -} \ No newline at end of file