blob: 0b1f0083c3c5e6f8d538c15ad9d3c26391b2bf7c [file] [log] [blame]
bigbiff bigbiff8a68c312013-02-10 14:28:30 -05001/*
2 Copyright 2012 bigbiff/Dees_Troy TeamWin
3 This file is part of TWRP/TeamWin Recovery Project.
4
5 TWRP is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
9
10 TWRP is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with TWRP. If not, see <http://www.gnu.org/licenses/>.
17*/
18
19using namespace std;
20#include "rapidxml.hpp"
21using namespace rapidxml;
22extern "C" {
23#include "../minzip/Zip.h"
24#include "../minuitwrp/minui.h"
25}
26#include <string>
27#include <vector>
28#include <map>
29#include "resources.hpp"
30#include <pthread.h>
31#include <sys/time.h>
32#include <time.h>
33#include <unistd.h>
34#include <pixelflinger/pixelflinger.h>
35#include <linux/kd.h>
36#include <linux/fb.h>
37#include <sstream>
38#include "pages.hpp"
39#include "blanktimer.hpp"
bigbiff bigbifff8e2f372013-02-27 20:50:43 -050040#include "../data.hpp"
bigbiff bigbiff8a68c312013-02-10 14:28:30 -050041extern "C" {
Dees_Troy2673cec2013-04-02 20:22:16 +000042#include "../twcommon.h"
bigbiff bigbiff8a68c312013-02-10 14:28:30 -050043}
44#include "../twrp-functions.hpp"
45#include "../variables.h"
46
47blanktimer::blanktimer(void) {
Dees_Troy70237dc2013-02-28 21:31:48 +000048 setTime(0);
49 setConBlank(0);
bigbiff bigbiff8a68c312013-02-10 14:28:30 -050050 orig_brightness = getBrightness();
gordon13370d9133d2013-06-08 14:17:07 +020051 screenoff = false;
52}
53
54bool blanktimer::IsScreenOff() {
55 return screenoff;
bigbiff bigbiff8a68c312013-02-10 14:28:30 -050056}
57
Dees_Troy2f9117a2013-02-17 19:52:09 -060058void blanktimer::setTime(int newtime) {
59 sleepTimer = newtime;
60}
61
bigbiff bigbiff8a68c312013-02-10 14:28:30 -050062int blanktimer::setTimerThread(void) {
63 pthread_t thread;
64 ThreadPtr blankptr = &blanktimer::setClockTimer;
65 PThreadPtr p = *(PThreadPtr*)&blankptr;
66 pthread_create(&thread, NULL, p, this);
67 return 0;
68}
69
Dees_Troy70237dc2013-02-28 21:31:48 +000070void blanktimer::setConBlank(int blank) {
71 pthread_mutex_lock(&conblankmutex);
bigbiff bigbiff8a68c312013-02-10 14:28:30 -050072 conblank = blank;
Dees_Troy70237dc2013-02-28 21:31:48 +000073 pthread_mutex_unlock(&conblankmutex);
bigbiff bigbiff8a68c312013-02-10 14:28:30 -050074}
75
76void blanktimer::setTimer(void) {
77 pthread_mutex_lock(&timermutex);
78 clock_gettime(CLOCK_MONOTONIC, &btimer);
79 pthread_mutex_unlock(&timermutex);
80}
81
82timespec blanktimer::getTimer(void) {
83 return btimer;
84}
85
86int blanktimer::setClockTimer(void) {
87 timespec curTime, diff;
Dees_Troy70237dc2013-02-28 21:31:48 +000088 for(;;) {
89 usleep(1000000);
bigbiff bigbiff8a68c312013-02-10 14:28:30 -050090 clock_gettime(CLOCK_MONOTONIC, &curTime);
91 diff = TWFunc::timespec_diff(btimer, curTime);
Dees_Troy70237dc2013-02-28 21:31:48 +000092 if (sleepTimer > 2 && diff.tv_sec > (sleepTimer - 2) && conblank == 0) {
Dees_Troy2f9117a2013-02-17 19:52:09 -060093 orig_brightness = getBrightness();
Dees_Troy70237dc2013-02-28 21:31:48 +000094 setConBlank(1);
95 setBrightness(5);
96 }
97 if (sleepTimer && diff.tv_sec > sleepTimer && conblank < 2) {
98 setConBlank(2);
99 setBrightness(0);
gordon13370d9133d2013-06-08 14:17:07 +0200100 screenoff = true;
Dees_Troy2f9117a2013-02-17 19:52:09 -0600101 PageManager::ChangeOverlay("lock");
102 }
bigbiff bigbiff87940362013-03-09 09:58:50 -0500103#ifndef TW_NO_SCREEN_BLANK
Dees_Troy70237dc2013-02-28 21:31:48 +0000104 if (conblank == 2 && gr_fb_blank(1) >= 0) {
105 setConBlank(3);
bigbiff bigbiff8a68c312013-02-10 14:28:30 -0500106 }
bigbiff bigbiff87940362013-03-09 09:58:50 -0500107#endif
bigbiff bigbiff8a68c312013-02-10 14:28:30 -0500108 }
Dees_Troy70237dc2013-02-28 21:31:48 +0000109 return -1; //shouldn't get here
bigbiff bigbiff8a68c312013-02-10 14:28:30 -0500110}
111
112int blanktimer::getBrightness(void) {
113 string results;
114 string brightness_path = EXPAND(TW_BRIGHTNESS_PATH);
115 if ((TWFunc::read_file(brightness_path, results)) != 0)
116 return -1;
Dees_Troya13d74f2013-03-24 08:54:55 -0500117 int result = atoi(results.c_str());
118 if (result == 0) {
119 int tw_brightness;
120 DataManager::GetValue("tw_brightness", tw_brightness);
121 if (tw_brightness) {
122 result = tw_brightness;
123 } else {
124 result = 255;
125 }
126 }
127 return result;
bigbiff bigbiff8a68c312013-02-10 14:28:30 -0500128
129}
130
131int blanktimer::setBrightness(int brightness) {
132 string brightness_path = EXPAND(TW_BRIGHTNESS_PATH);
133 string bstring;
134 char buff[100];
135 sprintf(buff, "%d", brightness);
136 bstring = buff;
137 if ((TWFunc::write_file(brightness_path, bstring)) != 0)
138 return -1;
139 return 0;
140}
141
142void blanktimer::resetTimerAndUnblank(void) {
143 setTimer();
Dees_Troy70237dc2013-02-28 21:31:48 +0000144 switch (conblank) {
145 case 3:
bigbiff bigbiff87940362013-03-09 09:58:50 -0500146#ifndef TW_NO_SCREEN_BLANK
Dees_Troy70237dc2013-02-28 21:31:48 +0000147 if (gr_fb_blank(0) < 0) {
Dees_Troy2673cec2013-04-02 20:22:16 +0000148 LOGINFO("blanktimer::resetTimerAndUnblank failed to gr_fb_blank(0)\n");
Dees_Troy70237dc2013-02-28 21:31:48 +0000149 break;
150 }
bigbiff bigbiff87940362013-03-09 09:58:50 -0500151#endif
Dees_Troy70237dc2013-02-28 21:31:48 +0000152 // No break here, we want to keep going
153 case 2:
154 gui_forceRender();
gordon13370d9133d2013-06-08 14:17:07 +0200155 screenoff = false;
Dees_Troy70237dc2013-02-28 21:31:48 +0000156 // No break here, we want to keep going
157 case 1:
158 setBrightness(orig_brightness);
159 setConBlank(0);
160 break;
bigbiff bigbiff8a68c312013-02-10 14:28:30 -0500161 }
162}