diff --git a/src/driver/rcinput.cpp b/src/driver/rcinput.cpp index 3940cc1dc..4c867bfa2 100644 --- a/src/driver/rcinput.cpp +++ b/src/driver/rcinput.cpp @@ -52,6 +52,7 @@ #include #include #include +#include #include //#define RCDEBUG @@ -136,6 +137,7 @@ CRCInput::CRCInput() repeat_block = repeat_block_generic = 0; open(); rc_last_key = KEY_MAX; + firstKey = true; //select and setup remote control hardware set_rc_hw(); @@ -1194,6 +1196,10 @@ void CRCInput::getMsg_us(neutrino_msg_t * msg, neutrino_msg_data_t * data, uint6 if(ret != sizeof(t_input_event)) continue; SHTDCNT::getInstance()->resetSleepTimer(); + if (firstKey) { + firstKey = false; + CTimerManager::getInstance()->cancelShutdownOnWakeup(); + } uint32_t trkey = translate(ev.code, i); #ifdef DEBUG printf("key: %04x value %d, translate: %04x -%s-\n", ev.code, ev.value, trkey, getKeyName(trkey).c_str()); diff --git a/src/driver/rcinput.h b/src/driver/rcinput.h index 2b39ada3d..091d36a35 100644 --- a/src/driver/rcinput.h +++ b/src/driver/rcinput.h @@ -151,6 +151,7 @@ class CRCInput int fd_max; int clickfd; + bool firstKey; __u16 rc_last_key; void set_dsp(); diff --git a/src/timerd/timermanager.cpp b/src/timerd/timermanager.cpp index a9bfa47e2..4ae79b00c 100644 --- a/src/timerd/timermanager.cpp +++ b/src/timerd/timermanager.cpp @@ -727,11 +727,12 @@ bool CTimerManager::shutdown() void CTimerManager::shutdownOnWakeup(int currEventID) { time_t nextAnnounceTime=0; - if(wakeup == 0) - return; - wakeup = 0; pthread_mutex_lock(&tm_eventsMutex); + if(wakeup == 0) { + pthread_mutex_unlock(&tm_eventsMutex); + return; + } CTimerEventMap::iterator pos = events.begin(); for(;pos != events.end();++pos) @@ -756,10 +757,23 @@ void CTimerManager::shutdownOnWakeup(int currEventID) { // in den naechsten 10 min steht nix an dprintf("Programming shutdown event\n"); CTimerEvent_Shutdown* event = new CTimerEvent_Shutdown(now+120, now+180); - addEvent(event); + shutdown_eventID = addEvent(event); + wakeup = 0; } pthread_mutex_unlock(&tm_eventsMutex); } + +void CTimerManager::cancelShutdownOnWakeup() +{ + pthread_mutex_lock(&tm_eventsMutex); + if (shutdown_eventID > -1) { + removeEvent(shutdown_eventID); + shutdown_eventID = -1; + } + wakeup = 0; + pthread_mutex_unlock(&tm_eventsMutex); +} + void CTimerManager::setRecordingSafety(int pre, int post) { m_extraTimeStart=pre; diff --git a/src/timerd/timermanager.h b/src/timerd/timermanager.h index 76b4b2749..042b46655 100644 --- a/src/timerd/timermanager.h +++ b/src/timerd/timermanager.h @@ -212,6 +212,7 @@ class CTimerManager private: void Init(void); int eventID; + int shutdown_eventID; CEventServer *eventServer; CTimerEventMap events; pthread_t thrTimer; @@ -247,6 +248,7 @@ public: void getRecordingSafety(int &pre, int &post){pre=m_extraTimeStart;post=m_extraTimeEnd;} void setRecordingSafety(int pre, int post); void loadRecordingSafety(); + void cancelShutdownOnWakeup(); }; #endif