Nach dem einrichten des FB's und Tune(frequency......) bild?
-
- Interessierter
- Beiträge: 26
- Registriert: Mittwoch 7. Januar 2004, 05:24
Nach dem einrichten des FB's und Tune(frequency......) bild?
Also wie schaffe ich es nach dem initialiseren
des FB's ein Sender angezeigt zu bekommen
(senderliste vorhanden + tune(frequncy ... etc integriert)
ich kann zwar den sender einstellen über die tune() funktion (modifikation der lcars version)
aber es bleibt duster *g*
es fehlt noch sowas wie nennen wir es mal BILD & TON-Routing...
irgendwie vpid apid auswahl technisch was aber ich bin da in den sources noch nicht fündig geworden ....
wär da für hinweise,tips und beispiel-schnippsel dankbar.
mfg Death
des FB's ein Sender angezeigt zu bekommen
(senderliste vorhanden + tune(frequncy ... etc integriert)
ich kann zwar den sender einstellen über die tune() funktion (modifikation der lcars version)
aber es bleibt duster *g*
es fehlt noch sowas wie nennen wir es mal BILD & TON-Routing...
irgendwie vpid apid auswahl technisch was aber ich bin da in den sources noch nicht fündig geworden ....
wär da für hinweise,tips und beispiel-schnippsel dankbar.
mfg Death
-
- Contributor
- Beiträge: 1608
- Registriert: Samstag 28. Juli 2001, 00:00
-
- Senior Member
- Beiträge: 5071
- Registriert: Dienstag 18. September 2001, 00:00
-
- Interessierter
- Beiträge: 26
- Registriert: Mittwoch 7. Januar 2004, 05:24
hmmmm
also ich hab mir das jetzt mal zusammen gesucht
ich hol aus der nutreon-senderliste die Frequenz, TSID,.... Diseq...
(die daten sind die selbe wie in der neutrino senderliste und das sie sozusagen als binary gespeichert sind)
tune(frequenz.......) ....
danach mach ich ein readPAT ?!...
um an die PMT Werte zukommen
mit dem PMT-Wert mach ich dann ein readPMT ...
womit ich dann die Video/Audio-Pid's bekomme
setze die filter auf die erhaltenen PID's und freu
mich übers Bild.
?
hm kann einer erklären was PAT PMT ist ?
hab so den verdacht PAT irgendein Informationsblock
den man für die Trennung der weiteren daten auf der frequenz benötigt und PMT ist dann der eigentlich gewollte info block ?!
oder weis jemand wo ich das genau nachlesen kann?
(die linuxtv.org api erzählt über das thema leider nicht so viel)
ich hol aus der nutreon-senderliste die Frequenz, TSID,.... Diseq...
(die daten sind die selbe wie in der neutrino senderliste und das sie sozusagen als binary gespeichert sind)
tune(frequenz.......) ....
danach mach ich ein readPAT ?!...
um an die PMT Werte zukommen
mit dem PMT-Wert mach ich dann ein readPMT ...
womit ich dann die Video/Audio-Pid's bekomme
setze die filter auf die erhaltenen PID's und freu
mich übers Bild.
?
hm kann einer erklären was PAT PMT ist ?
hab so den verdacht PAT irgendein Informationsblock
den man für die Trennung der weiteren daten auf der frequenz benötigt und PMT ist dann der eigentlich gewollte info block ?!
oder weis jemand wo ich das genau nachlesen kann?
(die linuxtv.org api erzählt über das thema leider nicht so viel)
-
- Contributor
- Beiträge: 1608
- Registriert: Samstag 28. Juli 2001, 00:00
4 Service Information (SI) description
ISO/IEC 13818-1 [1] specifies SI which is referred to as PSI. The PSI data provides information to enable automatic
configuration of the receiver to demultiplex and decode the various streams of programs within the multiplex.
The PSI data is structured as four types of table. The tables are transmitted in sections.
1) Program Association Table (PAT):
- for each service in the multiplex, the PAT indicates the location (the Packet Identifier (PID) values of the
Transport Stream (TS) packets) of the corresponding Program Map Table (PMT). It also gives the
location of the Network Information Table (NIT).
2) Conditional Access Table (CAT):
- the CAT provides information on the CA systems used in the multiplex; the information is private (not
defined within the present document) and dependent on the CA system, but includes the location of the
EMM stream, when applicable.
3) Program Map Table (PMT):
- the PMT identifies and indicates the locations of the streams that make up each service, and the location
of the Program Clock Reference fields for a service.
4) Network Information Table (NIT):
- the location of the NIT is defined in the present document in compliance with ISO/IEC 13818-1 [1]
specification, but the data format is outside the scope of ISO/IEC 13818-1 [1]. It is intended to provide
information about the physical network. The syntax and semantics of the NIT are defined in the present
document.
quelle : ETSI EN 300 468 V1.5.1
ISO/IEC 13818-1 [1] specifies SI which is referred to as PSI. The PSI data provides information to enable automatic
configuration of the receiver to demultiplex and decode the various streams of programs within the multiplex.
The PSI data is structured as four types of table. The tables are transmitted in sections.
1) Program Association Table (PAT):
- for each service in the multiplex, the PAT indicates the location (the Packet Identifier (PID) values of the
Transport Stream (TS) packets) of the corresponding Program Map Table (PMT). It also gives the
location of the Network Information Table (NIT).
2) Conditional Access Table (CAT):
- the CAT provides information on the CA systems used in the multiplex; the information is private (not
defined within the present document) and dependent on the CA system, but includes the location of the
EMM stream, when applicable.
3) Program Map Table (PMT):
- the PMT identifies and indicates the locations of the streams that make up each service, and the location
of the Program Clock Reference fields for a service.
4) Network Information Table (NIT):
- the location of the NIT is defined in the present document in compliance with ISO/IEC 13818-1 [1]
specification, but the data format is outside the scope of ISO/IEC 13818-1 [1]. It is intended to provide
information about the physical network. The syntax and semantics of the NIT are defined in the present
document.
quelle : ETSI EN 300 468 V1.5.1
-
- Interessierter
- Beiträge: 26
- Registriert: Mittwoch 7. Januar 2004, 05:24
thx =)
thx =) für die infos hat mir doch extrem geholfen zu checken was da abgeht *g*
Also könnte man sagen für unverschlüsselte Programm geht das so:
1. Tune(Frequenz, Diseq, TransponderID,.....)
2. PAT Lesen
3. PMT Lesen
4. Tune(VPid,APid)
5. Bild ist da ...
MfG Death
Also könnte man sagen für unverschlüsselte Programm geht das so:
1. Tune(Frequenz, Diseq, TransponderID,.....)
2. PAT Lesen
3. PMT Lesen
4. Tune(VPid,APid)
5. Bild ist da ...
MfG Death
-
- Contributor
- Beiträge: 1608
- Registriert: Samstag 28. Juli 2001, 00:00
richtig
wobei du sohar pat und pmt weglassen kanst
wenn du die audio und video id es kennst
für die dvb2000 gabs früher so senderlisten
vorteil : es tuned ein wenig schneller weil pat pmt ja nicht ausgewertet werden müssen
nachteil: wenn sich was ändert bekommt man es nicht mit
geschweigeden dass es ab und zu 2 audio pid es gibt oder nicht etc ..
wobei du sohar pat und pmt weglassen kanst
wenn du die audio und video id es kennst
für die dvb2000 gabs früher so senderlisten
vorteil : es tuned ein wenig schneller weil pat pmt ja nicht ausgewertet werden müssen
nachteil: wenn sich was ändert bekommt man es nicht mit
geschweigeden dass es ab und zu 2 audio pid es gibt oder nicht etc ..
-
- Interessierter
- Beiträge: 26
- Registriert: Mittwoch 7. Januar 2004, 05:24
hmmm
ja das dacht ich mir schon also bringts das nur wenn ich pmt und pat auslese ... :| hmm ... oder ich die senderliste mit update-raten versehe ... *denk* ... naja später evtl mal das für den anfang etwas zuviel aufwand *g* thx für die hilfe
ich werd das gleich mal testen
ich werd das gleich mal testen
-
- Interessierter
- Beiträge: 26
- Registriert: Mittwoch 7. Januar 2004, 05:24
geht nicht :(
hab den Tune auf die Frequenz gemacht ....
aber wenn ich dann die PAT auslesen will bekommt er keine Daten ....
:| hab ich irgendwas vergessen? ... an der PAT-Funktion liegts glaub ich nicht die is von LCARS fast 1:1 übernommen.
aber wenn ich dann die PAT auslesen will bekommt er keine Daten ....
:| hab ich irgendwas vergessen? ... an der PAT-Funktion liegts glaub ich nicht die is von LCARS fast 1:1 übernommen.
-
- Interessierter
- Beiträge: 26
- Registriert: Mittwoch 7. Januar 2004, 05:24
So...
Hier mal der aktuelle Code:
hier der output auf der box:
Code: Alles auswählen
#include <stdio.h>
#include <fcntl.h>
#include <signal.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <sys/mman.h>
#include <memory.h>
#include <linux/kd.h>
#include <stdint.h>
#include <dbox/fb.h>
#include <linux/fb.h>
#include <linux/vt.h>
#include <stdint.h>
#include <string>
#include <sys/poll.h>
#include <frontend.h>
#include <video.h>
#include <pat.h>
#include <pmt.h>
int servicecount = 0;
int frontend;
fe_type type;
struct _tsdata {
// Transponder Block
char satname[20];
char diseq,position;
unsigned short int transponderid,onid;
unsigned int frequency;
char inversion;
unsigned int symbol_rate;
char fec,polar;
unsigned short int serviceid;
char name[30];
char servicetyp;
};
typedef _tsdata servdata;
servdata services[5999];
void load_services() {
FILE *f;
int i = 0;
int j;
f = fopen("services.lst","r");
while (!feof(f)) {
fread(&services[i],sizeof(struct _tsdata),1,f);
/*
printf("%d = ",i);
for (j=0;j<services[i].name[0];j++) printf("%c",services[i].name[j+1]);
printf(" ");
*/
i++;
}
fclose(f);
servicecount = i;
printf("Services found: %d\n",i);
}
fe_code_rate_t getFEC(int fec)
{
switch (fec) {
case -1:
case 15: return FEC_NONE;
case 0: return FEC_AUTO;
case 1: return FEC_1_2;
case 2: return FEC_2_3;
case 3: return FEC_3_4;
case 4: return FEC_5_6;
case 5: return FEC_7_8;
default: return FEC_AUTO;
}
}
bool tune(unsigned int frequ, unsigned int symbol, int polarization, int fec, int dis)
{
struct dvb_frontend_parameters frontp;
struct dvb_frontend_event event;
struct dvb_diseqc_master_cmd cmd;
fe_sec_mini_cmd_t mini_cmd;
fe_sec_tone_mode_t tone_mode;
fe_sec_voltage_t voltage;
if (type == FE_QPSK)
{
if (frequ > 11700) {
frontp.frequency = (frequ * 1000)-10600000;
tone_mode = SEC_TONE_ON;
} else {
frontp.frequency = (frequ * 1000)-9750000;
tone_mode = SEC_TONE_OFF;
}
if (polarization == 0) voltage = SEC_VOLTAGE_18;
else voltage = SEC_VOLTAGE_13;
frontp.u.qpsk.fec_inner = getFEC(fec);
frontp.u.qpsk.symbol_rate = symbol * 1000;
// diseqc
cmd.msg_len = 4;
cmd.msg[0] = 0xe0;
cmd.msg[1] = 0x10;
cmd.msg[2] = 0x38;
cmd.msg[3] = 0xf0 | ((dis * 4) & 0x0f)
| ((voltage == SEC_VOLTAGE_18) ? 2 : 0)
| ((tone_mode == SEC_TONE_ON) ? 1 : 0);
mini_cmd = (dis / 4) % 2 ? SEC_MINI_B : SEC_MINI_A;
if (ioctl(frontend, FE_SET_TONE, SEC_TONE_OFF) < 0) perror("FE_SET_TONE");
if (ioctl(frontend, FE_SET_VOLTAGE, voltage) < 0) perror("FE_SET_VOLTAGE");
usleep(15 * 1000);
if (ioctl(frontend, FE_DISEQC_SEND_MASTER_CMD, &cmd) < 0) perror("FE_DISEQC_SEND_MASTER_CMD");
usleep(15 * 1000);
if (ioctl(frontend, FE_DISEQC_SEND_BURST, mini_cmd) < 0) perror("FE_DISEQC_SEND_BURST");
usleep(15 * 1000);
if (ioctl(frontend, FE_SET_TONE, tone_mode) < 0) perror("FE_SET_TONE");
}
if (type == FE_QAM) {
frontp.frequency = frequ * 100000;
frontp.u.qam.symbol_rate = symbol * 1000;
frontp.u.qam.fec_inner = getFEC(fec);
frontp.u.qam.modulation = QAM_64;
}
// -- Spektrum Inversion
// -- should be configurable, fixed for now (rasc)
frontp.inversion = INVERSION_AUTO;
while (1) {
if (ioctl(frontend, FE_GET_EVENT, &event) == -1) break;
}
if (ioctl(frontend, FE_SET_FRONTEND, &frontp) < 0) {
perror("FE_SET_FRONTEND");
return 0;
}
do { memset(&event, 0, sizeof(event));
ioctl(frontend, FE_GET_EVENT, &event);
} while (!(event.status & (FE_HAS_LOCK | FE_TIMEDOUT)));
printf (" Frequ: %u ifreq: %u Pol: %d FEC: %d Sym: %u dis: %d\n",
frequ, frontp.frequency, (int)polarization , (int)fec,
symbol, (int)dis);
printf ("... Tuner-Lock Status: %d\n",event.status);
uint16_t state1, state2;
if (ioctl(frontend, FE_READ_SNR, &state1) < 0) perror("FE_READ_SNR");
if (ioctl(frontend, FE_READ_SIGNAL_STRENGTH, &state2) < 0) perror("FE_READ_SIGNAL_STRENGTH");
printf ("... S/N: %d SigStrength: %d \n",state1,state2);
if (event.status & FE_HAS_LOCK) {
printf("Has lock");
} else {
printf("Doesnt have lock");
}
return (event.status & FE_HAS_LOCK);
}
int gochannel(int idx) {
int i = 0;
int j = services[idx].name[0];
int pmtc = 0;
pat pat;
pmt pmt;
pmt_data pmtd;
printf("Switching to ");
while (i < j) {
i++;
printf("%c",services[idx].name[i]);
}
printf("\n");
printf("Tuning...");
tune( services[i].frequency, services[i].symbol_rate, services[i].polar,
services[i].fec, services[i].diseq );
/* die tune funktion ist auch mehr oder weniger og. lcars :-| */
printf("ok\nreadPAT ..");
pat.readPAT();
/* ^^^^^^ naja das geht nicht irgendwas muss ich vergessenhaben ?!?
readPAT ist org. Lcars ... :-| timeout ist auf 10 sek. erhöht ....
müsste also gehn
*/
printf("ok\ngetPMT = ");
pmtc = pat.getPMT(services[i].serviceid);
printf("%d!\n",pmtc);
printf("Fetching Pids ...");
pmtd = pmt.readPMT(pmtc);
printf("ok\n");
printf("Service Infos:\n");
printf("PMT: %d\nSID: %d\nPID-Counter: %d\n",pmtd.pmt,pmtd.sid,pmtd.pid_counter);
for (i=0;i<pmtd.pid_counter;i++) {
printf("Nr.: %d\n Type: %d\n PID: %d\n SubType: %d\n Componet: %d\n ECM-Counter:\n",
i,pmtd.type[i],pmtd.PID[i],pmtd.subtype[i],pmtd.component[i]);
}
// tunePids();
}
main() {
dvb_frontend_info info;
// 1. Laden der Services
printf("Loading Services...");
load_services(); // << ueberrascht ?? *g*
printf("ok\n");
// 2. Oeffnen der dings ...
printf("Opening Device...");
frontend = open("/dev/dvb/adapter0/frontend0", O_RDWR|O_NONBLOCK);
if (frontend < 0) {
perror("FrontEnd-Device could not be open'd\n");
exit(1);
}
printf("ok [%d]\n",frontend);
printf("Trying infos...");
if (ioctl(frontend, FE_GET_INFO, &info))
{
perror("io2ctl");
exit(1);
}
printf("ok\n");
type = info.type;
// 3. Umschalten
printf("Umschalten\n");
for (int i = 0; i < 800; i = i + 10) gochannel(i);
// 4. Schliessen
printf("Schliessen\n");
close(frontend);
}
Code: Alles auswählen
# ./tuner1
Loading Services...Services found: 897
ok
Opening Device...ok [3]
Trying infos...ok
Umschalten
Switching to CLASSICA
Tuning... Frequ: 2701177856 ifreq: 3927794112 Pol: 0 FEC: 3 Sym: 3768427265 dis: 0
... Tuner-Lock Status: 32
... S/N: 0 SigStrength: 32125
Doesnt have lockok
readPAT ..Reading PAT from /dev/dvb/adapter0/demux0
PAT Read successfull!(-1)Transport ID: 0
Creating pat_list...
ok
getPMT = Pat list empty?!
0!
..... das geht dann immer so weiter
-
- Senior Member
- Beiträge: 1282
- Registriert: Montag 12. November 2001, 00:00
-
- Interessierter
- Beiträge: 26
- Registriert: Mittwoch 7. Januar 2004, 05:24
ohhhhhhhhhhhhhhhhhhhh mein kopf *autsch*
aua aua aua *g* sowas tut weh ....
aber das passiert halt wenn man nachts um 5°° noch coded *ggggg*
big thx
da geht wohl was beim auslesen schief ;D
aber das passiert halt wenn man nachts um 5°° noch coded *ggggg*
big thx
![smile :)](./images/smilies/icon_smile.gif)
-
- Interessierter
- Beiträge: 26
- Registriert: Mittwoch 7. Januar 2004, 05:24
Linux-Binary:
0 = CLASSICA Freq: 12069641
0 = BEATE-UHSE.TV Freq: 12069641
Services found: 1
DBox-Binary:
0 = CLASSICA Freq: 153860096
0 = BEATE-UHSE.TV Freq: 153860096
Services found: 1
:| beides mal die selben datentypen *seufz* tja so kanns gehn ...
jetzt muss ich wohl erstmal rauskreigen warum der beim compilen für die box das so verhunzt ... *g* sorry aber ich bin da noch etwas dau ..
0 = CLASSICA Freq: 12069641
0 = BEATE-UHSE.TV Freq: 12069641
Services found: 1
DBox-Binary:
0 = CLASSICA Freq: 153860096
0 = BEATE-UHSE.TV Freq: 153860096
Services found: 1
:| beides mal die selben datentypen *seufz* tja so kanns gehn ...
jetzt muss ich wohl erstmal rauskreigen warum der beim compilen für die box das so verhunzt ... *g* sorry aber ich bin da noch etwas dau ..
-
- Interessierter
- Beiträge: 26
- Registriert: Mittwoch 7. Januar 2004, 05:24
hmmm
es funktioniert und funktioniert nicht
werd noch ganz plem plem
also irgendwas geht noch schief :\
am PAT auslesen liegts vermutlich nicht
*grübels* weil er ja 0 Byte ausliesst ...
hmm tuned wird jetzt fix rtl2 :| aber irgendwie
reicht das nicht um die PAT zu bekommen :\ aber was könnte da noch sein ?!?! :\ MUSS man vorher die CA initialiseren um die PAT zu bekommen ??
![evil :evil:](./images/smilies/icon_evil.gif)
werd noch ganz plem plem
![oh :o](./images/smilies/icon_eek.gif)
also irgendwas geht noch schief :\
am PAT auslesen liegts vermutlich nicht
*grübels* weil er ja 0 Byte ausliesst ...
hmm tuned wird jetzt fix rtl2 :| aber irgendwie
reicht das nicht um die PAT zu bekommen :\ aber was könnte da noch sein ?!?! :\ MUSS man vorher die CA initialiseren um die PAT zu bekommen ??
-
- Interessierter
- Beiträge: 26
- Registriert: Mittwoch 7. Januar 2004, 05:24
Problem entdeckt
also das problem ist wohl
"doenst have lock"
weis jemand woran das alles liegen kann ?
:| bzw warum ich kein lock bekomme ? [die dbox2 funktioniert *g* daran liegts nicht]
muss man vorher irgendwas initialiseren (Frontend device wird geöffnet und der fe_type abgefragt)
"doenst have lock"
weis jemand woran das alles liegen kann ?
:| bzw warum ich kein lock bekomme ? [die dbox2 funktioniert *g* daran liegts nicht]
muss man vorher irgendwas initialiseren (Frontend device wird geöffnet und der fe_type abgefragt)
-
- Interessierter
- Beiträge: 26
- Registriert: Mittwoch 7. Januar 2004, 05:24
okay..........
habs geschafft *g*
war ein problem mit den daten *fg*
die tune( funktion von lcars is also wirklich nicht so gut *gg*
war ein problem mit den daten *fg*
die tune( funktion von lcars is also wirklich nicht so gut *gg*