From cdac555c3ca019dc13b7d607552abd55a117a5d4 Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 28 Jul 2022 22:16:03 +0200 Subject: [PATCH] Initial commit --- .gitignore | 2 + .../index/main.cxx.488F90579B08E0FB.idx | Bin 0 -> 1472 bytes .../index/nvidia.cxx.8895D8320431F2BD.idx | Bin 0 -> 732 bytes .../index/nvidia.h.C592977E7E2F38C1.idx | Bin 0 -> 446 bytes .../clangd/index/pwm.cxx.7C00E8794BC99BB4.idx | Bin 0 -> 1788 bytes .../clangd/index/pwm.h.A7AB59217778DE05.idx | Bin 0 -> 660 bytes app/.projectile | 0 app/CMakeLists.txt | 18 ++++++ app/include/nvidia.h | 11 ++++ app/include/pwm.h | 30 ++++++++++ app/src/main.cxx | 54 +++++++++++++++++ app/src/nvidia.cxx | 16 +++++ app/src/pwm.cxx | 56 ++++++++++++++++++ 13 files changed, 187 insertions(+) create mode 100644 .gitignore create mode 100644 app/.cache/clangd/index/main.cxx.488F90579B08E0FB.idx create mode 100644 app/.cache/clangd/index/nvidia.cxx.8895D8320431F2BD.idx create mode 100644 app/.cache/clangd/index/nvidia.h.C592977E7E2F38C1.idx create mode 100644 app/.cache/clangd/index/pwm.cxx.7C00E8794BC99BB4.idx create mode 100644 app/.cache/clangd/index/pwm.h.A7AB59217778DE05.idx create mode 100644 app/.projectile create mode 100644 app/CMakeLists.txt create mode 100644 app/include/nvidia.h create mode 100644 app/include/pwm.h create mode 100644 app/src/main.cxx create mode 100644 app/src/nvidia.cxx create mode 100644 app/src/pwm.cxx diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2b9765e --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +oot/ +compile_commands.json diff --git a/app/.cache/clangd/index/main.cxx.488F90579B08E0FB.idx b/app/.cache/clangd/index/main.cxx.488F90579B08E0FB.idx new file mode 100644 index 0000000000000000000000000000000000000000..90d73d4429083ed4e01f36377cee334cfc2b1ff9 GIT binary patch literal 1472 zcmWIYbaUIm%D~{9;#rZKT9U}Zz`!5~#Kk2=nJ8#hkeTx4oDhdCs2yu_fh_ z?jnUZ-J%EC?USq~=Q)?FosP-+_7?VsY5cBbWg&-4GICH%bg z?3UB(Bzg}m{vk zG%r3g>(i{;n%t%}jL~X4PB0W#<|fGleQY3pMdIe=r8$r>cFJ+2Qq^hTC0^`+xz8KIQXn38GMZl2FkP{}nFvpw4E3oYm8!%`kIN>o3 z3|eUcc$BgTNb5@L!?dsnsOhU2B6wPST1b(gucog7lUuzn)ij*x$u(x60W#8XzXA=A zQA6VC%jv`YvLWCySNc&keqcBlG8wYMOxhT8!)Q?tzYqtH04FCWFHD$6K!8&Ki6_o0 zE{Kqm=9d;m@RWF!kmS_()sW=0IJJ;W(P!7^hUwd8+EL8;g|Q9j9)2EvHMsEm4ToO8 zt8E7g3y287gYBGhbw`t3Fh3j6nF^fnSOh9k7Jw%z9sy}nX-k+%JOXOwYSsvzmY5dY zI359gJ$)mX+$}4HSBICjnF6C(ghvD(emnwlJaTZ}!w%*NY|4x4fzhnXsSEeUi$+eN zxauFp9c1!nIz&ezxYp8Sad3JYrp+rWg2 zQgaeP`L?(yx!4-S5CRbpzz1VM3S0<}QGjK`ed!0XnQK`1_=N-+_z{Ydb5n9adboLb Pn3!4EIN5nwIT*PB9LeD^ literal 0 HcmV?d00001 diff --git a/app/.cache/clangd/index/nvidia.cxx.8895D8320431F2BD.idx b/app/.cache/clangd/index/nvidia.cxx.8895D8320431F2BD.idx new file mode 100644 index 0000000000000000000000000000000000000000..40f01b8c91fef789235b3a754d7565f8fd2a8212 GIT binary patch literal 732 zcmWIYbaT7H#K7R3;#rZKT9U}Zz`!5~#Kk2=nNNZALq-OMiaApQPG%i;;JNyrB~q6q zn8$LfNKr=pL7%iKohNkCrX^Ip*j_G^q_K00WvBYRMd}VLE|Z@e;;c2<}8vH8EYbK?QicM6Rq*`I$cJoiVh@AISUTZ`Y>?BMylcBgWHz^kA+t^fN^{Z{7yaG%@d<+6?{A^16?40Z}3>-i?Ab8lp zJb_JlalIH5FHoA9gPD(?m5G%DCjGyWnb~xa?KW{HVW2b%2MZ@Z8xtEdOq!u6HLX|< z7@i)x&MgU;WOIO#M}U)wQyyli*EWxh`!kq#vhoNpGcdEkECcd@7QrNW1XvhY*kCpR zd7Lc#2st)(HeQ%<0rwC6nIz|T6KD%N6FVPF7)CR4f&B;5+pD?l?&7pH=YXo2g_-4G zmQS?)n6~;yc_L7lMTA8GX7A0DH?~dYEdCA@=3(NIf|&`^1vDGk&EI-=ZN8%Q^)pDd zGLJb-HOw$ZCU986TvC*plL!jz;-chYWgyKcpmj0P=>KE0O-zFP4E!J|2mmEhC`ist W$>9aExwyHRm|57^d006ZIT--TS?VAF literal 0 HcmV?d00001 diff --git a/app/.cache/clangd/index/nvidia.h.C592977E7E2F38C1.idx b/app/.cache/clangd/index/nvidia.h.C592977E7E2F38C1.idx new file mode 100644 index 0000000000000000000000000000000000000000..2f23b4b14ad6d4a794cb1a7a4b46f74a8aa81e17 GIT binary patch literal 446 zcmWIYbaUIr$iU#7;#rZKT9U}Zz`!5~#Kk2=naMyp3y3S`==K`&wHOE-`R3{~f7UGh z1)@9~np!k+G&Cx#J9eKcN{rlf*)8~|BFoI2WQGlICR*^k-FNN8ll4;=C#zjQtmjnR zwls0I^2B{RB2$)qFJ8CTI8E$pl*ae}9~gFqswprOSLPz9tk(n_z)mZ&%n<%dU6AKeqjDeY*lU;^^1HyUO!90OYd2ziM6C+HT zm5G%DCjGyWnb~xa?KW{HR+uy!6B{#3x+pcRxF2W`%oWUB5ZfVUGw?8j%z{bs0A0t% z3FE=s#mEVE4@~$}meSwQb;7S1xtJL_7(t;51~6v=RU;b-a~>ljGssymLl}xua}q)N Xii?tqxj_u(wP$inUh7<+!oUCkW=3@w literal 0 HcmV?d00001 diff --git a/app/.cache/clangd/index/pwm.cxx.7C00E8794BC99BB4.idx b/app/.cache/clangd/index/pwm.cxx.7C00E8794BC99BB4.idx new file mode 100644 index 0000000000000000000000000000000000000000..1fae0f2942e03b2ecdd7d26cefa5de4b71e15834 GIT binary patch literal 1788 zcmY*Z4NMbf7(Uu-Y0Gif@7i8%kN(gf+O_<&l`&925C=n|1I3Ij`w0Sqlxji=!-={r zPK_AUFj&Ui2pwUIIAqFxj4+c;MpPUV4JgCla7@%eWaylWS@tpa-Q6x}?|a_o{r%qe zy>+?S+4rRwmQ|Wt7bvSK#xV>7@E5G9-aH52sUi%kJJNjUVx`zi?0(=&i#u_my|<_5 zy-szt?EdJ<5_jXd@mC)=b?*3U{H=^F*Wau^^yj8TpIH=Y{9_2b@?&aiw|HX2o7`D? zJMGB+k~Y6eW9S(6U3)DiWw^Azb^ot>_NFwsUJ|)7#7i*iC;6d`SCSeF*L9qm%Uv_V z-f0_H-G_A^%ek31_TYF=McD^KlWRY{Fuf~Nrt5BaINEgd^+4_KXHB(JSB6$a)^2r* z>UYkLv(n_kO7k1Pn7Y#k_rCk^)8YHShJ3c= zmZ& z7BNo*7zkH{6aSsD>atBiuLQ$b&9wjQ7nU9|0hBUjByvgsAOiwK%V-W6zgR9)+H?xK@V5-sY+2#BDPHn1zM3&`3-G8)@TE;_&fr#_tW}gyFyw;o&M+ zW}H9omln^9aG;fIBakgbQCcHHE9m*}S2XAOU;urj-h{*iFjB^7gjTA$+8@P_%b}8* zRO^tK04}r3jnJwTIe63`>V@I-a=jp&F~Z2@l>61Tw9VfQHo{bm7GpfJT`zyOKTxJ@ z#0g*}t!gBOD8c$PkL;vfz}XY*99OuOcFY`3mB8y$hpV}8FO~8}h{hG`su5Hk- z!OB%f0K361K(0hrGK#sy@2|OgdTAysO6S%2kQfJsctZk0=pCl`cR+jcFDuFiVyFWh zE!Vf!-~I{Ks%F(ONUP<2|A!{`_I8-6$zkH0v{&Wfs|)r_!I{x|w1P-1%Nmd^4xCX= zu6Ln8l6=k1;%S(iHO|UiCJyXzb`EtFC6SjyBQa2kp&71B*d()_3yxBT4W=+kjKV<# z7Y>o1zkJmfIzZ8IiC8JC;FX+&Q^_Nb)WdOKXE)b%XWY8Fn4zGPFhfD_ez0!e_jdYv z3i{P9)jq>}VvVd|@0=#56>(_o74rYBI{}z*Mvj!=;!--mBjHpMzyJ&?o)gX}Ts4J- z;5nPZCO{6-At=@n@9-ea8>ezF+_1f~Acc+fnYa;x!)CL(kP;j=n_Ylh%Uzi~=T38H z@hEnAEXU0ZZg7_0y*33eiHTqYRXJ$K65hn&b8vxYgQvgjs&o7d2hGK}xYeHR>#aOk zR2mO^Vo_PRE5(6LW#h&JemSd(7r&yx>XKm2;z6_c_vBHb1BR*jBh4MdfFa#nZ9Jt^ gNR+fnt-+KWg_Q(Kt4IhV2tp*rrSkAdi7ZU<5Aqv+y8r+H literal 0 HcmV?d00001 diff --git a/app/.cache/clangd/index/pwm.h.A7AB59217778DE05.idx b/app/.cache/clangd/index/pwm.h.A7AB59217778DE05.idx new file mode 100644 index 0000000000000000000000000000000000000000..4f21d2535e50955d6e417fa904090cad888fc7ba GIT binary patch literal 660 zcmWIYbaU%rVqkDi@vO*AElFfyU|yU#$%lE(>mfTHh zsa{({l$9b*Roo*3`p3Pu~x$+8$o+48@hXN&A5A)8V!KWgk;n z$;ZUT$iU9Q#~}hH7&w4(K;R_2df`vKTb$esK+myrF>&#N2?kEEEF(K(d1B6yS%uYg zd`zrB{p@_~qF@51zy9;ZfbKxU>taky%nTg-to$78{7n3;FzLzn)zZ{fj(v)b|Bz|d4Y$WgPnsHW)u%QCp#xE%z-d9K$AdzgqZ~M9wR5%TQK*+ zbOBX^`~*|IG-knW%?GO#fx?U&jC?R*m@XzRi0`1{JSavMrRF4pB#MiYi^V|<_GiLI RS0j!wS21!z!viGB0028!q>2Cl literal 0 HcmV?d00001 diff --git a/app/.projectile b/app/.projectile new file mode 100644 index 0000000..e69de29 diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt new file mode 100644 index 0000000..5a21b06 --- /dev/null +++ b/app/CMakeLists.txt @@ -0,0 +1,18 @@ +cmake_minimum_required(VERSION 3.0) + +project(fantasize) + +set(CMAKE_BUILD_TYPE Debug) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + + +add_executable(app + src/main.cxx + src/nvidia.cxx + src/pwm.cxx +) + +set_property(TARGET app PROPERTY CXX_STANDARD 17) + +target_include_directories(app PUBLIC include /opt/cuda) +target_link_libraries(app PUBLIC sensors nvidia-ml) diff --git a/app/include/nvidia.h b/app/include/nvidia.h new file mode 100644 index 0000000..e507387 --- /dev/null +++ b/app/include/nvidia.h @@ -0,0 +1,11 @@ +#ifndef NVIDIA_H_ +#define NVIDIA_H_ + +class Nvidia { +public: + Nvidia(); + ~Nvidia(); + double get_gpu_temperature(); +}; + +#endif // NVIDIA_H_ diff --git a/app/include/pwm.h b/app/include/pwm.h new file mode 100644 index 0000000..62f57a6 --- /dev/null +++ b/app/include/pwm.h @@ -0,0 +1,30 @@ +#ifndef PWM_H_ +#define PWM_H_ + +#include +#include + +typedef struct { + std::string control; + std::string enable; + std::string mode; +} PWM_CONTROL; + +typedef enum { FULL_SPEED = 0, MANUAL_CONTROL, AUTOMATIC } PWM_ENABLE; +typedef enum { DC = 0, PWM } PWM_MODE; + +class PWM { +public: + PWM(); + void dumpValues(); + + void setEnable(PWM_CONTROL control, PWM_ENABLE value); + void setMode(PWM_CONTROL control, PWM_MODE mode); + void setValuePwm(PWM_CONTROL control, int pwm); + void setValuePercent(PWM_CONTROL control, int percentage); + +private: + std::unordered_map mPwmControls; +}; + +#endif // PWM_H_ diff --git a/app/src/main.cxx b/app/src/main.cxx new file mode 100644 index 0000000..6e84eea --- /dev/null +++ b/app/src/main.cxx @@ -0,0 +1,54 @@ +#include +#include +#include + +#include + +int main() { + auto config = std::fopen("/etc/conf.d/sensors", "r"); + if (sensors_init(config) != 0) { + std::cout << "Fuck" << std::endl; + return 1; + } + + int c = 0; + for (const sensors_chip_name *i; + (i = sensors_get_detected_chips(0, &c)) != NULL;) { + std::cout << i->prefix << std::endl; + + int d = 0; + for (const sensors_feature *j; (j = sensors_get_features(i, &d)) != NULL;) { + const sensors_subfeature *temp_feature = + sensors_get_subfeature(i, j, SENSORS_SUBFEATURE_TEMP_INPUT); + if (temp_feature) { + std::cout << sensors_get_label(i, j); + + double value; + if (sensors_get_value(i, temp_feature->number, &value) == 0) + std::cout << ": " << value << " C" << std::endl; + } + + const sensors_subfeature *fan_feature = + sensors_get_subfeature(i, j, SENSORS_SUBFEATURE_FAN_INPUT); + + if (fan_feature) { + std::cout << sensors_get_label(i, j); + + double value; + if (sensors_get_value(i, fan_feature->number, &value) == 0) + std::cout << ": " << value << " RPM" << std::endl; + } + } + + std::cout << std::endl; + } + + Nvidia nv; + auto temp = nv.get_gpu_temperature(); + std::cout << "\nGPU Temp: " << temp << std::endl; + + PWM pwm; + pwm.dumpValues(); + + return 0; +} diff --git a/app/src/nvidia.cxx b/app/src/nvidia.cxx new file mode 100644 index 0000000..161268b --- /dev/null +++ b/app/src/nvidia.cxx @@ -0,0 +1,16 @@ +#include +#include + +Nvidia::Nvidia() { nvmlInit_v2(); } +Nvidia::~Nvidia() { nvmlShutdown(); } + +double Nvidia::get_gpu_temperature() { + nvmlDevice_t device; + + nvmlDeviceGetHandleByIndex_v2(0, &device); + + unsigned int temp; + nvmlDeviceGetTemperature(device, NVML_TEMPERATURE_GPU, &temp); + + return static_cast(temp); +} diff --git a/app/src/pwm.cxx b/app/src/pwm.cxx new file mode 100644 index 0000000..33e9a24 --- /dev/null +++ b/app/src/pwm.cxx @@ -0,0 +1,56 @@ +#include + +#include +#include +#include + +namespace fs = std::filesystem; +using namespace std; + +#define HWMON_BASE_PATH "/sys/class/hwmon" + +#define PWM_POSTFIX_ENABLE "_enable" +#define PWM_POSTFIX_MODE "_mode" + +PWM::PWM() { + const regex re_ctrl_enable("pwm[0-9]_enable"); + const regex re_ctrl_mode("pwm[0-9]_mode"); + const regex re_ctrl("pwm[0-9]"); + + if (!fs::exists(HWMON_BASE_PATH)) { + cerr << HWMON_BASE_PATH << " doesn't exist" << endl; + } else { + for (const fs::directory_entry &hwmon_device : + fs::directory_iterator{HWMON_BASE_PATH}) { + cout << hwmon_device << endl; + + for (const fs::directory_entry &control : + fs::directory_iterator{hwmon_device}) { + auto filename = control.path().filename().string(); + + if (regex_match(filename, re_ctrl)) { + auto controlPath = control.path().string(); + + fs::path path_ctrl_enable( + string(controlPath + string(PWM_POSTFIX_ENABLE))); + fs::path path_ctrl_mode( + string(controlPath + string(PWM_POSTFIX_MODE))); + + if (fs::exists(path_ctrl_enable) && fs::exists(path_ctrl_mode)) + cout << control << endl; + + mPwmControls.insert( + {controlPath, PWM_CONTROL{controlPath, path_ctrl_enable.string(), + path_ctrl_mode.string()}}); + } + } + } + } +} + +void PWM::dumpValues() { + for (auto control : mPwmControls) { + cout << control.second.control << ", " << control.second.enable << ", " + << control.second.mode << endl; + } +}