summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--gui/blanktimer.cpp54
-rw-r--r--gui/blanktimer.hpp6
-rw-r--r--minuitwrp/graphics.c3
-rw-r--r--minuitwrp/minui.h2
4 files changed, 36 insertions, 29 deletions
diff --git a/gui/blanktimer.cpp b/gui/blanktimer.cpp
index cf35f6544..d7a6ffffc 100644
--- a/gui/blanktimer.cpp
+++ b/gui/blanktimer.cpp
@@ -46,7 +46,8 @@ extern "C" {
#include "../variables.h"
blanktimer::blanktimer(void) {
- blanked = 0;
+ setTime(0);
+ setConBlank(0);
orig_brightness = getBrightness();
}
@@ -62,14 +63,10 @@ int blanktimer::setTimerThread(void) {
return 0;
}
-void blanktimer::setBlank(int blank) {
- pthread_mutex_lock(&blankmutex);
+void blanktimer::setConBlank(int blank) {
+ pthread_mutex_lock(&conblankmutex);
conblank = blank;
- pthread_mutex_unlock(&blankmutex);
-}
-
-int blanktimer::getBlank(void) {
- return conblank;
+ pthread_mutex_unlock(&conblankmutex);
}
void blanktimer::setTimer(void) {
@@ -84,22 +81,25 @@ timespec blanktimer::getTimer(void) {
int blanktimer::setClockTimer(void) {
timespec curTime, diff;
- while(1) {
- usleep(1000);
+ for(;;) {
+ usleep(1000000);
clock_gettime(CLOCK_MONOTONIC, &curTime);
diff = TWFunc::timespec_diff(btimer, curTime);
- if (sleepTimer && diff.tv_sec > sleepTimer && conblank != 1) {
+ if (sleepTimer > 2 && diff.tv_sec > (sleepTimer - 2) && conblank == 0) {
orig_brightness = getBrightness();
- setBlank(1);
- PageManager::ChangeOverlay("lock");
+ setConBlank(1);
+ setBrightness(5);
}
- if (conblank == 1 && blanked != 1) {
- blanked = 1;
- gr_fb_blank(conblank);
+ if (sleepTimer && diff.tv_sec > sleepTimer && conblank < 2) {
+ setConBlank(2);
setBrightness(0);
+ PageManager::ChangeOverlay("lock");
+ }
+ if (conblank == 2 && gr_fb_blank(1) >= 0) {
+ setConBlank(3);
}
}
- return -1;
+ return -1; //shouldn't get here
}
int blanktimer::getBrightness(void) {
@@ -124,11 +124,19 @@ int blanktimer::setBrightness(int brightness) {
void blanktimer::resetTimerAndUnblank(void) {
setTimer();
- if (blanked) {
- setBrightness(orig_brightness);
- blanked = 0;
- setBlank(0);
- gr_fb_blank(conblank);
- gui_forceRender();
+ switch (conblank) {
+ case 3:
+ if (gr_fb_blank(0) < 0) {
+ LOGI("blanktimer::resetTimerAndUnblank failed to gr_fb_blank(0)\n");
+ break;
+ }
+ // No break here, we want to keep going
+ case 2:
+ gui_forceRender();
+ // No break here, we want to keep going
+ case 1:
+ setBrightness(orig_brightness);
+ setConBlank(0);
+ break;
}
}
diff --git a/gui/blanktimer.hpp b/gui/blanktimer.hpp
index 4135635f8..2d83c4dae 100644
--- a/gui/blanktimer.hpp
+++ b/gui/blanktimer.hpp
@@ -32,8 +32,7 @@ class blanktimer {
void setTime(int newtime);
private:
- void setBlank(int blank);
- int getBlank(void);
+ void setConBlank(int blank);
void setTimer(void);
timespec getTimer(void);
int getBrightness(void);
@@ -42,13 +41,12 @@ class blanktimer {
int setClockTimer(void);
typedef int (blanktimer::*ThreadPtr)(void);
typedef void* (*PThreadPtr)(void*);
- pthread_mutex_t blankmutex;
+ pthread_mutex_t conblankmutex;
pthread_mutex_t timermutex;
int conblank;
timespec btimer;
unsigned long long sleepTimer;
int orig_brightness;
- int blanked;
};
extern blanktimer blankTimer;
diff --git a/minuitwrp/graphics.c b/minuitwrp/graphics.c
index dc79db881..61a98c3f7 100644
--- a/minuitwrp/graphics.c
+++ b/minuitwrp/graphics.c
@@ -685,13 +685,14 @@ gr_pixel *gr_fb_data(void)
return (unsigned short *) gr_mem_surface.data;
}
-void gr_fb_blank(int blank)
+int gr_fb_blank(int blank)
{
int ret;
ret = ioctl(gr_fb_fd, FBIOBLANK, blank ? FB_BLANK_POWERDOWN : FB_BLANK_UNBLANK);
if (ret < 0)
perror("ioctl(): blank");
+ return ret;
}
int gr_get_surface(gr_surface* surface)
diff --git a/minuitwrp/minui.h b/minuitwrp/minui.h
index d66807cbb..03e15bb81 100644
--- a/minuitwrp/minui.h
+++ b/minuitwrp/minui.h
@@ -27,7 +27,7 @@ int gr_fb_width(void);
int gr_fb_height(void);
gr_pixel *gr_fb_data(void);
void gr_flip(void);
-void gr_fb_blank(int blank);
+int gr_fb_blank(int blank);
void gr_color(unsigned char r, unsigned char g, unsigned char b, unsigned char a);
void gr_fill(int x, int y, int w, int h);