trunk 20080912
[gitenigma.git] / src / showbnversion.cpp
blob7150e63abd5912d7a171bb21ced0a15fd292f556
1 #include <showbnversion.h>
2 #include <lib/driver/rc.h>
3 #include <lib/dvb/edvb.h>
4 #include <lib/dvb/si.h>
5 #include <lib/gui/elabel.h>
6 #include <lib/dvb/dvbservice.h>
7 #include <lib/gui/guiactions.h>
8 #include <lib/gdi/font.h>
11 was hier fehlt: parsen der BAT (batid: 5001) auf 0001:0085. daher wird 0001:0085:0F03 assumed.
12 ebenfalls: ContentDescriptor, stream_identifier fuer population-zuordnung.
14 extrahieren und tag anzeigen sowie decompilieren/simulieren um "Starte ..." zu ermitteln.
17 class BNDirectory: public eSection
19 int sectionRead(__u8 *d);
20 void sectionFinish(int err);
21 eLabel *result;
22 eString text;
23 public:
24 BNDirectory(int pid, eString text, eLabel *res);
27 int BNDirectory::sectionRead(__u8 *d)
29 d+=0x117;
30 eString versions=text;
31 int first=1;
32 while (1)
34 int l=*d++;
35 if (l>0x10) // ugly
36 break;
37 eString dst="", file="", dst2="", version="";
38 while (l--)
39 dst+=*d++;
40 l=*d++;
41 while (l--)
42 file+=*d++;
43 l=*d++;
44 while (l--)
45 dst2+=*d++;
46 d+=12;
47 l=*d++;
48 while (l--)
49 version+=*d++;
50 d+=17;
51 eDebug("%s/%s/%s/%s", dst.c_str(), file.c_str(), dst2.c_str(), version.c_str());
52 if (versions.find(version)==eString::npos)
54 if (!first)
55 versions+=", ";
56 first=0;
57 versions+=version;
60 result->setText(versions);
61 return 1;
64 void BNDirectory::sectionFinish(int err)
68 BNDirectory::BNDirectory(int pid, eString text, eLabel *res): eSection(pid, 0x80, -1, -1, 0), result(res), text(text)
72 void ShowBNVersion::willShow()
74 eDVBServiceController *sapi=eDVB::getInstance()->getServiceAPI();
75 if (!sapi)
77 text->setText("Service system unavailable");
78 return;
81 // try astra 19.2 and cable.
82 if (sapi->switchService(eServiceReferenceDVB(eDVBNamespace(192<<16), eTransportStreamID(0x0001), eOriginalNetworkID(0x0085), eServiceID(0x0F03), -1)) &&
83 sapi->switchService(eServiceReferenceDVB(eDVBNamespace(0), eTransportStreamID(0x0001), eOriginalNetworkID(0x0085), eServiceID(0x0F03), -1)))
84 text->setText("Transponder not found. Do a channelsearch first.");
85 else
86 text->setText("Tuning in transponder...");
89 int ShowBNVersion::eventHandler(const eWidgetEvent &event)
91 switch (event.type)
93 case eWidgetEvent::evtAction:
94 if ((event.action == &i_cursorActions->ok) || (event.action == &i_cursorActions->cancel))
95 close(0);
96 else
97 break;
98 return 1;
99 default:
100 break;
102 return eWidget::eventHandler(event);
105 void ShowBNVersion::willHide()
109 void ShowBNVersion::eventOccured(const eDVBEvent &event)
111 eDVBServiceController *sapi=eDVB::getInstance()->getServiceAPI();
112 if (!sapi)
113 return;
115 if (event.type==eDVBServiceEvent::eventServiceSwitched)
117 if ((sapi->service.getServiceID()==eServiceID(0x0F03)) &&
118 (sapi->service.getOriginalNetworkID()==eOriginalNetworkID(0x0085)))
120 text->setText("Tuned in transponder.\nReading version information...");
121 PMT *pmt=eDVB::getInstance()->getPMT();
122 if (pmt)
124 int pid[2];
125 int n=0;
126 for (ePtrList<PMTEntry>::iterator i(pmt->streams); i != pmt->streams.end() && n<2; ++i)
127 pid[n++]=i->elementary_PID;
129 if (n>=1)
131 bnd[1]=new BNDirectory(pid[0], "pop=1: ", res1);
132 bnd[1]->start();
135 if (n>=2)
137 bnd[0]=new BNDirectory(pid[1], "pop=2: ", res2);
138 bnd[0]->start();
140 pmt->unlock();
144 if (event.type==eDVBServiceEvent::eventServiceFailed)
145 text->setText("Tune failed. Please do a channelsearch first.");
148 ShowBNVersion::ShowBNVersion(): eWindow(1)
150 setText("Show current BN version");
151 cmove(ePoint(150, 150));
152 cresize(eSize(400, 300));
154 text=new eLabel(this);
155 text->move(ePoint(10, 40));
156 text->resize(eSize(380, 60));
157 text->setFlags(RS_WRAP);
159 res1=new eLabel(this);
160 res1->move(ePoint(10, 100));
161 res1->resize(eSize(380, 30));
163 res2=new eLabel(this);
164 res2->move(ePoint(10, 130));
165 res2->resize(eSize(380, 30));
167 CONNECT(eDVB::getInstance()->eventOccured, ShowBNVersion::eventOccured);
168 bnd[0]=0;
169 bnd[1]=0;
171 setHelpID(42);
174 ShowBNVersion::~ShowBNVersion()
176 delete bnd[0];
177 delete bnd[1];