diff options
author | Joe <bousset.rudy@gmail.com> | 2019-12-03 20:21:09 +0100 |
---|---|---|
committer | Joe <bousset.rudy@gmail.com> | 2019-12-03 20:21:09 +0100 |
commit | 89737ad005f4c066234a5282a1a46eb68b2c1ace (patch) | |
tree | 7b521091227050c84dca220715e20bf1347c39d3 /src | |
parent | README update (diff) | |
download | lowbat-gnu-89737ad005f4c066234a5282a1a46eb68b2c1ace.tar.gz lowbat-gnu-89737ad005f4c066234a5282a1a46eb68b2c1ace.tar.bz2 lowbat-gnu-89737ad005f4c066234a5282a1a46eb68b2c1ace.tar.xz lowbat-gnu-89737ad005f4c066234a5282a1a46eb68b2c1ace.tar.zst lowbat-gnu-89737ad005f4c066234a5282a1a46eb68b2c1ace.zip |
cpp mode
Diffstat (limited to 'src')
-rw-r--r-- | src/jo_exec.cpp | 15 | ||||
-rw-r--r-- | src/jo_notify.cpp | 26 | ||||
-rw-r--r-- | src/main.cpp | 35 |
3 files changed, 76 insertions, 0 deletions
diff --git a/src/jo_exec.cpp b/src/jo_exec.cpp new file mode 100644 index 0000000..a97012c --- /dev/null +++ b/src/jo_exec.cpp @@ -0,0 +1,15 @@ +#include <jo_lowbat.hpp> + +string +jo_exec(const char* cmd) { + array<char, 128> buffer; + string result; + unique_ptr<FILE, decltype(&pclose)> pipe(popen(cmd, "r"), pclose); + if (!pipe) { + throw runtime_error("popen() failed!"); + } + while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) { + result += buffer.data(); + } + return result; +} diff --git a/src/jo_notify.cpp b/src/jo_notify.cpp new file mode 100644 index 0000000..1683871 --- /dev/null +++ b/src/jo_notify.cpp @@ -0,0 +1,26 @@ +#include <jo_lowbat.hpp> + +void +jo_notify(const string batlvl) { + string str = nullptr; + const char *cmd = nullptr; + + str = "notify-send \""; + str += batlvl; + str += "%\" \"Please plug in computer\" -u critical -t 15000"; + + cmd = str.c_str(); + system(cmd); +} + +void +jo_speak(const string msg) { + string str = nullptr; + const char *cmd = nullptr; + + str = "echo \""; + str += msg; + str += "\" | espeak"; + cmd = str.c_str(); + system(cmd); +} diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..2fe6063 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,35 @@ +#include <jo_lowbat.hpp> + +int main(int argc, const char *argv[]) { + string msg = nullptr; + string acstat = nullptr; + string batlvl = nullptr; + stringstream battoint = nullptr; + int batlvlint = 0; + + if (memcmp(argv[1], "--say", strlen(argv[1]))) + msg = "beep beep - low battery"; + else + msg = argv[2]; + + while (true) { + acstat = jo_exec("acpi | awk '{print $3}' | rev | cut -c 2- | rev"); + batlvl = jo_exec("acpi | awk '{print $4}' | rev | cut -c 3- | rev"); + battoint = batlvl; + battoint >> batlvlint; + if (batlvlint < 15) { + while (!memcmp(acstat, "Discharging", strlen(acstat))) { + jo_notify(batlvl); + if (memcmp(argv[1], "--silent", strlen(argv[1]))) + jo_speak(msg); + sleep_for(seconds(20)); + acstat = jo_exec("acpi | awk '{print $3}' | rev | cut -c 2- | rev"); + batlvl = jo_exec("acpi | awk '{print $4}' | rev | cut -c 3- | rev"); + if (!memcmp(acstat, "Charging", strlen(acstat))) + break ; + } + } + sleep_for(seconds(240)); + } + return 0; +} |