Sundtek Support Forum

Deutsch => Sundtek MediaTV Pro => Treiber => Thema gestartet von: Marcus am Oktober 10, 2013, 11:42:13 Vormittag

Titel: API-Funktion set_dvbc_channel() tut's nicht
Beitrag von: Marcus am Oktober 10, 2013, 11:42:13 Vormittag
Hallo zusammen,

ich habe mir vor einiger Zeit den mediatv digital home Stick gekauft (ausschließlich für DVB-C) und bin eigentlich sehr zufrieden. Obwohl ich nicht der große Linuxer bin habe ich ihn auf einem Panda-Board ohne Probleme zum Laufen gebracht.

Nun wollte ich mir mit dem API meinen eigenen PVR schreiben. Die Header-Files sind ja im Wesentlichen selbsterklärend.

Allerdings kriege ich die Funktion set_dvbc_channel nicht dazu zu tun, was sie soll (Code wie folgt):

uint32_t fr = 137000000;
uint32_t sr = 6900000;
uint8_t quam[4] = { 'Q','6','4',0 };
uint8_t mode[5] = { 'D','V','B','C',0 };
int rv;
rv = set_dtvmode(0, mode);
rv = set_dvbc_channel(0, fr, sr, quam);
get_lock(0);

rv ist immer 0, was ja wohl ein gutes Zeichen sein sollte !?
Aber Frequenz, symbol rate und quam werden micht gesetzt, demzufolge auch kein lock.

Dagegen funktioniert das Setzen über mediaclient einwandfei:
char tuneCommand[61]="/opt/bin/mediaclient -m DVBC -f 137000000 -M Q64 -S 6900000\0";
system(tuneCommand);

Auch des Einrichten des Hardware PID-Filters funktioniert ohne Probleme:
dvb_flushpids(0);
dvb_add_pids(0,101);
dvb_add_pids(0,102);
dvb_hw_pidfilter(0,1);

Mach ich was falsch oder ist das 'n Bug?
Hat es schon jemand hingekriegt?

Freue mich über jeden Hinweis.

Grüsse, Marcus



 


 
Titel: Re:API-Funktion set_dvbc_channel() tut's nicht
Beitrag von: Sundtek am Oktober 10, 2013, 02:54:12 Nachmittag
Das erste Argument sollte der Filedescriptor des DVB Tuners sein, wir werden etwas später ein Codeschnipsel reinstellen.
Titel: Re:API-Funktion set_dvbc_channel() tut's nicht
Beitrag von: Sundtek am Oktober 10, 2013, 10:44:37 Nachmittag
Zitat
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
#include "mediaclient.h"

int main() {
  int ret;
  uint32_t frequency=121000000;
  uint32_t symbolrate=6900000;
  uint8_t *modulation="Q256";
  char device[]="/dev/dvb/adapter0/frontend0";
  fd = net_open(device, O_RDWR);
  if (fd>=0) {
      set_dvbc_channel(fd, frequency, symbolrate, modulation);
      ret = get_lock(fd);
      net_close(fd);
  }
  return 0;
}

Immer den Filedescriptor mitübergeben ansonsten klappt das ganze nicht.
Titel: Re:API-Funktion set_dvbc_channel() tut's nicht
Beitrag von: Marcus am Oktober 11, 2013, 10:09:34 Vormittag
Hallo,

vielen Dank für die schnelle Antwort!!

Jetzt funzt es einwandfrei.

Irgendwie war ich davon ausgegangen, dass ich mit der 0 als ersten Parameter auf adapter0/frontend0 referenziere.
Aber so ist es natürlich logischer.

Bei der Gelegenheit gleich noch eine Frage:
Zum Lesen des TS öffne ich adapter0/dvr0 mit open() und lese mit read().
Schickt der Stick die Daten in 512 Byte Paketen (vom System angegebene maximale Paketgröße im bulk mode)
oder in den 188 Byte Paketen des TS?
Da die Hardware kleiner Boards wie Panda oder Raspberry ja nicht zu üppig ist, wäre das zur Performance-optimierung sicher ineressant, obwohl ich damit nicht wirklich Probleme habe.

Ciao, Marcus

PS: Echt cooles Teil euer Stick
 
Titel: Re:API-Funktion set_dvbc_channel() tut's nicht
Beitrag von: Sundtek am Oktober 11, 2013, 11:25:13 Vormittag
Es sind 512 Bytes.
Man kann vom Treiber sogar eine Notifikation erhalten welches Gerät angeschlossen / abgesteckt wird (inkl Seriennummer / Devicenodes).

Der erste USB DVB Adapter muss nicht immer 0 sein (üblicherweise wenn man nur einen Stick von uns hat ist es jedoch in der Tat immer 0).

bitte immer

net_read
net_open
net_close
net_ioctl
etc.

verwenden wenn auf den Tuner zugegriffen wird, das ist die offizielle direkte API.
Das Modul libmcsimple.so exportiert alle diese Funktionen.

Man kann auch mit open/close/etc zugreifen jedoch ist die Applikation dann nicht portabel.
Der Treiber läuft ja mit verschiedenen Betriebssystemen (unter anderem auch MacOSX).
Titel: Re:API-Funktion set_dvbc_channel() tut's nicht
Beitrag von: Marcus am Oktober 11, 2013, 12:14:09 Nachmittag
Danke für die Info's!!!

Echt klasse Support bei euch ...