diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 69c0ff441..113f9c0f9 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -1719,7 +1719,42 @@ void CNeutrinoApp::InitSectiondClient() g_Sectionsd->registerEvent(CSectionsdClient::EVT_WRITE_SI_FINISHED, 222, NEUTRINO_UDS_NAME); } -extern bool timer_wakeup;//timermanager.cpp +#if HAVE_COOL_HARDWARE +#include +#endif + +void wake_up( bool &wakeup) +{ +#if HAVE_COOL_HARDWARE +#ifndef FP_IOCTL_CLEAR_WAKEUP_TIMER +#define FP_IOCTL_CLEAR_WAKEUP_TIMER 10 +#endif + +#define FP_IOCTL_SET_RTC 0x101 +#define FP_IOCTL_GET_RTC 0x102 + + int fd = open("/dev/display", O_RDONLY); + if (fd < 0) { + perror("/dev/display"); + } else { + wakeup_data_t wk; + memset(&wk, 0, sizeof(wk)); + int ret = ioctl(fd, IOC_VFD_GET_WAKEUP, &wk); + if(ret >= 0) + wakeup = ((wk.source == WAKEUP_SOURCE_TIMER) /* || (wk.source == WAKEUP_SOURCE_PWLOST)*/); + close(fd); + } + printf("[timerd] wakeup from standby: %s\n", wakeup ? "yes" : "no"); + if(!wakeup){ + const char *neutrino_leave_deepstandby_script = CONFIGDIR "/deepstandby.off"; + printf("[%s] executing %s\n",__FILE__ ,neutrino_leave_deepstandby_script); + if (system(neutrino_leave_deepstandby_script) != 0) + perror( neutrino_leave_deepstandby_script ); + } +#endif + +} + int CNeutrinoApp::run(int argc, char **argv) { CmdParser(argc, argv); @@ -1788,7 +1823,9 @@ TIMER_START(); g_Zapit->setStandby(false); //timer start - pthread_create (&timer_thread, NULL, timerd_main_thread, (void *) NULL); + bool timer_wakeup = false; + wake_up( timer_wakeup ); + pthread_create (&timer_thread, NULL, timerd_main_thread, (void *) timer_wakeup); init_cec_setting = true; if(!(g_settings.shutdown_timer_record_type && timer_wakeup && g_settings.hdmi_cec_mode)){ diff --git a/src/timerd/timerd.cpp b/src/timerd/timerd.cpp index 4fa540ce2..db1e2c5da 100644 --- a/src/timerd/timerd.cpp +++ b/src/timerd/timerd.cpp @@ -461,7 +461,7 @@ bool timerd_parse_command(CBasicMessage::Header &rmsg, int connfd) return true; } -int timerd_main_thread(void */*data*/) +int timerd_main_thread(void *data) { pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, 0); @@ -474,6 +474,7 @@ int timerd_main_thread(void */*data*/) // Start timer thread CTimerManager::getInstance(); + CTimerManager::getInstance()->wakeup =(bool)data; timerd_server.run(timerd_parse_command, CTimerdMsg::ACTVERSION); printf("timerd shutdown complete\n"); diff --git a/src/timerd/timermanager.cpp b/src/timerd/timermanager.cpp index d02c93644..9a34d4f89 100644 --- a/src/timerd/timermanager.cpp +++ b/src/timerd/timermanager.cpp @@ -33,9 +33,6 @@ #include #include #include -#if HAVE_COOL_HARDWARE -#include -#endif #include #include @@ -43,17 +40,10 @@ #include "debug.h" #include "timermanager.h" -#ifndef FP_IOCTL_CLEAR_WAKEUP_TIMER -#define FP_IOCTL_CLEAR_WAKEUP_TIMER 10 -#endif - -#define FP_IOCTL_SET_RTC 0x101 -#define FP_IOCTL_GET_RTC 0x102 extern bool timeset; time_t timer_minutes; bool timer_is_rec; -bool timer_wakeup; static pthread_mutex_t tm_eventsMutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP; void sectionsd_getEventsServiceKey(t_channel_id serviceUniqueKey, CChannelEventList &eList, char search = 0, std::string search_text = ""); @@ -72,31 +62,6 @@ void CTimerManager::Init(void) m_saveEvents = false; m_isTimeSet = false; wakeup = 0; - timer_wakeup = false; -#if HAVE_COOL_HARDWARE - int fd = open("/dev/display", O_RDONLY); - - if (fd < 0) { - perror("/dev/display"); - } else { - wakeup_data_t wk; - memset(&wk, 0, sizeof(wk)); - int ret = ioctl(fd, IOC_VFD_GET_WAKEUP, &wk); - if(ret >= 0) - wakeup = ((wk.source == WAKEUP_SOURCE_TIMER) /* || (wk.source == WAKEUP_SOURCE_PWLOST)*/); - close(fd); - } - printf("[timerd] wakeup from standby: %s\n", wakeup ? "yes" : "no"); - if(wakeup){ - creat("/tmp/.wakeup", 0); - timer_wakeup = true; - }else{ - const char *neutrino_leave_deepstandby_script = CONFIGDIR "/deepstandby.off"; - printf("[%s] executing %s\n",__FILE__ ,neutrino_leave_deepstandby_script); - if (system(neutrino_leave_deepstandby_script) != 0) - perror( neutrino_leave_deepstandby_script ); - } -#endif loadRecordingSafety(); //thread starten diff --git a/src/timerd/timermanager.h b/src/timerd/timermanager.h index 6fc29e661..db2224311 100644 --- a/src/timerd/timermanager.h +++ b/src/timerd/timermanager.h @@ -219,13 +219,13 @@ private: bool m_isTimeSet; int m_extraTimeStart; int m_extraTimeEnd; - char wakeup; CTimerManager(); static void* timerThread(void *arg); CTimerEvent *nextEvent(); public: + bool wakeup; static CTimerManager* getInstance();