summaryrefslogtreecommitdiffstats
path: root/kaffeine/src/input/dvb/dvbconfig.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kaffeine/src/input/dvb/dvbconfig.cpp')
-rw-r--r--kaffeine/src/input/dvb/dvbconfig.cpp174
1 files changed, 142 insertions, 32 deletions
diff --git a/kaffeine/src/input/dvb/dvbconfig.cpp b/kaffeine/src/input/dvb/dvbconfig.cpp
index 746d745..90e0489 100644
--- a/kaffeine/src/input/dvb/dvbconfig.cpp
+++ b/kaffeine/src/input/dvb/dvbconfig.cpp
@@ -38,6 +38,7 @@
#include "dvbconfig.h"
#include "kaffeinedvbplugin.h"
+#include "dvbpanel.h"
@@ -72,6 +73,21 @@ void MPushButton::isClicked()
+MCAMButton::MCAMButton( QWidget *parent, int devNum ) : QPushButton( i18n("CAM"), parent )
+{
+ deviceNumber = devNum;
+ connect( this, SIGNAL(clicked()), this, SLOT(isClicked()) );
+}
+
+
+
+void MCAMButton::isClicked()
+{
+ emit clicked( deviceNumber );
+}
+
+
+
MComboBox::MComboBox( QWidget *parent, int devNum, int lnbNum ) : QComboBox( parent )
{
deviceNumber = devNum;
@@ -109,6 +125,12 @@ Device::Device( int anum, int tnum, fe_type_t t, const QString &n, bool as )
source = "";
canAutoscan= as;
tuningTimeout = 1500;
+ hasCAM = false;
+ camMaxService = 1;
+ secMini = 0;
+ secTwice = 0;
+ priority = 10;
+ doS2 = 0;
}
@@ -134,6 +156,7 @@ DVBconfig::DVBconfig( const QString &dvbConf )
sizeFile = 0;
categories.setAutoDelete( true );
devList.setAutoDelete( true );
+ readFirst();
startup();
readConfig();
}
@@ -187,6 +210,7 @@ void DVBconfig::startup()
int i=0, j=0, res, fdFrontend=0;
struct dvb_frontend_info info;
bool as;
+ QTime t1;
QStringList list, flist;
QString s, t;
@@ -200,6 +224,11 @@ void DVBconfig::startup()
for ( j=0; j<(int)flist.count(); j++ ) {
s = list[i];
t = flist[j];
+ if ( devList.count()==MAX_DEVICES )
+ break;
+ if ( !probeMfe && t!="frontend0" )
+ continue;
+ t1 = QTime::currentTime();
fdFrontend = open( QString("/dev/dvb/%1/%2").arg( s ).arg( t ).ascii(), O_RDWR);
if ( fdFrontend>0 ) {
if ( !(res = ioctl( fdFrontend, FE_GET_INFO, &info ) < 0) ) {
@@ -212,13 +241,14 @@ void DVBconfig::startup()
as = true;
else
as = false;
- fprintf(stderr,"/dev/dvb/%s/%s : opened ( %s )\n", s.ascii(), t.ascii(), info.name );
+ fprintf(stderr,"/dev/dvb/%s/%s : opened ( %s ) (%dms)\n", s.ascii(), t.ascii(), info.name, t1.msecsTo(QTime::currentTime()) );
devList.append( new Device( s.replace("adapter","").toInt(), t.replace("frontend","").toInt(), info.type, info.name, as ) );
}
close( fdFrontend );
}
- else
- perror( QString("/dev/dvb/%1/%2").arg( s ).arg( t ).ascii() );
+ else {
+ perror( QString("/dev/dvb/%1/%2 %3/%4").arg( s ).arg( t ).arg( errno ).arg( -EBUSY ).ascii() );
+ }
}
}
@@ -292,9 +322,9 @@ bool DVBconfig::localData()
bool DVBconfig::haveData()
{
- if ( !QDir( dvbConfigDir+"dvb-s" ).exists() || !QDir( dvbConfigDir+"dvb-c" ).exists() || !QDir( dvbConfigDir+"dvb-t" ).exists() ) {
+ if ( !QDir( dvbConfigDir+"dvb-s" ).exists() || !QDir( dvbConfigDir+"dvb-c" ).exists() || !QDir( dvbConfigDir+"dvb-t" ).exists() || !QDir( dvbConfigDir+"atsc" ).exists()) {
loadDvbData(0);
- if ( !QDir( dvbConfigDir+"dvb-s" ).exists() || !QDir( dvbConfigDir+"dvb-c" ).exists() || !QDir( dvbConfigDir+"dvb-t" ).exists() ) {
+ if ( !QDir( dvbConfigDir+"dvb-s" ).exists() || !QDir( dvbConfigDir+"dvb-c" ).exists() || !QDir( dvbConfigDir+"dvb-t" ).exists() || !QDir( dvbConfigDir+"atsc" ).exists() ) {
if ( !localData() )
return false;
}
@@ -313,6 +343,7 @@ QStringList DVBconfig::getSourcesList( fe_type_t type )
case FE_QPSK : s = "dvb-s"; break;
case FE_QAM : s = "dvb-c"; break;
case FE_OFDM : s = "dvb-t"; break;
+ case FE_ATSC : s = "atsc"; break;
default : return list;
}
list = QDir( dvbConfigDir+s ).entryList( QDir::Files, QDir::Name );
@@ -383,6 +414,14 @@ void DVBconfig::saveDvbChanOrder( int s, int col )
+void DVBconfig::readFirst()
+{
+ config->setGroup( "DVB Options" );
+ probeMfe = config->readNumEntry( "ProbeMFE", 1 );
+}
+
+
+
void DVBconfig::readConfig()
{
QSize size;
@@ -413,6 +452,8 @@ void DVBconfig::readConfig()
for ( i=0; i<(int)devList.count(); i++ ) {
devList.at(i)->source = config->readEntry( QString("DVB%1").arg(i), "" );
devList.at(i)->tuningTimeout = config->readNumEntry( QString("DVB%1_TIMEOUT").arg(i), 1500 );
+ devList.at(i)->camMaxService = config->readNumEntry( QString("DVB%1_CAM_MAX").arg(i), 1 );
+ devList.at(i)->priority = config->readNumEntry( QString("DVB%1_PRIORITY").arg(i), 10 );
if ( devList.at(i)->type!=FE_QPSK )
continue;
devList.at(i)->numLnb = config->readNumEntry( QString("DVB%1_NLNB").arg(i), 1 );
@@ -426,6 +467,9 @@ void DVBconfig::readConfig()
devList.at(i)->lnb[j].speed13v = config->readDoubleNumEntry( QString("DVB%1_LNB%2_speed13v").arg(i).arg(j), 2.5 );
devList.at(i)->lnb[j].speed18v = config->readDoubleNumEntry( QString("DVB%1_LNB%2_speed18v").arg(i).arg(j), 1.5 );
}
+ devList.at(i)->secMini = config->readNumEntry( QString("DVB%1_SEC_MINI").arg(i), 0 );
+ devList.at(i)->secTwice = config->readNumEntry( QString("DVB%1_SEC_TWICE").arg(i), 0 );
+ devList.at(i)->doS2 = config->readNumEntry( QString("DVB%1_DOS2").arg(i), 0 );
}
j = config->readNumEntry( "NumCategories", 0 );
for ( i=0; i<j; i++ )
@@ -442,6 +486,9 @@ void DVBconfig::readConfig()
devList.at(i)->usalsLatitude = usalsLatitude;
devList.at(i)->usalsLongitude = usalsLongitude;
}
+ ringBufSize = config->readNumEntry( "RingBufSize", 2 );
+ if ( ringBufSize<2 )
+ ringBufSize = 2;
}
@@ -463,9 +510,12 @@ void DVBconfig::saveConfig()
config->writeEntry( "BroadcastAddress", broadcastAddress );
config->writeEntry( "BroadcastPort", broadcastPort );
config->writeEntry( "SenderPort", senderPort );
+ config->writeEntry( "ProbeMFE", probeMfe );
for ( i=0; i<(int)devList.count(); i++ ) {
config->writeEntry( QString("DVB%1").arg(i), devList.at(i)->source );
config->writeEntry( QString("DVB%1_TIMEOUT").arg(i), devList.at(i)->tuningTimeout );
+ config->writeEntry( QString("DVB%1_PRIORITY").arg(i), devList.at(i)->priority );
+ config->writeEntry( QString("DVB%1_CAM_MAX").arg(i), devList.at(i)->camMaxService );
if ( devList.at(i)->type!=FE_QPSK )
continue;
config->writeEntry( QString("DVB%1_NLNB").arg(i), devList.at(i)->numLnb );
@@ -479,6 +529,9 @@ void DVBconfig::saveConfig()
config->writeEntry( QString("DVB%1_LNB%2_speed13v").arg(i).arg(j), devList.at(i)->lnb[j].speed13v );
config->writeEntry( QString("DVB%1_LNB%2_speed18v").arg(i).arg(j), devList.at(i)->lnb[j].speed18v );
}
+ config->writeEntry( QString("DVB%1_SEC_MINI").arg(i), devList.at(i)->secMini );
+ config->writeEntry( QString("DVB%1_SEC_TWICE").arg(i), devList.at(i)->secTwice );
+ config->writeEntry( QString("DVB%1_DOS2").arg(i), devList.at(i)->doS2 );
}
config->writeEntry( "NumCategories", categories.count() );
for ( i=0; i<(int)categories.count(); i++ ) {
@@ -494,6 +547,7 @@ void DVBconfig::saveConfig()
config->writeEntry( "UsalsLatitude", usalsLatitude );
config->writeEntry( "UsalsLongitude", usalsLongitude );
config->writeEntry( "SizeFile", sizeFile );
+ config->writeEntry( "RingBufSize", ringBufSize );
config->sync();
}
@@ -511,7 +565,7 @@ bool DVBconfig::firstRun()
-DvbConfigDialog::DvbConfigDialog( DVBconfig *dc, QWidget *parent, KaffeineDvbPlugin *p ) :
+DvbConfigDialog::DvbConfigDialog( DvbPanel *pan, DVBconfig *dc, QWidget *parent, KaffeineDvbPlugin *p ) :
KDialogBase ( IconList, i18n("DVB Settings"), Ok|Cancel, Ok, parent, "dvbConfigDialog", true, true )
{
QLabel *lab;
@@ -529,7 +583,7 @@ DvbConfigDialog::DvbConfigDialog( DVBconfig *dc, QWidget *parent, KaffeineDvbPlu
QSpinBox *spin;
KPushButton *usals;
QWidget *swidg;
- QStringList rotorList; rotorList<<i18n("No rotor")<<i18n("USALS rotor")<<i18n("Positions rotor");
+ QStringList rotorList; rotorList<<i18n("No rotor")<<i18n("USALS rotor")<<i18n("Positions rotor")<<i18n("External positionner");
dvbConfig = dc;
timeoutSpin.setAutoDelete( true );
@@ -558,7 +612,22 @@ DvbConfigDialog::DvbConfigDialog( DVBconfig *dc, QWidget *parent, KaffeineDvbPlu
case FE_ATSC : dvbType->setText( i18n("Atsc") ); break;
default : dvbType->setText( i18n("Unknown") );
}
- grid->addMultiCellWidget( dvbType, gridLine, gridLine, 1, 3 );
+ if ( dvbConfig->devList.at(i)->hasCAM ) {
+ grid->addWidget( dvbType, gridLine, 1 );
+ MCAMButton *camb = new MCAMButton( gb, i );
+ connect( camb, SIGNAL(clicked(int)), pan, SLOT(camClicked(int)) );
+ grid->addWidget( camb, gridLine, 2 );
+ }
+ else
+ grid->addMultiCellWidget( dvbType, gridLine, gridLine, 1, 3 );
+ ++gridLine;
+
+ lab = new QLabel( i18n("Tuner priority (0=Don't use):"), gb );
+ grid->addWidget( lab, gridLine, 0 );
+ spin = new QSpinBox( 0, 99, 1, gb );
+ spin->setValue( dvbConfig->devList.at(i)->priority );
+ priority.append( spin );
+ grid->addWidget( spin, gridLine, 1 );
++gridLine;
lab = new QLabel( i18n("Tuner timeout :"), gb );
@@ -572,6 +641,11 @@ DvbConfigDialog::DvbConfigDialog( DVBconfig *dc, QWidget *parent, KaffeineDvbPlu
++gridLine;
if ( dvbConfig->devList.at(i)->type==FE_QPSK ) {
+ doS2[i] = new QCheckBox( i18n("S2 capable device"), gb );
+ doS2[i]->setChecked( dvbConfig->devList.at(i)->doS2 );
+ grid->addWidget( doS2[i], gridLine, 0 );
+ ++gridLine;
+
lab = new QLabel( i18n("Number of LNBs:"), gb );
grid->addWidget( lab, gridLine, 0 );
satNumber[i] = new MSpinBox( gb, i );
@@ -583,6 +657,16 @@ DvbConfigDialog::DvbConfigDialog( DVBconfig *dc, QWidget *parent, KaffeineDvbPlu
grid->addWidget( usals, gridLine, 2 );
++gridLine;
+
+ secMini[i] = new QCheckBox( i18n("Mini DiSEqC (A-B)."), gb );
+ secMini[i]->setChecked( dvbConfig->devList.at(i)->secMini );
+ secMini[i]->setEnabled( false );
+ grid->addWidget( secMini[i], gridLine, 1 );
+ secTwice[i] = new QCheckBox( i18n("Send DiSEqC commands twice."), gb );
+ secTwice[i]->setChecked( dvbConfig->devList.at(i)->secTwice );
+ grid->addWidget( secTwice[i], gridLine, 0 );
+
+ ++gridLine;
lnb0[i] = new MPushButton( gb, i, 0 );
lnb0[i]->setGuiItem( KGuiItem(i18n("LNB 1 settings..."), icon->loadIconSet("hwinfo", KIcon::Small) ) );
@@ -853,9 +937,19 @@ DvbConfigDialog::DvbConfigDialog( DVBconfig *dc, QWidget *parent, KaffeineDvbPlu
vb = new QVBoxLayout( page, 6, 6 );
gb = new QGroupBox( "", page );
grid = new QGridLayout( gb, 1, 1, 20, 6 );
+
+ probeMfe = new QCheckBox( i18n("Probe Multiple-Frontends (Restart required)."), gb );
+ probeMfe->setChecked( dvbConfig->probeMfe );
+ grid->addWidget( probeMfe, 0, 0 );
+
+ lab = new QLabel( i18n("LiveShow ringbuffer size (MB) :"), gb );
+ grid->addWidget( lab, 1, 0 );
+ ringBufSize = new QSpinBox( 2, 99, 1, gb );
+ ringBufSize->setValue( dvbConfig->ringBufSize );
+ grid->addWidget( ringBufSize, 1, 1 );
lab = new QLabel( i18n("Default charset (restart needed):"), gb );
- grid->addWidget( lab, 0, 0 );
+ grid->addWidget( lab, 2, 0 );
charsetComb = new QComboBox( gb );
charsetComb->insertItem( "ISO8859-1" );
charsetComb->insertItem( "ISO6937" );
@@ -863,19 +957,19 @@ DvbConfigDialog::DvbConfigDialog( DVBconfig *dc, QWidget *parent, KaffeineDvbPlu
charsetComb->setCurrentItem( 0 );
else if ( dvbConfig->defaultCharset=="ISO6937" )
charsetComb->setCurrentItem( 1 );
- grid->addWidget( charsetComb, 0, 1 );
+ grid->addWidget( charsetComb, 2, 1 );
lab = new QLabel( i18n("Update scan data:"), gb );
- grid->addWidget( lab, 1, 0 );
+ grid->addWidget( lab, 3, 0 );
updateBtn = new KPushButton( gb );
updateBtn->setGuiItem( KGuiItem(i18n("Download"), icon->loadIconSet("khtml_kget", KIcon::Small) ) );
- grid->addWidget( updateBtn, 1, 1 );
+ grid->addWidget( updateBtn, 3, 1 );
lab = new QLabel( i18n("Dump epg's events to \n~/kaffeine_dvb_events.tx:"), gb );
- grid->addWidget( lab, 2, 0 );
+ grid->addWidget( lab, 4, 0 );
dumpBtn = new KPushButton( gb );
dumpBtn->setGuiItem( KGuiItem(i18n("Dump"), icon->loadIconSet("filesave", KIcon::Small) ) );
- grid->addWidget( dumpBtn, 2, 1 );
+ grid->addWidget( dumpBtn, 4, 1 );
vb->addWidget( gb );
vb->addItem( new QSpacerItem( 20, 20, QSizePolicy::Ignored, QSizePolicy::Ignored ) );
@@ -1039,6 +1133,8 @@ void DvbConfigDialog::satNumberChanged( int value, int devNum )
rotor1[devNum]->setEnabled( value > 1 );
rotor2[devNum]->setEnabled( value > 2 );
rotor3[devNum]->setEnabled( value > 3 );
+
+ secMini[devNum]->setEnabled( value==2 );
}
@@ -1103,6 +1199,9 @@ void DvbConfigDialog::accept()
switch (dvbConfig->devList.at(i)->type) {
case FE_QPSK: {
dvbConfig->devList.at(i)->numLnb = satNumber[i]->value();
+ dvbConfig->devList.at(i)->secMini = secMini[i]->isChecked();
+ dvbConfig->devList.at(i)->secTwice = secTwice[i]->isChecked();
+ dvbConfig->devList.at(i)->doS2 = doS2[i]->isChecked();
if ( dvbConfig->devList.at(i)->lnb[3].rotorType==0 ) {
dvbConfig->devList.at(i)->lnb[3].source.clear();
dvbConfig->devList.at(i)->lnb[3].source.append(sat3[i]->currentText());
@@ -1140,6 +1239,7 @@ void DvbConfigDialog::accept()
}
dvbConfig->devList.at(i)->source = s;
dvbConfig->devList.at(i)->tuningTimeout = timeoutSpin.at(i)->value();
+ dvbConfig->devList.at(i)->priority = priority.at(i)->value();
}
dvbConfig->recordDir = recordDirLe->text();
@@ -1157,6 +1257,8 @@ void DvbConfigDialog::accept()
dvbConfig->broadcastAddress = broadcastLe->text().stripWhiteSpace();
dvbConfig->broadcastPort = bportSpin->value();
dvbConfig->senderPort = sportSpin->value();
+ dvbConfig->probeMfe = probeMfe->isChecked();
+ dvbConfig->ringBufSize = ringBufSize->value();
dvbConfig->saveConfig();
done( Accepted );
}
@@ -1403,22 +1505,24 @@ RotorConfig::RotorConfig( Device *d, DVBconfig *c, int lnb, QWidget *parent ) :
vb->addWidget( resetBtn );
vb->addItem( new QSpacerItem( 20, 20, QSizePolicy::Fixed, QSizePolicy::Fixed ) );
- grid = new QGridLayout( 0, 1, 1 );
- lab = new QLabel( i18n("13V rotor speed:"), page );
- grid->addWidget( lab, 0, 0 );
- speed13 = new QLineEdit( page );
- speed13->setText( QString().setNum( dev->lnb[lnbNum].speed13v ) );
- grid->addWidget( speed13, 0, 1 );
- lab = new QLabel( i18n("sec./ °"), page );
- grid->addWidget( lab, 0, 2 );
- lab = new QLabel( i18n("18V rotor speed:"), page );
- grid->addWidget( lab, 1, 0 );
- speed18 = new QLineEdit( page );
- speed18->setText( QString().setNum( dev->lnb[lnbNum].speed18v ) );
- grid->addWidget( speed18, 1, 1 );
- lab = new QLabel( i18n("sec./ °"), page );
- grid->addWidget( lab, 1, 2 );
- vb->addLayout( grid );
+ if ( dev->lnb[lnbNum].rotorType!=3 ) {
+ grid = new QGridLayout( 0, 1, 1 );
+ lab = new QLabel( i18n("13V rotor speed:"), page );
+ grid->addWidget( lab, 0, 0 );
+ speed13 = new QLineEdit( page );
+ speed13->setText( QString().setNum( dev->lnb[lnbNum].speed13v ) );
+ grid->addWidget( speed13, 0, 1 );
+ lab = new QLabel( i18n("sec./ °"), page );
+ grid->addWidget( lab, 0, 2 );
+ lab = new QLabel( i18n("18V rotor speed:"), page );
+ grid->addWidget( lab, 1, 0 );
+ speed18 = new QLineEdit( page );
+ speed18->setText( QString().setNum( dev->lnb[lnbNum].speed18v ) );
+ grid->addWidget( speed18, 1, 1 );
+ lab = new QLabel( i18n("sec./ °"), page );
+ grid->addWidget( lab, 1, 2 );
+ vb->addLayout( grid );
+ }
vb->addItem( new QSpacerItem( 20, 20, QSizePolicy::Ignored, QSizePolicy::Ignored ) );
@@ -1462,8 +1566,14 @@ void RotorConfig::accept()
{
QListViewItem *it;
- dev->lnb[lnbNum].speed18v = speed18->text().toDouble();
- dev->lnb[lnbNum].speed13v = speed13->text().toDouble();
+ if ( dev->lnb[lnbNum].rotorType!=3 ) {
+ dev->lnb[lnbNum].speed18v = speed18->text().toDouble();
+ dev->lnb[lnbNum].speed13v = speed13->text().toDouble();
+ }
+ else {
+ dev->lnb[lnbNum].speed18v = 0;
+ dev->lnb[lnbNum].speed13v = 0;
+ }
dev->lnb[lnbNum].source.clear();
dev->lnb[lnbNum].position.clear();
for ( it=listView->firstChild(); it; it=it->nextSibling() ) {