From 8a68c31ffc98bda5abd3bd03f49727c7400bbba8 Mon Sep 17 00:00:00 2001 From: bigbiff bigbiff Date: Sun, 10 Feb 2013 14:28:30 -0500 Subject: 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 --- gui/Android.mk | 7 +- gui/action.cpp | 3 + gui/blanktimer.cpp | 128 +++++++ gui/blanktimer.hpp | 55 +++ gui/gui.cpp | 1012 ++++++++++++++++++++++++++++------------------------ gui/gui.h | 26 +- 6 files changed, 751 insertions(+), 480 deletions(-) create mode 100644 gui/blanktimer.cpp create mode 100644 gui/blanktimer.hpp (limited to 'gui') diff --git a/gui/Android.mk b/gui/Android.mk index 58d9c4ba0..9e11e5e2d 100644 --- a/gui/Android.mk +++ b/gui/Android.mk @@ -19,7 +19,9 @@ LOCAL_SRC_FILES := \ slider.cpp \ listbox.cpp \ keyboard.cpp \ - input.cpp + input.cpp \ + blanktimer.cpp \ + ../minuitwrp/graphics.c ifneq ($(TWRP_CUSTOM_KEYBOARD),) LOCAL_SRC_FILES += $(TWRP_CUSTOM_KEYBOARD) @@ -46,6 +48,9 @@ endif ifneq ($(TW_EXTERNAL_STORAGE_PATH),) LOCAL_CFLAGS += -DTW_EXTERNAL_STORAGE_PATH=$(TW_EXTERNAL_STORAGE_PATH) endif +ifneq ($(TW_BRIGHTNESS_PATH),) + LOCAL_CFLAGS += -DTW_BRIGHTNESS_PATH=$(TW_BRIGHTNESS_PATH) +endif LOCAL_C_INCLUDES += bionic external/stlport/stlport $(commands_recovery_local_path)/gui/devices/$(DEVICE_RESOLUTION) diff --git a/gui/action.cpp b/gui/action.cpp index e56db2b76..f1dac1c9b 100644 --- a/gui/action.cpp +++ b/gui/action.cpp @@ -24,6 +24,7 @@ #include "../ui.h" #include "../adb_install.h" +#include "blanktimer.hpp" extern "C" { #include "../common.h" @@ -44,6 +45,7 @@ int gui_start(); #include "objects.hpp" extern RecoveryUI* ui; +extern blanktimer blankTimer; void curtainClose(void); @@ -323,6 +325,7 @@ void GUIAction::operation_end(const int operation_status, const int simulate) } DataManager::SetValue("tw_operation_state", 1); DataManager::SetValue(TW_ACTION_BUSY, 0); + blankTimer.resetTimerAndUnblank(); } int GUIAction::doAction(Action action, int isThreaded /* = 0 */) diff --git a/gui/blanktimer.cpp b/gui/blanktimer.cpp new file mode 100644 index 000000000..f64bb5f45 --- /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 . +*/ + +using namespace std; +#include "rapidxml.hpp" +using namespace rapidxml; +extern "C" { +#include "../minzip/Zip.h" +#include "../minuitwrp/minui.h" +} +#include +#include +#include +#include "resources.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#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(); + } +} diff --git a/gui/blanktimer.hpp b/gui/blanktimer.hpp new file mode 100644 index 000000000..74712bd75 --- /dev/null +++ b/gui/blanktimer.hpp @@ -0,0 +1,55 @@ +/* + 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 . +*/ + +#ifndef __BLANKTIMER_HEADER_HPP +#define __BLANKTIMER_HEADER_HPP + +#include +#include + +using namespace std; + +class blanktimer { + public: + blanktimer(void); + int setTimerThread(void); + void resetTimerAndUnblank(void); + + private: + void setBlank(int blank); + int getBlank(void); + void setTimer(void); + timespec getTimer(void); + int getBrightness(void); + int setBrightness(int brightness); + int setBlankTimer(void); + int setClockTimer(void); + typedef int (blanktimer::*ThreadPtr)(void); + typedef void* (*PThreadPtr)(void*); + pthread_mutex_t blankmutex; + pthread_mutex_t timermutex; + int conblank; + timespec btimer; + unsigned long long sleepTimer; + int orig_brightness; + int blanked; +}; + +extern blanktimer blankTimer; + +#endif // __BLANKTIMER_HEADER_HPP diff --git a/gui/gui.cpp b/gui/gui.cpp index 92eab2983..7fd474a35 100644 --- a/gui/gui.cpp +++ b/gui/gui.cpp @@ -33,8 +33,8 @@ #include #include - -extern "C" { +extern "C" +{ #include "../common.h" #include "../roots.h" #include "../minuitwrp/minui.h" @@ -48,6 +48,8 @@ extern "C" { #include "../data.hpp" #include "../variables.h" #include "../partitions.hpp" +#include "../twrp-functions.hpp" +#include "blanktimer.hpp" const static int CURTAIN_FADE = 32; @@ -59,609 +61,687 @@ static int gGuiInitialized = 0; static int gGuiConsoleRunning = 0; static int gGuiConsoleTerminate = 0; static int gForceRender = 0; +pthread_mutex_t gForceRendermutex; static int gNoAnimation = 1; static int gGuiInputRunning = 0; +blanktimer blankTimer; // Needed by pages.cpp too int gGuiRunning = 0; static int gRecorder = -1; -extern "C" void gr_write_frame_to_file(int fd); +extern "C" void gr_write_frame_to_file (int fd); -void flip(void) +void +flip (void) { - if (gRecorder != -1) - { - timespec time; - clock_gettime(CLOCK_MONOTONIC, &time); - write(gRecorder, &time, sizeof(timespec)); - gr_write_frame_to_file(gRecorder); - } - gr_flip(); - return; + if (gRecorder != -1) + { + timespec time; + clock_gettime (CLOCK_MONOTONIC, &time); + write (gRecorder, &time, sizeof (timespec)); + gr_write_frame_to_file (gRecorder); + } + gr_flip (); + return; } -void rapidxml::parse_error_handler(const char *what, void *where) +void +rapidxml::parse_error_handler (const char *what, void *where) { - fprintf(stderr, "Parser error: %s\n", what); - fprintf(stderr, " Start of string: %s\n", (char*) where); - abort(); + fprintf (stderr, "Parser error: %s\n", what); + fprintf (stderr, " Start of string: %s\n", (char *) where); + abort (); } -static void curtainSet() +static void +curtainSet () { - gr_color(0, 0, 0, 255); - gr_fill(0, 0, gr_fb_width(), gr_fb_height()); - gr_blit(gCurtain, 0, 0, gr_get_width(gCurtain), gr_get_height(gCurtain), 0, 0); - gr_flip(); - return; + gr_color (0, 0, 0, 255); + gr_fill (0, 0, gr_fb_width (), gr_fb_height ()); + gr_blit (gCurtain, 0, 0, gr_get_width (gCurtain), gr_get_height (gCurtain), + 0, 0); + gr_flip (); + return; } -static void curtainRaise(gr_surface surface) +static void +curtainRaise (gr_surface surface) { - int sy = 0; - int h = gr_get_height(gCurtain) - 1; - int w = gr_get_width(gCurtain); - int fy = 1; - - int msw = gr_get_width(surface); - int msh = gr_get_height(surface); - int CURTAIN_RATE = msh / 30; - - if (gNoAnimation == 0) - { - for (; h > 0; h -= CURTAIN_RATE, sy += CURTAIN_RATE, fy += CURTAIN_RATE) - { - gr_blit(surface, 0, 0, msw, msh, 0, 0); - gr_blit(gCurtain, 0, sy, w, h, 0, 0); - gr_flip(); - } - } - gr_blit(surface, 0, 0, msw, msh, 0, 0); - flip(); - return; + int sy = 0; + int h = gr_get_height (gCurtain) - 1; + int w = gr_get_width (gCurtain); + int fy = 1; + + int msw = gr_get_width (surface); + int msh = gr_get_height (surface); + int CURTAIN_RATE = msh / 30; + + if (gNoAnimation == 0) + { + for (; h > 0; h -= CURTAIN_RATE, sy += CURTAIN_RATE, fy += CURTAIN_RATE) + { + gr_blit (surface, 0, 0, msw, msh, 0, 0); + gr_blit (gCurtain, 0, sy, w, h, 0, 0); + gr_flip (); + } + } + gr_blit (surface, 0, 0, msw, msh, 0, 0); + flip (); + return; } -void curtainClose() +void +curtainClose () { #if 0 - int w = gr_get_width(gCurtain); - int h = 1; - int sy = gr_get_height(gCurtain) - 1; - int fbh = gr_fb_height(); - int CURTAIN_RATE = fbh / 30; - - if (gNoAnimation == 0) - { - for (; h < fbh; h += CURTAIN_RATE, sy -= CURTAIN_RATE) - { - gr_blit(gCurtain, 0, sy, w, h, 0, 0); - gr_flip(); - } - gr_blit(gCurtain, 0, 0, gr_get_width(gCurtain), gr_get_height(gCurtain), 0, 0); - gr_flip(); - - if (gRecorder != -1) - close(gRecorder); - - int fade; - for (fade = 16; fade < 255; fade += CURTAIN_FADE) - { - gr_blit(gCurtain, 0, 0, gr_get_width(gCurtain), gr_get_height(gCurtain), 0, 0); - gr_color(0, 0, 0, fade); - gr_fill(0, 0, gr_fb_width(), gr_fb_height()); - gr_flip(); - } - gr_color(0, 0, 0, 255); - gr_fill(0, 0, gr_fb_width(), gr_fb_height()); - gr_flip(); - } + int w = gr_get_width (gCurtain); + int h = 1; + int sy = gr_get_height (gCurtain) - 1; + int fbh = gr_fb_height (); + int CURTAIN_RATE = fbh / 30; + + if (gNoAnimation == 0) + { + for (; h < fbh; h += CURTAIN_RATE, sy -= CURTAIN_RATE) + { + gr_blit (gCurtain, 0, sy, w, h, 0, 0); + gr_flip (); + } + gr_blit (gCurtain, 0, 0, gr_get_width (gCurtain), + gr_get_height (gCurtain), 0, 0); + gr_flip (); + + if (gRecorder != -1) + close (gRecorder); + + int fade; + for (fade = 16; fade < 255; fade += CURTAIN_FADE) + { + gr_blit (gCurtain, 0, 0, gr_get_width (gCurtain), + gr_get_height (gCurtain), 0, 0); + gr_color (0, 0, 0, fade); + gr_fill (0, 0, gr_fb_width (), gr_fb_height ()); + gr_flip (); + } + gr_color (0, 0, 0, 255); + gr_fill (0, 0, gr_fb_width (), gr_fb_height ()); + gr_flip (); + } #else - gr_blit(gCurtain, 0, 0, gr_get_width(gCurtain), gr_get_height(gCurtain), 0, 0); - gr_flip(); + gr_blit (gCurtain, 0, 0, gr_get_width (gCurtain), gr_get_height (gCurtain), + 0, 0); + gr_flip (); #endif - return; + return; } -timespec timespec_diff(timespec& start, timespec& end) +static void * +input_thread (void *cookie) { - timespec temp; - if ((end.tv_nsec-start.tv_nsec)<0) { - temp.tv_sec = end.tv_sec-start.tv_sec-1; - temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec; - } else { - temp.tv_sec = end.tv_sec-start.tv_sec; - temp.tv_nsec = end.tv_nsec-start.tv_nsec; - } - return temp; -} + int drag = 0; + static int touch_and_hold = 0, dontwait = 0, touch_repeat = 0, x = 0, y = + 0, lshift = 0, rshift = 0, key_repeat = 0; + static struct timeval touchStart; + HardwareKeyboard kb; -static void *input_thread(void *cookie) -{ - int drag = 0; - static int touch_and_hold = 0, dontwait = 0, touch_repeat = 0, x = 0, y = 0, lshift = 0, rshift = 0, key_repeat = 0; - static struct timeval touchStart; - HardwareKeyboard kb; + //start screen timeout threads + blankTimer.setTimerThread(); - for (;;) { + for (;;) + { - // wait for the next event - struct input_event ev; - int state = 0, ret = 0; + // wait for the next event + struct input_event ev; + int state = 0, ret = 0; - ret = ev_get(&ev, dontwait); + ret = ev_get (&ev, dontwait); - if (ret < 0) { - struct timeval curTime; - gettimeofday(&curTime, NULL); - long mtime, seconds, useconds; + if (ret < 0) + { + struct timeval curTime; + gettimeofday (&curTime, NULL); + long mtime, seconds, useconds; - seconds = curTime.tv_sec - touchStart.tv_sec; - useconds = curTime.tv_usec - touchStart.tv_usec; + seconds = curTime.tv_sec - touchStart.tv_sec; + useconds = curTime.tv_usec - touchStart.tv_usec; - mtime = ((seconds) * 1000 + useconds/1000.0) + 0.5; - if (touch_and_hold && mtime > 500) { - touch_and_hold = 0; - touch_repeat = 1; - gettimeofday(&touchStart, NULL); + mtime = ((seconds) * 1000 + useconds / 1000.0) + 0.5; + if (touch_and_hold && mtime > 500) + { + touch_and_hold = 0; + touch_repeat = 1; + gettimeofday (&touchStart, NULL); #ifdef _EVENT_LOGGING - LOGE("TOUCH_HOLD: %d,%d\n", x, y); + LOGE ("TOUCH_HOLD: %d,%d\n", x, y); #endif - PageManager::NotifyTouch(TOUCH_HOLD, x, y); - } else if (touch_repeat && mtime > 100) { + PageManager::NotifyTouch (TOUCH_HOLD, x, y); + blankTimer.resetTimerAndUnblank(); + } + else if (touch_repeat && mtime > 100) + { #ifdef _EVENT_LOGGING - LOGE("TOUCH_REPEAT: %d,%d\n", x, y); + LOGE ("TOUCH_REPEAT: %d,%d\n", x, y); #endif - gettimeofday(&touchStart, NULL); - PageManager::NotifyTouch(TOUCH_REPEAT, x, y); - } else if (key_repeat == 1 && mtime > 500) { + gettimeofday (&touchStart, NULL); + PageManager::NotifyTouch (TOUCH_REPEAT, x, y); + blankTimer.resetTimerAndUnblank(); + } + else if (key_repeat == 1 && mtime > 500) + { #ifdef _EVENT_LOGGING - LOGE("KEY_HOLD: %d,%d\n", x, y); + LOGE ("KEY_HOLD: %d,%d\n", x, y); #endif - gettimeofday(&touchStart, NULL); - key_repeat = 2; - kb.KeyRepeat(); - } else if (key_repeat == 2 && mtime > 100) { + gettimeofday (&touchStart, NULL); + key_repeat = 2; + kb.KeyRepeat (); + blankTimer.resetTimerAndUnblank(); + } + else if (key_repeat == 2 && mtime > 100) + { #ifdef _EVENT_LOGGING - LOGE("KEY_REPEAT: %d,%d\n", x, y); + LOGE ("KEY_REPEAT: %d,%d\n", x, y); #endif - gettimeofday(&touchStart, NULL); - kb.KeyRepeat(); + gettimeofday (&touchStart, NULL); + kb.KeyRepeat (); + blankTimer.resetTimerAndUnblank(); } - } else if (ev.type == EV_ABS) { + } + else if (ev.type == EV_ABS) + { - x = ev.value >> 16; - y = ev.value & 0xFFFF; + x = ev.value >> 16; + y = ev.value & 0xFFFF; - if (ev.code == 0) - { - if (state == 0) - { + if (ev.code == 0) + { + if (state == 0) + { #ifdef _EVENT_LOGGING - LOGE("TOUCH_RELEASE: %d,%d\n", x, y); + LOGE ("TOUCH_RELEASE: %d,%d\n", x, y); #endif - PageManager::NotifyTouch(TOUCH_RELEASE, x, y); - touch_and_hold = 0; - touch_repeat = 0; - if (!key_repeat) - dontwait = 0; - } - state = 0; - drag = 0; - } - else - { - if (!drag) - { + PageManager::NotifyTouch (TOUCH_RELEASE, x, y); + blankTimer.resetTimerAndUnblank(); + touch_and_hold = 0; + touch_repeat = 0; + if (!key_repeat) + dontwait = 0; + } + state = 0; + drag = 0; + } + else + { + if (!drag) + { #ifdef _EVENT_LOGGING - LOGE("TOUCH_START: %d,%d\n", x, y); + LOGE ("TOUCH_START: %d,%d\n", x, y); #endif - if (PageManager::NotifyTouch(TOUCH_START, x, y) > 0) - state = 1; - drag = 1; - touch_and_hold = 1; - dontwait = 1; - key_repeat = 0; - gettimeofday(&touchStart, NULL); - } - else - { - if (state == 0) - { + if (PageManager::NotifyTouch (TOUCH_START, x, y) > 0) + state = 1; + drag = 1; + touch_and_hold = 1; + dontwait = 1; + key_repeat = 0; + gettimeofday (&touchStart, NULL); + blankTimer.resetTimerAndUnblank(); + } + else + { + if (state == 0) + { #ifdef _EVENT_LOGGING - LOGE("TOUCH_DRAG: %d,%d\n", x, y); + LOGE ("TOUCH_DRAG: %d,%d\n", x, y); #endif - if (PageManager::NotifyTouch(TOUCH_DRAG, x, y) > 0) - state = 1; - key_repeat = 0; - } - } - } - } - else if (ev.type == EV_KEY) - { - // Handle key-press here + if (PageManager::NotifyTouch (TOUCH_DRAG, x, y) > 0) + state = 1; + key_repeat = 0; + blankTimer.resetTimerAndUnblank(); + } + } + } + } + else if (ev.type == EV_KEY) + { + // Handle key-press here #ifdef _EVENT_LOGGING - LOGE("TOUCH_KEY: %d\n", ev.code); + LOGE ("TOUCH_KEY: %d\n", ev.code); #endif - if (ev.value != 0) { - // This is a key press - if (kb.KeyDown(ev.code)) { - key_repeat = 1; - touch_and_hold = 0; - touch_repeat = 0; - dontwait = 1; - gettimeofday(&touchStart, NULL); - } else { - key_repeat = 0; - touch_and_hold = 0; - touch_repeat = 0; - dontwait = 0; + if (ev.value != 0) + { + // This is a key press + if (kb.KeyDown (ev.code)) + { + key_repeat = 1; + touch_and_hold = 0; + touch_repeat = 0; + dontwait = 1; + gettimeofday (&touchStart, NULL); + blankTimer.resetTimerAndUnblank(); + } + else + { + key_repeat = 0; + touch_and_hold = 0; + touch_repeat = 0; + dontwait = 0; + blankTimer.resetTimerAndUnblank(); } - } else { - // This is a key release - kb.KeyUp(ev.code); - key_repeat = 0; - touch_and_hold = 0; - touch_repeat = 0; - dontwait = 0; } - } - } - return NULL; + else + { + // This is a key release + kb.KeyUp (ev.code); + key_repeat = 0; + touch_and_hold = 0; + touch_repeat = 0; + dontwait = 0; + blankTimer.resetTimerAndUnblank(); + } + } + } + return NULL; } // This special function will return immediately the first time, but then // always returns 1/30th of a second (or immediately if called later) from // the last time it was called -static void loopTimer(void) +static void +loopTimer (void) { - static timespec lastCall; - static int initialized = 0; - - if (!initialized) - { - clock_gettime(CLOCK_MONOTONIC, &lastCall); - initialized = 1; - return; - } - - do - { - timespec curTime; - clock_gettime(CLOCK_MONOTONIC, &curTime); - - timespec diff = timespec_diff(lastCall, curTime); - - // This is really 30 times per second - if (diff.tv_sec || diff.tv_nsec > 33333333) - { - lastCall = curTime; - return; - } - - // We need to sleep some period time microseconds - unsigned int sleepTime = 33333 - (diff.tv_nsec / 1000); - usleep(sleepTime); - } while(1); - return; + static timespec lastCall; + static int initialized = 0; + + if (!initialized) + { + clock_gettime (CLOCK_MONOTONIC, &lastCall); + initialized = 1; + return; + } + + do + { + timespec curTime; + clock_gettime (CLOCK_MONOTONIC, &curTime); + + timespec diff = TWFunc::timespec_diff (lastCall, curTime); + + // This is really 30 times per second + if (diff.tv_sec || diff.tv_nsec > 33333333) + { + lastCall = curTime; + return; + } + + // We need to sleep some period time microseconds + unsigned int sleepTime = 33333 - (diff.tv_nsec / 1000); + usleep (sleepTime); + } + while (1); + return; } -static int runPages(void) +static int +runPages (void) { - // Raise the curtain - if (gCurtain != NULL) - { - gr_surface surface; - - PageManager::Render(); - gr_get_surface(&surface); - curtainRaise(surface); - gr_free_surface(surface); - } - - gGuiRunning = 1; - - DataManager::SetValue("tw_loaded", 1); - - for (;;) - { - loopTimer(); - - if (!gForceRender) - { - int ret; - - ret = PageManager::Update(); - if (ret > 1) - PageManager::Render(); - - if (ret > 0) - flip(); - } - else - { - gForceRender = 0; - PageManager::Render(); - flip(); - } - } - - gGuiRunning = 0; - return 0; + // Raise the curtain + if (gCurtain != NULL) + { + gr_surface surface; + + PageManager::Render (); + gr_get_surface (&surface); + curtainRaise (surface); + gr_free_surface (surface); + } + + gGuiRunning = 1; + + DataManager::SetValue ("tw_loaded", 1); + + for (;;) + { + loopTimer (); + + if (!gForceRender) + { + int ret; + + ret = PageManager::Update (); + if (ret > 1) + PageManager::Render (); + + if (ret > 0) + flip (); + } + else + { + pthread_mutex_lock(&gForceRendermutex); + gForceRender = 0; + pthread_mutex_unlock(&gForceRendermutex); + PageManager::Render (); + flip (); + } + } + + gGuiRunning = 0; + return 0; } -static int runPage(const char* page_name) +static int +runPage (const char *page_name) { - gui_changePage(page_name); - - // Raise the curtain - if (gCurtain != NULL) - { - gr_surface surface; - - PageManager::Render(); - gr_get_surface(&surface); - curtainRaise(surface); - gr_free_surface(surface); - } - - gGuiRunning = 1; - - DataManager::SetValue("tw_loaded", 1); - - for (;;) - { - loopTimer(); - - if (!gForceRender) - { - int ret; - - ret = PageManager::Update(); - if (ret > 1) - PageManager::Render(); - - if (ret > 0) - flip(); - } - else - { - gForceRender = 0; - PageManager::Render(); - flip(); - } - if (DataManager::GetIntValue("tw_page_done") != 0) { - gui_changePage("main"); - break; + gui_changePage (page_name); + + // Raise the curtain + if (gCurtain != NULL) + { + gr_surface surface; + + PageManager::Render (); + gr_get_surface (&surface); + curtainRaise (surface); + gr_free_surface (surface); + } + + gGuiRunning = 1; + + DataManager::SetValue ("tw_loaded", 1); + + for (;;) + { + loopTimer (); + + if (!gForceRender) + { + int ret; + + ret = PageManager::Update (); + if (ret > 1) + PageManager::Render (); + + if (ret > 0) + flip (); + } + else + { + pthread_mutex_lock(&gForceRendermutex); + gForceRender = 0; + pthread_mutex_unlock(&gForceRendermutex); + PageManager::Render (); + flip (); } - } + if (DataManager::GetIntValue ("tw_page_done") != 0) + { + gui_changePage ("main"); + break; + } + } - gGuiRunning = 0; - return 0; + gGuiRunning = 0; + return 0; } -int gui_forceRender(void) +int +gui_forceRender (void) { - gForceRender = 1; - return 0; + pthread_mutex_lock(&gForceRendermutex); + gForceRender = 1; + pthread_mutex_unlock(&gForceRendermutex); + return 0; } -int gui_changePage(std::string newPage) +int +gui_changePage (std::string newPage) { - LOGI("Set page: '%s'\n", newPage.c_str()); - PageManager::ChangePage(newPage); - gForceRender = 1; - return 0; + LOGI ("Set page: '%s'\n", newPage.c_str ()); + PageManager::ChangePage (newPage); + pthread_mutex_lock(&gForceRendermutex); + gForceRender = 1; + pthread_mutex_unlock(&gForceRendermutex); + return 0; } -int gui_changeOverlay(std::string overlay) +int +gui_changeOverlay (std::string overlay) { - PageManager::ChangeOverlay(overlay); - gForceRender = 1; - return 0; + PageManager::ChangeOverlay (overlay); + pthread_mutex_lock(&gForceRendermutex); + gForceRender = 1; + pthread_mutex_unlock(&gForceRendermutex); + return 0; } -int gui_changePackage(std::string newPackage) +int +gui_changePackage (std::string newPackage) { - PageManager::SelectPackage(newPackage); - gForceRender = 1; - return 0; + PageManager::SelectPackage (newPackage); + pthread_mutex_lock(&gForceRendermutex); + gForceRender = 1; + pthread_mutex_unlock(&gForceRendermutex); + return 0; } -std::string gui_parse_text(string inText) +std::string gui_parse_text (string inText) { - // Copied from std::string GUIText::parseText(void) - // This function parses text for DataManager values encompassed by %value% in the XML - static int counter = 0; - std::string str = inText; - size_t pos = 0; - size_t next = 0, end = 0; - - while (1) - { - next = str.find('%', pos); - if (next == std::string::npos) return str; - end = str.find('%', next + 1); - if (end == std::string::npos) return str; - - // We have a block of data - std::string var = str.substr(next + 1, (end - next) - 1); - str.erase(next, (end - next) + 1); - - if (next + 1 == end) - { - str.insert(next, 1, '%'); - } - else - { - std::string value; - if (DataManager::GetValue(var, value) == 0) - str.insert(next, value); - } - - pos = next + 1; - } + // Copied from std::string GUIText::parseText(void) + // This function parses text for DataManager values encompassed by %value% in the XML + static int counter = 0; + std::string str = inText; + size_t pos = 0; + size_t next = 0, end = 0; + + while (1) + { + next = str.find ('%', pos); + if (next == std::string::npos) + return str; + end = str.find ('%', next + 1); + if (end == std::string::npos) + return str; + + // We have a block of data + std::string var = str.substr (next + 1, (end - next) - 1); + str.erase (next, (end - next) + 1); + + if (next + 1 == end) + { + str.insert (next, 1, '%'); + } + else + { + std::string value; + if (DataManager::GetValue (var, value) == 0) + str.insert (next, value); + } + + pos = next + 1; + } } -extern "C" int gui_init() +extern "C" int +gui_init () { - int fd; + int fd; - gr_init(); + gr_init (); - if (res_create_surface("/res/images/curtain.jpg", &gCurtain)) + if (res_create_surface ("/res/images/curtain.jpg", &gCurtain)) { - printf("Unable to locate '/res/images/curtain.jpg'\nDid you set a DEVICE_RESOLUTION in your config files?\n"); - return -1; + printf + ("Unable to locate '/res/images/curtain.jpg'\nDid you set a DEVICE_RESOLUTION in your config files?\n"); + return -1; } - curtainSet(); + curtainSet (); - ev_init(); - return 0; + ev_init (); + return 0; } -extern "C" int gui_loadResources() +extern "C" int +gui_loadResources () { // unlink("/sdcard/video.last"); // rename("/sdcard/video.bin", "/sdcard/video.last"); // gRecorder = open("/sdcard/video.bin", O_CREAT | O_WRONLY); - int check = 0; - DataManager::GetValue(TW_IS_ENCRYPTED, check); - if (check) { - if (PageManager::LoadPackage("TWRP", "/res/ui.xml", "decrypt")) + int check = 0; + DataManager::GetValue (TW_IS_ENCRYPTED, check); + if (check) + { + if (PageManager::LoadPackage ("TWRP", "/res/ui.xml", "decrypt")) { - LOGE("Failed to load base packages.\n"); - goto error; - } else - check = 1; + LOGE ("Failed to load base packages.\n"); + goto error; + } + else + check = 1; } - if (check == 0 && PageManager::LoadPackage("TWRP", "/script/ui.xml", "main")) { - std::string theme_path; - - theme_path = DataManager::GetSettingsStoragePath(); - if (!PartitionManager.Mount_Settings_Storage(false)) { - int retry_count = 5; - while (retry_count > 0 && !PartitionManager.Mount_Settings_Storage(false)) { - usleep(500000); - retry_count--; + if (check == 0 + && PageManager::LoadPackage ("TWRP", "/script/ui.xml", "main")) + { + std::string theme_path; + + theme_path = DataManager::GetSettingsStoragePath (); + if (!PartitionManager.Mount_Settings_Storage (false)) + { + int retry_count = 5; + while (retry_count > 0 + && !PartitionManager.Mount_Settings_Storage (false)) + { + usleep (500000); + retry_count--; } - if (!PartitionManager.Mount_Settings_Storage(false)) { - LOGE("Unable to mount %s during GUI startup.\n", theme_path.c_str()); - check = 1; + if (!PartitionManager.Mount_Settings_Storage (false)) + { + LOGE ("Unable to mount %s during GUI startup.\n", + theme_path.c_str ()); + check = 1; } } - theme_path += "/TWRP/theme/ui.zip"; - if (check || PageManager::LoadPackage("TWRP", theme_path, "main")) + theme_path += "/TWRP/theme/ui.zip"; + if (check || PageManager::LoadPackage ("TWRP", theme_path, "main")) { - if (PageManager::LoadPackage("TWRP", "/res/ui.xml", "main")) + if (PageManager::LoadPackage ("TWRP", "/res/ui.xml", "main")) { - LOGE("Failed to load base packages.\n"); - goto error; + LOGE ("Failed to load base packages.\n"); + goto error; } } } - // Set the default package - PageManager::SelectPackage("TWRP"); + // Set the default package + PageManager::SelectPackage ("TWRP"); - gGuiInitialized = 1; - return 0; + gGuiInitialized = 1; + return 0; error: - LOGE("An internal error has occurred.\n"); - gGuiInitialized = 0; - return -1; + LOGE ("An internal error has occurred.\n"); + gGuiInitialized = 0; + return -1; } -extern "C" int gui_start() +extern "C" int +gui_start () { - if (!gGuiInitialized) return -1; + if (!gGuiInitialized) + return -1; - gGuiConsoleTerminate = 1; - while (gGuiConsoleRunning) loopTimer(); + gGuiConsoleTerminate = 1; + while (gGuiConsoleRunning) + loopTimer (); - // Set the default package - PageManager::SelectPackage("TWRP"); + // Set the default package + PageManager::SelectPackage ("TWRP"); - if (!gGuiInputRunning) { - // Start by spinning off an input handler. - pthread_t t; - pthread_create(&t, NULL, input_thread, NULL); - gGuiInputRunning = 1; + if (!gGuiInputRunning) + { + // Start by spinning off an input handler. + pthread_t t; + pthread_create (&t, NULL, input_thread, NULL); + gGuiInputRunning = 1; } - return runPages(); + return runPages (); } -extern "C" int gui_startPage(const char* page_name) +extern "C" int +gui_startPage (const char *page_name) { - if (!gGuiInitialized) return -1; + if (!gGuiInitialized) + return -1; - gGuiConsoleTerminate = 1; - while (gGuiConsoleRunning) loopTimer(); + gGuiConsoleTerminate = 1; + while (gGuiConsoleRunning) + loopTimer (); - // Set the default package - PageManager::SelectPackage("TWRP"); + // Set the default package + PageManager::SelectPackage ("TWRP"); - if (!gGuiInputRunning) { - // Start by spinning off an input handler. - pthread_t t; - pthread_create(&t, NULL, input_thread, NULL); - gGuiInputRunning = 1; + if (!gGuiInputRunning) + { + // Start by spinning off an input handler. + pthread_t t; + pthread_create (&t, NULL, input_thread, NULL); + gGuiInputRunning = 1; } - DataManager::SetValue("tw_page_done", 0); - return runPage(page_name); + DataManager::SetValue ("tw_page_done", 0); + return runPage (page_name); } -static void *console_thread(void *cookie) +static void * +console_thread (void *cookie) { - PageManager::SwitchToConsole(); - - while (!gGuiConsoleTerminate) - { - loopTimer(); - - if (!gForceRender) - { - int ret; - - ret = PageManager::Update(); - if (ret > 1) - PageManager::Render(); - - if (ret > 0) - flip(); - - if (ret < 0) - LOGE("An update request has failed.\n"); - } - else - { - gForceRender = 0; - PageManager::Render(); - flip(); - } - } - gGuiConsoleRunning = 0; - return NULL; + PageManager::SwitchToConsole (); + + while (!gGuiConsoleTerminate) + { + loopTimer (); + + if (!gForceRender) + { + int ret; + + ret = PageManager::Update (); + if (ret > 1) + PageManager::Render (); + + if (ret > 0) + flip (); + + if (ret < 0) + LOGE ("An update request has failed.\n"); + } + else + { + pthread_mutex_lock(&gForceRendermutex); + gForceRender = 0; + pthread_mutex_unlock(&gForceRendermutex); + PageManager::Render (); + flip (); + } + } + gGuiConsoleRunning = 0; + return NULL; } -extern "C" int gui_console_only() +extern "C" int +gui_console_only () { - if (!gGuiInitialized) return -1; + if (!gGuiInitialized) + return -1; - gGuiConsoleTerminate = 0; - gGuiConsoleRunning = 1; + gGuiConsoleTerminate = 0; + gGuiConsoleRunning = 1; - // Start by spinning off an input handler. - pthread_t t; - pthread_create(&t, NULL, console_thread, NULL); + // Start by spinning off an input handler. + pthread_t t; + pthread_create (&t, NULL, console_thread, NULL); - return 0; + return 0; } diff --git a/gui/gui.h b/gui/gui.h index ee3cc272a..c6af2e4d1 100644 --- a/gui/gui.h +++ b/gui/gui.h @@ -1,13 +1,13 @@ -#ifndef _GUI_HEADER -#define _GUI_HEADER - -int gui_console_only(); -int gui_init(); -int gui_loadResources(); -int gui_start(); -int gui_startPage(const char* page_name); -void gui_print(const char *fmt, ...); -void gui_print_overwrite(const char *fmt, ...); - -#endif // _GUI_HEADER - +#ifndef _GUI_HEADER +#define _GUI_HEADER + +int gui_console_only(); +int gui_init(); +int gui_loadResources(); +int gui_start(); +int gui_startPage(const char* page_name); +void gui_print(const char *fmt, ...); +void gui_print_overwrite(const char *fmt, ...); + +#endif // _GUI_HEADER + -- cgit v1.2.3