zapit/src/zapit.cpp: add ZapForEpg()

Origin commit data
------------------
Commit: 640056c938
Author: [CST] Focus <focus.cst@gmail.com>
Date: 2013-08-12 (Mon, 12 Aug 2013)
This commit is contained in:
[CST] Focus
2013-08-12 13:35:14 +04:00
parent ce2f9ac922
commit 2d9cfc3142
2 changed files with 54 additions and 3 deletions

View File

@@ -6,6 +6,7 @@
#define __zapit_h__ #define __zapit_h__
#include <OpenThreads/Thread> #include <OpenThreads/Thread>
#include <OpenThreads/ReentrantMutex>
#include <configfile.h> #include <configfile.h>
#include <eventserver.h> #include <eventserver.h>
#include <connection/basicserver.h> #include <connection/basicserver.h>
@@ -102,7 +103,7 @@ class CZapit : public OpenThreads::Thread
RECORD_MODE = 0x04 RECORD_MODE = 0x04
}; };
OpenThreads::Mutex mutex; OpenThreads::ReentrantMutex mutex;
bool started; bool started;
bool event_mode; bool event_mode;
bool firstzap; bool firstzap;
@@ -211,6 +212,7 @@ class CZapit : public OpenThreads::Thread
bool ParseCommand(CBasicMessage::Header &rmsg, int connfd); bool ParseCommand(CBasicMessage::Header &rmsg, int connfd);
bool ZapIt(const t_channel_id channel_id, bool for_update = false, bool startplayback = true); bool ZapIt(const t_channel_id channel_id, bool for_update = false, bool startplayback = true);
bool ZapForRecord(const t_channel_id channel_id); bool ZapForRecord(const t_channel_id channel_id);
bool ZapForEpg(const t_channel_id channel_id);
bool ChangeAudioPid(uint8_t index); bool ChangeAudioPid(uint8_t index);
void SetRadioMode(); void SetRadioMode();
void SetTVMode(); void SetTVMode();
@@ -257,5 +259,7 @@ class CZapit : public OpenThreads::Thread
int SetVolumePercent(int percent); int SetVolumePercent(int percent);
bool StartPip(const t_channel_id channel_id); bool StartPip(const t_channel_id channel_id);
bool StopPip(); bool StopPip();
void Lock() { mutex.lock(); }
void Unlock() { mutex.unlock(); }
}; };
#endif /* __zapit_h__ */ #endif /* __zapit_h__ */

View File

@@ -71,6 +71,7 @@
#include <driver/abstime.h> #include <driver/abstime.h>
#include <libdvbsub/dvbsub.h> #include <libdvbsub/dvbsub.h>
#include <libtuxtxt/teletext.h> #include <libtuxtxt/teletext.h>
#include <OpenThreads/ScopedLock>
/* globals */ /* globals */
int sig_delay = 2; // seconds between signal check int sig_delay = 2; // seconds between signal check
@@ -596,7 +597,7 @@ bool CZapit::StartPip(const t_channel_id channel_id)
if((newchannel = CServiceManager::getInstance()->FindChannel(channel_id)) == NULL) { if((newchannel = CServiceManager::getInstance()->FindChannel(channel_id)) == NULL) {
printf("zapit_to_record: channel_id " PRINTF_CHANNEL_ID_TYPE " not found", channel_id); INFO("channel_id " PRINTF_CHANNEL_ID_TYPE " not found", channel_id);
return false; return false;
} }
INFO("[pip] zap to %s (%llx tp %llx)", newchannel->getName().c_str(), newchannel->getChannelID(), newchannel->getTransponderId()); INFO("[pip] zap to %s (%llx tp %llx)", newchannel->getName().c_str(), newchannel->getChannelID(), newchannel->getTransponderId());
@@ -653,7 +654,7 @@ bool CZapit::ZapForRecord(const t_channel_id channel_id)
bool transponder_change; bool transponder_change;
if((newchannel = CServiceManager::getInstance()->FindChannel(channel_id)) == NULL) { if((newchannel = CServiceManager::getInstance()->FindChannel(channel_id)) == NULL) {
printf("zapit_to_record: channel_id " PRINTF_CHANNEL_ID_TYPE " not found", channel_id); INFO("channel_id " PRINTF_CHANNEL_ID_TYPE " not found", channel_id);
return false; return false;
} }
INFO("%s: %s (%" PRIx64 ")", __FUNCTION__, newchannel->getName().c_str(), channel_id); INFO("%s: %s (%" PRIx64 ")", __FUNCTION__, newchannel->getName().c_str(), channel_id);
@@ -676,6 +677,43 @@ bool CZapit::ZapForRecord(const t_channel_id channel_id)
return true; return true;
} }
bool CZapit::ZapForEpg(const t_channel_id channel_id)
{
CZapitChannel* newchannel;
bool transponder_change;
bool ret = false;
if((newchannel = CServiceManager::getInstance()->FindChannel(channel_id)) == NULL) {
INFO("channel_id " PRINTF_CHANNEL_ID_TYPE " not found", channel_id);
return false;
}
INFO("%s: %s (%" PRIx64 ")", __FUNCTION__, newchannel->getName().c_str(), channel_id);
CFEManager::getInstance()->lockFrontend(live_fe);
#ifdef ENABLE_PIP
if (pip_fe && pip_fe != live_fe)
CFEManager::getInstance()->lockFrontend(pip_fe);
#endif
CFrontend * frontend = CFEManager::getInstance()->allocateFE(newchannel);
if(frontend == NULL) {
ERROR("Cannot get frontend\n");
goto __error;
}
if(!TuneChannel(frontend, newchannel, transponder_change))
goto __error;
if(ParsePatPmt(newchannel))
ret = true;
__error:
CFEManager::getInstance()->unlockFrontend(live_fe);
#ifdef ENABLE_PIP
if (pip_fe && pip_fe != live_fe)
CFEManager::getInstance()->unlockFrontend(pip_fe);
#endif
return ret;
}
/* set channel/pid volume percent, using current channel_id and pid, if those params is 0 */ /* set channel/pid volume percent, using current channel_id and pid, if those params is 0 */
void CZapit::SetPidVolume(t_channel_id channel_id, int pid, int percent) void CZapit::SetPidVolume(t_channel_id channel_id, int pid, int percent)
{ {
@@ -970,6 +1008,15 @@ bool CZapit::ParseCommand(CBasicMessage::Header &rmsg, int connfd)
else if(msgZaptoServiceID.pip) else if(msgZaptoServiceID.pip)
msgResponseZapComplete.zapStatus = StartPip(msgZaptoServiceID.channel_id); msgResponseZapComplete.zapStatus = StartPip(msgZaptoServiceID.channel_id);
#endif #endif
else if(msgZaptoServiceID.epg) {
msgResponseZapComplete.zapStatus = 0;
CBasicServer::send_data(connfd, &msgResponseZapComplete, sizeof(msgResponseZapComplete));
bool ret = ZapForEpg(msgZaptoServiceID.channel_id);
if (!ret)
msgZaptoServiceID.channel_id = 0;
SendEvent(CZapitClient::EVT_BACK_ZAP_COMPLETE, &msgZaptoServiceID.channel_id, sizeof(t_channel_id));
break;
}
else else
msgResponseZapComplete.zapStatus = ZapTo(msgZaptoServiceID.channel_id, (rmsg.cmd == CZapitMessages::CMD_ZAPTO_SUBSERVICEID)); msgResponseZapComplete.zapStatus = ZapTo(msgZaptoServiceID.channel_id, (rmsg.cmd == CZapitMessages::CMD_ZAPTO_SUBSERVICEID));