devz
Member
Dabei seit:
17.05.2005 Beiträge: 368
| |
Hallo, ich habe mal den originalen GBOX Patch
für den VDR leicht überarbeitet, da dieser
offenbar von niemandem mehr gepflegt wird.
Original handelt es sich um den
gbox_pmt_vdr_1_3-0.2.0.diff. Dieser ist leider
hoffnungs veraltet und hat mit heutigen
Versionen Rejects ohne Ende.
Desweiteren
hat mich die Tatsache gestört, dass alle Kanäle
als FTA betrachtet werden, also die CAID 0 im
VDR erhalten. Das ist sehr hinderlich, wenn man
ein Kombisystem mit einer analogen TV Karte hat.
Das ist nun entfallen und hat keine Nachteile.
Das es trotzdem klappt, habe ich an anderer
Stelle im VDR Source bewirkt. Zudem gab es noch
einen massiven Bug - wer den alten hat, kann es
gerne mal ausprobieren. Bei mir ist es
aufgefallen bei RTL Living (liegt auf dem RTL
Transponder und gehört zu Arena tividi), dass
dieser, trotz gültiger Quelle, nicht hell wurde.
Für diesen Sender (und auch ein paar NL's) wurde
keine neue /var/tmp/pmt.tmp erstellt. Dies habe
ich behoben, offenbar lag der Fehler in der
Erkennung der pid der PMT, da die PAT zukurz
eingelesen wurde. Zudem läuft dieser Patch jetzt
fehlerfrei mit dem noepgpatch/plugin. Ich habe
diesen Patch gegen eine Plain 1.4.3 erstellt. Es
wird jetzt im Syslog die PAT Länge sowie die PMT
pid ausgegeben. Sollte es dennoch Probleme
geben, bitte ich um Feedback. Ich hatte
schonmal eine Überarbeitung gepostet, diese
enthält aber noch den Bug mit z.B: RTL Living.
Alte GBOX Patches sind unbedingt zu
entfernen!
vdr_gbox-1.4.3-PMT_fixed.diff
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
|
diff -Nur vdr-1.4.3/ci.c vdr-1.4.3-gbox/ci.c
--- vdr-1.4.3/ci.c 2006-08-20 13:38:33.000000000 +0200
+++ vdr-1.4.3-gbox/ci.c 2006-12-15 13:43:40.658196051 +0100
@@ -1504,6 +1504,7 @@
cCiHandler *cCiHandler::CreateCiHandler(const char *FileName)
{
+ return NULL; // GBOX
int fd_ca = open(FileName, O_RDWR);
if (fd_ca >= 0) {
ca_caps_t Caps;
diff -Nur vdr-1.4.3/device.c vdr-1.4.3-gbox/device.c
--- vdr-1.4.3/device.c 2006-09-03 12:13:25.000000000 +0200
+++ vdr-1.4.3-gbox/device.c 2006-12-15 15:40:40.388901801 +0100
@@ -147,6 +147,126 @@
cDevice *cDevice::device[MAXDEVICES] = { NULL };
cDevice *cDevice::primaryDevice = NULL;
+// GBOX
+#define TIMEOUT 800 // ms
+#include <string.h>
+
+int cDevice::read_t(int fd, unsigned char *buffer) {
+ struct pollfd p;
+ p.fd = fd;
+ p.events = POLLIN;
+ p.revents = POLLIN;
+ if (poll(&p, 1, TIMEOUT) <= 0) {
+ return -1;
+ }
+ buffer[0] = 0;
+ return (read(fd,&buffer[1],184));
+}
+
+int cDevice::set_filter(int fd, int pid) {
+ struct dmx_sct_filter_params flt;
+ ioctl(fd, DMX_STOP);
+ memset(&flt,0,sizeof(struct dmx_sct_filter_params));
+ flt.timeout = 1000;
+ flt.flags = DMX_IMMEDIATE_START;
+ flt.pid = pid;
+ if (ioctl(fd, DMX_SET_FILTER, &flt) < 0) {
+ esyslog("GBOX_SWITCH: Error in setting section filter");
+ return -1;
+ }
+ return 0;
+}
+
+int cDevice::get_pmt_pid(unsigned char *buffer, int SID) {
+ int index=0;
+ int length = (buffer[index+2] & 0x0F) << 8 | (buffer[index+3] + 3);
+ esyslog("PAT length: '%d'", length);
+ for (index = 9; index < length -4 ; index += 4)
+ if (((buffer[index]<<8) | buffer[index+1]) > 0) {
+ if (SID ==((buffer[index]<<8) | buffer[index+1])) {
+ int pmt_pid = (((buffer[index+2] << 8) | buffer[index+3]) & 0x1FFF);
+ esyslog("PMT pid: '%d'", pmt_pid);
+ return pmt_pid;
+ }
+ }
+ return 0;
+}
+
+int cDevice::set_filter_pmt(int fd, int pid) {
+ struct dmx_sct_filter_params flt;
+ ioctl(fd, DMX_STOP);
+ memset(&flt,0,sizeof(struct dmx_sct_filter_params));
+ flt.filter.filter[0] = 0x02;
+ flt.filter.mask[0] = 0xff;
+ flt.timeout = 1000;
+ flt.flags = DMX_IMMEDIATE_START;
+ flt.pid = pid;
+ if (ioctl(fd, DMX_SET_FILTER, &flt) < 0) {
+ esyslog("GBOX_SWITCH: Error in setting section filter");
+ return -1;
+ }
+ return 0;
+}
+
+void cDevice::WritePmtTmp(char DvbNum, int pmtid) {
+ int fd=-1;
+ int length;
+ int k,ii;
+ int pmt_pid=0;
+ FILE *fout;
+ unsigned char buffer[4096];
+ char *demux_dev;
+ char *fnam="/var/tmp/pmt.tmp";
+ char *fnax;
+ asprintf(&demux_dev, "/dev/dvb/adapter%d/demux0",DvbNum);
+ asprintf(&fnax, "/var/tmp/pmt%d.tmp",DvbNum);
+ esyslog(demux_dev);
+ if ((fd = open(demux_dev, O_RDWR)) < 0) {
+ esyslog("GBOX_SWITCH: Error opening demux device");
+ } else {
+ if (set_filter(fd, 0) < 0) {
+ esyslog("GBOX_SWITCH: Error in set filter pat");
+ }
+ if ((length = read_t(fd, buffer)) < 0) {
+ esyslog("GBOX_SWITCH: Error in read read_t (pat)");
+ } else {
+ pmt_pid=this->get_pmt_pid(buffer, pmtid);
+ if (pmt_pid==0) {
+ esyslog("GBOX_SWITCH: Error pmt_pid not found");
+ } else {
+ if (this->set_filter_pmt(fd, pmt_pid) < 0) {
+ esyslog("GBOX_SWITCH: Error in set pmt filter");
+ }
+ for (k=0; k<64; k++) {
+ if ((length = this->read_t(fd, buffer)) < 0) {
+ esyslog("GBOX_SWITCH: Error in read pmt\n");
+ }
+ if (pmtid==((buffer[4]<<8)+buffer[5])) {
+ break;
+ }
+ }
+ length= ((buffer[2]&0xf)<<8) + buffer[3] +3;
+ // pmt.tmp
+ if (DvbNum==0) {
+ fout=fopen(fnam,"wt");
+ for (k=0;k<length;k++) {
+ ii=putc(buffer[k+1],fout);
+ }
+ fclose (fout);
+ }
+ fout=fopen(fnax,"wt");
+ for (k=0;k<length;k++) {
+ ii=putc(buffer[k+1],fout);
+ }
+ fclose (fout);
+ }
+ }
+ close(fd); // just in case ;)
+ }
+ free(fnax);
+ free(demux_dev);
+}
+
cDevice::cDevice(void)
{
cardIndex = nextCardIndex++;
@@ -671,6 +791,11 @@
sectionHandler->SetChannel(Channel);
sectionHandler->SetStatus(true);
}
+
+ // GBOX
+ esyslog("GBOX_SWITCH Device: '%d' Channel: '%d' SID '%d' ", this->DeviceNumber(), Channel->Number(), Channel->Sid());
+ this->WritePmtTmp(this->DeviceNumber(), Channel->Sid());
+
// Start decrypting any PIDs that might have been set in SetChannelDevice():
if (ciHandler)
ciHandler->StartDecrypting();
diff -Nur vdr-1.4.3/device.h vdr-1.4.3-gbox/device.h
--- vdr-1.4.3/device.h 2006-06-15 11:32:48.000000000 +0200
+++ vdr-1.4.3-gbox/device.h 2006-12-15 15:21:21.612482802 +0100
@@ -184,6 +184,13 @@
virtual bool HasDecoder(void) const;
///< Tells whether this device has an MPEG decoder.
+ //GBOX
+ int read_t(int fd, unsigned char *buffer);
+ int set_filter_pmt(int fd, int pid);
+ int set_filter(int fd, int pid);
+ int get_pmt_pid(unsigned char *buffer, int SID);
+ void WritePmtTmp(char DvbNum, int pmtid);
+
// SPU facilities
public:
diff -Nur vdr-1.4.3/dvbdevice.c vdr-1.4.3-gbox/dvbdevice.c
--- vdr-1.4.3/dvbdevice.c 2006-08-14 11:38:32.000000000 +0200
+++ vdr-1.4.3-gbox/dvbdevice.c 2006-12-15 15:21:50.114264051 +0100
@@ -770,7 +770,8 @@
bool hasPriority = Priority < 0 || Priority > this->Priority();
bool needsDetachReceivers = false;
- if (ProvidesSource(Channel->Source()) && ProvidesCa(Channel)) {
+// if (ProvidesSource(Channel->Source()) && ProvidesCa(Channel)) {
+ if (ProvidesSource(Channel->Source())) { //GBOX
result = hasPriority;
if (Priority >= 0 && Receiving(true)) {
if (dvbTuner->IsTunedTo(Channel)) {
| |
EDIT:
Wenn
dieser Patch zusammen mit dem EPGSEARCH Plugin
benutzt wird, kommt es bei jedem Timer auf einen
verschlüsselten Sender zu einer Konfliktwarnung
von epgsearch, sofern dies aktiviert wird. Dies
liegt daran, dass epgsearch "zum Test das selbe
macht wie ein plain VDR". Um dies zu
verhinden, muss man die Änderungen in
dvbdevice.c analog in
conflictcheck.h gemacht werden, die in
den Sourcen von epgsearch liegt. Natürlich muss
epgsearch dann neu kompiliert und geladen
werden.
Dieser Patch funktioniert
vermutlich nicht mit vdr 1.5.x, da im CAM
Handling manches geändert wurde/wird.
__________________ Hardware
VDR-Wakeup auf PIC-Basis zum Selbstbau:
http://dev0.sytes.net/ (elektronik ->
projekte) - aktuelle Softwareversion v1.1
Dieser Beitrag wurde 4
mal editiert, zum letzten Mal von devz:
08.01.2007 00:25. | |
17.12.2006 21:32 |
| |
Gaga
Member
Dabei seit:
03.01.2006 Beiträge: 68
| |
Fettes Lob an dich.
Ich werde ihn nicht
brauchen, aber denke viele werden sich drüber
freuen, sofern sie nicht an dem Problem oder der
Schwierigkeit des Patchen scheitern.
Dann
noch die GBOX Bins suchen und diese auch mit
passenden Configs einrichten müssen.
| |
19.12.2006 11:49 |
| |
mami_hacky
Member
Dabei seit:
13.10.2006 Beiträge: 7
| |
And am I allowed to ask
If I can find the
patched version of vdr-sc 1.3 any
where?
thanks
| |
19.12.2006 13:23 |
| |
devz
Member
Dabei seit:
17.05.2005 Beiträge: 368
Themenstarter
| |
Hi, vdr-sc needs no additional patching for
gbox. Support is included in version 0.5.11. -
This patch here is for using gbox without
vdr-sc. You can only use this if u have a
full-featured premium card like nexus or
technotrend.
__________________ Hardware
VDR-Wakeup auf PIC-Basis zum Selbstbau:
http://dev0.sytes.net/ (elektronik ->
projekte) - aktuelle Softwareversion
v1.1
| |
19.12.2006 13:28 |
| |
mami_hacky
Member
Dabei seit:
13.10.2006 Beiträge: 7
| |
Hi
I need a premium card because these
cards has an additional chip which decrypts the
video directly and so no software decryption of
video is need, yes?
then I have a reelbox
receiver, no dvb card at all, but with exactly
the same set of software as a linux based system
configured to use a dvb card.
| |
19.12.2006 21:34 |
| |
Gaga
Member
Dabei seit:
03.01.2006 Beiträge: 68
| |
@devz: mach mal PN oder Email an. Würd mal
gern ne Runde schnacken
@mami_hacky Yes u
need premium card ( Fullfeatured)
| |
19.12.2006 22:52 |
| |
W12
Member
Dabei seit:
31.12.2006 Beiträge: 13
| |
Hallo,
könnte mir jemand erklären, wie
ich diesen Patch anwende? Bin absoluter
Linux-Neuling.
Ich habe Kanotix
installiert. Dort läuft die Gbox als Server. Ich
möchte jetzt den VDR dazu benutzen, um meine
Karten upzudaten via Emm.
Das Ganze hab
ich schon mit Kaffeine laufen, aber ohne
Emm-Support. Weil der dort nicht funktioniert,
genau so wenig wie bei Progdvb unter
Windows.
Ich kenne das Bord hier schon 2
bis 3 Jahre und habe hier schon viel gelesen,
aber jetzt bräuchte ich doch mal ein bisschen
Hilfe.
Danke im vorraus und guten
Rutsch. | |
31.12.2006 22:48 |
| |
rudirabbit
Member
Dabei seit:
14.09.2005 Beiträge: 202
| |
Hallo !
Zitat: |
könnte mir
jemand erklären, wie ich diesen Patch anwende?
Bin absoluter
Linux-Neuling. | Ich
würde es so machen: patch -p1 -i
vdr_gbox-1.4.3-PMT_fixed.diff dann: make
clean,make,make install (die plugins würde ich
auch neu bauen)
Hätte an dieser Stelle
eine Frage: Habe einen externen Cardserver
laufen mit camd3, dort greifen zwei Dboxen und
ein VDR drauf zu. Auf den Boxen laufen camd3
(client) und mit dem VDR greife ich
so cardclient.conf
Zitat: |
camd35:192.168.0.99:20248:1/0000/0000:meinuser:meinpass | drauf
zu. Wenn ich nun gbox auf dem Server drauf
laufen lassen würde, würde der Zugriff auf die
selbe Weise funktionieren ? (camd35)
MFG
| |
01.01.2007 08:45 |
| |
W12
Member
Dabei seit:
31.12.2006 Beiträge: 13
| |
Hallo,
Zitat: |
Ich würde
es so machen: patch -p1 -i
vdr_gbox-1.4.3-PMT_fixed.diff
|
das
hab ich getan. Es kommt aber ne
Fehlermeldung.
Hier die
Vorgehensweise:
Auf dem KDE-Desktop
erstelle ich einen neuen Ordner in den ich die
diff reinkopiere. Dann öffne ich die Konsole und
gebe "patch -p1 -i
vdr_gbox-1.4.3-PMT_fixed.diff"
ein.
Dann folgt die
Meldung:
can´t find file to patch at
input line 4 Perhaps you yoused the wrong -p
or --strip
option? -------------------------------------------- diff
-Nur vdr-1.4.3/ci.c vdr-1.4.3-gbox/ci.c ---
vdr-1.4.3/ci.c +++
vdr-1.4.3-gbox/ci.c -------------------------------------------- File
to patch:
Klar, ich weiß, daß er von
mir die richtige Datei wissen will, aber was
soll ich da eingeben?
MfG
| |
01.01.2007 14:10 |
| |
Gaga
Member
Dabei seit:
03.01.2006 Beiträge: 68
| |
Du gehst in den Ordner wo ein sauberer VDR
liegt. Am besten ohne jeglichen
Patch. Bigpatch kannste anwenden. Funzt
trotzdem.
Dann aus dem VDR Ordner
folgendes aufrufen
cat
/PFADZUDERDATEI/vdr_gbox-1.4.3-PMT_fixed.diff |
patch -p1
Danach sollte alles gepatched
sein und du kannst mit make && make
plugins compilen. | |
01.01.2007 15:36 |
| |
W12
Member
Dabei seit:
31.12.2006 Beiträge: 13
| |
Hallo,
Zitat: |
Original von
Gaga Du gehst in den Ordner wo ein
sauberer VDR liegt. Am besten ohne jeglichen
Patch. Bigpatch kannste anwenden. Funzt
trotzdem. |
Also
in meinem Fall gehe ich nach /var/lib/vdr (ist
doch richtig?). VDR ist ohne
Patch.
Und dann? - Bigpatch???. Ist das
eine Datei, die ich mir besorgen
muß?
Wenn ich das mit dem Bigpatch habe
und auch weiß, wie ich diesen Patch anwende,
dürfte der Rest kein Problem für mich
sein.
Also, könntest Du mir da bitte auf
die Sprünge helfen?
Danke im vorraus
| |
01.01.2007 15:58 |
| |
rudirabbit
Member
Dabei seit:
14.09.2005 Beiträge: 202
| |
Hallo ! Bigpatch ist eine Datei, quasi eine
Sammmlung von einigen Pathes (siehe auch VDR
Wiki), Zum Test der gbox kann du es auch ohne
Bigpatch versuchen.
| |
01.01.2007 16:40 |
| |
W12
Member
Dabei seit:
31.12.2006 Beiträge: 13
| |
Hallo,
also das mit dem Bigpatch
interpretier ich jetzt mal so: ich kann ihn
anwenden, muß aber nicht.
Den Befehl "cat
/PFADZUDERDATEI/vdr_gbox-1.4.3-PMT_fixed.diff |
patch -p1" habe ich jetz aus var/lib/vdr und aus
etc/vdr ausgeführt (wobei ich denke, daß
var/lib/vdr richtig sein sollte). Jedesmal kommt
die Fehlermeldung:
can´t find file to
patch at input line 4 Perhaps you yoused the
wrong -p or --strip
option? -------------------------------------------- diff
-Nur vdr-1.4.3/ci.c vdr-1.4.3-gbox/ci.c ---
vdr-1.4.3/ci.c +++
vdr-1.4.3-gbox/ci.c -------------------------------------------- File
to patch:
Ich bitte um
Hilfe.
MfG | |
01.01.2007 16:43 |
| |
rudirabbit
Member
Dabei seit:
14.09.2005 Beiträge: 202
| |
Hi ! Du hast schon alle Sourcen des Vdr in
dem Pfad liegen ? Die datei ci.c wirdschon
mal nicht gefunden !
Ich bin jetzt auch
nicht der Linux Profi, habe mich auch nur
eingearbeitet, als ich den Vdr
installieren/compilern wollte.
MFG
| |
01.01.2007 16:50 |
| |
W12
Member
Dabei seit:
31.12.2006 Beiträge: 13
| |
Hallo,
in welchem Pfad liegen denn die
Sourcen genau?
Das OS ist Kanotix. Dort
ist der VDR schon inklusive und funktioniert
auch. Die Datei ci.c habe ich mit dem Konqueror
bereits gesucht, aber nicht gefunden.
MfG
| |
01.01.2007 16:55 |
| |
Indy500
Member
Dabei seit:
02.08.2001 Beiträge: 440
| |
Du hast den VDR von deiner Distri installiert
und somit die "kompillierte" Version, d.h
BINÄR.
Du kannst aber keine Binärdateien
patchen (jedenfalls nicht mit "patch"). Du musst
die VDR Sourcen patchen und dann kompillieren.
Mit dem erhaltenen VDR binary kannst du dann die
installierte in /usr/bin oder /usr/local/bin
überschreiben und dein Paketverwaltungssystem
bleibt auch in Ordnung. Nicht vergessen die
Rechte anzupassen (chmod 755 /usr/bin/vdr ).
| |
02.01.2007 16:17 |
| |
W12
Member
Dabei seit:
31.12.2006 Beiträge: 13
| |
Hallo,
ich habe jetzt die VDR Sourcen
gepatcht, kompiliert und eine VDR binary
erhalten.
Jetzt habe ich ein neues
Problem. In /usr/bin ist keine VDR-biary zum
überschreiben und auch sonst nirgends. In
/usr/bin ist nur eine Verknüpfung namens VDR zu
/etc/alternatives/vdr. Das ist wiederum eine
Verknüpfung zu /usr/bin/vdr-lirc (Shell-Script).
In der ist angegeben:
#! /bin/sh exec
/usr/bin/vdr-kbd "$@"
--lirc
vielleicht kann mir jemand
sagen was ich tun muß.
Danke im
vorraus.
MfG
| |
02.01.2007 18:43 |
| |
|