added experimental support for ati/amd gpu/fan
authorJean-Philippe Orsini <jeanfi@gmail.com>
Mon, 18 Jul 2011 16:22:38 +0000 (16:22 +0000)
committerJean-Philippe Orsini <jeanfi@gmail.com>
Mon, 18 Jul 2011 16:22:38 +0000 (16:22 +0000)
14 files changed:
AUTHORS
NEWS
po/POTFILES.in
po/fr.po
po/psensor.pot
po/tr.po
po/zh_CN.po
src/lib/Makefile.am
src/lib/Makefile.in
src/lib/amd.c [new file with mode: 0644]
src/lib/amd.h [new file with mode: 0644]
src/lib/psensor.c
src/lib/psensor.h
src/main.c

diff --git a/AUTHORS b/AUTHORS
index 42f6416..380b1d9 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,4 +1,5 @@
 Authors of psensor.
 
 jeanfi@gmail.com        all files.
 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 (file)
--- 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.
    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
 
 
 * v0.6.2.9
 
index a732feb..1bde9b0 100644 (file)
@@ -8,6 +8,7 @@ src/ui_pref.c
 src/ui_sensorpref.c  
 src/rsensor.c
 src/server/server.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
 src/lib/hdd.c
 src/lib/nvidia.c
 src/lib/lmsensor.c
index 48d8e38..c43f9af 100644 (file)
--- 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"
 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 <jeanfi@gmail.com>\n"
 "Language-Team: Oriya\n"
 "PO-Revision-Date: 2011-02-07 21:18+0100\n"
 "Last-Translator: Jean-Philippe Orsini <jeanfi@gmail.com>\n"
 "Language-Team: Oriya\n"
@@ -16,7 +16,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8-bit\n"
 
 "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"
 #, 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"
 
 "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"
 
 #, 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."
 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."
 
 "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:"
 
 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"
 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"
 
 "  -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"
 
 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"
 
 #, 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"
 
 #, 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"
 
 #, 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 ""
 #, 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"
 
 msgid "URL: http://localhost:%d\n"
 msgstr "URL: http://localhost:%d\n"
 
-#: src/lib/hdd.c:59
+#: src/lib/amd.c:159
 #, c-format
 #, 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
 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"
 
 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"
 
 #, 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"
 #, 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"
 
 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"
 
 #, 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"
 
 #, 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"
 
 #, 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"
 
 #, 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"
 
 #, 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 ""
 
 msgid "C"
 msgstr ""
 
-#: src/lib/psensor.c:451
+#: src/lib/psensor.c:425
 msgid "RPM"
 msgstr ""
 
 msgid "RPM"
 msgstr ""
 
@@ -474,6 +490,10 @@ msgstr "Dessiner la courbe de la sonde"
 msgid "°C"
 msgstr "°C"
 
 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"
 
 #~ 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 "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"
 
 #~ msgid "ERROR: nvidia initialization failure: %d\n"
 #~ msgstr "ERREUR: échec de l'initialisation nvidia: %d\n"
 
index 91bf893..4fd45d0 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: jeanfi@gmail.com\n"
 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 <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,7 +17,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
 "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"
 #, 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 ""
 
 "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 ""
 
 #, 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 ""
 
 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 ""
 
 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 ""
 
 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 ""
 
 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 ""
 
 #, 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 ""
 
 #, 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 ""
 
 #, 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 ""
 #, c-format
 msgid "ERROR: Not compiled with remote sensor support.\n"
 msgstr ""
@@ -260,22 +255,42 @@ msgstr ""
 msgid "URL: http://localhost:%d\n"
 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
 #: 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
 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 ""
 
 msgstr ""
 
-#: src/lib/hdd.c:182
+#: src/lib/hdd.c:183
 #, c-format
 msgid "ERROR: wrong hdd string: %s"
 msgstr ""
 
 #, 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 ""
 #, c-format
 msgid "ERROR: wrong hdd string: %s\n"
 msgstr ""
@@ -285,36 +300,36 @@ msgstr ""
 msgid "ERROR: failed to retrieve nvidia temperature\n"
 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 ""
 
 #, 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 ""
 
 #, 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 ""
 
 #, 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 ""
 
 #, 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 ""
 
 #, c-format
 msgid "ERROR: lm-sensors initialization failure: %s\n"
 msgstr ""
 
-#: src/lib/psensor.c:448
+#: src/lib/psensor.c:422
 msgid "C"
 msgstr ""
 
 msgid "C"
 msgstr ""
 
-#: src/lib/psensor.c:451
+#: src/lib/psensor.c:425
 msgid "RPM"
 msgstr ""
 
 msgid "RPM"
 msgstr ""
 
index 5cd299a..44e129c 100644 (file)
--- 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"
 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 <Unknown>\n"
 "Language-Team: Turkish <tr@li.org>\n"
 "PO-Revision-Date: 2011-04-10 13:11+0000\n"
 "Last-Translator: zeugma <Unknown>\n"
 "Language-Team: Turkish <tr@li.org>\n"
@@ -18,7 +18,7 @@ msgstr ""
 "X-Launchpad-Export-Date: 2011-04-11 05:41+0000\n"
 "X-Generator: Launchpad (build 12735)\n"
 
 "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"
 #, 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 ""
 
 "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"
 
 #, 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 ""
 
 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 ""
 
 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 ""
 
 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 ""
 
 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"
 
 #, 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"
 
 #, 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"
 
 #, 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 ""
 #, c-format
 msgid "ERROR: Not compiled with remote sensor support.\n"
 msgstr ""
@@ -265,22 +260,42 @@ msgstr ""
 msgid "URL: http://localhost:%d\n"
 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
 #: 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
 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 ""
 
 msgstr ""
 
-#: src/lib/hdd.c:182
+#: src/lib/hdd.c:183
 #, c-format
 msgid "ERROR: wrong hdd string: %s"
 msgstr ""
 
 #, 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 ""
 #, c-format
 msgid "ERROR: wrong hdd string: %s\n"
 msgstr ""
@@ -290,36 +305,36 @@ msgstr ""
 msgid "ERROR: failed to retrieve nvidia temperature\n"
 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 ""
 
 #, 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 ""
 
 #, 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 ""
 
 #, 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 ""
 
 #, 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 ""
 
 #, c-format
 msgid "ERROR: lm-sensors initialization failure: %s\n"
 msgstr ""
 
-#: src/lib/psensor.c:448
+#: src/lib/psensor.c:422
 msgid "C"
 msgstr ""
 
 msgid "C"
 msgstr ""
 
-#: src/lib/psensor.c:451
+#: src/lib/psensor.c:425
 msgid "RPM"
 msgstr ""
 
 msgid "RPM"
 msgstr ""
 
index be8c742..bdd9b20 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: psensor 0.6.0.10\n"
 "Report-Msgid-Bugs-To: jeanfi@gmail.com\n"
 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 <Unknown>\n"
 "Language-Team: Chinese (simplified)\n"
 "PO-Revision-Date: 2011-06-06 08:57+0000\n"
 "Last-Translator: royclark <Unknown>\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"
 
 "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"
 #, 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 ""
 
 "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"
 
 #, 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 程序,用来监视硬件传感器,包括温度和风扇转速。"
 
 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 ""
 
 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"
 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 显示版本信息并退出"
 
 "  -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"
 
 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 ""
 
 #, 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 ""
 
 #, 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 ""
 
 #, 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 ""
 #, c-format
 msgid "ERROR: Not compiled with remote sensor support.\n"
 msgstr ""
@@ -264,22 +259,42 @@ msgstr ""
 msgid "URL: http://localhost:%d\n"
 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
 #: 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
 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 ""
 
 msgstr ""
 
-#: src/lib/hdd.c:182
+#: src/lib/hdd.c:183
 #, c-format
 msgid "ERROR: wrong hdd string: %s"
 msgstr ""
 
 #, 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 ""
 #, c-format
 msgid "ERROR: wrong hdd string: %s\n"
 msgstr ""
@@ -289,36 +304,36 @@ msgstr ""
 msgid "ERROR: failed to retrieve nvidia temperature\n"
 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 ""
 
 #, 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 ""
 
 #, 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 ""
 
 #, 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 ""
 
 #, 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 ""
 
 #, c-format
 msgid "ERROR: lm-sensors initialization failure: %s\n"
 msgstr ""
 
-#: src/lib/psensor.c:448
+#: src/lib/psensor.c:422
 msgid "C"
 msgstr ""
 
 msgid "C"
 msgstr ""
 
-#: src/lib/psensor.c:451
+#: src/lib/psensor.c:425
 msgid "RPM"
 msgstr ""
 
 msgid "RPM"
 msgstr ""
 
index 511fe34..bf596dc 100644 (file)
@@ -1,8 +1,9 @@
 noinst_LIBRARIES = libpsensor.a
 
 noinst_LIBRARIES = libpsensor.a
 
-libpsensor_a_CFLAGS = -pedantic -Werror
+libpsensor_a_CFLAGS = -Werror
 
 libpsensor_a_SOURCES = \
 
 libpsensor_a_SOURCES = \
+       amd.h \
        measure.h measure.c \
        color.h color.c \
        psensor.h psensor.c\
        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)
 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
index 29dace8..64027fd 100644 (file)
@@ -36,6 +36,7 @@ build_triplet = @build@
 host_triplet = @host@
 @NVIDIA_TRUE@am__append_1 = nvidia.c
 @LIBATIADL_TRUE@am__append_2 = $(LIBATIADL_LIBS)
 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
 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 =
 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) \
 @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
 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)
        $(am__append_1)
 @LIBATIADL_TRUE@AM_CPPFLAGS = $(LIBATIADL_CFLAGS)
+EXTRA_DIST = $(libpsensor_a_SOURCES) \
+       amd.c \
+       nvidia.c
+
 all: all-am
 
 .SUFFIXES:
 all: all-am
 
 .SUFFIXES:
diff --git a/src/lib/amd.c b/src/lib/amd.c
new file mode 100644 (file)
index 0000000..93428b8
--- /dev/null
@@ -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 <locale.h>
+#include <libintl.h>
+#define _(str) gettext(str)
+
+#include <dlfcn.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <adl_sdk.h>
+
+#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 (file)
index 0000000..57e1149
--- /dev/null
@@ -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 <locale.h>
+#include <libintl.h>
+#define _(str) gettext(str)
+
+#include <adl_sdk.h>
+#include <dlfcn.h>     /* dyopen, dlsym, dlclose */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>    /* 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;
+       }
+}
index 128dc02..3cd6956 100644 (file)
@@ -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_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";
 
        if (type & SENSOR_TYPE_HDD_TEMP)
                return "HDD Temperature";
 
index 06df8cf..a0fef38 100644 (file)
@@ -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_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 {
 };
 
 struct psensor {
@@ -91,6 +94,10 @@ struct psensor {
        /* Nvidia id for the nvctrl */
        int nvidia_id;
 #endif
        /* Nvidia id for the nvctrl */
        int nvidia_id;
 #endif
+#ifdef HAVE_LIBATIADL
+       /* AMD id for the aticonfig */
+       int amd_id;
+#endif
 
        char *url;
 };
 
        char *url;
 };
index da7fdef..3a55482 100644 (file)
 #include "nvidia.h"
 #endif
 
 #include "nvidia.h"
 #endif
 
+#ifdef HAVE_LIBATIADL
+#include "amd.h"
+#endif
+
 #ifdef HAVE_REMOTE_SUPPORT
 #include "rsensor.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_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);
                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_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);
        }
 
        associate_preferences(ui.sensors);
@@ -396,6 +405,8 @@ int main(int argc, char **argv)
 #ifdef HAVE_NVIDIA
        nvidia_cleanup();
 #endif
 #ifdef HAVE_NVIDIA
        nvidia_cleanup();
 #endif
-
+#ifdef HAVE_LIBATIADL
+       amd_cleanup();
+#endif
        return 0;
 }
        return 0;
 }