diff --git a/src/neutrino.cpp b/src/neutrino.cpp index cc0e9158e..171bd4641 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -2484,6 +2484,40 @@ void CNeutrinoApp::zapTo(t_channel_id channel_id) } } +void CNeutrinoApp::wakeupFromStandby(void) +{ + bool alive = recordingstatus || CEpgScan::getInstance()->Running() || + CStreamManager::getInstance()->StreamStatus(); + + if ((mode == mode_standby) && !alive) { + cpuFreq->SetCpuFreq(g_settings.cpufreq * 1000 * 1000); + if(g_settings.ci_standby_reset) { + g_CamHandler->exec(NULL, "ca_ci_reset0"); + g_CamHandler->exec(NULL, "ca_ci_reset1"); + } + g_Zapit->setStandby(false); + g_Zapit->getMode(); + } +} + +void CNeutrinoApp::standbyToStandby(void) +{ + bool alive = recordingstatus || CEpgScan::getInstance()->Running() || + CStreamManager::getInstance()->StreamStatus(); + + if ((mode == mode_standby) && !alive) { + // zap back to pre-recording channel if necessary + t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID(); + if (standby_channel_id && (live_channel_id != standby_channel_id)) { + live_channel_id = standby_channel_id; + channelList->zapTo_ChannelID(live_channel_id); + } + g_Zapit->setStandby(true); + g_Sectionsd->setPauseScanning(true); + cpuFreq->SetCpuFreq(g_settings.standby_cpufreq * 1000 * 1000); + } +} + int CNeutrinoApp::handleMsg(const neutrino_msg_t _msg, neutrino_msg_data_t data) { int res = 0; @@ -2726,27 +2760,9 @@ int CNeutrinoApp::handleMsg(const neutrino_msg_t _msg, neutrino_msg_data_t data) /* sent by rcinput, when got msg from zapit about record activated/deactivated */ /* should be sent when no record running */ printf("NeutrinoMessages::EVT_RECORDMODE: %s\n", ( data ) ? "on" : "off"); - //if(!CRecordManager::getInstance()->RecordingStatus() && was_record && (!data)) - - /* no records left and record mode off FIXME check !*/ - if(!CRecordManager::getInstance()->RecordingStatus() && (!data)) - { - if(mode == mode_standby) { - // zap back to pre-recording channel if necessary - t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID(); - if (standby_channel_id && (live_channel_id != standby_channel_id)) { - live_channel_id = standby_channel_id; - channelList->zapTo_ChannelID(live_channel_id); - } - /* do not put zapit to standby, if epg scan not finished */ - if (!CEpgScan::getInstance()->Running()) - g_Zapit->setStandby(true); - cpuFreq->SetCpuFreq(g_settings.standby_cpufreq * 1000 * 1000); - } - /* try to wakeup epg scan */ - CEpgScan::getInstance()->Next(); - } recordingstatus = data; + CEpgScan::getInstance()->Next(); + standbyToStandby(); autoshift = CRecordManager::getInstance()->TimeshiftOnly(); CVFD::getInstance()->ShowIcon(FP_ICON_CAM1, recordingstatus != 0); @@ -2756,15 +2772,8 @@ int CNeutrinoApp::handleMsg(const neutrino_msg_t _msg, neutrino_msg_data_t data) return messages_return::handled; } else if (msg == NeutrinoMessages::RECORD_START) { - //FIXME better at announce ? - if( mode == mode_standby ) { - cpuFreq->SetCpuFreq(g_settings.cpufreq * 1000 * 1000); - if(!recordingstatus && g_settings.ci_standby_reset) { - g_CamHandler->exec(NULL, "ca_ci_reset0"); - g_CamHandler->exec(NULL, "ca_ci_reset1"); - } - } + wakeupFromStandby(); #if 0 //zap to rec channel if box start from deepstandby if(timer_wakeup){ @@ -2801,11 +2810,25 @@ int CNeutrinoApp::handleMsg(const neutrino_msg_t _msg, neutrino_msg_data_t data) delete[] (unsigned char*) data; return messages_return::handled; } + else if (msg == NeutrinoMessages::EVT_STREAM_START) { + int fd = (int) data; + printf("NeutrinoMessages::EVT_STREAM_START: fd %d\n", fd); + wakeupFromStandby(); + + if (!CStreamManager::getInstance()->AddClient(fd)) + close(fd); + return messages_return::handled; + } + else if (msg == NeutrinoMessages::EVT_STREAM_STOP) { + printf("NeutrinoMessages::EVT_STREAM_STOP\n"); + CEpgScan::getInstance()->Next(); + standbyToStandby(); + return messages_return::handled; + } else if( msg == NeutrinoMessages::EVT_PMT_CHANGED) { - res = messages_return::handled; t_channel_id channel_id = *(t_channel_id*) data; CRecordManager::getInstance()->Update(channel_id); - return res; + return messages_return::handled; } else if( msg == NeutrinoMessages::ZAPTO) { diff --git a/src/neutrino.h b/src/neutrino.h index 9652136b0..be8d3a00b 100644 --- a/src/neutrino.h +++ b/src/neutrino.h @@ -213,6 +213,8 @@ public: CPersonalizeGui & getPersonalizeGui() { return personalize; } bool getChannellistIsVisible() { return channellist_visible; } void zapTo(t_channel_id channel_id); + void wakeupFromStandby(void); + void standbyToStandby(void); }; #endif