This adds a 60 second screen timeout for TWRP. Might consider making this configurable in the future.
Will also set overlay to lockscreen so we don't have inadvetent screen selections.
Touching the screen will bring the display back up.
add back check script for poweroff
move diff time function to twrp-functions.cpp
make sure we chmod after copy_file
add read_file and write_file functions to twrp-functions.cpp
make single thread
try to force update screen
add forceRender
drop caches after tar processing
Change-Id: I3c5c509dd39dbb05451bbfe5d8b56d53c90d8d1b
diff --git a/gui/blanktimer.cpp b/gui/blanktimer.cpp
new file mode 100644
index 0000000..f64bb5f
--- /dev/null
+++ b/gui/blanktimer.cpp
@@ -0,0 +1,128 @@
+/*
+ Copyright 2012 bigbiff/Dees_Troy TeamWin
+ This file is part of TWRP/TeamWin Recovery Project.
+
+ TWRP 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 3 of the License, or
+ (at your option) any later version.
+
+ TWRP 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 TWRP. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+using namespace std;
+#include "rapidxml.hpp"
+using namespace rapidxml;
+extern "C" {
+#include "../minzip/Zip.h"
+#include "../minuitwrp/minui.h"
+}
+#include <string>
+#include <vector>
+#include <map>
+#include "resources.hpp"
+#include <pthread.h>
+#include <sys/time.h>
+#include <time.h>
+#include <unistd.h>
+#include <pixelflinger/pixelflinger.h>
+#include <linux/kd.h>
+#include <linux/fb.h>
+#include <sstream>
+#include "pages.hpp"
+#include "blanktimer.hpp"
+extern "C" {
+#include "../common.h"
+#include "../recovery_ui.h"
+}
+#include "../twrp-functions.hpp"
+#include "../variables.h"
+
+blanktimer::blanktimer(void) {
+ blanked = 0;
+ sleepTimer = 60;
+ orig_brightness = getBrightness();
+}
+
+int blanktimer::setTimerThread(void) {
+ pthread_t thread;
+ ThreadPtr blankptr = &blanktimer::setClockTimer;
+ PThreadPtr p = *(PThreadPtr*)&blankptr;
+ pthread_create(&thread, NULL, p, this);
+ return 0;
+}
+
+void blanktimer::setBlank(int blank) {
+ pthread_mutex_lock(&blankmutex);
+ conblank = blank;
+ pthread_mutex_unlock(&blankmutex);
+}
+
+int blanktimer::getBlank(void) {
+ return conblank;
+}
+
+void blanktimer::setTimer(void) {
+ pthread_mutex_lock(&timermutex);
+ clock_gettime(CLOCK_MONOTONIC, &btimer);
+ pthread_mutex_unlock(&timermutex);
+}
+
+timespec blanktimer::getTimer(void) {
+ return btimer;
+}
+
+int blanktimer::setClockTimer(void) {
+ timespec curTime, diff;
+ while(1) {
+ usleep(1000);
+ clock_gettime(CLOCK_MONOTONIC, &curTime);
+ diff = TWFunc::timespec_diff(btimer, curTime);
+ if (diff.tv_sec > sleepTimer && conblank != 1)
+ setBlank(1);
+ if (conblank == 1 && blanked != 1) {
+ blanked = 1;
+ gr_fb_blank(conblank);
+ setBrightness(0);
+ PageManager::ChangeOverlay("lock");
+ }
+ }
+ return -1;
+}
+
+int blanktimer::getBrightness(void) {
+ string results;
+ string brightness_path = EXPAND(TW_BRIGHTNESS_PATH);
+ if ((TWFunc::read_file(brightness_path, results)) != 0)
+ return -1;
+ return atoi(results.c_str());
+
+}
+
+int blanktimer::setBrightness(int brightness) {
+ string brightness_path = EXPAND(TW_BRIGHTNESS_PATH);
+ string bstring;
+ char buff[100];
+ sprintf(buff, "%d", brightness);
+ bstring = buff;
+ if ((TWFunc::write_file(brightness_path, bstring)) != 0)
+ return -1;
+ return 0;
+}
+
+void blanktimer::resetTimerAndUnblank(void) {
+ setTimer();
+ if (blanked) {
+ setBrightness(orig_brightness);
+ blanked = 0;
+ setBlank(0);
+ gr_fb_blank(conblank);
+ gui_forceRender();
+ }
+}