summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--eepg.c163
-rw-r--r--eit2.h27
2 files changed, 90 insertions, 100 deletions
diff --git a/eepg.c b/eepg.c
index 29bd4d4..d20c1f5 100644
--- a/eepg.c
+++ b/eepg.c
@@ -289,7 +289,7 @@ void cFilterEEPG::SetStatus (bool On)
void cFilterEEPG::NextPmt (void)
{
- Del (pmtpid, 0x02);
+ Del (pmtpid, SI::TableIdPMT);
pmtpid = 0;
pmtidx++;
LogE(3, prep("PMT next\n"));
@@ -2692,28 +2692,28 @@ void cFilterEEPG::ProcessNextFormat (bool FirstTime = false)
EndThemes = false;
switch (Format) {
case PREMIERE:
- AddFilter (pid, 0xA0);
+ AddFilter (pid, SI::TableIdPremiereCIT);
break;
case MHW1:
- AddFilter (0xd3, 0x92); //ThemesMHW1//TODO: all filters are serialized, strictly speaking Themes is non-fatal...
+ AddFilter (0xd3, SI::TableIdMHW1Themes); //ThemesMHW1//TODO: all filters are serialized, strictly speaking Themes is non-fatal...
break;
case MHW2:
- AddFilter (0x231, 0xc8); //MHW2 Channels & Themes
+ AddFilter (0x231, SI::TableIdMHW2ChannelsThemes); //MHW2 Channels & Themes
break;
case SKY_IT:
case SKY_UK:
- AddFilter (0x11, 0x4a); //Sky Channels
+ AddFilter (0x11, SI::TableIdSKYChannels); //Sky Channels
break;
case FREEVIEW: //Freeview, CONT mode //TODO streamline this for other modes
InitDictionary ();
- AddFilter (pid, 0x4e, 0xfe); //event info, actual(0x4e)/other(0x4f) TS, present/following
- AddFilter (pid, 0x50, 0xf0); //event info, actual TS, schedule(0x50)/schedule for future days(0x5X)
- AddFilter (pid, 0x60, 0xf0); //event info, other TS, schedule(0x60)/schedule for future days(0x6X)
- AddFilter (0x39, 0x50, 0xf0); //event info, actual TS, Viasat
- AddFilter (0x39, 0x60, 0xf0); //event info, other TS, Viasat
+ AddFilter (pid, SI::TableIdEIT_presentFollowing, 0xfe); //event info, actual(0x4e)/other(0x4f) TS, present/following
+ AddFilter (pid, SI::TableIdEIT_schedule_first, 0xf0); //event info, actual TS, schedule(0x50)/schedule for future days(0x5X)
+ AddFilter (pid, SI::TableIdEIT_schedule_Other_first, 0xf0); //event info, other TS, schedule(0x60)/schedule for future days(0x6X)
+ AddFilter (0x39, SI::TableIdEIT_schedule_first, 0xf0); //event info, actual TS, Viasat
+ AddFilter (0x39, SI::TableIdEIT_schedule_Other_first, 0xf0); //event info, other TS, Viasat
break;
case NAGRA:
- AddFilter (pid, 0xb0); //perhaps TID is equal to first data byte?
+ AddFilter (pid, SI::TableIdNagraCIT); //perhaps TID is equal to first data byte?
break;
case DISH_BEV:
#if APIVERSNUM < 10726
@@ -2725,9 +2725,9 @@ void cFilterEEPG::ProcessNextFormat (bool FirstTime = false)
// AddFilter (0x0441, 0x60, 0xf0); // Bell ExpressVU EEPG
break;
case EIT:
- AddFilter (pid, 0x4e, 0xfe); //event info, actual(0x4e)/other(0x4f) TS, present/following
- AddFilter (pid, 0x50, 0xf0); //event info, actual TS, schedule(0x50)/schedule for future days(0x5X)
- AddFilter (pid, 0x60, 0xf0); //event info, other TS, schedule(0x60)/schedule for future days(0x6X)
+ AddFilter (pid, SI::TableIdEIT_presentFollowing, 0xfe); //event info, actual(0x4e)/other(0x4f) TS, present/following
+ AddFilter (pid, SI::TableIdEIT_schedule_first, 0xf0); //event info, actual TS, schedule(0x50)/schedule for future days(0x5X)
+ AddFilter (pid, SI::TableIdEIT_schedule_Other_first, 0xf0); //event info, other TS, schedule(0x60)/schedule for future days(0x6X)
break;
default:
break;
@@ -2780,7 +2780,7 @@ void cFilterEEPG::Process (u_short Pid, u_char Tid, const u_char * Data, int Len
if (idx++ == pmtidx) {
pmtpid = assoc.getPid ();
pmtsid = assoc.getServiceId ();
- Add (pmtpid, 0x02);
+ Add (pmtpid, SI::TableIdPMT);
pmtnext = now + PMT_SCAN_TIMEOUT;
LogI(3, prep("PMT pid now 0x%04x (idx=%d)\n"), pmtpid, pmtidx);
break;
@@ -2833,12 +2833,12 @@ void cFilterEEPG::Process (u_short Pid, u_char Tid, const u_char * Data, int Len
if (d->getLength () == 6 && d->getData ().FourBytes (2) == 0x46534154) //Freeview
prvFRV = true;
break;
- case 0x52:
+ case SI::StreamIdentifierDescriptorTag:
//if (d->getLength () == 3 && d->getData ().FourBytes (2) == 0xb07ea882) {
if (d->getLength () == 3 && ((d->getData ().TwoBytes (2) & 0xff00) == 0xb000))
UnprocessedFormat[NAGRA] = stream.getPid ();
break;
- case 0x90:
+ case SI::SkyOTVDescriptorTag:
//esyslog ("usr: %d %08x\n", d->getLength (), d->getData ().FourBytes (2));
if (d->getLength () == 6 && d->getData ().FourBytes (2) == 0x0000ffff)
usrData = true;
@@ -2850,19 +2850,19 @@ void cFilterEEPG::Process (u_short Pid, u_char Tid, const u_char * Data, int Len
usrOTV = SKY_UK;
//Format = SKY_UK;
break;
- case 0xc1: //MHW1, MHW2
+ case SI::MHW1DescriptorTag: //MHW1, MHW2
// esyslog("EEPGDEBUG:d->getDescriptorTAG:%d %08x\n",d->getLength(),d->getData().FourBytes(2));
if (d->getLength () == 10 && d->getData ().FourBytes (2) == 0x50555348) //MHw1 Cyfra
UnprocessedFormat[MHW1] = stream.getPid ();
break;
- case 0xc2: //MHW1, MHW2
+ case SI::MHW1_2DescriptorTag: //MHW1, MHW2
if (d->getLength () == 10 && d->getData ().FourBytes (2) == 0x45504700) //MHw1 CanDigNL and CSat
UnprocessedFormat[MHW1] = stream.getPid ();
else if (d->getLength () == 10 && d->getData ().FourBytes (2) == 0x46494348) { //MHW2
UnprocessedFormat[MHW2] = stream.getPid ();
}
break;
- case 0xd1: //Freeview
+ case SI::FreeviewDescriptorTag: //Freeview
LogD(4, prep("case 0xd1: //Freeview"));
if (d->getLength () == 3 && ((d->getData ().TwoBytes (2) & 0xff00) == 0x0100))
usrFRV = 0x01;
@@ -2919,39 +2919,34 @@ void cFilterEEPG::Process (u_short Pid, u_char Tid, const u_char * Data, int Len
else if (Source ()) {
if ( Pid == EIT_PID || Pid == 0x0300 || Pid == 0x0441 ) {
- if (Tid >= 0x4E)
+ if (Tid >= SI::TableIdEIT_presentFollowing)
ProccessContinuous(Pid, Tid, Length, Data);
return;
}
int Result;
switch (Tid) {
- case 0xA0:
+ case SI::TableIdPremiereCIT:
if ((Pid < 0x30) || (Pid > 0x37)) {
ProcessPremiere(Data);
break;
} //if citpid == 0xb11 Premiere
/* no break - used for sky also*/
- case 0xa1:
- case 0xa2:
- case 0xa3:
+ case SI::TableIdSKYTitles_first ... SI::TableIdSKYTitles_last:
Result = GetTitlesSKYBOX (Data, Length - 4);
if (Result != 1) //when fatal error or finished
- Del (Pid, 0xa0, 0xfc); //kill filter
+ Del (Pid, SI::TableIdSKYTitlesA0, 0xfc); //kill filter
if (Result == 0) { //fatal error
esyslog ("EEPG: Fatal error reading titles.");
ProcessNextFormat (); //and go process other formats
}
if (Result == 2)
- AddFilter (Pid + 0x10, 0xa8, 0xfc); //Set filter that processes summaries of this batch
+ AddFilter (Pid + 0x10, SI::TableIdSKYSummaries_first, 0xfc); //Set filter that processes summaries of this batch
break;
- case 0xa8:
- case 0xa9:
- case 0xaa:
- case 0xab:
+ case SI::TableIdSKYSummaries_first ... SI::TableIdSKYSummaries_last:
Result = GetSummariesSKYBOX (Data, Length - 4);
if (Result != 1) //when fatal error or finished
- Del (Pid, 0xa8, 0xfc); //kill filter
+ Del (Pid, SI::TableIdSKYSummaries_first, 0xfc); //kill filter
if (Result == 0) {
esyslog ("EEPG: Fatal error reading summaries.");
ProcessNextFormat ();
@@ -2959,12 +2954,12 @@ void cFilterEEPG::Process (u_short Pid, u_char Tid, const u_char * Data, int Len
if (Result == 2) {
LoadIntoSchedule ();
if (Pid < 0x47) //this is not the last batch//FIXME chaining is easy on the PIDs and the CPU, but error when Pid,Tid is not used at the moment...
- AddFilter (Pid - 0x0F, 0xa0, 0xfc); //next pid, first tid
+ AddFilter (Pid - 0x0F, SI::TableIdSKYTitlesA0, 0xfc); //next pid, first tid
else //last pid was processed
ProcessNextFormat ();
}
break;
- case 0x90:
+ case SI::TableIdMHW1TitlesSummaries:
if (Pid == 0xd2) {
Result = GetTitlesMHW1 (Data, Length);
if (Result != 1) //fatal error or last processed
@@ -2974,7 +2969,7 @@ void cFilterEEPG::Process (u_short Pid, u_char Tid, const u_char * Data, int Len
ProcessNextFormat ();
}
if (Result == 2)
- AddFilter (0xd3, 0x90); //SummariesMHW1
+ AddFilter (0xd3, SI::TableIdMHW1TitlesSummaries); //SummariesMHW1
} else if (Pid == 0xd3) {
Result = GetSummariesMHW1 (Data, Length);
if (Result != 1) //fatal error or last processed
@@ -2990,24 +2985,24 @@ void cFilterEEPG::Process (u_short Pid, u_char Tid, const u_char * Data, int Len
}
}
break;
- case 0xc8: //GetChannelsMHW2 or GetThemesMHW2
+ case SI::TableIdMHW2ChannelsThemes: //GetChannelsMHW2 or GetThemesMHW2
if (Pid == 0x231) {
if (Data[3] == 0x01) { //Themes it will be
- Result = GetThemesMHW2 (Data, Length); //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
+ Result = GetThemesMHW2 (Data, Length); //return code 0 = fatal error, code 1 = success, code 2 = last item processed
//break;
if (Result != 1)
EndThemes = true; //also set Endthemes on true on fatal error
} //if Data
else if (Data[3] == 0x00) { //Channels it will be
- Result = GetChannelsMHW (Data, Length, 2); //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
+ Result = GetChannelsMHW (Data, Length, 2); //return code 0 = fatal error, code 1 = success, code 2 = last item processed
if (Result != 1)
EndChannels = true; //always remove filter, code 1 should never be returned since MHW2 always reads all channels..
ChannelsOk = (Result == 2);
}
- if (EndChannels && EndThemes) { //those are only set withing MHW2
- Del (0x231, 0xc8); //stop reading MHW2 themes and channels
- if (ChannelsOk) //No channels = fatal, no themes = nonfatal
- AddFilter (0x234, 0xe6); //start reading MHW2 titles
+ if (EndChannels && EndThemes) { //those are only set within MHW2
+ Del (0x231, SI::TableIdMHW2ChannelsThemes); //stop reading MHW2 themes and channels
+ if (ChannelsOk) //No channels = fatal, no themes = non fatal
+ AddFilter (0x234, SI::TableIdMHW2Titles); //start reading MHW2 titles
else {
esyslog ("EEPG: Fatal error reading channels.");
ProcessNextFormat ();
@@ -3015,30 +3010,30 @@ void cFilterEEPG::Process (u_short Pid, u_char Tid, const u_char * Data, int Len
}
} //if Pid == 0x231
break;
- case 0x91:
- Result = GetChannelsMHW (Data, Length, 1); //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
+ case SI::TableIdMHW1Channels:
+ Result = GetChannelsMHW (Data, Length, 1); //return code 0 = fatal error, code 1 = success, code 2 = last item processed
Del (Pid, Tid); //always remove filter, code 1 should never be returned since MHW1 always reads all channels...
if (Result == 2)
- AddFilter (0xd2, 0x90); //TitlesMHW1
+ AddFilter (0xd2, SI::TableIdMHW1TitlesSummaries); //TitlesMHW1
else {
esyslog ("EEPG: Fatal error reading channels.");
ProcessNextFormat ();
}
break;
- case 0x92:
- Result = GetThemesMHW1 (Data, Length); //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
+ case SI::TableIdMHW1Themes:
+ Result = GetThemesMHW1 (Data, Length); //return code 0 = fatal error, code 1 = success, code 2 = last item processed
if (Result != 1)
Del (Pid, Tid);
if (Result == 2)
- AddFilter (0xd3, 0x91); //ChannelsMHW1
+ AddFilter (0xd3, SI::TableIdMHW1Channels); //ChannelsMHW1
else {
- esyslog ("EEPG: Fatal error reading themes."); //doesnt have to be fatal...
+ esyslog ("EEPG: Fatal error reading themes."); //Doesn't have to be fatal...
ProcessNextFormat ();
}
break;
- case 0xe6: //TitlesMHW2
+ case SI::TableIdMHW2Titles: //TitlesMHW2
if (Pid == 0x234) {
- Result = GetTitlesMHW2 (Data, Length); //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
+ Result = GetTitlesMHW2 (Data, Length); //return code 0 = fatal error, code 1 = success, code 2 = last item processed
if (Result != 1)
Del (Pid, Tid);
if (Result == 0) {
@@ -3046,10 +3041,10 @@ void cFilterEEPG::Process (u_short Pid, u_char Tid, const u_char * Data, int Len
ProcessNextFormat ();
}
if (Result == 2)
- AddFilter (0x236, 0x96); //start reading MHW2 summaries....
+ AddFilter (0x236, SI::TableIdMHW2Summaries); //start reading MHW2 summaries....
}
break;
- case 0x96: //Summaries MHW2
+ case SI::TableIdMHW2Summaries: //Summaries MHW2
if (Pid == 0x236) {
Result = GetSummariesMHW2 (Data, Length); //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
if (Result != 1)
@@ -3064,7 +3059,7 @@ void cFilterEEPG::Process (u_short Pid, u_char Tid, const u_char * Data, int Len
}
} //if pid
break;
- case 0x4a: //Sky channels
+ case SI::TableIdSKYChannels: //Sky channels
if (Pid == 0x11) {
Result = GetChannelsSKYBOX (Data, Length - 4);
if (Result != 1) //only breakoff on completion or error; do NOT clean up after success, because then not all bouquets will be read
@@ -3072,7 +3067,7 @@ void cFilterEEPG::Process (u_short Pid, u_char Tid, const u_char * Data, int Len
if (Result == 2) {
GetThemesSKYBOX (); //Sky Themes from file; must be called AFTER first channels to have lThemes initialized FIXME
if (InitDictionary ())
- AddFilter (0x30, 0xa0, 0xfc); //SKY Titles batch 0 of 7
+ AddFilter (0x30, SI::TableIdSKYTitlesA0, 0xfc); //SKY Titles batch 0 of 7
else {
esyslog ("EEPG: Fatal error reading huffman table.");
ProcessNextFormat ();
@@ -3081,7 +3076,7 @@ void cFilterEEPG::Process (u_short Pid, u_char Tid, const u_char * Data, int Len
} //if Pid == 0x11
break;
- case 0xb0: //NagraGuide
+ case SI::TableIdNagraCIT: //NagraGuide
if (Pid == 0xc8) {
Result = GetNagra (Data, Length);
if (Result != 1)
@@ -3100,40 +3095,9 @@ void cFilterEEPG::Process (u_short Pid, u_char Tid, const u_char * Data, int Len
}
break;
- case 0x4E:
- case 0x4F:
- case 0x50:
- case 0x51:
- case 0x52:
- case 0x53:
- case 0x54:
- case 0x55:
- case 0x56:
- case 0x57:
- case 0x58:
- case 0x59:
- case 0x5A:
- case 0x5B:
- case 0x5C:
- case 0x5D:
- case 0x5E:
- case 0x5F:
- case 0x60:
- case 0x61:
- case 0x62:
- case 0x63:
- case 0x64:
- case 0x65:
- case 0x66:
- case 0x67:
- case 0x68:
- case 0x69:
- case 0x6A:
- case 0x6B:
- case 0x6C:
- case 0x6D:
- case 0x6E:
- case 0x6F:
+ case SI::TableIdEIT_presentFollowing:
+ case SI::TableIdEIT_presentFollowing_other:
+ case SI::TableIdEIT_schedule_first ... SI::TableIdEIT_schedule_Other_last:
// Freesat:
// Set(3842, 0x4E, 0xFE); // event info, actual(0x4E)/other(0x4F) TS, present/following
// Set(3842, 0x50, 0xF0); // event info, actual TS, schedule(0x50)/schedule for future days(0x5X)
@@ -3168,7 +3132,7 @@ void cFilterEEPG::ProcessPremiere(const u_char *& Data)
int now = time (0);
int nCount = 0;
int nRating = 0;
- unsigned char Tid = 0xa0; // TODO maybe default TableID
+ unsigned char Tid = SI::TableIdPremiereCIT; // TODO maybe default TableID
SI::ExtendedEventDescriptors * ExtendedEventDescriptors = 0;
SI::ShortEventDescriptor * ShortEventDescriptor = 0;
char *order = 0, *rating = 0;
@@ -3182,7 +3146,7 @@ void cFilterEEPG::ProcessPremiere(const u_char *& Data)
for (SI::Loop::Iterator it; (d = cit.eventDescriptors.getNext (it));) {
nDescriptorTag = d->getDescriptorTag ();
switch (nDescriptorTag) {
- case 0xF0: // order information
+ case SI::PremiereOrderInfoDescriptorTag: // order information
if (SetupPE->OrderInfo) {
static const char *text[] = {
trNOOP ("Ordernumber"),
@@ -3204,7 +3168,7 @@ void cFilterEEPG::ProcessPremiere(const u_char *& Data)
order = strdup (buff);
}
break;
- case 0xF1: // parental rating
+ case SI::PremiereRatingInfoDescriptorTag: // parental rating
if (SetupPE->RatingInfo) {
char buff[512];
int p = 0;
@@ -3287,14 +3251,13 @@ void cFilterEEPG::ProcessPremiere(const u_char *& Data)
int sid = pct->getServiceId ();
if (SetupPE->FixEpg) {
if (nid == 133) {
- if (tid == 0x03 && sid == 0xf0) {
- tid = 0x02;
+ if (tid == SI::TableIdTSDT && sid == 0xf0) {
+ tid = SI::TableIdPMT;
sid = 0xe0;
- } else if (tid == 0x03 && sid == 0xf1) {
- tid = 0x02;
+ } else if (tid == SI::TableIdTSDT && sid == 0xf1) {
+ tid = SI::TableIdPMT;
sid = 0xe1;
- } else if (tid == 0x03 && sid == 0xf5) {
- tid = 0x03;
+ } else if (tid == SI::TableIdTSDT && sid == 0xf5) {
sid = 0xdc;
} else if (tid == 0x04 && sid == 0xd2) {
tid = 0x11;
@@ -3355,7 +3318,7 @@ void cFilterEEPG::ProcessPremiere(const u_char *& Data)
} else {
LogI(2, "(upd)\n");
pEvent->SetSeen ();
- if (pEvent->TableID () == 0x00 || pEvent->Version () == cit.getVersionNumber ()) {
+ if (pEvent->TableID () == SI::TableIdPAT || pEvent->Version () == cit.getVersionNumber ()) {
if (pEvent->RunningStatus () != runningStatus)
pSchedule->SetRunningStatus (pEvent, runningStatus, channel);
continue;
diff --git a/eit2.h b/eit2.h
index 7686672..c6251fe 100644
--- a/eit2.h
+++ b/eit2.h
@@ -7,11 +7,38 @@
namespace SI
{
+
+enum TableIdExt {
+ TableIdSKYChannels = TableIdBAT, //SKYBOX channels information section 0x4A same as TableIdBAT
+ TableIdMHW1TitlesSummaries = 0x90, //MHW1 titles and summaries information section
+ TableIdMHW1Channels = 0x91, //MHW1 channels information section
+ TableIdMHW1Themes = 0x92, //MHW1 themes information section
+ TableIdMHW2Summaries = 0x96, //MHW2 summaries information section
+ //SKYBOX Titles range from 0xA0 to 0xA3. 0xA0 is also TableIdPremiereCIT
+ TableIdSKYTitlesA0 = TableIdPremiereCIT, //SKYBOX titles information section start
+ TableIdSKYTitles_first = 0xA1, //SKYBOX titles information section start
+ TableIdSKYTitles_last = 0xA3, //SKYBOX titles information section end
+ //SKYBOX Summaries range from 0xA8 to 0xAB.
+ TableIdSKYSummaries_first = 0xA8, //SKYBOX Summaries information section start
+ TableIdSKYSummaries_last = 0xAB, //SKYBOX Summaries information section end
+ TableIdNagraCIT = 0xB0, //NagraGuide content information section
+ TableIdMHW2ChannelsThemes = 0xC8, //MHW1 channels and themes information section
+ TableIdMHW2Titles = 0xE6 //MHW2 titles information section
+
+};
+
+
enum DescriptorTagExt {
DishRatingDescriptorTag = 0x89,
+ SkyOTVDescriptorTag = 0x90,
DishShortEventDescriptorTag = 0x91,
DishExtendedEventDescriptorTag = 0x92,
DishSeriesDescriptorTag = 0x96,
+ MHW1DescriptorTag = 0xC1,
+ MHW1_2DescriptorTag = 0xC2,
+ FreeviewDescriptorTag = 0xD1,
+ PremiereOrderInfoDescriptorTag = 0xF0,
+ PremiereRatingInfoDescriptorTag = 0xF1,
};
// typedef InheritEnum< DescriptorTagExt, SI::DescriptorTag > ExtendedDescriptorTag;