From a8fb157bab505db90e6881ff72bf4e1fb0dc7107 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Orsini Date: Mon, 18 Jul 2011 16:22:38 +0000 Subject: [PATCH] added experimental support for ati/amd gpu/fan --- AUTHORS | 3 +- NEWS | 1 + po/POTFILES.in | 1 + po/fr.po | 81 ++++++++------ po/psensor.pot | 69 +++++++----- po/tr.po | 69 +++++++----- po/zh_CN.po | 69 +++++++----- src/lib/Makefile.am | 11 +- src/lib/Makefile.in | 17 +-- src/lib/amd.c | 295 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/lib/amd.h | 300 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/lib/psensor.c | 6 ++ src/lib/psensor.h | 9 +- src/main.c | 15 ++- 14 files changed, 821 insertions(+), 125 deletions(-) create mode 100644 src/lib/amd.c create mode 100644 src/lib/amd.h diff --git a/AUTHORS b/AUTHORS index 42f6416..380b1d9 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,4 +1,5 @@ Authors of psensor. jeanfi@gmail.com all files. -linux.dabao@gmail.com,royclarck po/zh_CN.po \ No newline at end of file +linux.dabao@gmail.com,royclarck po/zh_CN.po +thgreasi@gmail.com src/lib/amd.h src/lib/amd.h \ No newline at end of file diff --git a/NEWS b/NEWS index b8a2ce1..e44d38c 100644 --- a/NEWS +++ b/NEWS @@ -3,6 +3,7 @@ JSON web interface. ** psensor-server: added monitor.html using jquery and retrieving monitoring data from the JSON web interface. +** added support for ATI/AMD gpus and fans. * v0.6.2.9 diff --git a/po/POTFILES.in b/po/POTFILES.in index a732feb..1bde9b0 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -8,6 +8,7 @@ src/ui_pref.c src/ui_sensorpref.c src/rsensor.c src/server/server.c +src/lib/amd.c src/lib/hdd.c src/lib/nvidia.c src/lib/lmsensor.c diff --git a/po/fr.po b/po/fr.po index 48d8e38..c43f9af 100644 --- a/po/fr.po +++ b/po/fr.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: psensor 0.6.0.9\n" "Report-Msgid-Bugs-To: jeanfi@gmail.com\n" -"POT-Creation-Date: 2011-07-13 11:01+0200\n" +"POT-Creation-Date: 2011-07-18 18:20+0200\n" "PO-Revision-Date: 2011-02-07 21:18+0100\n" "Last-Translator: Jean-Philippe Orsini \n" "Language-Team: Oriya\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" -#: src/main.c:72 src/server/server.c:76 +#: src/main.c:73 src/server/server.c:76 #, fuzzy, c-format msgid "" "Copyright (C) %s jeanfi@gmail.com\n" @@ -33,12 +33,12 @@ msgstr "" "Ce logiciel n'est accompagné d'ABSOLUMENT AUCUNE GARANTIE, dans les limites\n" "autorisees par la loi applicable.\n" -#: src/main.c:82 src/server/server.c:86 +#: src/main.c:83 src/server/server.c:86 #, c-format msgid "Usage: %s [OPTION]...\n" msgstr "Utilisation: %s [OPTION]...\n" -#: src/main.c:84 +#: src/main.c:85 msgid "" "psensor is a GTK application for monitoring hardware sensors, including " "temperatures and fan speeds." @@ -46,11 +46,11 @@ msgstr "" "psensor est une application GTK pour surveiller les sondes matérielles " "thermiques et les ventilateurs." -#: src/main.c:88 +#: src/main.c:89 msgid "Options:" msgstr "Options:" -#: src/main.c:89 src/server/server.c:93 +#: src/main.c:90 src/server/server.c:93 msgid "" " -h, --help display this help and exit\n" " -v, --version display version information and exit" @@ -58,34 +58,29 @@ msgstr "" " -h, --help afficher cette aider et quitter\n" " -v, --version afficher les informations de version et quitter" -#: src/main.c:95 +#: src/main.c:96 msgid "" " -u, --url=URL the URL of the psensor-server, example: http://" "hostname:3131" msgstr "" " -u, --url=URL l'URL de psensor-server, example: http://hostname:3131" -#: src/main.c:101 src/server/server.c:106 +#: src/main.c:102 src/server/server.c:106 #, c-format msgid "Report bugs to: %s\n" msgstr "Signaler les bugs à: %s\n" -#: src/main.c:103 src/server/server.c:108 +#: src/main.c:104 src/server/server.c:108 #, c-format msgid "%s home page: <%s>\n" msgstr "%s page d'acceuil: <%s>\n" -#: src/main.c:323 src/server/server.c:346 +#: src/main.c:326 src/server/server.c:346 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Essayez `%s --help' pour plus d'informations.\n" -#: src/main.c:346 -#, fuzzy, c-format -msgid "ERROR: lmsensor init failure: %s\n" -msgstr "ERREUR: Echec de l'initialisation de 'lm-sensors'\n" - -#: src/main.c:357 +#: src/main.c:355 #, c-format msgid "ERROR: Not compiled with remote sensor support.\n" msgstr "" @@ -286,22 +281,43 @@ msgstr "WWW repertoire: %s\n" msgid "URL: http://localhost:%d\n" msgstr "URL: http://localhost:%d\n" -#: src/lib/hdd.c:59 +#: src/lib/amd.c:159 #, c-format -msgid "ERROR: hdd_fetch, failed to open socket\n" +msgid "ERROR: ADL library not found!\n" +msgstr "" + +#: src/lib/amd.c:184 +#, c-format +msgid "ERROR: ADL's API is missing!\n" +msgstr "" + +#: src/lib/amd.c:193 +#, fuzzy, c-format +msgid "ERROR: ADL Initialization Error!\n" +msgstr "ERREUR: échec de l'initialisation nvidia\n" + +#: src/lib/amd.c:201 +#, fuzzy, c-format +msgid "ERROR: Cannot get the number of adapters!\n" +msgstr "" +"ERREUR: Impossible de récuperer la valeur de la sous-fonctionnalité %s: %s\n" + +#: src/lib/hdd.c:59 +#, fuzzy, c-format +msgid "ERROR: hdd fetch, failed to open socket\n" msgstr "ERREUR: hdd_fetch, écher d'ouverture de la socket\n" #: src/lib/hdd.c:73 -#, c-format -msgid "ERROR: hdd_fetch, failed to open connection\n" +#, fuzzy, c-format +msgid "ERROR: hdd fetch, failed to open connection\n" msgstr "ERREUR: hdd_fetch, écher de l'ouverture de la connection\n" -#: src/lib/hdd.c:182 +#: src/lib/hdd.c:183 #, c-format msgid "ERROR: wrong hdd string: %s" msgstr "ERREUR: mauvaise chaine hdd: %s" -#: src/lib/hdd.c:252 +#: src/lib/hdd.c:253 #, c-format msgid "ERROR: wrong hdd string: %s\n" msgstr "ERREUR: mauvaise chaine hdd: %s\n" @@ -311,37 +327,37 @@ msgstr "ERREUR: mauvaise chaine hdd: %s\n" msgid "ERROR: failed to retrieve nvidia temperature\n" msgstr "ERREUR: échec de la récupération des températures nvidia\n" -#: src/lib/nvidia.c:99 +#: src/lib/nvidia.c:92 #, fuzzy, c-format msgid "ERROR: Cannot open connection to X Server\n" msgstr "ERREUR: Echer de la connectio à: %s\n" -#: src/lib/nvidia.c:107 +#: src/lib/nvidia.c:100 #, fuzzy, c-format msgid "ERROR: Cannot retrieve NVidia information\n" msgstr "ERREUR: échec de la récupération des températures nvidia\n" -#: src/lib/lmsensor.c:43 +#: src/lib/lmsensor.c:44 #, c-format msgid "ERROR: Can't get value of subfeature %s: %s\n" msgstr "" "ERREUR: Impossible de récuperer la valeur de la sous-fonctionnalité %s: %s\n" -#: src/lib/lmsensor.c:122 +#: src/lib/lmsensor.c:126 #, c-format msgid "ERROR: create_sensor, wrong feature type\n" msgstr "ERREUR: create_sensor, mauvais type de fonctionnalité\n" -#: src/lib/lmsensor.c:166 +#: src/lib/lmsensor.c:209 #, c-format msgid "ERROR: lm-sensors initialization failure: %s\n" msgstr "ERREUR: échec de l'initialisation de lm-sensors: %s\n" -#: src/lib/psensor.c:448 +#: src/lib/psensor.c:422 msgid "C" msgstr "" -#: src/lib/psensor.c:451 +#: src/lib/psensor.c:425 msgid "RPM" msgstr "" @@ -474,6 +490,10 @@ msgstr "Dessiner la courbe de la sonde" msgid "°C" msgstr "°C" +#, fuzzy +#~ msgid "ERROR: lmsensor init failure: %s\n" +#~ msgstr "ERREUR: Echec de l'initialisation de 'lm-sensors'\n" + #~ msgid "LUATPL Error: failed to load Lua script: %s.\n" #~ msgstr "LUATPL Erreur: échec du chargement du script LUA: %s.\n" @@ -492,9 +512,6 @@ msgstr "°C" #~ msgid "LUATPL Error: code: %d.\n" #~ msgstr "LUATPL Erreur: code: %d.\n" -#~ msgid "ERROR: nvidia initialization failure\n" -#~ msgstr "ERREUR: échec de l'initialisation nvidia\n" - #~ msgid "ERROR: nvidia initialization failure: %d\n" #~ msgstr "ERREUR: échec de l'initialisation nvidia: %d\n" diff --git a/po/psensor.pot b/po/psensor.pot index 91bf893..4fd45d0 100644 --- a/po/psensor.pot +++ b/po/psensor.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: jeanfi@gmail.com\n" -"POT-Creation-Date: 2011-07-13 11:01+0200\n" +"POT-Creation-Date: 2011-07-18 18:20+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: src/main.c:72 src/server/server.c:76 +#: src/main.c:73 src/server/server.c:76 #, c-format msgid "" "Copyright (C) %s jeanfi@gmail.com\n" @@ -27,54 +27,49 @@ msgid "" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" -#: src/main.c:82 src/server/server.c:86 +#: src/main.c:83 src/server/server.c:86 #, c-format msgid "Usage: %s [OPTION]...\n" msgstr "" -#: src/main.c:84 +#: src/main.c:85 msgid "" "psensor is a GTK application for monitoring hardware sensors, including " "temperatures and fan speeds." msgstr "" -#: src/main.c:88 +#: src/main.c:89 msgid "Options:" msgstr "" -#: src/main.c:89 src/server/server.c:93 +#: src/main.c:90 src/server/server.c:93 msgid "" " -h, --help display this help and exit\n" " -v, --version display version information and exit" msgstr "" -#: src/main.c:95 +#: src/main.c:96 msgid "" " -u, --url=URL the URL of the psensor-server, example: http://" "hostname:3131" msgstr "" -#: src/main.c:101 src/server/server.c:106 +#: src/main.c:102 src/server/server.c:106 #, c-format msgid "Report bugs to: %s\n" msgstr "" -#: src/main.c:103 src/server/server.c:108 +#: src/main.c:104 src/server/server.c:108 #, c-format msgid "%s home page: <%s>\n" msgstr "" -#: src/main.c:323 src/server/server.c:346 +#: src/main.c:326 src/server/server.c:346 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "" -#: src/main.c:346 -#, c-format -msgid "ERROR: lmsensor init failure: %s\n" -msgstr "" - -#: src/main.c:357 +#: src/main.c:355 #, c-format msgid "ERROR: Not compiled with remote sensor support.\n" msgstr "" @@ -260,22 +255,42 @@ msgstr "" msgid "URL: http://localhost:%d\n" msgstr "" +#: src/lib/amd.c:159 +#, c-format +msgid "ERROR: ADL library not found!\n" +msgstr "" + +#: src/lib/amd.c:184 +#, c-format +msgid "ERROR: ADL's API is missing!\n" +msgstr "" + +#: src/lib/amd.c:193 +#, c-format +msgid "ERROR: ADL Initialization Error!\n" +msgstr "" + +#: src/lib/amd.c:201 +#, c-format +msgid "ERROR: Cannot get the number of adapters!\n" +msgstr "" + #: src/lib/hdd.c:59 #, c-format -msgid "ERROR: hdd_fetch, failed to open socket\n" +msgid "ERROR: hdd fetch, failed to open socket\n" msgstr "" #: src/lib/hdd.c:73 #, c-format -msgid "ERROR: hdd_fetch, failed to open connection\n" +msgid "ERROR: hdd fetch, failed to open connection\n" msgstr "" -#: src/lib/hdd.c:182 +#: src/lib/hdd.c:183 #, c-format msgid "ERROR: wrong hdd string: %s" msgstr "" -#: src/lib/hdd.c:252 +#: src/lib/hdd.c:253 #, c-format msgid "ERROR: wrong hdd string: %s\n" msgstr "" @@ -285,36 +300,36 @@ msgstr "" msgid "ERROR: failed to retrieve nvidia temperature\n" msgstr "" -#: src/lib/nvidia.c:99 +#: src/lib/nvidia.c:92 #, c-format msgid "ERROR: Cannot open connection to X Server\n" msgstr "" -#: src/lib/nvidia.c:107 +#: src/lib/nvidia.c:100 #, c-format msgid "ERROR: Cannot retrieve NVidia information\n" msgstr "" -#: src/lib/lmsensor.c:43 +#: src/lib/lmsensor.c:44 #, c-format msgid "ERROR: Can't get value of subfeature %s: %s\n" msgstr "" -#: src/lib/lmsensor.c:122 +#: src/lib/lmsensor.c:126 #, c-format msgid "ERROR: create_sensor, wrong feature type\n" msgstr "" -#: src/lib/lmsensor.c:166 +#: src/lib/lmsensor.c:209 #, c-format msgid "ERROR: lm-sensors initialization failure: %s\n" msgstr "" -#: src/lib/psensor.c:448 +#: src/lib/psensor.c:422 msgid "C" msgstr "" -#: src/lib/psensor.c:451 +#: src/lib/psensor.c:425 msgid "RPM" msgstr "" diff --git a/po/tr.po b/po/tr.po index 5cd299a..44e129c 100644 --- a/po/tr.po +++ b/po/tr.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: psensor\n" "Report-Msgid-Bugs-To: jeanfi@gmail.com\n" -"POT-Creation-Date: 2011-07-13 11:01+0200\n" +"POT-Creation-Date: 2011-07-18 18:20+0200\n" "PO-Revision-Date: 2011-04-10 13:11+0000\n" "Last-Translator: zeugma \n" "Language-Team: Turkish \n" @@ -18,7 +18,7 @@ msgstr "" "X-Launchpad-Export-Date: 2011-04-11 05:41+0000\n" "X-Generator: Launchpad (build 12735)\n" -#: src/main.c:72 src/server/server.c:76 +#: src/main.c:73 src/server/server.c:76 #, c-format msgid "" "Copyright (C) %s jeanfi@gmail.com\n" @@ -28,54 +28,49 @@ msgid "" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" -#: src/main.c:82 src/server/server.c:86 +#: src/main.c:83 src/server/server.c:86 #, c-format msgid "Usage: %s [OPTION]...\n" msgstr "Kullanım: %s [SEÇENEK]...\n" -#: src/main.c:84 +#: src/main.c:85 msgid "" "psensor is a GTK application for monitoring hardware sensors, including " "temperatures and fan speeds." msgstr "" -#: src/main.c:88 +#: src/main.c:89 msgid "Options:" msgstr "" -#: src/main.c:89 src/server/server.c:93 +#: src/main.c:90 src/server/server.c:93 msgid "" " -h, --help display this help and exit\n" " -v, --version display version information and exit" msgstr "" -#: src/main.c:95 +#: src/main.c:96 msgid "" " -u, --url=URL the URL of the psensor-server, example: http://" "hostname:3131" msgstr "" -#: src/main.c:101 src/server/server.c:106 +#: src/main.c:102 src/server/server.c:106 #, c-format msgid "Report bugs to: %s\n" msgstr "Hataları rapor et:%s\n" -#: src/main.c:103 src/server/server.c:108 +#: src/main.c:104 src/server/server.c:108 #, c-format msgid "%s home page: <%s>\n" msgstr "%s ana sayfa: <%s>\n" -#: src/main.c:323 src/server/server.c:346 +#: src/main.c:326 src/server/server.c:346 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Daha fazla bilgi için `%s --help' yazın.\n" -#: src/main.c:346 -#, c-format -msgid "ERROR: lmsensor init failure: %s\n" -msgstr "" - -#: src/main.c:357 +#: src/main.c:355 #, c-format msgid "ERROR: Not compiled with remote sensor support.\n" msgstr "" @@ -265,22 +260,42 @@ msgstr "" msgid "URL: http://localhost:%d\n" msgstr "" +#: src/lib/amd.c:159 +#, c-format +msgid "ERROR: ADL library not found!\n" +msgstr "" + +#: src/lib/amd.c:184 +#, c-format +msgid "ERROR: ADL's API is missing!\n" +msgstr "" + +#: src/lib/amd.c:193 +#, c-format +msgid "ERROR: ADL Initialization Error!\n" +msgstr "" + +#: src/lib/amd.c:201 +#, c-format +msgid "ERROR: Cannot get the number of adapters!\n" +msgstr "" + #: src/lib/hdd.c:59 #, c-format -msgid "ERROR: hdd_fetch, failed to open socket\n" +msgid "ERROR: hdd fetch, failed to open socket\n" msgstr "" #: src/lib/hdd.c:73 #, c-format -msgid "ERROR: hdd_fetch, failed to open connection\n" +msgid "ERROR: hdd fetch, failed to open connection\n" msgstr "" -#: src/lib/hdd.c:182 +#: src/lib/hdd.c:183 #, c-format msgid "ERROR: wrong hdd string: %s" msgstr "" -#: src/lib/hdd.c:252 +#: src/lib/hdd.c:253 #, c-format msgid "ERROR: wrong hdd string: %s\n" msgstr "" @@ -290,36 +305,36 @@ msgstr "" msgid "ERROR: failed to retrieve nvidia temperature\n" msgstr "" -#: src/lib/nvidia.c:99 +#: src/lib/nvidia.c:92 #, c-format msgid "ERROR: Cannot open connection to X Server\n" msgstr "" -#: src/lib/nvidia.c:107 +#: src/lib/nvidia.c:100 #, c-format msgid "ERROR: Cannot retrieve NVidia information\n" msgstr "" -#: src/lib/lmsensor.c:43 +#: src/lib/lmsensor.c:44 #, c-format msgid "ERROR: Can't get value of subfeature %s: %s\n" msgstr "" -#: src/lib/lmsensor.c:122 +#: src/lib/lmsensor.c:126 #, c-format msgid "ERROR: create_sensor, wrong feature type\n" msgstr "" -#: src/lib/lmsensor.c:166 +#: src/lib/lmsensor.c:209 #, c-format msgid "ERROR: lm-sensors initialization failure: %s\n" msgstr "" -#: src/lib/psensor.c:448 +#: src/lib/psensor.c:422 msgid "C" msgstr "" -#: src/lib/psensor.c:451 +#: src/lib/psensor.c:425 msgid "RPM" msgstr "" diff --git a/po/zh_CN.po b/po/zh_CN.po index be8c742..bdd9b20 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: psensor 0.6.0.10\n" "Report-Msgid-Bugs-To: jeanfi@gmail.com\n" -"POT-Creation-Date: 2011-07-13 11:01+0200\n" +"POT-Creation-Date: 2011-07-18 18:20+0200\n" "PO-Revision-Date: 2011-06-06 08:57+0000\n" "Last-Translator: royclark \n" "Language-Team: Chinese (simplified)\n" @@ -18,7 +18,7 @@ msgstr "" "X-Launchpad-Export-Date: 2011-06-06 09:00+0000\n" "X-Generator: Launchpad (build 13144)\n" -#: src/main.c:72 src/server/server.c:76 +#: src/main.c:73 src/server/server.c:76 #, c-format msgid "" "Copyright (C) %s jeanfi@gmail.com\n" @@ -28,22 +28,22 @@ msgid "" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" -#: src/main.c:82 src/server/server.c:86 +#: src/main.c:83 src/server/server.c:86 #, c-format msgid "Usage: %s [OPTION]...\n" msgstr "用法:%s [选项]...\n" -#: src/main.c:84 +#: src/main.c:85 msgid "" "psensor is a GTK application for monitoring hardware sensors, including " "temperatures and fan speeds." msgstr "psensor 是一个 GTK 程序,用来监视硬件传感器,包括温度和风扇转速。" -#: src/main.c:88 +#: src/main.c:89 msgid "Options:" msgstr "" -#: src/main.c:89 src/server/server.c:93 +#: src/main.c:90 src/server/server.c:93 msgid "" " -h, --help display this help and exit\n" " -v, --version display version information and exit" @@ -51,33 +51,28 @@ msgstr "" " -h, --help 显示这个帮助并退出\n" " -v, --version 显示版本信息并退出" -#: src/main.c:95 +#: src/main.c:96 msgid "" " -u, --url=URL the URL of the psensor-server, example: http://" "hostname:3131" msgstr " -u, --url=URL psensor服务器的 URL ,比如:http://hostname:3131" -#: src/main.c:101 src/server/server.c:106 +#: src/main.c:102 src/server/server.c:106 #, c-format msgid "Report bugs to: %s\n" msgstr "" -#: src/main.c:103 src/server/server.c:108 +#: src/main.c:104 src/server/server.c:108 #, c-format msgid "%s home page: <%s>\n" msgstr "" -#: src/main.c:323 src/server/server.c:346 +#: src/main.c:326 src/server/server.c:346 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "" -#: src/main.c:346 -#, c-format -msgid "ERROR: lmsensor init failure: %s\n" -msgstr "" - -#: src/main.c:357 +#: src/main.c:355 #, c-format msgid "ERROR: Not compiled with remote sensor support.\n" msgstr "" @@ -264,22 +259,42 @@ msgstr "" msgid "URL: http://localhost:%d\n" msgstr "" +#: src/lib/amd.c:159 +#, c-format +msgid "ERROR: ADL library not found!\n" +msgstr "" + +#: src/lib/amd.c:184 +#, c-format +msgid "ERROR: ADL's API is missing!\n" +msgstr "" + +#: src/lib/amd.c:193 +#, c-format +msgid "ERROR: ADL Initialization Error!\n" +msgstr "" + +#: src/lib/amd.c:201 +#, c-format +msgid "ERROR: Cannot get the number of adapters!\n" +msgstr "" + #: src/lib/hdd.c:59 #, c-format -msgid "ERROR: hdd_fetch, failed to open socket\n" +msgid "ERROR: hdd fetch, failed to open socket\n" msgstr "" #: src/lib/hdd.c:73 #, c-format -msgid "ERROR: hdd_fetch, failed to open connection\n" +msgid "ERROR: hdd fetch, failed to open connection\n" msgstr "" -#: src/lib/hdd.c:182 +#: src/lib/hdd.c:183 #, c-format msgid "ERROR: wrong hdd string: %s" msgstr "" -#: src/lib/hdd.c:252 +#: src/lib/hdd.c:253 #, c-format msgid "ERROR: wrong hdd string: %s\n" msgstr "" @@ -289,36 +304,36 @@ msgstr "" msgid "ERROR: failed to retrieve nvidia temperature\n" msgstr "" -#: src/lib/nvidia.c:99 +#: src/lib/nvidia.c:92 #, c-format msgid "ERROR: Cannot open connection to X Server\n" msgstr "" -#: src/lib/nvidia.c:107 +#: src/lib/nvidia.c:100 #, c-format msgid "ERROR: Cannot retrieve NVidia information\n" msgstr "" -#: src/lib/lmsensor.c:43 +#: src/lib/lmsensor.c:44 #, c-format msgid "ERROR: Can't get value of subfeature %s: %s\n" msgstr "" -#: src/lib/lmsensor.c:122 +#: src/lib/lmsensor.c:126 #, c-format msgid "ERROR: create_sensor, wrong feature type\n" msgstr "" -#: src/lib/lmsensor.c:166 +#: src/lib/lmsensor.c:209 #, c-format msgid "ERROR: lm-sensors initialization failure: %s\n" msgstr "" -#: src/lib/psensor.c:448 +#: src/lib/psensor.c:422 msgid "C" msgstr "" -#: src/lib/psensor.c:451 +#: src/lib/psensor.c:425 msgid "RPM" msgstr "" diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am index 511fe34..bf596dc 100644 --- a/src/lib/Makefile.am +++ b/src/lib/Makefile.am @@ -1,8 +1,9 @@ noinst_LIBRARIES = libpsensor.a -libpsensor_a_CFLAGS = -pedantic -Werror +libpsensor_a_CFLAGS = -Werror libpsensor_a_SOURCES = \ + amd.h \ measure.h measure.c \ color.h color.c \ psensor.h psensor.c\ @@ -17,4 +18,10 @@ endif if LIBATIADL LIBS += $(LIBATIADL_LIBS) AM_CPPFLAGS = $(LIBATIADL_CFLAGS) -endif \ No newline at end of file +else +libpsensor_a_CFLAGS += -pedantic +endif + +EXTRA_DIST=$(libpsensor_a_SOURCES) \ + amd.c \ + nvidia.c \ No newline at end of file diff --git a/src/lib/Makefile.in b/src/lib/Makefile.in index 29dace8..64027fd 100644 --- a/src/lib/Makefile.in +++ b/src/lib/Makefile.in @@ -36,6 +36,7 @@ build_triplet = @build@ host_triplet = @host@ @NVIDIA_TRUE@am__append_1 = nvidia.c @LIBATIADL_TRUE@am__append_2 = $(LIBATIADL_LIBS) +@LIBATIADL_FALSE@am__append_3 = -pedantic subdir = src/lib DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -51,9 +52,9 @@ AR = ar ARFLAGS = cru libpsensor_a_AR = $(AR) $(ARFLAGS) libpsensor_a_LIBADD = -am__libpsensor_a_SOURCES_DIST = measure.h measure.c color.h color.c \ - psensor.h psensor.c hdd.h hdd.c nvidia.h lmsensor.h lmsensor.c \ - nvidia.c +am__libpsensor_a_SOURCES_DIST = amd.h measure.h measure.c color.h \ + color.c psensor.h psensor.c hdd.h hdd.c nvidia.h lmsensor.h \ + lmsensor.c nvidia.c @NVIDIA_TRUE@am__objects_1 = libpsensor_a-nvidia.$(OBJEXT) am_libpsensor_a_OBJECTS = libpsensor_a-measure.$(OBJEXT) \ libpsensor_a-color.$(OBJEXT) libpsensor_a-psensor.$(OBJEXT) \ @@ -218,11 +219,15 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libpsensor.a -libpsensor_a_CFLAGS = -pedantic -Werror -libpsensor_a_SOURCES = measure.h measure.c color.h color.c psensor.h \ - psensor.c hdd.h hdd.c nvidia.h lmsensor.h lmsensor.c \ +libpsensor_a_CFLAGS = -Werror $(am__append_3) +libpsensor_a_SOURCES = amd.h measure.h measure.c color.h color.c \ + psensor.h psensor.c hdd.h hdd.c nvidia.h lmsensor.h lmsensor.c \ $(am__append_1) @LIBATIADL_TRUE@AM_CPPFLAGS = $(LIBATIADL_CFLAGS) +EXTRA_DIST = $(libpsensor_a_SOURCES) \ + amd.c \ + nvidia.c + all: all-am .SUFFIXES: diff --git a/src/lib/amd.c b/src/lib/amd.c new file mode 100644 index 0000000..93428b8 --- /dev/null +++ b/src/lib/amd.c @@ -0,0 +1,295 @@ +/* + Copyright (C) 2010-2011 thgreasi@gmail.com + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301 USA +*/ +#ifndef LINUX +#define LINUX 1 +#endif +#ifdef HAVE_LIBATIADL + /* AMD id for the aticonfig */ + int amd_id; +#endif + +#include +#include +#define _(str) gettext(str) + +#include +#include +#include +#include + +#include + +#include "psensor.h" + +typedef int (*ADL_MAIN_CONTROL_CREATE)(ADL_MAIN_MALLOC_CALLBACK, int); +typedef int (*ADL_MAIN_CONTROL_DESTROY)(); +typedef int (*ADL_ADAPTER_NUMBEROFADAPTERS_GET) (int *); +typedef int (*ADL_ADAPTER_ADAPTERINFO_GET) (LPAdapterInfo, int); +typedef int (*ADL_ADAPTER_ACTIVE_GET) (int, int*); +typedef int (*ADL_OVERDRIVE5_TEMPERATURE_GET) (int, int, ADLTemperature*); +typedef int (*ADL_OVERDRIVE5_FANSPEED_GET) (int, int, ADLFanSpeedValue*); + +static ADL_MAIN_CONTROL_CREATE adl_main_control_create; +static ADL_MAIN_CONTROL_DESTROY adl_main_control_destroy; +static ADL_ADAPTER_NUMBEROFADAPTERS_GET adl_adapter_numberofadapters_get; +static ADL_ADAPTER_ADAPTERINFO_GET adl_adapter_adapterinfo_get; +static ADL_ADAPTER_ACTIVE_GET adl_adapter_active_get; +static ADL_OVERDRIVE5_TEMPERATURE_GET adl_overdrive5_temperature_get; +static ADL_OVERDRIVE5_FANSPEED_GET adl_overdrive5_fanspeed_get; + +static void *hdll; +static int adl_main_control_done; +static int *active_amd_adapters; + +/* Memory allocation function */ +static void __stdcall *adl_main_memory_alloc(int isize) +{ + void *lpbuffer = malloc(isize); + return lpbuffer; +} + +/* Optional Memory de-allocation function */ +static void __stdcall adl_main_memory_free(void **lpbuffer) +{ + if (*lpbuffer) { + free(*lpbuffer); + *lpbuffer = NULL; + } +} + +static void *getprocaddress(void *plibrary, const char * name) +{ + return dlsym(plibrary, name); +} + +/* + Returns the temperature (Celcius) of an AMD/Ati GPU. +*/ +static double get_temp(struct psensor *sensor) +{ + ADLTemperature temperature; + + temperature.iSize = sizeof(ADLTemperature); + temperature.iTemperature = -273; + if (ADL_OK != adl_overdrive5_temperature_get(sensor->amd_id, + 0, &temperature)) + return UNKNOWN_DBL_VALUE; + + return temperature.iTemperature/1000; +} + +static double get_fanspeed(struct psensor *sensor) +{ + ADLFanSpeedValue fanspeedvalue; + + fanspeedvalue.iSize = sizeof(ADLFanSpeedValue); + fanspeedvalue.iSpeedType = ADL_DL_FANCTRL_SPEED_TYPE_RPM; + fanspeedvalue.iFanSpeed = -1; + if (ADL_OK != adl_overdrive5_fanspeed_get(sensor->amd_id, + 0, &fanspeedvalue)) + return UNKNOWN_DBL_VALUE; + + return fanspeedvalue.iFanSpeed; +} + +static struct psensor *create_sensor(int id, int values_len) +{ + char name[200]; + char *sid; + int sensor_type; + + struct psensor *s; + + if (id & 1) {/* odd number ids represent fan sensors */ + id = id >> 1; + sprintf(name, "GPU%dfan", id); + sensor_type = SENSOR_TYPE_AMD_FAN; + } else {/* even number ids represent temperature sensors */ + id = id >> 1; + sprintf(name, "GPU%dtemp", id); + sensor_type = SENSOR_TYPE_AMD_TEMP; + } + + sid = malloc(strlen("AMD") + 1 + strlen(name) + 1); + sprintf(sid, "AMD %s", name); + + s = psensor_create(sid, strdup(name), + sensor_type, values_len); + + s->amd_id = active_amd_adapters[id]; + + return s; +} + +/* + Returns the number of AMD/Ati GPU sensors (temperature and fan + speed). + + Return 0 if no AMD/Ati gpus or cannot get information. +*/ +static int init() +{ + LPAdapterInfo lpadapterinfo = NULL; + int i, inumberadapters, inumberadaptersactive = 0; + int lpstatus, iadapterindex; + + hdll = NULL; + adl_main_control_done = 0; + active_amd_adapters = NULL; + hdll = dlopen("libatiadlxx.so", RTLD_LAZY|RTLD_GLOBAL); + + if (!hdll) { + fprintf(stderr, + _("ERROR: ADL library not found!\n")); + return 0; + } + + adl_main_control_create = (ADL_MAIN_CONTROL_CREATE) + getprocaddress(hdll, "ADL_Main_Control_Create"); + adl_main_control_destroy = (ADL_MAIN_CONTROL_DESTROY) + getprocaddress(hdll, "ADL_Main_Control_Destroy"); + adl_adapter_numberofadapters_get = (ADL_ADAPTER_NUMBEROFADAPTERS_GET) + getprocaddress(hdll, "ADL_Adapter_NumberOfAdapters_Get"); + adl_adapter_adapterinfo_get = (ADL_ADAPTER_ADAPTERINFO_GET) + getprocaddress(hdll, "ADL_Adapter_AdapterInfo_Get"); + adl_adapter_active_get = (ADL_ADAPTER_ACTIVE_GET) + getprocaddress(hdll, "ADL_Adapter_Active_Get"); + adl_overdrive5_temperature_get = (ADL_OVERDRIVE5_TEMPERATURE_GET) + getprocaddress(hdll, "ADL_Overdrive5_Temperature_Get"); + adl_overdrive5_fanspeed_get = (ADL_OVERDRIVE5_FANSPEED_GET) + getprocaddress(hdll, "ADL_Overdrive5_FanSpeed_Get"); + if (!adl_main_control_create || + !adl_main_control_destroy || + !adl_adapter_numberofadapters_get || + !adl_adapter_adapterinfo_get || + !adl_overdrive5_temperature_get || + !adl_overdrive5_fanspeed_get) { + fprintf(stderr, + _("ERROR: ADL's API is missing!\n")); + return 0; + } + + /* Initialize ADL. The second parameter is 1, which means: + retrieve adapter information only for adapters that + are physically present and enabled in the system */ + if (ADL_OK != adl_main_control_create(adl_main_memory_alloc, 1)) { + fprintf(stderr, + _("ERROR: ADL Initialization Error!\n")); + return 0; + } + adl_main_control_done = 1; + + /* Obtain the number of adapters for the system */ + if (ADL_OK != adl_adapter_numberofadapters_get(&inumberadapters)) { + fprintf(stderr, + _("ERROR: Cannot get the number of adapters!\n")); + return 0; + } + + if (!inumberadapters) + return 0; + + lpadapterinfo = malloc(sizeof(AdapterInfo) * inumberadapters); + memset(lpadapterinfo, '\0', sizeof(AdapterInfo) * inumberadapters); + + /* Get the AdapterInfo structure for all adapters in the system */ + adl_adapter_adapterinfo_get(lpadapterinfo, + sizeof(AdapterInfo) * inumberadapters); + + /* Repeat for all available adapters in the system */ + for (i = 0; i < inumberadapters; i++) { + iadapterindex = lpadapterinfo[i].iAdapterIndex; + if (ADL_OK != adl_adapter_active_get(iadapterindex, &lpstatus)) + continue; + if (lpstatus != ADL_TRUE) + /* count only if the adapter is active */ + continue; + + if (!active_amd_adapters) { + active_amd_adapters = (int *) malloc(sizeof(int)); + inumberadaptersactive = 1; + } else { + ++inumberadaptersactive; + active_amd_adapters = + (int *) realloc(active_amd_adapters, + sizeof(int)*inumberadaptersactive); + } + active_amd_adapters[inumberadaptersactive-1] = iadapterindex; + } + + adl_main_memory_free((void **) &lpadapterinfo); + + /* Each Adapter has one GPU temperature + sensor and one fan control sensor */ + return 2*inumberadaptersactive; +} + +void amd_psensor_list_update(struct psensor **sensors) +{ + struct psensor **ss, *s; + + ss = sensors; + while (*ss) { + s = *ss; + + if (s->type == SENSOR_TYPE_AMD_TEMP) + psensor_set_current_value(s, get_temp(s)); + else if (s->type == SENSOR_TYPE_AMD_FAN) + psensor_set_current_value(s, get_fanspeed(s)); + + ss++; + } +} + +struct psensor * * +amd_psensor_list_add(struct psensor **sensors, int values_len) +{ + int i, n; + struct psensor **tmp, **ss, *s; + + n = init(); + + ss = sensors; + for (i = 0; i < n; i++) { + s = create_sensor(i, values_len); + + tmp = psensor_list_add(ss, s); + + if (ss != tmp) + free(ss); + + ss = tmp; + } + + return ss; +} + +void amd_cleanup() +{ + if (hdll) { + if (adl_main_control_done) + adl_main_control_destroy(); + dlclose(hdll); + } + + if (active_amd_adapters) { + free(active_amd_adapters); + active_amd_adapters = NULL; + } +} diff --git a/src/lib/amd.h b/src/lib/amd.h new file mode 100644 index 0000000..57e1149 --- /dev/null +++ b/src/lib/amd.h @@ -0,0 +1,300 @@ +/* + Copyright (C) 2010-2011 thgreasi@gmail.com + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301 USA +*/ +#ifndef LINUX +#define LINUX 1 +#endif +#ifdef HAVE_LIBATIADL + /* AMD id for the aticonfig */ + int amd_id; +#endif + +#include +#include +#define _(str) gettext(str) + +#include +#include /* dyopen, dlsym, dlclose */ +#include +#include +#include /* memeset */ + +#include "psensor.h" + +/* Definitions of the used function pointers. + Add more if you use other ADL APIs */ +typedef int (*ADL_MAIN_CONTROL_CREATE)(ADL_MAIN_MALLOC_CALLBACK, int); +typedef int (*ADL_MAIN_CONTROL_DESTROY)(); +typedef int (*ADL_ADAPTER_NUMBEROFADAPTERS_GET) (int *); +typedef int (*ADL_ADAPTER_ADAPTERINFO_GET) (LPAdapterInfo, int); +typedef int (*ADL_ADAPTER_ACTIVE_GET) (int, int*); +typedef int (*ADL_OVERDRIVE5_TEMPERATURE_GET) (int, int, ADLTemperature*); +typedef int (*ADL_OVERDRIVE5_FANSPEED_GET) (int, int, ADLFanSpeedValue*); + +static ADL_MAIN_CONTROL_CREATE adl_main_control_create; +static ADL_MAIN_CONTROL_DESTROY adl_main_control_destroy; +static ADL_ADAPTER_NUMBEROFADAPTERS_GET adl_adapter_numberofadapters_get; +static ADL_ADAPTER_ADAPTERINFO_GET adl_adapter_adapterinfo_get; +static ADL_ADAPTER_ACTIVE_GET adl_adapter_active_get; +static ADL_OVERDRIVE5_TEMPERATURE_GET adl_overdrive5_temperature_get; +static ADL_OVERDRIVE5_FANSPEED_GET adl_overdrive5_fanspeed_get; + +static void *hdll; +static int adl_main_control_done; +static int *active_amd_adapters; + +/* Memory allocation function */ +static void __stdcall *adl_main_memory_alloc(int isize) +{ + void *lpbuffer = malloc(isize); + return lpbuffer; +} + +/* Optional Memory de-allocation function */ +static void __stdcall adl_main_memory_free(void** lpbuffer) +{ + if (*lpbuffer) { + free(*lpbuffer); + *lpbuffer = NULL; + } +} + +static void *getprocaddress(void * plibrary, const char * name) +{ + return dlsym(plibrary, name); +} + +/* + Returns the temperature (Celcius) of an AMD/Ati GPU. +*/ +static int get_temp(struct psensor *sensor) +{ + ADLTemperature temperature; + + temperature.iSize = sizeof(ADLTemperature); + temperature.iTemperature = -273; + if (ADL_OK != adl_overdrive5_temperature_get(sensor->amd_id, + 0, &temperature)) + return -273; + + return temperature.iTemperature/1000; +} + +static int get_fanspeed(struct psensor *sensor) +{ + ADLFanSpeedValue fanspeedvalue; + + fanspeedvalue.iSize = sizeof(ADLFanSpeedValue); + fanspeedvalue.iSpeedType = ADL_DL_FANCTRL_SPEED_TYPE_RPM; + fanspeedvalue.iFanSpeed = -1; + if (ADL_OK != adl_overdrive5_fanspeed_get(sensor->amd_id, + 0, &fanspeedvalue)) + return -1; + + return fanspeedvalue.iFanSpeed; +} + +static struct psensor *create_sensor(int id, int values_len) +{ + char name[200]; + char *sid; + int sensor_type; + + struct psensor *s; + + if (id & 1) {/* odd number ids represent fan sensors */ + id = id >> 1; + sprintf(name, "GPU%dfan", id); + sensor_type = SENSOR_TYPE_AMD_FAN; + } else {/* even number ids represent temperature sensors */ + id = id >> 1; + sprintf(name, "GPU%dtemp", id); + sensor_type = SENSOR_TYPE_AMD_TEMP; + } + + sid = malloc(strlen("AMD") + 1 + strlen(name) + 1); + sprintf(sid, "AMD %s", name); + + s = psensor_create(sid, strdup(name), + sensor_type, values_len); + + s->amd_id = active_amd_adapters[id]; + + return s; +} + +/* + Returns the number of AMD/Ati GPU sensors (temperature and fan speed). + + Return 0 if no AMD/Ati gpus or cannot get information. +*/ +static int init() +{ + LPAdapterInfo lpadapterinfo = NULL; + int i, inumberadapters, inumberadaptersactive = 0; + int lpstatus, iadapterindex; + + hdll = NULL; + adl_main_control_done = 0; + active_amd_adapters = NULL; + hdll = dlopen("libatiadlxx.so", RTLD_LAZY|RTLD_GLOBAL); + + + if (!hdll) { + fprintf(stderr, + _("ERROR: ADL library not found!\n")); + return 0; + } + + adl_main_control_create = (ADL_MAIN_CONTROL_CREATE) + getprocaddress(hdll, "ADL_Main_Control_Create"); + adl_main_control_destroy = (ADL_MAIN_CONTROL_DESTROY) + getprocaddress(hdll, "ADL_Main_Control_Destroy"); + adl_adapter_numberofadapters_get = (ADL_ADAPTER_NUMBEROFADAPTERS_GET) + getprocaddress(hdll, "ADL_Adapter_NumberOfAdapters_Get"); + adl_adapter_adapterinfo_get = (ADL_ADAPTER_ADAPTERINFO_GET) + getprocaddress(hdll, "ADL_Adapter_AdapterInfo_Get"); + adl_adapter_active_get = (ADL_ADAPTER_ACTIVE_GET) + getprocaddress(hdll, "ADL_Adapter_Active_Get"); + adl_overdrive5_temperature_get = (ADL_OVERDRIVE5_TEMPERATURE_GET) + getprocaddress(hdll, "ADL_Overdrive5_Temperature_Get"); + adl_overdrive5_fanspeed_get = (ADL_OVERDRIVE5_FANSPEED_GET) + getprocaddress(hdll, "ADL_Overdrive5_FanSpeed_Get"); + if (!adl_main_control_create || + !adl_main_control_destroy || + !adl_adapter_numberofadapters_get || + !adl_adapter_adapterinfo_get || + !adl_overdrive5_temperature_get || + !adl_overdrive5_fanspeed_get) { + fprintf(stderr, + _("ERROR: ADL's API is missing!\n")); + return 0; + } + + /* Initialize ADL. The second parameter is 1, which means: + retrieve adapter information only for adapters that + are physically present and enabled in the system */ + if (ADL_OK != adl_main_control_create(adl_main_memory_alloc, 1)) { + fprintf(stderr, + _("ERROR: ADL Initialization Error!\n")); + return 0; + } + adl_main_control_done = 1; + + /* Obtain the number of adapters for the system */ + if (ADL_OK != adl_adapter_numberofadapters_get(&inumberadapters)) { + fprintf(stderr, + _("ERROR: Cannot get the number of adapters!\n")); + return 0; + } + + if (!inumberadapters) + return 0; + + lpadapterinfo = malloc(sizeof(AdapterInfo) * inumberadapters); + memset(lpadapterinfo, '\0', sizeof(AdapterInfo) * inumberadapters); + + /* Get the AdapterInfo structure for all adapters in the system */ + adl_adapter_adapterinfo_get(lpadapterinfo, + sizeof(AdapterInfo) * inumberadapters); + + /* Repeat for all available adapters in the system */ + for (i = 0; i < inumberadapters; i++) { + iadapterindex = lpadapterinfo[i].iAdapterIndex; + if (ADL_OK != adl_adapter_active_get(iadapterindex, &lpstatus)) + continue; + if (lpstatus != ADL_TRUE) + /* count only if the adapter is active */ + continue; + + if (!active_amd_adapters) { + active_amd_adapters = (int *) malloc(sizeof(int)); + inumberadaptersactive = 1; + } else { + ++inumberadaptersactive; + active_amd_adapters = + (int *) realloc(active_amd_adapters, + sizeof(int)*inumberadaptersactive); + } + active_amd_adapters[inumberadaptersactive-1] = iadapterindex; + } + + adl_main_memory_free((void **) &lpadapterinfo); + + /* Each Adapter has one GPU temperature + sensor and one fan control sensor */ + return 2*inumberadaptersactive; +} + +void amd_psensor_list_update(struct psensor **sensors) +{ + struct psensor **ss, *s; + + ss = sensors; + while (*ss) { + s = *ss; + + if (s->type == SENSOR_TYPE_AMD_TEMP) + psensor_set_current_value(s, get_temp(s)); + else if (s->type == SENSOR_TYPE_AMD_FAN) + psensor_set_current_value(s, get_fanspeed(s)); + + ss++; + } +} + +struct psensor * * +amd_psensor_list_add(struct psensor **sensors, int values_len) +{ + int i, n; + struct psensor **tmp, **ss, *s; + + n = init(); + + ss = sensors; + for (i = 0; i < n; i++) { + s = create_sensor(i, values_len); + + tmp = psensor_list_add(ss, s); + + if (ss != tmp) + free(ss); + + ss = tmp; + } + + if (active_amd_adapters) { + free(active_amd_adapters); + active_amd_adapters = NULL; + } + + return ss; +} + +void amd_cleanup() +{ + if (hdll) { + if (adl_main_control_done) + adl_main_control_destroy(); + dlclose(hdll); + } + if (active_amd_adapters) { + free(active_amd_adapters); + active_amd_adapters = NULL; + } +} diff --git a/src/lib/psensor.c b/src/lib/psensor.c index 128dc02..3cd6956 100644 --- a/src/lib/psensor.c +++ b/src/lib/psensor.c @@ -403,6 +403,12 @@ const char *psensor_type_to_str(unsigned int type) if (type & SENSOR_TYPE_NVIDIA) return "NVidia GPU Temperature"; + if (type & SENSOR_TYPE_AMD_TEMP) + return "AMD GPU Temperature"; + + if (type & SENSOR_TYPE_AMD_FAN) + return "AMD GPU Fan Speed"; + if (type & SENSOR_TYPE_HDD_TEMP) return "HDD Temperature"; diff --git a/src/lib/psensor.h b/src/lib/psensor.h index 06df8cf..a0fef38 100644 --- a/src/lib/psensor.h +++ b/src/lib/psensor.h @@ -34,7 +34,10 @@ enum psensor_type { SENSOR_TYPE_LMSENSOR_TEMP = 0x0100 | SENSOR_TYPE_TEMP, SENSOR_TYPE_NVIDIA = 0x0200 | SENSOR_TYPE_TEMP, SENSOR_TYPE_HDD_TEMP = 0x0400 | SENSOR_TYPE_TEMP, - SENSOR_TYPE_LMSENSOR_FAN = 0x0800 | SENSOR_TYPE_FAN + SENSOR_TYPE_LMSENSOR_FAN = 0x0800 | SENSOR_TYPE_FAN, + SENSOR_TYPE_AMD = 0x1000, + SENSOR_TYPE_AMD_TEMP = SENSOR_TYPE_AMD | SENSOR_TYPE_TEMP, + SENSOR_TYPE_AMD_FAN = SENSOR_TYPE_AMD | SENSOR_TYPE_FAN }; struct psensor { @@ -91,6 +94,10 @@ struct psensor { /* Nvidia id for the nvctrl */ int nvidia_id; #endif +#ifdef HAVE_LIBATIADL + /* AMD id for the aticonfig */ + int amd_id; +#endif char *url; }; diff --git a/src/main.c b/src/main.c index da7fdef..3a55482 100644 --- a/src/main.c +++ b/src/main.c @@ -47,6 +47,10 @@ #include "nvidia.h" #endif +#ifdef HAVE_LIBATIADL +#include "amd.h" +#endif + #ifdef HAVE_REMOTE_SUPPORT #include "rsensor.h" #endif @@ -141,7 +145,9 @@ void update_psensor_measures(struct ui_psensor *ui) #ifdef HAVE_NVIDIA nvidia_psensor_list_update(sensors); #endif - +#ifdef HAVE_LIBATIADL + amd_psensor_list_update(sensors); +#endif g_mutex_unlock(ui->sensors_mutex); sleep(cfg->sensor_update_interval); @@ -354,6 +360,9 @@ int main(int argc, char **argv) #ifdef HAVE_NVIDIA ui.sensors = nvidia_psensor_list_add(ui.sensors, 600); #endif +#ifdef HAVE_LIBATIADL + ui.sensors = amd_psensor_list_add(ui.sensors, 600); +#endif } associate_preferences(ui.sensors); @@ -396,6 +405,8 @@ int main(int argc, char **argv) #ifdef HAVE_NVIDIA nvidia_cleanup(); #endif - +#ifdef HAVE_LIBATIADL + amd_cleanup(); +#endif return 0; } -- 2.7.4